v0.7.1: Streaming + Markdown + URLs + Interrupt — TDD
Some checks failed
Deploy (Gitea) / deploy (push) Failing after 2s
Some checks failed
Deploy (Gitea) / deploy (push) Failing after 2s
Stream-chunk protocol: SSE streaming via provider-openai-stream, cascade-stream with fboundp guard in think(). TUI renders live. Stream interrupt: Esc during streaming marks [interrupted], finalizes msg. SSE cancel infrastructure: *stream-cancel* check in read loop. Markdown inline: **bold**, *italic*, `code` via parse-markdown-spans. Code blocks: parse-markdown-blocks + syntax-highlight (keywords/strings/fns). URL detection + Tab-to-activate: https:// URLs in dim, Tab opens. Watchdog: 30s stall detection via Dexador read-timeout. [streaming] indicator in status bar. Pre-existing TUI test fixes (7): first→aref, nil→zerop, add-msg arg. Core: 65/65 Neuro: 13/13 TUI View: 22/22 TUI Main: 65/65 Total: 165 tests, 0 failures.
This commit is contained in:
@@ -1110,6 +1110,9 @@ Rationale: Passepartout already has the infrastructure for time awareness — ti
|
||||
|
||||
|
||||
** v0.7.0: TUI Essentials — Terminal Parity
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
The TUI is the main UI for v1.0.0. Competitive analysis of Claude Code, OpenCode, Hermes, and OpenClaw revealed that Passepartout's TUI is architecturally sound but missing table-stakes terminal UX features. These are the things every terminal application since the 1980s does that Passepartout doesn't. No design philosophy would argue against them.
|
||||
|
||||
@@ -1169,7 +1172,7 @@ The TUI is the main UI for v1.0.0. Competitive analysis of Claude Code, OpenCode
|
||||
- ~@path<Tab>~ file path completion from ~memex/projects/~ (Org + Lisp files)
|
||||
- 3 TDD tests, all pass
|
||||
|
||||
*** TODO External editor integration (Ctrl+X+E) — done, pending test
|
||||
*** DONE External editor integration (Ctrl+X+E)
|
||||
:PROPERTIES:
|
||||
:ID: id-v070-external-editor
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
@@ -1183,29 +1186,23 @@ The TUI is the main UI for v1.0.0. Competitive analysis of Claude Code, OpenCode
|
||||
|
||||
*** TODO TUI-based setup wizard — deferred to v0.8.0
|
||||
|
||||
*** TODO Pads for chat scrolling — deferred to v0.7.1 (needs Croatoan terminal for testing)
|
||||
|
||||
*** TODO Deeper autocomplete (frecency + subcommand)
|
||||
:PROPERTIES:
|
||||
:ID: id-v070-autocomplete
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
Extend Tab completion beyond the 8 command names:
|
||||
- File attachment autocomplete: ~@passe<Tab>~ → ~@passepartout/org/core-reason.org~ with frecency ranking (frequency × recency decay, OpenCode pattern). Scans ~/memex/projects/~ for Org and Lisp files.
|
||||
- Subcommand completion: ~/theme <Tab>~ → lists theme names. ~/focus <Tab>~ → lists project directories. ~/skin <Tab>~ → lists installed skins.
|
||||
- Context-aware: argument-aware completion registered per command in a completion-function alist.
|
||||
~50 lines. No daemon changes — pure TUI string matching against memex directory tree.
|
||||
*** TODO Pads for chat scrolling — deferred to v0.7.2 (needs Croatoan terminal for testing)
|
||||
|
||||
** v0.7.1: TUI — Streaming + Markdown Rendering
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
Every competitor streams text as the LLM produces it. Passepartout shows a "…thinking" spinner then dumps a wall of text. This is v0.1-era UX. Also: LLM output contains ~**bold**~, ~```code blocks```~, and ~*italic*~ that are currently rendered as literal markdown characters. Both issues are daemon protocol + TUI rendering changes.
|
||||
|
||||
*** TODO Stream-chunk protocol
|
||||
*** DONE Stream-chunk protocol
|
||||
:PROPERTIES:
|
||||
:ID: id-v061-streaming
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
- New frame type ~(:type :stream-chunk :payload (:text "partial..."))~ in ~core-transport.lisp~. Final chunk is an empty string, signalling end-of-stream.
|
||||
- ~neuro-provider~: for providers supporting streaming (OpenRouter, OpenAI, Anthropic, Groq), send ~"stream": true~. Read SSE stream, extract ~delta.content~ from each chunk, call new ~*stream-callback*~ with partial text.
|
||||
@@ -1214,19 +1211,25 @@ Every competitor streams text as the LLM produces it. Passepartout shows a "…t
|
||||
- ~[streaming]~ indicator on current message; changes to timestamp on completion; ~[interrupted]~ if cancelled mid-stream.
|
||||
- ~50 lines daemon + ~80 lines TUI rendering.
|
||||
|
||||
*** TODO Streaming watchdog
|
||||
*** DONE Streaming watchdog
|
||||
:PROPERTIES:
|
||||
:ID: id-v061-watchdog
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
When the LLM stalls for 30+ seconds without new deltas, auto-reset the stream and inject a system message: "Response stalled — the model may be overloaded. Send another message to retry." Claude Code and OpenClaw both implement this pattern. ~25 lines.
|
||||
|
||||
*** TODO Markdown rendering — code blocks + bold + italic
|
||||
*** DONE Markdown rendering — code blocks + bold + italic
|
||||
:PROPERTIES:
|
||||
:ID: id-v061-markdown
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
Replace literal markdown syntax with styled text using Croatoan attributes:
|
||||
|
||||
@@ -1893,6 +1896,34 @@ After N HITL approvals of the same pattern, the dispatcher auto-approves it. But
|
||||
- This is the operational realization of "the more you use it, the cheaper it gets" — each certification represents a category of actions that will never cost another HITL prompt
|
||||
~60 lines in ~security-dispatcher.lisp~ + sidebar rendering reuse.
|
||||
|
||||
*** TODO Autonomous certification progress bar — visible "learning" indicator
|
||||
:PROPERTIES:
|
||||
:ID: id-v090-cert-progress
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
The certification badge grants permanent auto-approval. Users need to see this happening — "the cheaper over time" thesis must be visible.
|
||||
|
||||
- Sidebar Rules panel expanded to show progress bars: ~Rules: 12/47~ → ~██████████░░ 12/47~ and ~Certified: 3/12~ → ~██████░░░░░░ 3/12~
|
||||
- Milestone notifications: when a rule reaches certification, TUI injects: ~"🎖 Rule certified: shell commands in ~/memex/projects/* are now autonomous. 47 approvals, 0 denials. /certifications to review."~
|
||||
- Certification velocity: ~"+2 certified this week"~ trend indicator in sidebar
|
||||
~30 lines on top of existing sidebar rendering.
|
||||
|
||||
*** TODO Update mechanism + migrations
|
||||
:PROPERTIES:
|
||||
:ID: id-v090-update
|
||||
:CREATED: [2026-05-08 Fri]
|
||||
:END:
|
||||
|
||||
No update mechanism exists. Users must manually ~git pull~ and re-run ~passepartout setup~ (which reinstalls Quicklisp, retangles everything from scratch). Claude Code has ~claude update~, Hermes has ~hermes update~. Passepartout needs an incremental update path.
|
||||
|
||||
- ~passepartout update --check~ — query GitHub API ~GET /repos/amrgharbeia/passepartout/releases/latest~, compare with version stored in ~make-hello-message~. Report: "v0.5.1 available. 47 changes."
|
||||
- ~passepartout update~ (git-based) — ~git fetch --tags && git checkout v0.5.1~, incremental tangle (only org files changed since previous tag, via ~git diff --name-only v0.5.0..v0.5.1 -- org/*.org~), recompile changed lisp files, restart daemon
|
||||
- Migration hooks: ~~/memex/system/migrations/~ — ordered Lisp scripts run after tangle, before daemon restart. ~migrate-v051.lisp~ upgrades memory format, config schema, package names. Tracked by ~*migration-version*~ in ~~/.config/passepartout/version.lisp~
|
||||
- Post-update verification: run internal eval suite, verify skill count ≥ 10, smoke test daemon port 9105. On failure: ~passepartout update --rollback~ → ~git checkout v0.5.0~ → re-tangle → restart
|
||||
- Binary update path (when v0.14.0 ships): download binary from GitHub Releases, verify SHA-256, replace, restart
|
||||
~80 lines bash + ~50 lines Lisp.
|
||||
|
||||
** v0.10.0: Tool Ecosystem (MCP-Native) + Voice Gateway
|
||||
|
||||
*(Renumbered from old v0.8.0.)*
|
||||
|
||||
Reference in New Issue
Block a user