feat(tui-go): command-palette keybinds + configurable status bar
Palette: each command now shows its bare-key shortcut in a key column (and the filter matches on it), so the palette teaches the shortcuts instead of hiding them. Status bar: a new "status bar" palette command opens a toggle overlay to show/hide the non-essential segments (current stage, session status, workspace path, model, last-event clock, resource gauge); correx/connection/session-name/spinner stay. Choices persist TUI-local in tui-prefs.json (JSON in the config dir — display state, kept out of the shared/replayed server config) and reload on launch. Also trims the in-session footer (drops stats/model — both reachable via `p cmds`) so it no longer overflows + truncates `q quit` at ~100 cols after the transcript-nav additions. Tests cover toggle→render gating and prefs persistence; verified via cmd/preview renders. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -58,6 +58,7 @@ const (
|
||||
OverlayIdeas
|
||||
OverlaySessions
|
||||
OverlayFiles
|
||||
OverlayStatusbar
|
||||
)
|
||||
|
||||
// RouterEntry is one line in a session's conversation transcript.
|
||||
@@ -188,11 +189,11 @@ type Session struct {
|
||||
// PendingQueue[PendingIdx] (kept in sync by syncPending) so the render code can
|
||||
// keep reading a single pointer while multiple gates queue up behind it.
|
||||
Pending *Approval
|
||||
PendingQueue []*Approval // all pending gates, oldest first; navigated with ↑/↓
|
||||
PendingIdx int // selected index into PendingQueue
|
||||
PendingQueue []*Approval // all pending gates, oldest first; navigated with ↑/↓
|
||||
PendingIdx int // selected index into PendingQueue
|
||||
Clar *Clarification // open questions awaiting answers (clarification view)
|
||||
Propose *Proposal // router workflow suggestion awaiting a pick (propose view)
|
||||
Active bool // an inference/tool is in flight (drives the spinner)
|
||||
Propose *Proposal // router workflow suggestion awaiting a pick (propose view)
|
||||
Active bool // an inference/tool is in flight (drives the spinner)
|
||||
}
|
||||
|
||||
// Workflow is a launchable workflow advertised by the server.
|
||||
@@ -314,6 +315,11 @@ type Model struct {
|
||||
fileFilter string // the query typed after @ (narrows the list)
|
||||
fileIndex int
|
||||
|
||||
// status-bar segment visibility (OverlayStatusbar) — persisted TUI-local in tui-prefs.json.
|
||||
// A segment id present in sbHidden is hidden; absent = shown. sbIndex is the toggle cursor.
|
||||
sbHidden map[string]bool
|
||||
sbIndex int
|
||||
|
||||
// animation
|
||||
frame int // tick counter; drives spinner + caret blink
|
||||
ticking bool // true while a tick loop is scheduled. The loop is gated on animating()
|
||||
@@ -367,6 +373,7 @@ func NewModel(client *ws.Client) Model {
|
||||
snapshotPhase: true,
|
||||
eventStripShown: true,
|
||||
transcriptSel: -1,
|
||||
sbHidden: loadStatusbarHidden(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user