/**
 * A from-scratch line diff and unified-style renderer.
 *
 * The core is Myers' O(ND) shortest-edit-script algorithm. Given two token
 * sequences (here: the lines of two text blobs), it finds the minimum number of
 * single-token insertions and deletions that turns the first into the second.
 * We run the greedy forward sweep, snapshotting the search frontier at every
 * edit depth, then walk those snapshots backward to recover the actual ordered
 * list of operations. From that list we group consecutive changes into
 * "hunks" and print them in the familiar `@@ … @@` / `+` / `-` / ` ` shape.
 *
 * Nothing here touches the filesystem or any external diff utility — it is a
 * self-contained string-to-string transformation, derived directly from the
 * published algorithm rather than adapted from any existing implementation.
 */
/** One step in an edit script: a line that stayed, was added, or was removed. */
export type DiffOpKind = "keep" | "add" | "remove";
/** A single line-level operation produced by the diff. */
export interface DiffOp {
    readonly kind: DiffOpKind;
    /** The line text, with its trailing newline already stripped. */
    readonly text: string;
    /** 1-based line number in the original blob (undefined for pure additions). */
    readonly beforeLine?: number;
    /** 1-based line number in the revised blob (undefined for pure removals). */
    readonly afterLine?: number;
}
/** Outcome of {@link diffLines}: the flat op list plus a few useful tallies. */
export interface LineDiff {
    readonly ops: DiffOp[];
    readonly added: number;
    readonly removed: number;
}
/**
 * Diff two text blobs at line granularity and return the full operation list.
 *
 * This is the public entry point used by tools that want structured change
 * data; {@link renderUnifiedDiff} consumes the same data for display.
 */
export declare function diffLines(before: string, after: string): LineDiff;
/**
 * Render a line diff in the conventional unified format.
 *
 * Each hunk opens with an `@@ -beforeStart,beforeCount +afterStart,afterCount @@`
 * header, followed by its lines prefixed with ` `, `-`, or `+`. When the two
 * blobs are identical the result is the empty string. `context` controls how
 * many unchanged lines frame each hunk (default 3).
 */
export declare function renderUnifiedDiff(before: string, after: string, context?: number): string;
