/** * `runOperator` — the dashboard's loop (operator-console/AC-4..AC-8, * operator-console/AC-19, operator-console/AC-23..AC-26). * * It owns the state and the clocks; everything else is handed in. Every 2 s it * re-reads the panels and redraws what changed. A key goes through the pure reducer * and redraws from the data already read, with no file read on the way (AC-56). One * frame clock, running only while something on screen spins and colour is on, turns * the spinners. Leaving gives the terminal back, prints the conversation or where it * was saved, and never touches a live run (AC-6). * * @module */ import type { Harness } from '../harness.js'; import { type EffectDeps } from './effects.js'; import type { OperatorData, UiState } from './model.js'; import type { Terminal } from './screen.js'; import { type Leaving } from './transcript.js'; export declare const REFRESH_MS = 2000; export declare const FRAME_MS = 100; /** Resizes come in bursts while a window is dragged; one repaint after the last (AC-13 asks 250 ms). */ export declare const RESIZE_DEBOUNCE_MS = 50; export interface Clock { every(ms: number, fn: () => void): () => void; after(ms: number, fn: () => void): () => void; now(): number; } export declare const realClock: Clock; export interface OperatorDeps { terminal: Terminal; read(): OperatorData; effects: EffectDeps; harness: Harness; /** Colour wanted: a terminal, `NO_COLOR` unset, `TERM` not `dumb` (design D-6). */ colour: boolean; /** Whether an autopilot run is live, asked once on the way out. */ liveRun(): boolean; clock?: Clock; /** The normal screen, after the dashboard has closed. */ write(text: string): void; /** Where a long conversation is saved; the default is a 0600 file in the temporary directory. */ save?: (text: string) => string; } export declare function initialUi(harness: Harness): UiState; export declare const STILL_RUNNING: string[]; export declare function runOperator(deps: OperatorDeps): Promise; //# sourceMappingURL=app.d.ts.map