import type { DeliverHookPayload, SessionCapabilities, TurnCaller } from "#channel/types.js";
import type { AgentWorkflowRetentionDefinition } from "#shared/agent-definition.js";
import type { RunMode } from "#shared/run-mode.js";
import type { DurableSessionState } from "#execution/durable-session-store.js";
import { type SessionInboxHandle } from "#execution/session-inbox/inbox.js";
import type { WorkflowEntryResult } from "#execution/session/entry-input.js";
/**
 * Who to tell when this owner exits. The original run anchors the public
 * stream itself; a successor signals the original run. A `self` anchor may
 * also name a `notify` step that runs with the final result, which lets an
 * importer settle whatever predecessor still holds the stream open.
 */
export type SessionAnchor = {
    readonly kind: "self";
    readonly notify?: (result: WorkflowEntryResult) => Promise<void>;
} | {
    readonly kind: "successor";
};
export interface SessionBoot {
    readonly anchor: SessionAnchor;
    readonly caller: TurnCaller | undefined;
    readonly capabilities?: SessionCapabilities;
    readonly deploymentId: string;
    readonly initialInput: DeliverHookPayload | undefined;
    /** Parks on the inbox before any session-scoped lifecycle work. */
    readonly awaitFirstMessage: boolean;
    readonly mode: RunMode;
    readonly retention?: AgentWorkflowRetentionDefinition;
    readonly serializedContext: Record<string, unknown>;
    readonly sessionId: string;
    readonly sessionState: DurableSessionState;
    readonly sessionTimeoutDeadline?: Date;
    readonly sessionTimeoutMs: number | false;
    readonly sessionWritable: WritableStream<Uint8Array>;
}
/** Runs an already prepared owner against its session's existing stream. */
export declare function runPreparedSession(boot: SessionBoot, inbox: SessionInboxHandle): Promise<WorkflowEntryResult>;
/**
 * Terminal path for a boot that failed before the session loop could run.
 * The caller is re-resolved from context because no turn ever bound it.
 */
export declare function failSession(input: {
    readonly error: unknown;
    readonly mode: RunMode;
    readonly serializedContext: Record<string, unknown>;
    readonly sessionId: string;
    readonly sessionState: DurableSessionState | undefined;
    readonly sessionWritable: WritableStream<Uint8Array>;
}): Promise<never>;
