claude-scionos 4.1.2 → 4.1.4
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 +2 -1
- package/README.md +2 -1
- package/index.js +6 -5
- package/package.json +4 -4
- package/src/routerlab.js +27 -15
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
|
|
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
|
|
package/index.js
CHANGED
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
getStoredToken,
|
|
42
42
|
getStoredTokenStatus,
|
|
43
43
|
getStrategyChoices,
|
|
44
|
+
hasVerifiedModelIds,
|
|
44
45
|
listStrategies,
|
|
45
46
|
storeToken,
|
|
46
47
|
validateToken
|
|
@@ -147,7 +148,7 @@ function showStatus(label, level, detail) {
|
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
function getStrategyIndicator(strategyValue, modelIds, serviceValue) {
|
|
150
|
-
if (!
|
|
151
|
+
if (!hasVerifiedModelIds(modelIds)) {
|
|
151
152
|
return chalk.gray('●');
|
|
152
153
|
}
|
|
153
154
|
|
|
@@ -394,7 +395,7 @@ async function resolveStrategyChoice(parsed, modelIds, serviceConfig) {
|
|
|
394
395
|
throw new Error(`Strategy "${selected}" cannot support the default Claude Code launch on ${serviceConfig.availabilityLabel}. ${selectedLaunchReadiness.note}`);
|
|
395
396
|
}
|
|
396
397
|
|
|
397
|
-
if (
|
|
398
|
+
if (hasVerifiedModelIds(modelIds)) {
|
|
398
399
|
const availability = assessStrategy(selected, modelIds, serviceConfig.value);
|
|
399
400
|
if (availability.level === 'partial') {
|
|
400
401
|
console.log(chalk.yellow(`⚠ Strategy "${selected}" is only partially available on ${serviceConfig.availabilityLabel}.`));
|
|
@@ -419,7 +420,7 @@ async function resolveStrategyChoice(parsed, modelIds, serviceConfig) {
|
|
|
419
420
|
|
|
420
421
|
const strategyChoices = getStrategyChoices(modelIds, serviceConfig.value).map((choice) => {
|
|
421
422
|
const launchReadiness = assessStrategyLaunch(choice.value, modelIds, serviceConfig.value);
|
|
422
|
-
const disabled =
|
|
423
|
+
const disabled = hasVerifiedModelIds(modelIds) && !launchReadiness.ready ? launchReadiness.note : false;
|
|
423
424
|
|
|
424
425
|
return {
|
|
425
426
|
...choice,
|
|
@@ -429,7 +430,7 @@ async function resolveStrategyChoice(parsed, modelIds, serviceConfig) {
|
|
|
429
430
|
};
|
|
430
431
|
});
|
|
431
432
|
|
|
432
|
-
if (
|
|
433
|
+
if (hasVerifiedModelIds(modelIds) && strategyChoices.every((choice) => choice.disabled)) {
|
|
433
434
|
throw new Error(`No launchable strategy is available on ${serviceConfig.availabilityLabel}.`);
|
|
434
435
|
}
|
|
435
436
|
|
|
@@ -450,7 +451,7 @@ function showStrategies(modelIds = null, serviceConfig) {
|
|
|
450
451
|
const strategies = listStrategies(modelIds, serviceConfig.value);
|
|
451
452
|
showSection('Strategies', strategies.map((strategy) => {
|
|
452
453
|
const indicator = getStrategyIndicator(strategy.value, modelIds, serviceConfig.value);
|
|
453
|
-
const state = !
|
|
454
|
+
const state = !hasVerifiedModelIds(modelIds)
|
|
454
455
|
? chalk.gray('Unknown')
|
|
455
456
|
: assessStrategyLaunch(strategy.value, modelIds, serviceConfig.value).ready
|
|
456
457
|
? chalk.green('Ready')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-scionos",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.4",
|
|
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 = {}) {
|
|
@@ -211,6 +218,10 @@ function getRequiredModels(strategy) {
|
|
|
211
218
|
return strategy?.requiredModels ?? strategy?.mappedModels ?? [];
|
|
212
219
|
}
|
|
213
220
|
|
|
221
|
+
function hasVerifiedModelIds(modelIds) {
|
|
222
|
+
return Array.isArray(modelIds) && modelIds.length > 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
214
225
|
function assessStrategy(strategyValue, modelIds = [], serviceValue = DEFAULT_SERVICE) {
|
|
215
226
|
const serviceLabel = getServiceLabel(serviceValue);
|
|
216
227
|
const strategy = findStrategy(strategyValue, serviceValue);
|
|
@@ -230,14 +241,14 @@ function assessStrategy(strategyValue, modelIds = [], serviceValue = DEFAULT_SER
|
|
|
230
241
|
level: 'ready',
|
|
231
242
|
note: 'Always available.',
|
|
232
243
|
strategy,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
if (!
|
|
237
|
-
return {
|
|
238
|
-
available: true,
|
|
239
|
-
level: 'unknown',
|
|
240
|
-
note: 'Availability not verified.',
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (!hasVerifiedModelIds(modelIds)) {
|
|
248
|
+
return {
|
|
249
|
+
available: true,
|
|
250
|
+
level: 'unknown',
|
|
251
|
+
note: 'Availability not verified.',
|
|
241
252
|
strategy,
|
|
242
253
|
};
|
|
243
254
|
}
|
|
@@ -293,7 +304,7 @@ function assessStrategyLaunch(strategyValue, modelIds = [], serviceValue = DEFAU
|
|
|
293
304
|
};
|
|
294
305
|
}
|
|
295
306
|
|
|
296
|
-
if (!requiredModels.length || !
|
|
307
|
+
if (!requiredModels.length || !hasVerifiedModelIds(modelIds)) {
|
|
297
308
|
return {
|
|
298
309
|
ready: availability.level !== 'unavailable',
|
|
299
310
|
note: availability.note,
|
|
@@ -328,7 +339,7 @@ function assessStrategyLaunch(strategyValue, modelIds = [], serviceValue = DEFAU
|
|
|
328
339
|
}
|
|
329
340
|
|
|
330
341
|
function getFallbackStrategy(strategyValue, modelIds = [], serviceValue = DEFAULT_SERVICE) {
|
|
331
|
-
if (
|
|
342
|
+
if (hasVerifiedModelIds(modelIds)) {
|
|
332
343
|
return assessStrategyLaunch(strategyValue, modelIds, serviceValue).ready ? strategyValue : null;
|
|
333
344
|
}
|
|
334
345
|
|
|
@@ -588,7 +599,8 @@ export {
|
|
|
588
599
|
getStoredToken,
|
|
589
600
|
getStoredTokenStatus,
|
|
590
601
|
getStrategyChoices,
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
602
|
+
hasVerifiedModelIds,
|
|
603
|
+
listStrategies,
|
|
604
|
+
storeToken,
|
|
605
|
+
validateToken,
|
|
606
|
+
};
|