* 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.
The SDK rewrite interceptor injects directory=<cwd> into every GET request.
The experimental session list endpoint was passing this to listGlobal even
when worktrees=true, restricting results to only the current directory.
Skip the directory filter when worktrees is active so all worktree sessions
are returned. Add regression test that includes directory in query params.
Sequential git diff --no-index per untracked file was slow in repos
with many untracked files (e.g. after build or codegen). Run all
diffs concurrently with Promise.all.
* fix(cli): re-apply dead-stream detection to SSE endpoints to prevent memory leak on Windows
The upstream OpenCode v1.3.0 merge rewrote SSE routes with AsyncQueue but
dropped our dead-stream detection. On Windows, stream.onAbort() may never
fire after client disconnect (IOCP delays TCP RST detection), leaking a
GlobalBus listener, heartbeat interval, and AsyncQueue per dead connection.
Wrap writeSSE in try/catch to clean up eagerly on write failure.
* fix(cli): log dead-stream cleanup in SSE endpoints
These files are already in .gitignore but were committed before the
rule was added. Remove them from tracking so the gitignore takes
effect and build-generated changes stop appearing in diffs.
Update DiffVirtualApp and PermissionDiff to reconstruct before/after
content from the patch field when explicit before/after values are not
provided. Export the `text` helper from kilo-ui session-diff and add
`patch` to the PermissionFileDiff type.
In message-v2, refine stripMessageMetadata to only strip oversized
patches (exceeding MAX_DIFF_SIZE) rather than all patches, preserving
small patches so the UI can render inline diffs without additional
fetches.
Replace before/after content fields with unified patch field across
the diff pipeline. WorktreeDiff now generates patch strings via
createTwoFilesPatch, and all consumers (summary stripping, size
checks, content hashing, TUI sync, ingest queue) operate on the
patch field instead of before/after.
Consolidate model variant into the model object, removing the
separate variant field from MessageV2.User, PlanFollowup inject,
and resolveCodeModel interfaces.
Additional changes:
- Add session-diff module export to kilo-ui package
- Remove batch tool (batch.ts deleted)
- Fix WebSocket proxy to convert Uint8Array to ArrayBuffer
- Switch VscodeSessionTurn from useDiffComponent to useFileComponent
- Update SnapshotFileDiff type references in vscode extension
Add Global.Path.config and legacy global dirs (~/.kilo, ~/.kilocode) to
the external_directory whitelist so agents can read global config,
commands, and skills without triggering a permission prompt.
Extend WorktreeDiffItem with `before` and `after` string properties
across the OpenAPI spec, generated TypeScript types, and the Zod
schema in worktree-diff.ts. Both fields are marked as required in
the JSON schema definition.