import { LineReplacement } from '../../../util/vs/editor/common/core/edits/lineEdit';
export declare namespace ResponseProcessor {
    /**
     * Controls when to emit fast cursor line changes.
     * - `off`: Never emit fast cursor line changes
     * - `additiveOnly`: Only emit when the edit on the cursor line is additive (only adds text)
     */
    const enum EmitFastCursorLineChange {
        Off = "off",
        AdditiveOnly = "additiveOnly"
    }
    type DiffParams = {
        /**
         * Controls when to emit a fast cursor line change event.
         */
        readonly emitFastCursorLineChange: EmitFastCursorLineChange;
        readonly nSignificantLinesToConverge: number;
        readonly nLinesToConverge: number;
    };
    const DEFAULT_DIFF_PARAMS: DiffParams;
    /**
     * Maps the `emitFastCursorLineChange` setting value to the new type,
     * preserving backward compatibility with the old boolean type.
     */
    function mapEmitFastCursorLineChange(value: boolean | EmitFastCursorLineChange): EmitFastCursorLineChange;
    /**
     *
     * @param originalLines
     * @param modifiedLines
     * @param cursorOriginalLinesOffset offset of cursor within original lines
     */
    function diff(originalLines: string[], modifiedLines: AsyncIterable<string>, cursorOriginalLinesOffset: number, params: DiffParams): AsyncIterable<LineReplacement>;
    /**
     * Checks if a line edit is additive (only adds text without removing any).
     * An edit is additive if the original line is a subsequence of the new line,
     * meaning all characters from the original appear in the new line in the same order.
     *
     * Examples:
     * - "function fib() {" → "function fib(n: number) {" ✓ (additive)
     * - "hello world" → "hello" ✗ (not additive, removes " world")
     * - "abc" → "aXbYcZ" ✓ (additive)
     */
    function isAdditiveEdit(originalLine: string, newLine: string): boolean;
}
export declare class ArrayMap<K, V> {
    private map;
    /**
     * Appends a value to the array of values for the given key.
     */
    add(key: K, value: V): void;
    /**
     * Gets the array of values for the given key.
     * Returns an empty array if the key does not exist.
     */
    get(key: K): V[];
}
//# sourceMappingURL=responseProcessor.d.ts.map