Removes .trim() from onChange handlers for description, prompt, and
model fields so spaces can be typed without being stripped. The create
mode form still trims on submit which is correct for one-shot actions.
All edit mode fields now write to the ConfigContext draft immediately on
change, making the Save Bar appear as soon as any edit is made. The
user navigates back via the existing back arrow in the header. Discard
is available via the Save Bar.
Create and edit mode now accumulate changes in the ConfigContext draft
like all other settings, persisted via the Save Bar. This removes the
inconsistency where create/update bypassed the draft and triggered
immediate CLI restarts, while model/temperature/top_p/steps batched.
- Remove session.createMode() and session.updateMode()
- Remove handleCreateMode/handleUpdateMode from KiloProvider
- Remove CreateModeMessage/UpdateModeMessage types
- Add description and mode fields to AgentConfig type
- handleCreate uses updateAgentConfig with mode/description/prompt
- handleSaveEdit uses updateAgentConfig uniformly for all mode types
- Add empty state card when no custom modes exist in the agents list
- Post configUpdated immediately after config.update() in handleCreateMode
and handleUpdateMode so the webview reflects changes without waiting for
the full dispose+refetch cycle
- Tighten name validation regex to /^[a-z][a-z0-9-]*$/ (must start with
letter, hyphens only, no underscores)
- Add createMode/editMode i18n translations to all 15 non-English locales
(ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, th, zh, zht)
Add full CRUD management for custom modes in the Agent Behaviour settings
tab, matching the functionality from the legacy extension (kilocode-legacy).
Changes:
- Add createMode/updateMode message types and handlers in KiloProvider
that write to config.agent and refresh the CLI backend state
- Rewrite agents subtab with interactive list (click to edit), create
mode form, and inline edit view with description/prompt/model/temp
- Add createMode/updateMode to session context for webview-to-extension
communication
- Add i18n strings for create/edit mode UI
- Update StoryProviders mock with new session context methods
* fix(agent-manager): preserve review comments when switching session tabs
DiffPanel resolved diffs via a direct session-ID lookup into diffDatas,
which returned [] when switching to a tab whose diffs hadn't been fetched
yet. The sanitize effect then wiped all worktree-scoped comments against
the empty diff set.
Use reviewDiffs() (which falls back to any session in the same worktree)
so the diffs source matches the worktree-level comment storage.
* test(agent-manager): remove misleading regression test
The test only re-asserted existing sanitizeReviewComments behavior
(comments + empty diffs → empty) which already had coverage. It did
not exercise the actual fix (DiffPanel wiring to reviewDiffs) and
would pass regardless of whether the fix was reverted.
Add src/util/process.ts with spawn() and exec() wrappers that always set
windowsHide: true, preventing cmd.exe console popups on Windows.
Replace direct child_process imports in GitOps, shell-env, installer, and
server-manager with the new wrappers. Document the pattern in both
packages/kilo-vscode/AGENTS.md and packages/opencode/AGENTS.md so future
contributors know to use the wrappers instead of raw child_process calls.
* feat(vscode): support file path drops as @-mentions in chat input (#7476)
Dragging files from VS Code's explorer or editor tabs into the chat
prompt now inserts them as @/relative/path mentions (matching the legacy
extension behavior). Image drops from the OS file manager continue to
work as image attachments.
Adds convertToMentionPath utility with full test coverage including
protocol stripping, URI decoding, Windows paths, and vscode-remote.
* fix(vscode): fix file path drop mentions to work with attachment system
Three bugs from #7476:
1. Dropped mentions were never registered in mentionedPaths, so
buildFileAttachments could not resolve them into file attachments.
Fix: expose addPaths() on useFileMention, call it from the drop handler.
2. convertToMentionPath returned @/relative (with @ prefix and leading /)
but the mention system expects bare relative paths like src/index.ts
with callers adding the @ prefix. Fix: return bare relative path.
3. handleDragOver accepted text/plain, which intercepted normal text drags
from the editor. extractDropPaths also treated any text as file paths.
Fix: only accept application/vnd.code.uri-list in dragover; fall back
to text/plain in extractDropPaths only when every line is a file path.
When multiple git repositories are present (e.g. worktrees), the
command always used repositories[0] regardless of which SCM panel
the user clicked. Now accepts the SourceControl argument passed by
VS Code from scm/title and scm/input menus to match the correct
repository.
Co-authored-by: Mark IJbema <mark@kilocode.ai>
- Set process.type in mcp/index.ts so MCP SDK's StdioClientTransport
uses windowsHide:true when spawning MCP servers on Windows (the SDK
only enables this in Electron, checking 'type' in process)
- Add windowsHide:true to GitOps.ts git execFile calls
- Add windowsHide:true to marketplace installer tar execFile call
* fix(cli,vscode): prevent infinite loading in commit message generation
Add timeout-based AbortController to both server-side LLM stream (30s)
and client-side HTTP request (35s) so the SCM progress spinner cannot
hang indefinitely. Make the VS Code progress indicator cancellable so
users can abort manually. Also fix outdated test mocks that referenced
the removed getHttpClient API instead of the current SDK getClient.
* fix(cli,vscode): consume stream explicitly to prevent infinite loading
Replace `await stream.text` with `for await (chunk of stream.textStream)`
so that stream-level errors surface immediately instead of leaving the
promise hanging indefinitely. With some providers and Vercel AI SDK
versions, the `.text` promise never resolves when the underlying stream
errors out early, causing the spinner to load forever (fixes#7345).
Add a catch block that distinguishes timeout aborts from other errors
and re-throws with a human-readable message (partially addresses #6568).
In the VS Code extension, log the actual error in the getClient catch
block instead of silently discarding it.
---------
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
The Auto Balanced tier now uses Minimax M2.7 (paid) for implementation
modes instead of Minimax M2.5 (Free). Update references in the user-facing
auto-model docs and the gateway models-and-providers page.
We only care about client (4xx) and server (5xx) errors. Tightening
the regex from [1-5] to [45] avoids matching 1xx/2xx/3xx numbers that
could appear in error messages.
After a reconnect or global.disposed, only backoff state was reset but
fatalNotified stayed true. A subsequent 402 would block autocomplete
without showing the warning notification again. Add resetBackoff()
method that resets both, and use it from all external call sites.
The previous regex /\b([1-5]\d{2})\b/ matched the first 3-digit number
in range, so 'after 128 retries: 429' would extract 128 instead of 429.
Anchor to colon with /:\s*([1-5]\d{2})\b/ since our error messages
always use the 'SSE failed: 402' / 'FIM request failed: 429' format.
Add context menus to worktree sidebar items (Rename, Delete, Open in
VS Code, Copy Path) and unassigned session items (Open in worktree).
Restyle context menus via am-ctx-menu class to match dropdown-menu
visuals. Show keyboard shortcuts in menu items. Extract shared
parseBindingTokens into keybind-tokens.ts. Translate new keys across
all 18 locales.
Instead of sending a wasted FIM request every 5 minutes to check if
credits are back, call the lightweight /kilo/profile endpoint to check
balance. If balance > 0, reset the backoff so autocomplete resumes.
Only applies to 402 (credits depleted) — auth errors (401/403) are
handled by the global.disposed reset on login.
The models-snapshot.ts file contains hundreds of provider API endpoint
URLs that are not user-facing links. Regenerate source-links.md with
the correct 76 URLs.
Log telemetry event names and properties to the Extension Host output
channel. The legacy extension had this logging and it is useful for
debugging which events are firing and with what data.
Reset ErrorBackoff immediately when the CLI emits global.disposed (login,
logout, org switch). For credit purchases that happen outside the extension,
allow a single probe request every 5 minutes so autocomplete self-heals
without requiring a reconnect.
Add a story showing all 5 tool error types that PR #7494 will restyle
as hints: read-before-write, modified-since-read, identical-strings,
whitespace-mismatch, and multiple-matches. The visual regression CI
will auto-generate a baseline screenshot so the PR can show the diff.