@tokenaut/opentoken 1.3.0 → 1.3.3

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.md CHANGED
@@ -2,10 +2,16 @@
2
2
 
3
3
  OpenToken 一键配置 CLI,支持 Claude Code 和 Codex。
4
4
 
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install -g @tokenaut/opentoken
9
+ ```
10
+
5
11
  ## 用法
6
12
 
7
13
  ```bash
8
- opentoken <tool> [--key <api_key>] [--model <model>] [--header <prefix>] [--url <base_url>]
14
+ opentoken <tool> [--key <api_key>] [--model <model>] [--url <base_url>]
9
15
  ```
10
16
 
11
17
  各参数均可独立使用,只修改指定的配置项,未指定的保持不变。
@@ -36,33 +42,63 @@ opentoken <tool> [--key <api_key>] [--model <model>] [--header <prefix>] [--url
36
42
 
37
43
  ## 示例
38
44
 
45
+ ### Claude Code
46
+
39
47
  ```bash
40
- # Claude Code - 一键初始化
48
+ # 一键初始化
41
49
  opentoken cc --key sk-xxxxx
42
50
 
43
- # Claude Code - 只改模型
51
+ # 只改模型
44
52
  opentoken cc --model sonnet
45
53
 
46
- # Claude Code - 带前缀
47
- opentoken cc --key sk-xxxxx --model opus --header vor
54
+ # 完整指定
55
+ opentoken cc --key sk-xxxxx --model opus --url https://gw.opentoken.io
56
+ ```
57
+
58
+ ### Codex
48
59
 
49
- # Codex - 一键初始化
60
+ ```bash
61
+ # 一键初始化
50
62
  opentoken cx --key sk-xxxxx --url https://gw.opentoken.io/v1
51
63
 
52
- # Codex - 只改模型
64
+ # 只改模型
53
65
  opentoken cx --model 5.5
54
66
 
55
- # Codex - 完整指定
67
+ # 完整指定
56
68
  opentoken cx --key sk-xxxxx --model gpt-5.5 --url https://gw.opentoken.io/v1
57
69
  ```
58
70
 
71
+ ## 一键配置命令
72
+
73
+ ### OpenToken 网关
74
+
75
+ ```bash
76
+ # Claude Code(注意 cc 的 url 没有 /v1)
77
+ opentoken cc --key <your-api-key> --model opus --url https://gw.opentoken.io
78
+
79
+ # Codex
80
+ opentoken cx --key <your-api-key> --model 5.5 --url https://gw.opentoken.io/v1
81
+ ```
82
+
83
+ ### Omni 网关
84
+
85
+ ```bash
86
+ # Claude Code
87
+ opentoken cc --key <your-api-key> --model opus --url https://omniroute.goio.uk/v1
88
+
89
+ # Codex
90
+ opentoken cx --key <your-api-key> --model 5.5 --url https://omniroute.goio.uk/v1
91
+ ```
92
+
59
93
  ## 写入字段
60
94
 
61
95
  ### Claude Code(`~/.claude/settings.json`)
62
96
 
63
97
  - `ANTHROPIC_AUTH_TOKEN`
64
98
  - `ANTHROPIC_BASE_URL`
65
- - `ANTHROPIC_MODEL`
99
+ - `ANTHROPIC_MODEL`(主模型)
100
+ - `ANTHROPIC_DEFAULT_SONNET_MODEL`(Sonnet 辅助模型)
101
+ - `ANTHROPIC_SMALL_FAST_MODEL`(Haiku 快速小模型)
66
102
  - `API_TIMEOUT_MS`
67
103
  - `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`
68
104
  - `ENABLE_TOOL_SEARCH`
@@ -77,24 +113,4 @@ opentoken cx --key sk-xxxxx --model gpt-5.5 --url https://gw.opentoken.io/v1
77
113
  - `tui.model_availability_nux`
78
114
  - `OPENAI_API_KEY`(写入 auth.json)
79
115
 
80
- 默认 Base URL:`https://gw.opentoken.io/v1`
81
-
82
- ## --header
83
-
84
- 为模型 ID 添加前缀,例如:
85
-
86
- ```bash
87
- opentoken cc --key sk-xxxxx --header vor
88
- # 模型变为 vor/claude-opus-4-8
89
- ```
90
- 一键配置命令示例:
91
- codex和claude code直接配置
92
- opentoken cx --key your api key --model gpt-5.5 --url https://gw.opentoken.io/v1
93
- opentoken cc --key your api key --model claude-opus-4-7 --url https://gw.opentoken.io
94
-
95
- 注意cc 的url没有/v1
96
-
97
- codex和claude code连omni网关配置
98
- opentoken cx --key your api key --model 前缀/gpt-5.5 --url
99
- https://omniroute.goio.uk/v1
100
- opentoken cc --key your api key --model 前缀/claude-opus-4-7 --url https://omniroute.goio.uk/v1
116
+ 默认 Base URL:`https://gw.opentoken.io/v1`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tokenaut/opentoken",
3
- "version": "1.3.0",
3
+ "version": "1.3.3",
4
4
  "description": "OpenToken Claude Code 一键配置 CLI",
5
5
  "main": "src/cli.js",
6
6
  "bin": {
@@ -29,4 +29,4 @@
29
29
  "dependencies": {
30
30
  "@iarna/toml": "^2.2.5"
31
31
  }
32
- }
32
+ }
package/src/cli.js CHANGED
@@ -18,6 +18,9 @@ const CC_MODEL_MAP = {
18
18
  'claude-haiku-4-5': 'claude-haiku-4-5',
19
19
  };
20
20
 
21
+ const CC_SONNET_MODEL = 'claude-sonnet-4-6';
22
+ const CC_HAIKU_MODEL = 'claude-haiku-4-5';
23
+
21
24
  const CX_MODEL_MAP = {
22
25
  '5.5': 'gpt-5.5',
23
26
  '5.4': 'gpt-5.4',
@@ -27,25 +30,17 @@ const CX_MODEL_MAP = {
27
30
  'gpt-5.4': 'gpt-5.4',
28
31
  };
29
32
 
30
- function resolveModel(input, header, modelMap, defaultAlias) {
31
- let modelId;
32
-
33
+ function resolveModel(input, modelMap, defaultAlias) {
33
34
  if (!input) {
34
- modelId = modelMap[defaultAlias];
35
- } else {
36
- const trimmed = String(input).trim().toLowerCase();
37
- if (modelMap[trimmed]) {
38
- modelId = modelMap[trimmed];
39
- } else {
40
- modelId = String(input).trim();
41
- }
35
+ return modelMap[defaultAlias];
42
36
  }
43
37
 
44
- if (header && String(header).trim()) {
45
- return `${String(header).trim()}/${modelId}`;
38
+ const trimmed = String(input).trim().toLowerCase();
39
+ if (modelMap[trimmed]) {
40
+ return modelMap[trimmed];
46
41
  }
47
42
 
48
- return modelId;
43
+ return String(input).trim();
49
44
  }
50
45
 
51
46
  function maskApiKey(key) {
@@ -61,7 +56,7 @@ function printHelp() {
61
56
  console.log('OpenToken 一键配置 CLI');
62
57
  console.log('');
63
58
  console.log('用法:');
64
- console.log(' opentoken <tool> [--key <api_key>] [--model <model>] [--header <prefix>] [--url <base_url>]');
59
+ console.log(' opentoken <tool> [--key <api_key>] [--model <model>] [--url <base_url>]');
65
60
  console.log('');
66
61
  console.log('工具:');
67
62
  console.log(' cc Claude Code 配置(~/.claude/settings.json)');
@@ -79,7 +74,7 @@ function printHelp() {
79
74
  console.log('');
80
75
  console.log('示例:');
81
76
  console.log(' opentoken cc --key sk-xxxxx');
82
- console.log(' opentoken cc --model sonnet --header vor');
77
+ console.log(' opentoken cc --model sonnet');
83
78
  console.log(' opentoken codex --key sk-xxxxx');
84
79
  console.log(' opentoken cx --model 5.5');
85
80
  console.log(' opentoken cx --url https://gw.opentoken.io/v1');
@@ -88,7 +83,6 @@ function printHelp() {
88
83
  console.log(' 各参数均可独立使用,只修改指定的配置项,未指定的保持不变');
89
84
  console.log(` Claude Code 默认 Base URL: ${DEFAULT_BASE_URL}`);
90
85
  console.log(` Codex 默认 Base URL: ${CODEX_DEFAULT_BASE_URL}`);
91
- console.log(' --header 为模型 ID 添加前缀,如 --header vor → vor/claude-opus-4-8');
92
86
  console.log('');
93
87
  }
94
88
 
@@ -98,7 +92,6 @@ function parseArgs(argv) {
98
92
  tool: null,
99
93
  key: null,
100
94
  model: null,
101
- header: null,
102
95
  url: null,
103
96
  help: false,
104
97
  };
@@ -121,9 +114,6 @@ function parseArgs(argv) {
121
114
  } else if ((current === '--model' || current === '-m') && next) {
122
115
  result.model = next;
123
116
  i += 1;
124
- } else if ((current === '--header' || current === '-H') && next) {
125
- result.header = next;
126
- i += 1;
127
117
  } else if ((current === '--url' || current === '-u') && next) {
128
118
  result.url = next;
129
119
  i += 1;
@@ -154,8 +144,10 @@ async function runCc(args) {
154
144
  patch.apiKey = String(args.key).trim();
155
145
  }
156
146
 
157
- if (args.model !== null || args.header !== null) {
158
- patch.model = resolveModel(args.model, args.header, CC_MODEL_MAP, CC_DEFAULT_MODEL_ALIAS);
147
+ if (args.model !== null) {
148
+ patch.model = resolveModel(args.model, CC_MODEL_MAP, CC_DEFAULT_MODEL_ALIAS);
149
+ patch.sonnetModel = resolveModel('sonnet', CC_MODEL_MAP, CC_DEFAULT_MODEL_ALIAS);
150
+ patch.haikuModel = resolveModel('haiku', CC_MODEL_MAP, CC_DEFAULT_MODEL_ALIAS);
159
151
  }
160
152
 
161
153
  if (args.url && String(args.url).trim()) {
@@ -164,7 +156,7 @@ async function runCc(args) {
164
156
 
165
157
  if (Object.keys(patch).length === 0) {
166
158
  console.log('');
167
- console.log('未指定任何配置项,请使用 --key / --model / --header / --url');
159
+ console.log('未指定任何配置项,请使用 --key / --model / --url');
168
160
  console.log('');
169
161
  return;
170
162
  }
@@ -176,6 +168,8 @@ async function runCc(args) {
176
168
  if (patch.apiKey) console.log(` API Key: ${maskApiKey(patch.apiKey)}`);
177
169
  if (patch.baseUrl) console.log(` Base URL: ${patch.baseUrl}`);
178
170
  if (patch.model) console.log(` Model: ${patch.model}`);
171
+ if (patch.sonnetModel) console.log(` Sonnet: ${patch.sonnetModel}`);
172
+ if (patch.haikuModel) console.log(` Haiku: ${patch.haikuModel}`);
179
173
  console.log(` File: ${SETTINGS_PATH}`);
180
174
  console.log('');
181
175
  }
@@ -187,8 +181,8 @@ async function runCodex(args) {
187
181
  patch.apiKey = String(args.key).trim();
188
182
  }
189
183
 
190
- if (args.model !== null || args.header !== null) {
191
- patch.model = resolveModel(args.model, args.header, CX_MODEL_MAP, CX_DEFAULT_MODEL_ALIAS);
184
+ if (args.model !== null) {
185
+ patch.model = resolveModel(args.model, CX_MODEL_MAP, CX_DEFAULT_MODEL_ALIAS);
192
186
  }
193
187
 
194
188
  if (args.url && String(args.url).trim()) {
@@ -197,7 +191,7 @@ async function runCodex(args) {
197
191
 
198
192
  if (Object.keys(patch).length === 0) {
199
193
  console.log('');
200
- console.log('未指定任何配置项,请使用 --key / --model / --header / --url');
194
+ console.log('未指定任何配置项,请使用 --key / --model / --url');
201
195
  console.log('');
202
196
  return;
203
197
  }
package/src/config.js CHANGED
@@ -72,6 +72,14 @@ function applyConfig(patch) {
72
72
  settings.env.ANTHROPIC_MODEL = patch.model;
73
73
  }
74
74
 
75
+ if (patch.sonnetModel !== undefined) {
76
+ settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = patch.sonnetModel;
77
+ }
78
+
79
+ if (patch.haikuModel !== undefined) {
80
+ settings.env.ANTHROPIC_SMALL_FAST_MODEL = patch.haikuModel;
81
+ }
82
+
75
83
  mergeDefaultClaudeAuxEnv(settings.env);
76
84
  writeClaudeSettings(settings);
77
85
  }
@@ -79,4 +87,4 @@ function applyConfig(patch) {
79
87
  module.exports = {
80
88
  SETTINGS_PATH,
81
89
  applyConfig,
82
- };
90
+ };