import { type Component } from '@earendil-works/pi-tui'; import type { CondensedHistoryMode } from '../../../types.js'; /** A message from the broker snapshot, structurally. */ type Message = { role?: string; customType?: string; }; export declare function isCycleDivider(message: Message): boolean; /** Does this message survive condensation into the frozen block? */ export declare function keepWhenCondensed(message: Message, mode: CondensedHistoryMode): boolean; /** * Index into `messages` at which the LIVE (fully rendered) region begins. * * The snapshot is `[cycle 0][divider][cycle 1][divider]…[current cycle]`, so a * transcript with D dividers holds D+1 cycles. Keeping the trailing * `liveCycles` of them means everything up to and including divider * `D - liveCycles` is condensed. Returns 0 — condense nothing — when the node * has not yielded often enough to have older cycles, so a fresh or * single-yield node renders exactly as it always did. */ export declare function liveRegionStart(messages: readonly Message[], liveCycles: number): number; /** * A settled block of pre-rendered transcript lines. Renders in O(1) at the width * it was frozen at, and clips (never reflows) when the pane is narrower. Ctrl+O / * Ctrl+T do not reach it: it holds no components to expand, only text. */ export declare class FrozenHistoryComponent implements Component { private readonly lines; private readonly frozenWidth; /** Last clip result, so a stable narrow pane clips once rather than per frame. */ private clipped; constructor(lines: readonly string[], frozenWidth: number); get lineCount(): number; /** Nothing to recompute — the block is text, already laid out. */ invalidate(): void; render(width: number): string[]; } export {};