import { type ManagedSessionStatus } from "./managed-session.js"; export interface CodexLifecycleIdentityEvidence { sessionId: string; processUuid?: string; processBirth?: string; rollout?: { fd: string; device: string; inode: string; path: string; }; } export declare function hasStrongCodexLifecycleIdentity(identity: CodexLifecycleIdentityEvidence): boolean; export declare function codexIdentityVerifiesLifecyclePostcondition(input: { operation: "new_thread" | "resume_thread"; parsedNativeThreadId: string; observationSucceeded: boolean; observedIdentity?: CodexLifecycleIdentityEvidence; beforeIdentity?: CodexLifecycleIdentityEvidence; }): boolean; export type CodexLifecyclePostconditionEvidence = "invalid" | "no_rollout" | "matching_after" | "lingering_before"; export declare function classifyCodexLifecyclePostcondition(input: { operation: "new_thread" | "resume_thread"; parsedNativeThreadId: string; observationSucceeded: boolean; observedIdentity?: CodexLifecycleIdentityEvidence; beforeIdentity?: CodexLifecycleIdentityEvidence; }): CodexLifecyclePostconditionEvidence; export declare function isFreshCodexPostProbeScreen(input: { probeSent: boolean; screenDigest?: string; postProbeBaselineDigest?: string; }): boolean; export interface ResumeCandidateAvailabilityInput { hasCandidateToken: boolean; current: boolean; activeElsewhere: boolean; activeOwnershipUnverifiable: boolean; managedSessionCount: number; managedSessionStatus?: ManagedSessionStatus; managedSessionBindingInactive?: boolean; managedSessionWorkspaceMatches?: boolean; archived: boolean; } export interface ResumeCandidateAvailability { resumable: boolean; unavailableReason?: string; } /** * Resume is permitted only for a free historical native thread. A first-class * Session is reusable after it was explicitly detached. A still-bound record * is also selectable when its recorded process is conclusively no longer * alive; the resume mutation must CAS-detach that stale binding before it * prepares terminal input. Every unverifiable/live status remains * authoritative and blocks implicit rebinding. */ export declare function evaluateResumeCandidateAvailability(input: ResumeCandidateAvailabilityInput): ResumeCandidateAvailability;