Remove the outdated YouTube video from the Using MCP in Kilo Code page.
Ensure 'VSCode (Legacy)' is always the last tab option in every section for consistency.
* 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
Add suggestions to the blocked() check in WorkingIndicator so the
'Considering next steps' spinner and timer don't show while the suggest
tool is awaiting user input.
Remove border, border-radius, and margins from SuggestBar so it takes
full container width. Add suggesting prop to PromptInput so the prompt
treats the session as idle when only a suggestion is pending, allowing
the user to type and send without dismissing first.
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.
* perf(vscode): exclude patch from diff hash to reduce memory overhead
The hashFileDiffs function included diff.patch in its hash key, pulling
in multi-MB payloads generated by opencode's context: MAX_SAFE_INTEGER
setting. The extension never renders the patch string — VS Code's native
diff editor uses before/after file contents instead — so the field was
pure overhead.
Closes#8951
* chore(kilo-docs): update source links
Move SuggestBar from the fixed bottom dock into the scrollable
conversation, matching the QuestionDock inline approach. Tool-linked
suggestions render at their tool part position in AssistantMessage;
standalone suggestions render at the bottom of MessageList. Extract
shared matchToolRequest helper to deduplicate tool-part matching.
When clicking "Start new session" from a plan follow-up in a worktree,
the new session was always placed in the LOCAL tab because the Agent Manager
state was never notified about the adoption. Add an onFollowupAdopted
callback so the Agent Manager can register the session in the correct
worktree before the webview receives sessionCreated.
Fixes#8957
* fix(agent-manager): preserve scroll position when agent edits files in diff viewer
Prevent the diff viewer from resetting scroll when the agent modifies files
in a worktree session. The root cause was twofold: mergeWorktreeDiffs created
new object references for every item on each poll, causing Solid's <For> to
re-render all <Diff> components (full Pierre DOM teardown); and the summarized
toggle caused unmount/remount cycles that collapsed container heights.
Now mergeWorktreeDiffs preserves referential identity for unchanged items and
keeps the existing reference for stale files (metadata changed but cached
content preserved), while immediately re-requesting fresh content in the
background. The <Diff> component also pins min-height during re-renders to
prevent layout shifts from Pierre's innerHTML teardown.
* test(agent-manager): update diff-state tests for MergeResult return type
The messageSessionIdsByMessageId Map in KiloConnectionService grew
unbounded — entries were added for every message but never removed until
extension deactivation. Add pruneSession() to remove stale entries when
a session is deleted.
Closes#8950
When the CLI backend is temporarily unhealthy, session.list() for worktree
directories throws and the catch returns []. The webview reconciliation then
deletes those sessions from the store, making them disappear. Track failed
directories and pass preserveSessionIds so the webview skips deletion for
sessions whose absence is transient.
Closes#7466
Sync GitStatsPoller skip set with collapsed section state via pushState(),
saving 1 aheadBehind subprocess + 1 diffSummary HTTP call per hidden
worktree per poll cycle.
Closes#8900
The trailing / in directory paths was visually disappearing in diff
viewer headers because CSS direction:rtl interacted poorly with the
weaker LRE/PDF bidi embedding characters (\u202A/\u202C). Replace with
LRI/PDI isolate characters (\u2066/\u2069) which fully prevent the
surrounding RTL context from reordering boundary characters like /.
The TUI correctly distinguishes blocking vs non-blocking questions
via q.blocking !== false, but VS Code treated all questions as
blocking. Align the VS Code behavior with the TUI.