import type { CandidateEvidence } from "@claudexor/arbitration"; export type SynthesisMode = "auto" | "always" | "never"; export interface SynthesisDecision { synthesize: boolean; reason: string; sources: string[]; } /** * Auto mode only synthesizes a 3rd candidate when there are at least this many * candidates. best-of-2 just picks the winner: synthesizing on n=2 adds a 3rd * paid harness run + a 3rd full review pass (~3x cost) for marginal benefit. * `--synthesis always` overrides this; `never` disables. */ export declare const AUTO_SYNTHESIS_MIN_CANDIDATES = 3; /** * Decide whether synthesizing a new candidate is worthwhile. Auto mode * synthesizes (when >= AUTO_SYNTHESIS_MIN_CANDIDATES) if there is no clear * winner, the best candidate has fixable accepted findings, or candidates have * complementary strengths. A single clearly-winning candidate — and any n<3 * auto race — is NOT synthesized. */ export declare function decideSynthesis(candidates: CandidateEvidence[], mode?: SynthesisMode): SynthesisDecision; /** * The stable marker phrase the deep-scan reducer prompt opens with. A fake * harness keys on this substring to emit a deterministic merged report for the * reducer-success canary WITHOUT changing its ordinary `synthesize` behavior * (best-of synthesis, which never carries this marker, stays untouched). */ export declare const DEEP_SCAN_REDUCER_MARKER = "DEEP-SCAN SYNTHESIS REDUCER"; /** * Build the read-only bounded reducer prompt for `ask --deep-scan` (#27 / D-6). * Like the plan-council merge, it POINTS at the raw scout report FILES by * absolute path (the argv-size law: reports ride a file, never argv) and asks * for ONE deduplicated synthesis that surfaces disagreements with per-scout * attribution and preserves omissions — never a concatenation. Read-only: the * reducer must not edit files or output implementations. */ export declare function buildDeepScanReducerPrompt(goal: string, scouts: readonly { attemptId: string; harnessId: string; absPath: string; }[]): string; export interface SynthesisPlan { baseFrom: string; borrowTestsFrom: string | null; fixFindings: string[]; instructions: string; } /** * Build a plan for the synthesizer harness. The synthesized output MUST then be * re-run through gates + review + revalidation + arbitration as a new candidate * (never applied unchecked, never a blind diff concatenation). */ export declare function buildSynthesisPlan(candidates: CandidateEvidence[]): SynthesisPlan; //# sourceMappingURL=index.d.ts.map