import type { ModelMessage } from "ai";
import type { HarnessToolDefinition } from "#harness/execute-tool.js";
import type { HandleMessageStreamEvent, SessionStartedStreamEvent } from "#protocol/message.js";
import type { ResolvedDynamicToolResolver } from "#runtime/types.js";
import type { ContextContainer } from "#context/container.js";
import type { DurableDynamicToolMetadata } from "#context/keys.js";
/**
 * Reconstructs tool definitions from durable metadata using
 * registered step functions. No resolver re-invocation — the
 * execute function is looked up by step ID and called with stored
 * closure vars.
 */
export declare function replayDynamicSessionTools(metadata: readonly DurableDynamicToolMetadata[], _resolvers: readonly ResolvedDynamicToolResolver[]): readonly HarnessToolDefinition[];
/**
 * Dispatches a stream event to dynamic tool resolvers. Each
 * resolver's metadata replaces its slot (by slug) in the
 * scope-appropriate durable key. The tool-loop calls
 * {@link buildDynamicTools} to assemble the effective toolset.
 */
export declare function dispatchDynamicToolEvent(input: {
    readonly ctx: ContextContainer;
    readonly resolvers: readonly ResolvedDynamicToolResolver[];
    readonly event: HandleMessageStreamEvent;
    readonly messages: readonly ModelMessage[];
}): Promise<void>;
/**
 * Re-resolves session-scoped dynamic tools when a durable session reaches a
 * different runtime revision. The refresh is internal: lifecycle consumers
 * still observe exactly one `session.started` event for the session.
 */
export declare function refreshDynamicSessionToolsForRuntimeRevision(input: {
    readonly ctx: ContextContainer;
    readonly resolvers: readonly ResolvedDynamicToolResolver[];
    readonly event: SessionStartedStreamEvent;
    readonly messages: readonly ModelMessage[];
    readonly runtimeRevision: string;
}): Promise<void>;
