export type VerifiableResult = {
    path: string;
    startLine: number;
    endLine: number;
    snippet: string;
    score: number;
    [key: string]: unknown;
};
export type VerifiedResult<T extends VerifiableResult = VerifiableResult> = T & {
    /** Whether the snippet was verified to still exist at the claimed location */
    verified: boolean;
    /** If found at a different location, the corrected start line */
    actualStartLine?: number;
    /** If found at a different location, the corrected end line */
    actualEndLine?: number;
};
export type RecallVerifyConfig = {
    /** Enable/disable post-search verification. Default: false */
    enabled: boolean;
    /** Lines to search around the claimed range when content has shifted. Default: 20 */
    fuzzyWindow: number;
};
export declare const DEFAULT_RECALL_VERIFY_CONFIG: RecallVerifyConfig;
export type FileReader = {
    readFile: (relPath: string) => Promise<string | null>;
};
/**
 * Verify search results by re-reading source files and checking that snippets
 * still exist at the claimed line ranges.
 *
 * When `config.enabled` is false (the default), every result is returned with
 * `verified: true` — the caller trusts the index.
 *
 * When enabled, each result goes through:
 * 1. Read the source file.
 * 2. Compare the snippet at the claimed range (whitespace-normalized).
 * 3. If not found, slide a window of the same height within ±`fuzzyWindow`.
 * 4. Return corrected `actualStartLine` / `actualEndLine` when relocated.
 */
export declare function verifySearchResults<T extends VerifiableResult>(results: T[], fileReader: FileReader, config?: Partial<RecallVerifyConfig>): Promise<VerifiedResult<T>[]>;
