From 0a049146714ba4663b694325d0327d3cabdeed69 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 12:50:37 +0100 Subject: [PATCH 01/13] feat(ghost): improve no-model-configured message with supported providers list - Move AUTOCOMPLETE_PROVIDER_MODELS constant to @roo-code/types for sharing - Show list of supported providers with friendly display names - Add link to autocomplete documentation --- packages/types/src/kilocode/kilocode.ts | 18 ++++++++ src/services/ghost/types.ts | 16 ++----- src/services/ghost/utils/kilocode-utils.ts | 3 +- .../settings/GhostServiceSettings.tsx | 42 +++++++++++++++++-- 4 files changed, 60 insertions(+), 19 deletions(-) diff --git a/packages/types/src/kilocode/kilocode.ts b/packages/types/src/kilocode/kilocode.ts index 8de95a2075b..92007f70edc 100644 --- a/packages/types/src/kilocode/kilocode.ts +++ b/packages/types/src/kilocode/kilocode.ts @@ -20,6 +20,24 @@ export const ghostServiceSettingsSchema = z export type GhostServiceSettings = z.infer +/** + * Map of provider names to their default autocomplete models. + * These are the providers that support autocomplete functionality. + */ +export const AUTOCOMPLETE_PROVIDER_MODELS = new Map([ + ["mistral", "codestral-latest"], + ["kilocode", "mistralai/codestral-2508"], + ["openrouter", "mistralai/codestral-2508"], + ["requesty", "mistral/codestral-latest"], + ["bedrock", "mistral.codestral-2508-v1:0"], + ["huggingface", "mistralai/Codestral-22B-v0.1"], + ["litellm", "codestral/codestral-latest"], + ["lmstudio", "mistralai/codestral-22b-v0.1"], + ["ollama", "codestral:latest"], +] as const) + +export type AutocompleteProviderKey = typeof AUTOCOMPLETE_PROVIDER_MODELS extends Map ? K : never + export const commitRangeSchema = z.object({ from: z.string(), fromTimeStamp: z.number().optional(), diff --git a/src/services/ghost/types.ts b/src/services/ghost/types.ts index 3008572f5fe..c585b9b8abe 100644 --- a/src/services/ghost/types.ts +++ b/src/services/ghost/types.ts @@ -10,20 +10,10 @@ import { RooIgnoreController } from "../../core/ignore/RooIgnoreController" import { ContextRetrievalService } from "../continuedev/core/autocomplete/context/ContextRetrievalService" import { VsCodeIde } from "../continuedev/core/vscode-test-harness/src/VSCodeIde" import { GhostModel } from "./GhostModel" +import { AUTOCOMPLETE_PROVIDER_MODELS, AutocompleteProviderKey } from "@roo-code/types" -export const AUTOCOMPLETE_PROVIDER_MODELS = new Map([ - ["mistral", "codestral-latest"], - ["kilocode", "mistralai/codestral-2508"], - ["openrouter", "mistralai/codestral-2508"], - ["requesty", "mistral/codestral-latest"], - ["bedrock", "mistral.codestral-2508-v1:0"], - ["huggingface", "mistralai/Codestral-22B-v0.1"], - ["litellm", "codestral/codestral-latest"], - ["lmstudio", "mistralai/codestral-22b-v0.1"], - ["ollama", "codestral:latest"], -] as const) - -export type AutocompleteProviderKey = typeof AUTOCOMPLETE_PROVIDER_MODELS extends Map ? K : never +export { AUTOCOMPLETE_PROVIDER_MODELS } +export type { AutocompleteProviderKey } export interface ResponseMetaData { cost: number diff --git a/src/services/ghost/utils/kilocode-utils.ts b/src/services/ghost/utils/kilocode-utils.ts index 168fafb6e9c..c57b93857b9 100644 --- a/src/services/ghost/utils/kilocode-utils.ts +++ b/src/services/ghost/utils/kilocode-utils.ts @@ -1,5 +1,4 @@ -import { getKiloBaseUriFromToken } from "@roo-code/types" -import { AUTOCOMPLETE_PROVIDER_MODELS, AutocompleteProviderKey } from "../types" +import { getKiloBaseUriFromToken, AUTOCOMPLETE_PROVIDER_MODELS, AutocompleteProviderKey } from "@roo-code/types" export { AUTOCOMPLETE_PROVIDER_MODELS } export type { AutocompleteProviderKey } diff --git a/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx b/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx index 55f1e855ef1..6def12a8dc3 100644 --- a/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx +++ b/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx @@ -1,16 +1,22 @@ //kilocode_change - new file -import { HTMLAttributes, useCallback, useEffect, useState } from "react" +import { HTMLAttributes, useCallback, useEffect, useMemo, useState } from "react" import { useAppTranslation } from "@/i18n/TranslationContext" import { Trans } from "react-i18next" import { Bot, Zap, Clock } from "lucide-react" import { cn } from "@/lib/utils" import { SectionHeader } from "../../settings/SectionHeader" import { Section } from "../../settings/Section" -import { EXTREME_SNOOZE_VALUES_ENABLED, GhostServiceSettings, MODEL_SELECTION_ENABLED } from "@roo-code/types" +import { + AUTOCOMPLETE_PROVIDER_MODELS, + EXTREME_SNOOZE_VALUES_ENABLED, + GhostServiceSettings, + MODEL_SELECTION_ENABLED, +} from "@roo-code/types" import { vscode } from "@/utils/vscode" import { VSCodeCheckbox, VSCodeButton, VSCodeDropdown, VSCodeOption } from "@vscode/webview-ui-toolkit/react" import { useKeybindings } from "@/hooks/useKeybindings" import { useExtensionState } from "../../../context/ExtensionStateContext" +import { PROVIDERS } from "../../settings/constants" type GhostServiceSettingsViewProps = HTMLAttributes & { ghostServiceSettings: GhostServiceSettings @@ -20,6 +26,9 @@ type GhostServiceSettingsViewProps = HTMLAttributes & { ) => void } +// Get the list of supported provider keys from AUTOCOMPLETE_PROVIDER_MODELS +const SUPPORTED_AUTOCOMPLETE_PROVIDER_KEYS = Array.from(AUTOCOMPLETE_PROVIDER_MODELS.keys()) + export const GhostServiceSettingsView = ({ ghostServiceSettings, onGhostServiceSettingsChange, @@ -40,6 +49,14 @@ export const GhostServiceSettingsView = ({ const [snoozeDuration, setSnoozeDuration] = useState(300) const [currentTime, setCurrentTime] = useState(Date.now()) + // Get friendly display names for supported autocomplete providers + const supportedProviderNames = useMemo(() => { + return SUPPORTED_AUTOCOMPLETE_PROVIDER_KEYS.map((key) => { + const provider = PROVIDERS.find((p) => p.value === key) + return provider?.label ?? key + }) + }, []) + useEffect(() => { const interval = setInterval(() => { setCurrentTime(Date.now()) @@ -259,8 +276,25 @@ export const GhostServiceSettingsView = ({ ) : ( -
- {t("kilocode:ghost.settings.noModelConfigured")} +
+
+ No autocomplete model configured +
+
+ To enable autocomplete, add a profile with one of these supported providers: +
+
    + {supportedProviderNames.map((name) => ( +
  • {name}
  • + ))} +
+
)} {MODEL_SELECTION_ENABLED && ( From d08b279640faed4b318f36dd2e73cea4ae9b539e Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 13:02:52 +0100 Subject: [PATCH 02/13] refactor(ghost): remove redundant AUTOCOMPLETE_PROVIDER_MODELS export from types.ts The constant is already exported from utils/kilocode-utils.ts --- src/services/ghost/types.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/services/ghost/types.ts b/src/services/ghost/types.ts index c585b9b8abe..81a2a1fb453 100644 --- a/src/services/ghost/types.ts +++ b/src/services/ghost/types.ts @@ -10,10 +10,6 @@ import { RooIgnoreController } from "../../core/ignore/RooIgnoreController" import { ContextRetrievalService } from "../continuedev/core/autocomplete/context/ContextRetrievalService" import { VsCodeIde } from "../continuedev/core/vscode-test-harness/src/VSCodeIde" import { GhostModel } from "./GhostModel" -import { AUTOCOMPLETE_PROVIDER_MODELS, AutocompleteProviderKey } from "@roo-code/types" - -export { AUTOCOMPLETE_PROVIDER_MODELS } -export type { AutocompleteProviderKey } export interface ResponseMetaData { cost: number From 5d2ffda42d6711421672c4744ca15f12d60cc664 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 13:08:15 +0100 Subject: [PATCH 03/13] i18n(ghost): update noModelConfigured translations - Replace single string with nested object containing title, description, and learnMore - Remove old noModelConfigured string from all non-English translations - Update component to use new translation keys --- .../components/kilocode/settings/GhostServiceSettings.tsx | 6 +++--- webview-ui/src/i18n/locales/ar/kilocode.json | 1 - webview-ui/src/i18n/locales/ca/kilocode.json | 1 - webview-ui/src/i18n/locales/cs/kilocode.json | 1 - webview-ui/src/i18n/locales/de/kilocode.json | 1 - webview-ui/src/i18n/locales/en/kilocode.json | 6 +++++- webview-ui/src/i18n/locales/es/kilocode.json | 1 - webview-ui/src/i18n/locales/fr/kilocode.json | 1 - webview-ui/src/i18n/locales/hi/kilocode.json | 1 - webview-ui/src/i18n/locales/id/kilocode.json | 1 - webview-ui/src/i18n/locales/it/kilocode.json | 1 - webview-ui/src/i18n/locales/ja/kilocode.json | 1 - webview-ui/src/i18n/locales/ko/kilocode.json | 1 - webview-ui/src/i18n/locales/nl/kilocode.json | 1 - webview-ui/src/i18n/locales/pl/kilocode.json | 1 - webview-ui/src/i18n/locales/pt-BR/kilocode.json | 1 - webview-ui/src/i18n/locales/ru/kilocode.json | 1 - webview-ui/src/i18n/locales/th/kilocode.json | 1 - webview-ui/src/i18n/locales/tr/kilocode.json | 1 - webview-ui/src/i18n/locales/uk/kilocode.json | 1 - webview-ui/src/i18n/locales/vi/kilocode.json | 1 - webview-ui/src/i18n/locales/zh-CN/kilocode.json | 1 - webview-ui/src/i18n/locales/zh-TW/kilocode.json | 1 - 23 files changed, 8 insertions(+), 25 deletions(-) diff --git a/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx b/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx index 6def12a8dc3..a6c5d8cfcb2 100644 --- a/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx +++ b/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx @@ -278,10 +278,10 @@ export const GhostServiceSettingsView = ({ ) : (
- No autocomplete model configured + {t("kilocode:ghost.settings.noModelConfigured.title")}
- To enable autocomplete, add a profile with one of these supported providers: + {t("kilocode:ghost.settings.noModelConfigured.description")}
diff --git a/webview-ui/src/i18n/locales/ar/kilocode.json b/webview-ui/src/i18n/locales/ar/kilocode.json index 93e5fbb2cf6..e4a57475e02 100644 --- a/webview-ui/src/i18n/locales/ar/kilocode.json +++ b/webview-ui/src/i18n/locales/ar/kilocode.json @@ -237,7 +237,6 @@ "description": "تحتاج إصلاحاً سريعاً أو إكمالاً أو إعادة هيكلة؟ سيستخدم Kilo السياق المحيط لتقديم تحسينات فورية، مما يبقيك في التدفق. عرض الاختصار" }, "keybindingNotFound": "غير موجود", - "noModelConfigured": "لم يتم العثور على نموذج إكمال تلقائي مناسب. يرجى تكوين مزود في إعدادات API.", "configureAutocompleteProfile": "استخدم أي نموذج بالانتقال إلى الملفات الشخصية وتكوين ملف شخصي من نوع الإكمال التلقائي.", "model": "النموذج", "provider": "المزود", diff --git a/webview-ui/src/i18n/locales/ca/kilocode.json b/webview-ui/src/i18n/locales/ca/kilocode.json index f2def5a8103..00f265a14cb 100644 --- a/webview-ui/src/i18n/locales/ca/kilocode.json +++ b/webview-ui/src/i18n/locales/ca/kilocode.json @@ -228,7 +228,6 @@ "description": "Necessites una correcció ràpida, completació o refactorització? Kilo utilitzarà el context circumdant per oferir millores immediates, mantenint-te en el flux. Veure drecera" }, "keybindingNotFound": "no trobat", - "noModelConfigured": "No s'ha trobat cap model d'autocompletat adequat. Configura un proveïdor a la configuració de l'API.", "configureAutocompleteProfile": "Utilitza qualsevol model anant a perfils i configurant un Perfil del Tipus de Perfil Autocompletat.", "model": "Model", "provider": "Proveïdor", diff --git a/webview-ui/src/i18n/locales/cs/kilocode.json b/webview-ui/src/i18n/locales/cs/kilocode.json index 6bcbcea22dc..86f3530bd56 100644 --- a/webview-ui/src/i18n/locales/cs/kilocode.json +++ b/webview-ui/src/i18n/locales/cs/kilocode.json @@ -242,7 +242,6 @@ "description": "Potřebuješ rychlou opravu, dokončení nebo refaktoring? Kilo použije okolní kontext k nabídnutí okamžitých vylepšení, udržujíc tě v toku. Zobrazit zkratku" }, "keybindingNotFound": "nenalezeno", - "noModelConfigured": "Nebyl nalezen žádný vhodný model pro automatické dokončování. Nakonfiguruj prosím poskytovatele v nastavení API.", "configureAutocompleteProfile": "Použij libovolný model tak, že přejdeš do profilů a nakonfiguruješ Profil typu Automatické dokončování.", "model": "Model", "provider": "Poskytovatel", diff --git a/webview-ui/src/i18n/locales/de/kilocode.json b/webview-ui/src/i18n/locales/de/kilocode.json index f7c8e710d5d..fb7fb10c217 100644 --- a/webview-ui/src/i18n/locales/de/kilocode.json +++ b/webview-ui/src/i18n/locales/de/kilocode.json @@ -236,7 +236,6 @@ "description": "Brauchst du eine schnelle Korrektur, Vervollständigung oder Refaktorierung? Kilo wird den umgebenden Kontext nutzen, um sofortige Verbesserungen anzubieten und dich im Flow zu halten. Tastenkombination bearbeiten" }, "keybindingNotFound": "nicht gefunden", - "noModelConfigured": "Kein geeignetes Autocomplete-Modell gefunden. Bitte konfiguriere einen Provider in den API-Einstellungen.", "configureAutocompleteProfile": "Verwende ein beliebiges Modell, indem du zu Profilen gehst und ein Profil vom Profiltyp Autocomplete konfigurierst.", "enableChatAutocomplete": { "label": "Chat-Eingabe-Autovervollständigung", diff --git a/webview-ui/src/i18n/locales/en/kilocode.json b/webview-ui/src/i18n/locales/en/kilocode.json index 7a849f0573b..3338c89bb8c 100644 --- a/webview-ui/src/i18n/locales/en/kilocode.json +++ b/webview-ui/src/i18n/locales/en/kilocode.json @@ -268,7 +268,11 @@ } }, "keybindingNotFound": "not found", - "noModelConfigured": "No suitable autocomplete model found. Please configure a provider in the API settings.", + "noModelConfigured": { + "title": "No autocomplete model configured", + "description": "To enable autocomplete, add a profile with one of these supported providers:", + "learnMore": "Learn more about autocomplete setup →" + }, "configureAutocompleteProfile": "Use any model by going to profiles and configuring a Profile of the Profile Type Autocomplete." } }, diff --git a/webview-ui/src/i18n/locales/es/kilocode.json b/webview-ui/src/i18n/locales/es/kilocode.json index f0883096c7d..c26f6021bf5 100644 --- a/webview-ui/src/i18n/locales/es/kilocode.json +++ b/webview-ui/src/i18n/locales/es/kilocode.json @@ -235,7 +235,6 @@ "description": "¿Necesitas una corrección rápida, completado o refactorización? Kilo usará el contexto circundante para ofrecer mejoras inmediatas, manteniéndote en el flujo. Editar atajo" }, "keybindingNotFound": "no encontrado", - "noModelConfigured": "No se encontró ningún modelo de autocompletado adecuado. Por favor, configura un proveedor en la configuración de API.", "configureAutocompleteProfile": "Usa cualquier modelo yendo a perfiles y configurando un Perfil del Tipo de Perfil Autocompletado.", "model": "Modelo", "provider": "Proveedor", diff --git a/webview-ui/src/i18n/locales/fr/kilocode.json b/webview-ui/src/i18n/locales/fr/kilocode.json index 8bfa4b258ce..5f05011fe4b 100644 --- a/webview-ui/src/i18n/locales/fr/kilocode.json +++ b/webview-ui/src/i18n/locales/fr/kilocode.json @@ -242,7 +242,6 @@ "description": "Besoin d'une correction rapide, d'un complément ou d'une refactorisation ? Kilo utilisera le contexte environnant pour offrir des améliorations immédiates, te gardant dans le flux. Modifier le raccourci" }, "keybindingNotFound": "introuvable", - "noModelConfigured": "Aucun modèle d'autocomplétion approprié trouvé. Configure un fournisseur dans les paramètres API.", "configureAutocompleteProfile": "Utilise n'importe quel modèle en allant dans les profils et en configurant un Profil du Type de Profil Autocomplétion.", "model": "Modèle", "provider": "Fournisseur", diff --git a/webview-ui/src/i18n/locales/hi/kilocode.json b/webview-ui/src/i18n/locales/hi/kilocode.json index ee5073948fa..b489179e739 100644 --- a/webview-ui/src/i18n/locales/hi/kilocode.json +++ b/webview-ui/src/i18n/locales/hi/kilocode.json @@ -228,7 +228,6 @@ "description": "त्वरित सुधार, पूर्णता, या रिफैक्टरिंग चाहिए? Kilo आसपास के संदर्भ का उपयोग करके तत्काल सुधार प्रदान करेगा, आपको प्रवाह में रखते हुए। शॉर्टकट देखें" }, "keybindingNotFound": "नहीं मिला", - "noModelConfigured": "कोई उपयुक्त ऑटोकम्पलीट मॉडल नहीं मिला। कृपया API सेटिंग्स में एक प्रदाता कॉन्फ़िगर करें।", "configureAutocompleteProfile": "प्रोफाइल में जाकर और ऑटोकम्पलीट प्रोफाइल टाइप की एक प्रोफाइल कॉन्फ़िगर करके किसी भी मॉडल का उपयोग करें।", "model": "मॉडल", "provider": "प्रदाता", diff --git a/webview-ui/src/i18n/locales/id/kilocode.json b/webview-ui/src/i18n/locales/id/kilocode.json index 74c4c6c7c20..96de08b63dc 100644 --- a/webview-ui/src/i18n/locales/id/kilocode.json +++ b/webview-ui/src/i18n/locales/id/kilocode.json @@ -228,7 +228,6 @@ "description": "Perlu perbaikan cepat, penyelesaian, atau refaktor? Kilo akan menggunakan konteks sekitar untuk menawarkan perbaikan langsung, menjaga Anda tetap dalam alur. Lihat pintasan" }, "keybindingNotFound": "tidak ditemukan", - "noModelConfigured": "Tidak ditemukan model autocomplete yang sesuai. Silakan konfigurasi penyedia di pengaturan API.", "configureAutocompleteProfile": "Gunakan model apa pun dengan pergi ke profil dan mengonfigurasi Profil dengan Tipe Profil Autocomplete.", "model": "Model", "provider": "Penyedia", diff --git a/webview-ui/src/i18n/locales/it/kilocode.json b/webview-ui/src/i18n/locales/it/kilocode.json index 0dbd05d9bbf..6d71eacf45f 100644 --- a/webview-ui/src/i18n/locales/it/kilocode.json +++ b/webview-ui/src/i18n/locales/it/kilocode.json @@ -235,7 +235,6 @@ "description": "Hai bisogno di una correzione rapida, completamento o refactoring? Kilo userà il contesto circostante per offrire miglioramenti immediati, mantenendoti nel flusso. Modifica scorciatoia" }, "keybindingNotFound": "non trovato", - "noModelConfigured": "Nessun modello di autocompletamento adatto trovato. Configura un provider nelle impostazioni API.", "configureAutocompleteProfile": "Usa qualsiasi modello andando nei profili e configurando un Profilo del Tipo di Profilo Autocompletamento.", "model": "Modello", "provider": "Provider", diff --git a/webview-ui/src/i18n/locales/ja/kilocode.json b/webview-ui/src/i18n/locales/ja/kilocode.json index 8fb86d9585a..030878cdd67 100644 --- a/webview-ui/src/i18n/locales/ja/kilocode.json +++ b/webview-ui/src/i18n/locales/ja/kilocode.json @@ -242,7 +242,6 @@ "description": "素早い修正、補完、またはリファクタリングが必要?Kiloは周囲のコンテキストを使用して即座の改善を提供し、フローを維持します。ショートカットを見る" }, "keybindingNotFound": "見つかりません", - "noModelConfigured": "適切なオートコンプリートモデルが見つかりませんでした。API設定でプロバイダーを設定してください。", "configureAutocompleteProfile": "プロファイルに移動し、プロファイルタイプがオートコンプリートのプロファイルを設定することで、任意のモデルを使用できます。", "model": "モデル", "provider": "プロバイダー", diff --git a/webview-ui/src/i18n/locales/ko/kilocode.json b/webview-ui/src/i18n/locales/ko/kilocode.json index 0128986567f..fb6d4b0e088 100644 --- a/webview-ui/src/i18n/locales/ko/kilocode.json +++ b/webview-ui/src/i18n/locales/ko/kilocode.json @@ -242,7 +242,6 @@ "description": "빠른 수정, 완성 또는 리팩토링이 필요하신가요? Kilo가 주변 컨텍스트를 사용하여 즉각적인 개선사항을 제공하여 플로우를 유지합니다. 단축키 보기" }, "keybindingNotFound": "찾을 수 없음", - "noModelConfigured": "적합한 자동완성 모델을 찾을 수 없습니다. API 설정에서 제공자를 구성하세요.", "configureAutocompleteProfile": "프로필로 이동하여 프로필 유형이 자동완성인 프로필을 구성하면 모든 모델을 사용할 수 있습니다.", "model": "모델", "provider": "제공자", diff --git a/webview-ui/src/i18n/locales/nl/kilocode.json b/webview-ui/src/i18n/locales/nl/kilocode.json index 7b4a7aedade..25549cf6b0f 100644 --- a/webview-ui/src/i18n/locales/nl/kilocode.json +++ b/webview-ui/src/i18n/locales/nl/kilocode.json @@ -242,7 +242,6 @@ "description": "Heb je een snelle fix, voltooiing of refactor nodig? Kilo zal de omringende context gebruiken om onmiddellijke verbeteringen aan te bieden, waardoor je in de flow blijft. Sneltoets bewerken" }, "keybindingNotFound": "niet gevonden", - "noModelConfigured": "Geen geschikt autocomplete-model gevonden. Configureer een provider in de API-instellingen.", "configureAutocompleteProfile": "Gebruik elk model door naar profielen te gaan en een Profiel van het Profieltype Autocomplete te configureren.", "model": "Model", "provider": "Provider", diff --git a/webview-ui/src/i18n/locales/pl/kilocode.json b/webview-ui/src/i18n/locales/pl/kilocode.json index 3a55404042f..6466a82a742 100644 --- a/webview-ui/src/i18n/locales/pl/kilocode.json +++ b/webview-ui/src/i18n/locales/pl/kilocode.json @@ -235,7 +235,6 @@ "description": "Potrzebujesz szybkiej poprawki, uzupełnienia lub refaktoryzacji? Kilo użyje otaczającego kontekstu, aby zaoferować natychmiastowe ulepszenia, utrzymując cię w przepływie. Zobacz skrót" }, "keybindingNotFound": "nie znaleziono", - "noModelConfigured": "Nie znaleziono odpowiedniego modelu autouzupełniania. Skonfiguruj dostawcę w ustawieniach API.", "configureAutocompleteProfile": "Użyj dowolnego modelu, przechodząc do profili i konfigurując Profil typu Autouzupełnianie.", "model": "Model", "provider": "Dostawca", diff --git a/webview-ui/src/i18n/locales/pt-BR/kilocode.json b/webview-ui/src/i18n/locales/pt-BR/kilocode.json index e164a3f9b0d..1cc01d63b4f 100644 --- a/webview-ui/src/i18n/locales/pt-BR/kilocode.json +++ b/webview-ui/src/i18n/locales/pt-BR/kilocode.json @@ -235,7 +235,6 @@ "description": "Precisa de uma correção rápida, completação ou refatoração? O Kilo usará o contexto ao redor para oferecer melhorias imediatas, mantendo você no fluxo. Ver atalho" }, "keybindingNotFound": "não encontrado", - "noModelConfigured": "Nenhum modelo de autocompletar adequado encontrado. Configure um provedor nas configurações da API.", "configureAutocompleteProfile": "Use qualquer modelo indo para perfis e configurando um Perfil do Tipo de Perfil Autocompletar.", "model": "Modelo", "provider": "Provedor", diff --git a/webview-ui/src/i18n/locales/ru/kilocode.json b/webview-ui/src/i18n/locales/ru/kilocode.json index cac2fdfb609..b41d73c7259 100644 --- a/webview-ui/src/i18n/locales/ru/kilocode.json +++ b/webview-ui/src/i18n/locales/ru/kilocode.json @@ -235,7 +235,6 @@ "description": "Нужно быстрое исправление, дополнение или рефакторинг? Kilo использует окружающий контекст для немедленных улучшений, сохраняя тебя в потоке. Посмотреть горячую клавишу" }, "keybindingNotFound": "не найдено", - "noModelConfigured": "Подходящая модель автодополнения не найдена. Настрой провайдера в настройках API.", "configureAutocompleteProfile": "Используй любую модель, перейдя в профили и настроив Профиль типа Автодополнение.", "model": "Модель", "provider": "Провайдер", diff --git a/webview-ui/src/i18n/locales/th/kilocode.json b/webview-ui/src/i18n/locales/th/kilocode.json index c1e49c20642..91336f2ee24 100644 --- a/webview-ui/src/i18n/locales/th/kilocode.json +++ b/webview-ui/src/i18n/locales/th/kilocode.json @@ -242,7 +242,6 @@ "description": "ต้องการการแก้ไขด่วน การเติมเต็ม หรือการปรับโครงสร้างใหม่? Kilo จะใช้บริบทโดยรอบเพื่อเสนอการปรับปรุงทันที ทำให้คุณอยู่ในขั้นตอนการทำงาน ดูทางลัด" }, "keybindingNotFound": "ไม่พบ", - "noModelConfigured": "ไม่พบโมเดลเติมข้อความอัตโนมัติที่เหมาะสม กรุณาตั้งค่าผู้ให้บริการในการตั้งค่า API", "configureAutocompleteProfile": "ใช้โมเดลใดก็ได้โดยไปที่โปรไฟล์และตั้งค่าโปรไฟล์ประเภทเติมข้อความอัตโนมัติ", "model": "โมเดล", "provider": "ผู้ให้บริการ", diff --git a/webview-ui/src/i18n/locales/tr/kilocode.json b/webview-ui/src/i18n/locales/tr/kilocode.json index 5871322b947..0cbfd1f64ff 100644 --- a/webview-ui/src/i18n/locales/tr/kilocode.json +++ b/webview-ui/src/i18n/locales/tr/kilocode.json @@ -235,7 +235,6 @@ "description": "Hızlı bir düzeltme, tamamlama veya yeniden düzenleme mi gerekiyor? Kilo çevredeki bağlamı kullanarak anında iyileştirmeler sunacak, seni akışta tutacak. Kısayolu gör" }, "keybindingNotFound": "bulunamadı", - "noModelConfigured": "Uygun otomatik tamamlama modeli bulunamadı. Lütfen API ayarlarında bir sağlayıcı yapılandır.", "configureAutocompleteProfile": "Profillere giderek ve Otomatik Tamamlama Profil Türünde bir Profil yapılandırarak herhangi bir model kullan.", "model": "Model", "provider": "Sağlayıcı", diff --git a/webview-ui/src/i18n/locales/uk/kilocode.json b/webview-ui/src/i18n/locales/uk/kilocode.json index db8bc5fb3be..4c47a854273 100644 --- a/webview-ui/src/i18n/locales/uk/kilocode.json +++ b/webview-ui/src/i18n/locales/uk/kilocode.json @@ -242,7 +242,6 @@ "description": "Потрібне швидке виправлення, доповнення або рефакторинг? Kilo використає навколишній контекст для миттєвих покращень, зберігаючи тебе в потоці. Подивитися гарячу клавішу" }, "keybindingNotFound": "не знайдено", - "noModelConfigured": "Не знайдено відповідної моделі автодоповнення. Налаштуй провайдера в налаштуваннях API.", "configureAutocompleteProfile": "Використовуй будь-яку модель, перейшовши до профілів і налаштувавши Профіль типу Автодоповнення.", "model": "Модель", "provider": "Провайдер", diff --git a/webview-ui/src/i18n/locales/vi/kilocode.json b/webview-ui/src/i18n/locales/vi/kilocode.json index fe4f4839749..85891bef095 100644 --- a/webview-ui/src/i18n/locales/vi/kilocode.json +++ b/webview-ui/src/i18n/locales/vi/kilocode.json @@ -235,7 +235,6 @@ "description": "Cần sửa chữa nhanh, hoàn thành, hoặc tái cấu trúc? Kilo sẽ sử dụng ngữ cảnh xung quanh để cung cấp cải tiến ngay lập tức, giữ bạn trong luồng làm việc. Xem phím tắt" }, "keybindingNotFound": "không tìm thấy", - "noModelConfigured": "Không tìm thấy mô hình tự động hoàn thành phù hợp. Vui lòng cấu hình nhà cung cấp trong cài đặt API.", "configureAutocompleteProfile": "Sử dụng bất kỳ mô hình nào bằng cách vào hồ sơ và cấu hình Hồ sơ có Loại Hồ sơ là Tự động hoàn thành.", "model": "Mô hình", "provider": "Nhà cung cấp", diff --git a/webview-ui/src/i18n/locales/zh-CN/kilocode.json b/webview-ui/src/i18n/locales/zh-CN/kilocode.json index 7e2e57de20f..3fbdaf8b8cb 100644 --- a/webview-ui/src/i18n/locales/zh-CN/kilocode.json +++ b/webview-ui/src/i18n/locales/zh-CN/kilocode.json @@ -242,7 +242,6 @@ "description": "需要快速修复、补全或重构?Kilo 将使用周围上下文提供即时改进,保持你的工作流。查看快捷键" }, "keybindingNotFound": "未找到", - "noModelConfigured": "未找到合适的自动补全模型。请在 API 设置中配置提供商。", "configureAutocompleteProfile": "前往配置文件并配置自动补全类型的配置文件即可使用任意模型。", "model": "模型", "provider": "提供商", diff --git a/webview-ui/src/i18n/locales/zh-TW/kilocode.json b/webview-ui/src/i18n/locales/zh-TW/kilocode.json index cc4c713240d..d5130384bfe 100644 --- a/webview-ui/src/i18n/locales/zh-TW/kilocode.json +++ b/webview-ui/src/i18n/locales/zh-TW/kilocode.json @@ -237,7 +237,6 @@ "description": "需要快速修正、補全或重構?Kilo 將使用周圍內容提供即時改進,保持你的工作流程。檢視快速鍵" }, "keybindingNotFound": "未找到", - "noModelConfigured": "找不到合適的自動補全模型。請在 API 設定中配置提供者。", "configureAutocompleteProfile": "前往設定檔並設定自動補全類型的設定檔即可使用任意模型。", "model": "模型", "provider": "供應商", From 78374eadda527082aed21236db42e20c483772ec Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 13:32:03 +0100 Subject: [PATCH 04/13] add translations --- webview-ui/src/i18n/locales/ar/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ca/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/cs/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/de/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/es/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/fr/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/hi/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/id/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/it/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ja/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ko/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/nl/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/pl/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/pt-BR/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ru/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/th/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/tr/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/uk/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/vi/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/zh-CN/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/zh-TW/kilocode.json | 5 +++++ 21 files changed, 105 insertions(+) diff --git a/webview-ui/src/i18n/locales/ar/kilocode.json b/webview-ui/src/i18n/locales/ar/kilocode.json index e4a57475e02..3f876ccdb99 100644 --- a/webview-ui/src/i18n/locales/ar/kilocode.json +++ b/webview-ui/src/i18n/locales/ar/kilocode.json @@ -257,6 +257,11 @@ "30min": "30 دقيقة", "1hour": "ساعة واحدة" } + }, + "noModelConfigured": { + "title": "لم يتم تكوين نموذج للإكمال التلقائي", + "description": "لتفعيل الإكمال التلقائي، أضف ملفًا شخصيًا مع أحد هذه المزودين المدعومين:", + "learnMore": "تعرف على المزيد حول إعداد الإكمال التلقائي ←" } } }, diff --git a/webview-ui/src/i18n/locales/ca/kilocode.json b/webview-ui/src/i18n/locales/ca/kilocode.json index 00f265a14cb..319bf3cec35 100644 --- a/webview-ui/src/i18n/locales/ca/kilocode.json +++ b/webview-ui/src/i18n/locales/ca/kilocode.json @@ -248,6 +248,11 @@ "30min": "30 minuts", "1hour": "1 hora" } + }, + "noModelConfigured": { + "title": "No s'ha configurat cap model d'autocompletat", + "description": "Per habilitar l'autocompletat, afegeix un perfil amb un d'aquests proveïdors compatibles:", + "learnMore": "Més informació sobre la configuració de l'autocompletat →" } } }, diff --git a/webview-ui/src/i18n/locales/cs/kilocode.json b/webview-ui/src/i18n/locales/cs/kilocode.json index 86f3530bd56..0107d74e71b 100644 --- a/webview-ui/src/i18n/locales/cs/kilocode.json +++ b/webview-ui/src/i18n/locales/cs/kilocode.json @@ -262,6 +262,11 @@ "30min": "30 minut", "1hour": "1 hodina" } + }, + "noModelConfigured": { + "title": "Není nakonfigurován žádný model pro automatické dokončování", + "description": "Pro povolení automatického dokončování přidejte profil s jedním z těchto podporovaných poskytovatelů:", + "learnMore": "Zjistěte více o nastavení automatického dokončování →" } } }, diff --git a/webview-ui/src/i18n/locales/de/kilocode.json b/webview-ui/src/i18n/locales/de/kilocode.json index fb7fb10c217..201d1dd7291 100644 --- a/webview-ui/src/i18n/locales/de/kilocode.json +++ b/webview-ui/src/i18n/locales/de/kilocode.json @@ -254,6 +254,11 @@ "30min": "30 Minuten", "1hour": "1 Stunde" } + }, + "noModelConfigured": { + "title": "Kein Autocomplete-Modell konfiguriert", + "description": "Um Autocomplete zu aktivieren, füge ein Profil mit einem dieser unterstützten Anbieter hinzu:", + "learnMore": "Mehr über die Autocomplete-Einrichtung erfahren →" } } }, diff --git a/webview-ui/src/i18n/locales/es/kilocode.json b/webview-ui/src/i18n/locales/es/kilocode.json index c26f6021bf5..b4311a59f7e 100644 --- a/webview-ui/src/i18n/locales/es/kilocode.json +++ b/webview-ui/src/i18n/locales/es/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 minutos", "1hour": "1 hora" } + }, + "noModelConfigured": { + "title": "No hay modelo de autocompletado configurado", + "description": "Para habilitar el autocompletado, añade un perfil con uno de estos proveedores compatibles:", + "learnMore": "Más información sobre la configuración del autocompletado →" } } }, diff --git a/webview-ui/src/i18n/locales/fr/kilocode.json b/webview-ui/src/i18n/locales/fr/kilocode.json index 5f05011fe4b..262fec67789 100644 --- a/webview-ui/src/i18n/locales/fr/kilocode.json +++ b/webview-ui/src/i18n/locales/fr/kilocode.json @@ -262,6 +262,11 @@ "30min": "30 minutes", "1hour": "1 heure" } + }, + "noModelConfigured": { + "title": "Aucun modèle d'autocomplétion configuré", + "description": "Pour activer l'autocomplétion, ajoutez un profil avec l'un de ces fournisseurs pris en charge :", + "learnMore": "En savoir plus sur la configuration de l'autocomplétion →" } } }, diff --git a/webview-ui/src/i18n/locales/hi/kilocode.json b/webview-ui/src/i18n/locales/hi/kilocode.json index b489179e739..bca3ba1c8dc 100644 --- a/webview-ui/src/i18n/locales/hi/kilocode.json +++ b/webview-ui/src/i18n/locales/hi/kilocode.json @@ -248,6 +248,11 @@ "30min": "30 मिनट", "1hour": "1 घंटा" } + }, + "noModelConfigured": { + "title": "कोई ऑटोकम्पलीट मॉडल कॉन्फ़िगर नहीं है", + "description": "ऑटोकम्पलीट सक्षम करने के लिए, इन समर्थित प्रदाताओं में से एक के साथ प्रोफ़ाइल जोड़ें:", + "learnMore": "ऑटोकम्पलीट सेटअप के बारे में और जानें →" } } }, diff --git a/webview-ui/src/i18n/locales/id/kilocode.json b/webview-ui/src/i18n/locales/id/kilocode.json index 96de08b63dc..95b9a1f21ac 100644 --- a/webview-ui/src/i18n/locales/id/kilocode.json +++ b/webview-ui/src/i18n/locales/id/kilocode.json @@ -248,6 +248,11 @@ "30min": "30 menit", "1hour": "1 jam" } + }, + "noModelConfigured": { + "title": "Tidak ada model autocomplete yang dikonfigurasi", + "description": "Untuk mengaktifkan autocomplete, tambahkan profil dengan salah satu penyedia yang didukung ini:", + "learnMore": "Pelajari lebih lanjut tentang pengaturan autocomplete →" } } }, diff --git a/webview-ui/src/i18n/locales/it/kilocode.json b/webview-ui/src/i18n/locales/it/kilocode.json index 6d71eacf45f..f695d5bdc2f 100644 --- a/webview-ui/src/i18n/locales/it/kilocode.json +++ b/webview-ui/src/i18n/locales/it/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 minuti", "1hour": "1 ora" } + }, + "noModelConfigured": { + "title": "Nessun modello di autocompletamento configurato", + "description": "Per abilitare l'autocompletamento, aggiungi un profilo con uno di questi provider supportati:", + "learnMore": "Scopri di più sulla configurazione dell'autocompletamento →" } } }, diff --git a/webview-ui/src/i18n/locales/ja/kilocode.json b/webview-ui/src/i18n/locales/ja/kilocode.json index 030878cdd67..452773e024f 100644 --- a/webview-ui/src/i18n/locales/ja/kilocode.json +++ b/webview-ui/src/i18n/locales/ja/kilocode.json @@ -262,6 +262,11 @@ "30min": "30分", "1hour": "1時間" } + }, + "noModelConfigured": { + "title": "オートコンプリートモデルが設定されていません", + "description": "オートコンプリートを有効にするには、以下のサポートされているプロバイダーのいずれかでプロファイルを追加してください:", + "learnMore": "オートコンプリートの設定について詳しく →" } } }, diff --git a/webview-ui/src/i18n/locales/ko/kilocode.json b/webview-ui/src/i18n/locales/ko/kilocode.json index fb6d4b0e088..7687d95026f 100644 --- a/webview-ui/src/i18n/locales/ko/kilocode.json +++ b/webview-ui/src/i18n/locales/ko/kilocode.json @@ -262,6 +262,11 @@ "30min": "30분", "1hour": "1시간" } + }, + "noModelConfigured": { + "title": "자동완성 모델이 구성되지 않았습니다", + "description": "자동완성을 활성화하려면 다음 지원되는 공급자 중 하나로 프로필을 추가하세요:", + "learnMore": "자동완성 설정에 대해 자세히 알아보기 →" } } }, diff --git a/webview-ui/src/i18n/locales/nl/kilocode.json b/webview-ui/src/i18n/locales/nl/kilocode.json index 25549cf6b0f..d5368bd8236 100644 --- a/webview-ui/src/i18n/locales/nl/kilocode.json +++ b/webview-ui/src/i18n/locales/nl/kilocode.json @@ -262,6 +262,11 @@ "30min": "30 minuten", "1hour": "1 uur" } + }, + "noModelConfigured": { + "title": "Geen autocomplete-model geconfigureerd", + "description": "Om autocomplete in te schakelen, voeg een profiel toe met een van deze ondersteunde providers:", + "learnMore": "Meer informatie over autocomplete-configuratie →" } } }, diff --git a/webview-ui/src/i18n/locales/pl/kilocode.json b/webview-ui/src/i18n/locales/pl/kilocode.json index 6466a82a742..ebd2522b91e 100644 --- a/webview-ui/src/i18n/locales/pl/kilocode.json +++ b/webview-ui/src/i18n/locales/pl/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 minut", "1hour": "1 godzina" } + }, + "noModelConfigured": { + "title": "Nie skonfigurowano modelu autouzupełniania", + "description": "Aby włączyć autouzupełnianie, dodaj profil z jednym z tych obsługiwanych dostawców:", + "learnMore": "Dowiedz się więcej o konfiguracji autouzupełniania →" } } }, diff --git a/webview-ui/src/i18n/locales/pt-BR/kilocode.json b/webview-ui/src/i18n/locales/pt-BR/kilocode.json index 1cc01d63b4f..3f32232f7c9 100644 --- a/webview-ui/src/i18n/locales/pt-BR/kilocode.json +++ b/webview-ui/src/i18n/locales/pt-BR/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 minutos", "1hour": "1 hora" } + }, + "noModelConfigured": { + "title": "Nenhum modelo de autocomplete configurado", + "description": "Para habilitar o autocomplete, adicione um perfil com um destes provedores suportados:", + "learnMore": "Saiba mais sobre a configuração do autocomplete →" } } }, diff --git a/webview-ui/src/i18n/locales/ru/kilocode.json b/webview-ui/src/i18n/locales/ru/kilocode.json index b41d73c7259..c49d723e22d 100644 --- a/webview-ui/src/i18n/locales/ru/kilocode.json +++ b/webview-ui/src/i18n/locales/ru/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 минут", "1hour": "1 час" } + }, + "noModelConfigured": { + "title": "Модель автодополнения не настроена", + "description": "Чтобы включить автодополнение, добавьте профиль с одним из этих поддерживаемых провайдеров:", + "learnMore": "Узнать больше о настройке автодополнения →" } } }, diff --git a/webview-ui/src/i18n/locales/th/kilocode.json b/webview-ui/src/i18n/locales/th/kilocode.json index 91336f2ee24..49d6ac6790b 100644 --- a/webview-ui/src/i18n/locales/th/kilocode.json +++ b/webview-ui/src/i18n/locales/th/kilocode.json @@ -262,6 +262,11 @@ "30min": "30 นาที", "1hour": "1 ชั่วโมง" } + }, + "noModelConfigured": { + "title": "ยังไม่ได้กำหนดค่าโมเดล Autocomplete", + "description": "หากต้องการเปิดใช้งาน Autocomplete ให้เพิ่มโปรไฟล์ที่มีผู้ให้บริการที่รองรับเหล่านี้:", + "learnMore": "เรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่า Autocomplete →" } } }, diff --git a/webview-ui/src/i18n/locales/tr/kilocode.json b/webview-ui/src/i18n/locales/tr/kilocode.json index 0cbfd1f64ff..65abff65976 100644 --- a/webview-ui/src/i18n/locales/tr/kilocode.json +++ b/webview-ui/src/i18n/locales/tr/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 dakika", "1hour": "1 saat" } + }, + "noModelConfigured": { + "title": "Otomatik tamamlama modeli yapılandırılmadı", + "description": "Otomatik tamamlamayı etkinleştirmek için desteklenen bu sağlayıcılardan biriyle bir profil ekleyin:", + "learnMore": "Otomatik tamamlama kurulumu hakkında daha fazla bilgi →" } } }, diff --git a/webview-ui/src/i18n/locales/uk/kilocode.json b/webview-ui/src/i18n/locales/uk/kilocode.json index 4c47a854273..dd29f82adc0 100644 --- a/webview-ui/src/i18n/locales/uk/kilocode.json +++ b/webview-ui/src/i18n/locales/uk/kilocode.json @@ -262,6 +262,11 @@ "30min": "30 хвилин", "1hour": "1 година" } + }, + "noModelConfigured": { + "title": "Модель автодоповнення не налаштована", + "description": "Щоб увімкнути автодоповнення, додайте профіль з одним із цих підтримуваних провайдерів:", + "learnMore": "Дізнатися більше про налаштування автодоповнення →" } } }, diff --git a/webview-ui/src/i18n/locales/vi/kilocode.json b/webview-ui/src/i18n/locales/vi/kilocode.json index 85891bef095..ea168c749c0 100644 --- a/webview-ui/src/i18n/locales/vi/kilocode.json +++ b/webview-ui/src/i18n/locales/vi/kilocode.json @@ -255,6 +255,11 @@ "30min": "30 phút", "1hour": "1 giờ" } + }, + "noModelConfigured": { + "title": "Chưa cấu hình mô hình tự động hoàn thành", + "description": "Để bật tự động hoàn thành, hãy thêm hồ sơ với một trong các nhà cung cấp được hỗ trợ sau:", + "learnMore": "Tìm hiểu thêm về cách thiết lập tự động hoàn thành →" } } }, diff --git a/webview-ui/src/i18n/locales/zh-CN/kilocode.json b/webview-ui/src/i18n/locales/zh-CN/kilocode.json index 3fbdaf8b8cb..e56f31c0f67 100644 --- a/webview-ui/src/i18n/locales/zh-CN/kilocode.json +++ b/webview-ui/src/i18n/locales/zh-CN/kilocode.json @@ -262,6 +262,11 @@ "30min": "30 分钟", "1hour": "1 小时" } + }, + "noModelConfigured": { + "title": "未配置自动补全模型", + "description": "要启用自动补全,请添加一个使用以下支持的提供商的配置文件:", + "learnMore": "了解更多关于自动补全设置 →" } } }, diff --git a/webview-ui/src/i18n/locales/zh-TW/kilocode.json b/webview-ui/src/i18n/locales/zh-TW/kilocode.json index d5130384bfe..9f695163158 100644 --- a/webview-ui/src/i18n/locales/zh-TW/kilocode.json +++ b/webview-ui/src/i18n/locales/zh-TW/kilocode.json @@ -257,6 +257,11 @@ "30min": "30 分鐘", "1hour": "1 小時" } + }, + "noModelConfigured": { + "title": "未設定自動補全模型", + "description": "若要啟用自動補全,請新增一個使用以下支援供應商的設定檔:", + "learnMore": "了解更多關於自動補全設定 →" } } }, From 09a904f5b224eb9b20e83e4a1d63a76c57024a15 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 14:08:03 +0100 Subject: [PATCH 05/13] chore: update displayName to include Copilot and Autocomplete keywords Update the extension displayName from 'Kilo Code AI Agent' to 'Kilo Code: AI Coding Agent, Copilot, and Autocomplete' for better marketplace discoverability. The displayName is kept in English across all 22 locale files since it's a product/brand name that appears in the VS Code marketplace. --- src/package.nls.ar.json | 2 +- src/package.nls.ca.json | 2 +- src/package.nls.cs.json | 2 +- src/package.nls.de.json | 2 +- src/package.nls.es.json | 2 +- src/package.nls.fr.json | 2 +- src/package.nls.hi.json | 2 +- src/package.nls.id.json | 2 +- src/package.nls.it.json | 2 +- src/package.nls.ja.json | 2 +- src/package.nls.json | 2 +- src/package.nls.ko.json | 2 +- src/package.nls.nl.json | 2 +- src/package.nls.pl.json | 2 +- src/package.nls.pt-BR.json | 2 +- src/package.nls.ru.json | 2 +- src/package.nls.th.json | 2 +- src/package.nls.tr.json | 2 +- src/package.nls.uk.json | 2 +- src/package.nls.vi.json | 2 +- src/package.nls.zh-CN.json | 2 +- src/package.nls.zh-TW.json | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/package.nls.ar.json b/src/package.nls.ar.json index 769cb10f410..aa27fa3a58d 100644 --- a/src/package.nls.ar.json +++ b/src/package.nls.ar.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code وكيل ذكاء اصطناعي", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "مساعد برمجة ذكاء اصطناعي مفتوح المصدر يساعدك تخطط وتبني وتعدل الكود.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 66ffc730832..003278b55b1 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code Agent d'IA", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Assistent de codificació de IA de codi obert per planificar, crear i corregir codi.", "command.newTask.title": "Nova Tasca", "command.explainCode.title": "Explicar Codi", diff --git a/src/package.nls.cs.json b/src/package.nls.cs.json index 2dcfecb6fc5..c780729483e 100644 --- a/src/package.nls.cs.json +++ b/src/package.nls.cs.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Open Source AI asistent pro kódování pro plánování, vytváření a opravy kódu.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 67de6b584ac..7d299de9050 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code KI-Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Open-Source-KI-Codierungsassistent zum Planen, Erstellen und Korrigieren von Code.", "command.newTask.title": "Neue Aufgabe", "command.explainCode.title": "Code Erklären", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index d0a2780edde..06c744cd850 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Asistente de codificación de IA de código abierto para planificar, crear y corregir código.", "command.newTask.title": "Nueva Tarea", "command.explainCode.title": "Explicar Código", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index d2f5801caa0..074188493ca 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Agent IA Kilo Code", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Assistant de codage d'IA Open Source pour la planification, la création et la correction de code.", "command.newTask.title": "Nouvelle Tâche", "command.explainCode.title": "Expliquer le Code", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index d994bd46019..c6d33b63c0f 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "कोड की योजना बनाने, निर्माण करने और उसे ठीक करने के लिए ओपन सोर्स एआई कोडिंग सहायक।", "command.newTask.title": "नया कार्य", "command.explainCode.title": "कोड समझाएं", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 80814173a51..dcc1f1d4de6 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Asisten coding AI Open Source untuk merencanakan, membangun, dan memperbaiki kode.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index c6611d81b40..ce06b0c7b95 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code Agente AI", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Assistente di programmazione AI open source per la pianificazione, la creazione e la correzione del codice.", "command.newTask.title": "Nuovo Task", "command.explainCode.title": "Spiega Codice", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index 1f456a84e15..3f6c651f4fa 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AIエージェント", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "コードの計画、構築、修正のためのオープンソース AI コーディング アシスタント。", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.json b/src/package.nls.json index 92ad0cca348..9b6ffe95a54 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Open Source AI coding assistant for planning, building, and fixing code.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index f7fa04e23c1..cfa00e66624 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI 에이전트", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "코드를 계획, 빌드, 수정하기 위한 오픈소스 AI 코딩 도우미입니다.", "command.newTask.title": "새 작업", "command.explainCode.title": "코드 설명", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 5521888ab93..554f48cda57 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Een compleet ontwikkelteam van AI-agents in je editor.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index eb4b1cb2c06..55f3c818ae0 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code Agent AI", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Asystent kodowania AI o otwartym kodzie źródłowym do planowania, tworzenia i naprawiania kodu.", "command.newTask.title": "Nowe Zadanie", "command.explainCode.title": "Wyjaśnij Kod", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 1f74deb8d21..f468b8f5bf3 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Assistente de codificação de IA de código aberto para planejamento, construção e correção de código.", "command.newTask.title": "Nova Tarefa", "command.explainCode.title": "Explicar Código", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index 0ef6ef02ba8..e35c895ab38 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Целая команда ИИ-разработчиков в вашем редакторе.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.th.json b/src/package.nls.th.json index b4e8eb3b18f..d546a97a219 100644 --- a/src/package.nls.th.json +++ b/src/package.nls.th.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "ผู้ช่วยเขียนโค้ด AI แบบ Open Source สำหรับการวางแผน สร้าง และแก้ไขโค้ด", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index 5dad7fee386..fa9bb944df4 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Kod planlama, oluşturma ve düzeltme için açık kaynaklı yapay zeka kodlama asistanı.", "command.newTask.title": "Yeni Görev", "command.explainCode.title": "Kodu Açıkla", diff --git a/src/package.nls.uk.json b/src/package.nls.uk.json index c012c158998..714cea5b68a 100644 --- a/src/package.nls.uk.json +++ b/src/package.nls.uk.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Помічник з кодування AI з відкритим кодом для планування, створення та виправлення коду.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index ea8e7204538..8811f5056ff 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI Agent", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "Trợ lý mã hóa AI nguồn mở để lập kế hoạch, xây dựng và sửa mã.", "command.newTask.title": "Tác Vụ Mới", "command.explainCode.title": "Giải Thích Mã", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 6542887456a..084213d14bb 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI 代理", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "用于规划、构建和修复代码的开源 AI 编码助手。", "command.newTask.title": "新建任务", "command.explainCode.title": "解释代码", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index 5c9095fb125..260f6bcb618 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code AI 代理", + "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", "extension.description": "用於規劃、建置和修復程式碼的開源 AI 開發助理。", "command.newTask.title": "新建任務", "command.explainCode.title": "解釋程式碼", From 621994cb62cf56217b5abccd22d5a2c4e0df5296 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 14:10:36 +0100 Subject: [PATCH 06/13] docs: add inline autocomplete to README features Add inline autocomplete as a feature in both the quick overview bullet list and the Key Features section. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 43b828714eb..e5a814d190b 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - ✅ Checks its own work - 🧪 Run terminal commands - 🌐 Automate the browser +- ⚡ Inline autocomplete suggestions - 🤖 Latest AI models - 🎁 API keys optional - 💡 **Get $20 in bonus credits when you top-up for the first time** Credits can be used with 500+ models like Gemini 3 Pro, Claude 4.5 Sonnet & Opus, and GPT-5 @@ -29,6 +30,7 @@ ## Key Features - **Code Generation:** Kilo can generate code using natural language. +- **Inline Autocomplete:** Get intelligent code completions as you type, powered by AI. - **Task Automation:** Kilo can automate repetitive coding tasks. - **Automated Refactoring:** Kilo can refactor and improve existing code. - **MCP Server Marketplace**: Kilo can easily find, and use MCP servers to extend the agent capabilities. From 1795a8c7b6fa6077fac477ec5e79c46e49aa4ff9 Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:29:13 +0000 Subject: [PATCH 07/13] i18n: translate displayName to all languages Translate the extension displayName 'AI Coding Agent, Copilot, and Autocomplete' to all 21 supported languages while keeping 'Kilo Code' unchanged for brand consistency. --- src/package.nls.ar.json | 2 +- src/package.nls.ca.json | 2 +- src/package.nls.cs.json | 2 +- src/package.nls.de.json | 2 +- src/package.nls.es.json | 2 +- src/package.nls.fr.json | 2 +- src/package.nls.hi.json | 2 +- src/package.nls.id.json | 2 +- src/package.nls.it.json | 2 +- src/package.nls.ja.json | 2 +- src/package.nls.ko.json | 2 +- src/package.nls.nl.json | 2 +- src/package.nls.pl.json | 2 +- src/package.nls.pt-BR.json | 2 +- src/package.nls.ru.json | 2 +- src/package.nls.th.json | 2 +- src/package.nls.tr.json | 2 +- src/package.nls.uk.json | 2 +- src/package.nls.vi.json | 2 +- src/package.nls.zh-CN.json | 2 +- src/package.nls.zh-TW.json | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/package.nls.ar.json b/src/package.nls.ar.json index aa27fa3a58d..5440163465a 100644 --- a/src/package.nls.ar.json +++ b/src/package.nls.ar.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: وكيل برمجة الذكاء الاصطناعي، Copilot، والإكمال التلقائي", "extension.description": "مساعد برمجة ذكاء اصطناعي مفتوح المصدر يساعدك تخطط وتبني وتعدل الكود.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 003278b55b1..10ae16381f3 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agent de Codificació IA, Copilot i Autocompletat", "extension.description": "Assistent de codificació de IA de codi obert per planificar, crear i corregir codi.", "command.newTask.title": "Nova Tasca", "command.explainCode.title": "Explicar Codi", diff --git a/src/package.nls.cs.json b/src/package.nls.cs.json index c780729483e..b02203fedb5 100644 --- a/src/package.nls.cs.json +++ b/src/package.nls.cs.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI Kódovací Agent, Copilot a Automatické Dokončování", "extension.description": "Open Source AI asistent pro kódování pro plánování, vytváření a opravy kódu.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 7d299de9050..3a130b601b7 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: KI-Codierungs-Agent, Copilot und Autovervollständigung", "extension.description": "Open-Source-KI-Codierungsassistent zum Planen, Erstellen und Korrigieren von Code.", "command.newTask.title": "Neue Aufgabe", "command.explainCode.title": "Code Erklären", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index 06c744cd850..fe62ce31c48 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agente de Codificación IA, Copilot y Autocompletado", "extension.description": "Asistente de codificación de IA de código abierto para planificar, crear y corregir código.", "command.newTask.title": "Nueva Tarea", "command.explainCode.title": "Explicar Código", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index 074188493ca..e5e212e3523 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agent de Codage IA, Copilot et Autocomplétion", "extension.description": "Assistant de codage d'IA Open Source pour la planification, la création et la correction de code.", "command.newTask.title": "Nouvelle Tâche", "command.explainCode.title": "Expliquer le Code", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index c6d33b63c0f..109f6cf46a7 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI कोडिंग एजेंट, Copilot और ऑटोकम्पलीट", "extension.description": "कोड की योजना बनाने, निर्माण करने और उसे ठीक करने के लिए ओपन सोर्स एआई कोडिंग सहायक।", "command.newTask.title": "नया कार्य", "command.explainCode.title": "कोड समझाएं", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index dcc1f1d4de6..5e6c794b8df 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agen Pengkodean AI, Copilot, dan Pelengkapan Otomatis", "extension.description": "Asisten coding AI Open Source untuk merencanakan, membangun, dan memperbaiki kode.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index ce06b0c7b95..c39ed4c35d2 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agente di Codifica IA, Copilot e Completamento Automatico", "extension.description": "Assistente di programmazione AI open source per la pianificazione, la creazione e la correzione del codice.", "command.newTask.title": "Nuovo Task", "command.explainCode.title": "Spiega Codice", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index 3f6c651f4fa..6ffbf489378 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AIコーディングエージェント、Copilot、および自動補完", "extension.description": "コードの計画、構築、修正のためのオープンソース AI コーディング アシスタント。", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index cfa00e66624..7839995e322 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI 코딩 에이전트, Copilot 및 자동 완성", "extension.description": "코드를 계획, 빌드, 수정하기 위한 오픈소스 AI 코딩 도우미입니다.", "command.newTask.title": "새 작업", "command.explainCode.title": "코드 설명", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 554f48cda57..e00cf9bce02 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI Codeer Agent, Copilot en Automatisch Aanvullen", "extension.description": "Een compleet ontwikkelteam van AI-agents in je editor.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 55f3c818ae0..ea4a61cf980 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agent Kodowania AI, Copilot i Autouzupełnianie", "extension.description": "Asystent kodowania AI o otwartym kodzie źródłowym do planowania, tworzenia i naprawiania kodu.", "command.newTask.title": "Nowe Zadanie", "command.explainCode.title": "Wyjaśnij Kod", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index f468b8f5bf3..3968c8b7fc2 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Agente de Codificação IA, Copilot e Autocompletar", "extension.description": "Assistente de codificação de IA de código aberto para planejamento, construção e correção de código.", "command.newTask.title": "Nova Tarefa", "command.explainCode.title": "Explicar Código", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index e35c895ab38..63d44a6e762 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI-агент для кодирования, Copilot и автозаполнение", "extension.description": "Целая команда ИИ-разработчиков в вашем редакторе.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.th.json b/src/package.nls.th.json index d546a97a219..b3a1a7ca6ea 100644 --- a/src/package.nls.th.json +++ b/src/package.nls.th.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: เอเจนต์เขียนโค้ด AI, Copilot และการเติมข้อความอัตโนมัติ", "extension.description": "ผู้ช่วยเขียนโค้ด AI แบบ Open Source สำหรับการวางแผน สร้าง และแก้ไขโค้ด", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index fa9bb944df4..700cfae0e78 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI Kodlama Ajanı, Copilot ve Otomatik Tamamlama", "extension.description": "Kod planlama, oluşturma ve düzeltme için açık kaynaklı yapay zeka kodlama asistanı.", "command.newTask.title": "Yeni Görev", "command.explainCode.title": "Kodu Açıkla", diff --git a/src/package.nls.uk.json b/src/package.nls.uk.json index 714cea5b68a..64944c07859 100644 --- a/src/package.nls.uk.json +++ b/src/package.nls.uk.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI-агент для кодування, Copilot та автозаповнення", "extension.description": "Помічник з кодування AI з відкритим кодом для планування, створення та виправлення коду.", "views.contextMenu.label": "Kilo Code", "views.terminalMenu.label": "Kilo Code", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 8811f5056ff..53891da4966 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: Trợ lý Lập trình AI, Copilot và Tự động Hoàn thành", "extension.description": "Trợ lý mã hóa AI nguồn mở để lập kế hoạch, xây dựng và sửa mã.", "command.newTask.title": "Tác Vụ Mới", "command.explainCode.title": "Giải Thích Mã", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 084213d14bb..53ad3e372a4 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI 编码代理、Copilot 和自动补全", "extension.description": "用于规划、构建和修复代码的开源 AI 编码助手。", "command.newTask.title": "新建任务", "command.explainCode.title": "解释代码", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index 260f6bcb618..1931e31c877 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -1,5 +1,5 @@ { - "extension.displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete", + "extension.displayName": "Kilo Code: AI 編碼代理、Copilot 和自動完成", "extension.description": "用於規劃、建置和修復程式碼的開源 AI 開發助理。", "command.newTask.title": "新建任務", "command.explainCode.title": "解釋程式碼", From 641e16d6ecc7c232451359a003f65607b184dfbc Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Mon, 5 Jan 2026 15:25:29 +0100 Subject: [PATCH 08/13] fix: update test selectors for split translation keys --- .../settings/__tests__/GhostServiceSettings.spec.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx b/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx index 29a6a3fd753..89dd22232ff 100644 --- a/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx +++ b/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx @@ -241,7 +241,7 @@ describe("GhostServiceSettingsView", () => { }, }) - expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured/)).toBeInTheDocument() + expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured.title/)).toBeInTheDocument() }) it("displays error message when only provider is missing", () => { @@ -253,7 +253,7 @@ describe("GhostServiceSettingsView", () => { }, }) - expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured/)).toBeInTheDocument() + expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured.title/)).toBeInTheDocument() }) it("displays error message when only model is missing", () => { @@ -265,7 +265,7 @@ describe("GhostServiceSettingsView", () => { }, }) - expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured/)).toBeInTheDocument() + expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured.title/)).toBeInTheDocument() }) describe("snooze status refresh", () => { From 383c56e3c57ffd6cfe28ce1b6adb4aa618e398e7 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 6 Jan 2026 09:02:40 +0100 Subject: [PATCH 09/13] refactor: consolidate last suggestion tracking into single object - Add LastSuggestionInfo type to track languageId and length together - Replace separate lastSuggestionLanguageId and lastSuggestionLength fields with single lastSuggestion object - Update telemetry tracking to use actual suggestion length instead of undefined - Update tests to expect actual suggestion length in acceptance telemetry --- .../GhostInlineCompletionProvider.ts | 13 ++++++++++++- src/services/ghost/types.ts | 9 +++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts b/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts index 3382602959b..eb79d3a2d8f 100644 --- a/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts +++ b/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts @@ -11,6 +11,7 @@ import { LLMRetrievalResult, PendingRequest, AutocompleteContext, + LastSuggestionInfo, } from "../types" import { HoleFiller } from "./HoleFiller" import { FimPromptBuilder } from "./FillInTheMiddle" @@ -241,6 +242,8 @@ export class GhostInlineCompletionProvider implements vscode.InlineCompletionIte private debounceDelayMs: number = INITIAL_DEBOUNCE_DELAY_MS private latencyHistory: number[] = [] private telemetry: AutocompleteTelemetry | null + /** Information about the last suggestion shown to the user */ + private lastSuggestion: LastSuggestionInfo | null = null constructor( context: vscode.ExtensionContext, @@ -277,7 +280,7 @@ export class GhostInlineCompletionProvider implements vscode.InlineCompletionIte this.recentlyEditedTracker = new RecentlyEditedTracker(ide) this.acceptedCommand = vscode.commands.registerCommand(INLINE_COMPLETION_ACCEPTED_COMMAND, () => - this.telemetry?.captureAcceptSuggestion(), + this.telemetry?.captureAcceptSuggestion(this.lastSuggestion?.length), ) } @@ -482,6 +485,10 @@ export class GhostInlineCompletionProvider implements vscode.InlineCompletionIte ) if (matchingResult !== null) { + this.lastSuggestion = { + languageId: document.languageId, + length: matchingResult.text.length, + } this.telemetry?.captureCacheHit(matchingResult.matchType, telemetryContext, matchingResult.text.length) return stringToInlineCompletions(matchingResult.text, position) } @@ -504,6 +511,10 @@ export class GhostInlineCompletionProvider implements vscode.InlineCompletionIte prefix, ) if (cachedResult) { + this.lastSuggestion = { + languageId: document.languageId, + length: cachedResult.text.length, + } this.telemetry?.captureLlmSuggestionReturned(telemetryContext, cachedResult.text.length) } diff --git a/src/services/ghost/types.ts b/src/services/ghost/types.ts index 3008572f5fe..a4ce31564b6 100644 --- a/src/services/ghost/types.ts +++ b/src/services/ghost/types.ts @@ -168,6 +168,15 @@ export type CacheMatchType = "exact" | "partial_typing" | "backward_deletion" export type CostTrackingCallback = (cost: number, inputTokens: number, outputTokens: number) => void +/** + * Information about the last suggestion shown to the user. + * Used for telemetry tracking when suggestions are accepted. + */ +export interface LastSuggestionInfo { + languageId: string + length: number +} + export interface PendingRequest { prefix: string suffix: string From aec48d905ce4d03727eaa3cdfceb966700be75d4 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 6 Jan 2026 09:39:50 +0100 Subject: [PATCH 10/13] feat: show no credits message when kilocode profile has no balance When a user has a Kilo Code gateway profile configured but no credits in their account, the autocomplete settings screen now shows a helpful message directing them to buy credits instead of the generic 'no model configured' message. - Added hasKilocodeProfileWithNoBalance field to GhostServiceSettings - GhostModel.reload() now detects when kilocode profile has no balance - GhostServiceManager passes this info to the webview - GhostServiceSettings shows appropriate message with buy credits link - Added translation keys for the new message - Added tests for both backend and UI components --- packages/types/src/kilocode/kilocode.ts | 1 + src/services/ghost/GhostModel.ts | 9 +- src/services/ghost/GhostServiceManager.ts | 1 + .../ghost/__tests__/GhostModel.spec.ts | 156 ++++++++++++++++++ .../settings/GhostServiceSettings.tsx | 26 ++- .../__tests__/GhostServiceSettings.spec.tsx | 31 ++++ webview-ui/src/i18n/locales/en/kilocode.json | 5 + 7 files changed, 226 insertions(+), 3 deletions(-) diff --git a/packages/types/src/kilocode/kilocode.ts b/packages/types/src/kilocode/kilocode.ts index 208d6db4b76..b3a4546a2c7 100644 --- a/packages/types/src/kilocode/kilocode.ts +++ b/packages/types/src/kilocode/kilocode.ts @@ -14,6 +14,7 @@ export const ghostServiceSettingsSchema = z provider: z.string().optional(), model: z.string().optional(), snoozeUntil: z.number().optional(), + hasKilocodeProfileWithNoBalance: z.boolean().optional(), }) .optional() diff --git a/src/services/ghost/GhostModel.ts b/src/services/ghost/GhostModel.ts index c7c7c9ef77c..50019360dd2 100644 --- a/src/services/ghost/GhostModel.ts +++ b/src/services/ghost/GhostModel.ts @@ -21,6 +21,7 @@ export class GhostModel { public profileType: string | null = null private currentProvider: ProviderName | null = null public loaded = false + public hasKilocodeProfileWithNoBalance = false constructor(apiHandler: ApiHandler | null = null) { if (apiHandler) { @@ -34,6 +35,7 @@ export class GhostModel { this.profileType = null this.currentProvider = null this.loaded = false + this.hasKilocodeProfileWithNoBalance = false } public async reload(providerSettingsManager: ProviderSettingsManager): Promise { @@ -60,7 +62,12 @@ export class GhostModel { if (provider === "kilocode") { // For all other providers, assume they are usable if (!profile.kilocodeToken) continue - if (!(await checkKilocodeBalance(profile.kilocodeToken, profile.kilocodeOrganizationId))) continue + const hasBalance = await checkKilocodeBalance(profile.kilocodeToken, profile.kilocodeOrganizationId) + if (!hasBalance) { + // Track that we found a kilocode profile but it has no balance + this.hasKilocodeProfileWithNoBalance = true + continue + } } await useProfile(this, { ...profile, [modelIdKeysByProvider[provider]]: model }, provider) return true diff --git a/src/services/ghost/GhostServiceManager.ts b/src/services/ghost/GhostServiceManager.ts index 83368efad0c..27bd7bfcdb5 100644 --- a/src/services/ghost/GhostServiceManager.ts +++ b/src/services/ghost/GhostServiceManager.ts @@ -97,6 +97,7 @@ export class GhostServiceManager { ...this.settings, provider: this.getCurrentProviderName(), model: this.getCurrentModelName(), + hasKilocodeProfileWithNoBalance: this.model.hasKilocodeProfileWithNoBalance, } await ContextProxy.instance.setValues({ ghostServiceSettings: settingsWithModelInfo }) await this.cline.postStateToWebview() diff --git a/src/services/ghost/__tests__/GhostModel.spec.ts b/src/services/ghost/__tests__/GhostModel.spec.ts index 355e9f4a0fb..deb529fc6a6 100644 --- a/src/services/ghost/__tests__/GhostModel.spec.ts +++ b/src/services/ghost/__tests__/GhostModel.spec.ts @@ -308,6 +308,162 @@ describe("GhostModel", () => { expect(result).toBe(true) expect(model.loaded).toBe(true) }) + + it("should set hasKilocodeProfileWithNoBalance when kilocode profile exists but has no balance", async () => { + const profiles = [{ id: "1", name: "kilocode-profile", apiProvider: "kilocode" }] as any + + vi.mocked(mockProviderSettingsManager.listConfig).mockResolvedValue(profiles) + + // Mock profile with token + vi.mocked(mockProviderSettingsManager.getProfile).mockResolvedValue({ + id: "1", + name: "kilocode-profile", + apiProvider: "kilocode", + kilocodeToken: "test-token", + } as any) + + // Mock fetch to return zero balance for kilocode + ;(global.fetch as any).mockImplementation(async (url: string) => { + if (url.includes("/api/profile/balance")) { + return { + ok: true, + json: async () => ({ balance: 0 }), + } as any + } + return { + ok: true, + json: async () => ({}), + } as any + }) + + const model = new GhostModel() + const result = await model.reload(mockProviderSettingsManager) + + // Should not find a usable provider + expect(result).toBe(false) + expect(model.loaded).toBe(true) + // Should have set the flag indicating kilocode profile exists but has no balance + expect(model.hasKilocodeProfileWithNoBalance).toBe(true) + }) + + it("should not set hasKilocodeProfileWithNoBalance when kilocode profile has balance", async () => { + const profiles = [{ id: "1", name: "kilocode-profile", apiProvider: "kilocode" }] as any + + vi.mocked(mockProviderSettingsManager.listConfig).mockResolvedValue(profiles) + + // Mock profile with token + vi.mocked(mockProviderSettingsManager.getProfile).mockResolvedValue({ + id: "1", + name: "kilocode-profile", + apiProvider: "kilocode", + kilocodeToken: "test-token", + } as any) + + // Mock fetch to return positive balance for kilocode and valid models response + ;(global.fetch as any).mockImplementation(async (url: string) => { + if (url.includes("/api/profile/balance")) { + return { + ok: true, + json: async () => ({ balance: 10.5 }), + } as any + } + // For OpenRouter/Kilocode models endpoint + if (url.includes("/models")) { + return { + ok: true, + json: async () => ({ + data: [ + { + id: "mistralai/codestral-2508", + name: "Codestral", + context_length: 32000, + pricing: { prompt: "0.0001", completion: "0.0003" }, + }, + ], + }), + } as any + } + return { + ok: true, + json: async () => ({}), + } as any + }) + + const model = new GhostModel() + const result = await model.reload(mockProviderSettingsManager) + + // Should find a usable provider + expect(result).toBe(true) + expect(model.loaded).toBe(true) + // Should not have set the flag + expect(model.hasKilocodeProfileWithNoBalance).toBe(false) + }) + + it("should clear hasKilocodeProfileWithNoBalance on reload", async () => { + const profiles = [{ id: "1", name: "kilocode-profile", apiProvider: "kilocode" }] as any + + vi.mocked(mockProviderSettingsManager.listConfig).mockResolvedValue(profiles) + + // Mock profile with token + vi.mocked(mockProviderSettingsManager.getProfile).mockResolvedValue({ + id: "1", + name: "kilocode-profile", + apiProvider: "kilocode", + kilocodeToken: "test-token", + } as any) + + // First reload: zero balance + ;(global.fetch as any).mockImplementation(async (url: string) => { + if (url.includes("/api/profile/balance")) { + return { + ok: true, + json: async () => ({ balance: 0 }), + } as any + } + return { + ok: true, + json: async () => ({}), + } as any + }) + + const model = new GhostModel() + await model.reload(mockProviderSettingsManager) + expect(model.hasKilocodeProfileWithNoBalance).toBe(true) + + // Second reload: positive balance with valid models response + ;(global.fetch as any).mockImplementation(async (url: string) => { + if (url.includes("/api/profile/balance")) { + return { + ok: true, + json: async () => ({ balance: 10.5 }), + } as any + } + // For OpenRouter/Kilocode models endpoint + if (url.includes("/models")) { + return { + ok: true, + json: async () => ({ + data: [ + { + id: "mistralai/codestral-2508", + name: "Codestral", + context_length: 32000, + pricing: { prompt: "0.0001", completion: "0.0003" }, + }, + ], + }), + } as any + } + return { + ok: true, + json: async () => ({}), + } as any + }) + + await model.reload(mockProviderSettingsManager) + // Flag should be cleared after reload with positive balance + expect(model.hasKilocodeProfileWithNoBalance).toBe(false) + }) }) describe("getProviderDisplayName", () => { diff --git a/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx b/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx index 72c8f222515..d8b5f81f802 100644 --- a/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx +++ b/webview-ui/src/components/kilocode/settings/GhostServiceSettings.tsx @@ -37,8 +37,14 @@ export const GhostServiceSettingsView = ({ }: GhostServiceSettingsViewProps) => { const { t } = useAppTranslation() const { kiloCodeWrapperProperties } = useExtensionState() - const { enableAutoTrigger, enableSmartInlineTaskKeybinding, enableChatAutocomplete, provider, model } = - ghostServiceSettings || {} + const { + enableAutoTrigger, + enableSmartInlineTaskKeybinding, + enableChatAutocomplete, + provider, + model, + hasKilocodeProfileWithNoBalance, + } = ghostServiceSettings || {} const keybindings = useKeybindings(["kilo-code.ghost.generateSuggestions"]) const [snoozeDuration, setSnoozeDuration] = useState(300) const [currentTime, setCurrentTime] = useState(Date.now()) @@ -234,6 +240,22 @@ export const GhostServiceSettingsView = ({ {model} + ) : hasKilocodeProfileWithNoBalance ? ( +
+
+ {t("kilocode:ghost.settings.noCredits.title")} +
+
+ {t("kilocode:ghost.settings.noCredits.description")} +
+ +
) : (
diff --git a/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx b/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx index 1b6ebcf4a06..879894257cb 100644 --- a/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx +++ b/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx @@ -252,6 +252,37 @@ describe("GhostServiceSettingsView", () => { expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured.title/)).toBeInTheDocument() }) + it("displays no credits message when kilocode profile exists but has no balance", () => { + renderComponent({ + ghostServiceSettings: { + ...defaultGhostServiceSettings, + provider: undefined, + model: undefined, + hasKilocodeProfileWithNoBalance: true, + }, + }) + + expect(screen.getByText(/kilocode:ghost.settings.noCredits.title/)).toBeInTheDocument() + expect(screen.getByText(/kilocode:ghost.settings.noCredits.description/)).toBeInTheDocument() + expect(screen.getByText(/kilocode:ghost.settings.noCredits.buyCredits/)).toBeInTheDocument() + }) + + it("displays provider and model info even when hasKilocodeProfileWithNoBalance is true but model is configured", () => { + renderComponent({ + ghostServiceSettings: { + ...defaultGhostServiceSettings, + provider: "openrouter", + model: "openai/gpt-4o-mini", + hasKilocodeProfileWithNoBalance: true, + }, + }) + + // Should show provider/model info, not the no credits message + expect(screen.getByText(/openrouter/)).toBeInTheDocument() + expect(screen.getByText(/openai\/gpt-4o-mini/)).toBeInTheDocument() + expect(screen.queryByText(/kilocode:ghost.settings.noCredits.title/)).not.toBeInTheDocument() + }) + describe("snooze status refresh", () => { it("updates snooze status when timer fires and snooze expires", () => { const now = Date.now() diff --git a/webview-ui/src/i18n/locales/en/kilocode.json b/webview-ui/src/i18n/locales/en/kilocode.json index 68e83cb160c..2069477b400 100644 --- a/webview-ui/src/i18n/locales/en/kilocode.json +++ b/webview-ui/src/i18n/locales/en/kilocode.json @@ -269,6 +269,11 @@ "description": "To enable autocomplete, add a profile with one of these supported providers:", "learnMore": "Learn more about autocomplete setup →" }, + "noCredits": { + "title": "No credits in your account", + "description": "Your Kilo Code account has no credits. To use autocomplete, please add credits to your account.", + "buyCredits": "Buy credits →" + }, "configureAutocompleteProfile": "Use any model by going to profiles and configuring a Profile of the Profile Type Autocomplete." } }, From d21d387f4f6686101c3313de40a2e6b1bca6fcea Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 6 Jan 2026 09:53:12 +0100 Subject: [PATCH 11/13] Add translations for noCredits message in autocomplete settings --- webview-ui/src/i18n/locales/ar/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ca/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/cs/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/de/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/es/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/fr/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/hi/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/id/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/it/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ja/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ko/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/nl/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/pl/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/pt-BR/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/ru/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/th/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/tr/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/uk/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/vi/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/zh-CN/kilocode.json | 5 +++++ webview-ui/src/i18n/locales/zh-TW/kilocode.json | 5 +++++ 21 files changed, 105 insertions(+) diff --git a/webview-ui/src/i18n/locales/ar/kilocode.json b/webview-ui/src/i18n/locales/ar/kilocode.json index a053d4924f5..af2eeb15112 100644 --- a/webview-ui/src/i18n/locales/ar/kilocode.json +++ b/webview-ui/src/i18n/locales/ar/kilocode.json @@ -258,6 +258,11 @@ "title": "لم يتم تكوين نموذج للإكمال التلقائي", "description": "لتفعيل الإكمال التلقائي، أضف ملفًا شخصيًا مع أحد هذه المزودين المدعومين:", "learnMore": "تعرف على المزيد حول إعداد الإكمال التلقائي ←" + }, + "noCredits": { + "title": "لا يوجد رصيد في حسابك", + "description": "حساب Kilo Code الخاص بك لا يحتوي على رصيد. لاستخدام الإكمال التلقائي، يرجى إضافة رصيد إلى حسابك.", + "buyCredits": "شراء رصيد ←" } } }, diff --git a/webview-ui/src/i18n/locales/ca/kilocode.json b/webview-ui/src/i18n/locales/ca/kilocode.json index 1ccd0fd5db6..b2d44ef4c3d 100644 --- a/webview-ui/src/i18n/locales/ca/kilocode.json +++ b/webview-ui/src/i18n/locales/ca/kilocode.json @@ -249,6 +249,11 @@ "title": "No s'ha configurat cap model d'autocompletat", "description": "Per habilitar l'autocompletat, afegeix un perfil amb un d'aquests proveïdors compatibles:", "learnMore": "Més informació sobre la configuració de l'autocompletat →" + }, + "noCredits": { + "title": "No hi ha crèdits al teu compte", + "description": "El teu compte de Kilo Code no té crèdits. Per utilitzar l'autocompletat, si us plau afegeix crèdits al teu compte.", + "buyCredits": "Comprar crèdits →" } } }, diff --git a/webview-ui/src/i18n/locales/cs/kilocode.json b/webview-ui/src/i18n/locales/cs/kilocode.json index 4e4ea0ecbae..23578f71cbc 100644 --- a/webview-ui/src/i18n/locales/cs/kilocode.json +++ b/webview-ui/src/i18n/locales/cs/kilocode.json @@ -263,6 +263,11 @@ "title": "Není nakonfigurován žádný model pro automatické dokončování", "description": "Pro povolení automatického dokončování přidejte profil s jedním z těchto podporovaných poskytovatelů:", "learnMore": "Zjistěte více o nastavení automatického dokončování →" + }, + "noCredits": { + "title": "Na vašem účtu nejsou žádné kredity", + "description": "Váš účet Kilo Code nemá žádné kredity. Pro použití automatického dokončování prosím přidejte kredity na svůj účet.", + "buyCredits": "Koupit kredity →" } } }, diff --git a/webview-ui/src/i18n/locales/de/kilocode.json b/webview-ui/src/i18n/locales/de/kilocode.json index d47421d24ff..d7cdeab1916 100644 --- a/webview-ui/src/i18n/locales/de/kilocode.json +++ b/webview-ui/src/i18n/locales/de/kilocode.json @@ -255,6 +255,11 @@ "title": "Kein Autocomplete-Modell konfiguriert", "description": "Um Autocomplete zu aktivieren, füge ein Profil mit einem dieser unterstützten Anbieter hinzu:", "learnMore": "Mehr über die Autocomplete-Einrichtung erfahren →" + }, + "noCredits": { + "title": "Kein Guthaben auf deinem Konto", + "description": "Dein Kilo Code Konto hat kein Guthaben. Um Autocomplete zu nutzen, füge bitte Guthaben zu deinem Konto hinzu.", + "buyCredits": "Guthaben kaufen →" } } }, diff --git a/webview-ui/src/i18n/locales/es/kilocode.json b/webview-ui/src/i18n/locales/es/kilocode.json index 456a0172cd4..1208d0695d4 100644 --- a/webview-ui/src/i18n/locales/es/kilocode.json +++ b/webview-ui/src/i18n/locales/es/kilocode.json @@ -256,6 +256,11 @@ "title": "No hay modelo de autocompletado configurado", "description": "Para habilitar el autocompletado, añade un perfil con uno de estos proveedores compatibles:", "learnMore": "Más información sobre la configuración del autocompletado →" + }, + "noCredits": { + "title": "No hay créditos en tu cuenta", + "description": "Tu cuenta de Kilo Code no tiene créditos. Para usar el autocompletado, por favor añade créditos a tu cuenta.", + "buyCredits": "Comprar créditos →" } } }, diff --git a/webview-ui/src/i18n/locales/fr/kilocode.json b/webview-ui/src/i18n/locales/fr/kilocode.json index f75eaf897f2..8b41899fdb1 100644 --- a/webview-ui/src/i18n/locales/fr/kilocode.json +++ b/webview-ui/src/i18n/locales/fr/kilocode.json @@ -263,6 +263,11 @@ "title": "Aucun modèle d'autocomplétion configuré", "description": "Pour activer l'autocomplétion, ajoutez un profil avec l'un de ces fournisseurs pris en charge :", "learnMore": "En savoir plus sur la configuration de l'autocomplétion →" + }, + "noCredits": { + "title": "Aucun crédit sur votre compte", + "description": "Votre compte Kilo Code n'a pas de crédits. Pour utiliser l'autocomplétion, veuillez ajouter des crédits à votre compte.", + "buyCredits": "Acheter des crédits →" } } }, diff --git a/webview-ui/src/i18n/locales/hi/kilocode.json b/webview-ui/src/i18n/locales/hi/kilocode.json index 4de4ae0e502..f36f10e9b3c 100644 --- a/webview-ui/src/i18n/locales/hi/kilocode.json +++ b/webview-ui/src/i18n/locales/hi/kilocode.json @@ -249,6 +249,11 @@ "title": "कोई ऑटोकम्पलीट मॉडल कॉन्फ़िगर नहीं है", "description": "ऑटोकम्पलीट सक्षम करने के लिए, इन समर्थित प्रदाताओं में से एक के साथ प्रोफ़ाइल जोड़ें:", "learnMore": "ऑटोकम्पलीट सेटअप के बारे में और जानें →" + }, + "noCredits": { + "title": "आपके खाते में कोई क्रेडिट नहीं है", + "description": "आपके Kilo Code खाते में कोई क्रेडिट नहीं है। ऑटोकम्पलीट का उपयोग करने के लिए, कृपया अपने खाते में क्रेडिट जोड़ें।", + "buyCredits": "क्रेडिट खरीदें →" } } }, diff --git a/webview-ui/src/i18n/locales/id/kilocode.json b/webview-ui/src/i18n/locales/id/kilocode.json index f9131bfb9af..3268ec3ec9e 100644 --- a/webview-ui/src/i18n/locales/id/kilocode.json +++ b/webview-ui/src/i18n/locales/id/kilocode.json @@ -249,6 +249,11 @@ "title": "Tidak ada model autocomplete yang dikonfigurasi", "description": "Untuk mengaktifkan autocomplete, tambahkan profil dengan salah satu penyedia yang didukung ini:", "learnMore": "Pelajari lebih lanjut tentang pengaturan autocomplete →" + }, + "noCredits": { + "title": "Tidak ada kredit di akun Anda", + "description": "Akun Kilo Code Anda tidak memiliki kredit. Untuk menggunakan autocomplete, silakan tambahkan kredit ke akun Anda.", + "buyCredits": "Beli kredit →" } } }, diff --git a/webview-ui/src/i18n/locales/it/kilocode.json b/webview-ui/src/i18n/locales/it/kilocode.json index 54ffb3432f8..39724e158ae 100644 --- a/webview-ui/src/i18n/locales/it/kilocode.json +++ b/webview-ui/src/i18n/locales/it/kilocode.json @@ -256,6 +256,11 @@ "title": "Nessun modello di autocompletamento configurato", "description": "Per abilitare l'autocompletamento, aggiungi un profilo con uno di questi provider supportati:", "learnMore": "Scopri di più sulla configurazione dell'autocompletamento →" + }, + "noCredits": { + "title": "Nessun credito nel tuo account", + "description": "Il tuo account Kilo Code non ha crediti. Per utilizzare l'autocompletamento, aggiungi crediti al tuo account.", + "buyCredits": "Acquista crediti →" } } }, diff --git a/webview-ui/src/i18n/locales/ja/kilocode.json b/webview-ui/src/i18n/locales/ja/kilocode.json index 82b2ffe8556..055b705e814 100644 --- a/webview-ui/src/i18n/locales/ja/kilocode.json +++ b/webview-ui/src/i18n/locales/ja/kilocode.json @@ -263,6 +263,11 @@ "title": "オートコンプリートモデルが設定されていません", "description": "オートコンプリートを有効にするには、以下のサポートされているプロバイダーのいずれかでプロファイルを追加してください:", "learnMore": "オートコンプリートの設定について詳しく →" + }, + "noCredits": { + "title": "アカウントにクレジットがありません", + "description": "Kilo Codeアカウントにクレジットがありません。オートコンプリートを使用するには、アカウントにクレジットを追加してください。", + "buyCredits": "クレジットを購入 →" } } }, diff --git a/webview-ui/src/i18n/locales/ko/kilocode.json b/webview-ui/src/i18n/locales/ko/kilocode.json index 695a0126161..0d3c6275866 100644 --- a/webview-ui/src/i18n/locales/ko/kilocode.json +++ b/webview-ui/src/i18n/locales/ko/kilocode.json @@ -263,6 +263,11 @@ "title": "자동완성 모델이 구성되지 않았습니다", "description": "자동완성을 활성화하려면 다음 지원되는 공급자 중 하나로 프로필을 추가하세요:", "learnMore": "자동완성 설정에 대해 자세히 알아보기 →" + }, + "noCredits": { + "title": "계정에 크레딧이 없습니다", + "description": "Kilo Code 계정에 크레딧이 없습니다. 자동완성을 사용하려면 계정에 크레딧을 추가하세요.", + "buyCredits": "크레딧 구매 →" } } }, diff --git a/webview-ui/src/i18n/locales/nl/kilocode.json b/webview-ui/src/i18n/locales/nl/kilocode.json index 28a893125e3..42fef275ec4 100644 --- a/webview-ui/src/i18n/locales/nl/kilocode.json +++ b/webview-ui/src/i18n/locales/nl/kilocode.json @@ -263,6 +263,11 @@ "title": "Geen autocomplete-model geconfigureerd", "description": "Om autocomplete in te schakelen, voeg een profiel toe met een van deze ondersteunde providers:", "learnMore": "Meer informatie over autocomplete-configuratie →" + }, + "noCredits": { + "title": "Geen tegoed op je account", + "description": "Je Kilo Code-account heeft geen tegoed. Om autocomplete te gebruiken, voeg tegoed toe aan je account.", + "buyCredits": "Tegoed kopen →" } } }, diff --git a/webview-ui/src/i18n/locales/pl/kilocode.json b/webview-ui/src/i18n/locales/pl/kilocode.json index 4fcd7649e10..37220f0146a 100644 --- a/webview-ui/src/i18n/locales/pl/kilocode.json +++ b/webview-ui/src/i18n/locales/pl/kilocode.json @@ -256,6 +256,11 @@ "title": "Nie skonfigurowano modelu autouzupełniania", "description": "Aby włączyć autouzupełnianie, dodaj profil z jednym z tych obsługiwanych dostawców:", "learnMore": "Dowiedz się więcej o konfiguracji autouzupełniania →" + }, + "noCredits": { + "title": "Brak kredytów na koncie", + "description": "Twoje konto Kilo Code nie ma kredytów. Aby korzystać z autouzupełniania, dodaj kredyty do swojego konta.", + "buyCredits": "Kup kredyty →" } } }, diff --git a/webview-ui/src/i18n/locales/pt-BR/kilocode.json b/webview-ui/src/i18n/locales/pt-BR/kilocode.json index 41dd6bc7afa..8bef7fe075a 100644 --- a/webview-ui/src/i18n/locales/pt-BR/kilocode.json +++ b/webview-ui/src/i18n/locales/pt-BR/kilocode.json @@ -256,6 +256,11 @@ "title": "Nenhum modelo de autocomplete configurado", "description": "Para habilitar o autocomplete, adicione um perfil com um destes provedores suportados:", "learnMore": "Saiba mais sobre a configuração do autocomplete →" + }, + "noCredits": { + "title": "Sem créditos na sua conta", + "description": "Sua conta Kilo Code não tem créditos. Para usar o autocomplete, adicione créditos à sua conta.", + "buyCredits": "Comprar créditos →" } } }, diff --git a/webview-ui/src/i18n/locales/ru/kilocode.json b/webview-ui/src/i18n/locales/ru/kilocode.json index 29b05a0adb0..9088c6b214e 100644 --- a/webview-ui/src/i18n/locales/ru/kilocode.json +++ b/webview-ui/src/i18n/locales/ru/kilocode.json @@ -256,6 +256,11 @@ "title": "Модель автодополнения не настроена", "description": "Чтобы включить автодополнение, добавьте профиль с одним из этих поддерживаемых провайдеров:", "learnMore": "Узнать больше о настройке автодополнения →" + }, + "noCredits": { + "title": "На вашем счете нет кредитов", + "description": "На вашем счете Kilo Code нет кредитов. Чтобы использовать автодополнение, пополните счет.", + "buyCredits": "Купить кредиты →" } } }, diff --git a/webview-ui/src/i18n/locales/th/kilocode.json b/webview-ui/src/i18n/locales/th/kilocode.json index 747968967f5..3e2eace2c56 100644 --- a/webview-ui/src/i18n/locales/th/kilocode.json +++ b/webview-ui/src/i18n/locales/th/kilocode.json @@ -263,6 +263,11 @@ "title": "ยังไม่ได้กำหนดค่าโมเดล Autocomplete", "description": "หากต้องการเปิดใช้งาน Autocomplete ให้เพิ่มโปรไฟล์ที่มีผู้ให้บริการที่รองรับเหล่านี้:", "learnMore": "เรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่า Autocomplete →" + }, + "noCredits": { + "title": "ไม่มีเครดิตในบัญชีของคุณ", + "description": "บัญชี Kilo Code ของคุณไม่มีเครดิต หากต้องการใช้ Autocomplete กรุณาเติมเครดิตในบัญชีของคุณ", + "buyCredits": "ซื้อเครดิต →" } } }, diff --git a/webview-ui/src/i18n/locales/tr/kilocode.json b/webview-ui/src/i18n/locales/tr/kilocode.json index 004516b2c4e..9efcb38004d 100644 --- a/webview-ui/src/i18n/locales/tr/kilocode.json +++ b/webview-ui/src/i18n/locales/tr/kilocode.json @@ -256,6 +256,11 @@ "title": "Otomatik tamamlama modeli yapılandırılmadı", "description": "Otomatik tamamlamayı etkinleştirmek için desteklenen bu sağlayıcılardan biriyle bir profil ekleyin:", "learnMore": "Otomatik tamamlama kurulumu hakkında daha fazla bilgi →" + }, + "noCredits": { + "title": "Hesabınızda kredi yok", + "description": "Kilo Code hesabınızda kredi bulunmuyor. Otomatik tamamlamayı kullanmak için lütfen hesabınıza kredi ekleyin.", + "buyCredits": "Kredi satın al →" } } }, diff --git a/webview-ui/src/i18n/locales/uk/kilocode.json b/webview-ui/src/i18n/locales/uk/kilocode.json index 217bcc98395..837102e4313 100644 --- a/webview-ui/src/i18n/locales/uk/kilocode.json +++ b/webview-ui/src/i18n/locales/uk/kilocode.json @@ -263,6 +263,11 @@ "title": "Модель автодоповнення не налаштована", "description": "Щоб увімкнути автодоповнення, додайте профіль з одним із цих підтримуваних провайдерів:", "learnMore": "Дізнатися більше про налаштування автодоповнення →" + }, + "noCredits": { + "title": "На вашому рахунку немає кредитів", + "description": "На вашому рахунку Kilo Code немає кредитів. Щоб використовувати автодоповнення, будь ласка, поповніть свій рахунок.", + "buyCredits": "Придбати кредити →" } } }, diff --git a/webview-ui/src/i18n/locales/vi/kilocode.json b/webview-ui/src/i18n/locales/vi/kilocode.json index 986fc64607c..4a9c2662953 100644 --- a/webview-ui/src/i18n/locales/vi/kilocode.json +++ b/webview-ui/src/i18n/locales/vi/kilocode.json @@ -256,6 +256,11 @@ "title": "Chưa cấu hình mô hình tự động hoàn thành", "description": "Để bật tự động hoàn thành, hãy thêm hồ sơ với một trong các nhà cung cấp được hỗ trợ sau:", "learnMore": "Tìm hiểu thêm về cách thiết lập tự động hoàn thành →" + }, + "noCredits": { + "title": "Tài khoản của bạn không có tín dụng", + "description": "Tài khoản Kilo Code của bạn không có tín dụng. Để sử dụng tự động hoàn thành, vui lòng nạp tín dụng vào tài khoản.", + "buyCredits": "Mua tín dụng →" } } }, diff --git a/webview-ui/src/i18n/locales/zh-CN/kilocode.json b/webview-ui/src/i18n/locales/zh-CN/kilocode.json index 29d991bfe31..8ba9f2837a8 100644 --- a/webview-ui/src/i18n/locales/zh-CN/kilocode.json +++ b/webview-ui/src/i18n/locales/zh-CN/kilocode.json @@ -263,6 +263,11 @@ "title": "未配置自动补全模型", "description": "要启用自动补全,请添加一个使用以下支持的提供商的配置文件:", "learnMore": "了解更多关于自动补全设置 →" + }, + "noCredits": { + "title": "您的账户没有额度", + "description": "您的 Kilo Code 账户没有额度。要使用自动补全,请为您的账户充值。", + "buyCredits": "购买额度 →" } } }, diff --git a/webview-ui/src/i18n/locales/zh-TW/kilocode.json b/webview-ui/src/i18n/locales/zh-TW/kilocode.json index fba71855481..5f8ad8c2ae4 100644 --- a/webview-ui/src/i18n/locales/zh-TW/kilocode.json +++ b/webview-ui/src/i18n/locales/zh-TW/kilocode.json @@ -258,6 +258,11 @@ "title": "未設定自動補全模型", "description": "若要啟用自動補全,請新增一個使用以下支援供應商的設定檔:", "learnMore": "了解更多關於自動補全設定 →" + }, + "noCredits": { + "title": "您的帳戶沒有額度", + "description": "您的 Kilo Code 帳戶沒有額度。若要使用自動補全,請為您的帳戶儲值。", + "buyCredits": "購買額度 →" } } }, From 1d79105bc779b9d6809c7ea1d9d1ba33aae1628b Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 6 Jan 2026 10:20:17 +0100 Subject: [PATCH 12/13] refactor: make LastSuggestionInfo extend AutocompleteContext --- .../classic-auto-complete/GhostInlineCompletionProvider.ts | 4 ++-- src/services/ghost/types.ts | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts b/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts index eb79d3a2d8f..65aa77923df 100644 --- a/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts +++ b/src/services/ghost/classic-auto-complete/GhostInlineCompletionProvider.ts @@ -486,7 +486,7 @@ export class GhostInlineCompletionProvider implements vscode.InlineCompletionIte if (matchingResult !== null) { this.lastSuggestion = { - languageId: document.languageId, + ...telemetryContext, length: matchingResult.text.length, } this.telemetry?.captureCacheHit(matchingResult.matchType, telemetryContext, matchingResult.text.length) @@ -512,7 +512,7 @@ export class GhostInlineCompletionProvider implements vscode.InlineCompletionIte ) if (cachedResult) { this.lastSuggestion = { - languageId: document.languageId, + ...telemetryContext, length: cachedResult.text.length, } this.telemetry?.captureLlmSuggestionReturned(telemetryContext, cachedResult.text.length) diff --git a/src/services/ghost/types.ts b/src/services/ghost/types.ts index a4ce31564b6..c0c6c8a3dcc 100644 --- a/src/services/ghost/types.ts +++ b/src/services/ghost/types.ts @@ -172,8 +172,7 @@ export type CostTrackingCallback = (cost: number, inputTokens: number, outputTok * Information about the last suggestion shown to the user. * Used for telemetry tracking when suggestions are accepted. */ -export interface LastSuggestionInfo { - languageId: string +export interface LastSuggestionInfo extends AutocompleteContext { length: number } From 4f328741126712d6b9224f7da8a529d3ac6b62e3 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 6 Jan 2026 10:31:16 +0100 Subject: [PATCH 13/13] fix: add Gradle caching and Maven mirrors for JetBrains CI builds - Add gradle/actions/setup-gradle@v4 to code-qa and marketplace-publish workflows - Add fallback Maven mirrors for okhttp and gson dependencies - Fixes 403 Forbidden errors from Maven Central in GitHub Actions --- .github/workflows/code-qa.yml | 4 ++++ .github/workflows/marketplace-publish.yml | 4 ++++ jetbrains/plugin/build.gradle.kts | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/.github/workflows/code-qa.yml b/.github/workflows/code-qa.yml index 59942398c6b..5d5733d025e 100644 --- a/.github/workflows/code-qa.yml +++ b/.github/workflows/code-qa.yml @@ -174,6 +174,10 @@ jobs: check-latest: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + with: + cache-read-only: ${{ github.ref != 'refs/heads/main' }} - name: Install system dependencies run: | sudo apt-get update diff --git a/.github/workflows/marketplace-publish.yml b/.github/workflows/marketplace-publish.yml index a01f5793e26..a9777273e84 100644 --- a/.github/workflows/marketplace-publish.yml +++ b/.github/workflows/marketplace-publish.yml @@ -189,6 +189,10 @@ jobs: java-version: "21" check-latest: false token: ${{ secrets.GITHUB_TOKEN }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + with: + cache-read-only: false - name: Install system dependencies run: | sudo apt-get update diff --git a/jetbrains/plugin/build.gradle.kts b/jetbrains/plugin/build.gradle.kts index d0de54f4081..c9254e61c9d 100644 --- a/jetbrains/plugin/build.gradle.kts +++ b/jetbrains/plugin/build.gradle.kts @@ -66,6 +66,21 @@ version = properties("pluginVersion").get() repositories { mavenCentral() + // Fallback mirrors for when Maven Central returns 403 (common in CI environments) + maven { + url = uri("https://repo1.maven.org/maven2/") + content { + includeGroupByRegex("com\\.squareup.*") + includeGroupByRegex("com\\.google.*") + } + } + maven { + url = uri("https://maven-central.storage.googleapis.com/maven2/") + content { + includeGroupByRegex("com\\.squareup.*") + includeGroupByRegex("com\\.google.*") + } + } intellijPlatform { defaultRepositories()