@numa-tech/numa 1.12.3 → 1.12.5

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
@@ -83,14 +83,17 @@ macOS / Windows 日常启动 Codex 的推荐方式:
83
83
 
84
84
  ```bash
85
85
  npx -y --prefer-online --registry=https://registry.npmjs.org/ @numa-tech/numa@latest codex shortcut install
86
+ numa --version
87
+ numa codex list
86
88
  numa-codex
87
89
  numa-codex-app
88
90
  ```
89
91
 
90
92
  面向业务同事的图文说明见 [`docs/chatgpt-cli-guide.html`](docs/chatgpt-cli-guide.html),其中分别介绍
91
- CLI 与桌面版的适用场景、一次安装两个入口、首次登录和常见问题排查。
93
+ CLI 与桌面版的适用场景、一次安装自动更新的 `numa` 命令与两个 Codex 入口、首次登录和常见问题排查。
92
94
 
93
- 需要直接使用完整 `numa` 管理命令时,可选全局安装:
95
+ 上述安装器生成的 `numa` 是托管 launcher,完整管理命令也会自动解析 `@latest`。需要在 CI、离线环境
96
+ 或其他可复现流程中固定版本时,才建议使用全局或精确版本安装:
94
97
 
95
98
  ```bash
96
99
  npm install --global --registry=https://registry.npmjs.org/ @numa-tech/numa
@@ -184,7 +187,7 @@ numa config \
184
187
  | `numa codex run` | 需登录 | 使用所选账号启动官方 Codex CLI |
185
188
  | `numa codex app` | 需登录 | 使用官方 ChatGPT 登录启动桌面 App |
186
189
  | `numa codex shortcut` | 公开 | 安装或删除 macOS/Windows 快捷命令与桌面入口 |
187
- | `numa codex status` | 公开 | 查看本地选择和官方登录状态 |
190
+ | `numa codex status` | 公开 | 查看本地选择、官方登录状态和 ChatGPT Desktop 版本 |
188
191
  | `numa codex reset` | 公开 | 重置本地选择和登录并清理旧 provider 残留 |
189
192
  | `numa serve` | 公开 | 启动兼容 MCP 服务 |
190
193
 
@@ -509,12 +512,15 @@ ChatGPT 个人账号;无需把本地登录文件或令牌附在工单中。
509
512
  ### macOS / Windows 快捷入口
510
513
 
511
514
  日常使用优先安装快捷入口,无需全局安装 `@numa-tech/numa`。安装命令显式解析
512
- `@numa-tech/numa@latest`,生成的快捷入口也会在每次启动时使用 `--prefer-online`
515
+ `@numa-tech/numa@latest`,生成的通用 `numa` launcher 与 Codex 快捷入口也会在每次启动时使用 `--prefer-online`
513
516
  检查 npm 仓库中的最新客户端版本:
514
517
 
515
518
  ```bash
516
519
  npx -y --prefer-online --registry=https://registry.npmjs.org/ @numa-tech/numa@latest codex shortcut install
517
520
 
521
+ # 完整 Numa 管理命令同样自动使用 latest
522
+ numa codex list
523
+
518
524
  # 日常首选;首次运行会自动完成公司登录和账号选择
519
525
  numa-codex
520
526
 
@@ -528,12 +534,14 @@ numa-codex-app
528
534
  `--prefer-online` 会在启动时强制检查仓库元数据,`@latest` 避免复用项目内可能存在的旧版
529
535
  `@numa-tech/numa`;已经缓存的相同版本仍由 npm 复用。自动更新要求配置的 npm registry 可访问,
530
536
  并以仓库 `latest` dist-tag 指向的版本为准。已安装旧版快捷入口的用户重新执行一次上述安装
531
- 命令,即可升级为自动检查最新版的包装脚本。快捷入口默认从公共 npm 获取 Numa CLI;
537
+ 命令,即可升级为自动检查最新版的包装脚本。若 `numa` 是指向同一 `@numa-tech/numa` 包的旧 npm
538
+ symlink,安装器会先核验包名与 `bin` 入口,再将其迁移为托管 launcher;卸载快捷入口时会在原包仍
539
+ 存在的前提下恢复该 symlink。快捷入口默认从公共 npm 获取 Numa CLI;
532
540
  启动 Codex 时仍按 `NUMA_CODEX_BIN`、PATH 中可用版本、包内版本的顺序选择。
533
541
 
534
- 默认安装 `run` 和 `app` 两种入口。macOS 默认的 `--scope auto` 会先使用可写的
542
+ 默认安装通用 `numa` launcher,以及 `run` 和 `app` 两种 Codex 入口。macOS 默认的 `--scope auto` 会先使用可写的
535
543
  `/usr/local/bin` 与 `/Applications`;没有系统级权限时自动降级到
536
- `~/.local/bin/numa-codex*` 与 `~/Applications/Numa Codex.app`,全程不会
544
+ `~/.local/bin/numa`、`~/.local/bin/numa-codex*` 与 `~/Applications/Numa Codex.app`,全程不会
537
545
  调用 `sudo`。可用 `--scope system` 或 `--scope user` 显式指定。Windows 写入用户 npm 命令目录,并在开始菜单
538
546
  创建 `Numa Codex`。macOS App Bundle 使用 ChatGPT macOS 应用内置图标,Windows 开始菜单
539
547
  入口使用由同一图标转换的 Windows 图标;来源和商标说明见 `THIRD_PARTY_NOTICES.md`。桌面入口默认绑定安装命令
@@ -546,7 +554,8 @@ npx -y --prefer-online --registry=https://registry.npmjs.org/ @numa-tech/numa@la
546
554
  ```
547
555
 
548
556
  安装是幂等的,并拒绝覆盖同名的用户文件;确需替换时使用 `--force`。删除只处理安装清单中
549
- 由 numa 管理的入口:
557
+ 由 numa 管理的入口。明确要保留现有全局 `numa` 时,可在安装或删除命令中使用
558
+ `--no-cli-wrapper`:
550
559
 
551
560
  ```bash
552
561
  npx -y --prefer-online --registry=https://registry.npmjs.org/ @numa-tech/numa@latest codex shortcut remove
@@ -580,6 +589,10 @@ Codex 的主机不会受包内平台可选依赖缺失影响;外部版本不
580
589
 
581
590
  ### Codex 桌面 App
582
591
 
592
+ > **版本提醒:请勿主动升级 ChatGPT Desktop,也不要点击“检查更新”。** 如果应用弹出更新提示,
593
+ > 请选择“稍后”或“取消”,并继续通过 `Numa Codex`、`numa-codex-app` 或 `numa codex app`
594
+ > 启动,由 Numa 检查并使用公司批准版本。
595
+
583
596
  官方 Codex CLI、IDE 扩展和桌面 App 共享 `~/.codex/auth.json`。macOS/Windows 可直接运行:
584
597
 
585
598
  ```bash
@@ -593,9 +606,24 @@ numa codex app . \
593
606
  2. 从服务端领取不含 refresh token 的官方登录凭据;
594
607
  3. 原子更新 ChatGPT 模式 `auth.json`;
595
608
  4. 清理项目更名前旧版 `mcex-codex` provider 残留;
596
- 5. 直接启动官方 `codex app`。
597
-
598
- 如果桌面 App 已经运行,需要完全退出后重新打开。`numa codex status` 可检查所选账号是否与官方登录文件匹配。
609
+ 5. Apple Silicon macOS 读取 `ChatGPT.app/Contents/Info.plist`;检测到 2026 年 8 月批次
610
+ (`26.8` / `26.8xx`)或更高版本时,自动回退到批准版本 `26.730.61639 (6234)`;
611
+ 6. 直接启动官方 `codex app`。
612
+
613
+ 回退包固定从
614
+ `https://mci-maint.oss-cn-shenzhen.aliyuncs.com/apps/chatgpt-26-730-61639.zip`
615
+ 下载并缓存到用户缓存目录。客户端会先核验大小、固定 SHA-256、Bundle ID、目标版本以及
616
+ OpenAI Developer ID 签名,再停止正在运行的 ChatGPT,以同卷临时目录完成原子替换。下载、
617
+ 解压或安装后校验失败时保留或恢复原 App;目标版本及更早的 2026 年 7 月批次不会下载或改动。
618
+ 批准包 SHA-256 为
619
+ `da88c8a15eab1ddc8efdf50182d4aca7468d995193d952c344a4d10d38c45871`。
620
+ `NUMA_CHATGPT_APP_PATH` 可显式指定受管 App 路径。
621
+ 该守卫不会修改 ChatGPT 自带更新策略,而是在每次通过 Numa 启动桌面版时重新检查;需要长期
622
+ 禁止应用内更新时,应由组织管理员通过 ChatGPT Managed configuration/MDM 下发更新策略。
623
+
624
+ 如果桌面 App 已经运行,需要完全退出后重新打开。`numa codex status` 可同时检查所选账号、
625
+ 官方登录文件和本机 ChatGPT Desktop 版本。该回退属于企业批准版本部署;旧版本不获得单独的
626
+ 安全补丁,发布负责人应持续评估兼容性并及时更新批准版本。
599
627
 
600
628
  ### 前台官方登录同步
601
629
 
@@ -0,0 +1,38 @@
1
+ import type { CodexDesktopAppStatus } from "@tokensrc/codex";
2
+ export declare const MANAGED_CHATGPT_VERSION = "26.730.61639";
3
+ export declare const MANAGED_CHATGPT_BUILD = "6234";
4
+ export declare const CHATGPT_ROLLBACK_THRESHOLD = "26.8";
5
+ export declare const CHATGPT_DESKTOP_UPDATE_REMINDER = "\u3010\u7248\u672C\u63D0\u9192\u3011\u8BF7\u52FF\u4E3B\u52A8\u5347\u7EA7 ChatGPT Desktop\uFF0C\u4E5F\u4E0D\u8981\u70B9\u51FB\u201C\u68C0\u67E5\u66F4\u65B0\u201D\uFF1B\u5982\u51FA\u73B0\u66F4\u65B0\u63D0\u793A\uFF0C\u8BF7\u9009\u62E9\u201C\u7A0D\u540E\u201D\u6216\u201C\u53D6\u6D88\u201D\uFF0C\u5E76\u7EE7\u7EED\u901A\u8FC7 Numa \u542F\u52A8\u3002";
6
+ export declare const MANAGED_CHATGPT_DOWNLOAD_URL = "https://mci-maint.oss-cn-shenzhen.aliyuncs.com/apps/chatgpt-26-730-61639.zip";
7
+ export declare const MANAGED_CHATGPT_ARCHIVE_BYTES = 568041035;
8
+ export declare const MANAGED_CHATGPT_ARCHIVE_SHA256 = "da88c8a15eab1ddc8efdf50182d4aca7468d995193d952c344a4d10d38c45871";
9
+ interface BundleMetadata {
10
+ bundleId: string;
11
+ version: string;
12
+ build: string;
13
+ }
14
+ export interface ChatGptDesktopDependencies {
15
+ platform?: NodeJS.Platform;
16
+ architecture?: string;
17
+ homeDirectory?: string;
18
+ env?: NodeJS.ProcessEnv;
19
+ appPaths?: string[];
20
+ cacheDirectory?: string;
21
+ fetch?: typeof fetch;
22
+ output?: NodeJS.WritableStream;
23
+ readMetadata?: (appPath: string) => Promise<BundleMetadata>;
24
+ obtainArchive?: () => Promise<string>;
25
+ extractArchive?: (archivePath: string, destination: string) => Promise<string>;
26
+ verifySignature?: (appPath: string) => Promise<void>;
27
+ stopApp?: () => Promise<void>;
28
+ }
29
+ export interface ChatGptDesktopPreparation {
30
+ action: "not-supported" | "not-installed" | "not-required" | "reinstalled";
31
+ before: CodexDesktopAppStatus;
32
+ after?: CodexDesktopAppStatus;
33
+ }
34
+ /** ChatGPT release versions use YY.MDD.build; `26.8` means the start of August 2026. */
35
+ export declare function requiresChatGptRollback(version: string): boolean;
36
+ export declare function inspectChatGptDesktop(dependencies?: ChatGptDesktopDependencies): Promise<CodexDesktopAppStatus>;
37
+ export declare function ensureManagedChatGptDesktop(dependencies?: ChatGptDesktopDependencies): Promise<ChatGptDesktopPreparation>;
38
+ export {};
@@ -0,0 +1,356 @@
1
+ import { execFile as execFileCallback } from "node:child_process";
2
+ import { createHash, randomUUID } from "node:crypto";
3
+ import { createReadStream, constants } from "node:fs";
4
+ import { access, lstat, mkdir, mkdtemp, open, rename, rm } from "node:fs/promises";
5
+ import { homedir } from "node:os";
6
+ import { dirname, join, resolve } from "node:path";
7
+ import { promisify } from "node:util";
8
+ export const MANAGED_CHATGPT_VERSION = "26.730.61639";
9
+ export const MANAGED_CHATGPT_BUILD = "6234";
10
+ export const CHATGPT_ROLLBACK_THRESHOLD = "26.8";
11
+ export const CHATGPT_DESKTOP_UPDATE_REMINDER = "【版本提醒】请勿主动升级 ChatGPT Desktop,也不要点击“检查更新”;如出现更新提示,请选择“稍后”或“取消”,并继续通过 Numa 启动。";
12
+ export const MANAGED_CHATGPT_DOWNLOAD_URL = "https://mci-maint.oss-cn-shenzhen.aliyuncs.com/apps/chatgpt-26-730-61639.zip";
13
+ export const MANAGED_CHATGPT_ARCHIVE_BYTES = 568_041_035;
14
+ export const MANAGED_CHATGPT_ARCHIVE_SHA256 = "da88c8a15eab1ddc8efdf50182d4aca7468d995193d952c344a4d10d38c45871";
15
+ const CHATGPT_BUNDLE_ID = "com.openai.codex";
16
+ const OPENAI_TEAM_ID = "2DC432GLL2";
17
+ const MAX_DOWNLOAD_BYTES = 650 * 1024 * 1024;
18
+ const execFile = promisify(execFileCallback);
19
+ function appCandidates(dependencies) {
20
+ if (dependencies.appPaths)
21
+ return dependencies.appPaths;
22
+ const env = dependencies.env ?? process.env;
23
+ const home = dependencies.homeDirectory ?? homedir();
24
+ if (env.NUMA_CHATGPT_APP_PATH?.trim()) {
25
+ return [resolve(env.NUMA_CHATGPT_APP_PATH.trim())];
26
+ }
27
+ return [
28
+ join(home, "Applications", "ChatGPT.app"),
29
+ "/Applications/ChatGPT.app"
30
+ ];
31
+ }
32
+ async function runCommand(command, args) {
33
+ const result = await execFile(command, args, {
34
+ encoding: "utf8",
35
+ maxBuffer: 4 * 1024 * 1024,
36
+ windowsHide: true
37
+ });
38
+ return {
39
+ stdout: result.stdout,
40
+ stderr: result.stderr
41
+ };
42
+ }
43
+ async function plistValue(appPath, key) {
44
+ const { stdout } = await runCommand("/usr/bin/plutil", [
45
+ "-extract",
46
+ key,
47
+ "raw",
48
+ "-o",
49
+ "-",
50
+ join(appPath, "Contents", "Info.plist")
51
+ ]);
52
+ return stdout.trim();
53
+ }
54
+ async function defaultReadMetadata(appPath) {
55
+ const [bundleId, version, build] = await Promise.all([
56
+ plistValue(appPath, "CFBundleIdentifier"),
57
+ plistValue(appPath, "CFBundleShortVersionString"),
58
+ plistValue(appPath, "CFBundleVersion")
59
+ ]);
60
+ return { bundleId, version, build };
61
+ }
62
+ function numericVersionParts(version) {
63
+ const parts = version.trim().split(".");
64
+ return parts.length >= 2 && parts.every((part) => /^\d+$/u.test(part))
65
+ ? parts
66
+ : undefined;
67
+ }
68
+ /** ChatGPT release versions use YY.MDD.build; `26.8` means the start of August 2026. */
69
+ export function requiresChatGptRollback(version) {
70
+ const parts = numericVersionParts(version);
71
+ const threshold = numericVersionParts(CHATGPT_ROLLBACK_THRESHOLD);
72
+ if (!parts || !threshold)
73
+ return false;
74
+ const year = Number(parts[0]);
75
+ const thresholdYear = Number(threshold[0]);
76
+ if (year !== thresholdYear)
77
+ return year > thresholdYear;
78
+ const releaseText = parts[1];
79
+ const thresholdReleaseText = threshold[1];
80
+ const release = Number(releaseText.padEnd(3, "0"));
81
+ const thresholdRelease = Number(thresholdReleaseText.padEnd(3, "0"));
82
+ return release >= thresholdRelease;
83
+ }
84
+ async function installedAppPath(paths) {
85
+ for (const path of paths) {
86
+ try {
87
+ const value = await lstat(path);
88
+ if (value.isSymbolicLink()) {
89
+ throw new Error(`拒绝管理符号链接形式的 ChatGPT App:${path}`);
90
+ }
91
+ if (value.isDirectory())
92
+ return path;
93
+ }
94
+ catch (error) {
95
+ if (error.code !== "ENOENT")
96
+ throw error;
97
+ }
98
+ }
99
+ return undefined;
100
+ }
101
+ export async function inspectChatGptDesktop(dependencies = {}) {
102
+ const platform = dependencies.platform ?? process.platform;
103
+ const architecture = dependencies.architecture ?? process.arch;
104
+ if (platform !== "darwin" || architecture !== "arm64") {
105
+ return {
106
+ platform,
107
+ architecture,
108
+ supported: false,
109
+ installed: false,
110
+ targetVersion: MANAGED_CHATGPT_VERSION,
111
+ remediationRequired: false
112
+ };
113
+ }
114
+ const candidates = appCandidates(dependencies);
115
+ const path = await installedAppPath(candidates);
116
+ if (!path) {
117
+ return {
118
+ platform,
119
+ architecture,
120
+ supported: true,
121
+ installed: false,
122
+ path: candidates[0],
123
+ targetVersion: MANAGED_CHATGPT_VERSION,
124
+ remediationRequired: false
125
+ };
126
+ }
127
+ const metadata = await (dependencies.readMetadata ?? defaultReadMetadata)(path);
128
+ return {
129
+ platform,
130
+ architecture,
131
+ supported: true,
132
+ installed: true,
133
+ path,
134
+ bundleId: metadata.bundleId,
135
+ version: metadata.version,
136
+ build: metadata.build,
137
+ targetVersion: MANAGED_CHATGPT_VERSION,
138
+ remediationRequired: metadata.bundleId === CHATGPT_BUNDLE_ID
139
+ && requiresChatGptRollback(metadata.version)
140
+ };
141
+ }
142
+ async function hashFile(path) {
143
+ const digest = createHash("sha256");
144
+ let bytes = 0;
145
+ for await (const chunk of createReadStream(path)) {
146
+ const value = chunk;
147
+ bytes += value.byteLength;
148
+ digest.update(value);
149
+ }
150
+ return { bytes, sha256: digest.digest("hex") };
151
+ }
152
+ async function archiveIsValid(path) {
153
+ try {
154
+ const result = await hashFile(path);
155
+ return result.bytes === MANAGED_CHATGPT_ARCHIVE_BYTES
156
+ && result.sha256 === MANAGED_CHATGPT_ARCHIVE_SHA256;
157
+ }
158
+ catch {
159
+ return false;
160
+ }
161
+ }
162
+ async function writeAll(file, value) {
163
+ let offset = 0;
164
+ while (offset < value.byteLength) {
165
+ const result = await file.write(value, offset, value.byteLength - offset);
166
+ if (result.bytesWritten <= 0)
167
+ throw new Error("无法继续写入 ChatGPT 安装包。");
168
+ offset += result.bytesWritten;
169
+ }
170
+ }
171
+ async function downloadManagedArchive(dependencies) {
172
+ const env = dependencies.env ?? process.env;
173
+ const home = dependencies.homeDirectory ?? homedir();
174
+ const cacheDirectory = dependencies.cacheDirectory
175
+ ?? join(env.XDG_CACHE_HOME?.trim() || join(home, "Library", "Caches"), "numa", "apps");
176
+ const archivePath = join(cacheDirectory, `chatgpt-${MANAGED_CHATGPT_VERSION}.zip`);
177
+ await mkdir(cacheDirectory, { recursive: true });
178
+ if (await archiveIsValid(archivePath))
179
+ return archivePath;
180
+ await rm(archivePath, { force: true });
181
+ const temporary = `${archivePath}.${process.pid}.${randomUUID()}.tmp`;
182
+ const fetchImpl = dependencies.fetch ?? fetch;
183
+ const response = await fetchImpl(MANAGED_CHATGPT_DOWNLOAD_URL, {
184
+ redirect: "follow",
185
+ signal: AbortSignal.timeout(15 * 60 * 1_000)
186
+ });
187
+ if (!response.ok || !response.body) {
188
+ throw new Error(`下载 ChatGPT 安装包失败:HTTP ${response.status}`);
189
+ }
190
+ const declaredLengthHeader = response.headers.get("content-length");
191
+ if (declaredLengthHeader !== null) {
192
+ const declaredLength = Number(declaredLengthHeader);
193
+ if (!Number.isFinite(declaredLength) || declaredLength !== MANAGED_CHATGPT_ARCHIVE_BYTES) {
194
+ throw new Error(`ChatGPT 安装包大小异常:${declaredLengthHeader}`);
195
+ }
196
+ }
197
+ const digest = createHash("sha256");
198
+ const file = await open(temporary, "wx", 0o600);
199
+ let bytes = 0;
200
+ try {
201
+ const reader = response.body.getReader();
202
+ while (true) {
203
+ const item = await reader.read();
204
+ if (item.done)
205
+ break;
206
+ bytes += item.value.byteLength;
207
+ if (bytes > MAX_DOWNLOAD_BYTES)
208
+ throw new Error("ChatGPT 安装包超过允许的最大大小。");
209
+ digest.update(item.value);
210
+ await writeAll(file, item.value);
211
+ }
212
+ }
213
+ catch (error) {
214
+ await rm(temporary, { force: true });
215
+ throw error;
216
+ }
217
+ finally {
218
+ await file.close();
219
+ }
220
+ const sha256 = digest.digest("hex");
221
+ if (bytes !== MANAGED_CHATGPT_ARCHIVE_BYTES || sha256 !== MANAGED_CHATGPT_ARCHIVE_SHA256) {
222
+ await rm(temporary, { force: true });
223
+ throw new Error(`ChatGPT 安装包完整性校验失败(bytes=${bytes}, sha256=${sha256})。`);
224
+ }
225
+ await rename(temporary, archivePath);
226
+ return archivePath;
227
+ }
228
+ async function defaultExtractArchive(archivePath, destination) {
229
+ await runCommand("/usr/bin/ditto", ["-x", "-k", archivePath, destination]);
230
+ const appPath = join(destination, "ChatGPT.app");
231
+ await access(appPath, constants.R_OK);
232
+ return appPath;
233
+ }
234
+ async function defaultVerifySignature(appPath) {
235
+ await runCommand("/usr/bin/codesign", ["--verify", "--deep", "--strict", appPath]);
236
+ const detail = await runCommand("/usr/bin/codesign", ["-dv", "--verbose=4", appPath]);
237
+ const text = `${detail.stdout}\n${detail.stderr}`;
238
+ if (!text.includes(`Identifier=${CHATGPT_BUNDLE_ID}`)
239
+ || !text.includes(`TeamIdentifier=${OPENAI_TEAM_ID}`)) {
240
+ throw new Error("ChatGPT App 签名身份不符合预期。");
241
+ }
242
+ const architecture = await runCommand("/usr/bin/lipo", [
243
+ "-archs",
244
+ join(appPath, "Contents", "MacOS", "ChatGPT")
245
+ ]);
246
+ if (!architecture.stdout.trim().split(/\s+/u).includes("arm64")) {
247
+ throw new Error("ChatGPT App 安装包不包含 arm64 可执行文件。");
248
+ }
249
+ }
250
+ async function processRunning(name) {
251
+ try {
252
+ await runCommand("/usr/bin/pgrep", ["-x", name]);
253
+ return true;
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ }
259
+ async function delay(milliseconds) {
260
+ await new Promise((resolve) => setTimeout(resolve, milliseconds));
261
+ }
262
+ async function defaultStopApp() {
263
+ if (!(await processRunning("ChatGPT")))
264
+ return;
265
+ try {
266
+ await runCommand("/usr/bin/pkill", ["-TERM", "-x", "ChatGPT"]);
267
+ }
268
+ catch (error) {
269
+ if (await processRunning("ChatGPT"))
270
+ throw error;
271
+ return;
272
+ }
273
+ for (let attempt = 0; attempt < 25; attempt += 1) {
274
+ if (!(await processRunning("ChatGPT")))
275
+ return;
276
+ await delay(200);
277
+ }
278
+ try {
279
+ await runCommand("/usr/bin/pkill", ["-KILL", "-x", "ChatGPT"]);
280
+ }
281
+ catch (error) {
282
+ if (await processRunning("ChatGPT"))
283
+ throw error;
284
+ }
285
+ }
286
+ async function validateManagedApp(appPath, dependencies) {
287
+ const metadata = await (dependencies.readMetadata ?? defaultReadMetadata)(appPath);
288
+ if (metadata.bundleId !== CHATGPT_BUNDLE_ID
289
+ || metadata.version !== MANAGED_CHATGPT_VERSION
290
+ || metadata.build !== MANAGED_CHATGPT_BUILD) {
291
+ throw new Error(`ChatGPT 安装包版本不符合预期:${metadata.bundleId} ${metadata.version} (${metadata.build})。`);
292
+ }
293
+ await (dependencies.verifySignature ?? defaultVerifySignature)(appPath);
294
+ return metadata;
295
+ }
296
+ export async function ensureManagedChatGptDesktop(dependencies = {}) {
297
+ const before = await inspectChatGptDesktop(dependencies);
298
+ if (!before.supported)
299
+ return { action: "not-supported", before };
300
+ if (!before.installed)
301
+ return { action: "not-installed", before };
302
+ if (!before.remediationRequired)
303
+ return { action: "not-required", before };
304
+ if (!before.path || before.bundleId !== CHATGPT_BUNDLE_ID) {
305
+ throw new Error("拒绝替换无法确认身份的 ChatGPT App。");
306
+ }
307
+ const output = dependencies.output ?? process.stderr;
308
+ output.write(`检测到 ChatGPT ${before.version},正在安装批准版本 ${MANAGED_CHATGPT_VERSION}…\n`);
309
+ await access(dirname(before.path), constants.W_OK);
310
+ const archivePath = await (dependencies.obtainArchive
311
+ ? dependencies.obtainArchive()
312
+ : downloadManagedArchive(dependencies));
313
+ const stagingDirectory = await mkdtemp(join(dirname(before.path), ".numa-chatgpt-install-"));
314
+ const backupPath = join(dirname(before.path), `.ChatGPT.app.numa-backup-${process.pid}-${Date.now()}`);
315
+ let backupCreated = false;
316
+ try {
317
+ const stagedApp = await (dependencies.extractArchive ?? defaultExtractArchive)(archivePath, stagingDirectory);
318
+ await validateManagedApp(stagedApp, dependencies);
319
+ await (dependencies.stopApp ?? defaultStopApp)();
320
+ await rename(before.path, backupPath);
321
+ backupCreated = true;
322
+ try {
323
+ await rename(stagedApp, before.path);
324
+ await validateManagedApp(before.path, dependencies);
325
+ }
326
+ catch (error) {
327
+ await rm(before.path, { recursive: true, force: true });
328
+ await rename(backupPath, before.path);
329
+ backupCreated = false;
330
+ throw error;
331
+ }
332
+ try {
333
+ await rm(backupPath, { recursive: true, force: true });
334
+ backupCreated = false;
335
+ }
336
+ catch (error) {
337
+ output.write(`警告:旧版 ChatGPT 备份清理失败:${error.message}\n`);
338
+ }
339
+ }
340
+ finally {
341
+ await rm(stagingDirectory, { recursive: true, force: true });
342
+ if (backupCreated) {
343
+ try {
344
+ await access(before.path);
345
+ }
346
+ catch {
347
+ await rename(backupPath, before.path);
348
+ backupCreated = false;
349
+ }
350
+ }
351
+ }
352
+ const after = await inspectChatGptDesktop(dependencies);
353
+ output.write(`ChatGPT 已切换到 ${after.version} (${after.build})。\n`);
354
+ return { action: "reinstalled", before, after };
355
+ }
356
+ //# sourceMappingURL=chatgpt-desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-desktop.js","sourceRoot":"","sources":["../src/chatgpt-desktop.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { DEFAULT_CODEX_SERVER_URL } from "@tokensrc/codex/config";
5
5
  import { appConfigDirectory, loadAppConfig } from "./app-config.js";
6
6
  import { CLI_NAME, CODEX_APP_NAME, CODEX_SHORTCUT_NAME, PACKAGE_NAME } from "./branding.js";
7
7
  import { loadConfig } from "./config.js";
8
+ import { CHATGPT_DESKTOP_UPDATE_REMINDER, ensureManagedChatGptDesktop, inspectChatGptDesktop } from "./chatgpt-desktop.js";
8
9
  import { currentPlatformProfile, ModuleUnavailableError, requireProfileService } from "./platform-profile.js";
9
10
  import { blockingBrowserLogin, ensureAccessToken, LoginRequiredError } from "./oauth.js";
10
11
  export const NUMA_CODEX_COMMAND_DIRECTORY = createCodexCommandDirectory({
@@ -98,6 +99,7 @@ export async function createNumaCodexModule() {
98
99
  appName: CODEX_APP_NAME
99
100
  },
100
101
  launcher: {
102
+ cliCommandName: CLI_NAME,
101
103
  runCommandName: CODEX_SHORTCUT_NAME,
102
104
  appCommandName: `${CODEX_SHORTCUT_NAME}-app`,
103
105
  launchMode: "direct",
@@ -109,6 +111,13 @@ export async function createNumaCodexModule() {
109
111
  manifestFileName: ".numa-codex-shortcuts.json",
110
112
  bundleId: "tech.numa.codex-shortcut"
111
113
  },
114
+ desktopApp: {
115
+ inspect: () => inspectChatGptDesktop({ env: process.env }),
116
+ prepare: async () => {
117
+ process.stderr.write(`${CHATGPT_DESKTOP_UPDATE_REMINDER}\n`);
118
+ await ensureManagedChatGptDesktop({ env: process.env, output: process.stderr });
119
+ }
120
+ },
112
121
  env: process.env,
113
122
  output: process.stdout,
114
123
  errorOutput: process.stderr,
@@ -1 +1 @@
1
- {"version":3,"file":"codex-module.js","sourceRoot":"","sources":["../src/codex-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-module.js","sourceRoot":"","sources":["../src/codex-module.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@numa-tech/numa",
3
- "version": "1.12.3",
3
+ "version": "1.12.5",
4
4
  "description": "Cross-platform CLI for the Numa internal developer platform with Keycloak authentication and MCP support.",
5
5
  "author": "numa-tech",
6
6
  "keywords": [
@@ -32,7 +32,7 @@
32
32
  "typecheck": "turbo run typecheck root:typecheck",
33
33
  "root:typecheck": "tsc --noEmit",
34
34
  "test": "turbo run test root:test",
35
- "root:test": "node --import tsx --test src/branding.test.ts src/app-config.test.ts src/platform-profile.test.ts src/identity.test.ts src/backend.test.ts src/oauth.test.ts src/web-console.test.ts src/cli-options.test.ts src/ai-registry/client.test.ts src/ai-registry/skill-installer.test.ts src/ai-registry/mcp-installer.test.ts src/media/client.test.ts src/media/commands.test.ts src/media/transfers.test.ts src/pipeline/client.test.ts src/pipeline/commands.test.ts src/codex-integration.test.ts scripts/release-all.test.mjs",
35
+ "root:test": "node --import tsx --test src/branding.test.ts src/app-config.test.ts src/platform-profile.test.ts src/identity.test.ts src/backend.test.ts src/oauth.test.ts src/web-console.test.ts src/cli-options.test.ts src/ai-registry/client.test.ts src/ai-registry/skill-installer.test.ts src/ai-registry/mcp-installer.test.ts src/media/client.test.ts src/media/commands.test.ts src/media/transfers.test.ts src/pipeline/client.test.ts src/pipeline/commands.test.ts src/chatgpt-desktop.test.ts src/codex-integration.test.ts scripts/release-all.test.mjs",
36
36
  "pack:check": "turbo run pack:check root:pack:check",
37
37
  "root:pack:check": "node scripts/check-root-package.mjs",
38
38
  "boundaries": "node scripts/check-workspace-boundaries.mjs",
@@ -55,8 +55,8 @@
55
55
  "dependencies": {
56
56
  "@clack/prompts": "^1.7.0",
57
57
  "@modelcontextprotocol/sdk": "^1.29.0",
58
- "@numa-tech/cli-auth": "1.12.3",
59
- "@tokensrc/codex": "1.12.3",
58
+ "@numa-tech/cli-auth": "1.12.5",
59
+ "@tokensrc/codex": "1.12.5",
60
60
  "commander": "^14.0.3",
61
61
  "open": "^10.2.0",
62
62
  "yauzl": "^3.4.0",