Repository navigation
Releases: switchboard-code/switchboard
Release list
v1.21.0
Switchboard 1.21 makes long-running coding sessions substantially harder to lose, misroute, or resume incorrectly, while turning the terminal UI into a more capable day-to-day workbench.
Highlights
- Crash-durable conversations. Streamed assistant text is persisted before display, interrupted output stays visible as incomplete evidence, dangling tool calls are reconciled without replay, and session health explains torn tails or blocking corruption before adoption.
- Transactional recovery.
/retrybinds file restoration to the exact session opening, stages the replacement session, and either publishes the whole transition or rolls files forward. Recovery journals survive interruption at every commit boundary. - Validated compaction. TUI and REPL share an injection-resistant seven-section handoff, explicit provenance, portable text-only projection, credential redaction, a 32 KiB bound, and structural validation before a compacted session can become resumable. Legacy transcripts without verified authored scope refuse plain/automatic compaction and accept
/compact <current objective>as an explicit, narrowly framed scope anchor. - A safer, more responsive TUI. One FIFO modal lane prevents overlapping approvals and questions; approvals start on No; dialogs remain usable in very small terminals; resize and scroll preserve semantic position; Unicode editing is grapheme-aware; slow discovery and file search stay off the UI loop.
- Evidence-based model selection. A rung now carries its concrete serving surface and output allowance through primary and fallback targets. Live context and capability evidence, provider-generation leases, vision state, budget reserve, and output limits are checked at route and call boundaries.
- Staged subagent workflows. Bounded multi-stage workflows can fan out tasks, carry redacted evidence forward, run interactively or headlessly, and use named agents without allowing repository text or worker output to widen authority.
Security and integrity
- Workspace attachments and custom commands use anchored, bounded, regular-file-only reads and refuse replacement races, external symlinks, FIFOs, devices, invalid UTF-8, and oversized inventories.
- Advisor, auditor, learner, watch, bisect, shell-context, compaction, and delegate boundaries redact credentials before truncation and frame model-produced text as untrusted evidence.
- Checkpoint restoration uses root-bound capabilities, exact file identities, atomic exchange/no-replace publication, crash-safe cleanup ledgers, and conservative evidence retention whenever a path becomes ambiguous.
- Prompt history is private, bounded, per workspace, and credential-redacted before persistence. Unix uses mode 0600; Windows creates and verifies a protected current-user-only DACL and fails the history operation closed when the filesystem cannot retain it.
- Release actions are commit-pinned, test jobs receive read-only credentials, archives are reproducible, and existing release assets cannot be silently overwritten.
Upgrade notes
- Session schema 5 migrates supported older logs on writable adoption. Read-only resume inventory never repairs or truncates a candidate.
- Custom or unlisted finite-context targets may require
max_output;/modelscollects it, and the same bound applies to every fallback on that rung. - Secure checkpoint publication fails closed on filesystems without the required atomic primitives. Windows checkpoint recovery is restricted to validated NTFS semantics; cross-filesystem recovery layouts are refused before mutation.
The release includes binaries for macOS, Linux, and Windows on amd64 and arm64,
plus checksums.txt. Windows provider credentials currently use environment
variables or credential helpers; no native credential-store backend ships yet.
Full Changelog: v1.20.1...v1.21.0
v1.20.1
v1.20.0
v1.19.1
v1.19.0
v1.18.1
v1.18.0
v1.17.0
v1.16.0
Two fixes for things that were quietly broken on a local ladder.
A local server that states its context window is believed
The chat-completions format has no field for a context window, so a target on
openaicompat had none: the context meter stayed blank and automatic
compaction, which is gated on the window, never fired. A session on a local
rung ran until the server refused a request.
The startup probe now reads the window where the server states one, under
max_context_length, loaded_context_length, context_length,
native_context_length, or vLLM's max_model_len. Those names do not mean the
same thing on every server, so the probe takes the smallest number stated:
guessing high sends requests the server rejects, while guessing low only
compacts earlier than it had to. A server whose list says nothing is asked once
for llama.cpp's /props, which reports the context actually allocated rather
than the length the model was trained at.
Where a server reports nothing at all, /context 32768 still sets it by hand.
The mouse belongs to the terminal until /mouse hands it over
Switchboard used to put the terminal into mouse-reporting mode at startup,
which is what stopped it selecting text. Dragging in the transcript or the
composer did nothing, and there was no way to copy anything out.
The mouse now stays with the terminal, so selection and copy work as they do
anywhere else. Nothing is lost: pgup and pgdn scroll a page, ctrl+u and
ctrl+d scroll half a page, home and end reach the ends of the transcript,
and ctrl+o expands the last route or tool entry, which is what a click on one
would have done.
If you want the wheel back, /mouse on returns it along with
click-to-expand, and takes selection away again. The setting persists as
[ui] mouse.
Full Changelog: v1.15.0...v1.16.0