/**
 * Product runtime facade — wraps a low-level adapter (which owns the agent
 * loop and session state) with the contract that worker/main-thread callers
 * see: snapshot/session-context emission and host-tool request fan-out.
 */
import { type AgentConfiguration, type AgentEvent, type AgentSubmitOptions, type EmbeddedAgentRuntime } from '../contracts/agent-api.js';
import type { AgentSessionContext } from '../contracts/agent-session-store.js';
import type { AgentSnapshot } from '../contracts/agent-snapshot.js';
import type { PendingHostToolRequests } from './pending-host-tool-requests.js';
/** Lower-level surface the facade adapts; one implementation per embedded runtime. */
export interface EmbeddedAgentRuntimeAdapter {
    abort(): Promise<void>;
    configure(configuration: AgentConfiguration): Promise<void>;
    dispose(): void;
    getSnapshot(): AgentSnapshot;
    getSessionContext(): AgentSessionContext;
    resumeWithHostToolResult(result: Parameters<PendingHostToolRequests['applyResult']>[0]): Promise<void>;
    submit(prompt: string, options?: AgentSubmitOptions): Promise<void>;
    subscribeSnapshotSource(listener: () => void): () => void;
    /**
     * Optional event source for `AgentEvent`s the adapter generates outside
     * the snapshot/session-context loop (run-stats, future per-turn events).
     * Same subscribe shape as `subscribeSnapshotSource` — the facade
     * subscribes; the adapter pushes when something happens. Adapters that
     * have no such events can skip the field.
     */
    subscribeExtraEvents?(listener: (event: AgentEvent) => void): () => void;
}
/** Adapt a `EmbeddedAgentRuntimeAdapter` into the public runtime contract. */
export declare function createEmbeddedAgentRuntime(adapter: EmbeddedAgentRuntimeAdapter, pendingHostToolRequests: PendingHostToolRequests): EmbeddedAgentRuntime;
//# sourceMappingURL=embedded-agent-facade.d.ts.map