export declare const STATUS_HYDRATION_TAIL_LIMIT = 200;
export type CompletedDebouncePending = {
    chatTitle: string;
    duration: number;
    timestamp: number;
    firstObservedAt: number;
    previousStatus: string;
    loggedBlockReason?: string;
    loggedTranscriptProbe?: boolean;
    transcriptProbeHistory?: ExternalTranscriptProbe[];
    taskId?: string;
    turnStartedAt?: number;
    busyEpochAtArm?: number;
    lastOutputAtArm?: number;
    backgroundTaskHoldSince?: number;
};
export type CompletedFinalizationBlock = {
    reason: string;
    terminal?: boolean;
    allowTimeout?: boolean;
    holdForTranscript?: boolean;
};
export type CompletionFinalAssistantEvidence = {
    present: boolean;
    messages: unknown[];
    source: 'parsed' | 'external-native' | 'unavailable';
};
export type ExternalTranscriptProbe = {
    readAt: number;
    msgCount: number;
    lastRole: string | null;
    lastKind: string | null;
    contentLen: number;
    sourcePath: string | null;
    sourceMtimeMs: number | null;
    mtimeAgeMs: number | null;
};
export declare const COMPLETED_FINALIZATION_RETRY_MS = 1000;
export declare const COMPLETED_FINALIZATION_MAX_WAIT_MS = 30000;
export declare const NATIVE_HISTORY_MESH_IDLE_SETTLE_MS = 4000;
export declare const PTY_PARSED_FINAL_ASSISTANT_QUIET_DWELL_MS = 1200;
export declare const BACKGROUND_TASK_HOLD_MAX_MS: number;
export declare const USER_INPUT_ACK_DEDUP_WINDOW_MS = 60000;
export declare const STARTUP_GRACE_IDLE_COLLAPSE_WINDOW_MS = 12000;
/** Events that signal a dispatched mesh task has reached a terminal state.
 *  Detach the mesh assignment after emitting one of these so the worker's
 *  next unrelated turn doesn't impersonate another completion. */
export declare const TERMINAL_MESH_EVENTS: Set<string>;
