-
+
-
- {t("settings.experimental.websearch.title")}
+
+ {t("settings.webTools.webSearch.title")}
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts
index f86fe517b0..02fc76303d 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts
@@ -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": "الإكمال التلقائي",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/br.ts b/packages/kilo-vscode/webview-ui/src/i18n/br.ts
index 35a1450ea1..902114dd85 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/br.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/br.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts
index c19e73262c..dbb2e7b923 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/da.ts b/packages/kilo-vscode/webview-ui/src/i18n/da.ts
index 8e9a593dd3..028595f859 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/da.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/da.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/de.ts b/packages/kilo-vscode/webview-ui/src/i18n/de.ts
index 380e7d3db4..4adcf7b72f 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/de.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/de.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/en.ts b/packages/kilo-vscode/webview-ui/src/i18n/en.ts
index abe0350075..e926699acc 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/en.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/en.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/es.ts b/packages/kilo-vscode/webview-ui/src/i18n/es.ts
index e1cd429614..d66f4bd86f 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/es.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/es.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts
index 71055c0d65..1ed7c73e8b 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts
@@ -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 l’automatisation 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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/it.ts b/packages/kilo-vscode/webview-ui/src/i18n/it.ts
index 034276bb9c..b0c9a5f703 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/it.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/it.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts
index 2c6bd6c9e3..fd60365ca9 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts
@@ -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": "オートコンプリート",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts
index 990edeb5eb..9dd03144c2 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts
@@ -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": "자동 완성",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts
index 75d20e4f17..8158160380 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/no.ts b/packages/kilo-vscode/webview-ui/src/i18n/no.ts
index 68c4af800b..5e8b9faf1f 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/no.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/no.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts
index f7238a444c..aa920ac5db 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts
index 47a24933c3..68027826b8 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts
@@ -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": "Автодополнение",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/th.ts b/packages/kilo-vscode/webview-ui/src/i18n/th.ts
index cac0eea7a9..c029e495b6 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/th.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/th.ts
@@ -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": "เติมข้อความอัตโนมัติ",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts
index e799d07141..a43c79880d 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts
@@ -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",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts
index dfc15c248d..75783bc9e4 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts
@@ -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": "Автодоповнення",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts
index 8432bbee90..9e1dd05729 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts
@@ -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": "自动补全",
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts
index b69bb7054c..aed2a97179 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts
@@ -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": "自動完成",
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 0dc2d05dc7..89dcc0af83 100644
--- a/packages/kilo-vscode/webview-ui/src/types/messages/config.ts
+++ b/packages/kilo-vscode/webview-ui/src/types/messages/config.ts
@@ -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
+ 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 b0cd42f88c..ec806bf053 100644
--- a/packages/opencode/src/kilocode/config/overlay.ts
+++ b/packages/opencode/src/kilocode/config/overlay.ts
@@ -88,7 +88,7 @@ export namespace KilocodeConfigOverlay {
["disabled_providers"],
["watcher", "ignore"],
["instructions"],
- ["experimental", "websearch"],
+ ["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 f8eb66469a..4df567dd6b 100644
--- a/packages/opencode/src/tool/registry.ts
+++ b/packages/opencode/src/tool/registry.ts
@@ -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 })
}
diff --git a/packages/opencode/test/kilocode/config/config.test.ts b/packages/opencode/test/kilocode/config/config.test.ts
index 50529c043f..51902e1514 100644
--- a/packages/opencode/test/kilocode/config/config.test.ts
+++ b/packages/opencode/test/kilocode/config/config.test.ts
@@ -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, {
diff --git a/packages/opencode/test/kilocode/server/config-overlay.test.ts b/packages/opencode/test/kilocode/server/config-overlay.test.ts
index e8a55f9ac7..a21deb1e5d 100644
--- a/packages/opencode/test/kilocode/server/config-overlay.test.ts
+++ b/packages/opencode/test/kilocode/server/config-overlay.test.ts
@@ -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(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(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,
diff --git a/packages/opencode/test/tool/registry.test.ts b/packages/opencode/test/tool/registry.test.ts
index 393bea6f25..97e4e6c51c 100644
--- a/packages/opencode/test/tool/registry.test.ts
+++ b/packages/opencode/test/tool/registry.test.ts
@@ -52,12 +52,13 @@ const configLayer = TestConfig.layer({
type RegistryLayerOptions = {
flags?: Partial
plugin?: Layer.Layer
+ config?: Parameters[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
diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts
index 0bd15820a7..5f9963def0 100644
--- a/packages/sdk/js/src/v2/gen/types.gen.ts
+++ b/packages/sdk/js/src/v2/gen/types.gen.ts
@@ -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
diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json
index 7ea6d2387d..1451c3a6b3 100644
--- a/packages/sdk/openapi.json
+++ b/packages/sdk/openapi.json
@@ -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"
},
From 25dcfb6cff23abe840f3a728ebe48deef6af9355 Mon Sep 17 00:00:00 2001
From: Kelly Sun
Date: Thu, 23 Jul 2026 14:28:32 -0400
Subject: [PATCH 03/29] docs: add Mixlayer provider page
Adds an AI-providers docs page for Mixlayer (OpenAI-compatible inference
for open models like GLM and Qwen) and a nav entry, documenting the
OpenAI-Compatible setup for both VS Code and the CLI.
---
packages/kilo-docs/lib/nav/ai-providers.ts | 1 +
.../kilo-docs/pages/ai-providers/mixlayer.md | 97 +++++++++++++++++++
2 files changed, 98 insertions(+)
create mode 100644 packages/kilo-docs/pages/ai-providers/mixlayer.md
diff --git a/packages/kilo-docs/lib/nav/ai-providers.ts b/packages/kilo-docs/lib/nav/ai-providers.ts
index f604826c7c..1a2dfe9ae3 100644
--- a/packages/kilo-docs/lib/nav/ai-providers.ts
+++ b/packages/kilo-docs/lib/nav/ai-providers.ts
@@ -46,6 +46,7 @@ export const AiProvidersNav: NavSection[] = [
{ href: "/ai-providers/groq", children: "Groq" },
{ href: "/ai-providers/cerebras", children: "Cerebras" },
{ href: "/ai-providers/fireworks", children: "Fireworks AI" },
+ { href: "/ai-providers/mixlayer", children: "Mixlayer" },
],
},
{
diff --git a/packages/kilo-docs/pages/ai-providers/mixlayer.md b/packages/kilo-docs/pages/ai-providers/mixlayer.md
new file mode 100644
index 0000000000..ac0221315a
--- /dev/null
+++ b/packages/kilo-docs/pages/ai-providers/mixlayer.md
@@ -0,0 +1,97 @@
+---
+title: "Using Mixlayer with Kilo Code | Fast Open-Model Inference"
+description: "Run open models like GLM and Qwen on Mixlayer's OpenAI-compatible API in Kilo Code. Setup guide for VS Code and the CLI."
+---
+
+# Using Mixlayer With Kilo Code
+
+Mixlayer is an inference platform for open models such as GLM and Qwen, with a serving stack built from scratch by core contributors to Candle. It exposes an OpenAI-compatible API, so you can use it in Kilo Code through the **OpenAI Compatible** provider.
+
+**Website:** [https://mixlayer.com/](https://mixlayer.com/)
+
+## Getting an API Key
+
+1. **Sign Up/Sign In:** Go to [Mixlayer](https://mixlayer.com/) and create an account or sign in.
+2. **Navigate to API Keys:** Open the [Mixlayer console](https://console.mixlayer.com/) and go to the API Keys page.
+3. **Create a Key:** Click **New Key**, give it a descriptive name (e.g., "Kilo Code"), and copy it. You will not be able to view it again.
+
+## Configuration in Kilo Code
+
+Mixlayer's API is OpenAI-compatible, with the base URL `https://models.mixlayer.ai/v1`. Configure it through Kilo Code's **OpenAI Compatible** provider.
+
+{% tabs %}
+{% tab label="VSCode" %}
+
+1. Open **Settings** (gear icon) and go to the **Providers** tab.
+2. Scroll to the bottom and click **Custom provider**.
+3. Fill in the dialog:
+ - **Provider ID** — `mixlayer`
+ - **Display name** — `Mixlayer`
+ - **Provider API** — **OpenAI Compatible**
+ - **Base URL** — `https://models.mixlayer.ai/v1`
+ - **API key** — your Mixlayer API key
+4. Kilo Code auto-fetches the available models from Mixlayer's `/v1/models` endpoint, so you can pick a model directly from the list. Click **Submit** to save.
+
+{% /tab %}
+{% tab label="CLI" %}
+
+Set the API key as an environment variable and define an OpenAI-compatible provider in your `kilo.json` config file (`~/.config/kilo/kilo.json` or `./kilo.json`):
+
+**Environment variable:**
+
+```bash
+export MIXLAYER_API_KEY="your-api-key"
+```
+
+**Config file:**
+
+```jsonc
+{
+ "provider": {
+ "mixlayer": {
+ "npm": "@ai-sdk/openai-compatible",
+ "env": ["MIXLAYER_API_KEY"],
+ "options": {
+ "baseURL": "https://models.mixlayer.ai/v1",
+ },
+ "models": {
+ "z-ai/glm-5.2": {
+ "name": "GLM-5.2",
+ "limit": { "context": 262144, "output": 262144 },
+ },
+ "qwen/qwen3.5-397b-a17b": {
+ "name": "Qwen3.5 397B A17B",
+ "limit": { "context": 131072, "output": 131072 },
+ },
+ },
+ },
+ },
+}
+```
+
+Then set your default model using the `provider-id/model-id` format:
+
+```jsonc
+{
+ "model": "mixlayer/z-ai/glm-5.2",
+}
+```
+
+{% /tab %}
+{% /tabs %}
+
+## Models
+
+Mixlayer serves open models including:
+
+- `z-ai/glm-5.2` — 256K context
+- `qwen/qwen3.5-397b-a17b` and the Qwen 3.5 / 3.6 line (vision-capable)
+- `moonshotai/kimi-k2.7-code`
+
+Tool calling and reasoning are supported across the model line. See the [Mixlayer docs](https://docs.mixlayer.com) for the full, current model list and supported parameters.
+
+## Tips and Notes
+
+- **Model list:** Kilo Code auto-detects available models from Mixlayer's `/v1/models` endpoint, so the picker stays current with your account.
+- **Pricing:** See the [Mixlayer console](https://console.mixlayer.com/) for current per-model pricing.
+- **Reasoning:** Qwen models support a thinking mode; reasoning tokens count against the output budget, so allow enough `limit.output` when reasoning is enabled.
From 34e787e5ac039b0d070ed186ee5979aba38c8576 Mon Sep 17 00:00:00 2001
From: Josh Lambert
Date: Mon, 27 Jul 2026 11:48:09 -0400
Subject: [PATCH 04/29] fix: enable web search by default
---
packages/core/src/v1/config/config.ts | 3 +-
.../src/routes/config/ToolsRoute.tsx | 2 +-
.../src/components/settings/BrowserTab.tsx | 2 +-
packages/opencode/src/tool/registry.ts | 2 +-
.../test/kilocode/config/config.test.ts | 6 +--
packages/opencode/test/tool/registry.test.ts | 50 ++++++++++++-------
6 files changed, 40 insertions(+), 25 deletions(-)
diff --git a/packages/core/src/v1/config/config.ts b/packages/core/src/v1/config/config.ts
index bd9baab123..0ef9d1ffc7 100644
--- a/packages/core/src/v1/config/config.ts
+++ b/packages/core/src/v1/config/config.ts
@@ -227,7 +227,8 @@ export const Info = Schema.Struct({
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",
+ description:
+ "Make web search available to models from all providers (default: true). Set to false to limit it to managed providers.",
}), // 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 9dcb20b6e0..fae54f6b8c 100644
--- a/packages/kilo-console/src/routes/config/ToolsRoute.tsx
+++ b/packages/kilo-console/src/routes/config/ToolsRoute.tsx
@@ -12,7 +12,7 @@ export function ToolsRoute() {
const [search, setSearch] = createSignal("")
const snap = () => ctx.data()
const websearch = createMemo(() => snap()?.overlay.fields.web_search)
- const searchEnabled = createMemo(() => websearch()?.value === true)
+ const searchEnabled = createMemo(() => websearch()?.value !== false)
const rows = createMemo(() => {
const data = snap()
if (!data) return []
diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
index fabc7858b8..ca870fef21 100644
--- a/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
+++ b/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
@@ -86,7 +86,7 @@ const BrowserTab: Component = () => {
description={t("settings.webTools.webSearch.description")}
last
>
-
+
{t("settings.webTools.webSearch.title")}
diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts
index 4df567dd6b..4f7c275cfa 100644
--- a/packages/opencode/src/tool/registry.ts
+++ b/packages/opencode/src/tool/registry.ts
@@ -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.web_search === true) return true // kilocode_change
+ if (cfg.web_search !== false) 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 51902e1514..3938950306 100644
--- a/packages/opencode/test/kilocode/config/config.test.ts
+++ b/packages/opencode/test/kilocode/config/config.test.ts
@@ -152,10 +152,10 @@ describe("global config updates", () => {
})
describe("kilocode web search config", () => {
- test("accepts the websearch availability setting", () => {
- const config = Schema.decodeUnknownSync(Config.Info)({ web_search: true })
+ test("accepts explicitly limiting web search to managed providers", () => {
+ const config = Schema.decodeUnknownSync(Config.Info)({ web_search: false })
- expect(config.web_search).toBe(true)
+ expect(config.web_search).toBe(false)
})
})
diff --git a/packages/opencode/test/tool/registry.test.ts b/packages/opencode/test/tool/registry.test.ts
index 97e4e6c51c..2420506b9d 100644
--- a/packages/opencode/test/tool/registry.test.ts
+++ b/packages/opencode/test/tool/registry.test.ts
@@ -125,7 +125,21 @@ const websearch = testEffect(
config: {
get: () =>
Effect.succeed({
- web_search: true,
+ provider: { openai: { options: { apiKey: "test-openai-key" } } },
+ }),
+ },
+ }),
+ node,
+ Agent.defaultLayer,
+ ),
+)
+const websearchOff = testEffect(
+ Layer.mergeAll(
+ registryLayer({
+ config: {
+ get: () =>
+ Effect.succeed({
+ web_search: false,
provider: { openai: { options: { apiKey: "test-openai-key" } } },
}),
},
@@ -155,23 +169,7 @@ 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", () =>
+ websearch.instance("shows websearch by default for a configured third-party provider", () =>
Effect.gen(function* () {
const registry = yield* ToolRegistry.Service
const agent = yield* Agent.Service
@@ -187,6 +185,22 @@ describe("tool.registry", () => {
}),
)
+ websearchOff.instance("hides websearch for a configured third-party provider when disabled", () =>
+ 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")
+ }),
+ )
+
sandboxed.instance("preserves built-in network classification through production tool definition processing", () =>
Effect.gen(function* () {
const registry = yield* ToolRegistry.Service
From c5d3032118aa87cdecb3ae40f1117344762efd2b Mon Sep 17 00:00:00 2001
From: Josh Lambert
Date: Mon, 27 Jul 2026 14:47:11 -0400
Subject: [PATCH 05/29] fix: keep third-party web search opt-in
---
.changeset/enable-websearch-config.md | 2 +-
packages/core/src/v1/config/config.ts | 3 +-
.../src/routes/config/ToolsRoute.tsx | 2 +-
.../src/components/settings/BrowserTab.tsx | 2 +-
packages/opencode/src/tool/registry.ts | 2 +-
.../test/kilocode/config/config.test.ts | 6 +--
packages/opencode/test/tool/registry.test.ts | 50 +++++++------------
7 files changed, 26 insertions(+), 41 deletions(-)
diff --git a/.changeset/enable-websearch-config.md b/.changeset/enable-websearch-config.md
index ebbc4135f3..cd47a9e9fb 100644
--- a/.changeset/enable-websearch-config.md
+++ b/.changeset/enable-websearch-config.md
@@ -3,4 +3,4 @@
"kilo-code": patch
---
-Configure web search for models from all providers through Kilo configuration, VS Code settings, and Kilo Console settings.
+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 0ef9d1ffc7..fea9a7f598 100644
--- a/packages/core/src/v1/config/config.ts
+++ b/packages/core/src/v1/config/config.ts
@@ -227,8 +227,7 @@ export const Info = Schema.Struct({
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: true). Set to false to limit it to managed providers.",
+ 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 fae54f6b8c..9dcb20b6e0 100644
--- a/packages/kilo-console/src/routes/config/ToolsRoute.tsx
+++ b/packages/kilo-console/src/routes/config/ToolsRoute.tsx
@@ -12,7 +12,7 @@ export function ToolsRoute() {
const [search, setSearch] = createSignal("")
const snap = () => ctx.data()
const websearch = createMemo(() => snap()?.overlay.fields.web_search)
- const searchEnabled = createMemo(() => websearch()?.value !== false)
+ const searchEnabled = createMemo(() => websearch()?.value === true)
const rows = createMemo(() => {
const data = snap()
if (!data) return []
diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
index ca870fef21..fabc7858b8 100644
--- a/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
+++ b/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
@@ -86,7 +86,7 @@ const BrowserTab: Component = () => {
description={t("settings.webTools.webSearch.description")}
last
>
-
+
{t("settings.webTools.webSearch.title")}
diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts
index 4f7c275cfa..4df567dd6b 100644
--- a/packages/opencode/src/tool/registry.ts
+++ b/packages/opencode/src/tool/registry.ts
@@ -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.web_search !== false) return true // kilocode_change
+ 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 3938950306..c384d76dff 100644
--- a/packages/opencode/test/kilocode/config/config.test.ts
+++ b/packages/opencode/test/kilocode/config/config.test.ts
@@ -152,10 +152,10 @@ describe("global config updates", () => {
})
describe("kilocode web search config", () => {
- test("accepts explicitly limiting web search to managed providers", () => {
- const config = Schema.decodeUnknownSync(Config.Info)({ web_search: false })
+ test("accepts enabling web search for all providers", () => {
+ const config = Schema.decodeUnknownSync(Config.Info)({ web_search: true })
- expect(config.web_search).toBe(false)
+ expect(config.web_search).toBe(true)
})
})
diff --git a/packages/opencode/test/tool/registry.test.ts b/packages/opencode/test/tool/registry.test.ts
index 2420506b9d..97e4e6c51c 100644
--- a/packages/opencode/test/tool/registry.test.ts
+++ b/packages/opencode/test/tool/registry.test.ts
@@ -125,21 +125,7 @@ const websearch = testEffect(
config: {
get: () =>
Effect.succeed({
- provider: { openai: { options: { apiKey: "test-openai-key" } } },
- }),
- },
- }),
- node,
- Agent.defaultLayer,
- ),
-)
-const websearchOff = testEffect(
- Layer.mergeAll(
- registryLayer({
- config: {
- get: () =>
- Effect.succeed({
- web_search: false,
+ web_search: true,
provider: { openai: { options: { apiKey: "test-openai-key" } } },
}),
},
@@ -169,23 +155,7 @@ function sandboxProfile(): Profile {
describe("tool.registry", () => {
// kilocode_change start
- websearch.instance("shows websearch by default for a configured third-party provider", () =>
- 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")
- }),
- )
-
- websearchOff.instance("hides websearch for a configured third-party provider when disabled", () =>
+ it.instance("hides websearch for a third-party provider by default", () =>
Effect.gen(function* () {
const registry = yield* ToolRegistry.Service
const agent = yield* Agent.Service
@@ -201,6 +171,22 @@ describe("tool.registry", () => {
}),
)
+ 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
From 605dc483e84fbbc3ff5e213e057f3791a14e9299 Mon Sep 17 00:00:00 2001
From: Josh Lambert
Date: Mon, 27 Jul 2026 17:30:02 -0400
Subject: [PATCH 06/29] chore(sdk): minimize web search schema diff
---
packages/sdk/openapi.json | 5637 +++++++++++++++++++++++++++----------
1 file changed, 4111 insertions(+), 1526 deletions(-)
diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json
index 1451c3a6b3..7bd369f6bb 100644
--- a/packages/sdk/openapi.json
+++ b/packages/sdk/openapi.json
@@ -4211,10 +4211,10 @@
]
}
},
- "/experimental/project/{projectID}/copy": {
+ "/experimental/project/{projectID}/copy/generate-name": {
"post": {
"tags": ["projectCopy"],
- "operationId": "experimental.projectCopy.create",
+ "operationId": "experimental.projectCopy.generateName",
"parameters": [
{
"name": "projectID",
@@ -4224,6 +4224,14 @@
},
"required": true
},
+ {
+ "name": "directory",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "required": false
+ },
{
"name": "workspace",
"in": "query",
@@ -4235,56 +4243,45 @@
],
"responses": {
"200": {
- "description": "Project copy created",
+ "description": "Success",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ProjectCopyCopy"
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
}
}
}
},
"400": {
- "description": "ProjectCopyError | InvalidRequestError",
+ "description": "Bad request",
"content": {
"application/json": {
"schema": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/ProjectCopyError"
- },
- {
- "$ref": "#/components/schemas/InvalidRequestError"
- }
- ]
+ "$ref": "#/components/schemas/BadRequestError"
}
}
}
}
},
- "description": "Create a local physical copy of a project using the selected strategy.",
- "summary": "Create project copy",
+ "description": "Generate a short name for a project copy from task context.",
+ "summary": "Generate project copy name",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
- "strategy": {
- "type": "string",
- "enum": ["git_worktree"]
- },
- "directory": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
"context": {
"type": "string"
}
},
- "required": ["strategy", "directory"],
"additionalProperties": false
}
}
@@ -4293,145 +4290,7 @@
"x-codeSamples": [
{
"lang": "js",
- "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.experimental.projectCopy.create({\n ...\n})"
- }
- ]
- },
- "delete": {
- "tags": ["projectCopy"],
- "operationId": "experimental.projectCopy.remove",
- "parameters": [
- {
- "name": "projectID",
- "in": "path",
- "schema": {
- "type": "string"
- },
- "required": true
- },
- {
- "name": "directory",
- "in": "query",
- "schema": {
- "type": "string"
- },
- "required": false
- },
- {
- "name": "workspace",
- "in": "query",
- "schema": {
- "type": "string"
- },
- "required": false
- }
- ],
- "responses": {
- "204": {
- "description": "Project copy removed"
- },
- "400": {
- "description": "ProjectCopyError | InvalidRequestError",
- "content": {
- "application/json": {
- "schema": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/ProjectCopyError"
- },
- {
- "$ref": "#/components/schemas/InvalidRequestError"
- }
- ]
- }
- }
- }
- }
- },
- "description": "Remove a local physical copy of a project using the selected strategy.",
- "summary": "Remove project copy",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "directory": {
- "type": "string"
- }
- },
- "required": ["directory"],
- "additionalProperties": false
- }
- }
- }
- },
- "x-codeSamples": [
- {
- "lang": "js",
- "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.experimental.projectCopy.remove({\n ...\n})"
- }
- ]
- }
- },
- "/experimental/project/{projectID}/copy/refresh": {
- "post": {
- "tags": ["projectCopy"],
- "operationId": "experimental.projectCopy.refresh",
- "parameters": [
- {
- "name": "projectID",
- "in": "path",
- "schema": {
- "type": "string"
- },
- "required": true
- },
- {
- "name": "directory",
- "in": "query",
- "schema": {
- "type": "string"
- },
- "required": false
- },
- {
- "name": "workspace",
- "in": "query",
- "schema": {
- "type": "string"
- },
- "required": false
- }
- ],
- "responses": {
- "204": {
- "description": "Project copies refreshed"
- },
- "400": {
- "description": "ProjectCopyError | InvalidRequestError",
- "content": {
- "application/json": {
- "schema": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/ProjectCopyError"
- },
- {
- "$ref": "#/components/schemas/InvalidRequestError"
- }
- ]
- }
- }
- }
- }
- },
- "description": "Discover local project copies using one or all configured strategies.",
- "summary": "Refresh project copies",
- "x-codeSamples": [
- {
- "lang": "js",
- "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.experimental.projectCopy.refresh({\n ...\n})"
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.experimental.projectCopy.generateName({\n ...\n})"
}
]
}
@@ -14735,6 +14594,16 @@
}
}
}
+ },
+ "500": {
+ "description": "CloudSessionImportError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CloudSessionImportError"
+ }
+ }
+ }
}
},
"description": "Download a cloud-synced session and write it to local storage with fresh IDs.",
@@ -16890,6 +16759,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -19898,7 +19771,7 @@
},
"/api/health": {
"get": {
- "tags": ["kilo experimental HttpApi"],
+ "tags": ["Kilo HttpApi"],
"operationId": "v2.health.get",
"parameters": [],
"security": [],
@@ -19942,8 +19815,8 @@
}
}
},
- "description": "Check whether the v2 API server is ready to accept requests.",
- "summary": "Check v2 server health",
+ "description": "Check whether the API server is ready to accept requests.",
+ "summary": "Check server health",
"x-codeSamples": [
{
"lang": "js",
@@ -19952,9 +19825,77 @@
]
}
},
+ "/api/location": {
+ "get": {
+ "tags": ["Kilo HttpApi"],
+ "operationId": "v2.location.get",
+ "parameters": [
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Location.Info",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LocationInfo"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Resolve the requested location or the server default location.",
+ "summary": "Get location",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.location.get({\n ...\n})"
+ }
+ ]
+ }
+ },
"/api/agent": {
"get": {
- "tags": ["kilo experimental HttpApi"],
+ "tags": ["Kilo HttpApi"],
"operationId": "v2.agent.list",
"parameters": [
{
@@ -20023,8 +19964,8 @@
}
}
},
- "description": "Retrieve currently registered v2 agents.",
- "summary": "List v2 agents",
+ "description": "Retrieve currently registered agents.",
+ "summary": "List agents",
"x-codeSamples": [
{
"lang": "js",
@@ -20035,7 +19976,7 @@
},
"/api/session": {
"get": {
- "tags": ["v2"],
+ "tags": ["sessions"],
"operationId": "v2.session.list",
"parameters": [
{
@@ -20109,11 +20050,11 @@
"security": [],
"responses": {
"200": {
- "description": "V2SessionsResponse",
+ "description": "SessionsResponse",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/V2SessionsResponse"
+ "$ref": "#/components/schemas/SessionsResponse"
}
}
}
@@ -20150,18 +20091,192 @@
}
},
"description": "Retrieve sessions in the requested order. Items keep that order across pages; use cursor.next or cursor.previous to move through the ordered list.",
- "summary": "List v2 sessions",
+ "summary": "List sessions",
"x-codeSamples": [
{
"lang": "js",
"source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.list({\n ...\n})"
}
]
+ },
+ "post": {
+ "tags": ["sessions"],
+ "operationId": "v2.session.create",
+ "parameters": [],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/components/schemas/SessionV2Info"
+ }
+ },
+ "required": ["data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Create a session at the requested location.",
+ "summary": "Create session",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^ses"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "providerID": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string"
+ }
+ },
+ "required": ["id", "providerID"],
+ "additionalProperties": false
+ },
+ "location": {
+ "$ref": "#/components/schemas/LocationRef"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": true
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.create({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/session/{sessionID}": {
+ "get": {
+ "tags": ["sessions"],
+ "operationId": "v2.session.get",
+ "parameters": [
+ {
+ "name": "sessionID",
+ "in": "path",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/components/schemas/SessionV2Info"
+ }
+ },
+ "required": ["data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "SessionNotFoundError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "description": "Retrieve a session by ID.",
+ "summary": "Get session",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.get({\n ...\n})"
+ }
+ ]
}
},
"/api/session/{sessionID}/prompt": {
"post": {
- "tags": ["v2"],
+ "tags": ["sessions"],
"operationId": "v2.session.prompt",
"parameters": [
{
@@ -20218,7 +20333,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SessionNotFoundError"
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
}
}
}
@@ -20234,8 +20356,8 @@
}
}
},
- "description": "Durably admit one v2 session input and schedule agent-loop execution unless resume is false.",
- "summary": "Send v2 message",
+ "description": "Durably admit one session input and schedule agent-loop execution unless resume is false.",
+ "summary": "Send message",
"requestBody": {
"content": {
"application/json": {
@@ -20274,7 +20396,7 @@
},
"/api/session/{sessionID}/compact": {
"post": {
- "tags": ["v2"],
+ "tags": ["sessions"],
"operationId": "v2.session.compact",
"parameters": [
{
@@ -20317,7 +20439,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SessionNotFoundError"
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
}
}
}
@@ -20333,8 +20462,8 @@
}
}
},
- "description": "Compact a v2 session conversation.",
- "summary": "Compact v2 session",
+ "description": "Compact a session conversation.",
+ "summary": "Compact session",
"x-codeSamples": [
{
"lang": "js",
@@ -20345,7 +20474,7 @@
},
"/api/session/{sessionID}/wait": {
"post": {
- "tags": ["v2"],
+ "tags": ["sessions"],
"operationId": "v2.session.wait",
"parameters": [
{
@@ -20388,7 +20517,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SessionNotFoundError"
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
}
}
}
@@ -20404,8 +20540,8 @@
}
}
},
- "description": "Wait for a v2 session agent loop to become idle.",
- "summary": "Wait for v2 session",
+ "description": "Wait for a session agent loop to become idle.",
+ "summary": "Wait for session",
"x-codeSamples": [
{
"lang": "js",
@@ -20416,7 +20552,7 @@
},
"/api/session/{sessionID}/context": {
"get": {
- "tags": ["v2"],
+ "tags": ["sessions"],
"operationId": "v2.session.context",
"parameters": [
{
@@ -20476,7 +20612,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SessionNotFoundError"
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
}
}
}
@@ -20492,8 +20635,8 @@
}
}
},
- "description": "Retrieve the active context messages for a v2 session (all messages after the last compaction).",
- "summary": "Get v2 session context",
+ "description": "Retrieve the active context messages for a session (all messages after the last compaction).",
+ "summary": "Get session context",
"x-codeSamples": [
{
"lang": "js",
@@ -20504,7 +20647,7 @@
},
"/api/session/{sessionID}/message": {
"get": {
- "tags": ["v2 messages"],
+ "tags": ["messages"],
"operationId": "v2.session.messages",
"parameters": [
{
@@ -20546,11 +20689,11 @@
"security": [],
"responses": {
"200": {
- "description": "V2SessionMessagesResponse",
+ "description": "SessionMessagesResponse",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/V2SessionMessagesResponse"
+ "$ref": "#/components/schemas/SessionMessagesResponse"
}
}
}
@@ -20587,7 +20730,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SessionNotFoundError"
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
}
}
}
@@ -20603,8 +20753,8 @@
}
}
},
- "description": "Retrieve projected v2 messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.",
- "summary": "Get v2 session messages",
+ "description": "Retrieve projected messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.",
+ "summary": "Get session messages",
"x-codeSamples": [
{
"lang": "js",
@@ -20615,7 +20765,7 @@
},
"/api/model": {
"get": {
- "tags": ["v2 models"],
+ "tags": ["models"],
"operationId": "v2.model.list",
"parameters": [
{
@@ -20694,8 +20844,8 @@
}
}
},
- "description": "Retrieve available v2 models ordered by release date.",
- "summary": "List v2 models",
+ "description": "Retrieve available models ordered by release date.",
+ "summary": "List models",
"x-codeSamples": [
{
"lang": "js",
@@ -20706,7 +20856,7 @@
},
"/api/provider": {
"get": {
- "tags": ["v2 providers"],
+ "tags": ["providers"],
"operationId": "v2.provider.list",
"parameters": [
{
@@ -20785,8 +20935,8 @@
}
}
},
- "description": "Retrieve active v2 AI providers so clients can show provider availability and configuration.",
- "summary": "List v2 providers",
+ "description": "Retrieve active AI providers so clients can show provider availability and configuration.",
+ "summary": "List providers",
"x-codeSamples": [
{
"lang": "js",
@@ -20797,7 +20947,7 @@
},
"/api/provider/{providerID}": {
"get": {
- "tags": ["v2 providers"],
+ "tags": ["providers"],
"operationId": "v2.provider.get",
"parameters": [
{
@@ -20891,8 +21041,8 @@
}
}
},
- "description": "Retrieve a single v2 AI provider so clients can inspect its availability and endpoint settings.",
- "summary": "Get v2 provider",
+ "description": "Retrieve a single AI provider so clients can inspect its availability and endpoint settings.",
+ "summary": "Get provider",
"x-codeSamples": [
{
"lang": "js",
@@ -20901,9 +21051,1011 @@
]
}
},
+ "/api/integration": {
+ "get": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.list",
+ "parameters": [
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "$ref": "#/components/schemas/LocationInfo"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/IntegrationInfo"
+ }
+ }
+ },
+ "required": ["location", "data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Retrieve available integrations and their authentication methods.",
+ "summary": "List integrations",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/integration/{integrationID}": {
+ "get": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.get",
+ "parameters": [
+ {
+ "name": "integrationID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "$ref": "#/components/schemas/LocationInfo"
+ },
+ "data": {
+ "$ref": "#/components/schemas/IntegrationInfo"
+ }
+ },
+ "required": ["location", "data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Retrieve one integration and its authentication methods.",
+ "summary": "Get integration",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.get({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/integration/{integrationID}/connect/key": {
+ "post": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.connect.key",
+ "parameters": [
+ {
+ "name": "integrationID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ },
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Run a key authentication method and store the resulting credential.",
+ "summary": "Connect with key",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ }
+ },
+ "required": ["key"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": true
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.connect.key({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/integration/{integrationID}/connect/oauth": {
+ "post": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.connect.oauth",
+ "parameters": [
+ {
+ "name": "integrationID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "$ref": "#/components/schemas/LocationInfo"
+ },
+ "data": {
+ "$ref": "#/components/schemas/IntegrationAttempt"
+ }
+ },
+ "required": ["location", "data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ },
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Start an OAuth attempt and return the authorization details.",
+ "summary": "Begin OAuth connection",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "methodID": {
+ "type": "string"
+ },
+ "inputs": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "label": {
+ "type": "string"
+ }
+ },
+ "required": ["methodID", "inputs"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": true
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.connect.oauth({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/integration/attempt/{attemptID}": {
+ "get": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.attempt.status",
+ "parameters": [
+ {
+ "name": "attemptID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "$ref": "#/components/schemas/LocationInfo"
+ },
+ "data": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": ["pending"]
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "expires": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ }
+ },
+ "required": ["created", "expires"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["status", "time"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": ["complete"]
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "expires": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ }
+ },
+ "required": ["created", "expires"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["status", "time"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": ["failed"]
+ },
+ "message": {
+ "type": "string"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "expires": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ }
+ },
+ "required": ["created", "expires"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["status", "message", "time"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": ["expired"]
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "expires": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ }
+ },
+ "required": ["created", "expires"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["status", "time"],
+ "additionalProperties": false
+ }
+ ]
+ }
+ },
+ "required": ["location", "data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Poll the current status of an OAuth attempt.",
+ "summary": "Get OAuth attempt status",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.attempt.status({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.attempt.cancel",
+ "parameters": [
+ {
+ "name": "attemptID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Cancel an OAuth attempt and release its resources.",
+ "summary": "Cancel OAuth connection",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.attempt.cancel({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/integration/attempt/{attemptID}/complete": {
+ "post": {
+ "tags": ["integrations"],
+ "operationId": "v2.integration.attempt.complete",
+ "parameters": [
+ {
+ "name": "attemptID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ },
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Complete a code-based OAuth attempt and store the resulting credential.",
+ "summary": "Complete OAuth connection",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": true
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.integration.attempt.complete({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/credential/{credentialID}": {
+ "patch": {
+ "tags": ["Kilo HttpApi"],
+ "operationId": "v2.credential.update",
+ "parameters": [
+ {
+ "name": "credentialID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Update a stored credential label.",
+ "summary": "Update credential",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "label": {
+ "type": "string"
+ }
+ },
+ "required": ["label"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": true
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.credential.update({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "tags": ["Kilo HttpApi"],
+ "operationId": "v2.credential.remove",
+ "parameters": [
+ {
+ "name": "credentialID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Remove a stored integration credential.",
+ "summary": "Remove credential",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.credential.remove({\n ...\n})"
+ }
+ ]
+ }
+ },
"/api/permission/request": {
"get": {
- "tags": ["v2 permissions"],
+ "tags": ["permissions"],
"operationId": "v2.permission.request.list",
"parameters": [
{
@@ -20982,184 +22134,9 @@
]
}
},
- "/api/session/{sessionID}/permission/request": {
- "get": {
- "tags": ["v2 session permissions"],
- "operationId": "v2.session.permission.list",
- "parameters": [
- {
- "name": "sessionID",
- "in": "path",
- "schema": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "required": true
- }
- ],
- "security": [],
- "responses": {
- "200": {
- "description": "Success",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PermissionV2Request"
- }
- }
- },
- "required": ["data"],
- "additionalProperties": false
- }
- }
- }
- },
- "400": {
- "description": "InvalidRequestError",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/InvalidRequestError"
- }
- }
- }
- },
- "401": {
- "description": "UnauthorizedError",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/UnauthorizedError"
- }
- }
- }
- },
- "404": {
- "description": "SessionNotFoundError",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/SessionNotFoundError"
- }
- }
- }
- }
- },
- "description": "Retrieve pending permission requests owned by a session.",
- "summary": "List session permission requests",
- "x-codeSamples": [
- {
- "lang": "js",
- "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.permission.list({\n ...\n})"
- }
- ]
- }
- },
- "/api/session/{sessionID}/permission/request/{requestID}/reply": {
- "post": {
- "tags": ["v2 session permissions"],
- "operationId": "v2.session.permission.reply",
- "parameters": [
- {
- "name": "sessionID",
- "in": "path",
- "schema": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "required": true
- },
- {
- "name": "requestID",
- "in": "path",
- "schema": {
- "type": "string",
- "pattern": "^per"
- },
- "required": true
- }
- ],
- "security": [],
- "responses": {
- "204": {
- "description": ""
- },
- "400": {
- "description": "InvalidRequestError",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/InvalidRequestError"
- }
- }
- }
- },
- "401": {
- "description": "UnauthorizedError",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/UnauthorizedError"
- }
- }
- }
- },
- "404": {
- "description": "SessionNotFoundError | PermissionNotFoundError",
- "content": {
- "application/json": {
- "schema": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/SessionNotFoundError"
- },
- {
- "$ref": "#/components/schemas/PermissionNotFoundError"
- }
- ]
- }
- }
- }
- }
- },
- "description": "Respond to a pending permission request owned by a session.",
- "summary": "Reply to pending permission request",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "reply": {
- "$ref": "#/components/schemas/PermissionV2Reply"
- },
- "message": {
- "type": "string"
- }
- },
- "required": ["reply"],
- "additionalProperties": false
- }
- }
- },
- "required": true
- },
- "x-codeSamples": [
- {
- "lang": "js",
- "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.permission.reply({\n ...\n})"
- }
- ]
- }
- },
"/api/permission/saved": {
"get": {
- "tags": ["v2 saved permissions"],
+ "tags": ["permissions"],
"operationId": "v2.permission.saved.list",
"parameters": [
{
@@ -21226,7 +22203,7 @@
},
"/api/permission/saved/{id}": {
"delete": {
- "tags": ["v2 saved permissions"],
+ "tags": ["permissions"],
"operationId": "v2.permission.saved.remove",
"parameters": [
{
@@ -21274,9 +22251,194 @@
]
}
},
- "/api/fs/read": {
+ "/api/session/{sessionID}/permission": {
"get": {
- "tags": ["v2 filesystem"],
+ "tags": ["permissions"],
+ "operationId": "v2.session.permission.list",
+ "parameters": [
+ {
+ "name": "sessionID",
+ "in": "path",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PermissionV2Request"
+ }
+ }
+ },
+ "required": ["data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "SessionNotFoundError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "description": "Retrieve pending permission requests owned by a session.",
+ "summary": "List session permission requests",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.permission.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/session/{sessionID}/permission/{requestID}/reply": {
+ "post": {
+ "tags": ["permissions"],
+ "operationId": "v2.session.permission.reply",
+ "parameters": [
+ {
+ "name": "sessionID",
+ "in": "path",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ },
+ {
+ "name": "requestID",
+ "in": "path",
+ "schema": {
+ "type": "string",
+ "pattern": "^per"
+ },
+ "required": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "SessionNotFoundError | PermissionNotFoundError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PermissionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "description": "Respond to a pending permission request owned by a session.",
+ "summary": "Reply to pending permission request",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "reply": {
+ "$ref": "#/components/schemas/PermissionV2Reply"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["reply"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": true
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.permission.reply({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/fs/read/*": {
+ "get": {
+ "tags": ["filesystem"],
"operationId": "v2.fs.read",
"parameters": [
{
@@ -21304,14 +22466,6 @@
"schema": {
"type": "string"
},
- "required": true
- },
- {
- "name": "reference",
- "in": "query",
- "schema": {
- "type": "string"
- },
"required": false
}
],
@@ -21320,26 +22474,10 @@
"200": {
"description": "Success",
"content": {
- "application/json": {
+ "application/octet-stream": {
"schema": {
- "type": "object",
- "properties": {
- "location": {
- "$ref": "#/components/schemas/LocationInfo"
- },
- "data": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/FileSystemTextContent"
- },
- {
- "$ref": "#/components/schemas/FileSystemBinaryContent"
- }
- ]
- }
- },
- "required": ["location", "data"],
- "additionalProperties": false
+ "type": "string",
+ "format": "binary"
}
}
}
@@ -21365,7 +22503,7 @@
}
}
},
- "description": "Read one file relative to the requested location.",
+ "description": "Serve one file relative to the requested location.",
"summary": "Read file",
"x-codeSamples": [
{
@@ -21377,7 +22515,7 @@
},
"/api/fs/list": {
"get": {
- "tags": ["v2 filesystem"],
+ "tags": ["filesystem"],
"operationId": "v2.fs.list",
"parameters": [
{
@@ -21406,14 +22544,6 @@
"type": "string"
},
"required": false
- },
- {
- "name": "reference",
- "in": "query",
- "schema": {
- "type": "string"
- },
- "required": false
}
],
"security": [],
@@ -21472,9 +22602,115 @@
]
}
},
+ "/api/fs/find": {
+ "get": {
+ "tags": ["filesystem"],
+ "operationId": "v2.fs.find",
+ "parameters": [
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "type",
+ "in": "query",
+ "schema": {
+ "type": "string",
+ "enum": ["file", "directory"]
+ },
+ "required": false
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "required": false
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "$ref": "#/components/schemas/LocationInfo"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileSystemEntry"
+ }
+ }
+ },
+ "required": ["location", "data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "Find recursively ranked filesystem entries relative to the requested location.",
+ "summary": "Find files",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.fs.find({\n ...\n})"
+ }
+ ]
+ }
+ },
"/api/command": {
"get": {
- "tags": ["v2 commands"],
+ "tags": ["commands"],
"operationId": "v2.command.list",
"parameters": [
{
@@ -21543,8 +22779,8 @@
}
}
},
- "description": "Retrieve currently registered v2 commands.",
- "summary": "List v2 commands",
+ "description": "Retrieve currently registered commands.",
+ "summary": "List commands",
"x-codeSamples": [
{
"lang": "js",
@@ -21555,7 +22791,7 @@
},
"/api/skill": {
"get": {
- "tags": ["v2 skills"],
+ "tags": ["skills"],
"operationId": "v2.skill.list",
"parameters": [
{
@@ -21624,8 +22860,8 @@
}
}
},
- "description": "Retrieve currently registered v2 skills.",
- "summary": "List v2 skills",
+ "description": "Retrieve currently registered skills.",
+ "summary": "List skills",
"x-codeSamples": [
{
"lang": "js",
@@ -21636,7 +22872,7 @@
},
"/api/event": {
"get": {
- "tags": ["v2 events"],
+ "tags": ["events"],
"operationId": "v2.event.subscribe",
"parameters": [
{
@@ -21692,8 +22928,8 @@
}
}
},
- "description": "Subscribe to native EventV2 payloads for a location.",
- "summary": "Subscribe to v2 events",
+ "description": "Subscribe to native event payloads for a location.",
+ "summary": "Subscribe to events",
"x-codeSamples": [
{
"lang": "js",
@@ -21704,7 +22940,7 @@
},
"/api/question/request": {
"get": {
- "tags": ["v2 questions"],
+ "tags": ["session questions"],
"operationId": "v2.question.request.list",
"parameters": [
{
@@ -21783,9 +23019,94 @@
]
}
},
- "/api/session/{sessionID}/question/request/{requestID}/reply": {
+ "/api/session/{sessionID}/question": {
+ "get": {
+ "tags": ["session questions"],
+ "operationId": "v2.session.question.list",
+ "parameters": [
+ {
+ "name": "sessionID",
+ "in": "path",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionV2Request"
+ }
+ }
+ },
+ "required": ["data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "SessionNotFoundError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ },
+ {
+ "$ref": "#/components/schemas/SessionNotFoundError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "description": "Retrieve pending question requests owned by a session.",
+ "summary": "List session question requests",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.session.question.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/api/session/{sessionID}/question/{requestID}/reply": {
"post": {
- "tags": ["v2 session questions"],
+ "tags": ["session questions"],
"operationId": "v2.session.question.reply",
"parameters": [
{
@@ -21838,11 +23159,14 @@
"application/json": {
"schema": {
"anyOf": [
+ {
+ "$ref": "#/components/schemas/QuestionNotFoundError"
+ },
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
- "$ref": "#/components/schemas/QuestionNotFoundError"
+ "$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
@@ -21870,9 +23194,9 @@
]
}
},
- "/api/session/{sessionID}/question/request/{requestID}/reject": {
+ "/api/session/{sessionID}/question/{requestID}/reject": {
"post": {
- "tags": ["v2 session questions"],
+ "tags": ["session questions"],
"operationId": "v2.session.question.reject",
"parameters": [
{
@@ -21925,11 +23249,14 @@
"application/json": {
"schema": {
"anyOf": [
+ {
+ "$ref": "#/components/schemas/QuestionNotFoundError"
+ },
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
- "$ref": "#/components/schemas/QuestionNotFoundError"
+ "$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
@@ -21947,6 +23274,322 @@
]
}
},
+ "/api/reference": {
+ "get": {
+ "tags": ["reference"],
+ "operationId": "v2.reference.list",
+ "parameters": [
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "security": [],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "$ref": "#/components/schemas/LocationInfo"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ReferenceInfo"
+ }
+ }
+ },
+ "required": ["location", "data"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "UnauthorizedError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnauthorizedError"
+ }
+ }
+ }
+ }
+ },
+ "description": "List references available in the requested location.",
+ "summary": "List references",
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.reference.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/project/{projectID}/copy": {
+ "post": {
+ "tags": ["projectCopy"],
+ "operationId": "v2.projectCopy.create",
+ "parameters": [
+ {
+ "name": "projectID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "ProjectCopy.Copy",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ProjectCopyCopy"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "ProjectCopyError | InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ProjectCopyError"
+ },
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "strategy": {
+ "type": "string"
+ },
+ "directory": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": ["strategy", "directory"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.projectCopy.create({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "tags": ["projectCopy"],
+ "operationId": "v2.projectCopy.remove",
+ "parameters": [
+ {
+ "name": "projectID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "ProjectCopyError | InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ProjectCopyError"
+ },
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "force": {
+ "type": "boolean"
+ }
+ },
+ "required": ["directory", "force"],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.projectCopy.remove({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/project/{projectID}/copy/refresh": {
+ "post": {
+ "tags": ["projectCopy"],
+ "operationId": "v2.projectCopy.refresh",
+ "parameters": [
+ {
+ "name": "projectID",
+ "in": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "name": "location",
+ "in": "query",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "workspace": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "required": false,
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "400": {
+ "description": "ProjectCopyError | InvalidRequestError",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ProjectCopyError"
+ },
+ {
+ "$ref": "#/components/schemas/InvalidRequestError"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createKiloClient } from \"@kilocode/sdk\"\n\nconst client = createKiloClient()\nawait client.v2.projectCopy.refresh({\n ...\n})"
+ }
+ ]
+ }
+ },
"/pty/{ptyID}/connect": {
"get": {
"tags": ["pty"],
@@ -22176,6 +23819,9 @@
{
"$ref": "#/components/schemas/EventSessionNextPromptPromoted"
},
+ {
+ "$ref": "#/components/schemas/EventSessionNextInterruptRequested"
+ },
{
"$ref": "#/components/schemas/EventSessionNextContextUpdated"
},
@@ -22300,61 +23946,10 @@
"$ref": "#/components/schemas/EventPermissionReplied"
},
{
- "$ref": "#/components/schemas/EventTodoUpdated"
+ "$ref": "#/components/schemas/EventReferenceUpdated"
},
{
- "$ref": "#/components/schemas/EventSessionStatus"
- },
- {
- "$ref": "#/components/schemas/EventSessionIdle"
- },
- {
- "$ref": "#/components/schemas/EventSessionCompacted"
- },
- {
- "$ref": "#/components/schemas/EventCommandExecuted"
- },
- {
- "$ref": "#/components/schemas/EventProjectDirectoriesUpdated"
- },
- {
- "$ref": "#/components/schemas/EventProjectUpdated"
- },
- {
- "$ref": "#/components/schemas/EventLspUpdated"
- },
- {
- "$ref": "#/components/schemas/EventFileEdited"
- },
- {
- "$ref": "#/components/schemas/EventFileWatcherUpdated"
- },
- {
- "$ref": "#/components/schemas/EventVcsBranchUpdated"
- },
- {
- "$ref": "#/components/schemas/EventWorkspaceReady"
- },
- {
- "$ref": "#/components/schemas/EventWorkspaceFailed"
- },
- {
- "$ref": "#/components/schemas/EventWorkspaceStatus"
- },
- {
- "$ref": "#/components/schemas/EventWorktreeReady"
- },
- {
- "$ref": "#/components/schemas/EventWorktreeFailed"
- },
- {
- "$ref": "#/components/schemas/EventAccountAdded"
- },
- {
- "$ref": "#/components/schemas/EventAccountRemoved"
- },
- {
- "$ref": "#/components/schemas/EventAccountSwitched"
+ "$ref": "#/components/schemas/EventIntegrationUpdated"
},
{
"$ref": "#/components/schemas/EventPermissionV2Asked"
@@ -22362,6 +23957,15 @@
{
"$ref": "#/components/schemas/EventPermissionV2Replied"
},
+ {
+ "$ref": "#/components/schemas/EventProjectDirectoriesUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventFileEdited"
+ },
+ {
+ "$ref": "#/components/schemas/EventFileWatcherUpdated"
+ },
{
"$ref": "#/components/schemas/EventPtyCreated"
},
@@ -22383,6 +23987,45 @@
{
"$ref": "#/components/schemas/EventQuestionV2Rejected"
},
+ {
+ "$ref": "#/components/schemas/EventTodoUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventSessionStatus"
+ },
+ {
+ "$ref": "#/components/schemas/EventSessionIdle"
+ },
+ {
+ "$ref": "#/components/schemas/EventSessionCompacted"
+ },
+ {
+ "$ref": "#/components/schemas/EventCommandExecuted"
+ },
+ {
+ "$ref": "#/components/schemas/EventProjectUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventLspUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventVcsBranchUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorkspaceReady"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorkspaceFailed"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorkspaceStatus"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorktreeReady"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorktreeFailed"
+ },
{
"$ref": "#/components/schemas/EventServerInstanceDisposed"
}
@@ -23353,6 +24996,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -23641,6 +25288,27 @@
"required": ["name", "data"],
"additionalProperties": false
},
+ "ContentFilterError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "enum": ["ContentFilterError"]
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["message"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["name", "data"],
+ "additionalProperties": false
+ },
"APIError": {
"type": "object",
"properties": {
@@ -23734,6 +25402,9 @@
{
"$ref": "#/components/schemas/ContextOverflowError"
},
+ {
+ "$ref": "#/components/schemas/ContentFilterError"
+ },
{
"$ref": "#/components/schemas/APIError"
}
@@ -24350,6 +26021,17 @@
},
"snapshot": {
"type": "string"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number",
+ "minimum": 0
+ }
+ },
+ "required": ["start"],
+ "additionalProperties": false
}
},
"required": ["id", "sessionID", "messageID", "type"],
@@ -24393,6 +26075,47 @@
"required": ["providerID", "modelID"],
"additionalProperties": false
},
+ "generationID": {
+ "type": "string"
+ },
+ "vercelID": {
+ "type": "string"
+ },
+ "metrics": {
+ "type": "object",
+ "properties": {
+ "prompt": {
+ "type": "number"
+ },
+ "generation": {
+ "type": "number"
+ },
+ "source": {
+ "type": "string",
+ "enum": ["provider", "computed"]
+ }
+ },
+ "required": ["source"],
+ "additionalProperties": false
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number",
+ "minimum": 0
+ },
+ "end": {
+ "type": "number",
+ "minimum": 0
+ },
+ "elapsed": {
+ "type": "number"
+ }
+ },
+ "required": ["start", "end", "elapsed"],
+ "additionalProperties": false
+ },
"cost": {
"type": "number"
},
@@ -24665,12 +26388,6 @@
"items": {
"$ref": "#/components/schemas/PromptAgentAttachment"
}
- },
- "references": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PromptReferenceAttachment"
- }
}
},
"required": ["text"],
@@ -24981,6 +26698,70 @@
"required": ["name", "data"],
"additionalProperties": false
},
+ "Pty": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty"
+ },
+ "title": {
+ "type": "string"
+ },
+ "command": {
+ "type": "string"
+ },
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cwd": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["running", "exited"]
+ },
+ "pid": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "sessionID": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^ses"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": ["id", "title", "command", "args", "cwd", "status", "pid"],
+ "additionalProperties": false
+ },
+ "Todo": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string",
+ "description": "Brief description of the task"
+ },
+ "status": {
+ "type": "string",
+ "description": "Current status of the task: pending, in_progress, completed, cancelled"
+ },
+ "priority": {
+ "type": "string",
+ "description": "Priority level of the task: high, medium, low"
+ }
+ },
+ "required": ["content", "status", "priority"],
+ "additionalProperties": false
+ },
"SessionStatus": {
"anyOf": [
{
@@ -25072,51 +26853,6 @@
}
]
},
- "Pty": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "pattern": "^pty"
- },
- "title": {
- "type": "string"
- },
- "command": {
- "type": "string"
- },
- "args": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "cwd": {
- "type": "string"
- },
- "status": {
- "type": "string",
- "enum": ["running", "exited"]
- },
- "pid": {
- "type": "integer",
- "minimum": 0
- },
- "sessionID": {
- "anyOf": [
- {
- "type": "string",
- "pattern": "^ses"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "required": ["id", "title", "command", "args", "cwd", "status", "pid"],
- "additionalProperties": false
- },
"GlobalEvent": {
"type": "object",
"properties": {
@@ -25269,6 +27005,9 @@
{
"$ref": "#/components/schemas/EventSessionNextPromptPromoted"
},
+ {
+ "$ref": "#/components/schemas/EventSessionNextInterruptRequested"
+ },
{
"$ref": "#/components/schemas/EventSessionNextContextUpdated"
},
@@ -25393,61 +27132,10 @@
"$ref": "#/components/schemas/EventPermissionReplied"
},
{
- "$ref": "#/components/schemas/EventTodoUpdated"
+ "$ref": "#/components/schemas/EventReferenceUpdated"
},
{
- "$ref": "#/components/schemas/EventSessionStatus"
- },
- {
- "$ref": "#/components/schemas/EventSessionIdle"
- },
- {
- "$ref": "#/components/schemas/EventSessionCompacted"
- },
- {
- "$ref": "#/components/schemas/EventCommandExecuted"
- },
- {
- "$ref": "#/components/schemas/EventProjectDirectoriesUpdated"
- },
- {
- "$ref": "#/components/schemas/EventProjectUpdated"
- },
- {
- "$ref": "#/components/schemas/EventLspUpdated"
- },
- {
- "$ref": "#/components/schemas/EventFileEdited"
- },
- {
- "$ref": "#/components/schemas/EventFileWatcherUpdated"
- },
- {
- "$ref": "#/components/schemas/EventVcsBranchUpdated"
- },
- {
- "$ref": "#/components/schemas/EventWorkspaceReady"
- },
- {
- "$ref": "#/components/schemas/EventWorkspaceFailed"
- },
- {
- "$ref": "#/components/schemas/EventWorkspaceStatus"
- },
- {
- "$ref": "#/components/schemas/EventWorktreeReady"
- },
- {
- "$ref": "#/components/schemas/EventWorktreeFailed"
- },
- {
- "$ref": "#/components/schemas/EventAccountAdded"
- },
- {
- "$ref": "#/components/schemas/EventAccountRemoved"
- },
- {
- "$ref": "#/components/schemas/EventAccountSwitched"
+ "$ref": "#/components/schemas/EventIntegrationUpdated"
},
{
"$ref": "#/components/schemas/EventPermissionV2Asked"
@@ -25455,6 +27143,15 @@
{
"$ref": "#/components/schemas/EventPermissionV2Replied"
},
+ {
+ "$ref": "#/components/schemas/EventProjectDirectoriesUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventFileEdited"
+ },
+ {
+ "$ref": "#/components/schemas/EventFileWatcherUpdated"
+ },
{
"$ref": "#/components/schemas/EventPtyCreated"
},
@@ -25476,6 +27173,45 @@
{
"$ref": "#/components/schemas/EventQuestionV2Rejected"
},
+ {
+ "$ref": "#/components/schemas/EventTodoUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventSessionStatus"
+ },
+ {
+ "$ref": "#/components/schemas/EventSessionIdle"
+ },
+ {
+ "$ref": "#/components/schemas/EventSessionCompacted"
+ },
+ {
+ "$ref": "#/components/schemas/EventCommandExecuted"
+ },
+ {
+ "$ref": "#/components/schemas/EventProjectUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventLspUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventVcsBranchUpdated"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorkspaceReady"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorkspaceFailed"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorkspaceStatus"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorktreeReady"
+ },
+ {
+ "$ref": "#/components/schemas/EventWorktreeFailed"
+ },
{
"$ref": "#/components/schemas/EventServerInstanceDisposed"
},
@@ -25575,9 +27311,6 @@
{
"$ref": "#/components/schemas/SyncEventSessionNextCompactionStarted"
},
- {
- "$ref": "#/components/schemas/SyncEventSessionNextCompactionDelta"
- },
{
"$ref": "#/components/schemas/SyncEventSessionNextCompactionEnded"
}
@@ -25618,44 +27351,6 @@
"additionalProperties": false,
"description": "Server configuration for the kilo serve command"
},
- "ReferenceConfigEntry": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "object",
- "properties": {
- "repository": {
- "type": "string",
- "description": "Git repository URL, host/path reference, or GitHub owner/repo shorthand"
- },
- "branch": {
- "type": "string"
- }
- },
- "required": ["repository"],
- "additionalProperties": false
- },
- {
- "type": "object",
- "properties": {
- "path": {
- "type": "string",
- "description": "Absolute path, ~/ path, or workspace-relative path to a local reference directory"
- }
- },
- "required": ["path"],
- "additionalProperties": false
- }
- ]
- },
- "ReferenceConfig": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/components/schemas/ReferenceConfigEntry"
- }
- },
"IndexingConfig": {
"type": "object",
"properties": {
@@ -25850,7 +27545,8 @@
"items": {
"type": "string",
"pattern": "^\\s*\\.?[A-Za-z0-9][A-Za-z0-9_+-]*\\s*$"
- }
+ },
+ "minItems": 1
}
},
"additionalProperties": false
@@ -26213,7 +27909,7 @@
"properties": {
"field": {
"type": "string",
- "enum": ["reasoning_content", "reasoning_details"]
+ "enum": ["reasoning", "reasoning_content", "reasoning_details"]
}
},
"required": ["field"],
@@ -26539,8 +28235,37 @@
},
"additionalProperties": false
},
+ "references": {
+ "type": "object",
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "#/components/schemas/ConfigV2ReferenceGit"
+ },
+ {
+ "$ref": "#/components/schemas/ConfigV2ReferenceLocal"
+ }
+ ]
+ }
+ },
"reference": {
- "$ref": "#/components/schemas/ReferenceConfig"
+ "type": "object",
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "#/components/schemas/ConfigV2ReferenceGit"
+ },
+ {
+ "$ref": "#/components/schemas/ConfigV2ReferenceLocal"
+ }
+ ]
+ }
},
"watcher": {
"type": "object",
@@ -26647,6 +28372,10 @@
"hide_prompt_training_models": {
"type": "boolean"
},
+ "web_search": {
+ "type": "boolean",
+ "description": "Make web search available to models from all providers (default: false)"
+ },
"sandbox": {
"type": "object",
"properties": {
@@ -26905,9 +28634,6 @@
"type": "boolean"
}
},
- "web_search": {
- "type": "boolean"
- },
"attachment": {
"$ref": "#/components/schemas/AttachmentConfig"
},
@@ -27164,7 +28890,7 @@
"properties": {
"field": {
"type": "string",
- "enum": ["reasoning_content", "reasoning_details"]
+ "enum": ["reasoning", "reasoning_content", "reasoning_details"]
}
},
"required": ["field"],
@@ -27809,6 +29535,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -28494,27 +30224,6 @@
"required": ["_tag", "projectID", "message"],
"additionalProperties": false
},
- "ProjectCopyError": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "enum": ["ProjectCopyError"]
- },
- "data": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string"
- }
- },
- "required": ["message"],
- "additionalProperties": false
- }
- },
- "required": ["name", "data"],
- "additionalProperties": false
- },
"PtyNotFoundError": {
"type": "object",
"properties": {
@@ -28977,6 +30686,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -29146,6 +30859,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -29174,25 +30891,6 @@
}
}
},
- "Todo": {
- "type": "object",
- "properties": {
- "content": {
- "type": "string",
- "description": "Brief description of the task"
- },
- "status": {
- "type": "string",
- "description": "Current status of the task: pending, in_progress, completed, cancelled"
- },
- "priority": {
- "type": "string",
- "description": "Priority level of the task: high, medium, low"
- }
- },
- "required": ["content", "status", "priority"],
- "additionalProperties": false
- },
"Session3": {
"type": "object",
"properties": {
@@ -29353,6 +31051,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -29522,6 +31224,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -29691,6 +31397,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -29860,6 +31570,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -30029,6 +31743,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -30360,6 +32078,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -30529,6 +32251,10 @@
},
"diff": {
"type": "string"
+ },
+ "workspace": {
+ "type": "string",
+ "enum": ["restored", "snapshots-disabled", "unavailable"]
}
},
"required": ["messageID"],
@@ -31425,6 +33151,16 @@
"required": ["_tag"],
"additionalProperties": false
},
+ "CloudSessionImportError": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "string"
+ }
+ },
+ "required": ["error"],
+ "additionalProperties": false
+ },
"AgentRequirementResult": {
"type": "object",
"properties": {
@@ -32361,7 +34097,7 @@
"required": ["_tag", "message"],
"additionalProperties": false
},
- "V2SessionsResponse": {
+ "SessionsResponse": {
"type": "object",
"properties": {
"data": {
@@ -32451,7 +34187,7 @@
"required": ["_tag", "message"],
"additionalProperties": false
},
- "V2SessionMessagesResponse": {
+ "SessionMessagesResponse": {
"type": "object",
"properties": {
"data": {
@@ -32493,6 +34229,30 @@
"required": ["_tag", "providerID", "message"],
"additionalProperties": false
},
+ "ProjectCopyError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "enum": ["ProjectCopyError"]
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "forceRequired": {
+ "type": "boolean"
+ }
+ },
+ "required": ["message"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["name", "data"],
+ "additionalProperties": false
+ },
"effect_HttpApiError_Forbidden": {
"type": "object",
"properties": {
@@ -34539,6 +36299,182 @@
"body": {
"type": "object"
},
+ "generation": {
+ "type": "object",
+ "properties": {
+ "maxTokens": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "temperature": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "topP": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "topK": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "frequencyPenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "presencePenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "seed": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "stop": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "options": {
+ "type": "object"
+ },
"variant": {
"type": "string"
}
@@ -34562,6 +36498,182 @@
},
"body": {
"type": "object"
+ },
+ "generation": {
+ "type": "object",
+ "properties": {
+ "maxTokens": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "temperature": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "topP": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "topK": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "frequencyPenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "presencePenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "seed": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "stop": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "options": {
+ "type": "object"
}
},
"required": ["id", "headers", "body"],
@@ -35092,41 +37204,6 @@
"required": ["name"],
"additionalProperties": false
},
- "PromptReferenceAttachment": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "kind": {
- "type": "string",
- "enum": ["local", "git", "invalid"]
- },
- "uri": {
- "type": "string"
- },
- "repository": {
- "type": "string"
- },
- "branch": {
- "type": "string"
- },
- "target": {
- "type": "string"
- },
- "targetUri": {
- "type": "string"
- },
- "problem": {
- "type": "string"
- },
- "source": {
- "$ref": "#/components/schemas/PromptSource"
- }
- },
- "required": ["name", "kind"],
- "additionalProperties": false
- },
"EventSessionNextPrompted": {
"type": "object",
"properties": {
@@ -35243,6 +37320,34 @@
"required": ["id", "type", "properties"],
"additionalProperties": false
},
+ "EventSessionNextInterruptRequested": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["session.next.interrupt.requested"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "type": "number"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses"
+ }
+ },
+ "required": ["timestamp", "sessionID"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
"EventSessionNextContextUpdated": {
"type": "object",
"properties": {
@@ -35984,51 +38089,8 @@
"type": "string",
"enum": ["file"]
},
- "source": {
- "anyOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["data"]
- },
- "data": {
- "type": "string"
- }
- },
- "required": ["type", "data"],
- "additionalProperties": false
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["url"]
- },
- "url": {
- "type": "string"
- }
- },
- "required": ["type", "url"],
- "additionalProperties": false
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["file"]
- },
- "uri": {
- "type": "string"
- }
- },
- "required": ["type", "uri"],
- "additionalProperties": false
- }
- ]
+ "uri": {
+ "type": "string"
},
"mime": {
"type": "string"
@@ -36037,7 +38099,7 @@
"type": "string"
}
},
- "required": ["type", "source", "mime"],
+ "required": ["type", "uri", "mime"],
"additionalProperties": false
},
"EventSessionNextToolProgress": {
@@ -36134,6 +38196,12 @@
]
}
},
+ "outputPaths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"result": {},
"provider": {
"type": "object",
@@ -36335,11 +38403,15 @@
"type": "string",
"pattern": "^ses"
},
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg_"
+ },
"text": {
"type": "string"
}
},
- "required": ["timestamp", "sessionID", "text"],
+ "required": ["timestamp", "sessionID", "messageID", "text"],
"additionalProperties": false
}
},
@@ -36366,9 +38438,20 @@
"type": "string",
"pattern": "^ses"
},
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg_"
+ },
+ "reason": {
+ "type": "string",
+ "enum": ["auto", "manual"]
+ },
"text": {
"type": "string"
},
+ "recent": {
+ "type": "string"
+ },
"include": {
"type": "string"
}
@@ -36644,6 +38727,9 @@
{
"$ref": "#/components/schemas/ContextOverflowError"
},
+ {
+ "$ref": "#/components/schemas/ContentFilterError"
+ },
{
"$ref": "#/components/schemas/APIError"
},
@@ -36818,26 +38904,7 @@
"required": ["id", "type", "properties"],
"additionalProperties": false
},
- "SessionTodoInfo": {
- "type": "object",
- "properties": {
- "content": {
- "type": "string",
- "description": "Brief description of the task"
- },
- "status": {
- "type": "string",
- "description": "Current status of the task: pending, in_progress, completed, cancelled"
- },
- "priority": {
- "type": "string",
- "description": "Priority level of the task: high, medium, low"
- }
- },
- "required": ["content", "status", "priority"],
- "additionalProperties": false
- },
- "EventTodoUpdated": {
+ "EventReferenceUpdated": {
"type": "object",
"properties": {
"id": {
@@ -36845,259 +38912,7 @@
},
"type": {
"type": "string",
- "enum": ["todo.updated"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses"
- },
- "todos": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/SessionTodoInfo"
- }
- }
- },
- "required": ["sessionID", "todos"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventSessionStatus": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["session.status"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses"
- },
- "status": {
- "$ref": "#/components/schemas/SessionStatus"
- }
- },
- "required": ["sessionID", "status"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventSessionIdle": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["session.idle"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses"
- }
- },
- "required": ["sessionID"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventSessionCompacted": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["session.compacted"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses"
- }
- },
- "required": ["sessionID"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventCommandExecuted": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["command.executed"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "sessionID": {
- "type": "string",
- "pattern": "^ses"
- },
- "arguments": {
- "type": "string"
- },
- "messageID": {
- "type": "string",
- "pattern": "^msg"
- }
- },
- "required": ["name", "sessionID", "arguments", "messageID"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventProjectDirectoriesUpdated": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["project.directories.updated"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "projectID": {
- "type": "string"
- }
- },
- "required": ["projectID"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventProjectUpdated": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["project.updated"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "worktree": {
- "type": "string"
- },
- "vcs": {
- "type": "string",
- "enum": ["git"]
- },
- "name": {
- "type": "string"
- },
- "icon": {
- "type": "object",
- "properties": {
- "url": {
- "type": "string"
- },
- "override": {
- "type": "string"
- },
- "color": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "commands": {
- "type": "object",
- "properties": {
- "start": {
- "type": "string",
- "description": "Startup script to run when creating a new workspace (worktree)"
- }
- },
- "additionalProperties": false
- },
- "time": {
- "type": "object",
- "properties": {
- "created": {
- "type": "integer",
- "minimum": 0
- },
- "updated": {
- "type": "integer",
- "minimum": 0
- },
- "initialized": {
- "type": "integer",
- "minimum": 0
- }
- },
- "required": ["created", "updated"],
- "additionalProperties": false
- },
- "sandboxes": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "required": ["id", "worktree", "time", "sandboxes"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventLspUpdated": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["lsp.updated"]
+ "enum": ["reference.updated"]
},
"properties": {
"type": "object",
@@ -37107,7 +38922,7 @@
"required": ["id", "type", "properties"],
"additionalProperties": false
},
- "EventFileEdited": {
+ "EventIntegrationUpdated": {
"type": "object",
"properties": {
"id": {
@@ -37115,347 +38930,11 @@
},
"type": {
"type": "string",
- "enum": ["file.edited"]
+ "enum": ["integration.updated"]
},
"properties": {
"type": "object",
- "properties": {
- "file": {
- "type": "string"
- }
- },
- "required": ["file"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventFileWatcherUpdated": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["file.watcher.updated"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "file": {
- "type": "string"
- },
- "event": {
- "type": "string",
- "enum": ["add", "change", "unlink"]
- }
- },
- "required": ["file", "event"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventVcsBranchUpdated": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["vcs.branch.updated"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "branch": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventWorkspaceReady": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["workspace.ready"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "required": ["name"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventWorkspaceFailed": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["workspace.failed"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string"
- }
- },
- "required": ["message"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventWorkspaceStatus": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["workspace.status"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "workspaceID": {
- "type": "string",
- "pattern": "^wrk"
- },
- "status": {
- "type": "string",
- "enum": ["connected", "connecting", "disconnected", "error"]
- }
- },
- "required": ["workspaceID", "status"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventWorktreeReady": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["worktree.ready"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "branch": {
- "type": "string"
- }
- },
- "required": ["name"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventWorktreeFailed": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["worktree.failed"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string"
- }
- },
- "required": ["message"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "AuthOAuthCredential": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["oauth"]
- },
- "refresh": {
- "type": "string"
- },
- "access": {
- "type": "string"
- },
- "expires": {
- "type": "integer",
- "minimum": 0
- },
- "accountId": {
- "type": "string"
- }
- },
- "required": ["type", "refresh", "access", "expires"],
- "additionalProperties": false
- },
- "AuthApiKeyCredential": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["api"]
- },
- "key": {
- "type": "string"
- },
- "metadata": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- }
- }
- },
- "required": ["type", "key"],
- "additionalProperties": false
- },
- "AuthCredential": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/AuthOAuthCredential"
- },
- {
- "$ref": "#/components/schemas/AuthApiKeyCredential"
- }
- ]
- },
- "AuthInfo": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "serviceID": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "credential": {
- "$ref": "#/components/schemas/AuthCredential"
- }
- },
- "required": ["id", "serviceID", "description", "credential"],
- "additionalProperties": false
- },
- "EventAccountAdded": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["account.added"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "account": {
- "$ref": "#/components/schemas/AuthInfo"
- }
- },
- "required": ["account"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventAccountRemoved": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["account.removed"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "account": {
- "$ref": "#/components/schemas/AuthInfo"
- }
- },
- "required": ["account"],
- "additionalProperties": false
- }
- },
- "required": ["id", "type", "properties"],
- "additionalProperties": false
- },
- "EventAccountSwitched": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": ["account.switched"]
- },
- "properties": {
- "type": "object",
- "properties": {
- "serviceID": {
- "type": "string"
- },
- "from": {
- "type": "string"
- },
- "to": {
- "type": "string"
- }
- },
- "required": ["serviceID"],
- "additionalProperties": false
+ "properties": {}
}
},
"required": ["id", "type", "properties"],
@@ -37564,6 +39043,82 @@
"required": ["id", "type", "properties"],
"additionalProperties": false
},
+ "EventProjectDirectoriesUpdated": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["project.directories.updated"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "projectID": {
+ "type": "string"
+ }
+ },
+ "required": ["projectID"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventFileEdited": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["file.edited"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ }
+ },
+ "required": ["file"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventFileWatcherUpdated": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["file.watcher.updated"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "event": {
+ "type": "string",
+ "enum": ["add", "change", "unlink"]
+ }
+ },
+ "required": ["file", "event"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
"EventPtyCreated": {
"type": "object",
"properties": {
@@ -37831,6 +39386,403 @@
"required": ["id", "type", "properties"],
"additionalProperties": false
},
+ "EventTodoUpdated": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["todo.updated"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses"
+ },
+ "todos": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Todo"
+ }
+ }
+ },
+ "required": ["sessionID", "todos"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventSessionStatus": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["session.status"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses"
+ },
+ "status": {
+ "$ref": "#/components/schemas/SessionStatus"
+ }
+ },
+ "required": ["sessionID", "status"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventSessionIdle": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["session.idle"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses"
+ }
+ },
+ "required": ["sessionID"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventSessionCompacted": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["session.compacted"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses"
+ }
+ },
+ "required": ["sessionID"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventCommandExecuted": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["command.executed"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg"
+ }
+ },
+ "required": ["name", "sessionID", "arguments", "messageID"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventProjectUpdated": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["project.updated"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "worktree": {
+ "type": "string"
+ },
+ "vcs": {
+ "type": "string",
+ "enum": ["git"]
+ },
+ "name": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "override": {
+ "type": "string"
+ },
+ "color": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "commands": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "string",
+ "description": "Startup script to run when creating a new workspace (worktree)"
+ }
+ },
+ "additionalProperties": false
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "updated": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "initialized": {
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": ["created", "updated"],
+ "additionalProperties": false
+ },
+ "sandboxes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["id", "worktree", "time", "sandboxes"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventLspUpdated": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["lsp.updated"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventVcsBranchUpdated": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["vcs.branch.updated"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "branch": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventWorkspaceReady": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["workspace.ready"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventWorkspaceFailed": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["workspace.failed"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["message"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventWorkspaceStatus": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["workspace.status"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "workspaceID": {
+ "type": "string",
+ "pattern": "^wrk"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["connected", "connecting", "disconnected", "error"]
+ }
+ },
+ "required": ["workspaceID", "status"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventWorktreeReady": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["worktree.ready"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "branch": {
+ "type": "string"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
+ "EventWorktreeFailed": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["worktree.failed"]
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["message"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["id", "type", "properties"],
+ "additionalProperties": false
+ },
"SyncEventSessionCreated": {
"type": "object",
"properties": {
@@ -39589,6 +41541,12 @@
]
}
},
+ "outputPaths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"result": {},
"provider": {
"type": "object",
@@ -39817,59 +41775,6 @@
"required": ["type", "id", "syncEvent"],
"additionalProperties": false
},
- "SyncEventSessionNextCompactionDelta": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["sync"]
- },
- "id": {
- "type": "string",
- "pattern": "^evt_"
- },
- "syncEvent": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["session.next.compaction.delta.1"]
- },
- "id": {
- "type": "string",
- "pattern": "^evt_"
- },
- "seq": {
- "type": "number"
- },
- "aggregateID": {
- "type": "string"
- },
- "data": {
- "type": "object",
- "properties": {
- "timestamp": {
- "type": "number"
- },
- "sessionID": {
- "type": "string",
- "pattern": "^ses"
- },
- "text": {
- "type": "string"
- }
- },
- "required": ["timestamp", "sessionID", "text"],
- "additionalProperties": false
- }
- },
- "required": ["type", "id", "seq", "aggregateID", "data"],
- "additionalProperties": false
- }
- },
- "required": ["type", "id", "syncEvent"],
- "additionalProperties": false
- },
"SyncEventSessionNextCompactionEnded": {
"type": "object",
"properties": {
@@ -39908,9 +41813,20 @@
"type": "string",
"pattern": "^ses"
},
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg_"
+ },
+ "reason": {
+ "type": "string",
+ "enum": ["auto", "manual"]
+ },
"text": {
"type": "string"
},
+ "recent": {
+ "type": "string"
+ },
"include": {
"type": "string"
}
@@ -39926,6 +41842,41 @@
"required": ["type", "id", "syncEvent"],
"additionalProperties": false
},
+ "ConfigV2ReferenceGit": {
+ "type": "object",
+ "properties": {
+ "repository": {
+ "type": "string"
+ },
+ "branch": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "hidden": {
+ "type": "boolean"
+ }
+ },
+ "required": ["repository"],
+ "additionalProperties": false
+ },
+ "ConfigV2ReferenceLocal": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "hidden": {
+ "type": "boolean"
+ }
+ },
+ "required": ["path"],
+ "additionalProperties": false
+ },
"PolicyEffect": {
"type": "string",
"enum": ["allow", "deny"]
@@ -39950,19 +41901,19 @@
"ProjectDirectories": {
"type": "array",
"items": {
- "type": "string"
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "strategy": {
+ "type": "string"
+ }
+ },
+ "required": ["directory"],
+ "additionalProperties": false
}
},
- "ProjectCopyCopy": {
- "type": "object",
- "properties": {
- "directory": {
- "type": "string"
- }
- },
- "required": ["directory"],
- "additionalProperties": false
- },
"LocationInfo": {
"type": "object",
"properties": {
@@ -40327,12 +42278,6 @@
"$ref": "#/components/schemas/PromptAgentAttachment"
}
},
- "references": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PromptReferenceAttachment"
- }
- },
"type": {
"type": "string",
"enum": ["user"]
@@ -40560,6 +42505,12 @@
]
}
},
+ "outputPaths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"structured": {
"type": "object"
},
@@ -40806,7 +42757,7 @@
"summary": {
"type": "string"
},
- "include": {
+ "recent": {
"type": "string"
},
"id": {
@@ -40827,7 +42778,7 @@
"additionalProperties": false
}
},
- "required": ["type", "reason", "summary", "id", "time"],
+ "required": ["type", "reason", "summary", "recent", "id", "time"],
"additionalProperties": false
},
"SessionMessage": {
@@ -40892,13 +42843,13 @@
"properties": {
"via": {
"type": "string",
- "enum": ["account"]
+ "enum": ["credential"]
},
- "service": {
+ "credentialID": {
"type": "string"
}
},
- "required": ["via", "service"],
+ "required": ["via", "credentialID"],
"additionalProperties": false
},
{
@@ -40984,6 +42935,295 @@
"required": ["id", "name", "enabled", "env", "api", "request"],
"additionalProperties": false
},
+ "IntegrationWhen": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "op": {
+ "type": "string",
+ "enum": ["eq", "neq"]
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "required": ["key", "op", "value"],
+ "additionalProperties": false
+ },
+ "IntegrationTextPrompt": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["text"]
+ },
+ "key": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "placeholder": {
+ "type": "string"
+ },
+ "when": {
+ "$ref": "#/components/schemas/IntegrationWhen"
+ }
+ },
+ "required": ["type", "key", "message"],
+ "additionalProperties": false
+ },
+ "IntegrationSelectPrompt": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["select"]
+ },
+ "key": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "options": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ },
+ "hint": {
+ "type": "string"
+ }
+ },
+ "required": ["label", "value"],
+ "additionalProperties": false
+ }
+ },
+ "when": {
+ "$ref": "#/components/schemas/IntegrationWhen"
+ }
+ },
+ "required": ["type", "key", "message", "options"],
+ "additionalProperties": false
+ },
+ "IntegrationOAuthMethod": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["oauth"]
+ },
+ "label": {
+ "type": "string"
+ },
+ "prompts": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/IntegrationTextPrompt"
+ },
+ {
+ "$ref": "#/components/schemas/IntegrationSelectPrompt"
+ }
+ ]
+ }
+ }
+ },
+ "required": ["id", "type", "label"],
+ "additionalProperties": false
+ },
+ "IntegrationKeyMethod": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["key"]
+ },
+ "label": {
+ "type": "string"
+ }
+ },
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ "IntegrationEnvMethod": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["env"]
+ },
+ "names": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["type", "names"],
+ "additionalProperties": false
+ },
+ "ConnectionCredentialInfo": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["credential"]
+ },
+ "id": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ }
+ },
+ "required": ["type", "id", "label"],
+ "additionalProperties": false
+ },
+ "ConnectionEnvInfo": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["env"]
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": ["type", "name"],
+ "additionalProperties": false
+ },
+ "ConnectionInfo": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ConnectionCredentialInfo"
+ },
+ {
+ "$ref": "#/components/schemas/ConnectionEnvInfo"
+ }
+ ]
+ },
+ "IntegrationInfo": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "methods": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/IntegrationOAuthMethod"
+ },
+ {
+ "$ref": "#/components/schemas/IntegrationKeyMethod"
+ },
+ {
+ "$ref": "#/components/schemas/IntegrationEnvMethod"
+ }
+ ]
+ }
+ },
+ "connections": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ConnectionInfo"
+ }
+ }
+ },
+ "required": ["id", "name", "methods", "connections"],
+ "additionalProperties": false
+ },
+ "IntegrationAttempt": {
+ "type": "object",
+ "properties": {
+ "attemptID": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "instructions": {
+ "type": "string"
+ },
+ "mode": {
+ "type": "string",
+ "enum": ["auto", "code"]
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ },
+ "expires": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity", "-Infinity", "NaN"]
+ }
+ ]
+ }
+ },
+ "required": ["created", "expires"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["attemptID", "url", "instructions", "mode", "time"],
+ "additionalProperties": false
+ },
"PermissionV2Request": {
"type": "object",
"properties": {
@@ -41039,53 +43279,12 @@
"required": ["id", "projectID", "action", "resource"],
"additionalProperties": false
},
- "FileSystemTextContent": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["text"]
- },
- "content": {
- "type": "string"
- },
- "mime": {
- "type": "string"
- }
- },
- "required": ["type", "content", "mime"],
- "additionalProperties": false
- },
- "FileSystemBinaryContent": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["binary"]
- },
- "content": {
- "type": "string"
- },
- "encoding": {
- "type": "string",
- "enum": ["base64"]
- },
- "mime": {
- "type": "string"
- }
- },
- "required": ["type", "content", "encoding", "mime"],
- "additionalProperties": false
- },
"FileSystemEntry": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
- "uri": {
- "type": "string"
- },
"type": {
"type": "string",
"enum": ["file", "directory"]
@@ -41094,7 +43293,7 @@
"type": "string"
}
},
- "required": ["path", "uri", "type", "mime"],
+ "required": ["path", "type", "mime"],
"additionalProperties": false
},
"CommandV2Info": {
@@ -41196,6 +43395,88 @@
"required": ["answers"],
"additionalProperties": false
},
+ "ReferenceLocalSource": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["local"]
+ },
+ "path": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "hidden": {
+ "type": "boolean"
+ }
+ },
+ "required": ["type", "path"],
+ "additionalProperties": false
+ },
+ "ReferenceGitSource": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["git"]
+ },
+ "repository": {
+ "type": "string"
+ },
+ "branch": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "hidden": {
+ "type": "boolean"
+ }
+ },
+ "required": ["type", "repository"],
+ "additionalProperties": false
+ },
+ "ReferenceInfo": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "hidden": {
+ "type": "boolean"
+ },
+ "source": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceLocalSource"
+ },
+ {
+ "$ref": "#/components/schemas/ReferenceGitSource"
+ }
+ ]
+ }
+ },
+ "required": ["name", "path", "source"],
+ "additionalProperties": false
+ },
+ "ProjectCopyCopy": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": ["directory"],
+ "additionalProperties": false
+ },
"EventMemoryStatus1": {
"type": "object",
"properties": {
@@ -42189,6 +44470,154 @@
"body": {
"type": "object"
},
+ "generation": {
+ "type": "object",
+ "properties": {
+ "maxTokens": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "temperature": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "topP": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "topK": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "frequencyPenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "presencePenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "seed": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "stop": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "options": {
+ "type": "object"
+ },
"variant": {
"type": "string"
}
@@ -42212,6 +44641,154 @@
},
"body": {
"type": "object"
+ },
+ "generation": {
+ "type": "object",
+ "properties": {
+ "maxTokens": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "temperature": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "topP": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "topK": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "frequencyPenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "presencePenalty": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "seed": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string",
+ "enum": ["NaN"]
+ },
+ {
+ "type": "string",
+ "enum": ["Infinity"]
+ },
+ {
+ "type": "string",
+ "enum": ["-Infinity"]
+ }
+ ]
+ },
+ "stop": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "options": {
+ "type": "object"
}
},
"required": ["id", "headers", "body"],
@@ -42431,7 +45008,7 @@
},
{
"name": "projectCopy",
- "description": "Project copy management routes."
+ "description": "Project copy naming routes."
},
{
"name": "pty",
@@ -42542,64 +45119,72 @@
"description": "Kilo memory routes."
},
{
- "name": "kilo experimental HttpApi",
+ "name": "Kilo HttpApi",
"description": "Experimental HttpApi surface for selected instance routes."
},
{
- "name": "kilo experimental HttpApi",
+ "name": "Kilo HttpApi",
"description": "Experimental HttpApi surface for selected instance routes."
},
{
- "name": "v2",
- "description": "Experimental v2 routes."
+ "name": "Kilo HttpApi",
+ "description": "Experimental HttpApi surface for selected instance routes."
},
{
- "name": "v2 messages",
- "description": "Experimental v2 message routes."
+ "name": "sessions",
+ "description": "Experimental session routes."
},
{
- "name": "v2 models",
- "description": "Experimental v2 model routes."
+ "name": "messages",
+ "description": "Experimental message routes."
},
{
- "name": "v2 providers",
- "description": "Experimental v2 provider routes."
+ "name": "models",
+ "description": "Experimental model routes."
},
{
- "name": "v2 permissions",
- "description": "Experimental v2 permission routes."
+ "name": "providers",
+ "description": "Experimental provider routes."
},
{
- "name": "v2 session permissions",
- "description": "Experimental v2 session permission routes."
+ "name": "integrations",
+ "description": "Integration discovery and authentication routes."
},
{
- "name": "v2 saved permissions",
- "description": "Experimental v2 saved permission routes."
+ "name": "Kilo HttpApi",
+ "description": "Experimental HttpApi surface for selected instance routes."
},
{
- "name": "v2 filesystem",
- "description": "Experimental v2 location-scoped filesystem routes."
+ "name": "permissions",
+ "description": "Experimental permission routes."
},
{
- "name": "v2 commands",
- "description": "Experimental v2 command routes."
+ "name": "filesystem",
+ "description": "Experimental location-scoped filesystem routes."
},
{
- "name": "v2 skills",
- "description": "Experimental v2 skill routes."
+ "name": "commands",
+ "description": "Experimental command routes."
},
{
- "name": "v2 events",
- "description": "Experimental v2 event stream route."
+ "name": "skills",
+ "description": "Experimental skill routes."
},
{
- "name": "v2 questions",
- "description": "Experimental v2 question routes."
+ "name": "events",
+ "description": "Experimental event stream route."
},
{
- "name": "v2 session questions",
- "description": "Experimental v2 session question routes."
+ "name": "session questions",
+ "description": "Experimental session question routes."
+ },
+ {
+ "name": "reference",
+ "description": "Location-scoped project references."
+ },
+ {
+ "name": "projectCopy",
+ "description": "Project copy management routes."
},
{
"name": "pty",
From b71a9c0c234cb2fbb55712e4e995e261dde9fab5 Mon Sep 17 00:00:00 2001
From: Josh Lambert
Date: Mon, 27 Jul 2026 22:10:56 -0400
Subject: [PATCH 07/29] fix(vscode): include web search in config exports
---
.../webview-ui/src/components/settings/settings-io.ts | 1 +
1 file changed, 1 insertion(+)
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 d4b1949d2a..be43b46284 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",
From b0a546049e7fcb212c8d1db344a48531ce65bed9 Mon Sep 17 00:00:00 2001
From: marius-kilocode
Date: Tue, 28 Jul 2026 13:42:15 +0200
Subject: [PATCH 08/29] refactor(cli): remove provably unused kilocode code
Delete code with zero references anywhere in the monorepo (including
tests, docs, scripts, and dynamic import or string-based usage):
- background-process/windows-job.ts: entire Windows Job Object FFI
module left unreferenced after the background process runner refactor
- session/prompt.ts: createShellDecoders helper, CODE_SWITCH_TEXT alias,
and the now-unused StringDecoder import
- text-stream.ts: openUtf8 wrapper
- cli/cmd/tui/component/prompt/vim.ts: enterInsert helper
- config/config.ts: KILO_CONFIG_FILES, AGENT_PATTERNS, COMMAND_PATTERNS
- remote-attachments.ts: TEXT_PLAIN constant
- plan-followup.ts: PLAN_PREFIX constant
- server/httpapi/groups/background-process.ts: SessionParams schema
- server/httpapi/groups/session-import.ts: SessionImportPayloads map
- cloud/contracts.ts: RepositoryInput type alias
---
.../background-process/windows-job.ts | 88 -------------------
.../cli/cmd/tui/component/prompt/vim.ts | 5 --
.../opencode/src/kilocode/cloud/contracts.ts | 1 -
.../opencode/src/kilocode/config/config.ts | 14 ---
.../opencode/src/kilocode/plan-followup.ts | 1 -
.../src/kilocode/remote-attachments.ts | 1 -
.../httpapi/groups/background-process.ts | 1 -
.../server/httpapi/groups/session-import.ts | 7 --
.../opencode/src/kilocode/session/prompt.ts | 26 ------
packages/opencode/src/kilocode/text-stream.ts | 5 --
10 files changed, 149 deletions(-)
delete mode 100644 packages/opencode/src/kilocode/background-process/windows-job.ts
diff --git a/packages/opencode/src/kilocode/background-process/windows-job.ts b/packages/opencode/src/kilocode/background-process/windows-job.ts
deleted file mode 100644
index 85d05b38e6..0000000000
--- a/packages/opencode/src/kilocode/background-process/windows-job.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { dlopen, ptr } from "bun:ffi"
-
-export namespace WindowsJob {
- const LIMITS = 9
- const MEMBERS = 3
- const KILL_ON_CLOSE = 0x00002000
- const PROCESS_TERMINATE = 0x0001
- const PROCESS_SET_QUOTA = 0x0100
- const MORE_DATA = 234
-
- function kernel() {
- return dlopen("kernel32.dll", {
- CreateJobObjectW: { args: ["ptr", "ptr"], returns: "u64" },
- SetInformationJobObject: { args: ["u64", "u32", "ptr", "u32"], returns: "i32" },
- OpenProcess: { args: ["u32", "i32", "u32"], returns: "u64" },
- AssignProcessToJobObject: { args: ["u64", "u64"], returns: "i32" },
- QueryInformationJobObject: { args: ["u64", "u32", "ptr", "u32", "ptr"], returns: "i32" },
- TerminateJobObject: { args: ["u64", "u32"], returns: "i32" },
- CloseHandle: { args: ["u64"], returns: "i32" },
- GetLastError: { args: [], returns: "u32" },
- })
- }
-
- export function create() {
- const lib = (() => {
- try {
- return kernel()
- } catch {
- return undefined
- }
- })()
- if (!lib) return
- const handle = lib.symbols.CreateJobObjectW(null, null)
- if (handle === 0n) {
- const code = lib.symbols.GetLastError()
- lib.close()
- throw new Error(`CreateJobObjectW failed with Windows error ${code}`)
- }
- const limits = new Uint8Array(144)
- new DataView(limits.buffer).setUint32(16, KILL_ON_CLOSE, true)
- if (lib.symbols.SetInformationJobObject(handle, LIMITS, ptr(limits), limits.byteLength) === 0) {
- const code = lib.symbols.GetLastError()
- lib.symbols.CloseHandle(handle)
- lib.close()
- throw new Error(`SetInformationJobObject failed with Windows error ${code}`)
- }
- let closed = false
- return {
- assign(pid: number) {
- const proc = lib.symbols.OpenProcess(PROCESS_TERMINATE | PROCESS_SET_QUOTA, 0, pid)
- if (proc === 0n) throw new Error(`OpenProcess failed with Windows error ${lib.symbols.GetLastError()}`)
- const assigned = lib.symbols.AssignProcessToJobObject(handle, proc)
- const code = assigned === 0 ? lib.symbols.GetLastError() : 0
- lib.symbols.CloseHandle(proc)
- if (assigned === 0) throw new Error(`AssignProcessToJobObject failed with Windows error ${code}`)
- },
- members() {
- let size = 4 * 1024
- while (true) {
- const info = new Uint8Array(size)
- const ok = lib.symbols.QueryInformationJobObject(handle, MEMBERS, ptr(info), info.byteLength, null)
- const code = ok === 0 ? lib.symbols.GetLastError() : 0
- const view = new DataView(info.buffer)
- const assigned = view.getUint32(0, true)
- const count = view.getUint32(4, true)
- if (ok !== 0 && count === assigned) {
- return Array.from({ length: count }, (_, index) => Number(view.getBigUint64(8 + index * 8, true)))
- }
- if (ok === 0 && code !== MORE_DATA) {
- throw new Error(`QueryInformationJobObject failed with Windows error ${code}`)
- }
- size = Math.max(size * 2, 8 + assigned * 8)
- }
- },
- terminate() {
- if (lib.symbols.TerminateJobObject(handle, 1) === 0) {
- throw new Error(`TerminateJobObject failed with Windows error ${lib.symbols.GetLastError()}`)
- }
- },
- close() {
- if (closed) return
- closed = true
- lib.symbols.CloseHandle(handle)
- lib.close()
- },
- }
- }
-}
diff --git a/packages/opencode/src/kilocode/cli/cmd/tui/component/prompt/vim.ts b/packages/opencode/src/kilocode/cli/cmd/tui/component/prompt/vim.ts
index 2b91606c86..020d0be379 100644
--- a/packages/opencode/src/kilocode/cli/cmd/tui/component/prompt/vim.ts
+++ b/packages/opencode/src/kilocode/cli/cmd/tui/component/prompt/vim.ts
@@ -877,8 +877,3 @@ export function handleVisualKey(doc: VimDoc, state: VimState, input: VimKey): Vi
state.countDigits = ""
return { handled: true }
}
-
-export function enterInsert(state: VimState) {
- state.mode = "insert"
- resetPending(state)
-}
diff --git a/packages/opencode/src/kilocode/cloud/contracts.ts b/packages/opencode/src/kilocode/cloud/contracts.ts
index a4716e547e..a78b846b8c 100644
--- a/packages/opencode/src/kilocode/cloud/contracts.ts
+++ b/packages/opencode/src/kilocode/cloud/contracts.ts
@@ -163,7 +163,6 @@ export const GetMessageResultOutputSchema = z
}
})
-export type RepositoryInput = z.infer
export type AgentStartRequest = z.infer
export type AgentSendRequest = z.infer
export type GetMessageResultInput = z.infer
diff --git a/packages/opencode/src/kilocode/config/config.ts b/packages/opencode/src/kilocode/config/config.ts
index a33445494b..608386d4fa 100644
--- a/packages/opencode/src/kilocode/config/config.ts
+++ b/packages/opencode/src/kilocode/config/config.ts
@@ -37,26 +37,12 @@ export namespace KilocodeConfig {
// ── Config file constants ────────────────────────────────────────────
- /** Kilo-specific config file names (highest-to-lowest precedence within kilo). */
- export const KILO_CONFIG_FILES = ["kilo.jsonc", "kilo.json"] as const
-
/** All config file names in precedence order (kilo + opencode). */
export const ALL_CONFIG_FILES = ["kilo.jsonc", "kilo.json", "opencode.jsonc", "opencode.json"] as const
/** Config directory suffixes in update-target preference order. */
export const KILO_DIR_SUFFIXES = [".kilo", ".kilocode"] as const
- /** Path patterns for resolving kilo agent names from file paths. */
- export const AGENT_PATTERNS = ["/.kilo/agent/", "/.kilo/agents/", "/.kilocode/agent/", "/.kilocode/agents/"] as const
-
- /** Path patterns for resolving kilo command names from file paths. */
- export const COMMAND_PATTERNS = [
- "/.kilo/command/",
- "/.kilo/commands/",
- "/.kilocode/command/",
- "/.kilocode/commands/",
- ] as const
-
/**
* Choose the project config file that Config.update should patch.
*
diff --git a/packages/opencode/src/kilocode/plan-followup.ts b/packages/opencode/src/kilocode/plan-followup.ts
index 01de704a54..a0c726f94c 100644
--- a/packages/opencode/src/kilocode/plan-followup.ts
+++ b/packages/opencode/src/kilocode/plan-followup.ts
@@ -157,7 +157,6 @@ export async function generateHandover(input: {
export namespace PlanFollowup {
const log = Log.create({ service: "plan.followup" })
- export const PLAN_PREFIX = "Implement the following plan:"
export const ANSWER_NEW_SESSION = "Start new session"
export const ANSWER_CONTINUE = "Continue here"
export const ANSWER_KEEP_REFINING = "Keep refining"
diff --git a/packages/opencode/src/kilocode/remote-attachments.ts b/packages/opencode/src/kilocode/remote-attachments.ts
index 9008065cc9..b329dbb47d 100644
--- a/packages/opencode/src/kilocode/remote-attachments.ts
+++ b/packages/opencode/src/kilocode/remote-attachments.ts
@@ -66,7 +66,6 @@ export namespace RemoteAttachments {
sql: "text/plain",
}
export const BINARY_MIME = "application/octet-stream"
- export const TEXT_PLAIN = "text/plain"
// Hard cap on attachment bytes (5 MB + 1 byte so the helper aborts
// strictly when the body exceeds the agreed ceiling).
export const MAX_BYTES = 5 * 1024 * 1024 + 1
diff --git a/packages/opencode/src/kilocode/server/httpapi/groups/background-process.ts b/packages/opencode/src/kilocode/server/httpapi/groups/background-process.ts
index e5b0dbc2dc..208cd1f021 100644
--- a/packages/opencode/src/kilocode/server/httpapi/groups/background-process.ts
+++ b/packages/opencode/src/kilocode/server/httpapi/groups/background-process.ts
@@ -22,7 +22,6 @@ export const BackgroundProcessPaths = {
} as const
export const Params = Schema.Struct({ processID: BackgroundProcess.ID })
-export const SessionParams = Schema.Struct({ sessionID: SessionID })
export const BackgroundProcessApi = HttpApi.make("background-process")
.add(
diff --git a/packages/opencode/src/kilocode/server/httpapi/groups/session-import.ts b/packages/opencode/src/kilocode/server/httpapi/groups/session-import.ts
index 596ca4f57d..9aca9d4581 100644
--- a/packages/opencode/src/kilocode/server/httpapi/groups/session-import.ts
+++ b/packages/opencode/src/kilocode/server/httpapi/groups/session-import.ts
@@ -219,13 +219,6 @@ export const SessionImportPaths = {
part: `${root}/part`,
} as const
-export const SessionImportPayloads = {
- Project: ProjectSchema,
- Session: SessionSchema,
- Message: MessageSchema,
- Part: PartSchema,
-} as const
-
export const SessionImportApi = HttpApi.make("session-import")
.add(
HttpApiGroup.make("session-import")
diff --git a/packages/opencode/src/kilocode/session/prompt.ts b/packages/opencode/src/kilocode/session/prompt.ts
index a1fa29b806..ee05f45358 100644
--- a/packages/opencode/src/kilocode/session/prompt.ts
+++ b/packages/opencode/src/kilocode/session/prompt.ts
@@ -1,7 +1,6 @@
// kilocode_change - new file
import path from "path"
import fs from "fs/promises"
-import { StringDecoder } from "string_decoder"
import { Cause, Effect, Exit, Fiber, Scope } from "effect"
import { SessionID, PartID } from "@/session/schema"
import { MessageV2 } from "@/session/message-v2"
@@ -377,25 +376,6 @@ export namespace KiloSessionPrompt {
}
}
- /**
- * Creates StringDecoder-based helpers for shell stdout/stderr that correctly
- * handle multi-byte UTF-8 characters split across chunks.
- */
- export function createShellDecoders() {
- const stdout = new StringDecoder("utf8")
- const stderr = new StringDecoder("utf8")
- return {
- /** Decode a chunk from the given stream. */
- write(stream: "stdout" | "stderr", chunk: Buffer) {
- return stream === "stdout" ? stdout.write(chunk) : stderr.write(chunk)
- },
- /** Flush any trailing buffered bytes from both decoders. */
- flush() {
- return stdout.end() + stderr.end()
- },
- }
- }
-
/**
* Ensures the plan file directory exists. Pre-checks with `Filesystem.isDir`
* because `fs.mkdir(recursive: true)` still throws `EEXIST` on Windows
@@ -455,12 +435,6 @@ export namespace KiloSessionPrompt {
add(`\n${body}\n`)
}
- /**
- * Returns the CODE_SWITCH prompt text (plan-to-code transition).
- * Used when switching from plan agent to code agent.
- */
- export const CODE_SWITCH_TEXT = CODE_SWITCH
-
/**
* Determines the close reason for a session turn.
* Checks for an explicit reason first (e.g. set on error during runLoop),
diff --git a/packages/opencode/src/kilocode/text-stream.ts b/packages/opencode/src/kilocode/text-stream.ts
index 82f2f6cd7c..bfaabd164e 100644
--- a/packages/opencode/src/kilocode/text-stream.ts
+++ b/packages/opencode/src/kilocode/text-stream.ts
@@ -62,11 +62,6 @@ export function abortable(stream: Readable, signal?: AbortSignal) {
return signal ? addAbortSignal(signal, stream) : stream
}
-/** UTF-8 text stream backed by an already-open file. */
-export function openUtf8(open: () => Readable, signal?: AbortSignal): Readable {
- return utf8(open, signal).stream
-}
-
export function safeSlice(text: string, end: number) {
const sliced = text.slice(0, end)
const last = sliced.charCodeAt(sliced.length - 1)
From eeb8c40af8faf262100b1f1b7a982e2983eaa8f9 Mon Sep 17 00:00:00 2001
From: emilieschario <14057155+emilieschario@users.noreply.github.com>
Date: Wed, 29 Jul 2026 16:00:02 +0000
Subject: [PATCH 09/29] docs(kilo-docs): add CLI usage section for Cloud Agents
Add documentation on how to start tasks from the CLI using the `kilo cloud` command and clarify how skills are handled in Cloud Agent sessions.
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
---
.../pages/code-with-ai/platforms/cloud-agent.md | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md b/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
index 5a9fe22b84..294b8bdd02 100644
--- a/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
+++ b/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
@@ -36,6 +36,16 @@ Before using Cloud Agents:
Your work is always pushed to GitHub, ensuring nothing is lost.
+## Starting Tasks from the CLI
+
+Use the `kilo cloud` command to run Cloud Agent tasks without opening the browser:
+
+```bash
+kilo cloud start --prompt "Fix the flaky login test" --repo Kilo-Org/kilocode
+```
+
+`kilo cloud` can start tasks, send follow-up prompts, and check task status and results. Repository, branch, model, mode, and organization are inferred from your local checkout and CLI defaults unless you pass the matching flags. Add `--stream` to `kilo cloud start` to print task events as JSONL until the task completes. See the [CLI reference](/docs/code-with-ai/platforms/cli-reference#kilo-cloud) for all commands and options.
+
## How Cloud Agents Work
- Each user receives an **isolated Linux container** with common dev tools preinstalled (Node.js, git, gh CLI, glab CLI, etc.).
@@ -98,6 +108,8 @@ You can customize each Cloud Agent session by also defining env vars and startup
Cloud Agents support project-level [skills](/docs/code-with-ai/platforms/cli#skills) stored in your repository. When your repo is cloned, any skills in `.kilocode/skills/` are automatically available.
+- Skills (skill folders uploaded as `.zip` archives, with up to 40 companion files per skill)
+
{% callout type="note" %}
Global skills (`~/.kilocode/skills/`) are not available in Cloud Agents since there is no persistent user home directory.
{% /callout %}
From 0912f94cb164cd117185e8fdbbceda9915b1365c Mon Sep 17 00:00:00 2001
From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com>
Date: Wed, 29 Jul 2026 16:31:59 +0000
Subject: [PATCH 10/29] docs(kilo-docs): rewrite skill archive bullet as prose
---
packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md b/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
index 294b8bdd02..40c573ce58 100644
--- a/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
+++ b/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
@@ -108,7 +108,7 @@ You can customize each Cloud Agent session by also defining env vars and startup
Cloud Agents support project-level [skills](/docs/code-with-ai/platforms/cli#skills) stored in your repository. When your repo is cloned, any skills in `.kilocode/skills/` are automatically available.
-- Skills (skill folders uploaded as `.zip` archives, with up to 40 companion files per skill)
+You can also upload skills as `.zip` archives through the Cloud UI. Each skill archive can include up to 40 companion files.
{% callout type="note" %}
Global skills (`~/.kilocode/skills/`) are not available in Cloud Agents since there is no persistent user home directory.
From cf9c9dc34979ba5c780aece9e0c6d562478638ff Mon Sep 17 00:00:00 2001
From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com>
Date: Wed, 29 Jul 2026 16:32:12 +0000
Subject: [PATCH 11/29] docs(kilo-docs): fold orphaned skills bullet into
paragraph
---
.../kilo-docs/pages/code-with-ai/platforms/cloud-agent.md | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md b/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
index 40c573ce58..bc21780063 100644
--- a/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
+++ b/packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
@@ -106,9 +106,7 @@ You can customize each Cloud Agent session by also defining env vars and startup
## Skills
-Cloud Agents support project-level [skills](/docs/code-with-ai/platforms/cli#skills) stored in your repository. When your repo is cloned, any skills in `.kilocode/skills/` are automatically available.
-
-You can also upload skills as `.zip` archives through the Cloud UI. Each skill archive can include up to 40 companion files.
+Cloud Agents support project-level [skills](/docs/code-with-ai/platforms/cli#skills) stored in your repository. When your repo is cloned, any skills in `.kilocode/skills/` are automatically available. Skill folders are uploaded as `.zip` archives, with up to 40 companion files per skill.
{% callout type="note" %}
Global skills (`~/.kilocode/skills/`) are not available in Cloud Agents since there is no persistent user home directory.
From 3a2309cff0987bf10066ea056346f2b94b8192dc Mon Sep 17 00:00:00 2001
From: Josh Lambert
Date: Wed, 29 Jul 2026 21:57:51 -0400
Subject: [PATCH 12/29] fix(vscode): clarify web search config scope
---
.../src/routes/config/ToolsRoute.tsx | 2 +-
.../src/components/settings/BrowserTab.tsx | 24 +++++++++++++++----
.../kilo-vscode/webview-ui/src/i18n/ar.ts | 5 ++--
.../kilo-vscode/webview-ui/src/i18n/br.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/bs.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/da.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/de.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/en.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/es.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/fa.ts | 7 +++++-
.../kilo-vscode/webview-ui/src/i18n/fr.ts | 5 ++--
.../kilo-vscode/webview-ui/src/i18n/it.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/ja.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/ko.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/nl.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/no.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/pl.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/ru.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/th.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/tr.ts | 5 ++--
.../kilo-vscode/webview-ui/src/i18n/uk.ts | 6 ++---
.../kilo-vscode/webview-ui/src/i18n/zh.ts | 4 ++--
.../kilo-vscode/webview-ui/src/i18n/zht.ts | 4 ++--
packages/sdk/openapi.json | 7 +++---
24 files changed, 69 insertions(+), 84 deletions(-)
diff --git a/packages/kilo-console/src/routes/config/ToolsRoute.tsx b/packages/kilo-console/src/routes/config/ToolsRoute.tsx
index 9dcb20b6e0..1dd1001e66 100644
--- a/packages/kilo-console/src/routes/config/ToolsRoute.tsx
+++ b/packages/kilo-console/src/routes/config/ToolsRoute.tsx
@@ -83,7 +83,7 @@ export function ToolsRoute() {
>
Enable for all providers
- Search requests connect directly to Exa or Parallel.
+ Search requests use Exa or Parallel.
{(reason) => {reason()}}
diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
index fabc7858b8..eee016f3f5 100644
--- a/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
+++ b/packages/kilo-vscode/webview-ui/src/components/settings/BrowserTab.tsx
@@ -1,4 +1,4 @@
-import { Component, createSignal, onCleanup, onMount } from "solid-js"
+import { Component, Show, createSignal, onCleanup, onMount } from "solid-js"
import { Switch } from "@kilocode/kilo-ui/switch"
import { Card } from "@kilocode/kilo-ui/card"
import { useVSCode } from "../../context/vscode"
@@ -26,7 +26,7 @@ const Header: Component<{ title: string }> = (props) => (
const BrowserTab: Component = () => {
const { postMessage, onMessage } = useVSCode()
const { t } = useLanguage()
- const { config, updateConfig } = useConfig()
+ const { globalConfig, projectConfig, updateGlobalConfig } = useConfig()
const [settings, setSettings] = createSignal({
enabled: false,
@@ -52,9 +52,11 @@ const BrowserTab: Component = () => {
}
const updateWebsearch = (checked: boolean) => {
- updateConfig({ web_search: checked })
+ updateGlobalConfig({ web_search: checked })
}
+ const overridden = () => projectConfig().web_search !== undefined
+
return (
{/* Info text */}
@@ -84,12 +86,24 @@ const BrowserTab: Component = () => {
t("settings.config.scope.global")}
+ last={!overridden()}
>
-
+
{t("settings.webTools.webSearch.title")}
+
+ t("settings.config.scope.local")}
+ last
+ >
+
+ {`${t("settings.webTools.webSearch.title")} (${t("settings.config.scope.local")})`}
+
+
+
diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts
index 3ac74a5dc5..3f5e3e6ce6 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts
@@ -650,12 +650,11 @@ export const dict = {
"settings.agentBehaviour.title": "سلوك الوكيل",
"settings.autoApprove.title": "الموافقة التلقائية",
"settings.webTools.title": "أدوات الويب",
- "settings.webTools.description": "اضبط البحث على الويب وأتمتة المتصفح. تتصل طلبات البحث مباشرةً بـ Exa أو Parallel.",
+ "settings.webTools.description": "اضبط البحث على الويب وأتمتة المتصفح.",
"settings.webTools.webSearch.enable": "تمكين لجميع المزوّدين",
"settings.webTools.browserAutomation": "أتمتة المتصفح",
"settings.webTools.webSearch.title": "البحث على الويب",
- "settings.webTools.webSearch.description":
- "اجعل البحث على الويب متاحًا لنماذج جميع المزوّدين. تتصل عمليات البحث مباشرةً بـ Exa أو Parallel.",
+ "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 31a10d9a3d..494dabab5c 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/br.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/br.ts
@@ -666,13 +666,11 @@ export const dict = {
"settings.agentBehaviour.title": "Comportamento do Agente",
"settings.autoApprove.title": "Aprovação Automática",
"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.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. As pesquisas se conectam diretamente ao Exa ou Parallel.",
+ "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 98bdd64db1..59af81ddce 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts
@@ -706,13 +706,11 @@ export const dict = {
"settings.agentBehaviour.title": "Ponašanje agenta",
"settings.autoApprove.title": "Automatsko odobravanje",
"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.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. Pretrage se povezuju direktno s Exa ili Parallel.",
+ "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 cf802a1902..c89da39cc8 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/da.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/da.ts
@@ -704,13 +704,11 @@ export const dict = {
"settings.agentBehaviour.title": "Agentadfærd",
"settings.autoApprove.title": "Automatisk godkendelse",
"settings.webTools.title": "Webværktøjer",
- "settings.webTools.description":
- "Konfigurer websøgning og browserautomatisering. Søgeanmodninger sendes direkte til Exa eller Parallel.",
+ "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. Søgninger sendes direkte til Exa eller Parallel.",
+ "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 118f5bf286..755de779b5 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/de.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/de.ts
@@ -717,13 +717,11 @@ export const dict = {
"settings.agentBehaviour.title": "Agentenverhalten",
"settings.autoApprove.title": "Automatisch genehmigen",
"settings.webTools.title": "Web-Tools",
- "settings.webTools.description":
- "Konfigurieren Sie Websuche und Browserautomatisierung. Suchanfragen werden direkt an Exa oder Parallel gesendet.",
+ "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. Suchanfragen werden direkt an Exa oder Parallel gesendet.",
+ "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 96ba232569..3f8a1b0186 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/en.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/en.ts
@@ -623,13 +623,11 @@ export const dict = {
"settings.agentBehaviour.title": "Agent Behaviour",
"settings.autoApprove.title": "Auto-Approve",
"settings.webTools.title": "Web Tools",
- "settings.webTools.description":
- "Configure web search and browser automation. Search requests connect directly to Exa or Parallel.",
+ "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. Searches connect directly to Exa or Parallel.",
+ "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 90edf60e2a..815e038ced 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/es.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/es.ts
@@ -711,13 +711,11 @@ export const dict = {
"settings.agentBehaviour.title": "Comportamiento del agente",
"settings.autoApprove.title": "Aprobación automática",
"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.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. Las búsquedas se conectan directamente a Exa o Parallel.",
+ "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 02a2bf9ab5..47e6bc815c 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 69a5692213..956fa4ba09 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts
@@ -717,13 +717,12 @@ export const dict = {
"settings.agentBehaviour.title": "Comportement de l'agent",
"settings.autoApprove.title": "Approbation automatique",
"settings.webTools.title": "Outils web",
- "settings.webTools.description":
- "Configurez la recherche web et l’automatisation du navigateur. Les requêtes de recherche se connectent directement à Exa ou Parallel.",
+ "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. Les recherches se connectent directement à Exa ou Parallel.",
+ "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 2720738fbd..e299fc0a05 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/it.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/it.ts
@@ -530,13 +530,11 @@ export const dict = {
"settings.agentBehaviour.title": "Comportamento agente",
"settings.autoApprove.title": "Approvazione automatica",
"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.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. Le ricerche si connettono direttamente a Exa o Parallel.",
+ "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 a911d6477c..668e6fe8ce 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts
@@ -698,13 +698,11 @@ export const dict = {
"settings.agentBehaviour.title": "エージェントの動作",
"settings.autoApprove.title": "自動承認",
"settings.webTools.title": "ウェブツール",
- "settings.webTools.description":
- "ウェブ検索とブラウザ自動化を設定します。検索リクエストは Exa または Parallel に直接接続されます。",
+ "settings.webTools.description": "ウェブ検索とブラウザ自動化を設定します。",
"settings.webTools.webSearch.enable": "すべてのプロバイダーで有効化",
"settings.webTools.browserAutomation": "ブラウザ自動化",
"settings.webTools.webSearch.title": "ウェブ検索",
- "settings.webTools.webSearch.description":
- "すべてのプロバイダーのモデルでウェブ検索を利用できるようにします。検索は Exa または Parallel に直接接続されます。",
+ "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 a19ee0ddd0..2aad8394d5 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts
@@ -658,13 +658,11 @@ export const dict = {
"settings.agentBehaviour.title": "에이전트 동작",
"settings.autoApprove.title": "자동 승인",
"settings.webTools.title": "웹 도구",
- "settings.webTools.description":
- "웹 검색 및 브라우저 자동화를 구성합니다. 검색 요청은 Exa 또는 Parallel에 직접 연결됩니다.",
+ "settings.webTools.description": "웹 검색 및 브라우저 자동화를 구성합니다.",
"settings.webTools.webSearch.enable": "모든 제공업체에 사용",
"settings.webTools.browserAutomation": "브라우저 자동화",
"settings.webTools.webSearch.title": "웹 검색",
- "settings.webTools.webSearch.description":
- "모든 제공업체의 모델에서 웹 검색을 사용할 수 있도록 합니다. 검색은 Exa 또는 Parallel에 직접 연결됩니다.",
+ "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 73af15b317..962fb6c92e 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts
@@ -659,13 +659,11 @@ export const dict = {
"settings.agentBehaviour.title": "Agent Gedrag",
"settings.autoApprove.title": "Automatisch Goedkeuren",
"settings.webTools.title": "Webtools",
- "settings.webTools.description":
- "Configureer zoeken op internet en browserautomatisering. Zoekopdrachten maken rechtstreeks verbinding met Exa of Parallel.",
+ "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. Zoekopdrachten maken rechtstreeks verbinding met Exa of Parallel.",
+ "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 f1e24a2656..e72c07b75c 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/no.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/no.ts
@@ -666,13 +666,11 @@ export const dict = {
"settings.agentBehaviour.title": "Agentoppførsel",
"settings.autoApprove.title": "Automatisk godkjenning",
"settings.webTools.title": "Nettverktøy",
- "settings.webTools.description":
- "Konfigurer nettsøk og nettleserautomatisering. Søk sendes direkte til Exa eller Parallel.",
+ "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. Søk sendes direkte til Exa eller Parallel.",
+ "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 32c2384b34..435a35e6a9 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts
@@ -662,13 +662,11 @@ export const dict = {
"settings.agentBehaviour.title": "Zachowanie agenta",
"settings.autoApprove.title": "Automatyczne zatwierdzanie",
"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.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. Wyszukiwania łączą się bezpośrednio z Exa lub Parallel.",
+ "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 737da75a12..824ada6f69 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts
@@ -703,13 +703,11 @@ export const dict = {
"settings.agentBehaviour.title": "Поведение агента",
"settings.autoApprove.title": "Автоодобрение",
"settings.webTools.title": "Веб-инструменты",
- "settings.webTools.description":
- "Настройте веб-поиск и автоматизацию браузера. Поисковые запросы отправляются напрямую в Exa или Parallel.",
+ "settings.webTools.description": "Настройте веб-поиск и автоматизацию браузера.",
"settings.webTools.webSearch.enable": "Включить для всех провайдеров",
"settings.webTools.browserAutomation": "Автоматизация браузера",
"settings.webTools.webSearch.title": "Веб-поиск",
- "settings.webTools.webSearch.description":
- "Сделайте веб-поиск доступным для моделей всех провайдеров. Поисковые запросы отправляются напрямую в Exa или Parallel.",
+ "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 18677db990..d0f653af10 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/th.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/th.ts
@@ -696,13 +696,11 @@ export const dict = {
"settings.agentBehaviour.title": "พฤติกรรมของเอเจนต์",
"settings.autoApprove.title": "อนุมัติอัตโนมัติ",
"settings.webTools.title": "เครื่องมือเว็บ",
- "settings.webTools.description":
- "กำหนดค่าการค้นหาเว็บและระบบอัตโนมัติของเบราว์เซอร์ คำขอค้นหาจะเชื่อมต่อโดยตรงกับ Exa หรือ Parallel",
+ "settings.webTools.description": "กำหนดค่าการค้นหาเว็บและระบบอัตโนมัติของเบราว์เซอร์",
"settings.webTools.webSearch.enable": "เปิดใช้สำหรับผู้ให้บริการทั้งหมด",
"settings.webTools.browserAutomation": "ระบบอัตโนมัติของเบราว์เซอร์",
"settings.webTools.webSearch.title": "ค้นหาเว็บ",
- "settings.webTools.webSearch.description":
- "ทำให้โมเดลจากผู้ให้บริการทั้งหมดใช้การค้นหาเว็บได้ การค้นหาจะเชื่อมต่อโดยตรงกับ Exa หรือ Parallel",
+ "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 1b2a6a3c70..6f6824da42 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts
@@ -654,13 +654,12 @@ export const dict = {
"settings.agentBehaviour.title": "Ajan Davranışı",
"settings.autoApprove.title": "Otomatik Onay",
"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.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. Aramalar doğrudan Exa veya Parallel'e bağlanır.",
+ "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 a9bca7db9e..f984d8f7a9 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts
@@ -656,13 +656,11 @@ export const dict = {
"settings.agentBehaviour.title": "Поведінка агента",
"settings.autoApprove.title": "Автоматичне схвалення",
"settings.webTools.title": "Вебінструменти",
- "settings.webTools.description":
- "Налаштуйте вебпошук і автоматизацію браузера. Пошукові запити надсилаються безпосередньо до Exa або Parallel.",
+ "settings.webTools.description": "Налаштуйте вебпошук і автоматизацію браузера.",
"settings.webTools.webSearch.enable": "Увімкнути для всіх постачальників",
"settings.webTools.browserAutomation": "Автоматизація браузера",
"settings.webTools.webSearch.title": "Вебпошук",
- "settings.webTools.webSearch.description":
- "Зробіть вебпошук доступним для моделей усіх постачальників. Пошукові запити надсилаються безпосередньо до Exa або Parallel.",
+ "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 35ca21a4fd..9d14ba7eda 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts
@@ -680,11 +680,11 @@ export const dict = {
"settings.agentBehaviour.title": "智能体行为",
"settings.autoApprove.title": "自动审批",
"settings.webTools.title": "网络工具",
- "settings.webTools.description": "配置网页搜索和浏览器自动化。搜索请求会直接连接到 Exa 或 Parallel。",
+ "settings.webTools.description": "配置网页搜索和浏览器自动化。",
"settings.webTools.webSearch.enable": "为所有提供商启用",
"settings.webTools.browserAutomation": "浏览器自动化",
"settings.webTools.webSearch.title": "网页搜索",
- "settings.webTools.webSearch.description": "让所有提供商的模型都可使用网页搜索。搜索会直接连接到 Exa 或 Parallel。",
+ "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 57b018982b..afc051308a 100644
--- a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts
+++ b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts
@@ -640,11 +640,11 @@ export const dict = {
"settings.agentBehaviour.title": "Agent 行為",
"settings.autoApprove.title": "自動核准",
"settings.webTools.title": "網路工具",
- "settings.webTools.description": "設定網頁搜尋和瀏覽器自動化。搜尋請求會直接連線至 Exa 或 Parallel。",
+ "settings.webTools.description": "設定網頁搜尋和瀏覽器自動化。",
"settings.webTools.webSearch.enable": "為所有供應商啟用",
"settings.webTools.browserAutomation": "瀏覽器自動化",
"settings.webTools.webSearch.title": "網頁搜尋",
- "settings.webTools.webSearch.description": "讓所有供應商的模型都可使用網頁搜尋。搜尋會直接連線至 Exa 或 Parallel。",
+ "settings.webTools.webSearch.description": "讓所有供應商的模型都可使用網頁搜尋。",
"settings.checkpoints.title": "檢查點",
"settings.display.title": "顯示",
"settings.autocomplete.title": "自動完成",
diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json
index 3036985783..d201367cb8 100644
--- a/packages/sdk/openapi.json
+++ b/packages/sdk/openapi.json
@@ -29194,10 +29194,6 @@
"hide_prompt_training_models": {
"type": "boolean"
},
- "web_search": {
- "type": "boolean",
- "description": "Make web search available to models from all providers (default: false)"
- },
"sandbox": {
"type": "object",
"properties": {
@@ -29456,6 +29452,9 @@
"type": "boolean"
}
},
+ "web_search": {
+ "type": "boolean"
+ },
"attachment": {
"$ref": "#/components/schemas/AttachmentConfig"
},
From ddd3557bf00fba99cbed389cbeffafa567a45c34 Mon Sep 17 00:00:00 2001
From: Kelly Sun
Date: Wed, 29 Jul 2026 21:58:41 -0400
Subject: [PATCH 13/29] docs: address review - use built-in Mixlayer provider +
/connect
Per review feedback: Mixlayer is a built-in provider, so document the
Connect-provider flow instead of manual custom-provider setup, and add
the CLI /connect command as a method.
---
.../kilo-docs/pages/ai-providers/mixlayer.md | 50 ++++++-------------
1 file changed, 16 insertions(+), 34 deletions(-)
diff --git a/packages/kilo-docs/pages/ai-providers/mixlayer.md b/packages/kilo-docs/pages/ai-providers/mixlayer.md
index ac0221315a..6d261849ba 100644
--- a/packages/kilo-docs/pages/ai-providers/mixlayer.md
+++ b/packages/kilo-docs/pages/ai-providers/mixlayer.md
@@ -17,62 +17,44 @@ Mixlayer is an inference platform for open models such as GLM and Qwen, with a s
## Configuration in Kilo Code
-Mixlayer's API is OpenAI-compatible, with the base URL `https://models.mixlayer.ai/v1`. Configure it through Kilo Code's **OpenAI Compatible** provider.
+Mixlayer is available as a **built-in provider** in Kilo Code, so you can connect it directly — no custom provider setup needed.
{% tabs %}
{% tab label="VSCode" %}
1. Open **Settings** (gear icon) and go to the **Providers** tab.
-2. Scroll to the bottom and click **Custom provider**.
-3. Fill in the dialog:
- - **Provider ID** — `mixlayer`
- - **Display name** — `Mixlayer`
- - **Provider API** — **OpenAI Compatible**
- - **Base URL** — `https://models.mixlayer.ai/v1`
- - **API key** — your Mixlayer API key
-4. Kilo Code auto-fetches the available models from Mixlayer's `/v1/models` endpoint, so you can pick a model directly from the list. Click **Submit** to save.
+2. Click **Connect provider**, search for **Mixlayer**, and select it.
+3. Enter your Mixlayer API key.
+4. Pick a model — Kilo Code fetches the available models automatically.
{% /tab %}
{% tab label="CLI" %}
-Set the API key as an environment variable and define an OpenAI-compatible provider in your `kilo.json` config file (`~/.config/kilo/kilo.json` or `./kilo.json`):
+**Method 1 — `/connect` (recommended)**
-**Environment variable:**
+Run `kilo`, then use the `/connect` command, select **Mixlayer**, and paste your API key when prompted:
+
+```bash
+kilo
+# then, inside Kilo, run:
+/connect
+```
+
+**Method 2 — config file**
+
+Set your API key and add Mixlayer in your `kilo.json` config file (`~/.config/kilo/kilo.json` or `./kilo.json`):
```bash
export MIXLAYER_API_KEY="your-api-key"
```
-**Config file:**
-
```jsonc
{
"provider": {
"mixlayer": {
- "npm": "@ai-sdk/openai-compatible",
"env": ["MIXLAYER_API_KEY"],
- "options": {
- "baseURL": "https://models.mixlayer.ai/v1",
- },
- "models": {
- "z-ai/glm-5.2": {
- "name": "GLM-5.2",
- "limit": { "context": 262144, "output": 262144 },
- },
- "qwen/qwen3.5-397b-a17b": {
- "name": "Qwen3.5 397B A17B",
- "limit": { "context": 131072, "output": 131072 },
- },
- },
},
},
-}
-```
-
-Then set your default model using the `provider-id/model-id` format:
-
-```jsonc
-{
"model": "mixlayer/z-ai/glm-5.2",
}
```
From 21263db2cdc04e0bc8126987676e2be7abeba9cf Mon Sep 17 00:00:00 2001
From: Kelly Sun
Date: Wed, 29 Jul 2026 22:27:03 -0400
Subject: [PATCH 14/29] docs: fix intro to reference built-in provider (not
OpenAI Compatible)
---
packages/kilo-docs/pages/ai-providers/mixlayer.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/kilo-docs/pages/ai-providers/mixlayer.md b/packages/kilo-docs/pages/ai-providers/mixlayer.md
index 6d261849ba..1ae3e8e74e 100644
--- a/packages/kilo-docs/pages/ai-providers/mixlayer.md
+++ b/packages/kilo-docs/pages/ai-providers/mixlayer.md
@@ -5,7 +5,7 @@ description: "Run open models like GLM and Qwen on Mixlayer's OpenAI-compatible
# Using Mixlayer With Kilo Code
-Mixlayer is an inference platform for open models such as GLM and Qwen, with a serving stack built from scratch by core contributors to Candle. It exposes an OpenAI-compatible API, so you can use it in Kilo Code through the **OpenAI Compatible** provider.
+Mixlayer is an inference platform for open models such as GLM and Qwen, with a serving stack built from scratch by core contributors to Candle. It exposes an OpenAI-compatible API and is available as a built-in provider in Kilo Code.
**Website:** [https://mixlayer.com/](https://mixlayer.com/)
From 2d2b73d74d0d0af7c076665ea898f406f27942e4 Mon Sep 17 00:00:00 2001
From: Kelly Sun
Date: Wed, 29 Jul 2026 22:31:02 -0400
Subject: [PATCH 15/29] docs: remove stale limit.output reference in tips
---
packages/kilo-docs/pages/ai-providers/mixlayer.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/kilo-docs/pages/ai-providers/mixlayer.md b/packages/kilo-docs/pages/ai-providers/mixlayer.md
index 1ae3e8e74e..4f34abfaa1 100644
--- a/packages/kilo-docs/pages/ai-providers/mixlayer.md
+++ b/packages/kilo-docs/pages/ai-providers/mixlayer.md
@@ -76,4 +76,4 @@ Tool calling and reasoning are supported across the model line. See the [Mixlaye
- **Model list:** Kilo Code auto-detects available models from Mixlayer's `/v1/models` endpoint, so the picker stays current with your account.
- **Pricing:** See the [Mixlayer console](https://console.mixlayer.com/) for current per-model pricing.
-- **Reasoning:** Qwen models support a thinking mode; reasoning tokens count against the output budget, so allow enough `limit.output` when reasoning is enabled.
+- **Reasoning:** Qwen models support a thinking mode; reasoning tokens count against the output budget, so give responses enough room when reasoning is enabled.
From 49223b3adecb891b185d7a21bac8d4993d3bee65 Mon Sep 17 00:00:00 2001
From: marius-kilocode
Date: Thu, 30 Jul 2026 10:16:51 +0200
Subject: [PATCH 16/29] feat(agent-manager): run project scripts in the
embedded side terminal
---
.changeset/calm-run-terminals.md | 5 +
.kilo/plans/agent-manager-script-terminals.md | 575 ++++++++++++++++++
packages/core/src/kilocode/pty/termination.ts | 164 +++++
packages/core/src/pty.ts | 59 +-
.../test/kilocode/pty-termination.test.ts | 104 ++++
packages/core/test/pty/pty-session.test.ts | 61 ++
.../kilo-docs/pages/automate/agent-manager.md | 2 +-
.../src/agent-manager/AgentManagerProvider.ts | 48 +-
.../agent-manager/ScriptTerminalManager.ts | 390 ++++++++++++
.../__tests__/AgentManagerProvider.spec.ts | 6 +
.../kilo-vscode/src/agent-manager/host.ts | 3 +
.../src/agent-manager/run/controller.ts | 14 +-
.../src/agent-manager/run/manager.ts | 56 +-
.../kilo-vscode/src/agent-manager/run/task.ts | 73 ---
.../src/agent-manager/script-terminal-url.ts | 16 +
.../kilo-vscode/src/agent-manager/types.ts | 7 +
.../src/agent-manager/vscode-host.ts | 4 +
.../tests/unit/agent-manager-arch.test.ts | 27 +-
.../agent-manager-terminal-chrome.test.ts | 22 +
.../unit/agent-manager-terminal-state.test.ts | 94 ++-
.../tests/unit/run-script-manager.test.ts | 4 +-
.../unit/script-terminal-manager.test.ts | 338 ++++++++++
.../agent-manager/AgentManagerApp.tsx | 6 +
.../agent-manager/agent-manager.css | 13 +
.../terminal/SideTerminalPanel.tsx | 1 +
.../terminal/SortableTerminalTab.tsx | 22 +-
.../agent-manager/terminal/chrome.ts | 23 +
.../agent-manager/terminal/render.tsx | 1 +
.../agent-manager/terminal/state.ts | 143 ++++-
.../src/types/messages/extension-messages.ts | 19 +
packages/server/src/handlers/pty.ts | 1 +
31 files changed, 2171 insertions(+), 130 deletions(-)
create mode 100644 .changeset/calm-run-terminals.md
create mode 100644 .kilo/plans/agent-manager-script-terminals.md
create mode 100644 packages/core/src/kilocode/pty/termination.ts
create mode 100644 packages/core/test/kilocode/pty-termination.test.ts
create mode 100644 packages/kilo-vscode/src/agent-manager/ScriptTerminalManager.ts
delete mode 100644 packages/kilo-vscode/src/agent-manager/run/task.ts
create mode 100644 packages/kilo-vscode/src/agent-manager/script-terminal-url.ts
create mode 100644 packages/kilo-vscode/tests/unit/agent-manager-terminal-chrome.test.ts
create mode 100644 packages/kilo-vscode/tests/unit/script-terminal-manager.test.ts
create mode 100644 packages/kilo-vscode/webview-ui/agent-manager/terminal/chrome.ts
diff --git a/.changeset/calm-run-terminals.md b/.changeset/calm-run-terminals.md
new file mode 100644
index 0000000000..e1f1df7b1e
--- /dev/null
+++ b/.changeset/calm-run-terminals.md
@@ -0,0 +1,5 @@
+---
+"kilo-code": minor
+---
+
+Run Agent Manager project scripts in a named side terminal without opening the bottom VS Code terminal panel.
diff --git a/.kilo/plans/agent-manager-script-terminals.md b/.kilo/plans/agent-manager-script-terminals.md
new file mode 100644
index 0000000000..98567058a0
--- /dev/null
+++ b/.kilo/plans/agent-manager-script-terminals.md
@@ -0,0 +1,575 @@
+# Agent Manager Script Terminals
+
+Status: implementation plan only
+
+Baseline researched: `main` at `a0364858a6e1b69a2e2dc5434a82d5cefbe79ea7` (`v7.4.17`)
+
+Related issues:
+
+- [#12595](https://github.com/Kilo-Org/kilocode/issues/12595), per-worktree session terminals in the embedded side panel
+- [#11083](https://github.com/Kilo-Org/kilocode/issues/11083), setup blocks session start and disrupts the terminal layout
+- [#7526](https://github.com/Kilo-Org/kilocode/issues/7526), original Agent Manager Run script feature
+- [#12597](https://github.com/Kilo-Org/kilocode/issues/12597), multiple side terminals, already implemented
+- [#12649](https://github.com/Kilo-Org/kilocode/issues/12649), setup-script migration split from this implementation
+
+## Goal
+
+Setup scripts and Run scripts must execute in first-class terminal tabs inside the Agent Manager right-side terminal panel. Neither action should reveal or require the bottom VS Code terminal panel.
+
+The result must:
+
+- run the existing platform-specific setup and Run script files on Windows, Linux, and macOS;
+- preserve the current working directory, environment, exit status, timeout, and one-Run-per-context behavior;
+- show live output, accept input for interactive scripts, and retain bounded scrollback after exit;
+- stop the correct process and its descendants;
+- survive Agent Manager webview reloads and context switching while the extension/backend remain alive;
+- reject unsafe script paths and respect VS Code Workspace Trust;
+- never construct a shell command string in the webview or inject a command through terminal input.
+
+## Issue Scope Correction
+
+Issue #12595 currently describes routing a plain session/worktree shell through the existing `terminalButtonDestination` preference. Implementing that issue literally does not migrate either script system:
+
+- setup scripts still use `vscode.tasks.executeTask()` through `task-runner.ts`;
+- Run scripts still use `vscode.tasks.executeTask()` through `run/task.ts`;
+- both task definitions use `TaskRevealKind.Always`, which opens the bottom terminal panel.
+
+Before implementation, revise #12595 or replace its acceptance criteria with this plan. The plain session-terminal routing can remain a small related change, but it is not sufficient for the stated product goal.
+
+This plan addresses only the terminal/output part of #11083. Setup remains awaited before the first worktree session starts in the initial implementation. Making setup asynchronous is a separate lifecycle change and should not be combined with the terminal migration.
+
+## Product Decisions
+
+### Script output always belongs to Agent Manager
+
+Setup and Run are Agent Manager operations, so they always use named side-panel terminals:
+
+- `Setup` for worktree setup
+- `Run` for the selected Local or worktree context
+
+They do not follow `kilo-code.new.agentManager.terminalButtonDestination`. That setting continues to control only where an ordinary user-requested interactive shell opens. This keeps the meaning of the setting narrow and avoids adding another preference.
+
+### No automatic VS Code terminal fallback
+
+If script PTY creation fails, show an Agent Manager error and do not execute the script. Automatically falling back after an uncertain PTY failure could execute a setup or Run script twice.
+
+An explicit manual action may open an ordinary VS Code terminal, but it must not silently rerun the script.
+
+### Preserve current lifecycle semantics
+
+- Setup stays best-effort: nonzero exit is visible as a failure, but session creation continues as it does today.
+- Setup keeps its five-minute timeout, but the timeout must now terminate the process tree instead of only rejecting the wait.
+- Run remains a toggle: invoking Run while active requests Stop rather than starting a second process.
+- One Run process exists per Local/worktree context.
+- Run status remains in memory and continues to drive the existing Run/Stop button and worktree status badge.
+
+## Current Architecture
+
+### Setup
+
+`SetupScriptRunner` is already platform-neutral and receives an injected `RunTask` callback. It resolves:
+
+| Platform | Script | Executable and arguments |
+|---|---|---|
+| Linux/macOS | `.kilo/setup-script`, then `.sh` | `sh ` |
+| Windows | `.ps1`, then `.cmd`, then `.bat` | `powershell.exe ... -File ` or `cmd.exe /d /s /c ` |
+
+The VS Code-specific adapter is `packages/kilo-vscode/src/agent-manager/task-runner.ts`.
+
+### Run
+
+`RunController` and `RunScriptManager` already separate discovery, lifecycle, and UI status from the execution adapter. `RunController` passes an explicit executable, argument array, cwd, environment, and completion callback to `startVscodeRunTask()`.
+
+The VS Code-specific adapter is `packages/kilo-vscode/src/agent-manager/run/task.ts`.
+
+### Embedded terminals
+
+Agent Manager already has:
+
+- xterm.js terminals in the right-side inspector;
+- multiple side terminals per context;
+- direct PTY WebSocket streaming;
+- per-context tab selection and ordering;
+- persistent mounting while switching terminal tabs, Agent Manager contexts, Diff, and PR views.
+
+The extension-side path is currently:
+
+```text
+webview terminal.create
+ -> TerminalRouter
+ -> TerminalManager
+ -> legacy client.pty.create()
+ -> kilo serve PTY
+ -> WebSocket
+ -> xterm.js
+```
+
+It currently creates only default interactive shells. It does not expose command, args, or env.
+
+### Existing backend capability
+
+The canonical PTY service already accepts:
+
+```ts
+{
+ command?: string
+ args?: string[]
+ cwd?: string
+ title?: string
+ env?: Record
+}
+```
+
+It also retains bounded output, publishes `pty.exited` with an exit code, and keeps exited PTY metadata until removal. The canonical SDK surface is `client.v2.pty` under `/api/pty`.
+
+## Proposed Architecture
+
+### One execution backend
+
+Use the existing `kilo serve` PTY service as the only new script execution backend. Do not add another `child_process`, `node-pty`, VS Code pseudoterminal, or webview process runner.
+
+The new flow is:
+
+```text
+SetupScriptRunner or RunController
+ -> PTY-backed execution adapter
+ -> ScriptTerminalManager
+ -> client.v2.pty.create(command, args, cwd, env)
+ -> canonical PTY WebSocket
+ -> existing Agent Manager side terminal/xterm.js
+```
+
+The executable and argument array are resolved by trusted extension code using the existing platform-specific builders. The webview receives only terminal display and attachment metadata.
+
+### Separate system terminals from user terminals
+
+Add a provider-owned `ScriptTerminalManager` next to the current `TerminalManager`.
+
+Do not send setup or Run processes through the existing webview-created `terminal.created` flow. That flow requires a pending webview `createId` and correctly closes unsolicited terminals. Setup can begin before the webview requests a terminal, so it needs a separate synchronization path.
+
+Suggested record:
+
+```ts
+type ScriptTerminalKind = "setup" | "run"
+type ScriptTerminalState = "starting" | "running" | "stopping" | "exited" | "failed"
+
+interface ScriptTerminalRecord {
+ terminalId: string
+ ptyID: string
+ worktreeId: string | null
+ kind: ScriptTerminalKind
+ title: string
+ cwd: string
+ wsUrl: string
+ state: ScriptTerminalState
+ exitCode?: number
+ startedAt: number
+ endedAt?: number
+}
+```
+
+Registry rules:
+
+- one active `Run` record per context;
+- one `Setup` record per worktree setup attempt;
+- a new Run replaces the previous exited Run record after removing its retained PTY;
+- user-created `Terminal N` tabs remain independently managed by `TerminalRouter`;
+- script records survive `TerminalRouter.dispose()` and webview reloads;
+- extension/backend shutdown removes all remaining script PTYs.
+
+### Completion and race handling
+
+Subscribe to global `pty.exited` events through `KiloConnectionService` and map backend PTY IDs to script records.
+
+Account for a fast process that exits before the extension registers the returned PTY:
+
+1. Create the PTY.
+2. Store the record and backend ID.
+3. Immediately call canonical `pty.get()`.
+4. If it is already exited, finish from the returned status and exit code.
+5. Otherwise rely on `pty.exited`.
+
+On connection restoration, reconcile every running script record with `pty.get()`. A missing PTY is an execution failure, not a successful exit.
+
+### Webview synchronization
+
+Add an extension-to-webview script-terminal snapshot/update protocol, for example:
+
+```ts
+type: "agentManager.scriptTerminals"
+terminals: ScriptTerminalView[]
+```
+
+Send a full snapshot:
+
+- when a script terminal is created;
+- when status or exit code changes;
+- after `agentManager.requestState`;
+- after the webview reloads or reattaches.
+
+The webview terminal state adds script terminals without requiring a pending `createId`. A script terminal is still rendered by the existing `TerminalTab` and side-terminal layer.
+
+Do not send executable paths, args, arbitrary env, or script contents to the webview.
+
+## Required PTY Hardening
+
+These are prerequisites for claiming behavior comparable to VS Code Tasks.
+
+### Do not mutate explicit command arguments
+
+`packages/core/src/pty.ts` currently appends `-l` whenever the executable looks like a login shell. With `command: "sh"` and `args: [scriptPath]`, that produces `sh scriptPath -l`, making `-l` a script argument.
+
+Only add login-shell arguments when the caller did not provide an explicit command. Explicit `command` plus `args` must reach the process unchanged.
+
+### Terminate the process tree
+
+PTY removal currently calls only the PTY process's `kill()`. That does not prove that child and grandchild processes are terminated.
+
+Reuse or generalize `packages/core/src/shell.ts` `killTree()` semantics:
+
+- Windows: `taskkill /pid /f /t`, hidden window;
+- Linux/macOS: signal the process group, then escalate from `SIGTERM` to `SIGKILL`;
+- retain the direct PTY kill as a fallback.
+
+Run Stop, worktree deletion, setup timeout, tab close, extension shutdown, and backend shutdown must all use the same tree-termination path.
+
+### Replay exited output
+
+Canonical PTYs retain up to 2 MiB of output and exited metadata, but `Pty.attach()` currently rejects exited sessions. A quick setup can finish before the webview attaches, and a webview reload can occur after a Run exits.
+
+Allow a read-only attachment to an exited retained PTY:
+
+1. replay the requested bounded buffer;
+2. send cursor/status metadata;
+3. close normally with the exit code available through the state protocol;
+4. reject writes after exit.
+
+Keep legacy `/pty` behavior unchanged. Script terminals use canonical `/api/pty`.
+
+### Keep shared-file changes isolated
+
+The PTY hardening touches shared upstream-owned code. Keep the changes minimal, use `kilocode_change` annotations where required, and run the opencode annotation and Promise-facade guards.
+
+## Security Model
+
+### Workspace Trust
+
+Before setup or Run script execution, require `vscode.workspace.isTrusted`. If the workspace is restricted, show the standard trust-management action and do not create a PTY.
+
+VS Code blocks terminals and Tasks in Restricted Mode. Moving execution behind `kilo serve` must not bypass that boundary.
+
+### Script path validation
+
+Run scripts already require a regular file and reject symlinks that resolve outside the root `.kilo` directory. Extract and reuse this validation for setup scripts.
+
+Both script systems must:
+
+- accept only the existing fixed platform-specific filenames;
+- require a regular file;
+- reject directories, devices, and other special files;
+- reject a symlink whose real target escapes the root `.kilo` directory;
+- use an absolute script path and validated absolute cwd.
+
+### Command construction
+
+- Resolve executable and args in extension code.
+- Pass args as an array to `pty.create()`.
+- Never concatenate a POSIX/PowerShell command string.
+- Keep the existing `cmd.exe` path quoting helper and add paths-with-spaces and quotes tests.
+- Never send a script command by `sendText`, xterm paste, or WebSocket input.
+
+### Environment
+
+Use one environment builder for setup and Run:
+
+- Linux/macOS: cached login-shell environment, preserving user PATH tools such as Homebrew, nvm, pyenv, and Cargo;
+- Windows: extension-host process environment;
+- overlay `WORKTREE_PATH` and `REPO_PATH`;
+- retain PTY-enforced stripping of `KILO_SERVER_PASSWORD` and `KILO_SERVER_USERNAME`;
+- do not serialize the environment into webview messages or persisted Agent Manager state.
+
+This intentionally improves setup parity. Setup currently lacks the login-shell environment used by Run.
+
+### Failure behavior
+
+- A PTY create error does not trigger a second execution path.
+- A missing exit code is not treated as success.
+- A server disconnect marks the script indeterminate until canonical status reconciliation completes.
+- If process-tree termination cannot be confirmed, keep the UI in an error/stopping state and log the failure.
+
+## UX
+
+### Run
+
+When the user clicks Run or presses `Cmd/Ctrl+E`:
+
+1. Keep current script discovery/configuration behavior.
+2. Open the Agent Manager terminal inspector.
+3. Create or replace the semantic `Run` side tab for the current context.
+4. Activate and focus it so interactive scripts can accept input.
+5. Keep the existing worktree card and toolbar status synchronized.
+
+While running:
+
+- the tab shows a spinner;
+- Run changes to Stop as today;
+- pressing Run/Stop requests process-tree termination;
+- closing the running Run tab means Stop and close;
+- hiding the inspector does not stop the process.
+
+After exit:
+
+- exit `0` shows success;
+- nonzero exit shows failure and the exit code;
+- output remains available until the tab is closed or a new Run replaces it.
+
+### Setup
+
+When setup begins:
+
+1. Add the new worktree context to the UI as today.
+2. Open its `Setup` side tab and show live output.
+3. Keep the existing setup/session sequencing unchanged.
+4. Continue session creation after success or failure, preserving current best-effort behavior.
+
+While setup runs:
+
+- the tab shows a spinner;
+- the terminal can accept input if the script prompts;
+- the tab cannot be destroyed accidentally; users may hide the inspector;
+- the five-minute timeout stops the process tree and marks the tab failed.
+
+After setup exits, the tab becomes closable and retains its output.
+
+### Rendering before a session exists
+
+Setup begins before the first session exists in a new worktree. Update Agent Manager's empty-context logic so a context with a side script terminal renders the detail/inspector host even without a session tab.
+
+Do not place the current blocking setup overlay above the terminal. Keep progress visible in the sidebar/worktree state and in the Setup tab itself.
+
+### Titles and ordering
+
+- Keep `Setup` and `Run` as semantic labels; do not replace them with OSC shell titles.
+- User-created terminals continue to use OSC title updates.
+- System terminals participate in the existing side tab strip and can retain stable positions.
+- The `+` button always creates a user terminal and never another Run or Setup process.
+
+### Accessibility
+
+- Announce starting, running, stopped, succeeded, and failed state changes.
+- Include the exit code in accessible status text.
+- Preserve existing keyboard tab navigation and terminal focus restoration.
+- A hidden terminal inspector remains inert and `aria-hidden` while the PTY continues running.
+
+## Cross-Platform Contract
+
+Use the extension host's platform. In WSL, Remote SSH, and Dev Containers this means the remote Linux environment and POSIX script names, not native Windows script names.
+
+| Environment | Script execution | Important checks |
+|---|---|---|
+| macOS | `sh