diff --git a/.changeset/enable-websearch-config.md b/.changeset/enable-websearch-config.md new file mode 100644 index 00000000000..cd47a9e9fb5 --- /dev/null +++ b/.changeset/enable-websearch-config.md @@ -0,0 +1,6 @@ +--- +"@kilocode/cli": patch +"kilo-code": patch +--- + +Allow users to enable web search for models from all providers through Kilo configuration, VS Code settings, and Kilo Console settings. diff --git a/packages/core/src/v1/config/config.ts b/packages/core/src/v1/config/config.ts index 233f6238379..77f5d55160d 100644 --- a/packages/core/src/v1/config/config.ts +++ b/packages/core/src/v1/config/config.ts @@ -229,6 +229,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 (default: false)", + }), // kilocode_change attachment: Schema.optional(ConfigAttachmentV1.Info).annotate({ description: "Attachment processing configuration, including image size limits and resizing behavior", }), diff --git a/packages/kilo-console/src/routes/config/ToolsRoute.tsx b/packages/kilo-console/src/routes/config/ToolsRoute.tsx index 1aca8a16b84..1dd1001e66c 100644 --- a/packages/kilo-console/src/routes/config/ToolsRoute.tsx +++ b/packages/kilo-console/src/routes/config/ToolsRoute.tsx @@ -1,14 +1,18 @@ import { createMemo, createSignal, For, Show } from "solid-js" import { ConfigRow, SectionTitle, StatusTag } from "@kilocode/kilo-web-ui/console" +import { Button } from "@kilocode/kilo-web-ui/button" +import { Card } from "@kilocode/kilo-web-ui/card" import { SearchField } from "../../components/SearchField" import { useConfig } from "../../context/config" import { toolCapabilities, toolName } from "../../shared/utils" -import { ConfigCountTag as CountTag, ConfigPage } from "./ConfigPage" +import { ConfigCountTag as CountTag, ConfigPage, ConfigTag as Tag, SourceBadge } from "./ConfigPage" export function ToolsRoute() { const ctx = useConfig() const [search, setSearch] = createSignal("") const snap = () => ctx.data() + const websearch = createMemo(() => snap()?.overlay.fields.web_search) + const searchEnabled = createMemo(() => websearch()?.value === true) const rows = createMemo(() => { const data = snap() if (!data) return [] @@ -52,6 +56,48 @@ export function ToolsRoute() { } description="Built-in tools available to agents, including file access, terminal execution, search, fetch, and orchestration tools." > + +
+
+

Web search

+

Control web search availability for models from providers that do not enable it by default.

+
+ + + +
+
+ +
+
+ = (props) => ( +

+ {props.title} +

+) + const BrowserTab: Component = () => { const { postMessage, onMessage } = useVSCode() const { t } = useLanguage() + const { globalConfig, projectConfig, updateGlobalConfig } = useConfig() const [settings, setSettings] = createSignal({ enabled: false, @@ -33,6 +51,12 @@ const BrowserTab: Component = () => { postMessage({ type: "updateSetting", key: `browserAutomation.${key}`, value }) } + const updateWebsearch = (checked: boolean) => { + updateGlobalConfig({ web_search: checked }) + } + + const overridden = () => projectConfig().web_search !== undefined + return (
{/* Info text */} @@ -52,43 +76,90 @@ const BrowserTab: Component = () => { "line-height": "1.5", }} > - {t("settings.browser.description")} + {t("settings.webTools.description")}

- - {/* Enable toggle */} - - update("enabled", checked)} hideLabel> - {t("settings.browser.enable.title")} - - - - {/* Use System Chrome */} - - update("useSystemChrome", checked)} - hideLabel +
+
+ + t("settings.config.scope.global")} + last={!overridden()} > - {t("settings.browser.systemChrome.title")} - - + + {t("settings.webTools.webSearch.title")} + + + + t("settings.config.scope.local")} + last + > + + {`${t("settings.webTools.webSearch.title")} (${t("settings.config.scope.local")})`} + + + + +
- {/* Headless mode */} - +
+

- update("headless", checked)} hideLabel> - {t("settings.browser.headless.title")} - - - + {t("settings.browser.description")} +

+ + {/* Enable toggle */} + + update("enabled", checked)} hideLabel> + {t("settings.browser.enable.title")} + + + + {/* Use System Chrome */} + + update("useSystemChrome", checked)} + hideLabel + > + {t("settings.browser.systemChrome.title")} + + + + {/* Headless mode */} + + update("headless", checked)} + hideLabel + > + {t("settings.browser.headless.title")} + + + + ) } diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx index 7e67d9df601..8bd39f14a44 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx @@ -177,9 +177,9 @@ const Settings: Component = (props) => { {language.t("settings.autoApprove.title")} - + - {language.t("settings.browser.title")} + {language.t("settings.webTools.title")} @@ -249,7 +249,7 @@ const Settings: Component = (props) => { -

{language.t("settings.browser.title")}

+

{language.t("settings.webTools.title")}

diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/settings-io.ts b/packages/kilo-vscode/webview-ui/src/components/settings/settings-io.ts index d4b1949d2a9..be43b46284a 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/settings-io.ts +++ b/packages/kilo-vscode/webview-ui/src/components/settings/settings-io.ts @@ -34,6 +34,7 @@ export const KNOWN_KEYS: ReadonlyArray = [ "compaction", "commit_message", "tools", + "web_search", "auto_collapse_reasoning", "terminal_command_display", "code_edit_display", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts index 9bc4b159678..f4b6ed9a8ed 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts @@ -648,7 +648,12 @@ export const dict = { "settings.agentBehaviour.title": "سلوك الوكيل", "settings.autoApprove.title": "الموافقة التلقائية", - "settings.browser.title": "المتصفح", + "settings.webTools.title": "أدوات الويب", + "settings.webTools.description": "اضبط البحث على الويب وأتمتة المتصفح.", + "settings.webTools.webSearch.enable": "تمكين لجميع المزوّدين", + "settings.webTools.browserAutomation": "أتمتة المتصفح", + "settings.webTools.webSearch.title": "البحث على الويب", + "settings.webTools.webSearch.description": "اجعل البحث على الويب متاحًا لنماذج جميع المزوّدين.", "settings.checkpoints.title": "نقاط التحقق", "settings.display.title": "العرض", "settings.autocomplete.title": "الإكمال التلقائي", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/br.ts b/packages/kilo-vscode/webview-ui/src/i18n/br.ts index c459ba33502..c7123ea56ea 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/br.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/br.ts @@ -664,7 +664,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Pontos de Verificação", "settings.display.title": "Exibição", "settings.autocomplete.title": "Autocompletar", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts index 2fb095a4545..06258c8196d 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts @@ -704,7 +704,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Kontrolne tačke", "settings.display.title": "Prikaz", "settings.autocomplete.title": "Automatsko dovršavanje", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/da.ts b/packages/kilo-vscode/webview-ui/src/i18n/da.ts index f1a30056d7e..4c7e1bb2156 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/da.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/da.ts @@ -702,7 +702,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Kontrolpunkter", "settings.display.title": "Visning", "settings.autocomplete.title": "Autofuldførelse", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/de.ts b/packages/kilo-vscode/webview-ui/src/i18n/de.ts index 49b0b2337f4..9c67b59fd95 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/de.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/de.ts @@ -715,7 +715,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Prüfpunkte", "settings.display.title": "Anzeige", "settings.autocomplete.title": "Autovervollständigung", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/en.ts b/packages/kilo-vscode/webview-ui/src/i18n/en.ts index cee177cdb4f..a78f9cd18c0 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/en.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/en.ts @@ -621,7 +621,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Checkpoints", "settings.display.title": "Display", "settings.autocomplete.title": "Autocomplete", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/es.ts b/packages/kilo-vscode/webview-ui/src/i18n/es.ts index f65a336b7d8..0a25240d2f3 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/es.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/es.ts @@ -709,7 +709,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Puntos de control", "settings.display.title": "Pantalla", "settings.autocomplete.title": "Autocompletado", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/fa.ts b/packages/kilo-vscode/webview-ui/src/i18n/fa.ts index 70fc374be45..c887ca444db 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/fa.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/fa.ts @@ -624,7 +624,12 @@ export const dict = { "settings.agentBehaviour.title": "رفتار عامل", "settings.autoApprove.title": "تأیید خودکار", - "settings.browser.title": "مرورگر", + "settings.webTools.title": "ابزارهای وب", + "settings.webTools.description": "جستجوی وب و اتوماسیون مرورگر را پیکربندی کنید.", + "settings.webTools.webSearch.enable": "فعال‌سازی برای همه ارائه‌دهندگان", + "settings.webTools.browserAutomation": "اتوماسیون مرورگر", + "settings.webTools.webSearch.title": "جستجوی وب", + "settings.webTools.webSearch.description": "جستجوی وب را برای مدل‌های همه ارائه‌دهندگان در دسترس قرار دهید.", "settings.checkpoints.title": "نقاط بازیابی", "settings.display.title": "نمایش", "settings.autocomplete.title": "تکمیل خودکار", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts index b2c8ea629fc..b759caf6aff 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts @@ -715,7 +715,13 @@ export const dict = { "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 l’automatisation du navigateur.", + "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.", "settings.checkpoints.title": "Points de contrôle", "settings.display.title": "Affichage", "settings.autocomplete.title": "Autocomplétion", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/it.ts b/packages/kilo-vscode/webview-ui/src/i18n/it.ts index e03ae1d8811..a5220e13ac0 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/it.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/it.ts @@ -528,7 +528,12 @@ export const dict = { "profile.action.logout": "Esci", "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.", + "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.", "settings.checkpoints.title": "Checkpoint", "settings.display.title": "Visualizzazione", "settings.autocomplete.title": "Autocompletamento", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts index 05009fe87b1..06aa996caec 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts @@ -696,7 +696,12 @@ export const dict = { "settings.agentBehaviour.title": "エージェントの動作", "settings.autoApprove.title": "自動承認", - "settings.browser.title": "ブラウザ", + "settings.webTools.title": "ウェブツール", + "settings.webTools.description": "ウェブ検索とブラウザ自動化を設定します。", + "settings.webTools.webSearch.enable": "すべてのプロバイダーで有効化", + "settings.webTools.browserAutomation": "ブラウザ自動化", + "settings.webTools.webSearch.title": "ウェブ検索", + "settings.webTools.webSearch.description": "すべてのプロバイダーのモデルでウェブ検索を利用できるようにします。", "settings.checkpoints.title": "チェックポイント", "settings.display.title": "表示", "settings.autocomplete.title": "オートコンプリート", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts index ae723cfacde..38bcf1d8611 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts @@ -656,7 +656,12 @@ export const dict = { "settings.agentBehaviour.title": "에이전트 동작", "settings.autoApprove.title": "자동 승인", - "settings.browser.title": "브라우저", + "settings.webTools.title": "웹 도구", + "settings.webTools.description": "웹 검색 및 브라우저 자동화를 구성합니다.", + "settings.webTools.webSearch.enable": "모든 제공업체에 사용", + "settings.webTools.browserAutomation": "브라우저 자동화", + "settings.webTools.webSearch.title": "웹 검색", + "settings.webTools.webSearch.description": "모든 제공업체의 모델에서 웹 검색을 사용할 수 있도록 합니다.", "settings.checkpoints.title": "체크포인트", "settings.display.title": "디스플레이", "settings.autocomplete.title": "자동 완성", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts index 9727adc3f28..b4ac467643a 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts @@ -657,7 +657,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Controlepunten", "settings.display.title": "Weergave", "settings.autocomplete.title": "Automatisch Aanvullen", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/no.ts b/packages/kilo-vscode/webview-ui/src/i18n/no.ts index e252747ff3c..0b218a448aa 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/no.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/no.ts @@ -664,7 +664,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Kontrollpunkter", "settings.display.title": "Visning", "settings.autocomplete.title": "Autofullfør", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts index bd33f41e3b1..a3a8a15774c 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts @@ -660,7 +660,12 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Punkty kontrolne", "settings.display.title": "Wyświetlanie", "settings.autocomplete.title": "Autouzupełnianie", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts index a2e8e92d537..42b7cf42412 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts @@ -701,7 +701,12 @@ export const dict = { "settings.agentBehaviour.title": "Поведение агента", "settings.autoApprove.title": "Автоодобрение", - "settings.browser.title": "Браузер", + "settings.webTools.title": "Веб-инструменты", + "settings.webTools.description": "Настройте веб-поиск и автоматизацию браузера.", + "settings.webTools.webSearch.enable": "Включить для всех провайдеров", + "settings.webTools.browserAutomation": "Автоматизация браузера", + "settings.webTools.webSearch.title": "Веб-поиск", + "settings.webTools.webSearch.description": "Сделайте веб-поиск доступным для моделей всех провайдеров.", "settings.checkpoints.title": "Контрольные точки", "settings.display.title": "Отображение", "settings.autocomplete.title": "Автодополнение", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/th.ts b/packages/kilo-vscode/webview-ui/src/i18n/th.ts index cc5f6a4bd65..338f31a68f1 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/th.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/th.ts @@ -694,7 +694,12 @@ export const dict = { "settings.agentBehaviour.title": "พฤติกรรมของเอเจนต์", "settings.autoApprove.title": "อนุมัติอัตโนมัติ", - "settings.browser.title": "เบราว์เซอร์", + "settings.webTools.title": "เครื่องมือเว็บ", + "settings.webTools.description": "กำหนดค่าการค้นหาเว็บและระบบอัตโนมัติของเบราว์เซอร์", + "settings.webTools.webSearch.enable": "เปิดใช้สำหรับผู้ให้บริการทั้งหมด", + "settings.webTools.browserAutomation": "ระบบอัตโนมัติของเบราว์เซอร์", + "settings.webTools.webSearch.title": "ค้นหาเว็บ", + "settings.webTools.webSearch.description": "ทำให้โมเดลจากผู้ให้บริการทั้งหมดใช้การค้นหาเว็บได้", "settings.checkpoints.title": "จุดตรวจสอบ", "settings.display.title": "การแสดงผล", "settings.autocomplete.title": "เติมข้อความอัตโนมัติ", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts index 393379e7112..d17ae9d3c51 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts @@ -652,7 +652,13 @@ export const dict = { "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.", + "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.", "settings.checkpoints.title": "Kontrol Noktaları", "settings.display.title": "Görünüm", "settings.autocomplete.title": "Otomatik Tamamlama", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts index 9edde495bf9..9826ce43699 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts @@ -654,7 +654,12 @@ export const dict = { "settings.agentBehaviour.title": "Поведінка агента", "settings.autoApprove.title": "Автоматичне схвалення", - "settings.browser.title": "Браузер", + "settings.webTools.title": "Вебінструменти", + "settings.webTools.description": "Налаштуйте вебпошук і автоматизацію браузера.", + "settings.webTools.webSearch.enable": "Увімкнути для всіх постачальників", + "settings.webTools.browserAutomation": "Автоматизація браузера", + "settings.webTools.webSearch.title": "Вебпошук", + "settings.webTools.webSearch.description": "Зробіть вебпошук доступним для моделей усіх постачальників.", "settings.checkpoints.title": "Контрольні точки", "settings.display.title": "Відображення", "settings.autocomplete.title": "Автодоповнення", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts index 4fe1a3822c5..e49208d29dd 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts @@ -678,7 +678,12 @@ export const dict = { "settings.agentBehaviour.title": "智能体行为", "settings.autoApprove.title": "自动审批", - "settings.browser.title": "浏览器", + "settings.webTools.title": "网络工具", + "settings.webTools.description": "配置网页搜索和浏览器自动化。", + "settings.webTools.webSearch.enable": "为所有提供商启用", + "settings.webTools.browserAutomation": "浏览器自动化", + "settings.webTools.webSearch.title": "网页搜索", + "settings.webTools.webSearch.description": "让所有提供商的模型都可使用网页搜索。", "settings.checkpoints.title": "检查点", "settings.display.title": "显示", "settings.autocomplete.title": "自动补全", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts index 09f492c759a..9afedb19bce 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts @@ -638,7 +638,12 @@ export const dict = { "settings.agentBehaviour.title": "Agent 行為", "settings.autoApprove.title": "自動核准", - "settings.browser.title": "瀏覽器", + "settings.webTools.title": "網路工具", + "settings.webTools.description": "設定網頁搜尋和瀏覽器自動化。", + "settings.webTools.webSearch.enable": "為所有供應商啟用", + "settings.webTools.browserAutomation": "瀏覽器自動化", + "settings.webTools.webSearch.title": "網頁搜尋", + "settings.webTools.webSearch.description": "讓所有供應商的模型都可使用網頁搜尋。", "settings.checkpoints.title": "檢查點", "settings.display.title": "顯示", "settings.autocomplete.title": "自動完成", diff --git a/packages/kilo-vscode/webview-ui/src/types/messages/config.ts b/packages/kilo-vscode/webview-ui/src/types/messages/config.ts index 18b6c140cb7..b59633f7489 100644 --- a/packages/kilo-vscode/webview-ui/src/types/messages/config.ts +++ b/packages/kilo-vscode/webview-ui/src/types/messages/config.ts @@ -163,6 +163,7 @@ export interface Config { compaction?: CompactionConfig commit_message?: CommitMessageConfig tools?: Record + web_search?: boolean auto_collapse_reasoning?: boolean experimental?: ExperimentalConfig sandbox?: SandboxConfig diff --git a/packages/opencode/src/kilocode/config/overlay.ts b/packages/opencode/src/kilocode/config/overlay.ts index 2d576c3bcea..ec806bf053f 100644 --- a/packages/opencode/src/kilocode/config/overlay.ts +++ b/packages/opencode/src/kilocode/config/overlay.ts @@ -88,6 +88,7 @@ export namespace KilocodeConfigOverlay { ["disabled_providers"], ["watcher", "ignore"], ["instructions"], + ["web_search"], ["indexing", "enabled"], ["indexing", "provider"], ["indexing", "model"], diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index 36a5199ebec..626f88b25c0 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -334,9 +334,11 @@ export const layer = Layer.effect( // kilocode_change end const tools: Interface["tools"] = Effect.fn("ToolRegistry.tools")(function* (input) { + const cfg = yield* config.get() // kilocode_change const filtered = (yield* all()).filter((tool) => { if (!KiloToolRegistry.available(tool, input.agent)) return false // kilocode_change if (tool.id === WebSearchTool.id) { + if (cfg.web_search === true) return true // kilocode_change return webSearchEnabled(input.providerID, { exa: flags.enableExa, parallel: flags.enableParallel }) } diff --git a/packages/opencode/test/kilocode/config/config.test.ts b/packages/opencode/test/kilocode/config/config.test.ts index d41d17976bb..0bd9ecccb4c 100644 --- a/packages/opencode/test/kilocode/config/config.test.ts +++ b/packages/opencode/test/kilocode/config/config.test.ts @@ -151,6 +151,14 @@ describe("global config updates", () => { }) }) +describe("kilocode web search config", () => { + test("accepts enabling web search for all providers", () => { + const config = Schema.decodeUnknownSync(Config.Info)({ web_search: 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 }) diff --git a/packages/opencode/test/kilocode/server/config-overlay.test.ts b/packages/opencode/test/kilocode/server/config-overlay.test.ts index d3351b0d509..a21deb1e5db 100644 --- a/packages/opencode/test/kilocode/server/config-overlay.test.ts +++ b/packages/opencode/test/kilocode/server/config-overlay.test.ts @@ -201,6 +201,42 @@ 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, { web_search: true }) + + await json( + await req(project.path, "/config/overlay", { + method: "PATCH", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ scope: "project", set: { web_search: false } }), + }), + ) + const overridden = await json(await req(project.path, "/config/overlay?scope=project")) + expect(overridden.fields.web_search).toMatchObject({ + source: "project", + inherited: false, + overridden: true, + value: false, + }) + + await json( + await req(project.path, "/config/overlay", { + method: "PATCH", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ scope: "project", unset: [["web_search"]] }), + }), + ) + const inherited = await json(await req(project.path, "/config/overlay?scope=project")) + expect(inherited.fields.web_search).toMatchObject({ + source: "global", + inherited: true, + overridden: false, + value: true, + }) + }) + test.serial("marks global indexing values inherited in project scope", async () => { await using global = await tmpdir() await using project = await tmpdir() diff --git a/packages/opencode/test/tool/registry.test.ts b/packages/opencode/test/tool/registry.test.ts index 842990ad2ac..cb53301b1b4 100644 --- a/packages/opencode/test/tool/registry.test.ts +++ b/packages/opencode/test/tool/registry.test.ts @@ -29,6 +29,7 @@ const configLayer = TestConfig.layer({ type RegistryLayerOptions = { flags?: Partial plugin?: Layer.Layer + config?: Parameters[0] // kilocode_change } // Fake Plugin.Service that returns a single plugin whose `tool` map contains @@ -59,7 +60,7 @@ const root = LayerNode.group([ToolRegistry.node, Agent.node]) const registryLayer = (opts: RegistryLayerOptions = {}) => LayerNode.buildLayer(root, { replacements: [ - LayerNode.replace(Config.node, configLayer), + LayerNode.replace(Config.node, opts.config ? TestConfig.layer(opts.config) : configLayer), // kilocode_change LayerNode.replace(RuntimeFlags.node, RuntimeFlags.layer(opts.flags ?? {})), ...(opts.plugin ? [LayerNode.replace(Plugin.node, opts.plugin)] : []), ], @@ -69,6 +70,17 @@ const it = testEffect(registryLayer()) const scout = testEffect(registryLayer({ flags: { experimentalScout: true } })) // kilocode_change const withBrokenPlugin = testEffect(registryLayer({ plugin: brokenPluginLayer })) // kilocode_change start +const websearch = testEffect( + registryLayer({ + config: { + get: () => + Effect.succeed({ + web_search: true, + provider: { openai: { options: { apiKey: "test-openai-key" } } }, + }), + }, + }), +) const sandboxed = testEffect(registryLayer({ flags: { experimentalLspTool: true } })) // kilocode_change end @@ -88,6 +100,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 diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index f5c44c1930a..bafd9de0e53 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1698,6 +1698,7 @@ export type Config = { tools?: { [key: string]: boolean } + web_search?: boolean attachment?: AttachmentConfig enterprise?: { url?: string diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 4b5d75a7d51..d201367cb86 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -29452,6 +29452,9 @@ "type": "boolean" } }, + "web_search": { + "type": "boolean" + }, "attachment": { "$ref": "#/components/schemas/AttachmentConfig" },