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.
* docs(cli): note cloud schema mirror when adding kilocode_change config keys
Points devs to apps/web/src/app/config.json/extras.ts in the cloud repo
so new Kilo-only config keys get recognised by $schema references.
Closes#9115
* docs: add CLI config schema page and AGENTS.md mirror rule
Short page under Contributing → Architecture explaining how the cloud
overlays Kilo extras on top of the upstream opencode JSON Schema, with
the step-by-step for adding a new Kilo-only config key. AGENTS.md gains
a one-liner in the Fork Merge Process section pointing to it.
* fix(vscode): restore sidebar diff viewer parity with Agent Manager
The sidebar diff viewer bundle was missing agent-manager-review.css, so
FullScreenDiffView rendered with a broken file tree (no flex layout, no
revert styles) since PR #7455. Co-locate the CSS imports with the
component so every consumer gets them automatically, and wire per-file
revert end-to-end via a shared WorktreeDiffClient used by both the
sidebar provider and the Agent Manager controller.
* fix(cli): skip flaky shell-completion test on Windows CI
The 'shell completion resumes queued loop callers' test relies on shell
process spawn timing that is unreliable on Windows CI and times out at
3s. Every other shell-process test in this file already uses the
existing `unix(...)` helper for the same reason — align this test
with that pattern.
* 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.
- Break circular import: Worktree → bootstrap → remote-sender → app-runtime (Not to Kilo not being completely on effect)
- Bump tight test timeouts for Effect-native processing overhead
Webview now ignores the blocking field entirely, and the CLI TUI treats
undefined as blocking (s.blocking !== false), so setting
blocking: Flag.KILO_CLIENT !== 'vscode' is redundant. Drop the line and
the now-unused Flag import — CLI takeover behavior is preserved, webview
behavior is unchanged.
The prompt queue already serializes follow-up loops, so canceling the
in-flight loop on every new prompt breaks the queue contract (see
session-prompt-queue.test.ts). Keep only Suggestion.dismissAll so a
previous loop blocked on a suggestion can settle.
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
Prevent duplicate TsClient instances from accumulating in s.clients
on repeated getClients calls by checking for an existing client before
creating a new one.
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.
Introduce a "Take Heap Snapshot" command in the VS Code Command Palette
that triggers the bundled CLI process to write a V8 heap snapshot to the
log directory. This includes:
- New server route POST /kilocode/heap/snapshot in opencode
- HeapSnapshot module using node:v8 writeHeapSnapshot
- VS Code command registration and client-side fetch logic
- Generated SDK types and client methods for the new endpoint