claude-scionos 4.1.3 → 4.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.fr.md CHANGED
@@ -64,7 +64,7 @@ npx claude-scionos --strategy aws --no-prompt -p "Résume ce dépôt"
64
64
  - `--service llm` bascule le lanceur vers `https://llm.routerlab.ch`
65
65
  - `llm` est prévu pour un accès sur invitation
66
66
  - les tokens enregistrés avec `auth login --service llm` sont stockés séparément du token RouterLab par défaut
67
- - `llm` expose pour l'instant `claude-glm-5` et `claude-gpt-5.4`
67
+ - `llm` expose pour l'instant `claude-glm-5`, `claude-gpt-5.4` et `claude-qwen3.6-plus`
68
68
  - `routerlab` expose aussi `claude-gpt-5.4`
69
69
 
70
70
  ## Stratégies
@@ -74,6 +74,7 @@ npx claude-scionos --strategy aws --no-prompt -p "Résume ce dépôt"
74
74
  - `claude-glm-5` : force toutes les requêtes vers `claude-glm-5`
75
75
  - `claude-minimax-m2.5` : force toutes les requêtes vers `claude-minimax-m2.5`
76
76
  - `claude-gpt-5.4` : force toutes les requêtes vers `claude-gpt-5.4`
77
+ - `claude-qwen3.6-plus` : force toutes les requêtes vers `claude-qwen3.6-plus`
77
78
 
78
79
  Utilise `--list-strategies` pour voir les stratégies disponibles pour le service choisi et leur disponibilité réelle quand un token est disponible.
79
80
 
@@ -86,11 +87,13 @@ Ordre de résolution du token :
86
87
  3. stockage local sécurisé spécifique au service via `claude-scionos auth login --service llm`
87
88
  4. saisie manuelle en mode guidé
88
89
 
89
- Backends de stockage sécurisés :
90
-
91
- - Windows : fichier local chiffré via DPAPI, lié à l'utilisateur courant
92
- - macOS : Keychain
93
- - Linux : Secret Service via `secret-tool`
90
+ Backends de stockage sécurisés :
91
+
92
+ - Windows : fichier local chiffré via DPAPI, lié à l'utilisateur courant
93
+ - macOS : Keychain
94
+ - Linux : Secret Service via `secret-tool`
95
+
96
+ Sous Windows, si le fichier local du token est vide ou corrompu, `claude-scionos` le traite désormais comme absent au lieu d'essayer de l'utiliser. Il faut relancer `claude-scionos auth login` pour enregistrer un nouveau token.
94
97
 
95
98
  Gestion du token :
96
99
 
@@ -129,12 +132,13 @@ Le wrapper transmet les arguments Claude Code habituels. Le proxy local n'est la
129
132
 
130
133
  `claude-scionos doctor` doit être la première commande à lancer quand un client signale un problème.
131
134
 
132
- Cas courants :
133
-
134
- - `Claude Code CLI not found` : installer `@anthropic-ai/claude-code`
135
- - `Git Bash is required on Windows` : installer Git for Windows
136
- - `ANTHROPIC_AUTH_TOKEN ... is required when using --no-prompt` : définir la variable d'environnement ou stocker le token au préalable
137
- - `secret-tool not found` : installer un client Secret Service sous Linux ou utiliser la variable d'environnement
135
+ Cas courants :
136
+
137
+ - `Claude Code CLI not found` : installer `@anthropic-ai/claude-code`
138
+ - `Git Bash is required on Windows` : installer Git for Windows
139
+ - `ANTHROPIC_AUTH_TOKEN ... is required when using --no-prompt` : définir la variable d'environnement ou stocker le token au préalable
140
+ - `Stored token` est indiqué comme absent sous Windows alors qu'un login a déjà été fait : relancer `claude-scionos auth login`, car le fichier DPAPI local peut être vide ou corrompu
141
+ - `secret-tool not found` : installer un client Secret Service sous Linux ou utiliser la variable d'environnement
138
142
 
139
143
  ## Développement
140
144
 
package/README.md CHANGED
@@ -64,7 +64,7 @@ npx claude-scionos --strategy aws --no-prompt -p "Summarize this repo"
64
64
  - `--service llm` switches the launcher to `https://llm.routerlab.ch`
65
65
  - `llm` is intended for invitation-only access
66
66
  - Tokens stored with `auth login --service llm` are kept separate from the default RouterLab token
67
- - `llm` currently exposes `claude-glm-5` and `claude-gpt-5.4`
67
+ - `llm` currently exposes `claude-glm-5`, `claude-gpt-5.4`, and `claude-qwen3.6-plus`
68
68
  - `routerlab` also exposes `claude-gpt-5.4`
69
69
 
70
70
  ## Strategies
@@ -74,6 +74,7 @@ npx claude-scionos --strategy aws --no-prompt -p "Summarize this repo"
74
74
  - `claude-glm-5`: force all requests to `claude-glm-5`
75
75
  - `claude-minimax-m2.5`: force all requests to `claude-minimax-m2.5`
76
76
  - `claude-gpt-5.4`: force all requests to `claude-gpt-5.4`
77
+ - `claude-qwen3.6-plus`: force all requests to `claude-qwen3.6-plus`
77
78
 
78
79
  Use `--list-strategies` to see the strategies available for the selected service and their live availability when a token is available.
79
80
 
@@ -86,11 +87,13 @@ Token resolution order:
86
87
  3. Service-specific secure local storage from `claude-scionos auth login --service llm`
87
88
  4. Manual prompt in guided mode
88
89
 
89
- Secure storage backends:
90
-
91
- - Windows: DPAPI-encrypted local file bound to the current user
92
- - macOS: Keychain
93
- - Linux: Secret Service via `secret-tool`
90
+ Secure storage backends:
91
+
92
+ - Windows: DPAPI-encrypted local file bound to the current user
93
+ - macOS: Keychain
94
+ - Linux: Secret Service via `secret-tool`
95
+
96
+ On Windows, if the secure token file is empty or corrupted, `claude-scionos` now treats it as missing instead of trying to use it. Run `claude-scionos auth login` again to store a fresh token.
94
97
 
95
98
  Manage the token with:
96
99
 
@@ -129,12 +132,13 @@ The wrapper forwards regular Claude Code flags and arguments. The local proxy is
129
132
 
130
133
  `claude-scionos doctor` should be the first command to run when a client reports an issue.
131
134
 
132
- Common cases:
133
-
134
- - `Claude Code CLI not found`: install `@anthropic-ai/claude-code`
135
- - `Git Bash is required on Windows`: install Git for Windows
136
- - `ANTHROPIC_AUTH_TOKEN ... is required when using --no-prompt`: set the environment variable or store the token first
137
- - `secret-tool not found`: install a Secret Service client on Linux or rely on the environment variable
135
+ Common cases:
136
+
137
+ - `Claude Code CLI not found`: install `@anthropic-ai/claude-code`
138
+ - `Git Bash is required on Windows`: install Git for Windows
139
+ - `ANTHROPIC_AUTH_TOKEN ... is required when using --no-prompt`: set the environment variable or store the token first
140
+ - `Stored token` is missing on Windows even though you already logged in: re-run `claude-scionos auth login` because the local DPAPI token file may be empty or corrupted
141
+ - `secret-tool not found`: install a Secret Service client on Linux or rely on the environment variable
138
142
 
139
143
  ## Development
140
144
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-scionos",
3
- "version": "4.1.3",
3
+ "version": "4.1.5",
4
4
  "description": "RouterLab launcher, strategy proxy and secure token wrapper for Claude Code CLI",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -43,12 +43,12 @@
43
43
  },
44
44
  "private": false,
45
45
  "dependencies": {
46
- "@inquirer/prompts": "^8.3.2"
46
+ "@inquirer/prompts": "^8.4.1"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@eslint/js": "^10.0.1",
50
- "eslint": "^10.1.0",
50
+ "eslint": "^10.2.0",
51
51
  "globals": "^17.4.0",
52
- "vitest": "^4.1.2"
52
+ "vitest": "^4.1.4"
53
53
  }
54
54
  }
package/src/routerlab.js CHANGED
@@ -28,7 +28,7 @@ const SERVICES = {
28
28
  secureStorageAccount: 'routerlab-llm-token',
29
29
  secureStorageLabel: 'RouterLab LLM Token',
30
30
  secureStorageFileName: 'routerlab-llm-token.secure.txt',
31
- strategyValues: ['claude-glm-5', 'claude-gpt-5.4'],
31
+ strategyValues: ['claude-glm-5', 'claude-gpt-5.4', 'claude-qwen3.6-plus'],
32
32
  },
33
33
  };
34
34
  const DEFAULT_SERVICE = 'routerlab';
@@ -87,6 +87,13 @@ const STRATEGIES = [
87
87
  selectionDescription: 'Forces all requests to claude-gpt-5.4.',
88
88
  mappedModels: ['claude-gpt-5.4'],
89
89
  },
90
+ {
91
+ value: 'claude-qwen3.6-plus',
92
+ name: 'Qwen3.6 Plus',
93
+ description: 'Forces all requests to claude-qwen3.6-plus.',
94
+ selectionDescription: 'Forces all requests to claude-qwen3.6-plus.',
95
+ mappedModels: ['claude-qwen3.6-plus'],
96
+ },
90
97
  ];
91
98
 
92
99
  async function fetchModels(apiKey, options = {}) {
@@ -192,6 +199,14 @@ function getWindowsTokenFile(serviceValue = DEFAULT_SERVICE) {
192
199
  return path.join(os.homedir(), '.claude-scionos', service.secureStorageFileName);
193
200
  }
194
201
 
202
+ function hasNonEmptyWindowsTokenFile(tokenFile) {
203
+ try {
204
+ return fs.statSync(tokenFile).size > 0;
205
+ } catch {
206
+ return false;
207
+ }
208
+ }
209
+
195
210
  function getServiceStrategies(serviceValue = DEFAULT_SERVICE) {
196
211
  const service = getServiceConfig(serviceValue);
197
212
  if (!service?.strategyValues?.length) {
@@ -430,8 +445,13 @@ function storeToken(token, serviceValue = DEFAULT_SERVICE) {
430
445
  SCIONOS_TOKEN_FILE: tokenFile,
431
446
  },
432
447
  );
448
+
449
+ if (!hasNonEmptyWindowsTokenFile(tokenFile)) {
450
+ throw new Error('Secure token file was created but no encrypted content was written');
451
+ }
452
+
433
453
  return storage;
434
- }
454
+ }
435
455
 
436
456
  if (process.platform === 'darwin') {
437
457
  const result = runCommand('security', [
@@ -487,6 +507,10 @@ function getStoredToken(serviceValue = DEFAULT_SERVICE) {
487
507
  return null;
488
508
  }
489
509
 
510
+ if (!hasNonEmptyWindowsTokenFile(tokenFile)) {
511
+ return null;
512
+ }
513
+
490
514
  const token = runPowerShell(
491
515
  '$secure = Get-Content -Path $env:SCIONOS_TOKEN_FILE -Raw | ConvertTo-SecureString; $ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure); try { [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr) } finally { [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr) }',
492
516
  {