Three defects from the review of #12823.
- A throw after the learn step started left no prompt artifact, so triage and
edit ran with no learned rule at all. The step is continue-on-error, so the
run continued and the failure was silent. learn.mjs now writes both prompt
artifacts from the checked-out file before any fallible work, and replaces
them once the rolling branch copy loads.
- The direct marker PATCH sent the body read before the extraction call, so it
overwrote any body edit made in the minutes since. learn.mjs now re-reads the
body immediately before the PATCH.
- Two additions in one model response could carry one id or one rule text.
validateDelta now rejects a duplicate of an earlier accepted addition.
Tests: 10s pins the prompt artifacts across a failed API call and the removal of
a stale block. 10t drives learn.mjs against a stub GitHub API whose second read
returns a maintainer edit, and asserts the edit survives the PATCH. 10u pins
both duplicate rejections. DOCS_SYNC_API_BASE is the new selftest-only hook that
points lib.mjs at the stub server.
* feat(tui): expand a collapsed paste on a second identical paste
* chore: retrigger review
* chore(tui): add paste expansion changeset
* fix(cli): target paste changeset
* fix(tui): refresh autocomplete after expanding a paste
Call auto()?.onInput on the expand-placeholder path so open autocomplete
matches onContentChange when a second identical paste expands text.
Point to the canonical Web Search Availability section in
automate/tools/index.md instead of repeating the same setup
instructions in getting-started/settings/index.md.
Addresses review feedback from emilieschario on PR #12716.
* 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
* fix(vscode): optimize model selector search and auto-jump to active match
Remove the 250 ms search debounce so the model list updates on every
keystroke. Add a latest-search-only animation-frame scroll that keeps
the active match visible when filtering from a deeply scrolled list,
and track pointer coordinates so rows moving beneath a stationary
pointer no longer steal selection while real hover still transfers
immediately.
* fix(vscode): stabilize model selector search navigation
* chore: update kilo-vscode visual regression baselines
* chore: update kilo-vscode visual regression baselines
---------
Co-authored-by: kilo-maintainer[bot] <kilo-maintainer[bot]@users.noreply.github.com>
* 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
Run extension typecheck, webview typecheck, ESLint, and esbuild
concurrently instead of serially. Replace tsc with the
repository-standard tsgo for both typechecks. Enable ESLint's
content-addressed cache. Run the esbuild driver with Bun instead
of Node.
Add a launch-only SDK generation cache keyed by CLI/API input
fingerprint and generated SDK output fingerprint. Explicit compile,
package, and rebuild-sdk commands still force full SDK regeneration.
Add CSS module declarations required by tsgo for the webview.
* feat: add signal-to-noise controls to grep tool
Add configurable options to reduce noise in grep results:
- context: show N lines before/after each match
- limit: bound maximum matches (default 100) with early termination
- literal: treat pattern as plain text instead of regex
- ignoreCase: case-insensitive matching
These controls help models avoid overwhelming context windows with too
many matches and provide clear guidance when results are truncated.
Implementation preserves upstream ripgrep structure with minimal Kilo
hooks for additive behavior only. Shared-file changes reduced from 183
to 60 lines compared to initial implementation.
* test(core): tolerate PTY event publication race
* fix(cli): count grep matches independently of context
* 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
* fix(vscode): keep skill paths and urls contained at narrow panel widths
Folder path and URL rows in the Skills settings subtab used min-content width
on their value cells and a fixed-width input wrapper, so long paths and URLs
expanded the row past the panel at narrow widths, clipping the value and pushing
the remove (×) button off-screen.
Give the value cell flex:1 + min-width:0 with text-overflow ellipsis (mirroring
the working discovered-skills rows above) so it shrinks instead of overflowing,
and add min-width:0 to the input+Add wrapper so the TextField can shrink below
its intrinsic input width. Add a Playwright regression test that asserts no
horizontal overflow and a fully-visible × button at a 320px viewport.
* fix(vscode): expose full skill paths and urls via accessible tooltip
The previous responsive fix truncated long path and URL values to ellipsis
with a native title attribute. The native title is not consistently
reachable across keyboard and screen reader interactions, and stacking
it on top of an accessible tooltip would produce duplicate prompts.
Wrap each value cell in the kilo-ui Tooltip (Kobalte-backed, ARIA-compliant)
so the full value is exposed on hover and keyboard focus, and drop the
native title. Add a settings.css class so the Tooltip trigger grows in
the row flex layout and the inner span keeps its single-line ellipsis.
Extend the regression test to assert the trigger wraps each value and
that focusing the trigger surfaces the full value through the kilo-ui
tooltip content, keeping the overflow and × button assertions intact.
* Update packages/kilo-vscode/webview-ui/src/stories/settings.stories.tsx
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
* Update packages/kilo-vscode/tests/skills-settings-responsive.spec.ts
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
* test(vscode): use hover to assert skills tooltip and cover both cards
* chore: update kilo-vscode visual regression baselines
* test(vscode): assert trigger focusability and label card in Add assertions
* fix(vscode): make skill tooltip triggers keyboard-focusable via tabindex prop
* fix(vscode): drop keyboard-focus assertion; full path is already in DOM
* Update .changeset/vscode-skills-settings-narrow-overflow.md
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
---------
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
* fix(vscode): prevent prompt toolbar height growth when training indicator is visible
The prompt training icon (book-open-check) rendered at 16px inside compact
toolbar buttons caused the model selector button to grow taller than sibling
buttons. Constrain the icon to 14px so the toolbar row stays at a consistent
height regardless of whether the active model has mayTrainOnYourPrompts set.
Add 420px and 200px screenshot stories covering the training indicator so
visual regression catches future regressions.
* chore: update kilo-vscode visual regression baselines
---------
Co-authored-by: kilo-maintainer[bot] <kilo-maintainer[bot]@users.noreply.github.com>
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