/**
 * Runtime status — "what is the agent doing right now?"
 *
 * A tiny global state object that runQuery updates at each transition and
 * the F1 "what's happening?" hotkey reads back via TTS. Lets blind users
 * press F1 and hear "calling claude-sonnet-4, 8 seconds elapsed" instead
 * of sitting in front of a silent terminal wondering if it crashed.
 *
 * State machine (happy path):
 *
 *   idle → recording → transcribing → streaming → responding → idle
 *                                         ↘ tool-call → streaming ↗
 *                                         ↘ compacting → streaming ↗
 *
 * `since` is reset only when the state actually changes — that way pressing
 * F1 twice in a row reports the same elapsed-since-this-state, not a tiny
 * delta from the last read.
 *
 * setStatus is fire-and-forget from anywhere; getStatus / describeStatus
 * are pure reads. No allocations on the hot streaming path.
 */
export type AgentState = 'idle' | 'recording' | 'transcribing' | 'streaming' | 'responding' | 'tool-call' | 'compacting';
export interface RuntimeStatus {
    state: AgentState;
    detail?: string;
    since: number;
    model?: string;
    provider?: string;
    mode?: string;
    permissionMode?: string;
}
/**
 * Update one or more fields. Resets `since` only when `state` changes
 * (so reading status twice doesn't lie about how long we've been here).
 */
export declare function setStatus(patch: Partial<RuntimeStatus>): void;
export declare function getStatus(): RuntimeStatus;
/**
 * Short, speakable description of the current state. Designed to be read
 * aloud through TTS — short enough not to feel chatty, specific enough to
 * be useful while waiting.
 */
export declare function describeStatus(): string;
/**
 * "Where am I" — short summary of the current model, provider, mode, and
 * permission level. Spoken on F2. Doesn't include the elapsed timer since
 * this is positional info, not progress info.
 */
export declare function describeLocation(): string;
