Skip to content

ui: brand palette, rendered markdown, and a vertical session nav#83

Merged
hbrooks merged 1 commit into
mainfrom
ui/brand-palette-markdown-vertical-nav
Jul 26, 2026
Merged

ui: brand palette, rendered markdown, and a vertical session nav#83
hbrooks merged 1 commit into
mainfrom
ui/brand-palette-markdown-vertical-nav

Conversation

@hbrooks

@hbrooks hbrooks commented Jul 26, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds src/lib/theme.ts, the Ellipsis dark palette, as the one source of color for the CLI. Every hardcoded cyan/green/red now reads from it.
  • Bone, not brand blue, carries "you are here" in dark mode. Brand ink scores 1.79:1 on the panel, so selection is a brightness step between surfaces.
  • Drops inverse video everywhere. Selected transcript lines, sandbox phases, and the composer lighten to a tinted surface instead of flashing white.
  • Renders agent markdown as styled ANSI via src/lib/markdown.ts. Bold, headings, bullets, tables, and fenced code stop showing raw asterisks and pipes.
  • Pre-wraps rendered text to the pane width, so viewport row estimates are exact instead of guesses and ink has nothing left to re-wrap.
  • Caches rendered output per (width, source). The transcript re-renders on every stream frame, so re-parsing history each time would be wasteful.
  • Measures ANSI-stripped width for all layout math, because escape sequences occupy no columns.
  • Chat messages become full-width tinted panels with a 1-cell pad. The 80%-width assistant column and its metadata gutter are gone.
  • Drops per-turn duration and cost summaries from the transcript. The footer's running spend already says it.
  • Collapses the settled sandbox block to its headline. reveals config and sandbox lines, again opens the phase panel, collapses back.
  • Turns the session nav from a horizontal windowed bar into a vertical list: + New session plus 5 recent sessions, one row each.
  • Moves nav keys to ↑/↓ (was ←/→). esc or off the top row returns to chat. New navSlice keeps one row of lookahead as the list scrolls.
  • Makes the header a tinted band: ellipsis.dev at the left edge, the focused session's id · model · $cost · N tokens at the right, with fallbacks that drop the link, then the model, then the spend.
  • Shows @ghLogin in customerLogin when no session is focused, so the header always says who you are.
  • Moves the Repository, Agent, and Model rows inside the new-session composer panel. Pickers unfold in place instead of popping up above the input.
  • Heads the repository list with the repo detected from the cwd as a normal checkable entry, replacing the Default (detected) row.
  • Starts a session idle on an empty prompt via idle_start, so the sandbox spins up and the first composer message opens turn 0.
  • Fills the new-session empty state with one random software-lore fact from src/lib/facts.ts, capped at 72 columns.
  • Filters laptop sessions out of the nav, and merges polled with composer-spawned sessions by id so a mid-create poll cannot double a row.
  • Upgrades to Ink 7, React 19, and SDK 0.4.0, targets node22, drops ink-spinner, and declares chalk and cli-table3 (imported directly, previously only transitive). connect now renders every frame off-TTY so the documented --no-input headless path is not silenced.

Test plan

  • npm test: 351 tests pass, including new suites for compactTokens, rowMeta, sessionSource, mergeSidebarSessions, navSlice, withRenderedMarkdown, and facts
  • npm run typecheck
  • npm run build
  • Drive agent interactively: markdown rendering, vertical nav keys, sandbox collapse, idle start from an empty prompt

Repaint the whole console in the Ellipsis dark palette, render agent
markdown as styled ANSI, and turn the horizontal session bar into a
vertical list. Ink 7 / React 19 and SDK 0.4.0 come along for the ride.
@hbrooks
hbrooks merged commit bc67efc into main Jul 26, 2026
1 check passed
@hbrooks
hbrooks deleted the ui/brand-palette-markdown-vertical-nav branch July 26, 2026 17:37
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