export type SessionExecutionDerivedState = 'IDLE' | 'WAITING_RESPONSE' | 'STREAMING_OPEN' | 'POST_RESPONSE_GRACE' | 'STALED' | 'UNKNOWN'; type DerivedStateOptions = { nowMs?: number; waitingTimeoutMs?: number; postResponseGraceMs?: number; }; export type SessionExecutionStateSnapshot = { tmuxSessionId: string; state: SessionExecutionDerivedState; shouldSkipHeartbeat: boolean; reason: 'no_state' | 'sse_open' | 'waiting_response' | 'request_timed_out' | 'recent_nonterminal_response' | 'latest_response_stop' | 'client_closed_before_terminal'; lastRequestId?: string; lastRequestAtMs?: number; lastRequestWasStream?: boolean; lastResponseRequestId?: string; lastResponseAtMs?: number; lastFinishReason?: string; openSseCount: number; lastSseOpenAtMs?: number; lastSseCloseAtMs?: number; lastClientCloseBeforeTerminalAtMs?: number; }; export declare class SessionExecutionStateTracker { private readonly byRequestId; private readonly byTmuxSessionId; private sequence; private nextSeq; private ensureTmuxRecord; private maybeDeleteRequest; private closeOpenSse; private prune; recordRequestStart(requestId: string, metadata?: Record | null): void; recordJsonResponseComplete(requestId: string, finishReason?: string): void; recordSseStreamStart(requestId: string): void; recordSseStreamEnd(requestId: string, options?: { finishReason?: string; terminal?: boolean; }): void; recordSseClientClose(requestId: string, options?: { finishReason?: string; terminal?: boolean; closeBeforeStreamEnd?: boolean; }): void; getStateSnapshot(tmuxSessionId: string, options?: DerivedStateOptions): SessionExecutionStateSnapshot; } export declare function getSessionExecutionStateTracker(): SessionExecutionStateTracker; export {};