diff --git a/crates/cli/src/app.rs b/crates/cli/src/app.rs index d11b4f7c..a20b98d4 100644 --- a/crates/cli/src/app.rs +++ b/crates/cli/src/app.rs @@ -41896,7 +41896,7 @@ mod tests { .expect("minibuffer widget render should not panic"); assert_eq!(app.layout.matrix_widget_hits.len(), 3); let text = rendered_text(term.backend().buffer()); - assert!(text.contains("minibuffer ─")); + assert!(text.contains("monitor ─")); assert!( text.contains("■"), "selected widget indicator should be filled" @@ -42077,7 +42077,7 @@ mod tests { .expect("collapsed rain title bar should render"); let text = rendered_text(term.backend().buffer()); assert!( - text.contains("minibuffer"), + text.contains("monitor"), "collapsed panel should keep its title bar: {text:?}" ); @@ -42141,7 +42141,7 @@ mod tests { term.draw(|f| crate::ui::render(f, &mut app)) .expect("minibuffer approval title should render"); let text = rendered_text(term.backend().buffer()); - assert!(text.contains("minibuffer !")); + assert!(text.contains("monitor !")); let (x_start, _x_end, y) = app .layout .matrix_minibuffer_title_hit diff --git a/crates/cli/src/ui.rs b/crates/cli/src/ui.rs index 1a104cc2..4dee6203 100644 --- a/crates/cli/src/ui.rs +++ b/crates/cli/src/ui.rs @@ -1184,9 +1184,9 @@ fn render_list_title_button_tooltips(f: &mut Frame, app: &App) { if let Some((xs, xe, y)) = matrix_rain_close_button_range(rain) { if my == y && mx >= xs && mx < xe { let (label, anchor_y) = if app.matrix_rain_hidden { - (" Expand Minibuffer ", y) + (" Expand monitor ", y) } else { - (" Collapse Minibuffer ", y.saturating_add(2)) + (" Collapse monitor ", y.saturating_add(2)) }; render_button_tooltip(f, &app.theme, label, xs, anchor_y); } @@ -3777,7 +3777,7 @@ fn split_lineage_section( /// Render the sidebar's lineage section: a header bar (a `─` rule carrying /// the `⑂ lineage` label, the view-mode toggle, and a `−`/`+` collapse -/// button — the same furniture as the minibuffer panel's title bar lower in +/// button — the same furniture as the monitor panel's title bar lower in /// the sidebar) /// above the selected session's lineage diagram. Reuses /// `App::lineage_section_rows` (`crate::lineage::build_tree`/`flatten` @@ -3807,7 +3807,7 @@ fn render_lineage_section( app.layout.lineage_area = Some(rect); let focused = app.lineage_focused && app.focus == PaneFocus::List; - // Header bar: a full-width `─` rule (the minibuffer panel's visual + // Header bar: a full-width `─` rule (the monitor panel's visual // language), label at the left, mode toggle + collapse button at the // right. The bare bar doubles as the height drag handle. let line_style = if focused { @@ -3843,7 +3843,7 @@ fn render_lineage_section( } else { " − " }; - // Flush right, matching the minibuffer panel's toggle below. + // Flush right, matching the monitor panel's toggle below. let bx = rect.x + rect.width.saturating_sub(3); let button = Rect { x: bx, @@ -5583,10 +5583,17 @@ fn render_matrix_rain_header(f: &mut Frame, area: Rect, app: &mut App, now: Inst // so the squares below reflect the live shown/pinned widget. app.matrix_widget_visible(now); let approval_pending = app.minibuffer_has_pending_approval(); + + // Pane title: this pane is the fleet's ambient *monitor* (rain / token + // meter / widget strip), so it must not be titled after the minibuffer + // — that names the dispatcher session in the bottom strip (spec 0199). + // The label still carries the minibuffer affordances (status tooltip, + // approval alert, click-to-open) because the default sidebar width has + // no room for a separate chip; the tooltip names the minibuffer. let minibuffer_text = if approval_pending { - "minibuffer !" + "monitor !" } else { - "minibuffer" + "monitor" }; // Play/pause toggle for the minibuffer ambient loop. @@ -5612,7 +5619,7 @@ fn render_matrix_rain_header(f: &mut Frame, area: Rect, app: &mut App, now: Inst .set_string(loop_icon_x, area.y, loop_icon, loop_icon_style); app.layout.matrix_minibuffer_loop_hit = Some((loop_icon_x, loop_icon_end, area.y)); - // Prompt label renders after the icon; the leading space in " minibuffer " + // Prompt label renders after the icon; the leading space in " monitor " // provides the visual gap between icon and text. let label = format!(" {minibuffer_text} "); let label_x = loop_icon_end; diff --git a/crates/daemon/assets/index.html b/crates/daemon/assets/index.html index 203e572e..204481a4 100644 --- a/crates/daemon/assets/index.html +++ b/crates/daemon/assets/index.html @@ -2911,7 +2911,7 @@ background: color-mix(in srgb, var(--accent) 45%, transparent); } - /* Minibuffer ambient panel (spec 0019 / 0167): fleet token meter by default. */ + /* Monitor ambient panel (spec 0019 / 0167): fleet token meter by default. */ .minibuffer-panel { flex: 0 0 auto; display: flex; @@ -3880,19 +3880,21 @@
+ aria-orientation="horizontal" aria-label="resize monitor panel">
- minibuffer - -
@@ -6263,7 +6265,7 @@

minibufferCollapseBtn.textContent = state.minibufferCollapsed ? "+" : "−"; minibufferCollapseBtn.setAttribute( "aria-label", - state.minibufferCollapsed ? "expand minibuffer panel" : "collapse minibuffer panel", + state.minibufferCollapsed ? "expand monitor panel" : "collapse monitor panel", ); } const tokens = state.minibufferPanelMode !== "rain"; diff --git a/specs/0019-minibuffer-widgets-use-matrix-rain-viewport.md b/specs/0019-minibuffer-widgets-use-matrix-rain-viewport.md index b2596dc7..51683e5b 100644 --- a/specs/0019-minibuffer-widgets-use-matrix-rain-viewport.md +++ b/specs/0019-minibuffer-widgets-use-matrix-rain-viewport.md @@ -1,7 +1,7 @@ # 0019-minibuffer-widgets-use-matrix-rain-viewport Status: accepted -Date: 2026-06-05 (amended 2026-08-01) +Date: 2026-06-05 (amended 2026-08-16) Area: tui Scope: Defines the ambient panel's selectable body modes and how the collapsed Minibuffer communicates through it. @@ -20,7 +20,7 @@ of the body, not a mode of its own. When the Minibuffer session is collapsed, the panel may act as a transient viewport over the Minibuffer session's normal sticky widgets. Minibuffer widgets keep the same lifecycle as all session widgets: sessions create, update, and delete them, and the viewport only controls temporary visibility. -Updating a Minibuffer widget briefly reveals it in the panel. The title bar shows the lowercase `minibuffer` label followed by one square indicator per visible Minibuffer widget, and a mode switch naming the mode currently showing, carrying the same swap glyph as the session list's view-mode toggle so the two controls read as one convention. Hovering the Minibuffer label may reveal the current Minibuffer status in a tooltip. Hovering a widget indicator may reveal that widget's title. Clicking an empty square selects and shows the widget; clicking the filled square hides the widget viewport. The existing close button continues to hide the Minibuffer/ambient panel itself, and is distinct from the mode switch — switching modes never collapses the panel. When the widget viewport hides or no Minibuffer widgets exist, the panel returns to its selected mode. +Updating a Minibuffer widget briefly reveals it in the panel. The title bar names the pane with the lowercase `monitor` title — the pane observes the fleet; `minibuffer` names the dispatcher session (spec 0199) and must never double as this pane's name. The title may also carry the Minibuffer affordances (loop toggle, status tooltip, approval alert, click-to-open) when the bar has no room for a second chip; the hover tooltip still names the Minibuffer so the control is not confused with the pane itself. Then come one square indicator per visible Minibuffer widget, and a mode switch naming the mode currently showing, carrying the same swap glyph as the session list's view-mode toggle so the two controls read as one convention. Hovering the title may reveal the current Minibuffer status in a tooltip. Hovering a widget indicator may reveal that widget's title. Clicking an empty square selects and shows the widget; clicking the filled square hides the widget viewport. The existing close button continues to hide the monitor/ambient panel itself, and is distinct from the mode switch — switching modes never collapses the panel. When the widget viewport hides or no Minibuffer widgets exist, the panel returns to its selected mode. ## Reason diff --git a/specs/0081-lineage-section-in-sidebar.md b/specs/0081-lineage-section-in-sidebar.md index 3f1aaff2..a98676cd 100644 --- a/specs/0081-lineage-section-in-sidebar.md +++ b/specs/0081-lineage-section-in-sidebar.md @@ -43,7 +43,7 @@ diagram glyph beneath them, while their full-cell tracks remain mouse-interactive. The section's header is a one-row horizontal rule carrying its label and -controls — the same visual furniture as the minibuffer panel's title bar +controls — the same visual furniture as the monitor panel's title bar lower in the sidebar: a `−`/`+` collapse button at the right end, the view-mode toggle beside it, and the bare rule doubling as a height drag handle (dragging up grows the section, within the same caps). The collapse state, the dragged diff --git a/specs/0186-webui-lineage-and-token-meter.md b/specs/0186-webui-lineage-and-token-meter.md index a31803c6..7de622be 100644 --- a/specs/0186-webui-lineage-and-token-meter.md +++ b/specs/0186-webui-lineage-and-token-meter.md @@ -1,7 +1,7 @@ # 0186-webui-lineage-and-token-meter Status: accepted -Date: 2026-08-02 (amended 2026-08-05) +Date: 2026-08-02 (amended 2026-08-16) Area: webui Scope: The web UI sidebar and persistent header expose the fleet token meter alongside the selected-session lineage section. @@ -9,7 +9,7 @@ Scope: The web UI sidebar and persistent header expose the fleet token meter alo The web client's left sidebar stacks the same durable regions the TUI does: session rows, then a collapsible **lineage** section, then a -collapsible **minibuffer** ambient panel. Operators remain ordinary list +collapsible **monitor** ambient panel. Operators remain ordinary list rows (as they already are on the web). ### Lineage section @@ -36,7 +36,7 @@ subagent / reset-snapshot), and subagent-group collapse match the TUI; the presentation uses HTML tree rows so the section remains usable on touch and narrow viewports. -### Minibuffer ambient panel +### Monitor ambient panel The ambient panel sits at the bottom of the sidebar and hosts the same named body modes as the TUI (spec 0019): @@ -89,7 +89,7 @@ the gap was client presentation. ## Consequences - Future web sidebar work must preserve the stack order: list → lineage - → minibuffer, and must not drop Cost events that arrive for unfocused + → monitor, and must not drop Cost events that arrive for unfocused sessions. - A collapse or expansion in the narrow mobile menu must not consume the corresponding wide-sidebar preference, or vice versa.