/** * Intelligent git diff processor that handles large diffs by sampling and prioritization * instead of blind truncation. */ export interface IDiffFileInfo { filepath: string; status: 'added' | 'modified' | 'deleted'; linesAdded: number; linesRemoved: number; totalLines: number; estimatedTokens: number; diffContent: string; } export interface IProcessedDiff { summary: string; fullDiffs: string[]; summarizedDiffs: string[]; metadataOnly: string[]; totalFiles: number; totalTokens: number; } export interface IDiffProcessorOptions { maxDiffTokens?: number; smallFileLines?: number; mediumFileLines?: number; sampleHeadLines?: number; sampleTailLines?: number; } export declare class DiffProcessor { private options; constructor(options?: IDiffProcessorOptions); /** * Process an array of git diffs into a structured, token-efficient format */ processDiffs(diffStringArray: string[]): IProcessedDiff; /** * Format the processed diff for inclusion in context */ formatForContext(processed: IProcessedDiff): string; /** * Parse a single git diff string into file information */ private parseDiffFile; private normalizeDiffPath; private decodeDiffPath; private parseGitHeaderPath; /** * Prioritize files by importance (source files before build artifacts) */ private prioritizeFiles; /** * Calculate importance score for a file path */ private getFileImportanceScore; /** * Extract head and tail lines from a diff, omitting the middle */ private extractDiffSample; /** * Get file status prefix with emoji */ private getFileStatusPrefix; /** * Extract filepath from diff content */ private extractFilepathFromDiff; /** * Format file info as metadata only */ private formatMetadataOnly; /** * Generate human-readable summary of processed diff */ private generateSummary; }