/** * Verification Agent — adversarial testing gate. * * After the main agent completes substantial work (writes/edits files, runs commands), * this agent runs independently to try to BREAK what was built. It can only read and * execute — never modify files. Returns PASS/FAIL/PARTIAL verdict. * * If FAIL: injects feedback into conversation so the main agent can fix issues. * If PASS: work is considered verified. */ import type { CapabilityHandler, Dialogue } from './types.js'; import { ModelClient } from './llm.js'; export interface VerificationResult { verdict: 'PASS' | 'FAIL' | 'PARTIAL' | 'SKIPPED'; summary: string; issues: string[]; } /** * Should we run verification for this turn? * Only for substantial work: 3+ tool calls AND at least one write/edit/bash. */ export declare function shouldVerify(turnToolCalls: number, turnToolCounts: Map, userInput: string): boolean; /** * Filter capability handlers to only allow read-only tools. * Bash is allowed (for running tests/builds) but Edit/Write are blocked. */ export declare function getVerificationTools(handlers: Map): Map; /** * Run the verification agent on the current conversation state. * Uses a cheap model to minimize cost. Returns verdict + issues. */ export declare function runVerification(history: Dialogue[], handlers: Map, client: ModelClient, config: { model: string; workDir: string; abortSignal: AbortSignal; onEvent?: (event: { kind: string; text?: string; }) => void; }): Promise;