You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: support China edition CLI (qoderclicn) with settings toggle (#20)
* feat: support China edition CLI (qoderclicn) with settings toggle
Add a Qoder CLI edition setting (international qodercli / China
qoderclicn) so users can switch between the two CLI builds, whose
binary names and config roots differ (~/.qoder vs ~/.qoder-cn).
- New cli-edition module with per-edition binary names, config roots,
login commands, and an active-edition registry synced on settings
load/save
- Edition-aware CLI discovery, including the CN installer layout
(~/.qoder-cn/bin/qoderclicn/qoderclicn-<version>); resolver cache
keyed on edition
- Edition-aware SDK projects path (session history), global plugin
discovery, login hint, and CLI/Node missing error messages
- Settings dropdown (declarative + imperative) that resets the
resolver, reloads plugins, restarts open tabs, and refreshes the
runtime catalog on switch
- i18n keys in all 10 locales; unit tests for edition module and CN
discovery; CHANGELOG entry
Co-authored-by: QoderAI (Qwen 3.8 Max) <qoder_ai@qoder.com>
* test: make cli-edition config-root assertions path-separator agnostic
The config-root test hardcoded POSIX separators while
getQoderCliHomeDir builds paths with path.join, which fails on the
Windows CI runner. Build expectations with path.join as well.
Co-authored-by: QoderAI (Qwen 3.8 Max) <qoder_ai@qoder.com>
---------
Co-authored-by: QoderAI (Qwen 3.8 Max) <qoder_ai@qoder.com>
Copy file name to clipboardExpand all lines: src/i18n/locales/de.json
+6Lines changed: 6 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -254,6 +254,12 @@
254
254
"leftSidebar": "Linke Seitenleiste",
255
255
"mainTab": "Haupteditor-Tab"
256
256
},
257
+
"cliEdition": {
258
+
"name": "Qoder CLI-Ausgabe",
259
+
"desc": "Wählen Sie die internationale Version (qodercli, ~/.qoder) oder die China-Version (qoderclicn, ~/.qoder-cn). Geöffnete Tabs werden nach dem Wechsel sofort neu gestartet, laufende Unterhaltungen werden unterbrochen. Der Gesprächsverlauf wird pro Ausgabe getrennt gespeichert (~/.qoder und ~/.qoder-cn) und nicht gemeinsam genutzt.",
260
+
"global": "International (qodercli)",
261
+
"cn": "China (qoderclicn)"
262
+
},
257
263
"cliPath": {
258
264
"name": "Qoder CLI-Pfad",
259
265
"desc": "Benutzerdefinierter Pfad zum Qoder CLI. Leer lassen für automatische Erkennung.",
Copy file name to clipboardExpand all lines: src/i18n/locales/en.json
+6Lines changed: 6 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -254,6 +254,12 @@
254
254
"leftSidebar": "Left sidebar",
255
255
"mainTab": "Main editor tab"
256
256
},
257
+
"cliEdition": {
258
+
"name": "Qoder CLI edition",
259
+
"desc": "Choose the international build (qodercli, ~/.qoder) or the China build (qoderclicn, ~/.qoder-cn). Open tabs restart immediately after switching, interrupting in-progress conversations. Session history is stored separately per edition (~/.qoder and ~/.qoder-cn) and is not shared between editions.",
260
+
"global": "International (qodercli)",
261
+
"cn": "China (qoderclicn)"
262
+
},
257
263
"cliPath": {
258
264
"name": "Qoder CLI path",
259
265
"desc": "Custom path to Qoder CLI. Leave empty for auto-detection.",
Copy file name to clipboardExpand all lines: src/i18n/locales/es.json
+6Lines changed: 6 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -254,6 +254,12 @@
254
254
"leftSidebar": "Barra lateral izquierda",
255
255
"mainTab": "Pestaña del editor principal"
256
256
},
257
+
"cliEdition": {
258
+
"name": "Edición de Qoder CLI",
259
+
"desc": "Elija la versión internacional (qodercli, ~/.qoder) o la versión de China (qoderclicn, ~/.qoder-cn). Las pestañas abiertas se reinician inmediatamente tras el cambio, interrumpiendo las conversaciones en curso. El historial de conversaciones se almacena por separado en cada edición (~/.qoder y ~/.qoder-cn) y no se comparte entre ediciones.",
260
+
"global": "Internacional (qodercli)",
261
+
"cn": "China (qoderclicn)"
262
+
},
257
263
"cliPath": {
258
264
"name": "Ruta CLI Qoder",
259
265
"desc": "Ruta personalizada a Qoder CLI. Dejar vacío para detección automática.",
Copy file name to clipboardExpand all lines: src/i18n/locales/fr.json
+6Lines changed: 6 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -254,6 +254,12 @@
254
254
"leftSidebar": "Barre latérale gauche",
255
255
"mainTab": "Onglet principal de l'éditeur"
256
256
},
257
+
"cliEdition": {
258
+
"name": "Édition de Qoder CLI",
259
+
"desc": "Choisissez la version internationale (qodercli, ~/.qoder) ou la version Chine (qoderclicn, ~/.qoder-cn). Les onglets ouverts redémarrent immédiatement après le changement, interrompant les conversations en cours. L'historique des conversations est stocké séparément par édition (~/.qoder et ~/.qoder-cn) et n'est pas partagé entre les éditions.",
260
+
"global": "Internationale (qodercli)",
261
+
"cn": "Chine (qoderclicn)"
262
+
},
257
263
"cliPath": {
258
264
"name": "Chemin CLI Qoder",
259
265
"desc": "Chemin personnalisé vers Qoder CLI. Laisser vide pour la détection automatique.",
0 commit comments