From edfcfcd7e186672a0c15655356b4ab1af5fbdfee Mon Sep 17 00:00:00 2001 From: Hermes Date: Tue, 12 May 2026 22:47:42 +0000 Subject: [PATCH] docs: update v0.8.0+ roadmap for cl-tty, Emacs-style bottom panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sidebar: Croatoan window → cl-tty framebuffer draw-text - Overlay mode: absolute-positioned ncurses → Emacs minibuffer-style bottom panel (shrink chat height, render in freed rows) - Command palette: Croatoan window overlay → framebuffer bottom panel - TrueColor: Croatoan set-rgb → cl-tty hex-to-rgb + SGR 38/48 - Tool viz: Croatoan init-pair/color-pair → cl-tty draw-text fg/bg - Mouse: Croatoan mouse-enabled-p → cl-tty v1.1.0 SGR mouse parsing --- docs/ROADMAP.org | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/docs/ROADMAP.org b/docs/ROADMAP.org index 79091e1..c527bea 100644 --- a/docs/ROADMAP.org +++ b/docs/ROADMAP.org @@ -1514,15 +1514,23 @@ Content (ordered vertically): 6. ~Cost~ — session cost (~$0.12 this session~) updating after each LLM call. 7. ~Protection~ — gate effectiveness counter: "Gates blocked: 3 destructive, 7 network exfil, 12 secrets." Updated on each gate decision. This is the specific-value-proposition panel — no competitor has deterministic gates to count. -Implementation uses a fourth Croatoan ~window~ (sidebar on right) or a panel overlay. All data is already in the daemon's response plist (~:rule-count~, ~:foveal-id~, ~:gate-trace~). The gate block counts come from a new ~*dispatcher-block-counts*~ alist tracked in ~dispatcher-check~. ~200 lines (includes panel 7 addition). +|Implementation uses cl-tty's framebuffer-backend: render the sidebar panels—Gate trace, focus, rules, context gauge, files, cost, protection—to the right region of the framebuffer (offset x = width - 42). In the Emacs minibuffer-style approach (below), the panel content renders at the bottom of the terminal instead. All data is already in the daemon's response plist (~:rule-count~, ~:foveal-id~, ~:gate-trace~). The gate block counts come from a new ~*dispatcher-block-counts*~ alist tracked in ~dispatcher-check~. ~200 lines (includes panel 7 addition). -*** TODO Sidebar overlay mode (< 120 cols) +*** TODO Information panel — Emacs minibuffer-style bottom region :PROPERTIES: :ID: id-v070-sidebar-overlay :CREATED: [2026-05-08 Fri] :END: -When terminal width < 120, sidebar becomes an absolute-positioned overlay with semi-transparent backdrop (ncurses ~opaque~ + themed background). Toggle via ~/sidebar~ or ~Ctrl+X+B~. The chat area fills the full width when sidebar is hidden. ~30 lines. +Replaces the Croatoan overlay approach. Uses cl-tty's framebuffer: the +chat area height shrinks by N lines and the panel content (gate trace, +focus, rules, context gauge, cost, protection counters) renders into the +freed rows at the bottom. No z-ordering or transparency needed. Dismissal +restores chat to full height. + +Toggle via ~/sidebar~ or ~Ctrl+X+B~. When terminal width < 120, the side +panel info renders here. At ≥ 120 columns, renders as right sidebar +instead (offset x = width - 42). ~30 lines. *** TODO Command palette (Ctrl+P) :PROPERTIES: @@ -1532,11 +1540,12 @@ When terminal width < 120, sidebar becomes an absolute-positioned overlay with s Single entry point for all actions. Mirrors OpenCode's pattern — fuzzy-searchable, categorized, keyboard-navigable: -- ~Ctrl+P~ opens palette as overlay dialog -- Categories: Session (~/focus~, ~/scope~, ~/unfocus~, ~/rename~), Agent (~/rules~, ~/approve~, ~/config~), View (~/theme~, ~/sidebar~, ~/clear~), System (~/eval~, ~/status~, ~/reconnect~, ~/quit~) -- Fuzzy text filter; Up/Down to navigate; Enter to execute; Esc to dismiss -- Also shows keyboard shortcuts for each command as hints -- Implemented as a Croatoan ~window~ overlay with ~add-string~-based rendering and ~get-char~-based filtering. ~100 lines. +|- ~Ctrl+P~ opens palette in the bottom panel area +|- Categories: Session (~/focus~, ~/scope~, ~/unfocus~, ~/rename~), Agent (~/rules~, ~/approve~, ~/config~), View (~/theme~, ~/sidebar~, ~/clear~), System (~/eval~, ~/status~, ~/reconnect~, ~/quit~) +|- Fuzzy text filter; Up/Down to navigate; Enter to execute; Esc to dismiss +|- Also shows keyboard shortcuts for each command as hints +|- Implemented using cl-tty's framebuffer ~draw-text~ in the bottom panel + region, with keyboard input from ~read-event~. ~100 lines. *** TODO TrueColor theme expansion (8 presets) :PROPERTIES: @@ -1544,7 +1553,9 @@ Single entry point for all actions. Mirrors OpenCode's pattern — fuzzy-searcha :CREATED: [2026-05-08 Fri] :END: -All 27 existing theme keys wired into rendering. Use Croatoan's ~set-rgb~ for 24-bit hex color support (already available in Croatoan; currently unused). Add 4 new presets to the existing 4: +|All 27 existing theme keys wired into rendering. cl-tty's modern-backend +|supports 24-bit RGB via hex-to-rgb + SGR 38/48 escapes — the theme-color +|function already returns hex strings. Add 4 new presets to the existing 4: - ~nord~: blue-gray backgrounds, frost accent (#5E81AC key, #BF616A error, #A3BE8C success) - ~tokyonight~: purple-blue backgrounds, teal accent (#7AA2F7 key, #F7768E error, #9ECE6A success) @@ -1584,7 +1595,8 @@ When the agent invokes a tool: - Output collapsed by default to single-line summary. Tab on a tool invocation toggles full output. - Diff display: ~+~ (green) / ~-~ (red) coloring for file edits. 3 lines of context around changes. The ~:tool-output~ theme color provides the background. -Uses Croatoan's ~init-pair~ + ~color-pair~ for 256-color backgrounds on tool state regions. ~100 lines. +|Uses cl-tty's ~draw-text~ with foreground/background color arguments to +|color tool state regions. ~100 lines. *** TODO Mouse support :PROPERTIES: @@ -1592,7 +1604,10 @@ Uses Croatoan's ~init-pair~ + ~color-pair~ for 256-color backgrounds on tool sta :CREATED: [2026-05-08 Fri] :END: -Croatoan supports ncurses mouse mode via ~(setf mouse-enabled-p)~. Enable: +|cl-tty v1.1.0 supports SGR mouse events via ~enable-mouse~ (already called +|in ~initialize-backend~). ~read-event~ now returns ~mouse-event~ structs +|with ~:press~/~:release~ types, button keywords, and 0-based coordinates. +|Mouse support provides: - Scroll wheel: PageUp/PageDown equivalent, scrolls chat by viewport height - Click to position cursor in input area