export type LifecycleSmokeAgent = "codex" | "claude"; export type LifecycleSmokeStatus = "passed" | "failed" | "uncertain"; export type AkkInvocationKind = "read" | "mutation"; export type AkkClientFailureKind = "timeout" | "nonzero" | "malformed" | "transport"; export interface AkkInvocationOptions { kind: AkkInvocationKind; timeoutMs: number; } /** * Public-command boundary used by the live runner. Implementations must not * retry commands. They return parsed JSON or throw an AkkClientInvocationError. */ export interface AkkClient { invoke(command: string, args: readonly string[], options: AkkInvocationOptions): Promise; } export declare class AkkClientInvocationError extends Error { readonly failureKind: AkkClientFailureKind; constructor(failureKind: AkkClientFailureKind); } export interface LifecycleSmokeTimeouts { readMs: number; mutationMs: number; completionMs: number; monitorPollIntervalMs: number; agentInactivityMinutes: number; agentHardTimeoutMinutes: number; } export interface LifecycleScenarioConfig { agent: LifecycleSmokeAgent; target: string; expectedPanePid: number; /** Exact version explicitly approved by the maintainer for this run. */ expectedAgentVersion: string; timeouts?: Partial; } export interface LifecycleSmokeDependencies { client: AkkClient; now?: () => number; sleep?: (milliseconds: number) => Promise; nonce?: () => string; } export type LifecycleSmokeStepName = "preflight" | "new_thread" | "send" | "wait_completion" | "list_resumable_threads" | "resume_thread" | "final_verify"; export interface LifecycleSmokeStepResult { name: LifecycleSmokeStepName; status: LifecycleSmokeStatus; duration_ms: number; } export interface LifecycleTerminalEvidence { terminal_id: string; agent_pid: number; process_uuid: string; process_birth: string | null; workspace: string; native_thread_id: string; session_id: string | null; binding_id: string | null; binding_generation: number | null; /** Exact current binding fence; the evidence layer must fingerprint it. */ binding_fence: string; turn_count: number; agent_version: string; behavior_profile: string; } export interface LifecycleTransitionEvidence { terminal_id: string; transition_id: string; operation: "new_thread" | "resume_thread"; previous_session_id: string | null; session_id: string; previous_native_thread_id: string; native_thread_id: string; binding_id: string; binding_generation: number; turn_created: false; } export interface LifecycleTurnEvidence { session_id: string; turn_id: string; status: "idle"; turn_count_before: number; turn_count_after: number; } export interface LifecycleResumeCandidateEvidence { native_thread_id: string; /** Managed A Session advertised by the candidate, or null before AKK owns A. */ managed_session_id: string | null; exact_candidate_count: 1; resumable: true; active_elsewhere: false; fresh_candidate_token_present: true; } export type LifecycleSmokeErrorCode = "configuration_invalid" | "client_timeout" | "client_nonzero" | "client_malformed" | "client_transport" | "client_error" | "preflight_terminal_match" | "preflight_terminal_identity" | "preflight_agent_version" | "preflight_capability" | "preflight_process_identity" | "preflight_workspace" | "preflight_native_identity" | "preflight_not_idle" | "preflight_approval" | "preflight_unresolved_turn" | "preflight_management" | "preflight_action" | "new_thread_uncertain" | "new_thread_invalid" | "identity_drift" | "send_uncertain" | "send_invalid" | "monitor_uncertain" | "monitor_invalid" | "turn_verification_failed" | "candidate_invalid" | "resume_thread_uncertain" | "resume_thread_invalid" | "restore_verification_failed"; export interface LifecycleScenarioResult { schema: "agent-knock-knock/live-lifecycle-smoke-core-result"; version: 1; agent: LifecycleSmokeAgent; target: string; pane_pid: number; expected_agent_version: string; status: LifecycleSmokeStatus; started_at_ms: number; finished_at_ms: number; steps: LifecycleSmokeStepResult[]; error_code?: LifecycleSmokeErrorCode; recovery?: "inspect_selected_pane_do_not_retry"; start?: LifecycleTerminalEvidence; new_thread?: LifecycleTransitionEvidence; active_after_new?: LifecycleTerminalEvidence; turn?: LifecycleTurnEvidence; resume_candidate?: LifecycleResumeCandidateEvidence; resume_thread?: LifecycleTransitionEvidence; final?: LifecycleTerminalEvidence; } export interface LifecycleMatrixResult { schema: "agent-knock-knock/live-lifecycle-smoke-core-matrix"; version: 1; status: LifecycleSmokeStatus; started_at_ms: number; finished_at_ms: number; scenarios: LifecycleScenarioResult[]; } export declare function runLifecycleScenario(config: LifecycleScenarioConfig, dependencies: LifecycleSmokeDependencies): Promise; export declare function runLifecycleMatrix(configs: readonly LifecycleScenarioConfig[], dependencies: LifecycleSmokeDependencies): Promise;