refactor(providers): delete setup-template picker stage and commands (#6289)

Removes the template-list stage from /provider (generic Custom form stays),
the templates subcommand and setup-by-template-name path, the
provider_templates settings row, and the ProviderTemplate* MessageIds in
16 locales. Custom routes label by their [providers.<id>] key and a custom
route owns a catalog only on Baseten's endpoint.

Verified: provider_picker 129/0, model_picker 24/0, provider cmd 37/0,
setup cmd 12/0, localization 50/0, runtime_api 228/0, settings registry
1/0; clippy lib+tests -D warnings clean; fmt clean.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
CodeWhale BotandDevin committed 2026-09-16 23:32:14 -07:00
1 parent cb5b6c8a8c
commit f8d00a31ff
26 files changed
+103 -1400

No files matched your search

-11
View File
@@ -683,17 +683,6 @@ pub const SETTINGS_SCHEMA: &[SettingDef] = &[
"ConfigHintProvider",
),
),
def(
"provider_templates",
SettingKind::String,
"",
ui_action(
TAB_MODELS,
"provider",
"ConfigLabelProviderTemplates",
"ConfigHintProviderTemplates",
),
),
def(
"model",
SettingKind::String,
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Capacitats anunciades: {capabilities}",
"McpCapabilitiesLegacyFallback": "Capacitats anunciades: no proporcionades; s'usa el descobriment antic",
"McpCapabilitiesNotObserved": "Capacitats anunciades: no observades perquè el servidor no està connectat",
"PickerActionTemplates": "plantilles",
"PickerActionTestConnection": "provar la connexió",
"ProviderTemplatesTitle": "Plantilles de configuració",
"ProviderTemplateUnpublished": "Aquest repositori no té una URL compatible amb OpenAI publicada, així que no és un predefinit omplible.",
"ProviderTemplateDocs": "Docs: {url}",
"ProviderTemplateCredentials": "Claus: {url}",
"ProviderTemplateKindKeyOnly": "només clau",
"ProviderTemplateKindCompatible": "compatible OpenAI",
"ProviderTemplateKindUnpublished": "no publicat",
"ProviderTemplateBaseUrl": "URL base: {url}",
"ProviderTemplateModel": "Model per defecte: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Creeu o copieu una clau API d'OpenCode Zen des d'OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Creeu o copieu una clau de subscripció d'OpenCode Go des d'OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "Amfitrió OpenAI-compatible de SenseTime SenseNova. Deseu el nom de la variable d'entorn, no la clau crua.",
"ProviderTemplateGuidanceAgnes": "Agnes no té cap URL OpenAI-compatible publicada en aquest repositori, així que no té un predefinit omplible.",
"ProviderCustomFormBaseUrl": "URL base",
"ProviderCustomFormModel": "Model per defecte",
"ProviderCustomFormHint": "Punt final compatible amb OpenAI. Deseu el nom de la variable d'entorn, no la clau crua.",
"ConfigLabelProviderTemplates": "Plantilles de proveïdor per a principiants",
"ConfigActionOpenProviderTemplates": "Enter obre la llista de plantilles",
"ConfigHintProviderTemplates": "P a /provider; C-t prova /models sense tractar 2xx com a model a punt",
"ProviderConnectionChecked": "Connexió comprovada (/models ha retornat 2xx). No s'ha comprovat la disponibilitat del model.",
"ProviderConnectionCheckedPickModel": "Connexió comprovada (/models ha retornat 2xx). Trieu un model per defecte; no s'ha comprovat la disponibilitat del model.",
"ProviderTestConnectionNeedKey": "No hi ha cap clau API desada per a {provider}. Introduïu la clau i premeu T per provar la connexió.",
"ProviderTestConnectionFailed": "Ha fallat la comprovació de connexió de {provider}: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} no té un punt final /models; no s'ha sondejat l'accessibilitat.",
"ProviderTemplateOpened": "S'ha obert la plantilla de proveïdor '{id}'. Introduïu només la clau API.",
"ProviderTemplateUnknown": "Plantilla de proveïdor desconeguda '{id}'.",
"ProviderTemplateOpenedEnvOnly": "S'ha obert la plantilla integrada '{id}'. Introduïu el nom de la variable d'entorn de la clau API i deseu. No enganxeu la clau crua.",
"OperateBoardHeader": "Operate {id} [{status}] ritme={pace} escriptors={writers}",
"OperateBoardBurnObserved": "despesa ${actual}/h observats vs ${target}/h objectiu",
"OperateBoardBurnNoCap": "despesa Sense límit",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Angekündigte Fähigkeiten: {capabilities}",
"McpCapabilitiesLegacyFallback": "Angekündigte Fähigkeiten: nicht angegeben; ältere Erkennung wird ersatzweise verwendet",
"McpCapabilitiesNotObserved": "Angekündigte Fähigkeiten: nicht beobachtet, da der Server nicht verbunden ist",
"PickerActionTemplates": "Vorlagen",
"PickerActionTestConnection": "Verbindung testen",
"ProviderTemplatesTitle": "Setup-Vorlagen",
"ProviderTemplateUnpublished": "In diesem Repository gibt es keine veröffentlichte OpenAI-kompatible URL, daher ist das kein ausfüllbares Preset.",
"ProviderTemplateDocs": "Docs: {url}",
"ProviderTemplateCredentials": "Schlüssel: {url}",
"ProviderTemplateKindKeyOnly": "nur Schlüssel",
"ProviderTemplateKindCompatible": "kompatibel",
"ProviderTemplateKindUnpublished": "unveröffentlicht",
"ProviderTemplateBaseUrl": "Basis-URL: {url}",
"ProviderTemplateModel": "Modell: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Erstellen oder kopieren Sie einen OpenCode Zen API-Schlüssel von OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Erstellen oder kopieren Sie einen OpenCode Go-Abonnementschlüssel von OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "OpenAI-kompatibler SenseTime SenseNova-Host. Speichern Sie den Umgebungsvariablennamen, nicht den Rohschlüssel.",
"ProviderTemplateGuidanceAgnes": "Agnes hat in diesem Repository keine veröffentlichte OpenAI-kompatible URL und daher kein ausfüllbares Preset.",
"ProviderCustomFormBaseUrl": "Basis-URL",
"ProviderCustomFormModel": "Standardmodell",
"ProviderCustomFormHint": "OpenAI-kompatibler Endpunkt. Speichern Sie den Umgebungsvariablennamen, nicht den Rohschlüssel.",
"ConfigLabelProviderTemplates": "Anfänger-Provider-Vorlagen",
"ConfigActionOpenProviderTemplates": "Enter öffnet die Vorlagenliste",
"ConfigHintProviderTemplates": "P in /provider; C-t prüft /models, ohne 2xx als modellbereit zu werten",
"ProviderConnectionChecked": "Verbindung geprüft (/models lieferte 2xx). Die Modellverfügbarkeit wurde nicht geprüft.",
"ProviderConnectionCheckedPickModel": "Verbindung geprüft (/models lieferte 2xx). Wählen Sie ein Standardmodell; die Modellverfügbarkeit wurde nicht geprüft.",
"ProviderTestConnectionNeedKey": "Kein API-Schlüssel für {provider} gespeichert. Schlüssel eingeben, dann T zum Verbindungstest.",
"ProviderTestConnectionFailed": "{provider}-Verbindungsprüfung fehlgeschlagen: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} hat keinen /models-Endpunkt; die Erreichbarkeit wurde nicht geprüft.",
"ProviderTemplateOpened": "Provider-Vorlage '{id}' geöffnet. Nur den API-Schlüssel eingeben.",
"ProviderTemplateUnknown": "Unbekannte Provider-Vorlage '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Eingebaute Vorlage '{id}' geöffnet. Geben Sie den Umgebungsvariablennamen des API-Schlüssels ein und speichern Sie. Keinen Rohschlüssel einfügen.",
"OperateBoardHeader": "Operate {id} [{status}] Tempo={pace} Schreiber={writers}",
"OperateBoardBurnObserved": "Verbrauch ${actual}/Std. beobachtet vs ${target}/Std. Ziel",
"OperateBoardBurnNoCap": "Verbrauch Kein Limit",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Advertised capabilities: {capabilities}",
"McpCapabilitiesLegacyFallback": "Advertised capabilities: not provided; using legacy discovery fallback",
"McpCapabilitiesNotObserved": "Advertised capabilities: not observed because the server is not connected",
"PickerActionTemplates": "templates",
"PickerActionTestConnection": "test connection",
"ProviderTemplatesTitle": "Setup templates",
"ProviderTemplateUnpublished": "No published OpenAI-compatible URL here, so this row isn't a fillable preset.",
"ProviderTemplateDocs": "Docs: {url}",
"ProviderTemplateCredentials": "Keys: {url}",
"ProviderTemplateKindKeyOnly": "key-only",
"ProviderTemplateKindCompatible": "compatible",
"ProviderTemplateKindUnpublished": "unpublished",
"ProviderTemplateBaseUrl": "Base URL: {url}",
"ProviderTemplateModel": "Model: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Grab an OpenCode Zen API key from OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Grab an OpenCode Go subscription key from OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "SenseTime SenseNova host (OpenAI-compatible). Store an env var name, not a raw key.",
"ProviderTemplateGuidanceAgnes": "Agnes has no published OpenAI-compatible URL, so no fillable preset.",
"ProviderCustomFormBaseUrl": "Base URL",
"ProviderCustomFormModel": "Default model",
"ProviderCustomFormHint": "OpenAI-compatible endpoint. Store an env var name, not a raw key.",
"ConfigLabelProviderTemplates": "Provider templates",
"ConfigActionOpenProviderTemplates": "Enter opens template list",
"ConfigHintProviderTemplates": "P in /provider; C-t tests /models without treating 2xx as model-ready",
"ProviderConnectionChecked": "Connection checked (/models returned 2xx). Model availability is not checked.",
"ProviderConnectionCheckedPickModel": "Connection checked (/models returned 2xx). Pick a default model; model availability is not checked.",
"ProviderTestConnectionNeedKey": "No API key saved for {provider}. Add one first, then press T to test.",
"ProviderTestConnectionFailed": "{provider} connection check failed: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} has no /models endpoint; reachability was not probed.",
"ProviderTemplateOpened": "Template '{id}' opened — API key only.",
"ProviderTemplateUnknown": "No template named '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Template '{id}' opened — enter the key's env var name and save. Never paste the raw key.",
"OperateBoardHeader": "Operate {id} [{status}] pace={pace} writers={writers}",
"OperateBoardBurnObserved": "burn ${actual}/hr observed vs ${target}/hr target",
"OperateBoardBurnNoCap": "burn No cap",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Capacidades anunciadas: {capabilities}",
"McpCapabilitiesLegacyFallback": "Capacidades anunciadas: no proporcionadas; se usa el descubrimiento heredado",
"McpCapabilitiesNotObserved": "Capacidades anunciadas: no observadas porque el servidor no está conectado",
"PickerActionTemplates": "plantillas",
"PickerActionTestConnection": "probar conexión",
"ProviderTemplatesTitle": "Plantillas de configuración",
"ProviderTemplateUnpublished": "Este repositorio no tiene una URL compatible con OpenAI publicada, así que no es un preset rellenable.",
"ProviderTemplateDocs": "Docs: {url}",
"ProviderTemplateCredentials": "Claves: {url}",
"ProviderTemplateKindKeyOnly": "solo clave",
"ProviderTemplateKindCompatible": "compatible OpenAI",
"ProviderTemplateKindUnpublished": "no publicado",
"ProviderTemplateBaseUrl": "URL base: {url}",
"ProviderTemplateModel": "Modelo: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Crea o copia una API key de OpenCode Zen desde OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Crea o copia una clave de suscripción de OpenCode Go desde OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "Host de SenseTime SenseNova compatible con OpenAI. Guarda el nombre de la variable de entorno, no la clave cruda.",
"ProviderTemplateGuidanceAgnes": "Agnes no tiene una URL compatible con OpenAI publicada en este repositorio, así que no tiene un preset rellenable.",
"ProviderCustomFormBaseUrl": "URL base",
"ProviderCustomFormModel": "Modelo predeterminado",
"ProviderCustomFormHint": "Endpoint compatible con OpenAI. Guarda el nombre de la variable de entorno, no la clave cruda.",
"ConfigLabelProviderTemplates": "Plantillas de proveedor para principiantes",
"ConfigActionOpenProviderTemplates": "Enter abre la lista de plantillas",
"ConfigHintProviderTemplates": "P en /provider; C-t prueba /models sin tratar 2xx como modelo listo",
"ProviderConnectionChecked": "Conexión comprobada (/models devolvió 2xx). No se comprobó la disponibilidad del modelo.",
"ProviderConnectionCheckedPickModel": "Conexión comprobada (/models devolvió 2xx). Elige un modelo predeterminado; no se comprobó la disponibilidad del modelo.",
"ProviderTestConnectionNeedKey": "No hay API key guardada para {provider}. Introduce la clave y pulsa T para probar la conexión.",
"ProviderTestConnectionFailed": "Falló la comprobación de conexión de {provider}: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} no tiene endpoint /models; no se sondeó la alcanzalidad.",
"ProviderTemplateOpened": "Plantilla de proveedor '{id}' abierta. Introduce solo la API key.",
"ProviderTemplateUnknown": "Plantilla de proveedor desconocida '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Plantilla integrada '{id}' abierta. Escribe el nombre de la variable de entorno de la API key y guarda. No pegues la clave cruda.",
"OperateBoardHeader": "Operate {id} [{status}] ritmo={pace} escritores={writers}",
"OperateBoardBurnObserved": "gasto ${actual}/h observado vs ${target}/h objetivo",
"OperateBoardBurnNoCap": "gasto Sin límite",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Capacités annoncées : {capabilities}",
"McpCapabilitiesLegacyFallback": "Capacités annoncées : non fournies ; utilisation de la détection héritée",
"McpCapabilitiesNotObserved": "Capacités annoncées : non observées car le serveur n'est pas connecté",
"PickerActionTemplates": "modèles",
"PickerActionTestConnection": "tester la connexion",
"ProviderTemplatesTitle": "Modèles de configuration",
"ProviderTemplateUnpublished": "Ce dépôt n'a pas d'URL OpenAI-compatible publiée, donc ce n'est pas un préréglage remplissable.",
"ProviderTemplateDocs": "Docs : {url}",
"ProviderTemplateCredentials": "Clés : {url}",
"ProviderTemplateKindKeyOnly": "clé seule",
"ProviderTemplateKindCompatible": "compatible OpenAI",
"ProviderTemplateKindUnpublished": "non publié",
"ProviderTemplateBaseUrl": "URL de base : {url}",
"ProviderTemplateModel": "Modèle : {model}",
"ProviderTemplateGuidanceOpencodeZen": "Créez ou copiez une clé API OpenCode Zen depuis OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Créez ou copiez une clé d'abonnement OpenCode Go depuis OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "Hôte SenseTime SenseNova compatible OpenAI. Enregistrez le nom de variable d'environnement, pas la clé brute.",
"ProviderTemplateGuidanceAgnes": "Agnes n'a pas d'URL OpenAI-compatible publiée dans ce dépôt, donc il n'y a pas de préréglage remplissable.",
"ProviderCustomFormBaseUrl": "URL de base",
"ProviderCustomFormModel": "Modèle par défaut",
"ProviderCustomFormHint": "Point de terminaison compatible OpenAI. Enregistrez le nom de variable d'environnement, pas la clé brute.",
"ConfigLabelProviderTemplates": "Modèles de fournisseur pour débutants",
"ConfigActionOpenProviderTemplates": "Enter ouvre la liste des modèles",
"ConfigHintProviderTemplates": "P dans /provider ; C-t teste /models sans traiter 2xx comme modèle prêt",
"ProviderConnectionChecked": "Connexion vérifiée (/models a renvoyé 2xx). La disponibilité du modèle n'a pas été vérifiée.",
"ProviderConnectionCheckedPickModel": "Connexion vérifiée (/models a renvoyé 2xx). Choisissez un modèle par défaut ; la disponibilité du modèle n'a pas été vérifiée.",
"ProviderTestConnectionNeedKey": "Aucune clé API enregistrée pour {provider}. Saisissez une clé, puis appuyez sur T pour tester la connexion.",
"ProviderTestConnectionFailed": "Échec de la vérification de connexion de {provider} : {error}",
"ProviderTestConnectionNoEndpoint": "{provider} n'a pas de point de terminaison /models ; l'accessibilité n'a pas été sondée.",
"ProviderTemplateOpened": "Modèle de fournisseur '{id}' ouvert. Saisissez uniquement la clé API.",
"ProviderTemplateUnknown": "Modèle de fournisseur inconnu '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Modèle intégré '{id}' ouvert. Saisissez le nom de la variable d'environnement de la clé API, puis enregistrez. Ne collez pas la clé brute.",
"OperateBoardHeader": "Operate {id} [{status}] allure={pace} rédacteurs={writers}",
"OperateBoardBurnObserved": "dépense ${actual}/h observée vs ${target}/h cible",
"OperateBoardBurnNoCap": "dépense Sans plafond",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "घोषित क्षमताएँ: {capabilities}",
"McpCapabilitiesLegacyFallback": "घोषित क्षमताएँ: उपलब्ध नहीं; पुराने खोज फ़ॉलबैक का उपयोग",
"McpCapabilitiesNotObserved": "घोषित क्षमताएँ: सर्वर कनेक्ट न होने के कारण अभी नहीं देखी गईं",
"PickerActionTemplates": "टेम्पलेट",
"PickerActionTestConnection": "कनेक्शन जाँचें",
"ProviderTemplatesTitle": "सेटअप टेम्पलेट",
"ProviderTemplateUnpublished": "इस रिपॉजिटरी में कोई प्रकाशित OpenAI-संगत URL नहीं है, इसलिए यह भरने योग्य प्रीसेट नहीं है।",
"ProviderTemplateDocs": "दस्तावेज़: {url}",
"ProviderTemplateCredentials": "कुंजी: {url}",
"ProviderTemplateKindKeyOnly": "केवल कुंजी",
"ProviderTemplateKindCompatible": "संगत",
"ProviderTemplateKindUnpublished": "अप्रकाशित",
"ProviderTemplateBaseUrl": "बेस URL: {url}",
"ProviderTemplateModel": "मॉडल: {model}",
"ProviderTemplateGuidanceOpencodeZen": "OpenCode Zen से OpenCode Zen API कुंजी बनाएँ या कॉपी करें।",
"ProviderTemplateGuidanceOpencodeGo": "OpenCode Zen से OpenCode Go सदस्यता कुंजी बनाएँ या कॉपी करें।",
"ProviderTemplateGuidanceSenseNova": "OpenAI-संगत SenseTime SenseNova होस्ट। कच्ची कुंजी नहीं, पर्यावरण चर का नाम सहेजें।",
"ProviderTemplateGuidanceAgnes": "इस रिपॉजिटरी में Agnes का कोई प्रकाशित OpenAI-संगत URL नहीं है, इसलिए कोई भरने योग्य प्रीसेट नहीं है।",
"ProviderCustomFormBaseUrl": "बेस URL",
"ProviderCustomFormModel": "डिफ़ॉल्ट मॉडल",
"ProviderCustomFormHint": "OpenAI-संगत एंडपॉइंट। कच्ची कुंजी नहीं, पर्यावरण चर का नाम सहेजें।",
"ConfigLabelProviderTemplates": "शुरुआती प्रोवाइडर टेम्पलेट",
"ConfigActionOpenProviderTemplates": "Enter टेम्पलेट सूची खोलता है",
"ConfigHintProviderTemplates": "/provider में P; C-t /models जाँचता है और 2xx को मॉडल-तैयार नहीं मानता",
"ProviderConnectionChecked": "कनेक्शन जाँचा गया (/models ने 2xx दिया)। मॉडल उपलब्धता नहीं जाँची गई।",
"ProviderConnectionCheckedPickModel": "कनेक्शन जाँचा गया (/models ने 2xx दिया)। डिफ़ॉल्ट मॉडल चुनें; मॉडल उपलब्धता नहीं जाँची गई।",
"ProviderTestConnectionNeedKey": "{provider} के लिए कोई API कुंजी सहेजी नहीं है। पहले कुंजी दर्ज करें, फिर कनेक्शन जाँचने के लिए T दबाएँ।",
"ProviderTestConnectionFailed": "{provider} कनेक्शन जाँच विफल: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} के पास /models एंडपॉइंट नहीं है; पहुँच की जाँच नहीं हुई।",
"ProviderTemplateOpened": "प्रोवाइडर टेम्पलेट '{id}' खुला। केवल API कुंजी दर्ज करें।",
"ProviderTemplateUnknown": "अज्ञात प्रोवाइडर टेम्पलेट '{id}'।",
"ProviderTemplateOpenedEnvOnly": "अंतर्निहित टेम्पलेट '{id}' खुला। API कुंजी का पर्यावरण चर नाम दर्ज कर सहेजें; कच्ची कुंजी न चिपकाएँ।",
"OperateBoardHeader": "Operate {id} [{status}] गति={pace} लेखक={writers}",
"OperateBoardBurnObserved": "खर्च देखा गया ${actual}/घंटा बनाम लक्ष्य ${target}/घंटा",
"OperateBoardBurnNoCap": "खर्च कोई सीमा नहीं",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Kemampuan yang diumumkan: {capabilities}",
"McpCapabilitiesLegacyFallback": "Kemampuan yang diumumkan: tidak disediakan; memakai penemuan lama sebagai cadangan",
"McpCapabilitiesNotObserved": "Kemampuan yang diumumkan: belum diamati karena server belum terhubung",
"PickerActionTemplates": "templat",
"PickerActionTestConnection": "uji koneksi",
"ProviderTemplatesTitle": "Templat penyiapan",
"ProviderTemplateUnpublished": "Repositori ini tidak punya URL OpenAI-kompatibel yang diterbitkan, jadi ini bukan preset yang bisa diisi.",
"ProviderTemplateDocs": "Docs: {url}",
"ProviderTemplateCredentials": "Kunci: {url}",
"ProviderTemplateKindKeyOnly": "hanya kunci",
"ProviderTemplateKindCompatible": "kompatibel",
"ProviderTemplateKindUnpublished": "belum terbit",
"ProviderTemplateBaseUrl": "URL dasar: {url}",
"ProviderTemplateModel": "Model default: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Buat atau salin kunci API OpenCode Zen dari OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Buat atau salin kunci langganan OpenCode Go dari OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "Host SenseTime SenseNova yang kompatibel dengan OpenAI. Simpan nama variabel lingkungan, bukan kunci mentah.",
"ProviderTemplateGuidanceAgnes": "Agnes tidak memiliki URL kompatibel OpenAI yang diterbitkan di repositori ini, jadi tidak ada prasetel yang bisa diisi.",
"ProviderCustomFormBaseUrl": "URL dasar",
"ProviderCustomFormModel": "Model bawaan",
"ProviderCustomFormHint": "Endpoint kompatibel OpenAI. Simpan nama variabel lingkungan, bukan kunci mentah.",
"ConfigLabelProviderTemplates": "Templat penyedia untuk pemula",
"ConfigActionOpenProviderTemplates": "Enter membuka daftar templat",
"ConfigHintProviderTemplates": "P di /provider; C-t menguji /models tanpa menganggap 2xx sebagai model siap",
"ProviderConnectionChecked": "Koneksi diperiksa (/models mengembalikan 2xx). Ketersediaan model belum diperiksa.",
"ProviderConnectionCheckedPickModel": "Koneksi diperiksa (/models mengembalikan 2xx). Pilih model bawaan; ketersediaan model belum diperiksa.",
"ProviderTestConnectionNeedKey": "Belum ada API key tersimpan untuk {provider}. Masukkan kunci, lalu tekan T untuk menguji koneksi.",
"ProviderTestConnectionFailed": "Pemeriksaan koneksi {provider} gagal: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} tidak punya endpoint /models; keterjangkauan tidak diselidiki.",
"ProviderTemplateOpened": "Templat penyedia '{id}' dibuka. Masukkan API key saja.",
"ProviderTemplateUnknown": "Templat penyedia tidak dikenal '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Templat bawaan '{id}' dibuka. Masukkan nama variabel lingkungan API key, lalu simpan. Jangan tempel kunci mentah.",
"OperateBoardHeader": "Operate {id} [{status}] laju={pace} penulis={writers}",
"OperateBoardBurnObserved": "pembakaran teramati ${actual}/jam vs target ${target}/jam",
"OperateBoardBurnNoCap": "pembakaran Tanpa batas",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "公開された機能: {capabilities}",
"McpCapabilitiesLegacyFallback": "公開された機能: 未提供(従来の検出フォールバックを使用)",
"McpCapabilitiesNotObserved": "公開された機能: サーバーが未接続のため未確認",
"PickerActionTemplates": "テンプレート",
"PickerActionTestConnection": "接続テスト",
"ProviderTemplatesTitle": "セットアップテンプレート",
"ProviderTemplateUnpublished": "このリポジトリに公開された OpenAI 互換 URL がないため、入力可能なプリセットにはできません。",
"ProviderTemplateDocs": "ドキュメント: {url}",
"ProviderTemplateCredentials": "キー: {url}",
"ProviderTemplateKindKeyOnly": "キーのみ",
"ProviderTemplateKindCompatible": "互換",
"ProviderTemplateKindUnpublished": "未公開",
"ProviderTemplateBaseUrl": "ベースURL: {url}",
"ProviderTemplateModel": "モデル: {model}",
"ProviderTemplateGuidanceOpencodeZen": "OpenCode Zen で OpenCode Zen の API キーを作成またはコピーします。",
"ProviderTemplateGuidanceOpencodeGo": "OpenCode Zen で OpenCode Go のサブスクリプションキーを作成またはコピーします。",
"ProviderTemplateGuidanceSenseNova": "OpenAI 互換の SenseTime SenseNova ホストです。生のキーではなく環境変数名を保存します。",
"ProviderTemplateGuidanceAgnes": "このリポジトリに Agnes の公開 OpenAI 互換 URL がないため、入力可能なプリセットはありません。",
"ProviderCustomFormBaseUrl": "ベースURL",
"ProviderCustomFormModel": "既定モデル",
"ProviderCustomFormHint": "OpenAI 互換エンドポイント。生のキーではなく環境変数名を保存します。",
"ConfigLabelProviderTemplates": "初心者向けプロバイダテンプレート",
"ConfigActionOpenProviderTemplates": "Enter でテンプレート一覧を開く",
"ConfigHintProviderTemplates": "/provider で P。C-t は /models を試し、2xx をモデル準備完了とは見なしません",
"ProviderConnectionChecked": "接続を確認しました(/models が 2xx)。モデルの利用可否は未確認です。",
"ProviderConnectionCheckedPickModel": "接続を確認しました(/models が 2xx)。既定モデルを選んでください。モデルの利用可否は未確認です。",
"ProviderTestConnectionNeedKey": "{provider} の API キーが未保存です。先にキーを入力し、T で接続をテストしてください。",
"ProviderTestConnectionFailed": "{provider} の接続確認に失敗しました: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} には /models エンドポイントがないため、到達性は調べていません。",
"ProviderTemplateOpened": "プロバイダテンプレート '{id}' を開きました。API キーだけ入力してください。",
"ProviderTemplateUnknown": "未知のプロバイダテンプレート '{id}'。",
"ProviderTemplateOpenedEnvOnly": "組み込みテンプレート '{id}' を開きました。生のキーではなく API キーの環境変数名を入力して保存してください。",
"OperateBoardHeader": "Operate {id} [{status}] ペース={pace} ライター={writers}",
"OperateBoardBurnObserved": "バーン 観測 ${actual}/時 vs 目標 ${target}/時",
"OperateBoardBurnNoCap": "バーン 上限なし",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "공개된 기능: {capabilities}",
"McpCapabilitiesLegacyFallback": "공개된 기능: 제공되지 않음; 레거시 검색 대체 경로 사용",
"McpCapabilitiesNotObserved": "공개된 기능: 서버가 연결되지 않아 확인되지 않음",
"PickerActionTemplates": "템플릿",
"PickerActionTestConnection": "연결 테스트",
"ProviderTemplatesTitle": "설정 템플릿",
"ProviderTemplateUnpublished": "이 저장소에 게시된 OpenAI 호환 URL이 없어 입력 가능한 프리셋이 아닙니다.",
"ProviderTemplateDocs": "문서: {url}",
"ProviderTemplateCredentials": "키: {url}",
"ProviderTemplateKindKeyOnly": "키만",
"ProviderTemplateKindCompatible": "호환",
"ProviderTemplateKindUnpublished": "미공개",
"ProviderTemplateBaseUrl": "기본 URL: {url}",
"ProviderTemplateModel": "모델: {model}",
"ProviderTemplateGuidanceOpencodeZen": "OpenCode Zen에서 OpenCode Zen API 키를 만들거나 복사하세요.",
"ProviderTemplateGuidanceOpencodeGo": "OpenCode Zen에서 OpenCode Go 구독 키를 만들거나 복사하세요.",
"ProviderTemplateGuidanceSenseNova": "OpenAI 호환 SenseTime SenseNova 호스트입니다. 원시 키가 아니라 환경 변수 이름을 저장하세요.",
"ProviderTemplateGuidanceAgnes": "이 저장소에 Agnes의 게시된 OpenAI 호환 URL이 없어 입력 가능한 프리셋이 없습니다.",
"ProviderCustomFormBaseUrl": "기본 URL",
"ProviderCustomFormModel": "기본 모델",
"ProviderCustomFormHint": "OpenAI 호환 엔드포인트. 원시 키가 아니라 환경 변수 이름을 저장하세요.",
"ConfigLabelProviderTemplates": "초보자 프로바이더 템플릿",
"ConfigActionOpenProviderTemplates": "Enter로 템플릿 목록 열기",
"ConfigHintProviderTemplates": "/provider에서 P; C-t는 /models를 시험하며 2xx를 모델 준비 완료로 보지 않습니다",
"ProviderConnectionChecked": "연결을 확인했습니다(/models가 2xx). 모델 사용 가능 여부는 확인하지 않았습니다.",
"ProviderConnectionCheckedPickModel": "연결을 확인했습니다(/models가 2xx). 기본 모델을 고르세요. 모델 사용 가능 여부는 확인하지 않았습니다.",
"ProviderTestConnectionNeedKey": "{provider} API 키가 저장되어 있지 않습니다. 먼저 키를 입력한 뒤 T로 연결을 테스트하세요.",
"ProviderTestConnectionFailed": "{provider} 연결 확인 실패: {error}",
"ProviderTestConnectionNoEndpoint": "{provider}에는 /models 엔드포인트가 없어 도달 여부를 조사하지 않았습니다.",
"ProviderTemplateOpened": "프로바이더 템플릿 '{id}'을(를) 열었습니다. API 키만 입력하세요.",
"ProviderTemplateUnknown": "알 수 없는 프로바이더 템플릿 '{id}'.",
"ProviderTemplateOpenedEnvOnly": "내장 템플릿 '{id}'을(를) 열었습니다. 원시 키가 아니라 API 키 환경 변수 이름을 입력한 뒤 저장하세요.",
"OperateBoardHeader": "Operate {id} [{status}] 페이스={pace} 작성자={writers}",
"OperateBoardBurnObserved": "소진 관측 ${actual}/시간 vs 목표 ${target}/시간",
"OperateBoardBurnNoCap": "소진 상한 없음",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Recursos anunciados: {capabilities}",
"McpCapabilitiesLegacyFallback": "Recursos anunciados: não informados; usando descoberta legada como alternativa",
"McpCapabilitiesNotObserved": "Recursos anunciados: não observados porque o servidor não está conectado",
"PickerActionTemplates": "modelos",
"PickerActionTestConnection": "testar conexão",
"ProviderTemplatesTitle": "Modelos de configuração",
"ProviderTemplateUnpublished": "Este repositório não tem uma URL OpenAI-compatível publicada, então isto não é um preset preenchível.",
"ProviderTemplateDocs": "Docs: {url}",
"ProviderTemplateCredentials": "Chaves: {url}",
"ProviderTemplateKindKeyOnly": "só chave",
"ProviderTemplateKindCompatible": "compatível",
"ProviderTemplateKindUnpublished": "não publicado",
"ProviderTemplateBaseUrl": "URL base: {url}",
"ProviderTemplateModel": "Modelo: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Crie ou copie uma API key do OpenCode Zen no OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Crie ou copie uma chave de assinatura do OpenCode Go no OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "Host SenseTime SenseNova compatível com OpenAI. Guarde o nome da variável de ambiente, não a chave crua.",
"ProviderTemplateGuidanceAgnes": "Agnes não tem uma URL OpenAI-compatível publicada neste repositório, então não há preset preenchível.",
"ProviderCustomFormBaseUrl": "URL base",
"ProviderCustomFormModel": "Modelo padrão",
"ProviderCustomFormHint": "Endpoint compatível com OpenAI. Guarde o nome da variável de ambiente, não a chave crua.",
"ConfigLabelProviderTemplates": "Modelos de provedor para iniciantes",
"ConfigActionOpenProviderTemplates": "Enter abre a lista de modelos",
"ConfigHintProviderTemplates": "P em /provider; C-t testa /models sem tratar 2xx como modelo pronto",
"ProviderConnectionChecked": "Conexão verificada (/models retornou 2xx). A disponibilidade do modelo não foi verificada.",
"ProviderConnectionCheckedPickModel": "Conexão verificada (/models retornou 2xx). Escolha um modelo padrão; a disponibilidade do modelo não foi verificada.",
"ProviderTestConnectionNeedKey": "Nenhuma API key salva para {provider}. Informe a chave e pressione T para testar a conexão.",
"ProviderTestConnectionFailed": "Falha na verificação de conexão de {provider}: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} não tem endpoint /models; a alcançabilidade não foi sondada.",
"ProviderTemplateOpened": "Modelo de provedor '{id}' aberto. Informe só a API key.",
"ProviderTemplateUnknown": "Modelo de provedor desconhecido '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Modelo embutido '{id}' aberto. Informe o nome da variável de ambiente da API key e salve. Não cole a chave crua.",
"OperateBoardHeader": "Operate {id} [{status}] ritmo={pace} escritores={writers}",
"OperateBoardBurnObserved": "gasto ${actual}/h observado vs ${target}/h alvo",
"OperateBoardBurnNoCap": "gasto Sem limite",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Заявленные возможности: {capabilities}",
"McpCapabilitiesLegacyFallback": "Заявленные возможности: не указаны; используется резервное устаревшее обнаружение",
"McpCapabilitiesNotObserved": "Заявленные возможности: не определены, так как сервер не подключён",
"PickerActionTemplates": "шаблоны",
"PickerActionTestConnection": "проверить соединение",
"ProviderTemplatesTitle": "Шаблоны настройки",
"ProviderTemplateUnpublished": "В этом репозитории нет опубликованного OpenAI-совместимого URL, поэтому это не заполняемый пресет.",
"ProviderTemplateDocs": "Документация: {url}",
"ProviderTemplateCredentials": "Ключи: {url}",
"ProviderTemplateKindKeyOnly": "только ключ",
"ProviderTemplateKindCompatible": "совместимый",
"ProviderTemplateKindUnpublished": "неопубликовано",
"ProviderTemplateBaseUrl": "Базовый URL: {url}",
"ProviderTemplateModel": "Модель: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Создайте или скопируйте API-ключ OpenCode Zen в OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Создайте или скопируйте ключ подписки OpenCode Go в OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "OpenAI-совместимый хост SenseTime SenseNova. Сохраните имя переменной окружения, а не сам ключ.",
"ProviderTemplateGuidanceAgnes": "У Agnes нет опубликованного OpenAI-совместимого URL в этом репозитории, поэтому заполняемого пресета нет.",
"ProviderCustomFormBaseUrl": "Базовый URL",
"ProviderCustomFormModel": "Модель по умолчанию",
"ProviderCustomFormHint": "OpenAI-совместимая конечная точка. Сохраняйте имя переменной окружения, не сырой ключ.",
"ConfigLabelProviderTemplates": "Шаблоны провайдера для новичков",
"ConfigActionOpenProviderTemplates": "Enter открывает список шаблонов",
"ConfigHintProviderTemplates": "P в /provider; C-t проверяет /models и не считает 2xx готовностью модели",
"ProviderConnectionChecked": "Соединение проверено (/models вернул 2xx). Доступность модели не проверена.",
"ProviderConnectionCheckedPickModel": "Соединение проверено (/models вернул 2xx). Выберите модель по умолчанию; доступность модели не проверена.",
"ProviderTestConnectionNeedKey": "Для {provider} не сохранён API-ключ. Введите ключ, затем нажмите T, чтобы проверить соединение.",
"ProviderTestConnectionFailed": "Проверка соединения {provider} не удалась: {error}",
"ProviderTestConnectionNoEndpoint": "У {provider} нет конечной точки /models; доступность не зондировалась.",
"ProviderTemplateOpened": "Открыт шаблон провайдера '{id}'. Введите только API-ключ.",
"ProviderTemplateUnknown": "Неизвестный шаблон провайдера '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Открыт встроенный шаблон '{id}'. Введите имя переменной окружения API-ключа и сохраните. Не вставляйте сырой ключ.",
"OperateBoardHeader": "Operate {id} [{status}] темп={pace} писателей={writers}",
"OperateBoardBurnObserved": "расход наблюдается ${actual}/ч против цель ${target}/ч",
"OperateBoardBurnNoCap": "расход Без лимита",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Заявлені можливості: {capabilities}",
"McpCapabilitiesLegacyFallback": "Заявлені можливості: не вказані; використовується резервне застаріле виявлення",
"McpCapabilitiesNotObserved": "Заявлені можливості: не визначені, оскільки сервер не підключено",
"PickerActionTemplates": "шаблони",
"PickerActionTestConnection": "перевірити з’єднання",
"ProviderTemplatesTitle": "Шаблони налаштування",
"ProviderTemplateUnpublished": "У цьому репозиторії немає опублікованого OpenAI-сумісного URL, тож це не заповнюваний пресет.",
"ProviderTemplateDocs": "Документація: {url}",
"ProviderTemplateCredentials": "Ключі: {url}",
"ProviderTemplateKindKeyOnly": "лише ключ",
"ProviderTemplateKindCompatible": "сумісний",
"ProviderTemplateKindUnpublished": "неопубліковано",
"ProviderTemplateBaseUrl": "Базовий URL: {url}",
"ProviderTemplateModel": "Модель: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Створіть або скопіюйте API-ключ OpenCode Zen в OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Створіть або скопіюйте ключ підписки OpenCode Go в OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "OpenAI-сумісний хост SenseTime SenseNova. Збережіть ім'я змінної середовища, а не сам ключ.",
"ProviderTemplateGuidanceAgnes": "У Agnes немає опублікованого OpenAI-сумісного URL у цьому репозиторії, тому заповнюваного пресета немає.",
"ProviderCustomFormBaseUrl": "Базовий URL",
"ProviderCustomFormModel": "Типова модель",
"ProviderCustomFormHint": "OpenAI-сумісна кінцева точка. Зберігайте ім’я змінної середовища, не сирий ключ.",
"ConfigLabelProviderTemplates": "Шаблони провайдера для початківців",
"ConfigActionOpenProviderTemplates": "Enter відкриває список шаблонів",
"ConfigHintProviderTemplates": "P у /provider; C-t перевіряє /models і не вважає 2xx готовністю моделі",
"ProviderConnectionChecked": "З’єднання перевірено (/models повернув 2xx). Доступність моделі не перевірена.",
"ProviderConnectionCheckedPickModel": "З’єднання перевірено (/models повернув 2xx). Оберіть типову модель; доступність моделі не перевірена.",
"ProviderTestConnectionNeedKey": "Для {provider} не збережено API-ключ. Введіть ключ, потім натисніть T, щоб перевірити з’єднання.",
"ProviderTestConnectionFailed": "Перевірка з’єднання {provider} не вдалася: {error}",
"ProviderTestConnectionNoEndpoint": "У {provider} немає кінцевої точки /models; досяжність не зондувалась.",
"ProviderTemplateOpened": "Відкрито шаблон провайдера '{id}'. Введіть лише API-ключ.",
"ProviderTemplateUnknown": "Невідомий шаблон провайдера '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Відкрито вбудований шаблон '{id}'. Введіть ім’я змінної середовища API-ключа і збережіть. Не вставляйте сирий ключ.",
"OperateBoardHeader": "Operate {id} [{status}] темп={pace} авторів={writers}",
"OperateBoardBurnObserved": "витрата спостерігається ${actual}/год проти ціль ${target}/год",
"OperateBoardBurnNoCap": "витрата Без обмеження",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "Khả năng đã công bố: {capabilities}",
"McpCapabilitiesLegacyFallback": "Khả năng đã công bố: không được cung cấp; dùng cơ chế khám phá cũ",
"McpCapabilitiesNotObserved": "Khả năng đã công bố: chưa quan sát được vì máy chủ chưa kết nối",
"PickerActionTemplates": "mẫu",
"PickerActionTestConnection": "kiểm tra kết nối",
"ProviderTemplatesTitle": "Mẫu thiết lập",
"ProviderTemplateUnpublished": "Kho này không có URL OpenAI tương thích đã công bố, nên đây không phải preset điền được.",
"ProviderTemplateDocs": "Tài liệu: {url}",
"ProviderTemplateCredentials": "Khóa: {url}",
"ProviderTemplateKindKeyOnly": "chỉ khóa",
"ProviderTemplateKindCompatible": "tương thích",
"ProviderTemplateKindUnpublished": "chưa công bố",
"ProviderTemplateBaseUrl": "URL cơ sở: {url}",
"ProviderTemplateModel": "Mô hình: {model}",
"ProviderTemplateGuidanceOpencodeZen": "Tạo hoặc sao chép khóa API OpenCode Zen từ OpenCode Zen.",
"ProviderTemplateGuidanceOpencodeGo": "Tạo hoặc sao chép khóa đăng ký OpenCode Go từ OpenCode Zen.",
"ProviderTemplateGuidanceSenseNova": "Máy chủ SenseTime SenseNova tương thích OpenAI. Lưu tên biến môi trường, không lưu khóa thô.",
"ProviderTemplateGuidanceAgnes": "Agnes không có URL tương thích OpenAI đã công bố trong kho này, nên không có preset điền sẵn.",
"ProviderCustomFormBaseUrl": "URL cơ sở",
"ProviderCustomFormModel": "Mô hình mặc định",
"ProviderCustomFormHint": "Điểm cuối tương thích OpenAI. Lưu tên biến môi trường, không lưu khóa thô.",
"ConfigLabelProviderTemplates": "Mẫu nhà cung cấp cho người mới",
"ConfigActionOpenProviderTemplates": "Enter mở danh sách mẫu",
"ConfigHintProviderTemplates": "P trong /provider; C-t thử /models và không coi 2xx là mô hình sẵn sàng",
"ProviderConnectionChecked": "Đã kiểm tra kết nối (/models trả 2xx). Chưa kiểm tra mô hình có dùng được hay không.",
"ProviderConnectionCheckedPickModel": "Đã kiểm tra kết nối (/models trả 2xx). Chọn mô hình mặc định; chưa kiểm tra mô hình có dùng được hay không.",
"ProviderTestConnectionNeedKey": "Chưa lưu API key cho {provider}. Nhập khóa trước, rồi nhấn T để kiểm tra kết nối.",
"ProviderTestConnectionFailed": "{provider} kiểm tra kết nối thất bại: {error}",
"ProviderTestConnectionNoEndpoint": "{provider} không có endpoint /models nên chưa dò khả năng tới được.",
"ProviderTemplateOpened": "Đã mở mẫu nhà cung cấp '{id}'. Chỉ cần nhập API key.",
"ProviderTemplateUnknown": "Mẫu nhà cung cấp không rõ '{id}'.",
"ProviderTemplateOpenedEnvOnly": "Đã mở mẫu có sẵn '{id}'. Nhập tên biến môi trường API key rồi lưu; đừng dán khóa thô.",
"OperateBoardHeader": "Operate {id} [{status}] nhịp={pace} người viết={writers}",
"OperateBoardBurnObserved": "tiêu hao quan sát ${actual}/giờ so với mục tiêu ${target}/giờ",
"OperateBoardBurnNoCap": "tiêu hao Không giới hạn",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "已声明的能力:{capabilities}",
"McpCapabilitiesLegacyFallback": "已声明的能力:未提供;使用旧版发现回退",
"McpCapabilitiesNotObserved": "已声明的能力:服务器未连接,尚未观测",
"PickerActionTemplates": "模板",
"PickerActionTestConnection": "测试连接",
"ProviderTemplatesTitle": "设置模板",
"ProviderTemplateUnpublished": "本仓库没有已发布的 OpenAI 兼容 URL,因此不能做成可填写的预设。",
"ProviderTemplateDocs": "文档:{url}",
"ProviderTemplateCredentials": "密钥:{url}",
"ProviderTemplateKindKeyOnly": "仅密钥",
"ProviderTemplateKindCompatible": "兼容",
"ProviderTemplateKindUnpublished": "未公布",
"ProviderTemplateBaseUrl": "基础 URL:{url}",
"ProviderTemplateModel": "模型:{model}",
"ProviderTemplateGuidanceOpencodeZen": "在 OpenCode Zen 创建或复制 OpenCode Zen API 密钥。",
"ProviderTemplateGuidanceOpencodeGo": "在 OpenCode Zen 创建或复制 OpenCode Go 订阅密钥。",
"ProviderTemplateGuidanceSenseNova": "OpenAI 兼容的 SenseTime SenseNova 主机。请保存环境变量名,不要保存原始密钥。",
"ProviderTemplateGuidanceAgnes": "本仓库没有 Agnes 已发布的 OpenAI 兼容 URL,因此没有可填写的预设。",
"ProviderCustomFormBaseUrl": "基础 URL",
"ProviderCustomFormModel": "默认模型",
"ProviderCustomFormHint": "OpenAI 兼容端点。请保存环境变量名,不要保存原始密钥。",
"ConfigLabelProviderTemplates": "新手提供商模板",
"ConfigActionOpenProviderTemplates": "按 Enter 打开模板列表",
"ConfigHintProviderTemplates": "在 /provider 按 P;C-t 测试 /models,2xx 只表示可达,不表示模型可用",
"ProviderConnectionChecked": "连接已检查(/models 返回 2xx)。未检查模型是否可用。",
"ProviderConnectionCheckedPickModel": "连接已检查(/models 返回 2xx)。请选择默认模型;未检查模型是否可用。",
"ProviderTestConnectionNeedKey": "尚未保存 {provider} 的 API 密钥。请先输入密钥,再按 T 测试连接。",
"ProviderTestConnectionFailed": "{provider} 连接检查失败:{error}",
"ProviderTestConnectionNoEndpoint": "{provider} 没有 /models 端点,因此未探测可达性。",
"ProviderTemplateOpened": "已打开提供商模板 '{id}'。只需输入 API 密钥。",
"ProviderTemplateUnknown": "未知提供商模板 '{id}'。",
"ProviderTemplateOpenedEnvOnly": "已打开内置模板 '{id}'。请填写 API 密钥环境变量名后保存,不要粘贴原始密钥。",
"OperateBoardHeader": "Operate {id} [{status}] 节奏={pace} 写手={writers}",
"OperateBoardBurnObserved": "消耗 观测 ${actual}/时 vs 目标 ${target}/时",
"OperateBoardBurnNoCap": "消耗 无上限",
-20
View File
@@ -1932,35 +1932,15 @@
"McpCapabilitiesAdvertised": "已宣告的能力:{capabilities}",
"McpCapabilitiesLegacyFallback": "已宣告的能力:未提供;使用舊版探索後援",
"McpCapabilitiesNotObserved": "已宣告的能力:伺服器未連線,尚未觀測",
"PickerActionTemplates": "範本",
"PickerActionTestConnection": "測試連線",
"ProviderTemplatesTitle": "設定範本",
"ProviderTemplateUnpublished": "本倉庫沒有已發布的 OpenAI 相容 URL,因此不能做成可填寫的預設。",
"ProviderTemplateDocs": "文件:{url}",
"ProviderTemplateCredentials": "金鑰:{url}",
"ProviderTemplateKindKeyOnly": "僅金鑰",
"ProviderTemplateKindCompatible": "相容",
"ProviderTemplateKindUnpublished": "未公布",
"ProviderTemplateBaseUrl": "基礎 URL:{url}",
"ProviderTemplateModel": "模型:{model}",
"ProviderTemplateGuidanceOpencodeZen": "在 OpenCode Zen 建立或複製 OpenCode Zen API 金鑰。",
"ProviderTemplateGuidanceOpencodeGo": "在 OpenCode Zen 建立或複製 OpenCode Go 訂閱金鑰。",
"ProviderTemplateGuidanceSenseNova": "OpenAI 相容的 SenseTime SenseNova 主機。請儲存環境變數名,不要儲存原始金鑰。",
"ProviderTemplateGuidanceAgnes": "本倉庫沒有 Agnes 已發布的 OpenAI 相容 URL,因此沒有可填寫的預設。",
"ProviderCustomFormBaseUrl": "基礎 URL",
"ProviderCustomFormModel": "預設模型",
"ProviderCustomFormHint": "OpenAI 相容端點。請儲存環境變數名,不要儲存原始金鑰。",
"ConfigLabelProviderTemplates": "新手提供商範本",
"ConfigActionOpenProviderTemplates": "按 Enter 開啟範本清單",
"ConfigHintProviderTemplates": "在 /provider 按 P;C-t 測試 /models,2xx 只表示可達,不表示模型可用",
"ProviderConnectionChecked": "連線已檢查(/models 回傳 2xx)。未檢查模型是否可用。",
"ProviderConnectionCheckedPickModel": "連線已檢查(/models 回傳 2xx)。請選擇預設模型;未檢查模型是否可用。",
"ProviderTestConnectionNeedKey": "尚未儲存 {provider} 的 API 金鑰。請先輸入金鑰,再按 T 測試連線。",
"ProviderTestConnectionFailed": "{provider} 連線檢查失敗:{error}",
"ProviderTestConnectionNoEndpoint": "{provider} 沒有 /models 端點,因此未探測可達性。",
"ProviderTemplateOpened": "已開啟提供商範本 '{id}'。只需輸入 API 金鑰。",
"ProviderTemplateUnknown": "未知提供商範本 '{id}'。",
"ProviderTemplateOpenedEnvOnly": "已開啟內建範本 '{id}'。請填入 API 金鑰環境變數名後儲存,不要貼上原始金鑰。",
"OperateBoardHeader": "Operate {id} [{status}] 節奏={pace} 寫手={writers}",
"OperateBoardBurnObserved": "消耗 觀測 ${actual}/時 vs 目標 ${target}/時",
"OperateBoardBurnNoCap": "消耗 無上限",
-93
View File
@@ -2252,35 +2252,15 @@ pub enum MessageId {
FooterHintForAgents,
FooterHintToManage,
AgentRailQueuedCount,
PickerActionTemplates,
PickerActionTestConnection,
ProviderTemplatesTitle,
ProviderTemplateUnpublished,
ProviderTemplateDocs,
ProviderTemplateCredentials,
ProviderTemplateKindKeyOnly,
ProviderTemplateKindCompatible,
ProviderTemplateKindUnpublished,
ProviderTemplateBaseUrl,
ProviderTemplateModel,
ProviderTemplateGuidanceOpencodeZen,
ProviderTemplateGuidanceOpencodeGo,
ProviderTemplateGuidanceSenseNova,
ProviderTemplateGuidanceAgnes,
ProviderCustomFormBaseUrl,
ProviderCustomFormModel,
ProviderCustomFormHint,
ConfigLabelProviderTemplates,
ConfigActionOpenProviderTemplates,
ConfigHintProviderTemplates,
ProviderConnectionChecked,
ProviderConnectionCheckedPickModel,
ProviderTestConnectionNeedKey,
ProviderTestConnectionFailed,
ProviderTestConnectionNoEndpoint,
ProviderTemplateOpened,
ProviderTemplateOpenedEnvOnly,
ProviderTemplateUnknown,
ComposerPlaceholderFollowUp,
ComposerPlaceholderSendNow,
ComposerHintSendWithQueue,
@@ -4514,35 +4494,15 @@ pub const ALL_MESSAGE_IDS: &[MessageId] = &[
MessageId::FooterHintForAgents,
MessageId::FooterHintToManage,
MessageId::AgentRailQueuedCount,
MessageId::PickerActionTemplates,
MessageId::PickerActionTestConnection,
MessageId::ProviderTemplatesTitle,
MessageId::ProviderTemplateUnpublished,
MessageId::ProviderTemplateDocs,
MessageId::ProviderTemplateCredentials,
MessageId::ProviderTemplateKindKeyOnly,
MessageId::ProviderTemplateKindCompatible,
MessageId::ProviderTemplateKindUnpublished,
MessageId::ProviderTemplateBaseUrl,
MessageId::ProviderTemplateModel,
MessageId::ProviderTemplateGuidanceOpencodeZen,
MessageId::ProviderTemplateGuidanceOpencodeGo,
MessageId::ProviderTemplateGuidanceSenseNova,
MessageId::ProviderTemplateGuidanceAgnes,
MessageId::ProviderCustomFormBaseUrl,
MessageId::ProviderCustomFormModel,
MessageId::ProviderCustomFormHint,
MessageId::ConfigLabelProviderTemplates,
MessageId::ConfigActionOpenProviderTemplates,
MessageId::ConfigHintProviderTemplates,
MessageId::ProviderConnectionChecked,
MessageId::ProviderConnectionCheckedPickModel,
MessageId::ProviderTestConnectionNeedKey,
MessageId::ProviderTestConnectionFailed,
MessageId::ProviderTestConnectionNoEndpoint,
MessageId::ProviderTemplateOpened,
MessageId::ProviderTemplateOpenedEnvOnly,
MessageId::ProviderTemplateUnknown,
MessageId::ComposerPlaceholderFollowUp,
MessageId::ComposerPlaceholderSendNow,
MessageId::ComposerHintSendWithQueue,
@@ -5953,15 +5913,6 @@ mod tests {
MessageId::ProviderNoConfiguredTitle,
MessageId::ProviderNoConfiguredHint,
MessageId::ProviderNoCatalogModels,
MessageId::ProviderTemplateKindKeyOnly,
MessageId::ProviderTemplateKindCompatible,
MessageId::ProviderTemplateKindUnpublished,
MessageId::ProviderTemplateBaseUrl,
MessageId::ProviderTemplateModel,
MessageId::ProviderTemplateGuidanceOpencodeZen,
MessageId::ProviderTemplateGuidanceOpencodeGo,
MessageId::ProviderTemplateGuidanceSenseNova,
MessageId::ProviderTemplateGuidanceAgnes,
MessageId::ProviderCustomFormBaseUrl,
MessageId::ProviderCustomFormModel,
MessageId::ConfigHintProviderUrl,
@@ -5991,50 +5942,6 @@ mod tests {
}
}
#[test]
fn provider_template_strings_keep_product_names_and_placeholders() {
for locale in Locale::shipped_complete() {
let base_url = tr(*locale, MessageId::ProviderTemplateBaseUrl);
let model = tr(*locale, MessageId::ProviderTemplateModel);
assert!(
base_url.contains("{url}"),
"{} Base URL must keep {{url}}: {base_url}",
locale.tag()
);
assert!(
model.contains("{model}"),
"{} Model must keep {{model}}: {model}",
locale.tag()
);
let zen = tr(*locale, MessageId::ProviderTemplateGuidanceOpencodeZen);
let go = tr(*locale, MessageId::ProviderTemplateGuidanceOpencodeGo);
let sense = tr(*locale, MessageId::ProviderTemplateGuidanceSenseNova);
let agnes = tr(*locale, MessageId::ProviderTemplateGuidanceAgnes);
assert!(
zen.contains("OpenCode Zen"),
"{} Zen guidance must keep OpenCode Zen: {zen}",
locale.tag()
);
assert!(
go.contains("OpenCode Go") && go.contains("OpenCode Zen"),
"{} Go guidance must keep OpenCode Go/Zen: {go}",
locale.tag()
);
assert!(
sense.contains("SenseNova")
&& sense.contains("SenseTime")
&& sense.contains("OpenAI"),
"{} SenseNova guidance must keep product names: {sense}",
locale.tag()
);
assert!(
agnes.contains("Agnes") && agnes.contains("OpenAI"),
"{} Agnes guidance must keep Agnes and OpenAI: {agnes}",
locale.tag()
);
}
}
#[test]
fn launch_copy_is_translated_in_complete_locales() {
let ids = [
+21 -49
View File
@@ -14,7 +14,7 @@ use super::CommandResult;
pub(in crate::commands) const COMMAND_INFO: CommandInfo = CommandInfo {
name: "provider",
aliases: &[],
usage: "/provider [setup [name]|templates|name [model]]",
usage: "/provider [setup [name]|name [model]]",
description_id: MessageId::CmdProviderDescription,
};
@@ -49,14 +49,6 @@ pub fn provider(app: &mut App, args: Option<&str>) -> CommandResult {
if name.eq_ignore_ascii_case("fallback") {
return provider_fallback(app, model_arg);
}
if name.eq_ignore_ascii_case("templates") || name.eq_ignore_ascii_case("template") {
if model_arg.is_some() {
return CommandResult::error(
"Usage: /provider templates — open beginner setup templates.".to_string(),
);
}
return CommandResult::action(AppAction::OpenProviderTemplateList);
}
if name.eq_ignore_ascii_case("setup") {
return match model_arg {
None => CommandResult::action(AppAction::OpenProviderSetup { provider: None }),
@@ -128,27 +120,15 @@ pub(in crate::commands) fn provider_setup_action_for_name(raw: &str) -> Result<A
if raw.eq_ignore_ascii_case("ds4") || raw.eq_ignore_ascii_case("dwarfstar") {
return Ok(AppAction::OpenDs4Setup);
}
if let Some(template) = codewhale_config::provider_setup_template(raw) {
match template.apply {
codewhale_config::ProviderSetupApply::FirstClass(kind) => {
return Ok(AppAction::OpenProviderSetup {
provider: Some(ApiProvider::from_kind(kind)),
});
}
codewhale_config::ProviderSetupApply::Compatible
| codewhale_config::ProviderSetupApply::Unpublished => {
return Ok(AppAction::OpenTemplateSetup {
template_id: template.id.to_string(),
});
}
}
}
// First-class aliases (zen, opencode-zen, …) resolve through the provider
// registry. There are no setup templates anymore: named custom hosts are
// configured with `/provider setup` and the blank custom form (#6289).
match ApiProvider::parse(raw) {
Some(provider) => Ok(AppAction::OpenProviderSetup {
provider: Some(provider),
}),
None => Err(format!(
"Unknown provider '{raw}'. Expected: {}, or a template (agnes, sensenova, opencode-zen, opencode-go).",
"Unknown provider '{raw}'. Expected: {}.",
ApiProvider::names_hint()
)),
}
@@ -323,36 +303,28 @@ mod tests {
}
#[test]
fn setup_subcommand_opens_agnes_unpublished_template() {
fn setup_subcommand_rejects_retired_template_name() {
let mut app = create_test_app();
let result = provider(&mut app, Some("setup agnes"));
assert_eq!(
result.action,
Some(AppAction::OpenTemplateSetup {
template_id: "agnes".to_string(),
})
);
assert!(result.message.is_none());
assert!(result.action.is_none());
let msg = result.message.expect("expected error message");
assert!(msg.contains("Unknown provider 'agnes'"));
assert!(result.is_error);
}
#[test]
fn setup_subcommand_opens_first_class_zen_template() {
fn setup_subcommand_opens_first_class_zen_provider() {
let mut app = create_test_app();
let result = provider(&mut app, Some("setup opencode-zen"));
assert_eq!(
result.action,
Some(AppAction::OpenProviderSetup {
provider: Some(ApiProvider::OpencodeZen),
})
);
}
#[test]
fn templates_subcommand_opens_template_list() {
let mut app = create_test_app();
let result = provider(&mut app, Some("templates"));
assert_eq!(result.action, Some(AppAction::OpenProviderTemplateList));
assert!(result.message.is_none());
for name in ["setup opencode-zen", "setup zen"] {
let result = provider(&mut app, Some(name));
assert_eq!(
result.action,
Some(AppAction::OpenProviderSetup {
provider: Some(ApiProvider::OpencodeZen),
}),
"{name} must resolve through the provider registry"
);
}
}
#[test]
+7 -7
View File
@@ -261,18 +261,18 @@ mod tests {
}
#[test]
fn setup_provider_agnes_opens_unpublished_template() {
fn setup_provider_agnes_rejects_retired_template_name() {
let mut app = test_app();
let result = SetupCmd::execute(&mut app, Some("provider agnes"));
assert_eq!(
result.action,
Some(AppAction::OpenTemplateSetup {
template_id: "agnes".to_string(),
})
assert!(result.action.is_none());
assert!(
result
.message
.as_deref()
.is_some_and(|message| message.contains("Unknown provider 'agnes'"))
);
assert!(result.message.is_none());
}
#[test]
+1 -1
View File
@@ -9233,7 +9233,7 @@ async fn settings_schema_serves_every_declared_row_with_runtime_state() -> Resul
assert_eq!(row("approval_mode")["editable"], true);
assert_eq!(row("provider_url")["editable"], false);
assert_eq!(row("telemetry")["editable"], false);
for action in ["provider_templates", "mcp_open", "plugins_open"] {
for action in ["mcp_open", "plugins_open"] {
assert_eq!(row(action)["row"], "action");
assert_eq!(row(action)["editable"], false);
}
-6
View File
@@ -539,12 +539,6 @@ pub enum AppAction {
},
/// Open the named, keyless DS4 local-runtime preset for review and save.
OpenDs4Setup,
/// Open a beginner provider setup template by catalog id (#5350).
OpenTemplateSetup {
template_id: String,
},
/// Open the beginner provider template list.
OpenProviderTemplateList,
/// Run the xAI/Grok device-code flow with the TUI temporarily suspended.
StartXaiDeviceLogin,
/// Run native ChatGPT PKCE sign-in with the TUI temporarily suspended.
+1 -1
View File
@@ -3165,4 +3165,4 @@ pub(crate) fn apply_hot_tail_to_line(line: &mut Line<'static>, low_motion: bool)
}
#[cfg(test)]
mod tests;
mod tests;
+49 -10
View File
@@ -2265,12 +2265,15 @@ fn provider_catalog_receipt_for_route(
source: Option<&CatalogSource>,
) -> Option<(CatalogStatus, bool)> {
let identity = provider_identity.unwrap_or_else(|| provider.as_str());
// A custom route owns its catalog only on Baseten's endpoint, whose
// account-scoped roster no snapshot can serve (#6289).
let owns_provider_catalog = matches!(
provider,
ApiProvider::Openrouter | ApiProvider::Telecomjs | ApiProvider::Edenai
) || (provider == ApiProvider::Custom
&& codewhale_config::provider_setup_template(identity)
.is_some_and(|template| template.is_compatible()));
&& codewhale_config::catalog::endpoint_is_baseten(
&config.base_url_for_route_identity(provider, identity),
));
if !owns_provider_catalog {
return None;
}
@@ -2633,10 +2636,11 @@ fn route_labels_for_rows(rows: &[&ModelPickerRow]) -> BTreeMap<String, String> {
let Some(identity) = row_provider_identity(row) else {
continue;
};
let label = codewhale_config::provider_setup_template(identity)
.map(|template| template.display_name.to_string())
.unwrap_or_else(|| identity.to_string());
labels.entry(identity.to_string()).or_insert(label);
// Custom tables are labeled by their `[providers.<id>]` key: there
// are no compiled display names anymore (#6289).
labels
.entry(identity.to_string())
.or_insert_with(|| identity.to_string());
}
labels
}
@@ -5062,9 +5066,44 @@ mod tests {
#[test]
fn baseten_picker_models_use_exact_identity_and_direct_provider_label() {
let _env = crate::test_support::lock_test_env();
let _live = crate::provider_lake::lock_live_snapshot();
let home = tempfile::tempdir().expect("test home");
let _home = crate::test_support::EnvVarGuard::set("CODEWHALE_HOME", home.path());
crate::provider_catalog_live::reset_cache_for_test();
crate::provider_lake::clear_live_snapshot();
// No compiled seeds: a custom route offers nothing until a live
// listing lands for its exact endpoint (#6289).
assert!(
provider_catalog_model_ids(
ApiProvider::Custom,
codewhale_config::BASETEN_TEMPLATE_ID,
codewhale_config::BASETEN_BASE_URL,
)
.is_empty()
);
let fingerprint =
codewhale_config::catalog::base_url_fingerprint(codewhale_config::BASETEN_BASE_URL);
crate::provider_catalog_live::record_success(
codewhale_config::catalog::ProviderCatalogDelta {
provider: codewhale_config::BASETEN_TEMPLATE_ID.to_string(),
base_url_fingerprint: fingerprint.clone(),
fetched_at: 1,
offerings: vec![codewhale_config::catalog::CatalogOffering {
provider: codewhale_config::BASETEN_TEMPLATE_ID.to_string(),
wire_model_id: codewhale_config::BASETEN_DEFAULT_MODEL.to_string(),
endpoint_key: "chat".to_string(),
source: CatalogSource::Live {
base_url_fingerprint: fingerprint,
fetched_at: 1,
},
..Default::default()
}],
},
);
let models = provider_catalog_model_ids(
ApiProvider::Custom,
codewhale_config::BASETEN_TEMPLATE_ID,
@@ -5074,7 +5113,6 @@ mod tests {
models,
vec![codewhale_config::BASETEN_DEFAULT_MODEL.to_string()]
);
assert!(models.contains(&codewhale_config::BASETEN_DEFAULT_MODEL.to_string()));
let row = ModelPickerRow {
id: codewhale_config::BASETEN_DEFAULT_MODEL.to_string(),
@@ -5087,7 +5125,8 @@ mod tests {
enabled: true,
};
let labels = route_labels_for_rows(&[&row]);
assert_eq!(labels.get("baseten").map(String::as_str), Some("Baseten"));
// No compiled display names: the route label is the table key itself.
assert_eq!(labels.get("baseten").map(String::as_str), Some("baseten"));
}
#[test]
@@ -5373,14 +5412,14 @@ model = "deepseek/deepseek-v4-flash"
{
let projection = picker.projection.borrow();
let rows = &projection.as_ref().unwrap().rows;
assert!(rows.iter().any(|row| row.route == "Command Code"));
assert!(rows.iter().any(|row| row.route == "command_code"));
assert!(rows.iter().any(|row| row.route == "other_code"));
let active: Vec<_> = rows.iter().filter(|row| row.active).collect();
assert_eq!(active.len(), 1);
assert_eq!(active[0].route, "other_code");
}
let rendered = render_text(&picker, 140, 40);
assert!(rendered.contains("Command Code"), "{rendered}");
assert!(rendered.contains("command_code"), "{rendered}");
assert!(rendered.contains("other_code"), "{rendered}");
// Legacy memory has no route identity; ambiguity must preserve the
File diff suppressed because it is too large. Load diff
-58
View File
@@ -2070,64 +2070,6 @@ pub(crate) async fn apply_command_result(
);
}
}
AppAction::OpenProviderTemplateList => {
if app.view_stack.top_kind() != Some(ModalKind::ProviderPicker) {
let runtime_status = query_provider_runtime_status(engine_handle).await;
app.view_stack.push(
crate::tui::provider_picker::ProviderPickerView::new_for_template_list(
app.api_provider,
config,
runtime_status,
)
.with_locale(app.ui_locale)
.with_provider_health(&app.provider_health),
);
}
}
AppAction::OpenTemplateSetup { template_id } => {
if app.view_stack.top_kind() != Some(ModalKind::ProviderPicker) {
let runtime_status = query_provider_runtime_status(engine_handle).await;
if let Some(picker) =
crate::tui::provider_picker::ProviderPickerView::new_for_template_setup(
app.api_provider,
&template_id,
config,
runtime_status,
)
{
app.view_stack.push(
picker
.with_locale(app.ui_locale)
.with_provider_health(&app.provider_health),
);
let template = codewhale_config::provider_setup_template(&template_id);
let message = match template {
Some(template) if template.is_unpublished() => {
app.tr(MessageId::ProviderTemplateUnpublished).into_owned()
}
Some(template) if template.is_compatible() => app
.tr(MessageId::ProviderTemplateOpenedEnvOnly)
.replace("{id}", &template_id),
_ => app
.tr(MessageId::ProviderTemplateOpened)
.replace("{id}", &template_id),
};
let level = if template.is_some_and(|item| item.is_unpublished()) {
StatusToastLevel::Warning
} else {
StatusToastLevel::Info
};
app.push_status_toast(message, level, Some(8_000));
} else {
app.push_status_toast(
app.tr(MessageId::ProviderTemplateUnknown)
.replace("{id}", &template_id),
StatusToastLevel::Error,
Some(8_000),
);
}
}
}
AppAction::EditProjectHooks => {
edit_project_hooks_from_tui(terminal, app, config);
}
-13
View File
@@ -2075,16 +2075,6 @@ impl ConfigView {
.snapshot(SnapshotLane::Provider)
.opens("/provider", MessageId::ConfigActionOpenProvider),
},
ConfigRow {
key: "provider_templates".to_string(),
value: codewhale_config::ProviderSetupTemplate::settings_value(),
editable: true,
scope: ConfigScope::Saved,
facts: ConfigRowFacts::action(
"/provider templates",
MessageId::ConfigActionOpenProviderTemplates,
),
},
ConfigRow {
key: config_base_url_row_key(active_route_provider).to_string(),
value: config_base_url_row_value(app),
@@ -7312,7 +7302,6 @@ mod tests {
.map(|row| row.key.as_str())
.collect::<Vec<_>>();
assert!(keys.contains(&"provider"));
assert!(keys.contains(&"provider_templates"));
assert!(keys.contains(&"model"));
assert!(keys.contains(&"reasoning_effort"));
assert!(keys.contains(&"base_url"));
@@ -8327,7 +8316,6 @@ base_url = "https://api.xiaomimimo.com/v1"
// persisted to config.toml by `set_config_value`.
const NOT_SETTINGS_TOML: &[&str] = &[
"provider",
"provider_templates",
"model",
"fleet.exec.max_spawn_depth",
"goal_command",
@@ -9262,7 +9250,6 @@ context_window = 262144
};
assert_eq!(kind_for("provider"), SettingKind::Action);
assert_eq!(kind_for("provider_templates"), SettingKind::Action);
assert_eq!(kind_for("model"), SettingKind::Action);
assert_eq!(kind_for("low_motion"), SettingKind::Boolean);
assert_eq!(kind_for("default_mode"), SettingKind::Choice);