修复Mac客户端随包Codex与插件资源缺失 #417

Merged
suzmii merged 2 commits from fix/mac-bundled-runtime into master 2026-09-18 12:48:01 +08:00
Member

关联

Refs #406

本 PR 补齐 Mac 客户端的随包运行依赖,是「添加 mac 构建管线」的客户端前置工作;不新增 CI/Jenkins 管线,不自动关闭 Issue。

原因与前后变化

原先只有 Windows 在构建时 stage Codex 与插件资源,运行时的内置 Codex 路径和清单平台也写死 Windows。Mac 虽然能生成约 28 MiB 的 DMG,但依赖开发机全局 Codex,缺少安装后独立使用需要的资源。

本次:

  • 构建和运行共享平台文件白名单,按 Cargo target 选择锁定的 @openai/codex@0.147.0 原生包,检查元数据的版本、目标和布局。
  • macOS 随包携带 Codex、code-mode host、rg、zsh、原生包元数据、SHA-256 清单和第三方声明;保留执行权限,不携带用户配置或凭据。
  • macOS 从 .app/Contents/Resources/coding-agent/mac-native/ 查找内置程序,完整性和版本验证后优先使用;保持已有外部安装回退语义。
  • Windows/macOS 都携带插件清单、入口与面板;重建 staging 清理残留。Mac 不复制 Windows 原生 payload,不宣称 Cocos 原生桥接已跨平台。
  • 新增 macOS 专属资源映射、更新渠道和最低系统 15.0 声明(随包 zsh 的实际要求);拒绝把单架构 Codex 资源用于 universal 发布构建。
  • 新增隔离 HOME/PATH 的安装包验收脚本,覆盖正式 AGC 查找、原生架构、摘要、权限、app-server 握手和缺组件拒绝。

本地测试 .app 约 324 MiB,DMG 约 139 MiB;安装包未纳入 Git,也未上传发布。

已验证

  • 用户确认 Mac 本地测试包“可以用了”;不外推为所有功能或其它 Mac 已通过。
  • cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell agent::codex_cli:: -- --test-threads=1:14 通过,1 个真实认证用例按原配置跳过。
  • node --test apps/ai-game-creator-shell/scripts/build-release.test.mjs:21 通过。
  • node --test apps/ai-game-creator-shell/scripts/cargo-features.test.mjs:2 通过,包含 Windows 默认编辑器 feature。
  • npm run ai-game-creator-shell:typecheck、编码、文档索引、定向脚本 ESLint 和 diff 检查通过。
  • Release .app 构建成功;临时复制品限制 PATH、隔离 HOME 后,内置 Codex、rg、zsh 可启动,正式 AGC 仅被未登录门禁拒绝,app-server 初始化成功,移走 code-mode host 后正式入口拒绝。
  • DMG 使用 hdiutil 创建并通过完整性校验(Tauri 自带 DMG 包装脚本在本机失败,未掩盖该差异)。

最低系统版本声明是在上述用户测试包之后补齐;最终配置门禁和 Rust 定向测试已重跑,尚未重新分发带该声明的 Mac 包。

Windows 待验证(草稿保持)

  • 本分支按既有 Windows 流程成功构建 NSIS;不运行 release upload。NSIS 安装包已生成(陶泥儿_0.1.69_x64-setup.exe);最后 Tauri 更新签名因本机未配置 TAURI_SIGNING_PRIVATE_KEY 未完成,该签名环境问题不纳入本 PR 验证结论。
  • 安装目录保留完整 coding-agent/win-x64/ 文件、清单与插件资源,版本与摘要通过。
  • 无全局 Codex 的环境可通过安装目录启动 Codex,登录、对话和工具调用正常。
  • Cocos 项目识别、插件启动和既有 Windows 编辑器桥接无回归;普通 Web 项目不误展示 Cocos 插件。
  • 停止、退出、重启正常;缺失或损坏组件仍按既有验证/回退语义处理。

未覆盖与发布边界

  • Windows 本地真实构建已完成并生成 NSIS 安装包;安装/运行及上述其余验收仍待验证。远端 CI 状态单独判定,不将本地构建等同于合并就绪。
  • Intel Mac、其它 Mac 机器和 macOS 15 实机最低版本未验收;当前本地包仅为 Apple Silicon。
  • Cocos macOS 原生桥接未实现;插件 JS 入口和生成工程工具链仍使用现有系统 Node/npm 前提。
  • 未配置 Developer ID 正式签名、公证或 updater 更新签名;不作为公开发行包。
  • 不更改应用版本、Agent Loop、公开 API 或持久化数据;不自动合并、不发布产物。
## 关联 Refs #406 本 PR 补齐 Mac 客户端的随包运行依赖,是「添加 mac 构建管线」的客户端前置工作;不新增 CI/Jenkins 管线,不自动关闭 Issue。 ## 原因与前后变化 原先只有 Windows 在构建时 stage Codex 与插件资源,运行时的内置 Codex 路径和清单平台也写死 Windows。Mac 虽然能生成约 28 MiB 的 DMG,但依赖开发机全局 Codex,缺少安装后独立使用需要的资源。 本次: - 构建和运行共享平台文件白名单,按 Cargo target 选择锁定的 `@openai/codex@0.147.0` 原生包,检查元数据的版本、目标和布局。 - macOS 随包携带 Codex、code-mode host、rg、zsh、原生包元数据、SHA-256 清单和第三方声明;保留执行权限,不携带用户配置或凭据。 - macOS 从 `.app/Contents/Resources/coding-agent/mac-native/` 查找内置程序,完整性和版本验证后优先使用;保持已有外部安装回退语义。 - Windows/macOS 都携带插件清单、入口与面板;重建 staging 清理残留。Mac 不复制 Windows 原生 payload,不宣称 Cocos 原生桥接已跨平台。 - 新增 macOS 专属资源映射、更新渠道和最低系统 `15.0` 声明(随包 zsh 的实际要求);拒绝把单架构 Codex 资源用于 universal 发布构建。 - 新增隔离 HOME/PATH 的安装包验收脚本,覆盖正式 AGC 查找、原生架构、摘要、权限、app-server 握手和缺组件拒绝。 本地测试 `.app` 约 324 MiB,DMG 约 139 MiB;安装包未纳入 Git,也未上传发布。 ## 已验证 - 用户确认 Mac 本地测试包“可以用了”;不外推为所有功能或其它 Mac 已通过。 - `cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell agent::codex_cli:: -- --test-threads=1`:14 通过,1 个真实认证用例按原配置跳过。 - `node --test apps/ai-game-creator-shell/scripts/build-release.test.mjs`:21 通过。 - `node --test apps/ai-game-creator-shell/scripts/cargo-features.test.mjs`:2 通过,包含 Windows 默认编辑器 feature。 - `npm run ai-game-creator-shell:typecheck`、编码、文档索引、定向脚本 ESLint 和 diff 检查通过。 - Release `.app` 构建成功;临时复制品限制 PATH、隔离 HOME 后,内置 Codex、rg、zsh 可启动,正式 AGC 仅被未登录门禁拒绝,app-server 初始化成功,移走 code-mode host 后正式入口拒绝。 - DMG 使用 `hdiutil` 创建并通过完整性校验(Tauri 自带 DMG 包装脚本在本机失败,未掩盖该差异)。 最低系统版本声明是在上述用户测试包之后补齐;最终配置门禁和 Rust 定向测试已重跑,尚未重新分发带该声明的 Mac 包。 ## Windows 待验证(草稿保持) - [x] 本分支按既有 Windows 流程成功构建 NSIS;不运行 release upload。NSIS 安装包已生成(`陶泥儿_0.1.69_x64-setup.exe`);最后 Tauri 更新签名因本机未配置 `TAURI_SIGNING_PRIVATE_KEY` 未完成,该签名环境问题不纳入本 PR 验证结论。 - [ ] 安装目录保留完整 `coding-agent/win-x64/` 文件、清单与插件资源,版本与摘要通过。 - [ ] 无全局 Codex 的环境可通过安装目录启动 Codex,登录、对话和工具调用正常。 - [ ] Cocos 项目识别、插件启动和既有 Windows 编辑器桥接无回归;普通 Web 项目不误展示 Cocos 插件。 - [ ] 停止、退出、重启正常;缺失或损坏组件仍按既有验证/回退语义处理。 ## 未覆盖与发布边界 - Windows 本地真实构建已完成并生成 NSIS 安装包;安装/运行及上述其余验收仍待验证。远端 CI 状态单独判定,不将本地构建等同于合并就绪。 - Intel Mac、其它 Mac 机器和 macOS 15 实机最低版本未验收;当前本地包仅为 Apple Silicon。 - Cocos macOS 原生桥接未实现;插件 JS 入口和生成工程工具链仍使用现有系统 Node/npm 前提。 - 未配置 Developer ID 正式签名、公证或 updater 更新签名;不作为公开发行包。 - 不更改应用版本、Agent Loop、公开 API 或持久化数据;不自动合并、不发布产物。
suzmii added 1 commit 2026-09-18 11:13:16 +08:00
修复Mac客户端随包运行依赖缺失
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 5m37s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 5m46s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 5m28s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m43s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m40s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 5m20s
Project CI / Frontend tests (pull_request) Successful in 7m41s
Project CI / Repository checks (pull_request) Successful in 7m41s
Project CI / Native shell tests (pull_request) Successful in 11m20s
Project CI / Backend tests (pull_request) Successful in 12m11s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m12s
6f012d419a
统一Codex平台布局并补齐macOS原生组件、完整性清单和资源加载路径
补齐macOS插件资源并保留Windows专属原生桥接边界
增加隔离安装包验证、平台配置门禁与侧车回归测试
声明macOS 15最低系统版本并同步规范及Windows待验收计划
Author
Member

Review 结论:暂不建议合并

发现以下问题,建议修复后再合并:

P1:显式 --target 的 macOS 发布链路仍会误用 Windows 渠道

文件:apps/ai-game-creator-shell/scripts/build-release.mjs(约 16-18、331-357、382-390 行)。

buildTauriBuildArguments(['--target', 'aarch64-apple-darwin']) 可以生成正确的 macOS 参数,但 runTauriBuild()、版本读取、产物选择等后续逻辑仍使用默认的 releaseTarget=x86_64-pc-windows-msvc。实测 macOS target 参数正确,但隐式渠道仍是 dev-win,应为 dev-mac

这可能导致 macOS 构建写入 Windows updater endpoint,并在生成更新清单时寻找 Windows .exe 产物。建议让 target 在入口处解析后贯穿构建、渠道选择、版本读取、产物选择和清单生成全链路,并增加显式 macOS target 的回归测试。

P2:macOS staging 会分发 Cocos 插件,但没有对应 native adapter

涉及:

  • apps/ai-game-creator-shell/src-tauri/build.rs(约 313-321 行)
  • apps/ai-game-creator-shell/scripts/cargo-features.mjs(约 20-23 行)
  • apps/ai-game-creator-shell/src-tauri/src/plugin_host.rs(约 940-956、1553-1563 行)

macOS staging 会复制 Cocos 插件清单、入口和面板,但默认不启用 cocos-editor feature。PluginHost 仍可能在 Cocos 项目中展示或启动该插件,后续 RPC 会落到“未知编辑器适配器”。建议明确 macOS 的 Cocos 支持策略:要么补齐 macOS native adapter,要么在 staging/插件发现层屏蔽该插件,避免分发不可用能力。

P2:权威更新文档与当前单架构实现冲突

文件:docs/technical/【技术方案】AGC客户端更新检查与下载-2026-08-31.md(约 78、81、93、130 行)。

文档仍要求 universal-apple-darwin,但本 PR 的代码拒绝 universal,仅支持 Apple Silicon/Intel 单架构。请同步更新权威文档,明确当前支持的架构、target、产物命名及 updater manifest 规则,或调整实现与文档保持一致。

已验证

  • Rust 定向测试:16 passed,1 ignored
  • node --test apps/ai-game-creator-shell/scripts/build-release.test.mjs:21 passed
  • Cargo feature 测试:2 passed
  • npm run ai-game-creator-shell:typecheck:通过
  • npm run check:encoding:通过
  • npm run check:doc-index:通过
  • git diff --check:通过

尚未验证边界

Windows NSIS 实际构建/安装、macOS GUI/登录/Provider/Cocos 原生桥接尚未验证;此外当前 CI 尚未全部完成,PR 仍为 Draft。

## Review 结论:暂不建议合并 发现以下问题,建议修复后再合并: ### P1:显式 `--target` 的 macOS 发布链路仍会误用 Windows 渠道 文件:`apps/ai-game-creator-shell/scripts/build-release.mjs`(约 16-18、331-357、382-390 行)。 `buildTauriBuildArguments(['--target', 'aarch64-apple-darwin'])` 可以生成正确的 macOS 参数,但 `runTauriBuild()`、版本读取、产物选择等后续逻辑仍使用默认的 `releaseTarget=x86_64-pc-windows-msvc`。实测 macOS target 参数正确,但隐式渠道仍是 `dev-win`,应为 `dev-mac`。 这可能导致 macOS 构建写入 Windows updater endpoint,并在生成更新清单时寻找 Windows `.exe` 产物。建议让 target 在入口处解析后贯穿构建、渠道选择、版本读取、产物选择和清单生成全链路,并增加显式 macOS target 的回归测试。 ### P2:macOS staging 会分发 Cocos 插件,但没有对应 native adapter 涉及: - `apps/ai-game-creator-shell/src-tauri/build.rs`(约 313-321 行) - `apps/ai-game-creator-shell/scripts/cargo-features.mjs`(约 20-23 行) - `apps/ai-game-creator-shell/src-tauri/src/plugin_host.rs`(约 940-956、1553-1563 行) macOS staging 会复制 Cocos 插件清单、入口和面板,但默认不启用 `cocos-editor` feature。PluginHost 仍可能在 Cocos 项目中展示或启动该插件,后续 RPC 会落到“未知编辑器适配器”。建议明确 macOS 的 Cocos 支持策略:要么补齐 macOS native adapter,要么在 staging/插件发现层屏蔽该插件,避免分发不可用能力。 ### P2:权威更新文档与当前单架构实现冲突 文件:`docs/technical/【技术方案】AGC客户端更新检查与下载-2026-08-31.md`(约 78、81、93、130 行)。 文档仍要求 `universal-apple-darwin`,但本 PR 的代码拒绝 universal,仅支持 Apple Silicon/Intel 单架构。请同步更新权威文档,明确当前支持的架构、target、产物命名及 updater manifest 规则,或调整实现与文档保持一致。 ## 已验证 - Rust 定向测试:16 passed,1 ignored - `node --test apps/ai-game-creator-shell/scripts/build-release.test.mjs`:21 passed - Cargo feature 测试:2 passed - `npm run ai-game-creator-shell:typecheck`:通过 - `npm run check:encoding`:通过 - `npm run check:doc-index`:通过 - `git diff --check`:通过 ## 尚未验证边界 Windows NSIS 实际构建/安装、macOS GUI/登录/Provider/Cocos 原生桥接尚未验证;此外当前 CI 尚未全部完成,PR 仍为 Draft。
Author
Member

补充验证:Windows 本地构建已成功生成 NSIS 安装包,产物路径为:

apps/ai-game-creator-shell/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/陶泥儿_0.1.69_x64-setup.exe

构建仅在最后的签名步骤停止,原因是当前环境检测到公钥但没有私钥:

A public key has been found, but no private key. Make sure to set TAURI_SIGNING_PRIVATE_KEY environment variable.

这属于本地签名环境配置问题,与本 PR 的代码变更无关;安装包本身已生成。

补充验证:Windows 本地构建已成功生成 NSIS 安装包,产物路径为: `apps/ai-game-creator-shell/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/陶泥儿_0.1.69_x64-setup.exe` 构建仅在最后的签名步骤停止,原因是当前环境检测到公钥但没有私钥: ```text A public key has been found, but no private key. Make sure to set TAURI_SIGNING_PRIVATE_KEY environment variable. ``` 这属于本地签名环境配置问题,与本 PR 的代码变更无关;安装包本身已生成。
suzmii added 1 commit 2026-09-18 12:15:31 +08:00
修复发布目标与插件能力门禁并同步版本0.1.67
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 7m21s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 7m27s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 7m28s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 7m46s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m53s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m14s
Project CI / Backend tests (pull_request) Successful in 8m6s
Project CI / Native shell tests (pull_request) Successful in 8m11s
Project CI / Repository checks (pull_request) Successful in 5m57s
Project CI / Frontend tests (pull_request) Successful in 7m53s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m38s
16c905b51b
统一显式目标对应的版本读取、构建渠道、产物目录和更新清单
无原生适配器时隐藏Cocos插件并阻止自动启动
同步单架构更新规范并增加发布和插件回归测试
更新版本与锁文件到0.1.67并记录Mac安装包验证结果
suzmii marked the pull request as ready for review 2026-09-18 12:47:09 +08:00
suzmii merged commit b137f17599 into master 2026-09-18 12:48:01 +08:00
suzmii deleted branch fix/mac-bundled-runtime 2026-09-18 12:48:01 +08:00
Sign in to join this conversation.