export type Performance = { kind: "site-open"; site: string; url: string; sayLead: string; swallow?: false; } | { kind: "web-search"; query: string; url: string; sayLead: string; swallow?: false; } | { kind: "youtube-play"; query: string; url: string; sayLead: string; swallow?: false; } /** swallow: a self-complete CONTROL WORD — handled entirely here, the * utterance never reaches the gate/smart lane (same design as "stop"). * Critical for toggles: a smart-lane retry would UN-pause the media. */ | { kind: "media-pause"; sayLead: string; swallow: true; } | { kind: "media-mute"; sayLead: string; swallow: true; } | { kind: "media-close"; sayLead: string; swallow: true; }; export declare function matchPerformance(text: string): Performance | null; /** * Build a Performance from an instant-action TOOL CALL — the model-driven * path. The fast-lane model decides WHAT to do from the utterance (any * phrasing); these are just the visible executors it can invoke. */ export declare function performanceForTool(name: string, args: Record): Performance | null; /** Windows virtual-key press (down+up, optionally repeated) via user32 — for * hardware media/volume keys SendKeys can't send. Fire-and-forget. */ export declare function fireVirtualKey(vk: number, times?: number): void; /** Navigate the active stage tab back one step. */ export declare function stageBrowserBack(): Promise; /** Close the active stage tab (whatever it shows — koi's own browser only). */ export declare function stageBrowserCloseTab(): Promise; /** Scroll the active stage tab. */ export declare function stageBrowserScroll(direction: "up" | "down"): Promise; /** Resume paused media in the stage browser (player API first — the inverse * of pauseStageBrowserMedia). Returns elements resumed. */ export declare function resumeStageBrowserMedia(): Promise; /** Open a well-known folder in Explorer. */ export declare function openKnownFolder(name: string): boolean; /** Gracefully close a desktop app by name (CloseMainWindow — identical to * clicking X; unsaved-changes prompts still appear, nothing is force-killed). */ export declare function closeAppGraceful(app: string): boolean; /** * Execute a performance on the visible stage browser. Fire-and-forget: never * throws. Narrates each beat on the narration bus (the TUI speaks it live); * for non-swallowed kinds the smart lane still receives the utterance and * will find the work already done (or finish it if this fails partway). */ export declare function firePerformance(perf: Performance): Promise;