ZCode 有四条打包路径:桌面版(Electron)、CLI SEA(单可执行)、统一分发包(zcode)、独立 Server 包。第三方声明在 third-party/ 统一治理。

桌面版

packages/desktop 用 electron-builder 26.8.1 + Electron 41.0.3:

  • bundle = scripts/bundle.mjs(聚合打包入口、重试、计时、产物校验)。
  • electron-builder.config.js 负责签名/公证 hook、asar 重打、原生包策略、node-pty prebuild 还原、Sharp/Koffi 校验、Windows CUA Helper、NSIS install section patch、sourcemap 清理、native-search release plan、第三方声明 staging。
  • 关键 native addon:node-pty、koffi、sharp(@img/sharp-libvips-* LGPL 动态库,仅真实 Computer Use 引入)、cpu-features、ssh2。
  • 命令:pnpm bundle:desktop [-- --os win --arch x64],默认 macOS arm64,输出 packages/desktop/dist/。

CLI SEA

apps/zcode-cli/packages/cli/scripts/build-sea.mjs + 15 个 sea-*.mjs 辅助:

  • 支持 6 target(darwin/linux/win × arm64/x64)。
  • 用 postject 注入 SEA blob(NODE_SEA_FUSE_ sentinel);macOS 主机 target 做 ad-hoc 签名;Windows 需先移除 Authenticode 签名。
  • 资产:TUI runtime、官方插件、bundled-skill、runtime-tool、Playwright、provider-config、workspace-package。
  • 根入口:pnpm build:sea = pnpm --dir apps/zcode-cli build:sea。
  • 策略(apps/zcode-cli/README.md):先保证普通 Node CLI bundle(运行时零生产依赖),SEA 是可选路径;SEA 破则普通 CLI 仍可 fallback。

统一分发包(zcode)

规格 specs/zcode-unified-distribution.md(71 行)+ scripts/zcode-distribution/{assets,installer,runner}.mjs。

产品规则:Node 发行版名为 zcode,可执行 bin/zcode.mjs,安装后命令 zcode。

  • 无前置参数 → 透传全部参数给现有 CLI/TUI。
  • 第一参数为 --web → 启动现有本地 HTTP/WebSocket server + Web assets + Agent;prompt 里的 --web 仍是 CLI 输入。
  • Web 保持 localhost 绑定、自动选端口、非 loopback 默认生成 token。

所有权边界:发布脚本负责归档组装与安装,复用 CLI 的 collectSeaTuiAssets 构建 API;TUI 资产放 agent/node_modules,保留包相对路径与依赖版本隔离;不引入新的 session/persistence/queue/replay/lease owner;Web server 拥有自己的 Agent 子进程。

产物(pnpm build:zcode,默认输出 dist/zcode/):

releases/<version>/zcode-<version>.tar.gz   运行包
releases/<version>/sha256.txt               校验摘要
latest.json / install.sh                    版本索引与安装脚本
  • 需 ZCODE_DIST_BASE_URL 或 --base-url。
  • install.sh 从该地址下载,默认装到 ~/.zcode/runtime,在 ~/.local/bin 创建 zcode;ZCODE_DIST_HOME / ZCODE_DIST_BIN_DIR 可改。
  • assets.mjs 三层:copyRuntimeNodeModules、stageTuiRuntime、patchNodePtyPrebuilds;重复路径 hash 不一致即失败。
  • 与 pnpm build:lite(dist/zcode-lite)并存,互不干扰。

验收(spec):launcher 进程路由、Web 进程、installer、真实发布物 Pseudo-TTY 首屏+键盘退出、--web HTML/API/WebSocket、根 typecheck/lint/architecture。

独立 Server 包

@zcode/server-cli 有独立的 packaging/(stage CLI)与 Supervisor/Core 双层进程模型(见 server-remote)。serve --daemon 注册 OS 服务,失败时(显式 opt-out 除外)只允许 detached fallback。

native-search 工具(rg / bfs / ugrep)

scripts/native-search-tools-config.mjs(17.8 KB)是唯一所有者:版本(bfs 4.1.1、ripgrep 14.1.1、ugrep 7.8.4)、内网 URL 与仓库归档路径两类来源、每个归档固定 SHA-256、macOS deployment target 12.0、Linux GLIBC baseline 2.28。产物含每工具 THIRD-PARTY-NOTICES.txt + SOURCES.json,SEA 内嵌同名资产。

第三方声明(third-party/)

物料登记:third-party/*.json、upstream/、native-search/、runtime/。

  • 生成:scripts/third-party-npm.mjs(解析锁文件生产图 + 实际安装图)、generate-third-party-notices.mjs(产出 THIRD-PARTY-NOTICES.md ~2.0 MB + inventory.json)、licenses.mjs check [--strict]、third-party-notices.mjs。
  • 构建期不更新清单也不隐式校验——缺失/无法解析时才保留原始错误;原生材料只在显式生成时核验。
  • 非宽松许可逐项登记:LGPL 仅允许独立可替换动态库形式的 libvips(sharp);内部应用独有依赖(dev-docs 的 elkjs,EPL-2.0)。
  • 交付入口覆盖 Desktop/Web/Server/CLI/搜索工具/远端组件/独立 Server 包/统一分发包。

CI 打包

docs/cli-ci-packaging.md 记录 CLI SEA 打包的六个独立手动 job(scripts/ci-cli-sea.mjs,脚本本身不在检出中);docs/desktop-ci-artifact-layout.md 记录产物布局。详见 engineering。

相关页面