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。
相关页面
- engineering — 构建、测试、CI、治理
- monorepo — 包结构
- cli-tui — CLI/TUI 与 SEA 策略
- server-remote — 独立 Server 包