import type { ToolCallId } from "../../app/events/app-event.js"; import type { BoundedTextState } from "../../app/events/event-buffer.js"; import type { MarkdownStreamCache } from "../../ui-core/rendering/streaming-markdown.js"; import type { TranscriptState } from "../../ui-core/state/transcript-types.js"; import type { Glyphs } from "../render/glyphs.js"; import type { InkTheme } from "../render/ink-theme.js"; /** Read side of `OutputSpool`; keeps builders decoupled from the class. */ export interface SpoolReader { tail(toolCallId: ToolCallId): string; state(toolCallId: ToolCallId): BoundedTextState | undefined; } export declare const EMPTY_SPOOL: SpoolReader; /** * Everything a block builder may read. Nothing here is derived from process * state at build time — `now` is injected so every builder stays deterministic. */ export interface BlockContext { /** Content columns available to a block: `columns - 2`. */ readonly width: number; readonly ink: InkTheme; readonly glyphs: Glyphs; readonly now: number; readonly state: TranscriptState; readonly spool: SpoolReader; readonly markdownCache: MarkdownStreamCache | undefined; } /** Suffix threshold — keep timings visible; below this the label is clipped not dropped. Classic shows timings even at 40 cols. */ export declare const SUFFIX_MIN_COLUMNS = 44; export declare function separator(ctx: BlockContext): string; export declare function joinMeta(ctx: BlockContext, parts: readonly (string | undefined)[]): string; export declare function clipRow(ctx: BlockContext, text: string): string; export declare function formatElapsed(ms: number): string; export declare function hiddenLinesTrailer(ctx: BlockContext, hidden: number, chord: string, extra?: string): string | undefined;