Restore custom: false on the plan follow-up question — the "Type your own answer" row was redundant because the main prompt already routes typed text as a question reply. Auto-submit single-question single-select option picks in the VS Code QuestionDock so the button behaves like the TUI instead of silently waiting for a second Submit click.
* fix: persist custom provider model and variant deletions
The CLI config.update endpoint deep-merges its payload with existing
global config, so removing a model or reasoning variant from a custom
provider in the UI had no effect on disk. Save payloads now emit null
sentinels for removed IDs, and the Provider schema accepts nullable
record values so stripNulls can delete them during the merge.
Closes#9186
* chore: update kilo-vscode visual regression baselines
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Lock in that a session with an open suggestion reports as idle (so reopening VS Code or switching worktrees does not show it stuck/running), that accepting flips it back to busy without an idle flash, and that a dismissed suggestion leaves it idle for the run loop to resume cleanly.
Replace raw async/Promise-based test helpers with Effect-based
equivalents to align with the upstream BashTool API changes. Introduce
a ManagedRuntime composed of CrossSpawnSpawner, AppFileSystem, Plugin,
Truncate, and Agent layers. Update metadata, ask, and execute call
sites to return Effect values instead of plain promises.
Add experimental workspace adaptor list and status endpoints to the
OpenAPI spec. Add --sanitize flag to CLI export command for redacting
sensitive data. Update SDK types to reorder session status types before
suggestion types. Remove deprecated /global/sync-event endpoint.
Includes formatting fixes across i18n files, opencode source, and
tests, plus a warpgrep import path correction.
* feat(agent-manager): enable /sessions command to browse and resume session history
* fix(agent-manager): prevent duplicate tabs when selecting already-open session from history
* fix(agent-manager): preserve tab memory when reopening local history sessions
* docs(vscode): add agent manager sessions changeset
* fix(cli): eliminate mock.module race in commit-message tests
git-context.test.ts and generate.test.ts both called mock.module on
the same path. Bun mock.module is process-wide and permanent, so
whichever file loaded second saw the other's mock. Replace with
injectable test seams (setGitRunnerForTest, setGitContextForTest) that
are cleaned up in afterEach.
* test(cli): retry model json reads during async persistence
* fix(agent-manager): hide review tab when picking session from history
Also revert the commit-message test seam refactor — upstream rewrote
git-context.test.ts to use real git repos and the test runner isolates
each file in its own process, so the mock.module race no longer exists.
* docs(vscode): bump agent manager sessions changeset to minor
Gate the agent-change auto-apply effect on model.json load and skip it when a per-agent pick already exists, so user-selected models for agents with a configured default no longer revert on agent switches or restarts.
When a user queued a prompt while the previous turn was still streaming,
the message's time_created fell before later assistant steps of that
turn. Ordering by time_created alone left the queued prompt in the
middle of the prior turn's history, so the next request ended with an
assistant message and tripped Anthropic's prefill rejection.
Reorder inside KiloSessionPromptQueue.scope so the target user message
and any of its own turn's assistants are always placed at the end.
* fix(cli): continue queued follow-up prompts
* test(cli): stabilize local model persistence test
* fix(cli): preserve queued prompt order
* fix(cli): persist queued prompts before processing
* chore(cli): clarify prompt queue settling
* fix(cli): preserve queued prompt history order
* fix(cli): clear queue state on release and test abort
Re-introduce the lightweight TypeScript diagnostic mode that was lost
during upstream OpenCode merges. Fixes the buggy server.ts spawn (leaked
process, wrong args) and re-adds TsClient integration in index.ts.
Extract prompt state logic (isPromptBlocked, isPromptBusy, isSuggesting,
isQuestioning) into pure functions in prompt-input-utils.ts and unit test
them. Add contract tests verifying sendMessage/sendCommand dismiss
suggestions and reject questions. Add CLI contract test protecting
prompt.ts Suggestion.dismissAll from upstream merges. Add dismissAll
unit tests to the suggestion test suite.
The .gitignore generated in .kilo/ config directories was missing
pnpm-lock.yaml and yarn.lock patterns, causing these lockfiles to
appear as untracked files in users' projects.
Verifies that SystemPrompt.provider() respects the prompt property
set by the Kilo gateway, and that it takes precedence over the
model.api.id-based heuristic fallback.
* fix(cli): remap child session references on fork to prevent subagent state leaks
When forking a session, task tool parts referencing child sessions were
copied verbatim, causing both original and forked sessions to share the
same subagent references. This led to SSE events and permission prompts
leaking across sessions in the Agent Manager.
* fix: remove redundant recursive remapChildren call
Session.fork() already calls remapChildren via the hook, so the explicit
recursive call inside remapChildren was double-forking nested descendants.
* feat(cli,vscode): add custom commit message prompt setting
Support user-configurable system prompt for AI commit message generation.
Adds a dedicated Commit Message tab in VS Code settings with a toggle
to override the built-in conventional commits prompt.
* fix: add missing kilocode_change annotation and fix i18n formatting
* refactor: move Config reading to route handler, add textarea max-height
Move kilo-specific Config.get() from shared generate.ts to the route
handler. The generator now accepts an optional prompt param instead.
Cap textarea height at 300px with scroll for long prompts.
* fix: resolve annotation gaps and prompt clear serialization bug
Add kilocode_change markers to JSDoc comment and extend block to
cover the generateCommitMessage call. Use empty string instead of
undefined when clearing the prompt so JSON serialization persists
the removal to disk.
* refactor(cli): move commit-message module to kilocode paths
Move src/commit-message/ to src/kilocode/commit-message/, route to
src/kilocode/server/routes/, and tests to test/kilocode/commit-message/.
Extract CommitMessageSchema to KilocodeConfig and reference it from
the main Config.Info. Removes all kilocode_change markers from moved
files since they are now in exempt paths.
* test(cli): fix moved commit-message tests
Reverts #8967 and #8953. OpenCode is migrating to use patch strings as
the primary diff transport — dropping them breaks forward compatibility
with upstream's SessionReview rendering pipeline, which falls back to
patch when before/after are absent.