claude-scionos 5.0.0 → 5.1.0

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
@@ -1,20 +1,20 @@
1
1
  # Claude Code pour RouterLab
2
2
 
3
- `claude-scionos` est un lanceur RouterLab pour le CLI officiel Claude Code. Il conserve l'usage normal de Claude Code, tout en ajoutant un onboarding guidé, la configuration de stratégies de modèles, le stockage sécurisé du token et une commande `doctor` pour le support client.
3
+ `claude-scionos` est un lanceur RouterLab pour le CLI officiel Claude Code. Il conserve l'usage normal de Claude Code, tout en ajoutant un onboarding guidé, la configuration de stratégies de modèles, le stockage sécurisé du token et une commande `doctor` pour le support client.
4
4
 
5
5
  _[🇬🇧 Read in English](./README.md)_
6
6
 
7
7
  ## Points clés
8
8
 
9
- - lancement guidé pour les nouveaux utilisateurs
10
- - `--strategy` pour choisir une stratégie sans menu
11
- - `--subagent-model` pour garder le défaut de stratégie ou forcer les sous-agents vers Haiku ou GPT 5.4 mini
12
- - `--service llm` pour l'accès RouterLab LLM sur invitation
9
+ - lancement guidé pour les nouveaux utilisateurs
10
+ - `--strategy` pour choisir une stratégie sans menu
11
+ - `--subagent-model` pour garder le défaut de stratégie ou forcer les sous-agents vers Haiku ou GPT 5.4 mini sur le service RouterLab par défaut
12
+ - `--service llm` pour l'accès RouterLab LLM sur invitation
13
13
  - `--no-prompt` pour l'automatisation et la CI
14
- - `--list-strategies` pour voir les routes disponibles
15
- - `doctor` pour diagnostiquer rapidement un poste client
16
- - `auth login|status|change|logout|test` pour gérer le token
17
- - appels directs de Claude Code vers RouterLab via les variables de modèles natives
14
+ - `--list-strategies` pour voir les routes disponibles
15
+ - `doctor` pour diagnostiquer rapidement un poste client
16
+ - `auth login|status|change|logout|test` pour gérer le token
17
+ - appels directs de Claude Code vers RouterLab via les variables de modèles natives
18
18
 
19
19
  ## Prérequis
20
20
 
@@ -56,14 +56,13 @@ npx claude-scionos auth login --service llm
56
56
  npx claude-scionos auth test
57
57
  npx claude-scionos --strategy aws
58
58
  npx claude-scionos --service llm --strategy claude
59
- npx claude-scionos --service llm --strategy claude-gpt
60
- npx claude-scionos --service llm --strategy claude-gpt-special
61
- npx claude-scionos --service llm --strategy deepseek-v4
62
- npx claude-scionos --service llm --strategy claude-minimax-m2.7
63
- npx claude-scionos --service llm --strategy claude-qwen3.6-plus
64
- npx claude-scionos --strategy deepseek-v4 --subagent-model haiku
65
- npx claude-scionos --strategy aws --no-prompt -p "Résume ce dépôt"
66
- ```
59
+ npx claude-scionos --service llm --strategy claude-gpt
60
+ npx claude-scionos --service llm --strategy claude-gpt-special
61
+ npx claude-scionos --service llm --strategy deepseek-v4
62
+ npx claude-scionos --service llm --strategy minimax-m2.7
63
+ npx claude-scionos --strategy deepseek-v4 --subagent-model haiku
64
+ npx claude-scionos --strategy aws --no-prompt -p "Résume ce dépôt"
65
+ ```
67
66
 
68
67
  ## Services
69
68
 
@@ -71,34 +70,38 @@ npx claude-scionos --strategy aws --no-prompt -p "Résume ce dépôt"
71
70
  - `--service llm` bascule le lanceur vers `https://llm.routerlab.ch`
72
71
  - `llm` est prévu pour un accès sur invitation
73
72
  - les tokens enregistrés avec `auth login --service llm` sont stockés séparément du token RouterLab par défaut
74
- - `llm` expose pour l'instant `claude`, `claude-gpt`, `claude-gpt-special`, `deepseek-v4`, `claude-minimax-m2.7`, `claude-qwen3.6-plus` et `claude-glm-5.1`
75
- - `routerlab` expose aussi `aws`, `claude-gpt`, `deepseek-v4`, `claude-kimi-k2.6` et `claude-glm-5.1`
73
+ - `llm` expose pour l'instant `claude`, `claude-gpt`, `claude-gpt-special`, `deepseek-v4`, `minimax-m2.7` et `glm-5.1`
74
+ - `routerlab` expose aussi `aws`, `claude-gpt`, `deepseek-v4`, `claude-kimi-k2.6` et `glm-5.1`
76
75
 
77
76
  ## Stratégies
78
77
 
79
- - `default` : utilise Claude Code normalement sans forcer de variables de modèles
80
- - `aws` : configure les variables de modèles Claude Code vers les variantes Claude AWS de RouterLab
81
- - `claude` : sur `--service llm`, configure les variables vers `claude-haiku-4-5-20251001`, `claude-sonnet-4-6` et `claude-opus-4-7`
82
- - `claude-gpt` : configure les variables vers la famille GPT
83
- Opus utilise `gpt-5.5`, Sonnet utilise `gpt-5.4`, Haiku et les sous-agents utilisent `gpt-5.4-mini`
84
- - `claude-gpt-special` : sur `--service llm`, utilise `claude-gpt-5.4-sp` pour Opus, Sonnet, Haiku et les sous-agents
85
- - `deepseek-v4` : utilise `claude-deepseek-v4-pro` pour Opus/Sonnet et `claude-deepseek-v4-flash` pour Haiku/sous-agents
86
- - `claude-minimax-m2.7` : sur `--service llm`, affiche `minimax-m2.7 beta` et utilise `claude-minimax-m2.7` pour Opus, Sonnet, Haiku et les sous-agents
87
- - `claude-qwen3.6-plus` : sur `--service llm`, affiche `qwen3.6-plus beta` et utilise `claude-qwen3.6-plus` pour Opus, Sonnet, Haiku et les sous-agents
88
- - `claude-kimi-k2.6` : utilise `claude-kimi-k2.6` pour Opus, Sonnet, Haiku et les sous-agents
89
- - `claude-glm-5.1` : utilise `claude-glm-5.1` pour Opus, Sonnet, Haiku et les sous-agents
90
-
91
- Utilise `--list-strategies` pour voir les stratégies disponibles pour le service choisi et leur disponibilité réelle quand un token est disponible.
92
-
93
- ## Modèle de sous-agent
94
-
95
- Par défaut, chaque stratégie garde son propre modèle de sous-agent. Tu peux surcharger uniquement les sous-agents Claude Code sans changer les variables principales Opus, Sonnet et Haiku :
96
-
97
- - `--subagent-model default` : garde le défaut de la stratégie
98
- - `--subagent-model haiku` : force les sous-agents vers `claude-haiku-4-5-20251001`
99
- - `--subagent-model gpt-5.4-mini` : force les sous-agents vers `gpt-5.4-mini`
100
-
101
- Par exemple, `--strategy deepseek-v4` utilise `claude-deepseek-v4-flash` pour les sous-agents par défaut. Ajouter `--subagent-model haiku` conserve le routage principal DeepSeek mais définit `CLAUDE_CODE_SUBAGENT_MODEL=claude-haiku-4-5-20251001`.
78
+ - `default` : utilise Claude Code normalement sans forcer de variables de modèles
79
+ - `aws` : configure les variables de modèles Claude Code vers les variantes Claude AWS de RouterLab
80
+ - `claude` : sur `--service llm`, configure Opus vers `claude-opus-4-7`, Haiku vers `claude-opus-4-6`, Sonnet vers `claude-sonnet-4-6` et les sous-agents vers `claude-sonnet-4-6`
81
+ - `claude-gpt` : configure les variables vers la famille GPT
82
+ Opus utilise `claude-gpt-5.5`, Sonnet utilise `claude-gpt-5.4`, Haiku et les sous-agents utilisent `claude-gpt-5.4-mini`
83
+ - `claude-gpt-special` : sur `--service llm`, utilise `claude-gpt-5.4-sp` pour Opus, Sonnet, Haiku et les sous-agents
84
+ - `deepseek-v4` : utilise `claude-deepseek-v4-pro` pour Opus/Sonnet et `claude-deepseek-v4-flash` pour Haiku/sous-agents
85
+ - `minimax-m2.7` : sur `--service llm`, affiche `minimax-m2.7` et utilise `claude-minimax-m2.7` pour Opus, Sonnet, Haiku et les sous-agents
86
+ - `claude-kimi-k2.6` : utilise `claude-kimi-k2.6` pour Opus, Sonnet, Haiku et les sous-agents
87
+ - `glm-5.1` : utilise `claude-glm-5.1` pour Opus, Sonnet, Haiku et les sous-agents
88
+
89
+ Utilise `--list-strategies` pour voir les stratégies disponibles pour le service choisi et leur disponibilité réelle quand un token est disponible.
90
+
91
+ ## Modèle de sous-agent
92
+
93
+ Par défaut, chaque stratégie garde son propre modèle de sous-agent. Sur le service RouterLab par défaut, tu peux surcharger uniquement les sous-agents Claude Code sans changer les variables principales Opus, Sonnet et Haiku :
94
+
95
+ - `--subagent-model default` : garde le défaut de la stratégie
96
+ - `--subagent-model haiku` : force les sous-agents vers `claude-haiku-4-5-20251001`
97
+ - `--subagent-model gpt-5.4-mini` : force les sous-agents vers `claude-gpt-5.4-mini`
98
+
99
+ Par exemple, `--strategy deepseek-v4` utilise `claude-deepseek-v4-flash` pour les sous-agents par défaut. Ajouter `--subagent-model haiku` conserve le routage principal DeepSeek mais définit `CLAUDE_CODE_SUBAGENT_MODEL=claude-haiku-4-5-20251001`.
100
+
101
+ Avec `--service llm --strategy claude`, la question du modèle de sous-agent est ignorée et les sous-agents sont forcés vers `claude-sonnet-4-6`. Les autres stratégies `llm` demandent un de ces modèles de sous-agent :
102
+
103
+ - `gpt-5.4-mini`
104
+ - `claude-deepseek-v4-flash`
102
105
 
103
106
  ## Gestion du token
104
107
 
@@ -129,10 +132,10 @@ claude-scionos auth test
129
132
 
130
133
  ## Ce que veulent dire `--strategy` et `--no-prompt`
131
134
 
132
- - `--strategy <value>` évite le menu interactif et choisit directement la route
133
- - `--service <value>` change la cible RouterLab. `routerlab` reste le défaut et `llm` est réservé à l'accès sur invitation
134
- - `--subagent-model <default|haiku|gpt-5.4-mini>` choisit seulement le modèle de sous-agent Claude Code
135
- - `--no-prompt` désactive toutes les questions interactives
135
+ - `--strategy <value>` évite le menu interactif et choisit directement la route
136
+ - `--service <value>` change la cible RouterLab. `routerlab` reste le défaut et `llm` est réservé à l'accès sur invitation
137
+ - `--subagent-model <default|haiku|gpt-5.4-mini>` choisit seulement le modèle de sous-agent Claude Code sur le service RouterLab par défaut ; avec `--service llm`, les valeurs acceptées sont `gpt-5.4-mini` et `claude-deepseek-v4-flash`
138
+ - `--no-prompt` désactive toutes les questions interactives
136
139
 
137
140
  Quand `--no-prompt` est utilisé, le lanceur doit déjà avoir un token via `ANTHROPIC_AUTH_TOKEN` ou via le stockage sécurisé.
138
141
 
@@ -149,7 +152,7 @@ Quand `--no-prompt` est utilisé, le lanceur doit déjà avoir un token via `ANT
149
152
 
150
153
  ## Compatibilité
151
154
 
152
- Le wrapper transmet les arguments Claude Code habituels. RouterLab est appelé directement par Claude Code ; les stratégies sont appliquées via `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL` et, quand nécessaire, `CLAUDE_CODE_SUBAGENT_MODEL`.
155
+ Le wrapper transmet les arguments Claude Code habituels. RouterLab est appelé directement par Claude Code ; les stratégies sont appliquées via `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL` et, quand nécessaire, `CLAUDE_CODE_SUBAGENT_MODEL`.
153
156
 
154
157
  ## Dépannage
155
158
 
package/README.md CHANGED
@@ -1,20 +1,20 @@
1
1
  # Claude Code for RouterLab
2
2
 
3
- `claude-scionos` is a RouterLab launcher for the official Claude Code CLI. It keeps the normal Claude Code workflow, while adding guided onboarding, model strategy configuration, secure token storage, and a `doctor` command for client support.
3
+ `claude-scionos` is a RouterLab launcher for the official Claude Code CLI. It keeps the normal Claude Code workflow, while adding guided onboarding, model strategy configuration, secure token storage, and a `doctor` command for client support.
4
4
 
5
5
  _[🇫🇷 Lire en français](./README.fr.md)_
6
6
 
7
7
  ## Highlights
8
8
 
9
9
  - Guided launch for first-time users
10
- - `--strategy` to preselect a routing strategy
11
- - `--subagent-model` to keep the strategy default or force subagents to Haiku or GPT 5.4 mini
12
- - `--service llm` for invitation-only RouterLab LLM access
10
+ - `--strategy` to preselect a routing strategy
11
+ - `--subagent-model` to keep the strategy default or force subagents to Haiku or GPT 5.4 mini on the default RouterLab service
12
+ - `--service llm` for invitation-only RouterLab LLM access
13
13
  - `--no-prompt` for automation and CI
14
- - `--list-strategies` to inspect available routes
15
- - `doctor` to diagnose local setup quickly
16
- - `auth login|status|change|logout|test` for secure token management
17
- - Direct Claude Code calls to RouterLab with native model environment variables
14
+ - `--list-strategies` to inspect available routes
15
+ - `doctor` to diagnose local setup quickly
16
+ - `auth login|status|change|logout|test` for secure token management
17
+ - Direct Claude Code calls to RouterLab with native model environment variables
18
18
 
19
19
  ## Requirements
20
20
 
@@ -56,14 +56,13 @@ npx claude-scionos auth login --service llm
56
56
  npx claude-scionos auth test
57
57
  npx claude-scionos --strategy aws
58
58
  npx claude-scionos --service llm --strategy claude
59
- npx claude-scionos --service llm --strategy claude-gpt
60
- npx claude-scionos --service llm --strategy claude-gpt-special
61
- npx claude-scionos --service llm --strategy deepseek-v4
62
- npx claude-scionos --service llm --strategy claude-minimax-m2.7
63
- npx claude-scionos --service llm --strategy claude-qwen3.6-plus
64
- npx claude-scionos --strategy deepseek-v4 --subagent-model haiku
65
- npx claude-scionos --strategy aws --no-prompt -p "Summarize this repo"
66
- ```
59
+ npx claude-scionos --service llm --strategy claude-gpt
60
+ npx claude-scionos --service llm --strategy claude-gpt-special
61
+ npx claude-scionos --service llm --strategy deepseek-v4
62
+ npx claude-scionos --service llm --strategy minimax-m2.7
63
+ npx claude-scionos --strategy deepseek-v4 --subagent-model haiku
64
+ npx claude-scionos --strategy aws --no-prompt -p "Summarize this repo"
65
+ ```
67
66
 
68
67
  ## Services
69
68
 
@@ -71,34 +70,38 @@ npx claude-scionos --strategy aws --no-prompt -p "Summarize this repo"
71
70
  - `--service llm` switches the launcher to `https://llm.routerlab.ch`
72
71
  - `llm` is intended for invitation-only access
73
72
  - Tokens stored with `auth login --service llm` are kept separate from the default RouterLab token
74
- - `llm` currently exposes `claude`, `claude-gpt`, `claude-gpt-special`, `deepseek-v4`, `claude-minimax-m2.7`, `claude-qwen3.6-plus`, and `claude-glm-5.1`
75
- - `routerlab` also exposes `aws`, `claude-gpt`, `deepseek-v4`, `claude-kimi-k2.6`, and `claude-glm-5.1`
73
+ - `llm` currently exposes `claude`, `claude-gpt`, `claude-gpt-special`, `deepseek-v4`, `minimax-m2.7`, and `glm-5.1`
74
+ - `routerlab` also exposes `aws`, `claude-gpt`, `deepseek-v4`, `claude-kimi-k2.6`, and `glm-5.1`
76
75
 
77
76
  ## Strategies
78
77
 
79
- - `default`: use Claude Code normally without forcing model environment variables
80
- - `aws`: sets Claude Code model variables to RouterLab AWS-backed Claude variants
81
- - `claude`: on `--service llm`, sets model variables to `claude-haiku-4-5-20251001`, `claude-sonnet-4-6`, and `claude-opus-4-7`
82
- - `claude-gpt`: sets model variables to the GPT family
83
- Opus uses `gpt-5.5`, Sonnet uses `gpt-5.4`, Haiku and subagents use `gpt-5.4-mini`
84
- - `claude-gpt-special`: on `--service llm`, uses `claude-gpt-5.4-sp` for Opus, Sonnet, Haiku, and subagents
85
- - `deepseek-v4`: uses `claude-deepseek-v4-pro` for Opus/Sonnet and `claude-deepseek-v4-flash` for Haiku/subagents
86
- - `claude-minimax-m2.7`: on `--service llm`, shown as `minimax-m2.7 beta` and uses `claude-minimax-m2.7` for Opus, Sonnet, Haiku, and subagents
87
- - `claude-qwen3.6-plus`: on `--service llm`, shown as `qwen3.6-plus beta` and uses `claude-qwen3.6-plus` for Opus, Sonnet, Haiku, and subagents
88
- - `claude-kimi-k2.6`: uses `claude-kimi-k2.6` for Opus, Sonnet, Haiku, and subagents
89
- - `claude-glm-5.1`: uses `claude-glm-5.1` for Opus, Sonnet, Haiku, and subagents
90
-
91
- Use `--list-strategies` to see the strategies available for the selected service and their live availability when a token is available.
92
-
93
- ## Subagent model
94
-
95
- By default, each strategy keeps its own subagent model. You can override only Claude Code subagents without changing the main Opus, Sonnet, and Haiku model variables:
96
-
97
- - `--subagent-model default`: keep the strategy default
98
- - `--subagent-model haiku`: force subagents to `claude-haiku-4-5-20251001`
99
- - `--subagent-model gpt-5.4-mini`: force subagents to `gpt-5.4-mini`
100
-
101
- For example, `--strategy deepseek-v4` uses `claude-deepseek-v4-flash` for subagents by default. Adding `--subagent-model haiku` keeps the DeepSeek main model routing but sets `CLAUDE_CODE_SUBAGENT_MODEL=claude-haiku-4-5-20251001`.
78
+ - `default`: use Claude Code normally without forcing model environment variables
79
+ - `aws`: sets Claude Code model variables to RouterLab AWS-backed Claude variants
80
+ - `claude`: on `--service llm`, sets Opus to `claude-opus-4-7`, Haiku to `claude-opus-4-6`, Sonnet to `claude-sonnet-4-6`, and subagents to `claude-sonnet-4-6`
81
+ - `claude-gpt`: sets model variables to the GPT family
82
+ Opus uses `claude-gpt-5.5`, Sonnet uses `claude-gpt-5.4`, Haiku and subagents use `claude-gpt-5.4-mini`
83
+ - `claude-gpt-special`: on `--service llm`, uses `claude-gpt-5.4-sp` for Opus, Sonnet, Haiku, and subagents
84
+ - `deepseek-v4`: uses `claude-deepseek-v4-pro` for Opus/Sonnet and `claude-deepseek-v4-flash` for Haiku/subagents
85
+ - `minimax-m2.7`: on `--service llm`, shown as `minimax-m2.7` and uses `claude-minimax-m2.7` for Opus, Sonnet, Haiku, and subagents
86
+ - `claude-kimi-k2.6`: uses `claude-kimi-k2.6` for Opus, Sonnet, Haiku, and subagents
87
+ - `glm-5.1`: uses `claude-glm-5.1` for Opus, Sonnet, Haiku, and subagents
88
+
89
+ Use `--list-strategies` to see the strategies available for the selected service and their live availability when a token is available.
90
+
91
+ ## Subagent model
92
+
93
+ By default, each strategy keeps its own subagent model. On the default RouterLab service, you can override only Claude Code subagents without changing the main Opus, Sonnet, and Haiku model variables:
94
+
95
+ - `--subagent-model default`: keep the strategy default
96
+ - `--subagent-model haiku`: force subagents to `claude-haiku-4-5-20251001`
97
+ - `--subagent-model gpt-5.4-mini`: force subagents to `claude-gpt-5.4-mini`
98
+
99
+ For example, `--strategy deepseek-v4` uses `claude-deepseek-v4-flash` for subagents by default. Adding `--subagent-model haiku` keeps the DeepSeek main model routing but sets `CLAUDE_CODE_SUBAGENT_MODEL=claude-haiku-4-5-20251001`.
100
+
101
+ With `--service llm --strategy claude`, the Subagent Model question is skipped and subagents are forced to `claude-sonnet-4-6`. Other `llm` strategies ask for one of these subagent models:
102
+
103
+ - `gpt-5.4-mini`
104
+ - `claude-deepseek-v4-flash`
102
105
 
103
106
  ## Token Handling
104
107
 
@@ -129,10 +132,10 @@ claude-scionos auth test
129
132
 
130
133
  ## What `--strategy` and `--no-prompt` mean
131
134
 
132
- - `--strategy <value>` skips the interactive strategy menu and selects the route directly
133
- - `--service <value>` switches between RouterLab targets. `routerlab` is the default and `llm` is invitation-only
134
- - `--subagent-model <default|haiku|gpt-5.4-mini>` selects only the Claude Code subagent model
135
- - `--no-prompt` disables every interactive question
135
+ - `--strategy <value>` skips the interactive strategy menu and selects the route directly
136
+ - `--service <value>` switches between RouterLab targets. `routerlab` is the default and `llm` is invitation-only
137
+ - `--subagent-model <default|haiku|gpt-5.4-mini>` selects only the Claude Code subagent model on the default RouterLab service; with `--service llm`, supported values are `gpt-5.4-mini` and `claude-deepseek-v4-flash`
138
+ - `--no-prompt` disables every interactive question
136
139
 
137
140
  When `--no-prompt` is used, the launcher must already have a token from `ANTHROPIC_AUTH_TOKEN` or secure storage.
138
141
 
@@ -149,7 +152,7 @@ When `--no-prompt` is used, the launcher must already have a token from `ANTHROP
149
152
 
150
153
  ## Compatibility
151
154
 
152
- The wrapper forwards regular Claude Code flags and arguments. RouterLab is called directly by Claude Code; strategies are applied through `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, and, where needed, `CLAUDE_CODE_SUBAGENT_MODEL`.
155
+ The wrapper forwards regular Claude Code flags and arguments. RouterLab is called directly by Claude Code; strategies are applied through `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, and, where needed, `CLAUDE_CODE_SUBAGENT_MODEL`.
153
156
 
154
157
  ## Troubleshooting
155
158
 
package/index.js CHANGED
@@ -564,9 +564,13 @@ async function resolveStrategyChoice(parsed, modelIds, serviceConfig) {
564
564
  return finalizeChoice(selected);
565
565
  }
566
566
 
567
- async function resolveSubagentModelChoice(parsed) {
567
+ async function resolveSubagentModelChoice(parsed, serviceConfig, strategyValue) {
568
+ if (serviceConfig?.value === 'llm' && strategyValue === 'claude') {
569
+ return 'claude-sonnet-4-6';
570
+ }
571
+
568
572
  if (parsed.subagentModel !== 'default') {
569
- getSubagentModelOverride(parsed.subagentModel);
573
+ getSubagentModelOverride(parsed.subagentModel, serviceConfig?.value);
570
574
  return parsed.subagentModel;
571
575
  }
572
576
 
@@ -574,9 +578,20 @@ async function resolveSubagentModelChoice(parsed) {
574
578
  return 'default';
575
579
  }
576
580
 
577
- return select({
578
- message: 'Select Subagent Model:',
579
- choices: [
581
+ const choices = serviceConfig?.value === 'llm'
582
+ ? [
583
+ {
584
+ name: 'GPT 5.4 mini',
585
+ value: 'gpt-5.4-mini',
586
+ description: 'Force Claude Code subagents to gpt-5.4-mini.',
587
+ },
588
+ {
589
+ name: 'Claude DeepSeek V4 flash',
590
+ value: 'claude-deepseek-v4-flash',
591
+ description: 'Force Claude Code subagents to claude-deepseek-v4-flash.',
592
+ },
593
+ ]
594
+ : [
580
595
  {
581
596
  name: 'Strategy default',
582
597
  value: 'default',
@@ -592,7 +607,11 @@ async function resolveSubagentModelChoice(parsed) {
592
607
  value: 'gpt-5.4-mini',
593
608
  description: 'Force Claude Code subagents to gpt-5.4-mini.',
594
609
  },
595
- ],
610
+ ];
611
+
612
+ return select({
613
+ message: 'Select Subagent Model:',
614
+ choices,
596
615
  });
597
616
  }
598
617
 
@@ -815,7 +834,7 @@ async function main() {
815
834
  }
816
835
 
817
836
  const modelChoice = await resolveStrategyChoice(parsed, validation.models, serviceConfig);
818
- const subagentModelChoice = await resolveSubagentModelChoice(parsed);
837
+ const subagentModelChoice = await resolveSubagentModelChoice(parsed, serviceConfig, modelChoice);
819
838
  const finalBaseUrl = resolveServiceBaseUrl(serviceConfig.value);
820
839
  const env = buildClaudeLaunchEnvironment(token, serviceConfig, modelChoice, {
821
840
  subagentModel: subagentModelChoice
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-scionos",
3
- "version": "5.0.0",
3
+ "version": "5.1.0",
4
4
  "description": "RouterLab launcher, model strategy configurator and secure token wrapper for Claude Code CLI",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -49,6 +49,6 @@
49
49
  "@eslint/js": "^10.0.1",
50
50
  "eslint": "^10.4.0",
51
51
  "globals": "^17.6.0",
52
- "vitest": "^4.1.6"
52
+ "vitest": "^4.1.7"
53
53
  }
54
54
  }
package/src/routerlab.js CHANGED
@@ -13,7 +13,7 @@ const SERVICES = {
13
13
  secureStorageAccount: 'routerlab-token',
14
14
  secureStorageLabel: 'RouterLab Token',
15
15
  secureStorageFileName: 'routerlab-token.secure.txt',
16
- strategyValues: ['default', 'aws', 'claude-gpt', 'deepseek-v4', 'claude-kimi-k2.6', 'claude-glm-5.1'],
16
+ strategyValues: ['default', 'aws', 'claude-gpt', 'deepseek-v4', 'claude-kimi-k2.6', 'glm-5.1'],
17
17
  },
18
18
  llm: {
19
19
  value: 'llm',
@@ -24,7 +24,7 @@ const SERVICES = {
24
24
  secureStorageAccount: 'routerlab-llm-token',
25
25
  secureStorageLabel: 'RouterLab LLM Token',
26
26
  secureStorageFileName: 'routerlab-llm-token.secure.txt',
27
- strategyValues: ['claude', 'claude-gpt', 'claude-gpt-special', 'deepseek-v4', 'claude-minimax-m2.7', 'claude-qwen3.6-plus', 'claude-glm-5.1'],
27
+ strategyValues: ['claude', 'claude-gpt', 'claude-gpt-special', 'deepseek-v4', 'minimax-m2.7', 'glm-5.1'],
28
28
  },
29
29
  };
30
30
  const DEFAULT_SERVICE = 'routerlab';
@@ -40,24 +40,36 @@ const DEFAULT_CLAUDE_MODELS = [
40
40
  'claude-sonnet-4-6',
41
41
  'claude-opus-4-7',
42
42
  ];
43
+ const LLM_CLAUDE_MODELS = [
44
+ 'claude-opus-4-7',
45
+ 'claude-opus-4-6',
46
+ 'claude-sonnet-4-6',
47
+ ];
48
+ const LLM_SUBAGENT_MODEL = 'claude-sonnet-4-6';
43
49
  const AWS_CLAUDE_MODELS = [
44
50
  'aws-claude-haiku-4-5-20251001',
45
51
  'aws-claude-sonnet-4-6',
46
52
  'aws-claude-opus-4-7',
47
53
  ];
48
54
  const OPENAI_GPT_MODELS = [
49
- 'gpt-5.5',
50
- 'gpt-5.4',
51
- 'gpt-5.4-mini',
55
+ 'claude-gpt-5.5',
56
+ 'claude-gpt-5.4',
57
+ 'claude-gpt-5.4-mini',
52
58
  ];
53
59
  const DEEPSEEK_V4_MODELS = [
54
60
  'claude-deepseek-v4-pro',
55
61
  'claude-deepseek-v4-flash',
56
62
  ];
63
+ const LLM_DEEPSEEK_V4_MODELS = DEEPSEEK_V4_MODELS;
57
64
  const SUBAGENT_MODEL_CHOICES = {
58
65
  default: null,
59
66
  haiku: 'claude-haiku-4-5-20251001',
60
- 'gpt-5.4-mini': 'gpt-5.4-mini',
67
+ 'gpt-5.4-mini': 'claude-gpt-5.4-mini',
68
+ };
69
+ const LLM_SUBAGENT_MODEL_CHOICES = {
70
+ default: null,
71
+ 'gpt-5.4-mini': 'claude-gpt-5.4-mini',
72
+ 'claude-deepseek-v4-flash': 'claude-deepseek-v4-flash',
61
73
  };
62
74
 
63
75
  function createModelEnvironment({opus, sonnet, haiku, subagent = null}) {
@@ -123,24 +135,24 @@ const STRATEGIES = [
123
135
  value: 'claude-gpt',
124
136
  name: 'OpenAI GPT',
125
137
  selectionName: 'OpenAI GPT (5.5, 5.4, 5.4-mini)',
126
- description: 'Sets Claude Code model environment variables to the gpt family. Opus => gpt-5.5, Sonnet => gpt-5.4, Haiku => gpt-5.4-mini.',
127
- selectionDescription: 'Opus => gpt-5.5, Sonnet => gpt-5.4, Haiku => gpt-5.4-mini.',
138
+ description: 'Sets Claude Code model environment variables to the claude-gpt family. Opus => claude-gpt-5.5, Sonnet => claude-gpt-5.4, Haiku => claude-gpt-5.4-mini.',
139
+ selectionDescription: 'Opus => claude-gpt-5.5, Sonnet => claude-gpt-5.4, Haiku => claude-gpt-5.4-mini.',
128
140
  aliases: ['claude-gpt-5.4'],
129
141
  requiredModels: OPENAI_GPT_MODELS,
130
142
  environment: createModelEnvironment({
131
- opus: 'gpt-5.5',
132
- sonnet: 'gpt-5.4',
133
- haiku: 'gpt-5.4-mini',
134
- subagent: 'gpt-5.4-mini',
143
+ opus: 'claude-gpt-5.5',
144
+ sonnet: 'claude-gpt-5.4',
145
+ haiku: 'claude-gpt-5.4-mini',
146
+ subagent: 'claude-gpt-5.4-mini',
135
147
  }),
136
148
  },
137
149
  {
138
150
  value: 'claude-gpt-special',
139
- name: 'OpenAI GPT special',
140
- selectionName: 'OpenAI GPT special (claude-gpt-5.4-sp)',
151
+ name: 'OpenAI GPT special price, not always available',
152
+ selectionName: 'OpenAI GPT special price, not always available',
141
153
  description: 'Sets all Claude Code model environment variables to claude-gpt-5.4-sp.',
142
154
  selectionDescription: 'Uses claude-gpt-5.4-sp for all model aliases.',
143
- aliases: ['claude-gpt-5.4-sp'],
155
+ aliases: ['gpt-5.4-sp'],
144
156
  requiredModels: ['claude-gpt-5.4-sp'],
145
157
  environment: createSingleModelEnvironment('claude-gpt-5.4-sp'),
146
158
  },
@@ -148,7 +160,7 @@ const STRATEGIES = [
148
160
  value: 'deepseek-v4',
149
161
  name: 'deepseek-v4',
150
162
  selectionName: 'deepseek-v4',
151
- description: 'Sets Claude Code model environment variables to the deepseek-v4 family. Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
163
+ description: 'Sets Claude Code model environment variables to the claude-deepseek-v4 family. Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
152
164
  selectionDescription: 'Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
153
165
  requiredModels: DEEPSEEK_V4_MODELS,
154
166
  environment: createModelEnvironment({
@@ -159,18 +171,18 @@ const STRATEGIES = [
159
171
  }),
160
172
  },
161
173
  {
162
- value: 'claude-minimax-m2.7',
163
- name: 'minimax-m2.7 beta',
164
- selectionName: 'minimax-m2.7 beta',
174
+ value: 'minimax-m2.7',
175
+ name: 'minimax-m2.7',
176
+ selectionName: 'minimax-m2.7',
165
177
  description: 'Sets all Claude Code model environment variables to claude-minimax-m2.7.',
166
178
  selectionDescription: 'Uses claude-minimax-m2.7 for all model aliases.',
167
179
  requiredModels: ['claude-minimax-m2.7'],
168
180
  environment: createSingleModelEnvironment('claude-minimax-m2.7'),
169
181
  },
170
182
  {
171
- value: 'claude-qwen3.6-plus',
172
- name: 'qwen3.6-plus beta',
173
- selectionName: 'qwen3.6-plus beta',
183
+ value: 'qwen3.6-plus',
184
+ name: 'qwen3.6-plus',
185
+ selectionName: 'qwen3.6-plus',
174
186
  description: 'Sets all Claude Code model environment variables to claude-qwen3.6-plus.',
175
187
  selectionDescription: 'Uses claude-qwen3.6-plus for all model aliases.',
176
188
  requiredModels: ['claude-qwen3.6-plus'],
@@ -185,8 +197,8 @@ const STRATEGIES = [
185
197
  environment: createSingleModelEnvironment('claude-kimi-k2.6'),
186
198
  },
187
199
  {
188
- value: 'claude-glm-5.1',
189
- name: 'GLM-5.1',
200
+ value: 'glm-5.1',
201
+ name: 'glm-5.1',
190
202
  description: 'Sets all Claude Code model environment variables to claude-glm-5.1.',
191
203
  selectionDescription: 'Uses claude-glm-5.1 for all model aliases.',
192
204
  requiredModels: ['claude-glm-5.1'],
@@ -348,7 +360,59 @@ function getServiceStrategies(serviceValue = DEFAULT_SERVICE) {
348
360
  }
349
361
 
350
362
  return service.strategyValues
351
- .map((strategyValue) => STRATEGIES.find((strategy) => strategy.value === strategyValue) ?? null)
363
+ .map((strategyValue) => {
364
+ const strategy = STRATEGIES.find((entry) => entry.value === strategyValue) ?? null;
365
+ if (service.value === 'llm' && strategy?.value === 'claude') {
366
+ return {
367
+ ...strategy,
368
+ selectionDescription: 'Use claude-opus-4-7, claude-opus-4-6, claude-sonnet-4-6.',
369
+ requiredModels: LLM_CLAUDE_MODELS,
370
+ environment: createModelEnvironment({
371
+ opus: 'claude-opus-4-7',
372
+ sonnet: 'claude-sonnet-4-6',
373
+ haiku: 'claude-opus-4-6',
374
+ subagent: LLM_SUBAGENT_MODEL,
375
+ }),
376
+ };
377
+ }
378
+
379
+ if (service.value === 'llm' && strategy?.value === 'deepseek-v4') {
380
+ return {
381
+ ...strategy,
382
+ description: 'Sets Claude Code model environment variables to the claude-deepseek-v4 family. Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
383
+ selectionDescription: 'Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
384
+ requiredModels: LLM_DEEPSEEK_V4_MODELS,
385
+ environment: createModelEnvironment({
386
+ opus: 'claude-deepseek-v4-pro',
387
+ sonnet: 'claude-deepseek-v4-pro',
388
+ haiku: 'claude-deepseek-v4-flash',
389
+ subagent: 'claude-deepseek-v4-flash',
390
+ }),
391
+ };
392
+ }
393
+
394
+ if (service.value === 'llm' && strategy?.value === 'minimax-m2.7') {
395
+ return {
396
+ ...strategy,
397
+ description: 'Sets all Claude Code model environment variables to claude-minimax-m2.7.',
398
+ selectionDescription: 'Uses claude-minimax-m2.7 for all model aliases.',
399
+ requiredModels: ['claude-minimax-m2.7'],
400
+ environment: createSingleModelEnvironment('claude-minimax-m2.7'),
401
+ };
402
+ }
403
+
404
+ if (service.value === 'llm' && strategy?.value === 'glm-5.1') {
405
+ return {
406
+ ...strategy,
407
+ description: 'Sets all Claude Code model environment variables to claude-glm-5.1.',
408
+ selectionDescription: 'Uses claude-glm-5.1 for all model aliases.',
409
+ requiredModels: ['claude-glm-5.1'],
410
+ environment: createSingleModelEnvironment('claude-glm-5.1'),
411
+ };
412
+ }
413
+
414
+ return strategy;
415
+ })
352
416
  .filter(Boolean);
353
417
  }
354
418
 
@@ -357,7 +421,7 @@ function normalizeStrategyValue(strategyValue) {
357
421
  return 'claude-gpt';
358
422
  }
359
423
 
360
- if (strategyValue === 'claude-gpt-5.4-sp') {
424
+ if (strategyValue === 'gpt-5.4-sp') {
361
425
  return 'claude-gpt-special';
362
426
  }
363
427
 
@@ -534,13 +598,21 @@ function normalizeSubagentModelChoice(subagentModelChoice = 'default') {
534
598
  return subagentModelChoice?.trim()?.toLowerCase() || 'default';
535
599
  }
536
600
 
537
- function getSubagentModelOverride(subagentModelChoice = 'default') {
601
+ function getSubagentModelChoices(serviceValue = DEFAULT_SERVICE) {
602
+ return normalizeServiceValue(serviceValue) === 'llm'
603
+ ? LLM_SUBAGENT_MODEL_CHOICES
604
+ : SUBAGENT_MODEL_CHOICES;
605
+ }
606
+
607
+ function getSubagentModelOverride(subagentModelChoice = 'default', serviceValue = DEFAULT_SERVICE) {
538
608
  const normalizedChoice = normalizeSubagentModelChoice(subagentModelChoice);
539
- if (!Object.hasOwn(SUBAGENT_MODEL_CHOICES, normalizedChoice)) {
540
- throw new Error(`Unknown subagent model "${subagentModelChoice}". Supported values: default, haiku, gpt-5.4-mini.`);
609
+ const choices = getSubagentModelChoices(serviceValue);
610
+ if (!Object.hasOwn(choices, normalizedChoice)) {
611
+ const supportedValues = Object.keys(choices).join(', ');
612
+ throw new Error(`Unknown subagent model "${subagentModelChoice}". Supported values: ${supportedValues}.`);
541
613
  }
542
614
 
543
- return SUBAGENT_MODEL_CHOICES[normalizedChoice];
615
+ return choices[normalizedChoice];
544
616
  }
545
617
 
546
618
  function getStrategyEnvironment(strategyValue, serviceValue = DEFAULT_SERVICE, options = {}) {
@@ -550,7 +622,11 @@ function getStrategyEnvironment(strategyValue, serviceValue = DEFAULT_SERVICE, o
550
622
  }
551
623
 
552
624
  const environment = {...(strategy.environment ?? {})};
553
- const subagentModelOverride = getSubagentModelOverride(options.subagentModel);
625
+ const normalizedServiceValue = normalizeServiceValue(serviceValue);
626
+ const normalizedStrategyValue = normalizeStrategyValue(strategyValue);
627
+ const subagentModelOverride = normalizedServiceValue === 'llm' && normalizedStrategyValue === 'claude'
628
+ ? LLM_SUBAGENT_MODEL
629
+ : getSubagentModelOverride(options.subagentModel, normalizedServiceValue);
554
630
 
555
631
  if (subagentModelOverride) {
556
632
  environment.CLAUDE_CODE_SUBAGENT_MODEL = subagentModelOverride;
@@ -815,12 +891,15 @@ function getStoredTokenStatus(serviceValue = DEFAULT_SERVICE) {
815
891
  export {
816
892
  BASE_URL,
817
893
  DEFAULT_CLAUDE_MODELS,
894
+ LLM_CLAUDE_MODELS,
818
895
  DEFAULT_SERVICE,
819
896
  DEFAULT_ANTHROPIC_VERSION,
820
897
  AWS_CLAUDE_MODELS,
821
898
  OPENAI_GPT_MODELS,
822
899
  DEEPSEEK_V4_MODELS,
900
+ LLM_DEEPSEEK_V4_MODELS,
823
901
  SUBAGENT_MODEL_CHOICES,
902
+ LLM_SUBAGENT_MODEL_CHOICES,
824
903
  SECURE_STORAGE_SERVICE,
825
904
  SERVICES,
826
905
  STRATEGIES,