import type { AgentTool, StreamFn } from "@caupulican/pi-agent-core/types"; import type { Api, Model, SimpleStreamOptions } from "@caupulican/pi-ai"; import { SCOUT_SYSTEM_PROMPT } from "./provider-prompt-contracts.ts"; export { SCOUT_SYSTEM_PROMPT }; export interface ScoutCitation { path: string; start: number; end: number; valid: boolean; } export interface ScoutRunResult { summary: string; citations: ScoutCitation[]; droppedCitations: number; unreliable: boolean; truncated: boolean; turnsUsed: number; failure?: string; } export interface ScoutControllerDeps { resolveScoutModel(): Promise<{ model: Model; apiKey?: string; headers?: Record; textToolCallProtocol?: SimpleStreamOptions["textToolCallProtocol"]; } | { failure: string; }>; getCwd(): string; buildReadOnlyTools(cwd: string): AgentTool[]; streamFn?: StreamFn; fileExists(path: string): boolean; countLines(path: string): number | undefined; onEvent?(event: { type: "scout_turn" | "scout_end"; detail: string; }): void; signal?: AbortSignal; /** Registers this scout's own Agent run in the reload-gate quiesce registry while it drives * turns, so `/reload`/profile-switch/live extension load-unload-reconcile wait it out. Optional — * a caller that hasn't wired an agent dir through (e.g. an existing test construction) sees no * behavior change; the scout simply stays invisible to the reload gate, matching its behavior * before this registration was added. */ getAgentDir?(): string; } export declare class ScoutController { private readonly deps; constructor(deps: ScoutControllerDeps); run(query: string, maxTurns?: number): Promise; } export declare function getScoutOutputTokenCount(message: { usage?: { output?: number; }; }): number; export declare function parseScoutAnswer(text: string, fileExists: (path: string) => boolean, countLines: (path: string) => number | undefined): Omit; //# sourceMappingURL=scout-controller.d.ts.map