import type { AgentTUIInputQuestion, AgentTUIInputQuestionResponse, AgentTUIRenderer, AgentTUISessionOptions, AgentTUIStreamResult, AgentTUIToolApprovalRequest, AgentTUIToolApprovalResponse, ConnectionAuthUpdate, SubagentStepUpdate, SubagentToolUpdate } from "./runner.js"; import type { SetupFlowRenderer } from "./setup-flow.js"; import type { AssistantResponseStatsMode, LogDisplayMode, TerminalPartDisplayMode } from "./types.js"; import type { AgentInfoResult } from "#client/index.js"; import type { VercelStatusSnapshot } from "./vercel-status.js"; export type TerminalInput = { isTTY?: boolean; on(event: "data", listener: (chunk: Buffer) => void): TerminalInput; off(event: "data", listener: (chunk: Buffer) => void): TerminalInput; resume(): TerminalInput; pause(): TerminalInput; setRawMode?: (mode: boolean) => TerminalInput; }; export type TerminalOutput = { isTTY?: boolean; columns?: number; rows?: number; write(chunk: string | Uint8Array, encodingOrCallback?: BufferEncoding | ((error?: Error | null) => void), callback?: (error?: Error | null) => void): boolean; on(event: "resize", listener: () => void): TerminalOutput; off(event: "resize", listener: () => void): TerminalOutput; }; export type TerminalRendererOptions = { input?: TerminalInput; output?: TerminalOutput; tools?: TerminalPartDisplayMode; reasoning?: TerminalPartDisplayMode; subagents?: TerminalPartDisplayMode; connectionAuth?: TerminalPartDisplayMode; assistantResponseStats?: AssistantResponseStatsMode; contextSize?: number; captureForeignOutput?: boolean; logs?: LogDisplayMode; color?: boolean; unicode?: boolean; }; export type AgentHeaderOptions = { name: string; serverUrl: string; info?: AgentInfoResult; /** Message-of-the-day line under the brand line (local sessions only). */ tip?: string; }; export declare class TerminalRenderer implements AgentTUIRenderer { #private; readonly setupFlow: SetupFlowRenderer; constructor(options?: TerminalRendererOptions); /** * Commits the startup agent header (brand mark + resolved configuration) to * scrollback before the first prompt. Later calls (dev HMR refreshing fields * such as the agent name) commit a fresh header beneath the existing * transcript only when the rendered header actually changed — every source * reload re-sends it, and an identical banner repeated per reload is noise. * Committed scrollback is never cleared or replayed. */ renderAgentHeader(options: AgentHeaderOptions): void; readPrompt(options?: AgentTUISessionOptions): Promise; renderStream(result: AgentTUIStreamResult, options?: AgentTUISessionOptions): Promise; readToolApproval(request: AgentTUIToolApprovalRequest, options?: AgentTUISessionOptions): Promise; readInputQuestion(question: AgentTUIInputQuestion, options?: AgentTUISessionOptions): Promise; upsertSubagentStep(update: SubagentStepUpdate): void; upsertSubagentTool(update: SubagentToolUpdate): void; markChildToolCallId(callId: string): void; upsertConnectionAuth(update: ConnectionAuthUpdate): void; setConnectionAuthPendingCount(count: number): void; setVercelStatus(status: VercelStatusSnapshot): void; reset(): void; /** * Commits a single dim informational line to the transcript (e.g. the * session-recovery notice after a terminal server failure). No-op when the * text is blank. */ renderNotice(text: string): void; renderSandboxLog(text: string): void; /** * Sets the setup attention line (yellow `⚠`, commands blue) as a live footer * element above the prompt. Unlike committed scrollback, it can be cleared: * once the underlying issue is fixed (e.g. `/login` succeeds) the runner calls * {@link clearSetupWarning} and the line disappears rather than lingering * stale in the transcript. */ renderSetupWarning(text: string): void; /** Removes the setup attention line once its issue is resolved. */ clearSetupWarning(): void; /** * Commits one command's outcome under its invocation with the elbow * connector (` ⎿ /model cancelled.`), Claude Code's sub-result grammar. */ renderCommandResult(text: string): void; shutdown(): void; /** The log sources the transcript currently renders. */ logDisplayMode(): LogDisplayMode; /** * Switches which captured log sources the transcript shows. Captured * output is buffered in the block history regardless of mode, so the * committed transcript is re-rendered under the new filter and replayed: * hiding removes past log lines, showing restores them at their original * positions. */ setLogDisplayMode(mode: LogDisplayMode): void; flushDelayedDevBuildErrors(): void; }