export declare const LIVE_LIFECYCLE_EVIDENCE_KIND: "agent-knock-knock/native-lifecycle-live-smoke"; export declare const LIVE_LIFECYCLE_EVIDENCE_SCHEMA_VERSION: 1; export declare const LIVE_LIFECYCLE_ATTESTATION_BEGIN = "-----BEGIN AKK NATIVE LIFECYCLE LIVE SMOKE V1-----"; export declare const LIVE_LIFECYCLE_ATTESTATION_END = "-----END AKK NATIVE LIFECYCLE LIVE SMOKE V1-----"; declare const AGENTS: readonly ["codex", "claude"]; declare const STEP_NAMES: readonly ["preflight", "new_thread", "send", "wait_completion", "list_resumable_threads", "resume_thread", "final_verify"]; export type LiveLifecycleAgent = typeof AGENTS[number]; export type LiveLifecycleResultStatus = "passed" | "failed" | "uncertain"; export type LiveLifecycleStepName = typeof STEP_NAMES[number]; export type LiveLifecycleStepStatus = LiveLifecycleResultStatus; export type LiveLifecycleTransitionStatus = "committed" | "failed" | "uncertain"; export type LiveLifecycleTurnStatus = "completed" | "failed" | "uncertain"; export interface RawLiveLifecycleStepResult { name: LiveLifecycleStepName; status: LiveLifecycleStepStatus; durationMs: number; } export interface RawLiveLifecycleSnapshot { tmuxTarget: string; panePid: number; agentPid: number; processUuid: string; processBirth?: string; workspace: string; nativeThreadId: string; sessionMaterialized: boolean; sessionId: string | null; bindingId: string | null; bindingGeneration: number | null; idle: boolean; } export interface RawLiveLifecycleResumeCandidateResult { nativeThreadId: string; managedSessionId: string | null; exactCandidateCount: number; resumable: boolean; activeElsewhere: boolean; freshCandidateTokenPresent: boolean; } export interface RawLiveLifecycleTransitionResult { transitionId: string; status: LiveLifecycleTransitionStatus; sourceSessionId: string | null; targetSessionId: string; sourceBindingId: string | null; targetBindingId: string; } export interface RawLiveLifecycleTurnResult { status: LiveLifecycleTurnStatus; turnId: string; sessionId: string; bindingId: string; bindingGeneration: number; } export interface RawLiveLifecycleScenarioResult { status: LiveLifecycleResultStatus; failureStage?: LiveLifecycleStepName; reasonCode?: string; doNotRetry?: true; agentVersion?: string; tmuxTarget: string; panePid: number; startedAt: string; completedAt: string; before?: RawLiveLifecycleSnapshot; afterNew?: RawLiveLifecycleSnapshot; afterResume?: RawLiveLifecycleSnapshot; resumeCandidate?: RawLiveLifecycleResumeCandidateResult; send?: RawLiveLifecycleTurnResult; transitions?: { newThread?: RawLiveLifecycleTransitionResult; resumeThread?: RawLiveLifecycleTransitionResult; }; turnDeltas?: { newThread?: number; send?: number; resumeThread?: number; }; steps: RawLiveLifecycleStepResult[]; } export interface RawLiveLifecycleEvidenceInput { packageName: string; packageVersion: string; commit: string; worktreeClean: boolean; startedAt: string; completedAt: string; scenarios: Partial>; /** Tests and deterministic tooling may supply these; production callers omit them. */ runId?: string; fingerprintSalt?: string; } export interface LiveLifecycleFingerprintSnapshot { tmux_target: string; pane_pid: number; agent_pid: number; process_uuid_fingerprint: string; process_birth_fingerprint?: string; workspace_fingerprint: string; native_thread_fingerprint: string; session_materialized: boolean; session_fingerprint: string | null; binding_fingerprint: string | null; binding_generation: number | null; idle: boolean; } export interface LiveLifecycleResumeCandidateEvidence { native_thread_fingerprint: string; managed_session_fingerprint: string | null; exact_candidate_count: number; resumable: boolean; active_elsewhere: boolean; fresh_candidate_token_present: boolean; } export interface LiveLifecycleTransitionEvidence { status: LiveLifecycleTransitionStatus; transition_fingerprint: string; source_session_fingerprint: string | null; target_session_fingerprint: string; source_binding_fingerprint: string | null; target_binding_fingerprint: string; } export interface LiveLifecycleTurnEvidence { status: LiveLifecycleTurnStatus; turn_fingerprint: string; session_fingerprint: string; binding_fingerprint: string; binding_generation: number; } export interface LiveLifecycleStepEvidence { name: LiveLifecycleStepName; status: LiveLifecycleStepStatus; duration_ms: number; } export interface LiveLifecycleRelationshipAssertions { start_idle: boolean; new_idle: boolean; final_idle: boolean; new_native_thread_differs: boolean; final_native_thread_matches_start: boolean; resume_candidate_matches_start: boolean; new_session_differs: boolean; resume_session_relationship_valid: boolean; binding_generation_relationship_valid: boolean; binding_fingerprints_distinct: boolean; send_bound_to_new_session: boolean; transitions_match_sessions: boolean; transitions_match_bindings: boolean; transitions_distinct: boolean; resume_candidate_safe: boolean; same_tmux_pane: boolean; same_process_incarnation: boolean; same_workspace: boolean; } export interface LiveLifecycleAgentEvidence { status: LiveLifecycleResultStatus; failure_stage?: LiveLifecycleStepName; reason_code?: string; do_not_retry?: true; agent_version?: string; tmux_target: string; pane_pid: number; started_at: string; completed_at: string; snapshots: { before?: LiveLifecycleFingerprintSnapshot; after_new?: LiveLifecycleFingerprintSnapshot; after_resume?: LiveLifecycleFingerprintSnapshot; }; resume_candidate?: LiveLifecycleResumeCandidateEvidence; send?: LiveLifecycleTurnEvidence; transitions: { new_thread?: LiveLifecycleTransitionEvidence; resume_thread?: LiveLifecycleTransitionEvidence; }; turn_deltas: { new_thread: number | null; send: number | null; resume_thread: number | null; }; assertions: LiveLifecycleRelationshipAssertions; steps: LiveLifecycleStepEvidence[]; } export interface LiveLifecycleEvidence { schema_version: typeof LIVE_LIFECYCLE_EVIDENCE_SCHEMA_VERSION; kind: typeof LIVE_LIFECYCLE_EVIDENCE_KIND; run_id: string; package: { name: string; version: string; }; source: { commit: string; worktree_clean: boolean; }; started_at: string; completed_at: string; overall_status: LiveLifecycleResultStatus; matrix: Partial>; digest: string; } export interface LiveLifecycleEvidenceValidationOptions { expectedPackageName: string; expectedPackageVersion: string; expectedCommit: string; requireAgents?: readonly LiveLifecycleAgent[]; maxAgeHours?: number; now?: Date | string | number; } export declare class LiveLifecycleEvidenceValidationError extends Error { readonly code: string; constructor(code: string, message: string); } /** * Build an allowlisted evidence document from raw runtime results. Raw IDs are * used only to calculate per-run, domain-separated fingerprints and relationship * assertions; they are never copied into the returned document. */ export declare function create(input: RawLiveLifecycleEvidenceInput): LiveLifecycleEvidence; export declare const createLiveLifecycleEvidence: typeof create; /** * Validate an evidence document for release use. The default release matrix is * Codex plus Claude, and freshness defaults to 72 hours with five minutes of * allowed forward clock skew. */ export declare function validate(value: unknown, options: LiveLifecycleEvidenceValidationOptions): LiveLifecycleEvidence; export declare const validateLiveLifecycleEvidence: typeof validate; /** Serialize canonical evidence into a block suitable for an annotated tag body. */ export declare function serializeAttestation(evidence: LiveLifecycleEvidence): string; /** Extract and structurally verify one attestation block from an annotated tag. */ export declare function parseAttestation(message: string): LiveLifecycleEvidence; export {};