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 +16 -12
- package/README.md +16 -12
- package/package.json +4 -4
- package/src/routerlab.js +26 -2
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
|
|
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
|
-
- `
|
|
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
|
|
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
|
-
- `
|
|
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
|
+
"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.
|
|
46
|
+
"@inquirer/prompts": "^8.4.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@eslint/js": "^10.0.1",
|
|
50
|
-
"eslint": "^10.
|
|
50
|
+
"eslint": "^10.2.0",
|
|
51
51
|
"globals": "^17.4.0",
|
|
52
|
-
"vitest": "^4.1.
|
|
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
|
{
|