import type { AiAdapter, Capability, JudgeInvocation } from "./ai-types.js"; export type { JudgeInvocation }; /** * The model lookout judges with when nobody has said otherwise. * * One name because the page now offers to change it, and a panel that reports * a default the verbs do not share would be reporting a guess. Every path that * takes a `--model` flag falls back to this, so the answer the settings panel * shows is the answer the next run uses. */ export declare const DEFAULT_JUDGE_MODEL = "sonnet"; /** The tool names for a set of capabilities, deduplicated and ordered. */ export declare function claudeTools(caps: readonly Capability[]): string[]; /** * The claude binary: overridable for nonstandard install paths and for test * doubles. The judge otherwise assumes `claude` on PATH, logged in (run * `claude` interactively once; `lookout doctor --handshake` verifies). */ export declare function claudeBin(): string; export declare function judgeCwd(): string; /** * One `claude -p` round-trip returning the reply text. * * The call completes on the CLI's own result message, not on the subprocess's * stdout reaching end-of-file. Those are different moments, and the difference * was expensive: anything that outlives the CLI holding the pipe it inherited * holds that end-of-file open too, and lookout waited behind it for the whole * timeout with the verdict already read. Runs were measured losing ten minutes * per judging phase to exactly that. Reading the stream means the end of the * answer is something lookout sees rather than something it waits for. */ export declare function invokeClaude(inv: JudgeInvocation): Promise<{ text: string; costUsd?: number; reads: string[]; }>; /** Extract the last fenced json block (or a bare object) from a reply. */ export declare function extractJson(text: string): unknown; /** * The judge prompt: the judge-core skill, filled with this batch's data. * * Everything the model is told to think lives in the skill file; everything * here is fact about the evidence. */ /** A defect already open against one of the views being judged. */ /** * Claude Code as one AI among others. * * `reportsReads` is true because the stream envelope names every tool call, so * lookout can tell a shot that was called clean after being opened from one * that was called clean without being looked at. */ export declare const claudeAdapter: AiAdapter;