import type { CodexOpenRootRolloutIdentity, CodexOpenRootRolloutInventory } from "./agent-session-provider.js"; import { type UnknownRecord } from "./value-guards.js"; export interface CodexRolloutIdentity { fd: string; device: string; inode: string; path: string; } interface CodexRolloutAcceptanceAnchorBase { schema: "agent-knock-knock/codex-rollout-acceptance-anchor"; process_uuid: string; process_birth: string; captured_at: string; file_existed: boolean; offset_bytes: number; anchor_fingerprint: string; } export interface CodexBoundRolloutAcceptanceAnchor extends CodexRolloutAcceptanceAnchorBase { version: 1; native_thread_id: string; mode: "existing" | "pre_materialization"; rollout?: CodexRolloutIdentity; expected_empty_native_session?: true; } export interface CodexVirginRolloutAcceptanceAnchor extends CodexRolloutAcceptanceAnchorBase { version: 2; mode: "pre_materialization"; native_thread_id?: never; native_thread_binding: "post_submission"; file_existed: false; offset_bytes: 0; rollout?: never; expected_empty_native_session: true; } export interface CodexCandidateRolloutAcceptanceAnchorEntry { native_thread_id: string; rollout: CodexRolloutIdentity; offset_bytes: number; } export interface CodexCandidateSetRolloutAcceptanceAnchor extends CodexRolloutAcceptanceAnchorBase { version: 3; mode: "candidate_set"; native_thread_binding: "post_submission"; file_existed: false; offset_bytes: 0; zero_file_baseline: boolean; inventory_pid: number; inventory_cwd?: string; inventory_fingerprint: string; candidate_rollouts: CodexCandidateRolloutAcceptanceAnchorEntry[]; } export type CodexRolloutAcceptanceAnchor = CodexBoundRolloutAcceptanceAnchor | CodexVirginRolloutAcceptanceAnchor | CodexCandidateSetRolloutAcceptanceAnchor; export type CaptureCodexRolloutAcceptanceAnchorOptions = { processUuid: string; processBirth: string; now?: Date; } & ({ nativeThreadId: string; mode: "existing"; rollout: CodexRolloutIdentity; } | { nativeThreadId?: string; mode: "pre_materialization"; expectedEmptyNativeSession: true; }); export interface CodexCandidateSetRolloutAcceptanceRequest { anchor: CodexCandidateSetRolloutAcceptanceAnchor; currentInventory: CodexOpenRootRolloutInventory; requestHash: string; /** * A post-anchor acceptor already persisted to one recovery side may have * closed its process FD before the other side was committed. */ recoveryCandidate?: CodexOpenRootRolloutIdentity; } export type CodexCandidateSetRolloutAcceptanceResult = { status: "accepted"; identity: CodexOpenRootRolloutIdentity; evidence: TerminalSubmissionAcceptanceEvidence; } | { status: "pending"; inspected_candidates: number; exact_matches: number; incomplete_candidates?: number; } | { status: "uncertain"; code: "multiple_exact_request_acceptances" | "candidate_inventory_changed" | "candidate_scan_invalid"; reason: string; inspected_candidates: number; exact_matches: number; }; export interface CodexRolloutAcceptanceIdentity { sessionId: string; processUuid?: string; processBirth?: string; rollout?: CodexRolloutIdentity; } export interface CodexRolloutAcceptanceRequest { anchor: CodexRolloutAcceptanceAnchor; currentIdentity: CodexRolloutAcceptanceIdentity; requestHash: string; } export interface TerminalSubmissionAcceptanceEvidence { source: "codex_rollout" | "claude_transcript"; kind: "native_user_turn"; nativeThreadId: string; requestHash: string; acceptanceId: string; acceptedAt?: string; anchorFingerprint: string; evidenceFingerprint: string; metadata?: Record; } export declare function validateTerminalSubmissionAcceptanceEvidence(value: unknown, expected: { source: TerminalSubmissionAcceptanceEvidence["source"]; nativeThreadId: string; requestHash: string; }): TerminalSubmissionAcceptanceEvidence; export declare function terminalBridgeSubmission(conversation: unknown): UnknownRecord | undefined; export declare function validateCodexRolloutAcceptanceAnchor(value: unknown): CodexRolloutAcceptanceAnchor; export declare function normalizedRolloutIdentity(value: CodexRolloutIdentity | UnknownRecord): CodexRolloutIdentity; export declare function exactNativeThreadId(value: unknown): string; export declare function sha256Value(value: unknown, label: string): string; export declare function requiredString(value: unknown, label: string): string; export declare function validTimestamp(value: unknown): boolean; export declare function fingerprint(value: unknown): string; export declare function parsedInteger(value: string): bigint; export {};