export declare const MAX_SITES_PER_CALL = 8;
export declare const PROMPT_BUDGET_CHARS = 3500;
export declare const CHUNK_SITE_LIMIT = 2;
export interface ClusterSite {
    file: string;
    line: number;
    enclosingName?: string;
    enclosingSource: string;
}
export declare function prepareSites<T extends ClusterSite>(sites: ReadonlyArray<T>): T[];
/**
 * Approximate prompt size in characters. Conservative — does not attempt
 * tokenizer-accurate counting.
 */
export declare function estimatePromptChars(promptTemplate: string, sites: ReadonlyArray<ClusterSite>): number;
/**
 * Consecutive partition into chunks of <= `CHUNK_SITE_LIMIT` sites.
 * Function bodies are preserved in full — we trade more LLM calls for
 * loss-free context.
 */
export declare function splitIntoChunks<T extends ClusterSite>(sites: ReadonlyArray<T>): T[][];
export interface ChunkVerdict {
    race: boolean;
    confidence: number;
    reason: string;
}
/**
 * Aggregate per-chunk verdicts. Race wins.
 *
 *   - If ANY chunk says race with confidence ≥ 0.7 → cluster is race.
 *     Confidence = MAX across the race verdicts. Reason cites the chunk
 *     count when multiple chunks fired.
 *   - Otherwise → cluster is safe. Confidence = MIN across safe verdicts
 *     (conservative — the weakest safe verdict caps the cluster).
 */
export declare function aggregateChunkVerdicts(verdicts: ReadonlyArray<ChunkVerdict>): ChunkVerdict;
//# sourceMappingURL=prompt-chunking.d.ts.map