import type { ExecutorKind } from "./executors.js"; import type { TerminalControlEvidence, TerminalControlRef } from "./terminal-control-ref.js"; export type VerifiedDeadTerminalAgentProcessProof = { kind: "exact_pid_absent_from_complete_process_inventory"; agent: ExecutorKind; pid: number; process_uuid: string; process_birth?: string; conversation_id: string; session_id: string; turn_id: string; terminal_control: TerminalControlRef; terminal_endpoint: TerminalControlEvidence; binding_id: string; binding_generation: number; message_id: string; observed_at: string; }; export type BoundTerminalAgentProcessObservation = { status: "alive"; pid: number; } | { status: "verified_dead"; proof: VerifiedDeadTerminalAgentProcessProof; } | { status: "unverifiable"; reason: string; }; export type VerifiedDeadAgentAuthorityDecision = { status: "absent"; } | { status: "valid"; proof: VerifiedDeadTerminalAgentProcessProof; evidenceId: string; recordedAt: string; } | { status: "invalid"; reason: string; }; export type VerifiedDeadAgentAuthorityContext = { terminalControl: TerminalControlRef; conversation: { agent: ExecutorKind; conversationId: string; sessionId: string; turnId: string; bindingId?: string; bindingGeneration: number; }; session?: { status: string; agent: ExecutorKind; workspaceMatchesConversation: boolean; binding?: { terminalControl: TerminalControlRef; pid: number; processUuid?: string; processBirth?: string; bindingId: string; generation: number; }; }; takeover?: { pid: number; processUuid?: string; processBirth?: string; bindingId?: string; bindingGeneration: number; messageId?: string; }; submission?: { status?: string; sessionId?: string; turnId?: string; messageId?: string; bindingId?: string; bindingGeneration: number; }; }; export type VerifiedDeadAgentProcessDecision = { status: "absent"; } | { status: "invalid"; reason: string; } | { status: "alive"; pid: number; } | { status: "unverifiable"; reason: string; } | { status: "verified_dead"; proof: VerifiedDeadTerminalAgentProcessProof; source: "persisted" | "observation"; }; export type VerifiedDeadAgentProcessInput = { persistedAuthority: VerifiedDeadAgentAuthorityDecision; observation?: BoundTerminalAgentProcessObservation; }; type PersistedVerifiedDeadAgentProcessDecision = Extract; type ObservedVerifiedDeadAgentProcessDecision = Exclude; type FreshVerifiedDeadAgentProcessDecision = Exclude; export type AcceptedTurnDeadAgentStallInput = { conversationStatus: string; terminalBridge: boolean; messageId?: string; submissionStatus?: string; submissionMessageId?: string; deferredTransferId?: string; deferredTransferStatus?: string; }; export type AcceptedTurnDeadAgentStallDecision = { status: "applicable"; } | { status: "not_applicable"; } | { status: "requires_deferred_transfer"; transferId: string; }; export type VerifiedDeadAgentCompletionObservation = { status: "present"; completion: T; } | { status: "absent"; } | { status: "unverifiable"; reason: string; }; export type VerifiedDeadAgentCompletionDecision = { action: "complete"; completion: T; } | { action: "stall"; completionObservation: "absent" | "unverifiable"; resultReason: "bound_agent_process_verified_dead" | "bound_agent_process_verified_dead_completion_unverifiable"; }; type EventRecord = Readonly>; type VerifiedDeadAgentEventSelection = { status: "absent"; } | { status: "candidate"; proof: VerifiedDeadTerminalAgentProcessProof; evidenceId: string; recordedAt: string; } | { status: "invalid"; reason: string; }; export declare function isVerifiedDeadAgentProcessDisposition(disposition: unknown): boolean; export declare function verifiedDeadTerminalAgentProcessEvidenceId(proof: VerifiedDeadTerminalAgentProcessProof): string; export declare function validateStoredVerifiedDeadAgentAuthority({ disposition, context }: { disposition: unknown; context: VerifiedDeadAgentAuthorityContext; }): VerifiedDeadAgentAuthorityDecision; export declare function selectVerifiedDeadAgentEvent({ events, conversationId }: { events: readonly EventRecord[]; conversationId: string; }): VerifiedDeadAgentEventSelection; export declare function validateVerifiedDeadAgentEventAuthority({ candidate, context }: { candidate: Extract; context: VerifiedDeadAgentAuthorityContext; }): VerifiedDeadAgentAuthorityDecision; export declare function reconcileVerifiedDeadAgentAuthority({ stored, event }: { stored: VerifiedDeadAgentAuthorityDecision; event: VerifiedDeadAgentAuthorityDecision; }): VerifiedDeadAgentAuthorityDecision; export declare function decideVerifiedDeadAgentProcess(input: { persistedAuthority: VerifiedDeadAgentAuthorityDecision; observation?: undefined; }): PersistedVerifiedDeadAgentProcessDecision; export declare function decideVerifiedDeadAgentProcess(input: { persistedAuthority: { status: "absent"; }; observation: BoundTerminalAgentProcessObservation; }): FreshVerifiedDeadAgentProcessDecision; export declare function decideVerifiedDeadAgentProcess(input: { persistedAuthority: VerifiedDeadAgentAuthorityDecision; observation: BoundTerminalAgentProcessObservation; }): ObservedVerifiedDeadAgentProcessDecision; export declare function decideVerifiedDeadAgentProcess(input: VerifiedDeadAgentProcessInput): VerifiedDeadAgentProcessDecision; export declare function decideAcceptedTurnDeadAgentStall(input: AcceptedTurnDeadAgentStallInput): AcceptedTurnDeadAgentStallDecision; export declare function decideVerifiedDeadAgentCompletion(observation: VerifiedDeadAgentCompletionObservation): VerifiedDeadAgentCompletionDecision; export {};