@xship/cli 0.0.136 → 0.0.138
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.
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"description": "100 万上下文 | 12.8 万输出 | 自适应思考常开 | 长时 Agent 与多步研究",
|
|
22
|
-
"group": "
|
|
22
|
+
"group": "grp_6eg2dq9ywgrg",
|
|
23
23
|
"group_name": "",
|
|
24
24
|
"hidden": false,
|
|
25
25
|
"id": "claude-fable-5-1",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"description": "轻量档 | 低延迟 | 高频短任务",
|
|
31
|
-
"group": "
|
|
31
|
+
"group": "grp_irydsgijuckh",
|
|
32
32
|
"group_name": "",
|
|
33
33
|
"hidden": false,
|
|
34
34
|
"id": "claude-haiku-4-5-20251001",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"description": "100 万上下文 | 12.8 万输出 | 低延迟 | 高频轻量任务",
|
|
40
|
-
"group": "
|
|
40
|
+
"group": "grp_6lyxfgbs440g",
|
|
41
41
|
"group_name": "",
|
|
42
42
|
"hidden": false,
|
|
43
43
|
"id": "claude-haiku-5-5",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"description": "100 万上下文 | 推理 | 编程 | 长上下文不加价",
|
|
49
|
-
"group": "
|
|
49
|
+
"group": "grp_6co8aqwefsoh",
|
|
50
50
|
"group_name": "",
|
|
51
51
|
"hidden": false,
|
|
52
52
|
"id": "claude-opus-4-6",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"description": "100 万上下文 | 12.8 万输出 | 自适应思考五档 | Agent 编程",
|
|
76
|
-
"group": "
|
|
76
|
+
"group": "grp_rld6af0zorqd",
|
|
77
77
|
"group_name": "",
|
|
78
78
|
"hidden": false,
|
|
79
79
|
"id": "claude-opus-5",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"description": "100 万上下文 | 长时 Agent 编程 | 知识工作",
|
|
85
|
-
"group": "
|
|
85
|
+
"group": "grp_irydsgijuckh",
|
|
86
86
|
"group_name": "",
|
|
87
87
|
"hidden": false,
|
|
88
88
|
"id": "claude-opus-5-5",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"description": "100 万上下文 | Agent 编程 | 长上下文不加价",
|
|
94
|
-
"group": "
|
|
94
|
+
"group": "grp_pzxnceygmqlp",
|
|
95
95
|
"group_name": "",
|
|
96
96
|
"hidden": false,
|
|
97
97
|
"id": "claude-sonnet-4-6",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
"description": "100 万上下文 | 12.8 万输出 | Agent 编程 | 知识工作",
|
|
112
|
-
"group": "
|
|
112
|
+
"group": "grp_irydsgijuckh",
|
|
113
113
|
"group_name": "",
|
|
114
114
|
"hidden": false,
|
|
115
115
|
"id": "claude-sonnet-5-5",
|
|
@@ -118,18 +118,9 @@
|
|
|
118
118
|
}
|
|
119
119
|
],
|
|
120
120
|
"codex": [
|
|
121
|
-
{
|
|
122
|
-
"description": "100 万上下文 | 12.8 万输出 | 复杂专业负载",
|
|
123
|
-
"group": "grp_6co8aqwefsoh",
|
|
124
|
-
"group_name": "",
|
|
125
|
-
"hidden": false,
|
|
126
|
-
"id": "gpt-5.5",
|
|
127
|
-
"name": "gpt-5.5",
|
|
128
|
-
"recommended": false
|
|
129
|
-
},
|
|
130
121
|
{
|
|
131
122
|
"description": "105 万上下文 | 12.8 万输出 | 大批量低成本档",
|
|
132
|
-
"group": "
|
|
123
|
+
"group": "grp_irydsgijuckh",
|
|
133
124
|
"group_name": "",
|
|
134
125
|
"hidden": false,
|
|
135
126
|
"id": "gpt-5.6-luna",
|
|
@@ -138,7 +129,7 @@
|
|
|
138
129
|
},
|
|
139
130
|
{
|
|
140
131
|
"description": "105 万上下文 | 12.8 万输出 | 前沿档",
|
|
141
|
-
"group": "
|
|
132
|
+
"group": "grp_irydsgijuckh",
|
|
142
133
|
"group_name": "",
|
|
143
134
|
"hidden": false,
|
|
144
135
|
"id": "gpt-5.6-sol",
|
|
@@ -156,7 +147,7 @@
|
|
|
156
147
|
},
|
|
157
148
|
{
|
|
158
149
|
"description": "105 万上下文 | 12.8 万输出 | 思考强度至 max | 计算机操作 / 编码 / 科学基准接近饱和",
|
|
159
|
-
"group": "
|
|
150
|
+
"group": "grp_irydsgijuckh",
|
|
160
151
|
"group_name": "",
|
|
161
152
|
"hidden": false,
|
|
162
153
|
"id": "gpt-6-astra",
|
|
@@ -174,7 +165,7 @@
|
|
|
174
165
|
},
|
|
175
166
|
{
|
|
176
167
|
"description": "105 万上下文 | 12.8 万输出 | 复杂编程与 Agent 工作流",
|
|
177
|
-
"group": "
|
|
168
|
+
"group": "grp_squ2qzjnehps",
|
|
178
169
|
"group_name": "",
|
|
179
170
|
"hidden": false,
|
|
180
171
|
"id": "gpt-6-sol",
|
|
@@ -183,7 +174,7 @@
|
|
|
183
174
|
},
|
|
184
175
|
{
|
|
185
176
|
"description": "105 万上下文 | 12.8 万输出 | 文字与图像输入 | 工具调用、联网搜索、结构化输出 | 工具调用使用 Responses API",
|
|
186
|
-
"group": "
|
|
177
|
+
"group": "grp_irydsgijuckh",
|
|
187
178
|
"group_name": "",
|
|
188
179
|
"hidden": false,
|
|
189
180
|
"id": "gpt-6.1-sol",
|
|
@@ -239,7 +230,7 @@
|
|
|
239
230
|
},
|
|
240
231
|
{
|
|
241
232
|
"description": "Gemini 3.1 Pro 预览版 | 约 100 万上下文 | 深度推理 | 文本、图像、音视频输入",
|
|
242
|
-
"group": "
|
|
233
|
+
"group": "grp_3pi5kyqkp51b",
|
|
243
234
|
"group_name": "",
|
|
244
235
|
"hidden": false,
|
|
245
236
|
"id": "gemini-3.1-pro-preview",
|
|
@@ -275,7 +266,7 @@
|
|
|
275
266
|
},
|
|
276
267
|
{
|
|
277
268
|
"description": "推理与编码 | HLE-Verified 54.9% | 长文档工作流",
|
|
278
|
-
"group": "
|
|
269
|
+
"group": "grp_3pi5kyqkp51b",
|
|
279
270
|
"group_name": "",
|
|
280
271
|
"hidden": false,
|
|
281
272
|
"id": "gemini-3.8-flash",
|
|
@@ -304,7 +295,7 @@
|
|
|
304
295
|
"grok": [
|
|
305
296
|
{
|
|
306
297
|
"description": "50 万上下文 | 1.5 万亿参数 MoE | 编码与 Agent",
|
|
307
|
-
"group": "
|
|
298
|
+
"group": "grp_irydsgijuckh",
|
|
308
299
|
"group_name": "",
|
|
309
300
|
"hidden": false,
|
|
310
301
|
"id": "grok-4.5",
|
|
@@ -322,7 +313,7 @@
|
|
|
322
313
|
},
|
|
323
314
|
{
|
|
324
315
|
"description": "50 万上下文 | 长时 Agent | 编码与视觉项目",
|
|
325
|
-
"group": "
|
|
316
|
+
"group": "grp_l34dwliv4yas",
|
|
326
317
|
"group_name": "",
|
|
327
318
|
"hidden": false,
|
|
328
319
|
"id": "grok-4.7",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"description": "100 万上下文 | 12.8 万输出 | 自适应思考常开 | 长时 Agent 与多步研究",
|
|
22
|
-
"group": "
|
|
22
|
+
"group": "grp_6eg2dq9ywgrg",
|
|
23
23
|
"group_name": "",
|
|
24
24
|
"hidden": false,
|
|
25
25
|
"id": "claude-fable-5-1",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"description": "轻量档 | 低延迟 | 高频短任务",
|
|
31
|
-
"group": "
|
|
31
|
+
"group": "grp_irydsgijuckh",
|
|
32
32
|
"group_name": "",
|
|
33
33
|
"hidden": false,
|
|
34
34
|
"id": "claude-haiku-4-5-20251001",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"description": "100 万上下文 | 12.8 万输出 | 低延迟 | 高频轻量任务",
|
|
40
|
-
"group": "
|
|
40
|
+
"group": "grp_6lyxfgbs440g",
|
|
41
41
|
"group_name": "",
|
|
42
42
|
"hidden": false,
|
|
43
43
|
"id": "claude-haiku-5-5",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"description": "100 万上下文 | 推理 | 编程 | 长上下文不加价",
|
|
49
|
-
"group": "
|
|
49
|
+
"group": "grp_6co8aqwefsoh",
|
|
50
50
|
"group_name": "",
|
|
51
51
|
"hidden": false,
|
|
52
52
|
"id": "claude-opus-4-6",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"description": "100 万上下文 | 12.8 万输出 | 自适应思考五档 | Agent 编程",
|
|
76
|
-
"group": "
|
|
76
|
+
"group": "grp_rld6af0zorqd",
|
|
77
77
|
"group_name": "",
|
|
78
78
|
"hidden": false,
|
|
79
79
|
"id": "claude-opus-5",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"description": "100 万上下文 | 长时 Agent 编程 | 知识工作",
|
|
85
|
-
"group": "
|
|
85
|
+
"group": "grp_irydsgijuckh",
|
|
86
86
|
"group_name": "",
|
|
87
87
|
"hidden": false,
|
|
88
88
|
"id": "claude-opus-5-5",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"description": "100 万上下文 | Agent 编程 | 长上下文不加价",
|
|
94
|
-
"group": "
|
|
94
|
+
"group": "grp_pzxnceygmqlp",
|
|
95
95
|
"group_name": "",
|
|
96
96
|
"hidden": false,
|
|
97
97
|
"id": "claude-sonnet-4-6",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
"description": "100 万上下文 | 12.8 万输出 | Agent 编程 | 知识工作",
|
|
112
|
-
"group": "
|
|
112
|
+
"group": "grp_irydsgijuckh",
|
|
113
113
|
"group_name": "",
|
|
114
114
|
"hidden": false,
|
|
115
115
|
"id": "claude-sonnet-5-5",
|
|
@@ -118,18 +118,9 @@
|
|
|
118
118
|
}
|
|
119
119
|
],
|
|
120
120
|
"codex": [
|
|
121
|
-
{
|
|
122
|
-
"description": "100 万上下文 | 12.8 万输出 | 复杂专业负载",
|
|
123
|
-
"group": "grp_6co8aqwefsoh",
|
|
124
|
-
"group_name": "",
|
|
125
|
-
"hidden": false,
|
|
126
|
-
"id": "gpt-5.5",
|
|
127
|
-
"name": "gpt-5.5",
|
|
128
|
-
"recommended": false
|
|
129
|
-
},
|
|
130
121
|
{
|
|
131
122
|
"description": "105 万上下文 | 12.8 万输出 | 大批量低成本档",
|
|
132
|
-
"group": "
|
|
123
|
+
"group": "grp_irydsgijuckh",
|
|
133
124
|
"group_name": "",
|
|
134
125
|
"hidden": false,
|
|
135
126
|
"id": "gpt-5.6-luna",
|
|
@@ -138,7 +129,7 @@
|
|
|
138
129
|
},
|
|
139
130
|
{
|
|
140
131
|
"description": "105 万上下文 | 12.8 万输出 | 前沿档",
|
|
141
|
-
"group": "
|
|
132
|
+
"group": "grp_irydsgijuckh",
|
|
142
133
|
"group_name": "",
|
|
143
134
|
"hidden": false,
|
|
144
135
|
"id": "gpt-5.6-sol",
|
|
@@ -156,7 +147,7 @@
|
|
|
156
147
|
},
|
|
157
148
|
{
|
|
158
149
|
"description": "105 万上下文 | 12.8 万输出 | 思考强度至 max | 计算机操作 / 编码 / 科学基准接近饱和",
|
|
159
|
-
"group": "
|
|
150
|
+
"group": "grp_irydsgijuckh",
|
|
160
151
|
"group_name": "",
|
|
161
152
|
"hidden": false,
|
|
162
153
|
"id": "gpt-6-astra",
|
|
@@ -174,7 +165,7 @@
|
|
|
174
165
|
},
|
|
175
166
|
{
|
|
176
167
|
"description": "105 万上下文 | 12.8 万输出 | 复杂编程与 Agent 工作流",
|
|
177
|
-
"group": "
|
|
168
|
+
"group": "grp_squ2qzjnehps",
|
|
178
169
|
"group_name": "",
|
|
179
170
|
"hidden": false,
|
|
180
171
|
"id": "gpt-6-sol",
|
|
@@ -183,7 +174,7 @@
|
|
|
183
174
|
},
|
|
184
175
|
{
|
|
185
176
|
"description": "105 万上下文 | 12.8 万输出 | 文字与图像输入 | 工具调用、联网搜索、结构化输出 | 工具调用使用 Responses API",
|
|
186
|
-
"group": "
|
|
177
|
+
"group": "grp_irydsgijuckh",
|
|
187
178
|
"group_name": "",
|
|
188
179
|
"hidden": false,
|
|
189
180
|
"id": "gpt-6.1-sol",
|
|
@@ -239,7 +230,7 @@
|
|
|
239
230
|
},
|
|
240
231
|
{
|
|
241
232
|
"description": "Gemini 3.1 Pro 预览版 | 约 100 万上下文 | 深度推理 | 文本、图像、音视频输入",
|
|
242
|
-
"group": "
|
|
233
|
+
"group": "grp_3pi5kyqkp51b",
|
|
243
234
|
"group_name": "",
|
|
244
235
|
"hidden": false,
|
|
245
236
|
"id": "gemini-3.1-pro-preview",
|
|
@@ -275,7 +266,7 @@
|
|
|
275
266
|
},
|
|
276
267
|
{
|
|
277
268
|
"description": "推理与编码 | HLE-Verified 54.9% | 长文档工作流",
|
|
278
|
-
"group": "
|
|
269
|
+
"group": "grp_3pi5kyqkp51b",
|
|
279
270
|
"group_name": "",
|
|
280
271
|
"hidden": false,
|
|
281
272
|
"id": "gemini-3.8-flash",
|
|
@@ -304,7 +295,7 @@
|
|
|
304
295
|
"grok": [
|
|
305
296
|
{
|
|
306
297
|
"description": "50 万上下文 | 1.5 万亿参数 MoE | 编码与 Agent",
|
|
307
|
-
"group": "
|
|
298
|
+
"group": "grp_irydsgijuckh",
|
|
308
299
|
"group_name": "",
|
|
309
300
|
"hidden": false,
|
|
310
301
|
"id": "grok-4.5",
|
|
@@ -322,7 +313,7 @@
|
|
|
322
313
|
},
|
|
323
314
|
{
|
|
324
315
|
"description": "50 万上下文 | 长时 Agent | 编码与视觉项目",
|
|
325
|
-
"group": "
|
|
316
|
+
"group": "grp_l34dwliv4yas",
|
|
326
317
|
"group_name": "",
|
|
327
318
|
"hidden": false,
|
|
328
319
|
"id": "grok-4.7",
|
package/dist/lib/auto-update.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{chmodSync as e,existsSync as t,mkdirSync as r,readFileSync as n,renameSync as o,writeFileSync as s}from"fs";import{homedir as a}from"os";import{dirname as l,join as i,sep as u}from"path";import{spawnSync as c}from"child_process";import p from"chalk";import{checkForUpdate as d,
|
|
1
|
+
import{chmodSync as e,existsSync as t,mkdirSync as r,readFileSync as n,renameSync as o,writeFileSync as s}from"fs";import{homedir as a}from"os";import{dirname as l,join as i,sep as u}from"path";import{spawnSync as c}from"child_process";import p from"chalk";import{checkForUpdate as d,readLocalPackage as m,UPDATE_SOURCES as f}from"../commands/update.js";import{i18n as _}from"./i18n.js";import{isColorEnabled as h}from"./runtime-options.js";import{logger as g}from"../utils/logger.js";import{isHelpRequest as x}from"./cli-help.js";import{brand as v,brandEnvName as y}from"./brand.js";export const INSTALL_RETRY_INTERVAL_MS=36e5;export const INSTALL_TIMEOUT_MS=45e3;function k(e,t){return h()?e(t):t}export function resolveUpdateCachePath(e=process.env){const t=e[y("CONFIG_DIR")]?.trim();if(t)return i(t,"update-state.json");const r=e[y("TEST_HOME")]?.trim();return i(r||a(),v().configDirName,"update-state.json")}export function isGlobalPackageInstall(e){return e.split(u).includes("node_modules")}export function isNpxExecution(e=process.env){return"exec"===e.npm_command||"npx"===e.npm_lifecycle_event}export function isPnpmGlobalInstall(e){return e.includes(`${u}.pnpm${u}`)||e.includes(`${u}pnpm${u}global${u}`)}export function resolveNpmGlobalPrefix(e){const t=`${u}node_modules${u}`,r=e.indexOf(t);if(r<0)return null;const n=e.slice(0,r);return n.endsWith(`${u}lib`)?l(n):n}export function shouldSkipStartupUpdate(e,t=process.env){return"1"===t[y("SKIP_AUTO_UPDATE")]||"1"===t[y("DISABLE_AUTO_UPDATE")]||(!(!["--json","--non-interactive","--dry-run","--help","-h","--version","-v"].some(t=>e.includes(t))&&!x(e))||e.includes("update")||e.includes("completion"))}function S(t,n,a,i,u){try{r(l(t),{recursive:!0,mode:448});const c=`${t}.tmp-${process.pid}`,p={package_name:n,checked_at:a,latest:i.latest,source:i.source,registry:i.registry,errors:i.errors,...void 0===u?{}:{install_attempted_at:u,install_attempted_version:i.latest||void 0}};s(c,JSON.stringify(p),{encoding:"utf-8",mode:384}),o(c,t),e(t,384)}catch(e){g.warn("Failed to persist update check cache:",e)}}export function windowsShellCommand(e,t){return[e,...t.map(e=>`"${e}"`)].join(" ")}const $=(e,t)=>{const r={stdio:"inherit",timeout:45e3,killSignal:"SIGTERM"};return"win32"===process.platform?c(windowsShellCommand(e,t),{...r,shell:!0}):c(e,t,r)},P=(e,t)=>c(process.execPath,[process.argv[1],...e],{stdio:"inherit",env:t});export async function runStartupUpdate(e,r={}){const o=r.env||process.env,s=r.localPackage||m(),a=r.globalInstall??isGlobalPackageInstall(s.root),l=r.npx??isNpxExecution(o);if(!a||l||shouldSkipStartupUpdate(e,o))return{status:"skipped",handled:!1,source:null};const i=r.now??Date.now(),u=r.cachePath||resolveUpdateCachePath(o),c=function(e,r){try{if(!t(e))return null;const o=JSON.parse(n(e,"utf-8"));return o.package_name===r.name&&Number.isFinite(o.checked_at)?o:null}catch{return null}}(u,s);let h=function(e,t,r){if(!e||e.latest||r-e.checked_at>=6e5)return null;const n=Array.isArray(e.errors)?e.errors:[];return{current:t.version,latest:null,up_to_date:null,source:e.source,registry:e.registry,errors:n,error:n.map(e=>`${e.source}: ${e.error}`).join("; ")||"unknown"}}(c,s,i),g=null;if(h||(h=await d({localPackage:s,fetchFn:r.fetchFn}),h.latest&&c?.install_attempted_version===h.latest&&Number.isFinite(c.install_attempted_at)&&(g=c.install_attempted_at),S(u,s.name,i,h,g??void 0)),!h.latest)return{status:"unavailable",handled:!1,source:null};if(h.up_to_date)return{status:"current",handled:!1,source:h.source};if(null!==g&&i-g<36e5)return{status:"update_failed",handled:!1,source:h.source};const x=r.output||console.log,v=r.errorOutput||console.error,b=r.installRunner||$,w=isPnpmGlobalInstall(s.root),I=w?"win32"===process.platform?"pnpm.cmd":"pnpm":"win32"===process.platform?"npm.cmd":"npm",T=w?null:resolveNpmGlobalPrefix(s.root);x(k(p.cyan,_.t("update.auto_installing",{version:h.latest})));let N=null,A="unknown";for(const e of f.map(e=>e.registry)){const t=b(I,w?["add","--global",`${s.name}@${h.latest}`,"--registry",e]:["install","--global",...T?["--prefix",T]:[],`${s.name}@${h.latest}`,"--registry",e,"--no-audit","--no-fund","--fetch-timeout=15000","--fetch-retries=1","--fetch-retry-mintimeout=1000","--fetch-retry-maxtimeout=3000"]);if(0===t.status){N=e;break}A=t.error?.message||`exit ${t.status??"unknown"}`}if(!N)return S(u,s.name,i,h,i),v(k(p.yellow,_.t("update.auto_failed",{error:A}))),{status:"update_failed",handled:!1,source:h.source};x(k(p.green,_.t("update.auto_installed",{version:h.latest})));const E=(r.reexecRunner||P)(e,{...o,[y("SKIP_AUTO_UPDATE")]:"1"});return E.error?(v(k(p.yellow,_.t("update.reexec_failed",{error:E.error.message}))),{status:"update_failed",handled:!1,source:h.source}):(process.exitCode=E.status??1,{status:"reexecuted",handled:!0,source:h.source})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{spawnSync as t}from"child_process";import{existsSync as o,mkdtempSync as e,readFileSync as n,realpathSync as
|
|
1
|
+
import{spawnSync as t}from"child_process";import{existsSync as o,mkdtempSync as e,readFileSync as n,realpathSync as i,rmSync as r,statSync as s,writeFileSync as c}from"fs";import{tmpdir as l}from"os";import{delimiter as u,dirname as a,isAbsolute as d,join as p}from"path";import*as f from"@iarna/toml";import{fileURLToPath as m}from"url";import{logger as _}from"../../utils/logger.js";import{getCodexRules as x,compareVersions as g}from"../model-registry.js";import{autoCompactTokens as h,modelBlurb as w,prettyModelName as y}from"../gateway-models.js";import{codexHome as b,toolHome as v}from"./types.js";import{brandEnv as C,CLI_NAME as M,PROVIDER_KEY as j}from"../brand.js";const A=a(m(import.meta.url));export const CODEX_CATALOG_FILE=`${j}-model-catalog.json`;export const codexCatalogPath=()=>p(b(),CODEX_CATALOG_FILE);function O(){const t=C("CODEX_BIN");if(void 0!==t)return t.trim()?[t.trim()]:[];const o=["codex"];if("win32"===process.platform){const t=process.env.LOCALAPPDATA||p(v(),"AppData","Local");o.push(p(t,"Programs","OpenAI","Codex","bin","codex.exe"))}else o.push(p(v(),".local","bin","codex"));if("darwin"===process.platform)for(const t of["/Applications",p(v(),"Applications")])o.push(p(t,"ChatGPT.app/Contents/Resources/codex-cli/bin/codex")),o.push(p(t,"Codex.app/Contents/Resources/codex"));return o}function E(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function $(t){try{const o=JSON.parse(t),e=E(o)&&Array.isArray(o.models)?o.models.filter(E):[];return e.length>0?e:null}catch{return null}}function k(o,e,n){const i={encoding:"utf-8",timeout:2e4,maxBuffer:67108864,windowsHide:!0,stdio:["ignore","pipe","pipe"],...n?{env:n}:{}};return"win32"!==process.platform||"codex"!==o&&!/\.cmd$/i.test(o)?t(o,e,i):t(["codex"===o?"codex":`"${o}"`,...e].join(" "),{...i,shell:!0})}function P(t){const o=k(t,["debug","models","--bundled"]);if(0===o.status&&o.stdout){const t=$(o.stdout);if(t)return t}return(o.error||0!==o.status)&&_.logError("loadBundledCodexModels",o.error??new Error(`${t} exited ${o.status}`)),null}export function loadBundledCodexModels(t){if(t)return P(t);for(const t of O()){if("codex"!==t&&!o(t))continue;const e=P(t);if(e)return e}return null}function B(t){try{return s(t).isFile()}catch{return!1}}export function installedCodexBinaries(){const t=[],o=O();if(o.includes("codex")){const o="win32"===process.platform?["codex.exe","codex.cmd"]:["codex"];for(const e of(process.env.PATH??"").split(u))if(e&&d(e))for(const n of o)t.push(p(e,n))}t.push(...o.filter(t=>"codex"!==t));const e=new Set,n=[];for(const o of t){if(!B(o))continue;let t=o;try{t=i(o)}catch{}const r="win32"===process.platform?t.toLowerCase():t;e.has(r)||(e.add(r),n.push(o))}return n}export function codexBinaryVersion(t){const o=`${k(t,["--version"]).stdout??""}`.match(/(\d+)\.(\d+)\.(\d+)/);return o?o[0]:null}export function catalogRejections(t,o=installedCodexBinaries()){if(0===o.length)return[];const n=e(p(l(),`${M}-codex-`)),i=[];try{c(p(n,"config.toml"),f.stringify({model_catalog_json:t}));for(const t of o){const o=k(t,["debug","models"],{...process.env,CODEX_HOME:n});if(0===o.status)continue;const e=`${o.stderr??""}\n${o.stdout??""}`,r=e.split(/\r?\n/).find(t=>t.includes("model_catalog_json"));r?i.push({bin:t,version:codexBinaryVersion(t),error:r.trim()}):_.logError("catalogRejections",o.error??new Error(`${t} exited ${o.status}: ${e.trim().slice(0,500)}`))}}finally{r(n,{recursive:!0,force:!0})}return i}export function loadPreviousCodexModels(){const t=L()?.filter(t=>!S(t));return t&&t.length>0?t:null}export function previousGatewayModelIds(){return(L()??[]).filter(S).map(t=>String(t.slug))}function L(){return o(codexCatalogPath())?$(n(codexCatalogPath(),"utf-8")):null}function S(t){return"number"==typeof t.priority&&t.priority>=1e3}let T=null;function W(){if(null!==T)return T;const t=[p(A,"..","..","..","codex-base-instructions.md"),p(A,"..","..","codex-base-instructions.md"),p(A,"codex-base-instructions.md")],e=t.find(t=>o(t));if(!e)throw new Error(`codex-base-instructions.md not found, searched: ${t.join(", ")}`);return T=n(e,"utf-8"),T}function D(t){return"number"==typeof t&&Number.isFinite(t)&&t>0?t:void 0}function F(t,o,e,n){const i=e?t:Math.min(t,o);return{window:i,compact:h(i,n)}}function I(t,o,e,n){const{standardContextWindow:i}=x();let r=D(t.contextWindow)??i;n&&t.id.startsWith("claude-")&&(r=n.has(t.id)?Math.max(r,1e6):Math.min(r,2e5));const{window:s,compact:c}=F(r,i,e,D(t.autoCompactTokens));return{slug:t.id,display_name:t.name||y(t.id),description:w(t.description,{millionContext:s>=1e6})??null,supported_reasoning_levels:[],shell_type:"unified_exec",visibility:"list",supported_in_api:!0,priority:o,additional_speed_tiers:[],service_tiers:[],availability_nux:null,upgrade:null,model_messages:{instructions_template:W()},base_instructions:W(),supports_reasoning_summaries:!0,supports_parallel_tool_calls:!1,prefer_websockets:!1,include_skills_usage_instructions:!1,include_plugin_usage_instructions:!1,include_apps_usage_instructions:!1,default_reasoning_summary:"auto",support_verbosity:!1,default_verbosity:null,apply_patch_tool_type:null,web_search_tool_type:"text",truncation_policy:{mode:"bytes",limit:1e4},supports_image_detail_original:!1,context_window:s,max_context_window:s,auto_compact_token_limit:c,effective_context_window_percent:95,experimental_supported_tools:[],input_modalities:["text","image"],supports_search_tool:!1,supports_experimental_context:!1,use_responses_lite:!1,supports_reasoning_effort_updates:!1,node_repl_auto_review_required:!1,node_repl_disabled:!1}}const G={supports_parallel_tool_calls:!0,supports_reasoning_summaries:!0};export function fillFromOlderEntries(t,o){const e=new Map(o.map(t=>[t.slug,t])),n=new Map;for(const t of o)for(const[o,e]of Object.entries(t))n.has(o)||n.set(o,e);return t.map(t=>{const o=e.get(t.slug),i={...t};for(const[t,e]of n)t in i||(i[t]=o&&t in o?o[t]:e);return i})}function R(t,o,e){if("list"!==(t=function(t){const o=Object.keys(G).filter(o=>!(o in t));return 0===o.length?t:{...t,...Object.fromEntries(o.map(t=>[t,G[t]]))}}(t)).visibility)return t;const n=D(t.context_window);if(!n)return t;const i=D(t.max_context_window)??n,r=e?Math.min(D(o?.contextWindow)??i,i):n,{window:s,compact:c}=F(r,n,!0,D(o?.autoCompactTokens));return{...t,context_window:s,auto_compact_token_limit:c}}function X(t,o){if(!t.startsWith("gpt-"))return;let e,n=4;for(const i of o){const o="string"==typeof i.slug?i.slug:"";if(!o.startsWith("gpt-")||"list"!==i.visibility)continue;let r=0;for(;r<o.length&&o[r]===t[r];)r++;r>n&&(e=i,n=r)}return e}function H(t,o,e,n){return R({...t,...Object.fromEntries(["slug","display_name","description","priority"].map(t=>[t,o[t]])),upgrade:null,availability_nux:null},e,n)}export function buildCodexCatalog(t){const{bundled:o,specs:e,oneMillion:n,selectedModel:i}=t,r=t.claudeOneMillion?new Set(t.claudeOneMillion):void 0,s=t.keyModels?new Set(t.keyModels):null,c=new Set(t.gatewayAvailable),l=t=>!s||s.has(t)||t===i,u=t=>c.has(t)||t===i,a=new Map(e.map(t=>[t.id,t])),d=[],p=new Set;for(const t of o){const o="string"==typeof t.slug?t.slug:"";o&&!p.has(o)&&("list"!==t.visibility||l(o))&&(p.add(o),d.push(R(t,a.get(o),n)))}const f=[...e];i&&!a.has(i)&&f.push({id:i});const m=function(t){const o=new Map;for(const e of t){const t=/^claude-([a-z]+)-(.+)$/.exec(e);if(!t)continue;const n=t[2].split("-").filter(t=>/^\d{1,2}$/.test(t)).join("."),i=o.get(t[1]);(!i||g(n,i.version)>0)&&o.set(t[1],{id:e,version:n})}return new Set([...o.values()].map(t=>t.id))}(f.map(t=>t.id).filter(u));for(const t of f){if(p.has(t.id)||!u(t.id))continue;if(t.id.startsWith("claude-")&&!m.has(t.id)&&t.id!==i)continue;p.add(t.id);const e=I(t,1e3+d.length,n,r),s=X(t.id,o);d.push(s?H(s,e,t,n):e)}return{models:d}}
|
package/dist/locales/en_US.json
CHANGED
|
@@ -874,7 +874,7 @@
|
|
|
874
874
|
},
|
|
875
875
|
"update": {
|
|
876
876
|
"summary": "Check for a newer {{product}}",
|
|
877
|
-
"description": "Checks {{updateSources}} in turn and prints the install command when a newer version exists.\nA global install also checks at
|
|
877
|
+
"description": "Checks {{updateSources}} in turn and prints the install command when a newer version exists.\nA global install also checks at every start and, when there is a newer version, installs it and reruns the command.",
|
|
878
878
|
"ex": {
|
|
879
879
|
"check": "Check for a new version",
|
|
880
880
|
"json": "Print JSON"
|
package/dist/locales/zh_CN.json
CHANGED
|
@@ -874,7 +874,7 @@
|
|
|
874
874
|
},
|
|
875
875
|
"update": {
|
|
876
876
|
"summary": "检查 {{product}} 是否有新版本",
|
|
877
|
-
"description": "依次查询这些来源:{{updateSources}}。有新版本时给出安装命令。\n全局安装的 {{product}}
|
|
877
|
+
"description": "依次查询这些来源:{{updateSources}}。有新版本时给出安装命令。\n全局安装的 {{product}} 每次启动时也会检查,有新版本时自动安装并重新运行当前命令。",
|
|
878
878
|
"ex": {
|
|
879
879
|
"check": "检查新版本",
|
|
880
880
|
"json": "输出 JSON"
|