import { type ManagedTerminalBinding } from "./managed-session.js"; import { type TerminalControlEvidence } from "./terminal-control-ref.js"; export declare const DEFERRED_FOREGROUND_TRANSFER_SCHEMA: "agent-knock-knock/deferred-foreground-transfer"; export declare const DEFERRED_FOREGROUND_TRANSFER_VERSION: 2; export declare const DEFERRED_FOREGROUND_TRANSFER_LEGACY_VERSION: 1; export type DeferredForegroundTransferStatus = "prepared" | "source_reserved" | "target_prepared" | "dispatch_started" | "committed" | "resolved" | "aborted" | "abort_resolved" | "uncertain" | "user_abandoned"; export type DeferredForegroundUserAbandonmentOriginStatus = Exclude; export type DeferredForegroundTransferInputStage = "none" | "dispatch_started" | "text_injected" | "enter_dispatched" | "agent_accepted"; export type DeferredForegroundTransferSourceKind = "status_card_only" | "candidate_rollout_quiescent"; export type DeferredForegroundTransferSourceRolloutAuthority = "present" | "explicitly_abandoned_predecessor"; export interface DeferredForegroundTransferSourceTurnAuthority { turn_id: string; status: "idle" | "failed" | "closed" | "cancelled"; updated_at: string; binding_id: string; binding_generation: number; native_thread_id: string; turn_fingerprint: string; } /** * Durable authority for replacing one quiescent Codex Session with a fresh * provisional Session around an ordinary task submission. Version 1 records * cover status-card-only sources; version 2 also freezes exact historical Turn * authority for rollout-backed sources. * * This record deliberately lives outside native lifecycle transitions. It * never authorizes a slash command or terminal-input replay; the ordinary * terminal dispatch ledger remains the sole transport receipt authority. */ export interface DeferredForegroundTransfer { schema: typeof DEFERRED_FOREGROUND_TRANSFER_SCHEMA; version: typeof DEFERRED_FOREGROUND_TRANSFER_LEGACY_VERSION | typeof DEFERRED_FOREGROUND_TRANSFER_VERSION; transfer_id: string; revision?: number; status: DeferredForegroundTransferStatus; input_stage: DeferredForegroundTransferInputStage; terminal_id: string; terminal_endpoint: TerminalControlEvidence; process_pid: number; process_uuid: string; process_birth: string; workspace: string; source_session_id: string; source_expected_revision: number; source_binding_token: string; source_previous_last_transition_id?: string; source_before_binding: ManagedTerminalBinding; source_kind?: DeferredForegroundTransferSourceKind; source_turn_history?: DeferredForegroundTransferSourceTurnAuthority[]; source_rollout_authority?: DeferredForegroundTransferSourceRolloutAuthority; source_abandonment_fingerprint?: string; target_session_id: string; target_expected_revision: null; previous_dispatch_status: "none" | "resolved"; previous_dispatch_fingerprint: string; target_prepared_revision?: number; target_prepared_status?: "transitioning"; target_prepared_last_transition_id?: string; target_prepared_binding_token?: string; target_before_binding?: ManagedTerminalBinding; request_hash: string; dispatcher_pid: number; prepared_at: string; source_reserved_at?: string; target_prepared_at?: string; dispatch_started_at?: string; text_injected_at?: string; enter_dispatched_at?: string; agent_accepted_at?: string; message_id?: string; submission_retry_attempt_id?: string; submission_retry_mode?: "exact_draft_enter" | "replacement_send"; submission_retry_message_id?: string; submission_retry_prepared_at?: string; submission_retry_text_reserved_at?: string; submission_retry_text_injected_at?: string; submission_retry_enter_reserved_at?: string; submission_retry_enter_dispatched_at?: string; turn_id?: string; state_path?: string; target_native_thread_id?: string; target_accepted_revision?: number; target_accepted_status?: "transitioning"; target_accepted_binding_token?: string; target_accepted_binding?: ManagedTerminalBinding; source_pre_retirement_revision?: number; source_pre_retirement_status?: "transitioning"; source_pre_retirement_binding_token?: string; source_pre_retirement_binding?: ManagedTerminalBinding; source_retirement?: "binding_retained" | "binding_scrubbed_same_native_thread"; committed_at?: string; target_after_revision?: number; target_after_status?: "bound"; target_after_binding_token?: string; source_after_revision?: number; source_after_binding?: ManagedTerminalBinding; source_after_binding_token?: string; source_after_status?: "detached"; resolved_at?: string; aborted_at?: string; terminal_input_not_started_at?: string; abort_cleanup_completed_at?: string; abort_source_after_revision?: number; abort_source_after_status?: "bound"; abort_source_after_binding_token?: string; abort_source_after_binding?: ManagedTerminalBinding; abort_target_after_status?: "absent" | "detached"; abort_target_after_revision?: number; abort_target_after_binding_token?: string; abort_target_after_binding?: ManagedTerminalBinding; uncertain_at?: string; recovered_at?: string; error?: string; do_not_retry?: boolean; origin_status?: DeferredForegroundUserAbandonmentOriginStatus; user_abandoned_at?: string; } export interface DeferredForegroundTransferSaveOptions { /** `null` means create-only; a number is the exact revision to replace. */ expectedRevision: number | null; } export declare function deferredForegroundActiveMessageId(transfer: DeferredForegroundTransfer): string | undefined; export declare function deferredForegroundActivePreparedAt(transfer: DeferredForegroundTransfer): string; export declare function isDeferredForegroundSubmissionRetryPending(transfer: DeferredForegroundTransfer): boolean; export declare function deferredForegroundActiveTextInjectedAt(transfer: DeferredForegroundTransfer): string | undefined; export declare function deferredForegroundActiveEnterDispatchedAt(transfer: DeferredForegroundTransfer): string | undefined; export declare class DeferredForegroundTransferConflictError extends Error { readonly code = "AKK_DEFERRED_FOREGROUND_TRANSFER_CONFLICT"; readonly transferId: string; readonly expectedRevision: number | null; readonly actualRevision: number | null; constructor(transferId: string, expectedRevision: number | null, actualRevision: number | null, detail?: string); } export declare function createDeferredForegroundTransferId(): string; export declare function deferredForegroundTransfersDir(storeDir: string): string; export declare function pathsForDeferredForegroundTransfer(transferId: string, storeDir: string): { directory: string; statePath: string; }; export declare function assertDeferredForegroundTransfer(value: unknown, expectedTransferId?: string, options?: { allowMissingRevision?: boolean; }): asserts value is DeferredForegroundTransfer; export declare function saveDeferredForegroundTransfer(storeDir: string, value: DeferredForegroundTransfer, options: DeferredForegroundTransferSaveOptions): DeferredForegroundTransfer; export declare function loadDeferredForegroundTransfer(storeDir: string, transferId: string): DeferredForegroundTransfer; export declare function tryLoadDeferredForegroundTransfer(storeDir: string, transferId: string): DeferredForegroundTransfer | undefined; export declare function listDeferredForegroundTransfers(storeDir: string): DeferredForegroundTransfer[];