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 +50 -47
- package/README.md +49 -46
- package/index.js +26 -7
- package/package.json +2 -2
- package/src/routerlab.js +110 -31
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
|
|
63
|
-
npx claude-scionos --
|
|
64
|
-
npx claude-scionos --strategy
|
|
65
|
-
|
|
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`, `
|
|
75
|
-
- `routerlab` expose aussi `aws`, `claude-gpt`, `deepseek-v4`, `claude-kimi-k2.6` et `
|
|
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
|
|
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
|
-
- `
|
|
87
|
-
- `claude-
|
|
88
|
-
- `
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- `--subagent-model
|
|
98
|
-
- `--subagent-model
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
|
63
|
-
npx claude-scionos --
|
|
64
|
-
npx claude-scionos --strategy
|
|
65
|
-
|
|
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`, `
|
|
75
|
-
- `routerlab` also exposes `aws`, `claude-gpt`, `deepseek-v4`, `claude-kimi-k2.6`, and `
|
|
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
|
|
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
|
-
- `
|
|
87
|
-
- `claude-
|
|
88
|
-
- `
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- `--subagent-model
|
|
98
|
-
- `--subagent-model
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
578
|
-
|
|
579
|
-
|
|
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.
|
|
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.
|
|
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', '
|
|
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', '
|
|
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
|
|
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: ['
|
|
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: '
|
|
163
|
-
name: 'minimax-m2.7
|
|
164
|
-
selectionName: 'minimax-m2.7
|
|
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: '
|
|
172
|
-
name: 'qwen3.6-plus
|
|
173
|
-
selectionName: 'qwen3.6-plus
|
|
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: '
|
|
189
|
-
name: '
|
|
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) =>
|
|
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 === '
|
|
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
|
|
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
|
-
|
|
540
|
-
|
|
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
|
|
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
|
|
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,
|