export interface GitMetrics { dirtyFiles: number; dirtyFileNames: string[]; insertions: number; deletions: number; branch?: string; ahead?: number; behind?: number; upstream?: string; lastFetchedAt?: number; hasRepo: boolean; lastUpdated: number; summary?: string[]; summaryMode?: 'list' | 'ai'; /** True when the current working tree is a git submodule of another repo. */ isSubmodule?: boolean; /** Absolute path to the superproject root when inside a submodule. */ superprojectRoot?: string; } type GitCommandRunner = (args: string[], cwd: string) => Promise; export interface GitMetricsOptions { throttleMs?: number; runner?: GitCommandRunner; summaryMode?: 'list' | 'ai'; logger?: { warn(message: string): void; }; } export declare class GitMetricsCollector { private cache; private inflight; private readonly throttleMs; private readonly runner; private readonly summaryMode; private readonly logger?; private summaryJobs; private summaryCooldownUntil; private summaryCache; private summarySignatures; private upstreamCooldownUntil; constructor(options?: GitMetricsOptions); getCached(projectRoot: string): GitMetrics | undefined; refresh(projectRoot: string, force?: boolean): Promise; private collect; private maybeRefreshUpstream; private parseDirtyFiles; private extractPathFromStatus; private detectSuperproject; private parseBranch; private parseDiffStats; private maybeStartSummaryJob; private runClaudeSummary; } export {}; //# sourceMappingURL=git-metrics.d.ts.map