import type { AssertionResult } from "./judge.js";
export interface CacheEntry {
    pass: boolean;
    reasoning: string;
    cachedAt: string;
    judgeModel: string;
}
export interface CacheData {
    version: number;
    entries: Record<string, CacheEntry>;
}
export declare class JudgeCache {
    private readonly skillDir;
    private data;
    private dirty;
    private readonly cachePath;
    constructor(skillDir: string);
    private load;
    static computeKey(assertionText: string, output: string, judgeModel: string): string;
    getOrCompute(assertionText: string, output: string, judgeModel: string, compute: () => Promise<AssertionResult>): Promise<AssertionResult>;
    has(assertionText: string, output: string, judgeModel: string): boolean;
    get size(): number;
    /**
     * Persist cache to disk. Call after all operations are complete.
     * Also ensures .judge-cache.json is in .gitignore.
     */
    flush(): void;
    private ensureGitignore;
}
