Add an experimental UI tree renderer for the status line (#57970)

## What changed

- Add the disabled-by-default `tui_extensions_statusline` feature to render configured status items and their picker preview through a shared UI tree renderer.
- Support text, HTTP(S) links, rows, spacers, dividers, and gaps with rendering budgets, text sanitization, and width-aware truncation that keeps the ellipsis outside hyperlinks.
- Use plain text for the extension status line and hide the picker's theme color toggle while preserving the saved color preference.

## Testing

Add coverage for tree serialization and URL validation, Unicode widths, hyperlink clipping, picker previews, color preference preservation, and token usage updates across renderer switches.

GitOrigin-RevId: a6b87c2b1096765d61296d73e142834fcd53ceee
This commit is contained in:
Joe Savona
2026-10-29 03:07:15 +00:00
committed by copyberry
parent 6c776cfc8c
commit 797bab4746
22 changed files with 670 additions and 86 deletions
+8
View File
@@ -123,6 +123,8 @@ pub enum Feature {
DaemonAutoStart,
/// Allow the TUI to discover and select among multiple conversation backends.
TuiMultiBackend,
/// Render the configured status line through the experimental TUI Extensions renderer.
TuiExtensionsStatusLine,
/// Enable negotiated zstd compression for app-server WebSocket and UDS connections.
AppServerWebSocketCompression,
@@ -1098,6 +1100,12 @@ pub const FEATURES: &[FeatureSpec] = &[
stage: Stage::UnderDevelopment,
default_enabled: false,
},
FeatureSpec {
id: Feature::TuiExtensionsStatusLine,
key: "tui_extensions_statusline",
stage: Stage::UnderDevelopment,
default_enabled: false,
},
FeatureSpec {
id: Feature::AppServerWebSocketCompression,
key: "app_server_websocket_compression",