Skip to content

feat(012): TUI visual revamp — theme-true widgets, bee identity, panel interactivity - #7

Merged
jlgore merged 1 commit into
mainfrom
012-tui-visual-revamp
Jul 25, 2026
Merged

feat(012): TUI visual revamp — theme-true widgets, bee identity, panel interactivity#7
jlgore merged 1 commit into
mainfrom
012-tui-visual-revamp

Conversation

@jlgore

@jlgore jlgore commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What this is

The full visual pass on bee's TUI, iterated through the SVG export/review loop (cargo xtask viz-gallery / the new viz-screens). Four areas:

Widgets render correctly and theme-true

  • Line charts actually draw lines — datasets never set GraphType::Line, so every line chart rendered as disconnected braille dots. Area charts now fill to the baseline (GraphType::Area + fill_to_y).
  • Series colors resolve through the active theme in fixed categorical order (was hardcoded Cyan/Yellow/Green/…); multi-series charts always get a legend, single-series never do.
  • Heatmap ramps one hue with a floor instead of fading low values to black; tables right-align numeric columns; gauges get sub-cell unicode edges and contrast-aware labels; one shared rounded/dim-border/bold-title frame. All NO_COLOR-safe.
  • New RenderSpec::LogTail — bottom-anchored stream tail (built for sandbox denials): letter+color level markers, truncate-not-wrap, full rhai builder (log_tail/line/max_rows), and no per-append dissolve — the arriving line is the report.

Chrome carries bee's identity

  • Header context bar: honey bee badge · model id · a three-cell honeycomb working indicator phased by session events — it moves when data flows and freezes when the stream stalls.
  • Rounded -prompt input, accent-key/dim-label footer hints, gutter marker on user messages, honey hexagon panel labels (outer panel border removed — it double-framed every widget).
  • Syntax highlighting in markdown code fences (tui-markdown highlight-code), paired to the active theme and stripped under NO_COLOR.

Panels are drivable

  • Focus::Panels joins the Tab cycle while panels are on screen: j/k select (reverse video), Space collapses to the label row (; operator state — agent upserts can't unfold), x closes. Footer hints follow the focus.

Themes

  • New built-ins: gruvbox, tokyo-night, rosé-pine. --theme auto detects the terminal background (OSC 11 query → $COLORFGBG fallback) and picks latte/mocha, honeycomb when undetectable.

Tooling

  • cargo xtask viz-screens renders the full TUI (staged states, any theme) to SVG through the real view().
  • The chrome scene mocks now mirror the shipped header/footer; baselines regenerated, all 46 snapshot frames match.

Notes for review

  • Carries the in-flight EffectSpec plumbing (session/tools/transcript) this work builds on.
  • tests/repl_command::no_provider_at_all_reports_what_is_missing fails on main before and after this branch (the enforcement gate fires before the provider-completeness check) — pre-existing, not introduced here.
  • Verified in a clean worktree: workspace clippy zero warnings; full suite green apart from the pre-existing failure above.

🤖 Generated with Claude Code

https://claude.ai/code/session_01JqVH9oZ4unqY8d1noMqtXN

…l interactivity

The chat pane, chrome, and every data widget get the design pass the tooling
was built for, reviewed via SVG exports at each step.

Widgets (buffer_render):
- Line charts draw lines (GraphType::Line; the default Scatter left braille
  constellations), areas fill to the baseline (GraphType::Area + fill_to_y).
- Series colors resolve through the active theme in fixed categorical order;
  multi-series charts always show a legend, single-series charts never do.
- Heatmap ramps one hue with a 22% floor instead of fading to black; cells get
  a spacer column and contrast-flipping ink.
- Tables right-align numeric columns; gauges use sub-cell unicode edges with
  contrast-aware labels; every widget shares one rounded dim-border/bold-title
  frame. All styling is NO_COLOR-safe.
- New RenderSpec::LogTail: bottom-anchored stream tail (newest last, truncate
  not wrap) with letter+color level markers, a full rhai builder surface, and
  no per-append update transition — the arriving line is the report.

Chrome & chat (tui):
- Header is a context bar: honey `bee` badge, model id, and a three-cell
  honeycomb working indicator whose phase is driven by session events — it
  moves when data flows and freezes when the stream stalls.
- Footer hints render key-accent/label-dim and follow the focus; input is a
  rounded box with a ❯ prompt; user messages carry an accent ❯ gutter marker.
- Panels drop their outer border (the widget's own frame was nesting two deep)
  for a honey hexagon gutter label. Syntax highlighting lands in markdown code
  fences via tui-markdown's highlight-code, theme-paired and NO_COLOR-stripped.

Panel interactivity:
- Focus::Panels joins the Tab cycle while panels are on screen; j/k select
  (reverse-video), Space collapses to the label row (⬢→⬡, operator state that
  upserts cannot unfold), x closes. Contextual footer + help entries.

Themes:
- New built-ins: gruvbox, tokyo-night, rose-pine. `--theme auto` detects the
  terminal background (OSC 11 query, then COLORFGBG) and picks latte/mocha,
  falling back to honeycomb when undetectable.

Tooling (xtask):
- viz-screens renders the full TUI at staged states/sizes to SVG through the
  real view(); gallery gains log_tail and honors REVERSED/BOLD plus braille
  and hexagon glyph fallbacks in exports. Scene mocks for chrome_header/footer
  now mirror the shipped chrome; their baselines are regenerated (all 46
  snapshot frames match).

Also carries the in-flight EffectSpec plumbing through session/tools/
transcript that the effect work builds on. tests/repl_command's
no_provider_at_all_reports_what_is_missing fails on main before and after
this branch (enforcement gate precedes the completeness check) — unrelated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JqVH9oZ4unqY8d1noMqtXN
@jlgore
jlgore merged commit f7bb3e3 into main Jul 25, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant