export type StatusKind = "tool" | "heartbeat" | "wake" | "action" | "progress"; export type StatusRequest = { kind: StatusKind; /** Optional internal tool name — NEVER spoken; only shapes the sketch */ tool?: string; /** Human sketch of the moment (already plain if possible) */ detail?: string; /** Free-text situation / goal */ context?: string; /** Recent spoken lines so the next one continues the story */ recent?: string[]; }; /** Map internal tool+detail → a non-technical sketch the status model can use. */ export declare function humanSketch(tool?: string, detail?: string, context?: string): string; /** * Build the chat-completions request body for one status line. Pure — split out * so the reasoning-model handling (the fix for silent wake acks) is unit-tested * without a live model call. */ export declare function fastLaneRequestBody(model: string, req: StatusRequest): Record; /** * Ask the fast-lane model for one plain status line. Null on any failure. * Concurrent callers share one in-flight request. */ export declare function fastLaneStatus(req: StatusRequest): Promise; /** Fire-and-forget status line. */ export declare function speakFastLaneStatus(req: StatusRequest, speak: (line: string) => void): void; /** Snapshot of recent lines (for tests / debugging). */ export declare function recentStatusLines(): string[];