import { type TruncationResult } from "./truncate.js";
export interface OutputAccumulatorOptions {
    maxLines?: number;
    maxBytes?: number;
    tempFilePrefix?: string;
    outputFilePath?: string;
    outputDisplayPath?: string;
    persistLines?: number;
    persistBytes?: number;
}
export interface OutputSnapshot {
    content: string;
    truncation: TruncationResult;
    fullOutputPath?: string;
}
/**
 * Incrementally tracks streaming output with bounded memory.
 *
 * Appends decode chunks with a streaming UTF-8 decoder, keeps only a decoded
 * tail for display snapshots, and opens a temp file when the full output needs
 * to be preserved.
 */
export declare class OutputAccumulator {
    private readonly maxLines;
    private readonly maxBytes;
    private readonly maxRollingBytes;
    private readonly persistLines;
    private readonly persistBytes;
    private readonly tempFilePrefix;
    private readonly outputFilePath;
    private readonly outputDisplayPath;
    private readonly decoder;
    private rawChunks;
    private tailText;
    private tailBytes;
    private tailStartsAtLineBoundary;
    private totalRawBytes;
    private totalDecodedBytes;
    private totalLines;
    private currentLineBytes;
    private finished;
    private tempFilePath;
    private tempFileStream;
    constructor(options?: OutputAccumulatorOptions);
    append(data: Buffer): void;
    finish(): void;
    snapshot(options?: {
        persistIfTruncated?: boolean;
    }): OutputSnapshot;
    closeTempFile(): Promise<void>;
    getLastLineBytes(): number;
    private appendDecodedText;
    private trimTail;
    private getSnapshotText;
    private shouldUseTempFile;
    private ensureTempFile;
}
//# sourceMappingURL=output-accumulator.d.ts.map