export type TimerHandle = ReturnType | number; export interface SpawnDeps { spawn?: SpawnFunction; setTimer: (fn: () => void, ms: number) => TimerHandle; clearTimer: (handle: TimerHandle) => void; } export interface MonitoredProcess { kill(signal?: NodeJS.Signals): void; exited: Promise<{ code: number | null; signal: string | null; }>; stdout: ReadableStream; stderr: ReadableStream; } interface SpawnedMonitorProcess { readonly exited: Promise; readonly stdout: ReadableStream; readonly stderr: ReadableStream; readonly pid?: number; readonly signalCode?: NodeJS.Signals | null; } type SpawnFunction = (argv: readonly string[], options: { readonly cwd?: string; readonly env?: Record; readonly detached: boolean; readonly stdin: "ignore"; readonly stdout: "pipe"; readonly stderr: "pipe"; }) => SpawnedMonitorProcess; export declare function spawnMonitoredProcess(opts: { command: string; cwd?: string; env?: Record; maxRuntimeMs: number; }, deps: SpawnDeps): MonitoredProcess; export {};