v0.5.1 - 2026-09-09
Added
- Persistent scrollback - the SQLite+FTS5 history store is wired into pane lifecycle, keyed by stable
attachment_id(schema v2; pre-v2 rows dropped as unrecoverable). The newesthistory_linesrows are restored into each pane’s scrollback on restart and backpane-readacross restarts. history_linessetting - caps persisted scrollback per pane (default 10 000, clamped 100–100 000) in Settings → Terminal.- History search - the terminal search bar gains a Live/History scope toggle; History mode runs FTS5 queries against the pane’s persisted scrollback and lists matching lines (click copies to clipboard).
- Workspaces - named pane sets (up to 8) with keep-alive panes: switching hides/shows grids instead of killing PTYs, so background commands keep running. Add/switch/close/rename via the sidebar’s Workspaces section (
Ctrl+PageUp/Ctrl+PageDownto switch); saved touser://workspaces.json, with one-shot migration of the legacylayout.json(replaces theLayoutManagerautoload). Concept captures and agent events keep routing from hidden workspaces. - Sidebar polish - content margins (right ≈ scrollbar width), measured section heights that never truncate rows, icon+text action buttons (Settings/Reset/Search), and active-row accents across the workspaces, profiles, and panes sections.
- Profile rename - double-click a user profile in the sidebar to rename it inline (persisted, dedupe-suffixed like profile creation).
- Live pane-API smoke -
scripts/smoke-pane-apiboots the GUI headless with sandboxed user data and drives new-pane, pane-status, inject, pane-wait, pane-read, broadcast, pane-run (exit code), and kill-pane end-to-end, plus the event socket’ssubscribe/eventsPollfan-out; wired intoci-checkand the CIgut-testsjob.
Changed
- History retention trims the oldest rows beyond
history_linesamortized over every 100 committed lines. start_shellno longer attaches a history store keyed by the per-nodeidcounter (rows collided across panes and orphaned across restarts).pane-runexecutes commands through the configured shell (<shell> -c <command>) - compound commands (&&, pipes, globs) now work; the command is passed as a sanitized argument (shell_args), never as the program itself. Empty commands are rejected.- Clicking any pane makes it the active pane - the status bar and sidebar accent follow. Only terminals take keyboard focus; read-only panes (Reasoning, code viewer, file tree) swallow keys, so typing no longer reaches a terminal you just left.
- New workspaces start as a blank slate instead of auto-spawning a terminal.
Fixed
- Pane API unreachable:
pane-read,pane-status,pane-run,pane-wait, andbroadcastwere never registered on the GUI IPC server, so every CLI call returnedUnknown method. - Targeted pane API calls always failed with “not found”:
paneRead/paneStatus/paneWaitguarded onhas_method("_terminal"), but_terminalis a property, not a method. Guards now checkis TerminalPane. - Toasts rendered half-hidden under the status bar - they now float above it.
- The docs site could bake Hugo’s own README as the project overview - the deploy now extracts only the
hugobinary and smoke-checks the baked overview.