import { CodexImportError } from "./codex"; export type SessionImportErrorCode = CodexImportError["code"] | "invalid_request" | "binding_invalid" | "content_too_large" | "destination_conflict" | "publish_uncertain" | "atomic_unavailable" | "durability_not_provable" | "durability_failed" | "identity_mismatch" | "validation_failed" | "io_failed" | "internal_failed"; export interface SessionImportFailure { status: "failed"; provider: "codex"; sourceSessionId?: string; code: SessionImportErrorCode; phase: string; retryable: boolean; message: string; limitBytes?: number; observedBytes?: number; causeCode?: string; } export interface SessionImportSuccess { status: "imported" | "existing"; provider: "codex"; sourceSessionId: string; targetSessionId: string; targetPath: string; sourceBytes: number; transcriptBytes: number; mappedEvents: number; quarantinedEvents: number; droppedEvents: number; quarantineTruncated: boolean; redactedValues: number; } export type SessionImportResult = SessionImportSuccess | SessionImportFailure; export interface SessionImportBatchResult { provider: "codex"; status: "success" | "partial" | "failed" | "existing"; results: SessionImportResult[]; } export declare function importCodexSessions(cwd: string, requestedIds: readonly string[]): Promise; export declare function formatSessionImportBatch(result: SessionImportBatchResult): string; /** * Provider-neutral session import service (issue #3709). * * Pipeline: bounded read-only source load → format detection → provider adapter * → normalization + fail-closed redaction → head/tail bounding → persistence * into a NEW GJC session through the public SessionManager API. * * The source file is never written, moved, or enumerated. The live session is * never touched by this module; callers switch sessions explicitly after a * successful materialization. */