/** * Diff Engine * * File-level diff with unified text output (Tier 0 / P3). * Compares two points in history by reconstructing file states from the * op stream and producing file-level diffs with optional unified text diffs * via the blob store. * * DESIGN.md §4.5 — "At Tier 0 (before AST parsing is available), the diff * engine falls back to file-level comparison." */ import type { VcsOp } from './types.js'; import type { BlobResolver } from './blob-resolver.js'; export interface FileLevelDiff { kind: 'fileAdded' | 'fileModified' | 'fileDeleted' | 'fileRenamed'; path: string; oldPath?: string; oldContentHash?: string; newContentHash?: string; /** Unified diff text (only for fileModified when blob content is available). */ unifiedDiff?: string; } export interface DiffResult { diffs: FileLevelDiff[]; filesChanged: string[]; stats: { added: number; modified: number; removed: number; renamed: number; }; } export interface FileState { contentHash?: string; deleted?: boolean; } /** * Compute file-level diffs between two file state snapshots. * Optionally produces unified text diffs when a blob resolver is provided. */ export declare function diffFileStates(stateA: Map, stateB: Map, blobResolver?: BlobResolver | null): DiffResult; /** * Build cumulative file state from an array of ops up to (and including) * the op with the given hash. If no hash given, uses all ops. */ export declare function buildFileStateAtOp(ops: VcsOp[], atOpHash?: string): Map; /** * Diff two op hashes in the same op stream. */ export declare function diffOpRange(ops: VcsOp[], fromHash: string, toHash: string, blobResolver?: BlobResolver | null): DiffResult; interface EditOp { kind: 'equal' | 'insert' | 'delete'; line: string; } /** * Generate a unified diff string from two text inputs. */ export declare function generateUnifiedDiff(filePath: string, oldText: string, newText: string, contextLines?: number): string; /** * Myers diff algorithm — computes the shortest edit script between two * arrays of lines. Returns a sequence of equal/insert/delete operations. */ export declare function myersDiff(oldLines: string[], newLines: string[]): EditOp[]; export {}; //# sourceMappingURL=diff.d.ts.map