v0.1.66
Summary
This release sharpens the TUI and hardens the ACP/MCP runtime:
- ACP session lifecycle —
session/deleteso Zed's Trash actually removes whale threads, plus permission options constrained to the ACP schema enum so approvals are never silently dropped. - Agent turn reliability — an "execute, don't narrate" system block plus wider premature-end recovery catches announce-then-stop turns across the ACP, terminal CLI, and subagents; abrupt turns recover with interrupt tracing.
- MCP integration robustness — no more server spawn storms on every
session/new, negative caching of failed servers, sanitized logs, concurrency-safe stderr capture, and restored tool promotion on resume. - TUI polish — wrap-around arrow navigation in every list picker, and Alt+P permission cycling that works even while a turn is running.
What's Changed
ACP: session/delete so Zed Trash removes whale sessions (#355) — @reneleonhardt
initializenow advertisessessionCapabilities {list:{}, delete:{}}, so Zed's agent-panel Trash works instead of being a cosmetic no-op (zed-industries/zed#51912).session/deletevalidatessessionIdbefore touching disk, refuses in-flight prompts, removes the session.jsonl(fatal on failure) plus sidecar artifacts (best-effort), and is idempotent for unknown ids.- Prompt registration re-resolves the session under lock, closing a lookup→register gap that could resurrect deleted
.jsonlfiles.
Agent: "execute, don't narrate" system block (#357) — @reneleonhardt
- New static system-prompt block instructing the agent to execute rather than narrate, wired into the shared turn loop so it covers the ACP, terminal CLI, and subagents.
- Premature-end recovery widened to catch announce-then-stop patterns such as trailing colons and gerund lead-ins ("Fixing:", "Running tests:").
ACP: permission options constrained to the schema enum (#358) — @reneleonhardt
PermissionOption.Kindis now a typedPermissionOptionKindwith constants and validation; invalid kinds fail loudly on the send path instead of being silently rejected by strict clients.
TUI: wrap-around arrow navigation (#359) — @shayne-snap
- ↑ on the first list item cycles to the last and ↓ on the last cycles to the first, via a shared
wrapSelectionhelper applied across menus, pickers, and panels — fzf/vim-style navigation.
TUI: Alt+P permission cycle while busy (#360) — @shayne-snap
- Alt+P now cycles ask → auto-review → auto-accept → ask even mid-turn; changes apply immediately to subsequent tool calls without emitting a spurious
EventTurnDone.
Agent: recover abrupt turns and trace interrupts (#361) — @shayne-snap
- Recovery now catches additional premature end-turn lead-ins (e.g. Chinese "最后是"/"立即" and English "finally") so users no longer need to type 继续.
- Esc / Ctrl+C / exit-requested sources are preserved through the runtime protocol and persisted in turn markers, making unrelated interruptions diagnosable.
MCP: integration robustness (#362) — @reneleonhardt
- Each
session/newno longer re-spawns MCP servers (including failed ones); failed servers are negatively cached to stop spawn storms and log spam. - Log sanitization removes the raw client-supplied names/errors log-injection vector; stderr capture is concurrency-safe; sessionID race conditions fixed; tool promotion ordering restored on resume.
PRs
- #355 fix(acp): implement session/delete so Zed Trash removes whale sessions
- #357 feat(agent): Announce-then-stop system block
- #358 fix(acp): Constrain permission option kinds to the ACP schema enum
- #359 feat(tui): wrap-around arrow navigation for list pickers
- #360 fix(tui): allow Alt+P permission cycle while busy
- #361 fix(agent): recover abrupt turns and trace interrupts
- #362 fix: MCP integration robustness — server lifecycle, diagnostics, log hygiene, terminal startup hardening
Thanks
Thanks to @reneleonhardt for the ACP session lifecycle work — session/delete for Zed and schema-valid permission options — and the MCP integration hardening, and to @shayne-snap for the TUI navigation and Alt+P polish, the announce-then-stop recovery, and for reviewing and merging this release's changes. 🐋