import type { Embedder } from '../influence-core/index.js'; import type { ContextUnit } from './missingContext.js'; import type { AblationRunStats, OutcomeComparator } from './types.js'; /** * Re-run the agent with `units` ADDED BACK into the context (`[]` = baseline, * restore nothing). Returns the run's output. Mirror of `AblationRunner`. */ export type RestorationRunner = (units: readonly ContextUnit[], run: { readonly seed: number; }) => Promise; /** The rerun configuration that upgrades the dropped list to the causal tier. */ export interface RestorationRerun { readonly runner: RestorationRunner; /** The original (buggy) output the reruns are compared against. */ readonly originalOutput: string; /** Seeded reruns per probe. Default 3. Never below 2 (no single-run verdicts). */ readonly samples?: number; /** Outcome-flip comparator. Default: similarity < `flipThreshold`. */ readonly outcomeChanged?: OutcomeComparator; /** Similarity floor for the DEFAULT comparator. Default 0.8. */ readonly flipThreshold?: number; /** * Restore only the first K dropped candidates. Default 5. COST: confirmation * calls your model `samples × (K + 1)` times (the +1 is the baseline) — real, * seeded re-runs. Keep `maxCandidates`/`samples` low, or pre-rank candidates, * to bound spend. Candidates beyond K are listed without a verdict. */ readonly maxCandidates?: number; } export interface RestorationProbeConfig { readonly rerun: RestorationRerun; readonly embedder: Embedder; } /** * Run ONE restoration probe: call the consumer's runner with `units` restored * once per seed, measure each output's similarity to the original, count flips. * `[]` units = the un-restored baseline. Mirror of `runAblationProbe`. */ export declare function runRestorationProbe(config: RestorationProbeConfig, units: readonly ContextUnit[]): Promise;