* fix(agent-manager): restore focus to question options and prompt on session switch
- Route keyboard tab switching (Meta+Alt+ArrowLeft/Right) through coordinated focus path
- Retry focus across render lifecycle to handle VS Code focus transitions
- Focus first enabled question option after question dock mounts
- Focus prompt textarea for sessions without pending questions
- Preserve focus when terminal, history, or review surfaces are active
- Add focusQuestionOption helper with unit tests
- Add changeset for patch release
Fixes race conditions where keyboard navigation would leave focus on webview body instead of the intended question option or prompt input.
* fix(agent-manager): preserve tab and question focus ownership
* fix(agent-manager): guard deferred focus during async questions
* feat(vscode): bind speech-to-text to Cmd/Ctrl+K with hold-to-send
* fix(vscode): complete speech shortcut localization and cleanup
* fix(vscode): preserve speech shortcut focus and tooltip state
* fix(vscode): persist Agent Manager focus per session
Remember whether each session last focused the prompt or its right-side
embedded terminal, and restore that focus owner when switching back.
- Add a focus-owner map keyed by (context, session) in AgentManagerApp
that records the last focused surface per session.
- Make side-terminal creation explicit: / focus
the new terminal, while and context switches do not.
- Suppress the PromptInput draft-change focus dispatch when the target
session's remembered owner is the terminal.
- Side terminals opt out of auto-focus on activation via a new
prop so context switches don't steal the cursor.
- Replace the unconditional prompt dispatch with a
restore-focus path that follows the saved owner.
- Add regression tests distinguishing explicit vs background side
creates, and a changeset.
* fix(vscode): address Agent Manager focus review
* fix(vscode): self-heal stale Agent Manager focus
* fix(vscode): align Agent Manager focus visibility
* feat(agent-manager): allow sessions to move their worktree between sections or ungroup
Add a new to the tool so a session can
reassign its own worktree to another section or ungroup it by passing
. The move operation validates the target section and
the session's worktree, then pushes refreshed state to the panel.
Also tighten the model-facing contract so the list-to-move workflow is
unambiguous: is required first, its result is the
source of truth for section and session IDs, and direct edits to
are rejected by , , and
with an explicit pointer to the tool.
- New / in the Agent Manager protocol
- New domain function with section/session validation
- New OpenAPI hook so stays
nullable in the generated SDK
- Tool schema descriptions now spell out the list-first workflow and
the no-direct-edit rule
- List output now includes an instruction block and is pretty-printed
- Optional nullable Task fields tolerate from models
- Focused CLI tests, bridge unit test, and protection test
* chore: remove local PR screenshot
* style(vscode): format agent manager orchestration
* fix(agent-manager): protect state paths on Windows
* fix(vscode): recover Agent Manager terminal with one input after exit
When an embedded Agent Manager terminal ends, the next typed input now
starts a fresh shell in the same tab and delivers that input exactly once
instead of requiring a second keystroke. The original scrollback remains
visible above a neutral divider so the ended shell is clearly separated
from the replacement.
- TerminalManager owns a logical terminal ID with a mutable PTY ID and
exposes a deduplicated restart method that returns the fresh wsUrl.
- TerminalRouter posts one restarted message back to the webview.
- TerminalTab buffers input while the replacement attaches and flushes
it only after replacement shell output settles, with a one-second
fallback for silent shells.
- Restartable terminals show a distinct ended marker that advertises
both typing and closing; Run/Setup terminals keep the original
close-only text.
- Localized the new marker in all Agent Manager locales.
- Replaces the previous dispose-on-webview-reload behavior with a
reconciliation pass so a fresh webview does not orphan running PTYs.
Verified end-to-end in an isolated VS Code instance: two consecutive
exit-then-one-input cycles both execute the original input without
requiring a second keystroke, and pwd confirms the replacement shell
starts in the original worktree cwd.
* fix(vscode): avoid duplicate prompt after terminal recovery
Restore Agent Manager sections and worktree drag-and-drop when multiple
projects are shown, with ordering and section moves scoped to the owning
project.
- Extract shared worktree ordering/grouping logic used by both single and
multi-project modes
- Add per-project drag-and-drop providers with scoped identifiers
- Preserve live run statuses when state payloads omit them
- Match single-project label resolution using ordered session titles
- Make section auto-rename tracking request-scoped to prevent stale
renames
- Expand multi-project Storybook story with persisted ordering, sections,
and grouped worktrees
- Add project-store isolation and ordering tests
The Markdown renderer began wrapping rendered blocks in div[data-markdown-block]
containers with display: contents, which collapsed the annotation layer's
bounding-box lookups and broke list/table special-case comment handling.
Flatten renderer-owned block wrappers to their actual rendered children while
preserving legacy top-level Markdown DOM and filtering inserted annotation
elements.
Regression introduced in PR #12460 (a776bd4d29, refactor: kilo compat for v1.17.9).
The setup-terminal gate introduced in #12703 changed the detail-stack
predicate from !contextEmpty() && !history() to !history && selection
!== null. An unassigned session has selection === null but a live
session showing, so contextEmpty() is false there. The new gate
dropped that case, blanking the content pane, leaving readOnly() dead
code, and unmounting every live xterm on selection.
showTerminalStack now takes contextEmpty and returns !history &&
(selection !== null || !contextEmpty), restoring the pre-#12703
semantics while keeping the provisioning worktree (empty context with a
side Setup tab) rendering the stack.
Adds a showTerminalStack regression suite covering the unassigned,
history, selected-context, provisioning, and empty cases.