import type { Store } from "./store.js"; import type { AssessmentRequest } from "./assessment.js"; export type RunnerAgent = "codex" | "claude"; export interface RunnerExecution { agent: RunnerAgent; agentBin?: string; project: string; prompt: string; timeoutMs: number; signal?: AbortSignal; } export interface AgentListenerOptions { store: Store; board: string; project: string; agent: RunnerAgent; agentBin?: string; signal?: AbortSignal; pollIntervalMs?: number; timeoutMs?: number; once?: boolean; /** Where this board is drawn. A report that came back is only useful once somebody reads it, so * every line about one ends at the page that shows it. Absent when the caller has no base. */ boardUrl?: string; onStatus?: (message: string) => void; } export interface AgentRunnerDependencies { execute?: (options: RunnerExecution) => Promise; sleep?: (milliseconds: number, signal?: AbortSignal) => Promise; actor?: string; } export declare const runnerOutputSchema: { type: string; properties: Record; required: string[]; additionalProperties: boolean; }; /** Input is a captured board artifact, not executable instructions or shell arguments. */ export declare function agentRunnerPrompt(request: AssessmentRequest): string; /** Explicit foreground execution; never installed as an automatic daemon. */ export declare function executeLocalAgent(options: RunnerExecution): Promise; export interface DetectedAgent { agent: RunnerAgent; bin: string; } export interface AgentDetectionOptions { env?: NodeJS.ProcessEnv; platform?: NodeJS.Platform; applications?: string; } /** What a local listener could actually start. Reports the first working binary per agent; never runs one. */ export declare function detectAgents(options?: AgentDetectionOptions): Promise; /** An OS-local lock supplements store delivery ownership for independent local Store instances. */ export declare function runAgentListener(options: AgentListenerOptions, deps?: AgentRunnerDependencies): Promise;