- Added missing closing paren for defun on-key in org/channel-tui-main.org
line 616 (was 7 trailing ), now 8)
- Replaced #\) character literal with (code-char 41) to avoid reader
ambiguity with paren-delimiter counting
- All 3 TUI org files tangled and verified compilable
- passepartout/tui loads without errors under SBCL 2.5.2
/context why <id> now shows full memory object details: parent,
children count, hash prefix, title from attributes.
/context dropped replaced literal stub with computed estimate of
pruned messages based on token budget (msg_count * 60 vs 8192).
- channel-tui-main: enhanced both debug handlers
- TUI Main: 102/102
audit-verify-hash counts total objects and those with missing/empty
hashes. /audit verify uses it to report VERIFY PASS or MISSING
HASHES count. fboundp-guarded.
- core-memory: audit-verify-hash fn, 1 test
- channel-tui-main: updated /audit verify handler
- Core: 90/90 TUI Main: 102/102
/context now shows full budget breakdown: IDENTITY, TOOLS,
TIME+CONFIG, LOGS with per-section token estimates, visual bar
chart, and percentage used. Over-80% warning.
Estimates computed from live state: identity/config lengths, tool
registry count, message count. Budget cap at 8192 tokens.
- channel-tui-main: rewritten /context handler, 1 new test
- TUI Main: 101/101
test-on-key-help checked for /eval in help output. The rewritten
help list dropped /eval which is still a working command. Fixed by
adding it as the first entry.
TUI Main: 98/98
Search mode activated by /search <query>. State fields: :search-mode,
:search-query, :search-matches, :search-match-idx. Up/Down arrows
navigate between matches, Enter jumps to current match, Escape exits.
search-highlight wraps matching substrings in **bold** for markdown
rendering. View-chat shows search header bar with match count and
current position.
- channel-tui-state: 4 search state fields in init-state
- channel-tui-main: modified /search handler, search-mode key handlers
(Up/Down/Enter/Escape), 3 new tests (activate, escape, nav)
- channel-tui-view: search-highlight fn, search header bar,
highlighted content in count+render loops
- TUI Main: 97/98 (1 pre-existing flake) View: 29/29
resolve-hitl-panel marks the most recent panel message with
:panel-resolved (:approved or :denied) and writes back to
the message vector. View-chat renders resolved panels with
dimmed color instead of :hitl theme color.
/approve and /deny handlers call resolve-hitl-panel after
sending structured events to the daemon. Confirmation messages
now use checkmark/crossmark prefixes.
- channel-tui-main: resolve-hitl-panel fn, wired into handlers
- channel-tui-view: is-resolved check for panel dimming
- +2 tests: panel-after-approve, panel-after-deny
- TUI Main: 88/89 (1 pre-existing flake)
View-chat renders gate-trace-lines as colored dim lines below agent
messages. Ctrl+G toggles collapse per message (stored in
:collapsed-gates state field). Default: visible. /why shows last
gate trace as system messages.
Tab integration deferred (paren fragility in on-key cond default
case). Ctrl+G is functionally equivalent for toggle UX.
View: 29/29 TUI Main: 85/86
/search <query>: case-insensitive substring search across message
history. Reports match count, previews with context around matches.
/context: shows message count, focus, token estimate, last 5 messages.
- channel-tui-main: /search and /context handlers, 1 test each
- TUI Main: 85/86 (1 pre-existing core flake)
- CONFIG section in system prompt: providers, context window, gate count,
rules learned, docs path
- /why TUI command: shows most recent gate trace from message history
- assemble-config-section reads live state at each think() call
- Core: 75/76 TUI Main: 77/78 (1 pre-existing RCE test flake)
char-width: contract 5, 4 tests (6 assertions), 100% pass
ASCII=1, CJK/Hangul/Kana/halfwidth=2, combining marks=0, tab=8
Pure Lisp, ~25 lines, no deps. Used by word-wrap for unicode.
status bar: contract 6, timestamp right-aligned at (- w 12)
Fixes overlap where focus map and timestamp both drew at :y 2 :x 1