* feat(vscode): add keyboard navigation to QuestionDock
* fix(vscode): guard Cmd+Enter submit against empty answers
Match the footer submit button's disabled condition so Cmd+Enter
cannot send partial data when no answer is selected.
The inline completion provider registration was pushed into
context.subscriptions on every reconnect, accumulating dead
disposables. Track it only via the instance field which is
properly disposed and replaced on re-registration.
* test(vscode): add architecture test for package.json command sync
* fix: match registerCommand() calls instead of any string occurrence
Addresses review feedback: the test now extracts command IDs
specifically from registerCommand() call sites, so an
executeCommand() reference won't satisfy the check.
The loaded flag was always true after construction (set unconditionally)
and reload() did nothing beyond that. Connection state is already
checked live via hasValidCredentials(). Removes the dead indirection
from AutocompleteModel, AutocompleteServiceManager, and
ChatTextAreaAutocomplete.
Kobalte's Select fires onChange when the options list changes (even if
the selected value is the same), which triggers updateConfig → PATCH
/global/config → global.disposed → configLoaded → new options array →
onChange again, creating an infinite loop that floods SSE with events
and kills the server.
Add guards to all three settings Select components to skip updateConfig
when the new value equals the current config value.
The hasKilocodeProfileWithNoBalance property was never set to true in
the current CLI-backend architecture, making the no-credits status bar
state unreachable. Also removes AutocompleteModel.spec.ts which tested
an old profile-based architecture that no longer exists.
Config.updateGlobal() was calling Instance.disposeAll() on every config
change, which destroyed all session state, MCP connections, and in-flight
operations across every project. This meant that any config change (e.g.
removing a mode in VS Code) would effectively kill all running CLI
instances.
The global.reset() call already clears the config cache so consumers
will pick up the new config on their next read. The disposeAll() was
unnecessary overkill.
AutocompleteServiceManager only called model.reload() once at startup,
before the CLI backend had finished connecting. Since it never subscribed
to connection state changes, hasValidCredentials() permanently returned
false, causing the 'No autocomplete model configured' error even when
the user was logged into Kilo Gateway with credits.
Subscribe to connectionService.onStateChange() so the autocomplete model
and status bar re-evaluate whenever the backend connects or disconnects.
The collapse icon (two L-shaped inward arrows) was confused with a close
button at small sizes. Replace it with a new compress icon (center line
with inward-pointing chevrons) that clearly conveys compression.
Closes#6081
* feat: add WarpGrep AI-powered codebase search tool
Add WarpGrep integration as a new tool for intelligent multi-step
codebase search. WarpGrep delegates search to Morph's RL-trained
search agent, which runs parallel tool calls across multiple turns
and returns only relevant code spans.
- Add WarpGrep core client with multi-turn API loop, local tool
executors (ripgrep, file read, directory list), and XML parsing
- Add tool definition gated behind KILO_ENABLE_WARPGREP flag
- Register tool in registry with feature flag gating
- Add warpgrep permission to orchestrator, ask, and explore agents
- Conditionally enhance explore agent prompt when WarpGrep available
- Add unit tests for parsing, file ops, and tool registration
* fix: align warpgrep with Morph XML protocol
* chore: drop warpgrep test changes from branch
* chore: remove warpgrep test files from branch
* refactor: replace custom WarpGrep implementation with @morphllm/morphsdk
- Delete 396-line custom warpgrep.ts, replace with SDK's WarpGrepClient
- Only check MORPH_API_KEY (drop WARPGREP_API_KEY)
- Route through Kilo proxy during free period when no API key is set
- Add actionable error message for when free period ends
- Grep for FREE_PERIOD_TODO to find what to change post-free-period
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: rename warpgrep to codebase_search, add error toast for 429/402
- Rename tool from warpgrep to codebase_search throughout
- Switch proxy URL to /api/gateway
- Detect auth/rate-limit errors (401/402/429) and show actionable
fallback message telling users to set MORPH_API_KEY
- Fire a TUI toast notification on auth/rate-limit errors so users
see a visible popup, not just hidden tool output
- Wire up GlobalBus "global.event" in TUI thread so Bus events from
tools can reach the TUI event system
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* build: bump @morphllm/morphsdk to 0.2.141
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use Bus.publish for toast, revert global.event subscription
Address PR review: emit toast via Bus.publish(TuiEvent.ToastShow)
instead of GlobalBus.emit() so it works in both direct-RPC and
server-backed TUI modes. Revert the global.event subscription in
createEventSource since it's no longer needed and caused double
event delivery.
Also update codebase_search tool description to clarify natural
language input.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add codebase search toggle to experimental settings
Replace KILO_ENABLE_WARPGREP env var with a UI toggle in the
Experimental settings tab. The tool is now gated by the
experimental.codebase_search config field, accessible from both
VSCode settings and TUI config file.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update packages/opencode/src/tool/warpgrep.ts
Co-authored-by: Marius <marius@kilocode.ai>
* feat: limit codebase_search output to prevent context bloat
When search results exceed 45k chars (~15k tokens), degrade to showing
file paths and line ranges instead of full content. Also bumps
@morphllm/morphsdk from 0.2.129 to 0.2.147.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* build: bump @morphllm/morphsdk to 0.2.148
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: format codebaseSearch i18n strings to respect prettier line width
* fix: only advertise codebase_search in explore prompt when feature flag is enabled
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Christiaan Arnoldus <christiaan.arnoldus@outlook.com>
Co-authored-by: Marius <marius@kilocode.ai>
Remove the session from the store immediately when deleteSession is
called so the list item disappears without waiting for the server
round-trip. The full cleanup still runs when the sessionDeleted
event arrives.