/**
 * Git co-change analysis — surfaces files that historically change together.
 *
 * Uses git log to find temporal coupling between files, computes Jaccard
 * similarity coefficients, and stores results in the codegraph database.
 */
import type { BetterSqlite3Database } from '../types.js';
interface CommitEntry {
    sha: string;
    epoch: number;
    files: string[];
}
interface CoChangePair {
    commitCount: number;
    jaccard: number;
    lastEpoch: number;
}
export declare function scanGitHistory(repoRoot: string, opts?: {
    since?: string;
    afterSha?: string | null;
}): {
    commits: CommitEntry[];
};
export declare function computeCoChanges(commits: CommitEntry[], opts?: {
    minSupport?: number;
    maxFilesPerCommit?: number;
    knownFiles?: Set<string> | null;
}): {
    pairs: Map<string, CoChangePair>;
    fileCommitCounts: Map<string, number>;
};
export declare function analyzeCoChanges(customDbPath?: string, opts?: {
    since?: string;
    minSupport?: number;
    maxFilesPerCommit?: number;
    full?: boolean;
}): {
    pairsFound: number;
    commitsScanned: number;
    since: string;
    minSupport: number;
} | {
    error: string;
};
export declare function coChangeData(file: string, customDbPath?: string, opts?: {
    limit?: number;
    minJaccard?: number;
    noTests?: boolean;
    offset?: number;
}): Record<string, unknown>;
export declare function coChangeTopData(customDbPath?: string, opts?: {
    limit?: number;
    minJaccard?: number;
    noTests?: boolean;
    offset?: number;
}): Record<string, unknown>;
export declare function coChangeForFiles(files: string[], db: BetterSqlite3Database, opts?: {
    minJaccard?: number;
    limit?: number;
    noTests?: boolean;
}): Array<{
    file: string;
    coupledWith: string;
    commitCount: number;
    jaccard: number;
}>;
export {};
//# sourceMappingURL=cochange.d.ts.map