export type LoopStatus = "waiting" | "queued" | "running" | "paused" | "completed" | "failed" | "stopped"; export type PauseReason = "user" | "blocked" | "duration_limit" | "iteration_limit" | "protocol_error" | "session_closed" | "branch_changed" | "unknown_version"; export type AttentionStatus = "completed" | "failed" | "blocked" | "duration_limit" | "iteration_limit" | "protocol_error"; export type LoopPolicy = { kind: "fixed"; delayMs: number; } | { kind: "auto"; }; export interface LoopStartOptions { objective: string; every: LoopPolicy; afterMs: number; forMs: number; maxIterations: number; minDelayMs: number; maxDelayMs: number; } export interface LoopUpdatePatch { every?: LoopPolicy; forMs?: number; maxIterations?: number; minDelayMs?: number; maxDelayMs?: number; } export type LoopDecision = { decision: "continue"; summary: string; evidence: string; nextDelayMs?: number; } | { decision: "complete"; summary: string; evidence: string; } | { decision: "fail"; summary: string; evidence: string; } | { decision: "block"; summary: string; evidence: string; }; export interface LastDecision { decision: LoopDecision["decision"] | "protocol_error"; summary: string; evidence: string; at: number; } export interface LoopStateV1 { version: 1; status: LoopStatus; pauseReason?: PauseReason; objective: string; policy: LoopPolicy; startedAt: number; forMs: number; maxIterations: number; iterationCount: number; minDelayMs: number; maxDelayMs: number; nextWakeAt?: number; pendingIntent?: "pause" | "stop"; protocolRetryCount: number; protocolRetryUsed: boolean; decisionReceived: boolean; lastDecision?: LastDecision; endedAt?: number; observedAt?: number; } export interface LoopAttentionEventV1 { version: 1; status: AttentionStatus; summary: string; evidence: { source: "agent" | "extension"; text: string; }; objective: string; iterationCount: number; maxIterations: number; protocolRetryCount: number; calendarElapsedMs: number; deadlineRemainingMs: number; session: { id: string; file?: string; cwd: string; }; endedAt: string; observedAt: string; } export declare const deadlineOf: (state: Pick) => number; export declare const isTerminal: (status: LoopStatus) => status is "completed" | "failed" | "stopped"; export declare function startLoop(options: LoopStartOptions, now: number): LoopStateV1; export declare function materializeDeadline(state: LoopStateV1, now: number): LoopStateV1; export declare function queueIteration(state: LoopStateV1, now: number): LoopStateV1; export declare function beginIteration(state: LoopStateV1, now: number): LoopStateV1; export declare function applyDecision(state: LoopStateV1, decision: LoopDecision, now: number): LoopStateV1; export declare function requestPause(state: LoopStateV1): LoopStateV1; export declare function requestStop(state: LoopStateV1, now: number): LoopStateV1; export declare function settleWithoutDecision(state: LoopStateV1, now: number): { state: LoopStateV1; retry: boolean; }; export declare function resumeLoop(state: LoopStateV1, now: number): LoopStateV1; export declare function updateLoop(state: LoopStateV1, patch: LoopUpdatePatch, now: number): LoopStateV1;