claude-scionos 5.0.0 → 5.2.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 +49 -48
- package/README.md +48 -47
- package/index.js +29 -21
- package/package.json +3 -3
- package/src/routerlab.js +111 -32
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
|
|
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, GPT 5.4 mini, ou claude-deepseek-v4-flash 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,49 +56,50 @@ 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
|
|
|
70
|
-
- le comportement par défaut utilise `https://routerlab.ch`
|
|
69
|
+
- le comportement par défaut utilise `https://api.routerlab.ch`
|
|
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
|
-
- `--subagent-model
|
|
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
|
+
- `--subagent-model claude-deepseek-v4-flash` : force les sous-agents vers `claude-deepseek-v4-flash`
|
|
99
|
+
|
|
100
|
+
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`.
|
|
101
|
+
|
|
102
|
+
Toutes les stratégies du `--service llm` supportent les mêmes modèles de sous-agents que le service par défaut.
|
|
102
103
|
|
|
103
104
|
## Gestion du token
|
|
104
105
|
|
|
@@ -129,10 +130,10 @@ claude-scionos auth test
|
|
|
129
130
|
|
|
130
131
|
## Ce que veulent dire `--strategy` et `--no-prompt`
|
|
131
132
|
|
|
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>`
|
|
135
|
-
- `--no-prompt` désactive toutes les questions interactives
|
|
133
|
+
- `--strategy <value>` évite le menu interactif et choisit directement la route
|
|
134
|
+
- `--service <value>` change la cible RouterLab. `routerlab` reste le défaut et `llm` est réservé à l'accès sur invitation
|
|
135
|
+
- `--subagent-model <default|haiku|gpt-5.4-mini|claude-deepseek-v4-flash>` surcharge le modèle de sous-agent Claude Code sur le service RouterLab par défaut ainsi que sur `--service llm`
|
|
136
|
+
- `--no-prompt` désactive toutes les questions interactives
|
|
136
137
|
|
|
137
138
|
Quand `--no-prompt` est utilisé, le lanceur doit déjà avoir un token via `ANTHROPIC_AUTH_TOKEN` ou via le stockage sécurisé.
|
|
138
139
|
|
|
@@ -149,7 +150,7 @@ Quand `--no-prompt` est utilisé, le lanceur doit déjà avoir un token via `ANT
|
|
|
149
150
|
|
|
150
151
|
## Compatibilité
|
|
151
152
|
|
|
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`.
|
|
153
|
+
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
154
|
|
|
154
155
|
## Dépannage
|
|
155
156
|
|
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
|
|
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, GPT 5.4 mini, or claude-deepseek-v4-flash 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,49 +56,50 @@ 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
|
|
|
70
|
-
- Default behavior uses `https://routerlab.ch`
|
|
69
|
+
- Default behavior uses `https://api.routerlab.ch`
|
|
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
|
-
- `--subagent-model
|
|
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
|
+
- `--subagent-model claude-deepseek-v4-flash`: force subagents to `claude-deepseek-v4-flash`
|
|
99
|
+
|
|
100
|
+
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`.
|
|
101
|
+
|
|
102
|
+
All `--service llm` strategies support the same subagent models as the default service.
|
|
102
103
|
|
|
103
104
|
## Token Handling
|
|
104
105
|
|
|
@@ -129,10 +130,10 @@ claude-scionos auth test
|
|
|
129
130
|
|
|
130
131
|
## What `--strategy` and `--no-prompt` mean
|
|
131
132
|
|
|
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>`
|
|
135
|
-
- `--no-prompt` disables every interactive question
|
|
133
|
+
- `--strategy <value>` skips the interactive strategy menu and selects the route directly
|
|
134
|
+
- `--service <value>` switches between RouterLab targets. `routerlab` is the default and `llm` is invitation-only
|
|
135
|
+
- `--subagent-model <default|haiku|gpt-5.4-mini|claude-deepseek-v4-flash>` overrides the Claude Code subagent model on both the default RouterLab service and `--service llm`
|
|
136
|
+
- `--no-prompt` disables every interactive question
|
|
136
137
|
|
|
137
138
|
When `--no-prompt` is used, the launcher must already have a token from `ANTHROPIC_AUTH_TOKEN` or secure storage.
|
|
138
139
|
|
|
@@ -149,7 +150,7 @@ When `--no-prompt` is used, the launcher must already have a token from `ANTHROP
|
|
|
149
150
|
|
|
150
151
|
## Compatibility
|
|
151
152
|
|
|
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`.
|
|
153
|
+
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
154
|
|
|
154
155
|
## Troubleshooting
|
|
155
156
|
|
package/index.js
CHANGED
|
@@ -150,7 +150,7 @@ function showHelp() {
|
|
|
150
150
|
console.log(chalk.gray("Flags"));
|
|
151
151
|
console.log(` ${chalk.cyan("--strategy <value>")} Preselect a strategy without opening the menu`);
|
|
152
152
|
console.log(` ${chalk.cyan(`--service <${supportedServices}>`)} Select the RouterLab access target (${chalk.white("llm")} is invitation-only)`);
|
|
153
|
-
console.log(` ${chalk.cyan("--subagent-model <default|haiku|gpt-5.4-mini>")} Override the Claude Code subagent model`);
|
|
153
|
+
console.log(` ${chalk.cyan("--subagent-model <default|haiku|gpt-5.4-mini|claude-deepseek-v4-flash>")} Override the Claude Code subagent model`);
|
|
154
154
|
console.log(` ${chalk.cyan("--no-prompt")} Do not ask any interactive question`);
|
|
155
155
|
console.log(` ${chalk.cyan("--list-strategies")} List strategies and availability`);
|
|
156
156
|
console.log(` ${chalk.cyan("--scionos-debug")} Show launch diagnostics`);
|
|
@@ -564,9 +564,10 @@ 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
|
+
|
|
568
569
|
if (parsed.subagentModel !== 'default') {
|
|
569
|
-
getSubagentModelOverride(parsed.subagentModel);
|
|
570
|
+
getSubagentModelOverride(parsed.subagentModel, serviceConfig?.value);
|
|
570
571
|
return parsed.subagentModel;
|
|
571
572
|
}
|
|
572
573
|
|
|
@@ -574,25 +575,32 @@ async function resolveSubagentModelChoice(parsed) {
|
|
|
574
575
|
return 'default';
|
|
575
576
|
}
|
|
576
577
|
|
|
578
|
+
const choices = [
|
|
579
|
+
{
|
|
580
|
+
name: 'Strategy default',
|
|
581
|
+
value: 'default',
|
|
582
|
+
description: 'Use the subagent model defined by the selected strategy.',
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
name: 'Claude Haiku',
|
|
586
|
+
value: 'haiku',
|
|
587
|
+
description: 'Force Claude Code subagents to claude-haiku-4-5-20251001.',
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
name: 'GPT 5.4 mini',
|
|
591
|
+
value: 'gpt-5.4-mini',
|
|
592
|
+
description: 'Force Claude Code subagents to gpt-5.4-mini.',
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: 'DeepSeek V4 flash',
|
|
596
|
+
value: 'claude-deepseek-v4-flash',
|
|
597
|
+
description: 'Force Claude Code subagents to claude-deepseek-v4-flash.',
|
|
598
|
+
},
|
|
599
|
+
];
|
|
600
|
+
|
|
577
601
|
return select({
|
|
578
602
|
message: 'Select Subagent Model:',
|
|
579
|
-
choices
|
|
580
|
-
{
|
|
581
|
-
name: 'Strategy default',
|
|
582
|
-
value: 'default',
|
|
583
|
-
description: 'Use the subagent model defined by the selected strategy.',
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
name: 'Claude Haiku',
|
|
587
|
-
value: 'haiku',
|
|
588
|
-
description: 'Force Claude Code subagents to claude-haiku-4-5-20251001.',
|
|
589
|
-
},
|
|
590
|
-
{
|
|
591
|
-
name: 'GPT 5.4 mini',
|
|
592
|
-
value: 'gpt-5.4-mini',
|
|
593
|
-
description: 'Force Claude Code subagents to gpt-5.4-mini.',
|
|
594
|
-
},
|
|
595
|
-
],
|
|
603
|
+
choices,
|
|
596
604
|
});
|
|
597
605
|
}
|
|
598
606
|
|
|
@@ -815,7 +823,7 @@ async function main() {
|
|
|
815
823
|
}
|
|
816
824
|
|
|
817
825
|
const modelChoice = await resolveStrategyChoice(parsed, validation.models, serviceConfig);
|
|
818
|
-
const subagentModelChoice = await resolveSubagentModelChoice(parsed);
|
|
826
|
+
const subagentModelChoice = await resolveSubagentModelChoice(parsed, serviceConfig, modelChoice);
|
|
819
827
|
const finalBaseUrl = resolveServiceBaseUrl(serviceConfig.value);
|
|
820
828
|
const env = buildClaudeLaunchEnvironment(token, serviceConfig, modelChoice, {
|
|
821
829
|
subagentModel: subagentModelChoice
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-scionos",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.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",
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
},
|
|
44
44
|
"private": false,
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@inquirer/prompts": "^8.
|
|
46
|
+
"@inquirer/prompts": "^8.5.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
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
|
@@ -9,11 +9,11 @@ const SERVICES = {
|
|
|
9
9
|
label: 'RouterLab',
|
|
10
10
|
availabilityLabel: 'RouterLab',
|
|
11
11
|
tokenPromptLabel: 'RouterLab',
|
|
12
|
-
baseUrl: 'https://routerlab.ch',
|
|
12
|
+
baseUrl: 'https://api.routerlab.ch',
|
|
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,38 @@ 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
|
+
'claude-deepseek-v4-flash': 'claude-deepseek-v4-flash',
|
|
69
|
+
};
|
|
70
|
+
const LLM_SUBAGENT_MODEL_CHOICES = {
|
|
71
|
+
default: null,
|
|
72
|
+
haiku: 'claude-haiku-4-5-20251001',
|
|
73
|
+
'gpt-5.4-mini': 'claude-gpt-5.4-mini',
|
|
74
|
+
'claude-deepseek-v4-flash': 'claude-deepseek-v4-flash',
|
|
61
75
|
};
|
|
62
76
|
|
|
63
77
|
function createModelEnvironment({opus, sonnet, haiku, subagent = null}) {
|
|
@@ -123,24 +137,24 @@ const STRATEGIES = [
|
|
|
123
137
|
value: 'claude-gpt',
|
|
124
138
|
name: 'OpenAI GPT',
|
|
125
139
|
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.',
|
|
140
|
+
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.',
|
|
141
|
+
selectionDescription: 'Opus => claude-gpt-5.5, Sonnet => claude-gpt-5.4, Haiku => claude-gpt-5.4-mini.',
|
|
128
142
|
aliases: ['claude-gpt-5.4'],
|
|
129
143
|
requiredModels: OPENAI_GPT_MODELS,
|
|
130
144
|
environment: createModelEnvironment({
|
|
131
|
-
opus: 'gpt-5.5',
|
|
132
|
-
sonnet: 'gpt-5.4',
|
|
133
|
-
haiku: 'gpt-5.4-mini',
|
|
134
|
-
subagent: 'gpt-5.4-mini',
|
|
145
|
+
opus: 'claude-gpt-5.5',
|
|
146
|
+
sonnet: 'claude-gpt-5.4',
|
|
147
|
+
haiku: 'claude-gpt-5.4-mini',
|
|
148
|
+
subagent: 'claude-gpt-5.4-mini',
|
|
135
149
|
}),
|
|
136
150
|
},
|
|
137
151
|
{
|
|
138
152
|
value: 'claude-gpt-special',
|
|
139
|
-
name: 'OpenAI GPT special',
|
|
140
|
-
selectionName: 'OpenAI GPT special
|
|
153
|
+
name: 'OpenAI GPT special price, not always available',
|
|
154
|
+
selectionName: 'OpenAI GPT special price, not always available',
|
|
141
155
|
description: 'Sets all Claude Code model environment variables to claude-gpt-5.4-sp.',
|
|
142
156
|
selectionDescription: 'Uses claude-gpt-5.4-sp for all model aliases.',
|
|
143
|
-
aliases: ['
|
|
157
|
+
aliases: ['gpt-5.4-sp'],
|
|
144
158
|
requiredModels: ['claude-gpt-5.4-sp'],
|
|
145
159
|
environment: createSingleModelEnvironment('claude-gpt-5.4-sp'),
|
|
146
160
|
},
|
|
@@ -148,7 +162,7 @@ const STRATEGIES = [
|
|
|
148
162
|
value: 'deepseek-v4',
|
|
149
163
|
name: 'deepseek-v4',
|
|
150
164
|
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.',
|
|
165
|
+
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
166
|
selectionDescription: 'Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
|
|
153
167
|
requiredModels: DEEPSEEK_V4_MODELS,
|
|
154
168
|
environment: createModelEnvironment({
|
|
@@ -159,18 +173,18 @@ const STRATEGIES = [
|
|
|
159
173
|
}),
|
|
160
174
|
},
|
|
161
175
|
{
|
|
162
|
-
value: '
|
|
163
|
-
name: 'minimax-m2.7
|
|
164
|
-
selectionName: 'minimax-m2.7
|
|
176
|
+
value: 'minimax-m2.7',
|
|
177
|
+
name: 'minimax-m2.7',
|
|
178
|
+
selectionName: 'minimax-m2.7',
|
|
165
179
|
description: 'Sets all Claude Code model environment variables to claude-minimax-m2.7.',
|
|
166
180
|
selectionDescription: 'Uses claude-minimax-m2.7 for all model aliases.',
|
|
167
181
|
requiredModels: ['claude-minimax-m2.7'],
|
|
168
182
|
environment: createSingleModelEnvironment('claude-minimax-m2.7'),
|
|
169
183
|
},
|
|
170
184
|
{
|
|
171
|
-
value: '
|
|
172
|
-
name: 'qwen3.6-plus
|
|
173
|
-
selectionName: 'qwen3.6-plus
|
|
185
|
+
value: 'qwen3.6-plus',
|
|
186
|
+
name: 'qwen3.6-plus',
|
|
187
|
+
selectionName: 'qwen3.6-plus',
|
|
174
188
|
description: 'Sets all Claude Code model environment variables to claude-qwen3.6-plus.',
|
|
175
189
|
selectionDescription: 'Uses claude-qwen3.6-plus for all model aliases.',
|
|
176
190
|
requiredModels: ['claude-qwen3.6-plus'],
|
|
@@ -185,8 +199,8 @@ const STRATEGIES = [
|
|
|
185
199
|
environment: createSingleModelEnvironment('claude-kimi-k2.6'),
|
|
186
200
|
},
|
|
187
201
|
{
|
|
188
|
-
value: '
|
|
189
|
-
name: '
|
|
202
|
+
value: 'glm-5.1',
|
|
203
|
+
name: 'glm-5.1',
|
|
190
204
|
description: 'Sets all Claude Code model environment variables to claude-glm-5.1.',
|
|
191
205
|
selectionDescription: 'Uses claude-glm-5.1 for all model aliases.',
|
|
192
206
|
requiredModels: ['claude-glm-5.1'],
|
|
@@ -348,7 +362,59 @@ function getServiceStrategies(serviceValue = DEFAULT_SERVICE) {
|
|
|
348
362
|
}
|
|
349
363
|
|
|
350
364
|
return service.strategyValues
|
|
351
|
-
.map((strategyValue) =>
|
|
365
|
+
.map((strategyValue) => {
|
|
366
|
+
const strategy = STRATEGIES.find((entry) => entry.value === strategyValue) ?? null;
|
|
367
|
+
if (service.value === 'llm' && strategy?.value === 'claude') {
|
|
368
|
+
return {
|
|
369
|
+
...strategy,
|
|
370
|
+
selectionDescription: 'Use claude-opus-4-7, claude-opus-4-6, claude-sonnet-4-6.',
|
|
371
|
+
requiredModels: LLM_CLAUDE_MODELS,
|
|
372
|
+
environment: createModelEnvironment({
|
|
373
|
+
opus: 'claude-opus-4-7',
|
|
374
|
+
sonnet: 'claude-sonnet-4-6',
|
|
375
|
+
haiku: 'claude-opus-4-6',
|
|
376
|
+
subagent: LLM_SUBAGENT_MODEL,
|
|
377
|
+
}),
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if (service.value === 'llm' && strategy?.value === 'deepseek-v4') {
|
|
382
|
+
return {
|
|
383
|
+
...strategy,
|
|
384
|
+
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.',
|
|
385
|
+
selectionDescription: 'Opus and Sonnet => claude-deepseek-v4-pro, Haiku => claude-deepseek-v4-flash.',
|
|
386
|
+
requiredModels: LLM_DEEPSEEK_V4_MODELS,
|
|
387
|
+
environment: createModelEnvironment({
|
|
388
|
+
opus: 'claude-deepseek-v4-pro',
|
|
389
|
+
sonnet: 'claude-deepseek-v4-pro',
|
|
390
|
+
haiku: 'claude-deepseek-v4-flash',
|
|
391
|
+
subagent: 'claude-deepseek-v4-flash',
|
|
392
|
+
}),
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (service.value === 'llm' && strategy?.value === 'minimax-m2.7') {
|
|
397
|
+
return {
|
|
398
|
+
...strategy,
|
|
399
|
+
description: 'Sets all Claude Code model environment variables to claude-minimax-m2.7.',
|
|
400
|
+
selectionDescription: 'Uses claude-minimax-m2.7 for all model aliases.',
|
|
401
|
+
requiredModels: ['claude-minimax-m2.7'],
|
|
402
|
+
environment: createSingleModelEnvironment('claude-minimax-m2.7'),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
if (service.value === 'llm' && strategy?.value === 'glm-5.1') {
|
|
407
|
+
return {
|
|
408
|
+
...strategy,
|
|
409
|
+
description: 'Sets all Claude Code model environment variables to claude-glm-5.1.',
|
|
410
|
+
selectionDescription: 'Uses claude-glm-5.1 for all model aliases.',
|
|
411
|
+
requiredModels: ['claude-glm-5.1'],
|
|
412
|
+
environment: createSingleModelEnvironment('claude-glm-5.1'),
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return strategy;
|
|
417
|
+
})
|
|
352
418
|
.filter(Boolean);
|
|
353
419
|
}
|
|
354
420
|
|
|
@@ -357,7 +423,7 @@ function normalizeStrategyValue(strategyValue) {
|
|
|
357
423
|
return 'claude-gpt';
|
|
358
424
|
}
|
|
359
425
|
|
|
360
|
-
if (strategyValue === '
|
|
426
|
+
if (strategyValue === 'gpt-5.4-sp') {
|
|
361
427
|
return 'claude-gpt-special';
|
|
362
428
|
}
|
|
363
429
|
|
|
@@ -534,13 +600,21 @@ function normalizeSubagentModelChoice(subagentModelChoice = 'default') {
|
|
|
534
600
|
return subagentModelChoice?.trim()?.toLowerCase() || 'default';
|
|
535
601
|
}
|
|
536
602
|
|
|
537
|
-
function
|
|
603
|
+
function getSubagentModelChoices(serviceValue = DEFAULT_SERVICE) {
|
|
604
|
+
return normalizeServiceValue(serviceValue) === 'llm'
|
|
605
|
+
? LLM_SUBAGENT_MODEL_CHOICES
|
|
606
|
+
: SUBAGENT_MODEL_CHOICES;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
function getSubagentModelOverride(subagentModelChoice = 'default', serviceValue = DEFAULT_SERVICE) {
|
|
538
610
|
const normalizedChoice = normalizeSubagentModelChoice(subagentModelChoice);
|
|
539
|
-
|
|
540
|
-
|
|
611
|
+
const choices = getSubagentModelChoices(serviceValue);
|
|
612
|
+
if (!Object.hasOwn(choices, normalizedChoice)) {
|
|
613
|
+
const supportedValues = Object.keys(choices).join(', ');
|
|
614
|
+
throw new Error(`Unknown subagent model "${subagentModelChoice}". Supported values: ${supportedValues}.`);
|
|
541
615
|
}
|
|
542
616
|
|
|
543
|
-
return
|
|
617
|
+
return choices[normalizedChoice];
|
|
544
618
|
}
|
|
545
619
|
|
|
546
620
|
function getStrategyEnvironment(strategyValue, serviceValue = DEFAULT_SERVICE, options = {}) {
|
|
@@ -550,7 +624,9 @@ function getStrategyEnvironment(strategyValue, serviceValue = DEFAULT_SERVICE, o
|
|
|
550
624
|
}
|
|
551
625
|
|
|
552
626
|
const environment = {...(strategy.environment ?? {})};
|
|
553
|
-
const
|
|
627
|
+
const normalizedServiceValue = normalizeServiceValue(serviceValue);
|
|
628
|
+
const normalizedStrategyValue = normalizeStrategyValue(strategyValue);
|
|
629
|
+
const subagentModelOverride = 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,
|