import { type ProbeDefinition } from './probes';
import type { EvalTraceRun } from '../learning/evalTrace';
export interface SimulatorOptions {
    /** Daemon base URL. Default http://127.0.0.1:4300. */
    baseUrl?: string;
    /** Optional model id to send with every chat request. */
    model?: string;
    /** Override fetch (mainly for tests). */
    fetchImpl?: typeof fetch;
    /** Probe set; defaults to DEFAULT_PROBES. */
    probes?: ProbeDefinition[];
    /** Probe ids to include; when empty, run all. */
    filterIds?: string[];
    /** Probe categories to include; when empty, run all. */
    filterCategories?: ProbeDefinition['category'][];
    /** Per-probe wall-clock cap in ms. Defaults to 60_000. */
    perProbeTimeoutMs?: number;
    /** When set, the simulator persists a converted EvalTraceRun under this project dir so the promotion gate can consume it. */
    persistEvalRunProjectDir?: string;
}
export interface ProbeResult {
    probeId: string;
    category: ProbeDefinition['category'];
    status: 'pass' | 'fail' | 'error';
    reason: string;
    tags: string[];
    responsePreview: string;
    toolCalls: string[];
    durationMs: number;
}
export interface SimulationRun {
    id: string;
    startedAt: string;
    finishedAt: string;
    baseUrl: string;
    model?: string;
    total: number;
    passed: number;
    failed: number;
    errored: number;
    passRate: number;
    results: ProbeResult[];
}
export declare function selectProbes(options: SimulatorOptions): ProbeDefinition[];
/**
 * Run a single probe against the daemon and judge the response.
 */
export declare function runProbe(probe: ProbeDefinition, options?: SimulatorOptions): Promise<ProbeResult>;
/**
 * Run every selected probe sequentially. Probes intentionally run one
 * at a time so a slow daemon does not pile up streams.
 */
export declare function runSimulation(options?: SimulatorOptions): Promise<SimulationRun>;
/**
 * Convert a SimulationRun into the EvalTraceRun shape the promotion
 * gate counts. Errored probes are mapped to `fail` so the gate stays
 * conservative — a daemon that cannot answer adversarial probes does
 * NOT count as a pass.
 */
export declare function simulationRunToEvalTraceRun(run: SimulationRun): EvalTraceRun;
/**
 * Format a SimulationRun as a one-screen text summary suitable for the
 * CLI. Pure — no console writes.
 */
export declare function formatSimulationSummary(run: SimulationRun): string;
//# sourceMappingURL=simulator.d.ts.map