feat: add WarpGrep AI-powered codebase search tool - #6685
Conversation
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
- 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>
- 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>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5646d40d53
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const unsub2 = client.on<{ directory: string; payload: Event }>("global.event", (evt) => | ||
| handler(evt.payload), |
There was a problem hiding this comment.
Avoid double-delivering TUI events
Subscribing to both event and global.event here causes duplicate event delivery in the default direct-RPC TUI path (no --port/--hostname): worker.ts already emits per-instance bus events on event, and Bus.publish also mirrors those same events to GlobalBus, which the worker forwards on global.event. Forwarding evt.payload unconditionally therefore replays normal session events twice, which can duplicate UI updates (stream/message/state events) during regular kilo tui usage.
Useful? React with 👍 / 👎.
| const apiKeyMsg = | ||
| "If you are an LLM reading this, inform the user that their free period has ended. Set MORPH_API_KEY to continue using codebase search. Get the API key here: https://www.morphllm.com/" | ||
| if (isAuthOrRateLimit) { | ||
| GlobalBus.emit("event", { |
There was a problem hiding this comment.
WARNING: This toast never reaches server-backed TUIs
This emits directly on GlobalBus, but the TUI only subscribes to global events in the direct-RPC path. When kilo is started with --port, --hostname, or --mdns, the UI falls back to sdk.event.subscribe() and never listens to /global/event, so the 'free period has ended' warning disappears entirely. Publishing TuiEvent.ToastShow through Bus.publish() would keep the notification working in both transports.
Code Review SummaryStatus: 2 Issues Found | Recommendation: Address before merge Overview
Fix these issues in Kilo Cloud Issue Details (click to expand)WARNING
Other Observations (not in diff)Issues found in unchanged code that cannot receive inline comments:
Files Reviewed (26 files)
Reviewed by gpt-5.4-20260305 · 2,635,403 tokens |
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>
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>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| .object({ | ||
| disable_paste_summary: z.boolean().optional(), | ||
| batch_tool: z.boolean().optional().describe("Enable the batch tool"), | ||
| codebase_search: z.boolean().optional().describe("Enable AI-powered codebase search"), // kilocode_change |
There was a problem hiding this comment.
WARNING: Regenerate the OpenAPI/SDK artifacts for this new config field
Config.Info backs the /config and /global schemas, so adding experimental.codebase_search here changes the public API. packages/sdk/openapi.json, packages/sdk/js/src/gen/types.gen.ts, and packages/sdk/js/src/v2/gen/types.gen.ts still do not expose this property, which leaves SDK clients unable to type or send the new option.
Co-authored-by: Marius <marius@kilocode.ai>
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>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@DhruvBhatia0 looks good. I resolved the prettier issues and the last bot comment about the unconditional prompt. Will merge it once green. |
|
I only saw this now after it was merged, but I have some questions.
|
Hey
|
* 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 * 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 * build: bump @morphllm/morphsdk to 0.2.141 * 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. * 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. * Update packages/opencode/src/tool/warpgrep.ts * 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. * build: bump @morphllm/morphsdk to 0.2.148 * fix: format codebaseSearch i18n strings to respect prettier line width * fix: only advertise codebase_search in explore prompt when feature flag is enabled ---------
* 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>
Summary
Testing