1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! omp-aligned append-only tape rendering engine.
//!
//! Port of omp's (`packages/tui/src/tui.ts`) native-scrollback model to Rust.
//! The core innovation: finalized rows commit to the terminal's native
//! scrollback (immutable), and only the live region (mutable suffix) repaints
//! in-place. This eliminates full-viewport re-rendering on every frame.
//!
//! ## Architecture
//!
//! ```text
//! TapeEngine
//! ├── committed_prefix: Vec<String> — finalized rows in scrollback
//! ├── previous_window: Vec<String> — last visible frame (for diffing)
//! ├── committed_rows: usize — prefix length
//! ├── window_top: usize — scroll offset
//! └── live_region_start: Option<usize> — mutable suffix boundary
//! ```
//!
//! ## Rendering flow
//!
//! 1. Compose: `root.render(width)` → `Vec<String>` (ANSI lines)
//! 2. Classify: `fullPaint` (resize/session-replace) vs `update` (differential)
//! 3. Emit:
//! - `emit_full_paint`: rewrite from home, optionally ED3 clear scrollback
//! - `emit_update`: commit new chunk + repaint changed window rows only
pub use ;
pub use Container;
pub use ;
pub use line_to_ansi;
pub use TranscriptRenderer;