fix: address web search review feedback

This commit is contained in:
Josh Lambert
2026-07-21 09:11:20 -04:00
parent 44f13738a3
commit 91d87588bf
32 changed files with 233 additions and 56 deletions
+3 -3
View File
@@ -226,6 +226,9 @@ export const Info = Schema.Struct({
layout: Schema.optional(ConfigLayoutV1.Layout).annotate({ description: "@deprecated Always uses stretch layout." }),
permission: Schema.optional(ConfigPermissionV1.Info),
tools: Schema.optional(Schema.Record(Schema.String, Schema.Boolean)),
web_search: Schema.optional(Schema.Boolean).annotate({
description: "Make web search available to models from all providers",
}), // kilocode_change
attachment: Schema.optional(ConfigAttachmentV1.Info).annotate({
description: "Attachment processing configuration, including image size limits and resizing behavior",
}),
@@ -278,9 +281,6 @@ export const Info = Schema.Struct({
batch_tool: Schema.optional(Schema.Boolean).annotate({ description: "Enable the batch tool" }),
// kilocode_change start
codebase_search: Schema.optional(Schema.Boolean).annotate({ description: "Enable AI-powered codebase search" }),
websearch: Schema.optional(Schema.Boolean).annotate({
description: "Enable web search for all model providers",
}),
image_generation: Schema.optional(Schema.Boolean).annotate({ description: "Enable AI image generation" }),
image_generation_model: Schema.optional(Schema.String).annotate({
description: "Model ID to use for image generation (default: openrouter/auto)",
@@ -11,7 +11,7 @@ export function ToolsRoute() {
const ctx = useConfig()
const [search, setSearch] = createSignal("")
const snap = () => ctx.data()
const websearch = createMemo(() => snap()?.overlay.fields["experimental.websearch"])
const websearch = createMemo(() => snap()?.overlay.fields.web_search)
const searchEnabled = createMemo(() => websearch()?.value === true)
const rows = createMemo(() => {
const data = snap()
@@ -66,7 +66,7 @@ export function ToolsRoute() {
<Button
variant="secondary"
disabled={Boolean(ctx.saving())}
onClick={() => ctx.unset([["experimental", "websearch"]])}
onClick={() => ctx.unset([["web_search"]])}
>
Revert
</Button>
@@ -79,7 +79,7 @@ export function ToolsRoute() {
type="button"
aria-pressed={searchEnabled()}
disabled={Boolean(ctx.saving()) || websearch()?.editable === false}
onClick={() => ctx.save({ experimental: { websearch: !searchEnabled() } })}
onClick={() => ctx.save({ web_search: !searchEnabled() })}
>
<span>
<strong>Enable for all providers</strong>
@@ -6,7 +6,7 @@ const NAMES = [
"Providers",
"Agent Behaviour",
"Auto-Approve",
"Browser",
"Web Tools",
"Checkpoints",
"Display",
"Autocomplete",
@@ -52,7 +52,7 @@ const BrowserTab: Component = () => {
}
const updateWebsearch = (checked: boolean) => {
updateConfig({ experimental: { ...config().experimental, websearch: checked } })
updateConfig({ web_search: checked })
}
return (
@@ -79,15 +79,15 @@ const BrowserTab: Component = () => {
</div>
<div>
<Header title={t("settings.experimental.websearch.title")} />
<Header title={t("settings.webTools.webSearch.title")} />
<Card>
<SettingsRow
title={t("settings.webTools.websearchEnable")}
description={t("settings.experimental.websearch.description")}
title={t("settings.webTools.webSearch.enable")}
description={t("settings.webTools.webSearch.description")}
last
>
<Switch checked={config().experimental?.websearch ?? false} onChange={updateWebsearch} hideLabel>
{t("settings.experimental.websearch.title")}
<Switch checked={config().web_search ?? false} onChange={updateWebsearch} hideLabel>
{t("settings.webTools.webSearch.title")}
</Switch>
</SettingsRow>
</Card>
+7 -1
View File
@@ -1203,7 +1203,13 @@ export const dict = {
"settings.section.configuration": "الإعدادات",
"settings.agentBehaviour.title": "سلوك الوكيل",
"settings.autoApprove.title": "الموافقة التلقائية",
"settings.browser.title": "المتصفح",
"settings.webTools.title": "أدوات الويب",
"settings.webTools.description": "اضبط البحث على الويب وأتمتة المتصفح. تتصل طلبات البحث مباشرةً بـ Exa أو Parallel.",
"settings.webTools.webSearch.enable": "تمكين لجميع المزوّدين",
"settings.webTools.browserAutomation": "أتمتة المتصفح",
"settings.webTools.webSearch.title": "البحث على الويب",
"settings.webTools.webSearch.description":
"اجعل البحث على الويب متاحًا لنماذج جميع المزوّدين. تتصل عمليات البحث مباشرةً بـ Exa أو Parallel.",
"settings.checkpoints.title": "نقاط التحقق",
"settings.display.title": "العرض",
"settings.autocomplete.title": "الإكمال التلقائي",
+8 -1
View File
@@ -1224,7 +1224,14 @@ export const dict = {
"settings.section.configuration": "Configuração",
"settings.agentBehaviour.title": "Comportamento do Agente",
"settings.autoApprove.title": "Aprovação Automática",
"settings.browser.title": "Navegador",
"settings.webTools.title": "Ferramentas da Web",
"settings.webTools.description":
"Configure a pesquisa na web e a automação do navegador. As solicitações de pesquisa se conectam diretamente ao Exa ou Parallel.",
"settings.webTools.webSearch.enable": "Ativar para todos os provedores",
"settings.webTools.browserAutomation": "Automação do navegador",
"settings.webTools.webSearch.title": "Pesquisa na Web",
"settings.webTools.webSearch.description":
"Disponibilize a pesquisa na web para modelos de todos os provedores. As pesquisas se conectam diretamente ao Exa ou Parallel.",
"settings.checkpoints.title": "Pontos de Verificação",
"settings.display.title": "Exibição",
"settings.autocomplete.title": "Autocompletar",
+8 -1
View File
@@ -1269,7 +1269,14 @@ export const dict = {
"settings.section.configuration": "Konfiguracija",
"settings.agentBehaviour.title": "Ponašanje agenta",
"settings.autoApprove.title": "Automatsko odobravanje",
"settings.browser.title": "Preglednik",
"settings.webTools.title": "Web alati",
"settings.webTools.description":
"Konfigurišite web pretragu i automatizaciju preglednika. Zahtjevi za pretragu povezuju se direktno s Exa ili Parallel.",
"settings.webTools.webSearch.enable": "Omogući za sve pružaoce",
"settings.webTools.browserAutomation": "Automatizacija preglednika",
"settings.webTools.webSearch.title": "Web pretraga",
"settings.webTools.webSearch.description":
"Omogućite web pretragu modelima svih pružalaca. Pretrage se povezuju direktno s Exa ili Parallel.",
"settings.checkpoints.title": "Kontrolne tačke",
"settings.display.title": "Prikaz",
"settings.autocomplete.title": "Automatsko dovršavanje",
+8 -1
View File
@@ -1262,7 +1262,14 @@ export const dict = {
"settings.section.configuration": "Konfiguration",
"settings.agentBehaviour.title": "Agentadfærd",
"settings.autoApprove.title": "Automatisk godkendelse",
"settings.browser.title": "Browser",
"settings.webTools.title": "Webværktøjer",
"settings.webTools.description":
"Konfigurer websøgning og browserautomatisering. Søgeanmodninger sendes direkte til Exa eller Parallel.",
"settings.webTools.webSearch.enable": "Aktivér for alle udbydere",
"settings.webTools.browserAutomation": "Browserautomatisering",
"settings.webTools.webSearch.title": "Websøgning",
"settings.webTools.webSearch.description":
"Gør websøgning tilgængelig for modeller fra alle udbydere. Søgninger sendes direkte til Exa eller Parallel.",
"settings.checkpoints.title": "Kontrolpunkter",
"settings.display.title": "Visning",
"settings.autocomplete.title": "Autofuldførelse",
@@ -1283,7 +1283,14 @@ export const dict = {
"settings.section.configuration": "Konfiguration",
"settings.agentBehaviour.title": "Agentenverhalten",
"settings.autoApprove.title": "Automatisch genehmigen",
"settings.browser.title": "Browser",
"settings.webTools.title": "Web-Tools",
"settings.webTools.description":
"Konfigurieren Sie Websuche und Browserautomatisierung. Suchanfragen werden direkt an Exa oder Parallel gesendet.",
"settings.webTools.webSearch.enable": "Für alle Anbieter aktivieren",
"settings.webTools.browserAutomation": "Browserautomatisierung",
"settings.webTools.webSearch.title": "Websuche",
"settings.webTools.webSearch.description":
"Machen Sie die Websuche für Modelle aller Anbieter verfügbar. Suchanfragen werden direkt an Exa oder Parallel gesendet.",
"settings.checkpoints.title": "Prüfpunkte",
"settings.display.title": "Anzeige",
"settings.autocomplete.title": "Autovervollständigung",
@@ -1176,8 +1176,14 @@ export const dict = {
"settings.section.configuration": "Configuration",
"settings.agentBehaviour.title": "Agent Behaviour",
"settings.autoApprove.title": "Auto-Approve",
"settings.browser.title": "Browser",
"settings.webTools.title": "Web Tools",
"settings.webTools.description":
"Configure web search and browser automation. Search requests connect directly to Exa or Parallel.",
"settings.webTools.webSearch.enable": "Enable for All Providers",
"settings.webTools.browserAutomation": "Browser Automation",
"settings.webTools.webSearch.title": "Web Search",
"settings.webTools.webSearch.description":
"Make web search available to models from all providers. Searches connect directly to Exa or Parallel.",
"settings.checkpoints.title": "Checkpoints",
"settings.display.title": "Display",
"settings.autocomplete.title": "Autocomplete",
@@ -1350,10 +1356,6 @@ export const dict = {
"settings.browser.description":
"When enabled, the AI agent can interact with web pages — navigating, clicking, typing, and taking screenshots. A Chrome window will open so you can watch the agent work.",
"settings.webTools.description":
"Configure web search and browser automation. Search requests connect directly to Exa or Parallel.",
"settings.webTools.websearchEnable": "Enable for All Providers",
"settings.webTools.browserAutomation": "Browser Automation",
"settings.browser.enable.title": "Enable Browser Automation",
"settings.browser.enable.description": "Register the Playwright MCP server with the CLI backend.",
"settings.browser.systemChrome.title": "Use System Chrome",
@@ -1414,9 +1416,6 @@ export const dict = {
"settings.experimental.lsp.description": "Enable language server protocol integration",
"settings.experimental.batch.title": "Batch Tool",
"settings.experimental.batch.description": "Enable batching of multiple tool calls",
"settings.experimental.websearch.title": "Web Search",
"settings.experimental.websearch.description":
"Make web search available to models from all providers. Searches connect directly to Exa or Parallel.",
"settings.experimental.codebaseSearch.title": "Codebase Search",
"settings.experimental.codebaseSearch.description": "Enable AI-powered natural language search across your codebase",
"settings.experimental.imageGeneration.title": "Image Generation",
+8 -1
View File
@@ -1276,7 +1276,14 @@ export const dict = {
"settings.section.configuration": "Configuración",
"settings.agentBehaviour.title": "Comportamiento del agente",
"settings.autoApprove.title": "Aprobación automática",
"settings.browser.title": "Navegador",
"settings.webTools.title": "Herramientas web",
"settings.webTools.description":
"Configura la búsqueda web y la automatización del navegador. Las solicitudes de búsqueda se conectan directamente a Exa o Parallel.",
"settings.webTools.webSearch.enable": "Habilitar para todos los proveedores",
"settings.webTools.browserAutomation": "Automatización del navegador",
"settings.webTools.webSearch.title": "Búsqueda web",
"settings.webTools.webSearch.description":
"Permite que los modelos de todos los proveedores usen la búsqueda web. Las búsquedas se conectan directamente a Exa o Parallel.",
"settings.checkpoints.title": "Puntos de control",
"settings.display.title": "Pantalla",
"settings.autocomplete.title": "Autocompletado",
+8 -1
View File
@@ -1287,7 +1287,14 @@ export const dict = {
"settings.section.configuration": "Configuration",
"settings.agentBehaviour.title": "Comportement de l'agent",
"settings.autoApprove.title": "Approbation automatique",
"settings.browser.title": "Navigateur",
"settings.webTools.title": "Outils web",
"settings.webTools.description":
"Configurez la recherche web et lautomatisation du navigateur. Les requêtes de recherche se connectent directement à Exa ou Parallel.",
"settings.webTools.webSearch.enable": "Activer pour tous les fournisseurs",
"settings.webTools.browserAutomation": "Automatisation du navigateur",
"settings.webTools.webSearch.title": "Recherche web",
"settings.webTools.webSearch.description":
"Rendez la recherche web disponible pour les modèles de tous les fournisseurs. Les recherches se connectent directement à Exa ou Parallel.",
"settings.checkpoints.title": "Points de contrôle",
"settings.display.title": "Affichage",
"settings.autocomplete.title": "Autocomplétion",
+8 -1
View File
@@ -1023,7 +1023,14 @@ export const dict = {
"settings.section.configuration": "Configurazione",
"settings.agentBehaviour.title": "Comportamento agente",
"settings.autoApprove.title": "Approvazione automatica",
"settings.browser.title": "Browser",
"settings.webTools.title": "Strumenti web",
"settings.webTools.description":
"Configura la ricerca web e l'automazione del browser. Le richieste di ricerca si connettono direttamente a Exa o Parallel.",
"settings.webTools.webSearch.enable": "Abilita per tutti i provider",
"settings.webTools.browserAutomation": "Automazione del browser",
"settings.webTools.webSearch.title": "Ricerca web",
"settings.webTools.webSearch.description":
"Rendi disponibile la ricerca web ai modelli di tutti i provider. Le ricerche si connettono direttamente a Exa o Parallel.",
"settings.checkpoints.title": "Checkpoint",
"settings.display.title": "Visualizzazione",
"settings.autocomplete.title": "Autocompletamento",
+8 -1
View File
@@ -1257,7 +1257,14 @@ export const dict = {
"settings.section.configuration": "設定",
"settings.agentBehaviour.title": "エージェントの動作",
"settings.autoApprove.title": "自動承認",
"settings.browser.title": "ブラウザ",
"settings.webTools.title": "ウェブツール",
"settings.webTools.description":
"ウェブ検索とブラウザ自動化を設定します。検索リクエストは Exa または Parallel に直接接続されます。",
"settings.webTools.webSearch.enable": "すべてのプロバイダーで有効化",
"settings.webTools.browserAutomation": "ブラウザ自動化",
"settings.webTools.webSearch.title": "ウェブ検索",
"settings.webTools.webSearch.description":
"すべてのプロバイダーのモデルでウェブ検索を利用できるようにします。検索は Exa または Parallel に直接接続されます。",
"settings.checkpoints.title": "チェックポイント",
"settings.display.title": "表示",
"settings.autocomplete.title": "オートコンプリート",
+8 -1
View File
@@ -1210,7 +1210,14 @@ export const dict = {
"settings.section.configuration": "구성",
"settings.agentBehaviour.title": "에이전트 동작",
"settings.autoApprove.title": "자동 승인",
"settings.browser.title": "브라우저",
"settings.webTools.title": "웹 도구",
"settings.webTools.description":
"웹 검색 및 브라우저 자동화를 구성합니다. 검색 요청은 Exa 또는 Parallel에 직접 연결됩니다.",
"settings.webTools.webSearch.enable": "모든 제공업체에 사용",
"settings.webTools.browserAutomation": "브라우저 자동화",
"settings.webTools.webSearch.title": "웹 검색",
"settings.webTools.webSearch.description":
"모든 제공업체의 모델에서 웹 검색을 사용할 수 있도록 합니다. 검색은 Exa 또는 Parallel에 직접 연결됩니다.",
"settings.checkpoints.title": "체크포인트",
"settings.display.title": "디스플레이",
"settings.autocomplete.title": "자동 완성",
+8 -1
View File
@@ -1218,7 +1218,14 @@ export const dict = {
"settings.section.configuration": "Configuratie",
"settings.agentBehaviour.title": "Agent Gedrag",
"settings.autoApprove.title": "Automatisch Goedkeuren",
"settings.browser.title": "Browser",
"settings.webTools.title": "Webtools",
"settings.webTools.description":
"Configureer zoeken op internet en browserautomatisering. Zoekopdrachten maken rechtstreeks verbinding met Exa of Parallel.",
"settings.webTools.webSearch.enable": "Inschakelen voor alle providers",
"settings.webTools.browserAutomation": "Browserautomatisering",
"settings.webTools.webSearch.title": "Zoeken op internet",
"settings.webTools.webSearch.description":
"Maak zoeken op internet beschikbaar voor modellen van alle providers. Zoekopdrachten maken rechtstreeks verbinding met Exa of Parallel.",
"settings.checkpoints.title": "Controlepunten",
"settings.display.title": "Weergave",
"settings.autocomplete.title": "Automatisch Aanvullen",
+8 -1
View File
@@ -1222,7 +1222,14 @@ export const dict = {
"settings.section.configuration": "Konfigurasjon",
"settings.agentBehaviour.title": "Agentoppførsel",
"settings.autoApprove.title": "Automatisk godkjenning",
"settings.browser.title": "Nettleser",
"settings.webTools.title": "Nettverktøy",
"settings.webTools.description":
"Konfigurer nettsøk og nettleserautomatisering. Søk sendes direkte til Exa eller Parallel.",
"settings.webTools.webSearch.enable": "Aktiver for alle leverandører",
"settings.webTools.browserAutomation": "Nettleserautomatisering",
"settings.webTools.webSearch.title": "Nettsøk",
"settings.webTools.webSearch.description":
"Gjør nettsøk tilgjengelig for modeller fra alle leverandører. Søk sendes direkte til Exa eller Parallel.",
"settings.checkpoints.title": "Kontrollpunkter",
"settings.display.title": "Visning",
"settings.autocomplete.title": "Autofullfør",
+8 -1
View File
@@ -1221,7 +1221,14 @@ export const dict = {
"settings.section.configuration": "Konfiguracja",
"settings.agentBehaviour.title": "Zachowanie agenta",
"settings.autoApprove.title": "Automatyczne zatwierdzanie",
"settings.browser.title": "Przeglądarka",
"settings.webTools.title": "Narzędzia internetowe",
"settings.webTools.description":
"Skonfiguruj wyszukiwanie w sieci i automatyzację przeglądarki. Żądania wyszukiwania łączą się bezpośrednio z Exa lub Parallel.",
"settings.webTools.webSearch.enable": "Włącz dla wszystkich dostawców",
"settings.webTools.browserAutomation": "Automatyzacja przeglądarki",
"settings.webTools.webSearch.title": "Wyszukiwanie w sieci",
"settings.webTools.webSearch.description":
"Udostępnij wyszukiwanie w sieci modelom wszystkich dostawców. Wyszukiwania łączą się bezpośrednio z Exa lub Parallel.",
"settings.checkpoints.title": "Punkty kontrolne",
"settings.display.title": "Wyświetlanie",
"settings.autocomplete.title": "Autouzupełnianie",
+8 -1
View File
@@ -1268,7 +1268,14 @@ export const dict = {
"settings.section.configuration": "Конфигурация",
"settings.agentBehaviour.title": "Поведение агента",
"settings.autoApprove.title": "Автоодобрение",
"settings.browser.title": "Браузер",
"settings.webTools.title": "Веб-инструменты",
"settings.webTools.description":
"Настройте веб-поиск и автоматизацию браузера. Поисковые запросы отправляются напрямую в Exa или Parallel.",
"settings.webTools.webSearch.enable": "Включить для всех провайдеров",
"settings.webTools.browserAutomation": "Автоматизация браузера",
"settings.webTools.webSearch.title": "Веб-поиск",
"settings.webTools.webSearch.description":
"Сделайте веб-поиск доступным для моделей всех провайдеров. Поисковые запросы отправляются напрямую в Exa или Parallel.",
"settings.checkpoints.title": "Контрольные точки",
"settings.display.title": "Отображение",
"settings.autocomplete.title": "Автодополнение",
+8 -1
View File
@@ -1250,7 +1250,14 @@ export const dict = {
"settings.section.configuration": "การกำหนดค่า",
"settings.agentBehaviour.title": "พฤติกรรมของเอเจนต์",
"settings.autoApprove.title": "อนุมัติอัตโนมัติ",
"settings.browser.title": "เบราว์เซอร์",
"settings.webTools.title": "เครื่องมือเว็บ",
"settings.webTools.description":
"กำหนดค่าการค้นหาเว็บและระบบอัตโนมัติของเบราว์เซอร์ คำขอค้นหาจะเชื่อมต่อโดยตรงกับ Exa หรือ Parallel",
"settings.webTools.webSearch.enable": "เปิดใช้สำหรับผู้ให้บริการทั้งหมด",
"settings.webTools.browserAutomation": "ระบบอัตโนมัติของเบราว์เซอร์",
"settings.webTools.webSearch.title": "ค้นหาเว็บ",
"settings.webTools.webSearch.description":
"ทำให้โมเดลจากผู้ให้บริการทั้งหมดใช้การค้นหาเว็บได้ การค้นหาจะเชื่อมต่อโดยตรงกับ Exa หรือ Parallel",
"settings.checkpoints.title": "จุดตรวจสอบ",
"settings.display.title": "การแสดงผล",
"settings.autocomplete.title": "เติมข้อความอัตโนมัติ",
+8 -1
View File
@@ -1215,7 +1215,14 @@ export const dict = {
"settings.section.configuration": "Yapılandırma",
"settings.agentBehaviour.title": "Ajan Davranışı",
"settings.autoApprove.title": "Otomatik Onay",
"settings.browser.title": "Tarayıcı",
"settings.webTools.title": "Web Araçları",
"settings.webTools.description":
"Web aramasını ve tarayıcı otomasyonunu yapılandırın. Arama istekleri doğrudan Exa veya Parallel'e bağlanır.",
"settings.webTools.webSearch.enable": "Tüm Sağlayıcılar İçin Etkinleştir",
"settings.webTools.browserAutomation": "Tarayıcı Otomasyonu",
"settings.webTools.webSearch.title": "Web Araması",
"settings.webTools.webSearch.description":
"Web aramasını tüm sağlayıcıların modelleri için kullanılabilir hale getirin. Aramalar doğrudan Exa veya Parallel'e bağlanır.",
"settings.checkpoints.title": "Kontrol Noktaları",
"settings.display.title": "Görünüm",
"settings.autocomplete.title": "Otomatik Tamamlama",
+8 -1
View File
@@ -1213,7 +1213,14 @@ export const dict = {
"settings.section.configuration": "Конфігурація",
"settings.agentBehaviour.title": "Поведінка агента",
"settings.autoApprove.title": "Автоматичне схвалення",
"settings.browser.title": "Браузер",
"settings.webTools.title": "Вебінструменти",
"settings.webTools.description":
"Налаштуйте вебпошук і автоматизацію браузера. Пошукові запити надсилаються безпосередньо до Exa або Parallel.",
"settings.webTools.webSearch.enable": "Увімкнути для всіх постачальників",
"settings.webTools.browserAutomation": "Автоматизація браузера",
"settings.webTools.webSearch.title": "Вебпошук",
"settings.webTools.webSearch.description":
"Зробіть вебпошук доступним для моделей усіх постачальників. Пошукові запити надсилаються безпосередньо до Exa або Parallel.",
"settings.checkpoints.title": "Контрольні точки",
"settings.display.title": "Відображення",
"settings.autocomplete.title": "Автодоповнення",
+6 -1
View File
@@ -1229,7 +1229,12 @@ export const dict = {
"settings.section.configuration": "配置",
"settings.agentBehaviour.title": "智能体行为",
"settings.autoApprove.title": "自动审批",
"settings.browser.title": "浏览器",
"settings.webTools.title": "网络工具",
"settings.webTools.description": "配置网页搜索和浏览器自动化。搜索请求会直接连接到 Exa 或 Parallel。",
"settings.webTools.webSearch.enable": "为所有提供商启用",
"settings.webTools.browserAutomation": "浏览器自动化",
"settings.webTools.webSearch.title": "网页搜索",
"settings.webTools.webSearch.description": "让所有提供商的模型都可使用网页搜索。搜索会直接连接到 Exa 或 Parallel。",
"settings.checkpoints.title": "检查点",
"settings.display.title": "显示",
"settings.autocomplete.title": "自动补全",
+6 -1
View File
@@ -1190,7 +1190,12 @@ export const dict = {
"settings.section.configuration": "設定",
"settings.agentBehaviour.title": "Agent 行為",
"settings.autoApprove.title": "自動核准",
"settings.browser.title": "瀏覽器",
"settings.webTools.title": "網路工具",
"settings.webTools.description": "設定網頁搜尋和瀏覽器自動化。搜尋請求會直接連線至 Exa 或 Parallel。",
"settings.webTools.webSearch.enable": "為所有供應商啟用",
"settings.webTools.browserAutomation": "瀏覽器自動化",
"settings.webTools.webSearch.title": "網頁搜尋",
"settings.webTools.webSearch.description": "讓所有供應商的模型都可使用網頁搜尋。搜尋會直接連線至 Exa 或 Parallel。",
"settings.checkpoints.title": "檢查點",
"settings.display.title": "顯示",
"settings.autocomplete.title": "自動完成",
@@ -39,7 +39,6 @@ export interface WatcherConfig {
export interface ExperimentalConfig {
batch_tool?: boolean
websearch?: boolean
codebase_search?: boolean
image_generation?: boolean
image_generation_model?: string
@@ -155,6 +154,7 @@ export interface Config {
compaction?: CompactionConfig
commit_message?: CommitMessageConfig
tools?: Record<string, boolean>
web_search?: boolean
auto_collapse_reasoning?: boolean
experimental?: ExperimentalConfig
sandbox?: SandboxConfig
@@ -88,7 +88,7 @@ export namespace KilocodeConfigOverlay {
["disabled_providers"],
["watcher", "ignore"],
["instructions"],
["experimental", "websearch"],
["web_search"],
["indexing", "enabled"],
["indexing", "provider"],
["indexing", "model"],
+1 -1
View File
@@ -377,7 +377,7 @@ export const layer: Layer.Layer<
const filtered = (yield* all()).filter((tool) => {
if (!KiloToolRegistry.available(tool, input.agent)) return false // kilocode_change
if (tool.id === WebSearchTool.id) {
if (cfg.experimental?.websearch === true) return true // kilocode_change
if (cfg.web_search === true) return true // kilocode_change
return webSearchEnabled(input.providerID, { exa: flags.enableExa, parallel: flags.enableParallel })
}
@@ -151,13 +151,15 @@ describe("global config updates", () => {
})
})
describe("kilocode indexing config", () => {
describe("kilocode web search config", () => {
test("accepts the websearch availability setting", () => {
const config = Schema.decodeUnknownSync(Config.Info)({ experimental: { websearch: true } })
const config = Schema.decodeUnknownSync(Config.Info)({ web_search: true })
expect(config.experimental?.websearch).toBe(true)
expect(config.web_search).toBe(true)
})
})
describe("kilocode indexing config", () => {
test("ignores retired semantic indexing flags in existing configs", async () => {
await using tmp = await tmpdir({ git: true })
await writeConfig(tmp.path, {
@@ -204,17 +204,17 @@ describe("config overlay routes", () => {
test.serial("resolves and reverts project websearch overrides", async () => {
await using global = await tmpdir()
await using project = await tmpdir()
await setGlobal(global.path, { experimental: { websearch: true } })
await setGlobal(global.path, { web_search: true })
await json(
await req(project.path, "/config/overlay", {
method: "PATCH",
headers: { "content-type": "application/json" },
body: JSON.stringify({ scope: "project", set: { experimental: { websearch: false } } }),
body: JSON.stringify({ scope: "project", set: { web_search: false } }),
}),
)
const overridden = await json<Overlay>(await req(project.path, "/config/overlay?scope=project"))
expect(overridden.fields["experimental.websearch"]).toMatchObject({
expect(overridden.fields.web_search).toMatchObject({
source: "project",
inherited: false,
overridden: true,
@@ -225,11 +225,11 @@ describe("config overlay routes", () => {
await req(project.path, "/config/overlay", {
method: "PATCH",
headers: { "content-type": "application/json" },
body: JSON.stringify({ scope: "project", unset: [["experimental", "websearch"]] }),
body: JSON.stringify({ scope: "project", unset: [["web_search"]] }),
}),
)
const inherited = await json<Overlay>(await req(project.path, "/config/overlay?scope=project"))
expect(inherited.fields["experimental.websearch"]).toMatchObject({
expect(inherited.fields.web_search).toMatchObject({
source: "global",
inherited: true,
overridden: false,
+49 -1
View File
@@ -52,12 +52,13 @@ const configLayer = TestConfig.layer({
type RegistryLayerOptions = {
flags?: Partial<RuntimeFlags.Info>
plugin?: Layer.Layer<Plugin.Service>
config?: Parameters<typeof TestConfig.layer>[0] // kilocode_change
}
const registryLayer = (opts: RegistryLayerOptions = {}) =>
ToolRegistry.layer
.pipe(
Layer.provide(configLayer),
Layer.provide(opts.config ? TestConfig.layer(opts.config) : configLayer), // kilocode_change
Layer.provide(opts.plugin ?? Plugin.defaultLayer),
Layer.provide(Question.defaultLayer),
Layer.provide(Todo.defaultLayer),
@@ -118,6 +119,21 @@ const withBrokenPlugin = testEffect(
Layer.mergeAll(registryLayer({ plugin: brokenPluginLayer }), node, Agent.defaultLayer),
)
// kilocode_change start
const websearch = testEffect(
Layer.mergeAll(
registryLayer({
config: {
get: () =>
Effect.succeed({
web_search: true,
provider: { openai: { options: { apiKey: "test-openai-key" } } },
}),
},
}),
node,
Agent.defaultLayer,
),
)
const sandboxed = testEffect(
Layer.mergeAll(registryLayer({ flags: { experimentalLspTool: true } }), node, Agent.defaultLayer),
)
@@ -139,6 +155,38 @@ function sandboxProfile(): Profile {
describe("tool.registry", () => {
// kilocode_change start
it.instance("hides websearch for a third-party provider by default", () =>
Effect.gen(function* () {
const registry = yield* ToolRegistry.Service
const agent = yield* Agent.Service
const build = yield* agent.get("build")
if (!build) return yield* Effect.die(new Error("build agent not found"))
const tools = yield* registry.tools({
providerID: ProviderV2.ID.openai,
modelID: ModelV2.ID.make("test"),
agent: build,
})
expect(tools.map((tool) => tool.id)).not.toContain("websearch")
}),
)
websearch.instance("shows websearch for a configured third-party provider when enabled", () =>
Effect.gen(function* () {
const registry = yield* ToolRegistry.Service
const agent = yield* Agent.Service
const build = yield* agent.get("build")
if (!build) return yield* Effect.die(new Error("build agent not found"))
const tools = yield* registry.tools({
providerID: ProviderV2.ID.openai,
modelID: ModelV2.ID.make("test"),
agent: build,
})
expect(tools.map((tool) => tool.id)).toContain("websearch")
}),
)
sandboxed.instance("preserves built-in network classification through production tool definition processing", () =>
Effect.gen(function* () {
const registry = yield* ToolRegistry.Service
+1 -1
View File
@@ -1673,6 +1673,7 @@ export type Config = {
tools?: {
[key: string]: boolean
}
web_search?: boolean
attachment?: AttachmentConfig
enterprise?: {
url?: string
@@ -1699,7 +1700,6 @@ export type Config = {
disable_paste_summary?: boolean
batch_tool?: boolean
codebase_search?: boolean
websearch?: boolean
image_generation?: boolean
image_generation_model?: string
agent_requirements?: boolean
+3 -3
View File
@@ -26905,6 +26905,9 @@
"type": "boolean"
}
},
"web_search": {
"type": "boolean"
},
"attachment": {
"$ref": "#/components/schemas/AttachmentConfig"
},
@@ -27000,9 +27003,6 @@
"codebase_search": {
"type": "boolean"
},
"websearch": {
"type": "boolean"
},
"image_generation": {
"type": "boolean"
},