/** * Append-only transcript renderer for the non-interactive surface * (06-ONESHOT §2/§3). * * stdout carries the assistant answer and nothing else; every status, notice, * thinking row, tool card, diff, compaction row and spinner frame goes to * stderr. No cursor movement or erase sequence is ever written to stdout, so a * redirected run stays a correct transcript. */ import type { AgentEvent } from "../agent/events.js"; import type { TurnOutcome } from "../agent/turn-outcome.js"; import { type StreamVerbosity } from "./stream-blocks.js"; export interface StreamRendererOptions { readonly out: NodeJS.WritableStream; readonly err: NodeJS.WritableStream; readonly columns: number; readonly color: boolean; readonly unicode: boolean; readonly verbosity: StreamVerbosity; readonly showThinking: boolean; } export declare class StreamRenderer { private readonly options; private readonly clock; private readonly ctx; private readonly spinner; private readonly tools; private readonly startedAt; private label; private lastAnswer; private finished; constructor(options: StreamRendererOptions, clock?: () => number); handle(event: AgentEvent): void; /** Writes the rendered outcome to stdout exactly once and stops the spinner. */ finish(outcome: TurnOutcome): void; private toolResultLines; private spin; private writeOut; private writeErr; }