v0.8.0: TUI stabilization, command palette reverse-video highlight, hint bar redesign

- ROADMAP: consolidate all TUI work under v0.8.0 (removed premature
  v0.9.0/v0.10.x labels), restored original v0.9.0 eval harness plan
- channel-tui-view.org: Emacs-style reverse-video cursor (swap fg/bg
  instead of drawing █), hint bar now shows F:focus/MCP:count on left
  and token gauge + keybindings on right, sidebar reorganized to show
  GATE TRACE, RULES + BLOCK COUNT, COST, FILES panels
- channel-tui-main.org: command palette selection now uses reverse-video
  highlight (bg-input fg on input-fg bg, matching cursor style), fixed
  cond order so sel-p is checked before cat (all items had :category
  making sel-p unreachable), added session-cost extraction from daemon
- passepartout: export COLORTERM=truecolor for modern backend detection
This commit is contained in:
2026-05-17 15:37:40 -04:00
parent 2fedbbcb3b
commit e04b12c31c
53 changed files with 12406 additions and 197 deletions

View File

@@ -34,29 +34,26 @@ On release:
2. Extract DONE items from ROADMAP (all items with LOGBOOK timestamps since the last release tag) and use as the release notes body
3. If a ~CHANGELOG.md~ is needed for packaging tools, auto-generate it from ROADMAP DONE items
** DONE v0.8.0: Information Radiator (Foundation)
** v0.8.0: TUI Stabilization — cl-tty Migration + Information Radiator
Sidebar (6 panels), sidebar overlay mode (<120 cols), command palette (Ctrl+P), TrueColor theme (8 presets), unified minibuffer panel with slash-command context menu and sub-mode navigation (wizard, settings, help) — all built on ~cl-tty~ v1.1.0.
The croatoan TUI is replaced entirely by ~cl-tty~ v1.1.0. In progress across
multiple branches: the main branch does XDG-based tangling
(~/.local/share/passepartout/lisp/), the ~refactor/cl-tty-tui~ branch keeps
lisp files in the repo (~lisp/~). Both converge on the same goal — a stable,
feature-complete TUI with sidebar, command palette, warm palette, TrueColor
themes, and robust terminal handling.
The croatoan TUI is replaced entirely. cl-tty provides the widget set (box, text, scrollbox, select, markdown, dialog), keybinding system, and theme engine. Passepartout's job is wiring — cl-tty components call the daemon's TCP API and render its response structures.
*** DONE Minibuffer — cl-tty dialog stack
*** Minibuffer — cl-tty dialog stack
:PROPERTIES:
:ID: id-v080-minibuffer
:CREATED: [2026-05-10 Sat]
:END:
:LOGBOOK:
- State "DONE" from "TODO" [2026-05-13 Wed]
:END:
*** DONE Conversation view — cl-tty ScrollBox + Markdown
*** Conversation view — cl-tty ScrollBox + Markdown
:PROPERTIES:
:ID: id-v080-conversation
:CREATED: [2026-05-13 Wed]
:END:
:LOGBOOK:
- State "DONE" from "TODO" [2026-05-13 Wed]
:END:
- ~ScrollBox~ with ~sticky-scroll~ (auto-follows new content, respects manual scroll-up)
- User messages rendered as ~Box~ (role-colored left border)
@@ -66,14 +63,11 @@ The croatoan TUI is replaced entirely. cl-tty provides the widget set (box, text
~150 lines.
*** DONE Command palette — cl-tty Select
*** Command palette — cl-tty Select
:PROPERTIES:
:ID: id-v080-palette
:CREATED: [2026-05-13 Wed]
:END:
:LOGBOOK:
- State "DONE" from "TODO" [2026-05-13 Wed]
:END:
- Ctrl+P opens a ~select-dialog~ with all daemon commands
- Fuzzy-filtered with categories (session, memory, system, help)
@@ -81,14 +75,11 @@ The croatoan TUI is replaced entirely. cl-tty provides the widget set (box, text
~40 lines.
*** DONE Sidebar — cl-tty slot system
*** Sidebar — cl-tty slot system
:PROPERTIES:
:ID: id-v080-sidebar
:CREATED: [2026-05-13 Wed]
:END:
:LOGBOOK:
- State "DONE" from "TODO" [2026-05-13 Wed]
:END:
- 6 panels as cl-tty ~slot~ registrations (gate trace, focus, rules, context, cost, files)
- Toggle with Ctrl+B or auto-hide on narrow terminals (<120 cols)
@@ -96,14 +87,11 @@ The croatoan TUI is replaced entirely. cl-tty provides the widget set (box, text
~80 lines.
*** DONE Status bar — cl-tty Box + Theme
*** Status bar — cl-tty Box + Theme
:PROPERTIES:
:ID: id-v080-statusbar
:CREATED: [2026-05-13 Wed]
:END:
:LOGBOOK:
- State "DONE" from "TODO" [2026-05-13 Wed]
:END:
- Bottom-most line: directory, LSP status (green dot), MCP count, ~/status~ hint
- Degraded-mode signaling (amber when ~*degraded-components*~ non-nil)
@@ -111,7 +99,7 @@ The croatoan TUI is replaced entirely. cl-tty provides the widget set (box, text
~30 lines.
*** DONE Keybinding layer — cl-tty keymap
*** Keybinding layer — cl-tty keymap
:PROPERTIES:
:ID: id-v080-keybindings
:CREATED: [2026-05-13 Wed]
@@ -123,121 +111,19 @@ The croatoan TUI is replaced entirely. cl-tty provides the widget set (box, text
~40 lines.
~420 lines total.
*** Warm palette + three-zone layout (formerly v0.9.0)
** DONE v0.9.0: Warm TUI Redesign — Blank Slate
:LOGBOOK:
- State "DONE" from "TODO" [2026-05-13 Wed]
:END:
The v0.8.0 TUI had correct internal wiring but was unusable — input at the top
instead of the bottom, layout bugs where chat overwrote the status bar, and
Ctrl-key shortcuts silently failed. This work restructures the TUI into a clean
three-zone design with a warm amber/gold color palette. 18 theme tokens, 8 warm
presets. All integrated into the ongoing v0.8.0 TUI stabilization.
The v0.8.0 TUI has correct internal wiring but is unusable — input at the top
instead of the bottom, layout bugs where chat overwrites the status bar, and
Ctrl-key shortcuts silently fail. This version strips the TUI down to a clean
three-zone design with a warm amber/gold color palette inspired by OpenCode and
Gemini CLI. Everything in view/state/main is rewritten; only the daemon protocol
survives.
*** TUI hardening (formerly v0.10.x)
*** Visual Mockup
#+begin_example
┌──────────────────────────────────────────────────────────────────┐
│ │
│ ┌─ you ─────────────────────────────────────────────────┐ │
│ │ Can you refactor the dispatcher pipeline? │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ── passepartout ────────────────────────────────────────────── │
│ Sure. The issue is in run-gates — it calls predicates │
│ before checking type levels. Let me fix that. │
│ │
│ ┌─ shell: run tests ──── 0.3s ─────────────────────────┐ │
│ │ ✓ all 12 tests pass │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ────────────────────────────────────────────────────────────── │
│ │
│ > /focus stoa │
│ Ctrl+P palette │ Up/Dn history │ Tab complete │
├──────────────────────────────────────────────────────────────────┤
│ ● Connected stoa Rules:12 Cost:$0.42 14:30 │
└──────────────────────────────────────────────────────────────────┘
#+end_example
*** Three Zones
**** Zone 3 (bottom-most, 1 line): Status Bar (tmux-style)
Warm dark background (~#2A1F1A~), amber foreground (~#D4A574~). Always visible.
Left: ● Connected, project/focus name, rule count. Right: Session cost, clock.
No borders — background color alone defines the zone.
~30 lines.
**** Zone 2 (just above status, 2 lines): Input Area
Line 1 — ~>~ prompt (warm orange ~#FF8C42~), cursor visible. Readline keybindings
(Ctrl+A/E/U/W/K/Y), Up/Down history, Tab complete, Alt+Enter multi-line.
Line 2 — Context-sensitive hint bar (dim amber ~#A08060~):
Normal: Ctrl+P palette | Up/Dn history | Tab complete
Search: Up/Dn navigate | Enter jump | Esc exit
Dialog: Up/Dn select | Enter confirm | Esc dismiss
Slash commands appear as top-centered overlay dialogs.
~60 lines.
**** Zone 1 (scrollable, fills remaining space): Chat Area
User messages: boxed ~┌─ you ─┐~ / ~└─┘~ (bg #3A2A1A, fg #FFB347)
Agent messages: ~-- passepartout --~ header (fg #D4956A), body (fg #E8D5B7)
System: plain text (fg #C8A87C)
Tool calls: collapsible ~┌─ name -- 0.3s --┐~ (running #FF8C42, done #7CCC6C)
Gate traces: ~╎~ indented lines (pass green, block red, approval yellow)
Date separators between time blocks. Streaming inserts char by char.
~120 lines.
*** Warm Color Palette (18 keys, 8 presets)
| Token | Hex | Role |
|-------+-----+------|
| :user-fg | #FFB347 | User message text |
| :user-bg | #3A2A1A | User message background |
| :user-border | #CC8800 | User message box border |
| :agent-header | #D4956A | Agent message header |
| :agent-fg | #E8D5B7 | Agent message body |
| :system | #C8A87C | System notifications |
| :input-prompt | #FF8C42 | > prompt character |
| :input-fg | #E8D5B7 | Input text |
| :hint | #A08060 | Hint bar text |
| :status-bg | #2A1F1A | Status bar background |
| :status-fg | #D4A574 | Status bar text |
| :dot-connected | #7CCC6C | Status dot when connected |
| :dot-disconnected | #E2584A | Status dot when disconnected |
| :error | #E2584A | Error messages |
| :tool-running | #FF8C42 | In-progress tool |
| :tool-done | #7CCC6C | Completed tool |
| :separator | #4A3A2A | Horizontal rules |
| :accent | #FFB347 | Links, highlights |
| :dim | #8B7355 | Metadata, timestamps |
8 presets: amber, gold, terracotta, sepia, nord-warm, monokai-warm,
gruvbox-warm, light-amber.
~80 lines.
*** Build Plan (590 lines total)
| # | Task | Lines | Files |
|---+------+-------+-------|
| 1 | Layout restructure (+status bar) | 100| view.org, main.org |
| 2 | Warm palette | 80 | state.org |
| 3 | Input area (readline keybindings) | 60 | main.org |
| 4 | Chat messages (boxes, headers, tools) | 120 | view.org |
| 5 | Command palette | 50 | main.org, state.org |
| 6 | Sidebar | 60 | view.org, main.org |
| 7 | Keybindings (all Ctrl in :global) | 50 | main.org |
| 8 | Search | 40 | main.org, view.org |
| 9 | Help overlay | 30 | main.org |
Terminal cursor fixes, input handling, flicker elimination, CSI escape detection,
multi-line input, dark-neutral theme variant, cl-tty style-reset. Incremental
stabilization of the cl-tty TUI runtime.
*** Keybinding Reference
@@ -257,6 +143,24 @@ gruvbox-warm, light-amber.
| Ctrl+Q | Quit |
| ? | Help panel |
** v0.9.0: Eval Harness — Safety Net First
Every subsequent release ships with automated regression protection. The eval harness is the gate that makes self-modification safe — before any neurosymbolic component modifies the system, the harness verifies nothing broke.
*** TODO Internal evaluation harness — 10 tasks, regression detection
:PROPERTIES:
:ID: id-v090-eval-harness
:CREATED: [2026-05-08 Fri]
:END:
- New skill: ~symbolic-evaluation.org~~symbolic-evaluation.lisp~
- ~deftask~ macro: define an eval task with ~:setup~ (create test environment), ~:prompt~ (what to ask the agent), ~:verify~ (function that checks the output), ~:teardown~ (cleanup)
- ~run-eval-suite~: run all registered tasks, produce score (pass count / total), per-task diagnostics
- Initial 10 tasks: find TODOs, create Org note, search codebase, read file, query memory, list projects, run safe shell command, find definition, set TODO state, summarize session
- Regression mode: run after each version build. Fail CI if score drops.
- Task suite grows with codebase: every bug fix adds a regression task
~200 lines.
** v0.10.0: Emacs Development Environment — Secondary Client
cl-tty is the primary TUI (v0.8.0). The Emacs major mode is an optional secondary client for users who prefer Emacs-based workflows. Both clients communicate with the same daemon over the same TCP protocol — they are interchangeable frontends, not competing architectures.