项目概览与运行形态
ZCode 是一个以 AI 编程为核心的多端工作台:同一仓库同时承载桌面应用、浏览器 Web 界面、后端服务,以及终端 Agent/CLI 运行时。本文从仓库根目录的启动脚本和使用说明出发,说明这些运行形态如何组合、开发者如何选择入口,以及环境变量和构建脚本如何影响运行行为。
Purpose and Scope
本文覆盖 ZCode 的整体运行形态、主要开发入口、桌面/Web/CLI 三种运行模式、根目录 workspace 编排、关键环境变量和发行构建边界。重点是“如何启动以及各入口如何协作”,而不是某个具体业务服务或 UI 页面。
插件商店、插件生命周期等领域术语属于独立能力;仓库中的 CONTEXT.md 仅作为术语背景,本文不展开插件安装与运行时实现。具体 Agent 协议、Provider 行为和桌面内部模块也应分别阅读对应 workspace 的文档与源码。
Overview
仓库根目录是一个 pnpm workspace 项目,根 package.json 将开发、构建、类型检查和架构检查统一编排到各个 workspace 包。运行时可以概括为三类:
- 桌面形态:通过
dev:desktop或dev:desktop:test进入 Electron 开发流程;启动前会准备本地运行资源,并构建桌面 Agent。 - Web 形态:通过
dev:web并行启动@zcode/server与@zcode/web。README 明确给出默认 Web 端口5173、后端端口3030,并将/ws与普通/api请求代理到本地后端。 - 命令行形态:发行包统一使用
zcode命令;无参数进入 TUI,首参数为--web时启动 Web,其他参数交给既有 Agent CLI。源码开发则直接使用@zcode/cli的 workspace 入口。
这种组织方式的设计意图是将共享的 Agent、服务和 UI 能力放在 workspace 中复用,同时给桌面开发、浏览器开发和发行版验证提供不同的薄入口。根脚本负责组合顺序,具体行为仍由各 package 的脚本实现。
Architecture
Source: package.json;README.md
图中的关系直接来自根脚本和 README:dev:web 使用 concurrently 并行执行 server 与 web;桌面命令通过 scripts/dev-desktop-env.mjs 选择环境;CLI 目录位于 apps/zcode-cli/,并与仓库一起发布。这里没有把未在已读取材料中确认的内部类或 HTTP handler 绘入图中。
运行形态与入口
桌面开发
根脚本把 dev:desktop 定义为生产配置桌面开发的别名,而测试配置使用独立入口。README 说明,桌面启动脚本会准备本地运行资源、构建桌面 Agent,然后启动 Electron 和源码监听;因此桌面开发不是单纯启动一个前端 dev server,而是包含运行时资源准备的组合流程。
1pnpm dev:desktop
2
3# 使用测试环境
4pnpm dev:desktop:testSource: README.md
独立数据目录通过 ZCODE_DATA_BASE_DIR 注入。这样可以把开发数据与默认用户数据隔离,适合测试不同环境或并行运行多个开发实例。
Web 开发
dev:web 使用 concurrently -k 启动两个进程:后端 workspace 的 dev 脚本和 Web workspace 的 dev 脚本。-k 表示其中一个进程结束时终止并行任务,避免前后端只剩一个进程继续运行而造成误判。
1pnpm dev:web
2
3# 指定后端工作区(macOS / Linux)
4ZCODE_SERVER_WORKSPACE=/path/to/project pnpm dev:webSource: README.md
README 给出的本地拓扑是:浏览器访问 http://localhost:5173,一般 API 与 WebSocket 通过代理到 http://localhost:3030;OAuth token 路由则单独代理到当前配置的产品服务。这里的代理划分意味着 Web 开发可以保持浏览器端同源访问,同时把本地开发请求交给本地 server。
CLI 与统一发行命令
发行包的统一命令根据参数选择 TUI、Web 或 Agent CLI。源码开发时,@zcode/cli 的入口更直接,不经过发行包的 --web 分流。
1# 默认进入终端交互界面
2zcode
3
4# 启动 Web 界面
5zcode --web
6
7# 指定项目和端口,不自动打开浏览器
8zcode --web --workspace /path/to/project --port 3030 --no-openSource: README.md
统一发行命令的价值在于把 TUI、Web 和 Agent 放入同一个本地发行物;但源码开发仍保留 workspace 级入口,以便只重建发生变化的 CLI 及其依赖。
Core Flow
下面的流程展示一次典型的 Web 开发启动路径:根脚本并行拉起两个 workspace,浏览器请求到达 Web dev server 后,/ws 与 /api 再被代理到本地后端。
Source: package.json;README.md
桌面流程则不同:先准备资源并构建桌面 Agent,再启动 Electron;CLI 发行流程也不等价于 Web 开发流程,因为发行构建会依次构建 CLI/TUI、后端和 Web,并收集运行时依赖后组装发行包。
配置与数据目录
根 README 列出的运行时变量如下。它们的共同特点是通过启动命令注入,不由根脚本硬编码;因此同一套入口可以在不同工作区、数据目录和服务配置下复用。
| 配置项 | 用途 | 证据与边界 |
|---|---|---|
ZCODE_DATA_BASE_DIR | 应用数据基目录,数据写入其下的 .zcode/ | README 明确用于桌面开发数据隔离 |
ZCODE_SERVER_WORKSPACE | Web 后端的工作区路径 | README 示例为 macOS/Linux 环境变量 |
ZCODE_BUILTIN_PROVIDER_CONFIG_FILE | 本地 Provider 配置文件路径;未设置时使用内置配置 | 根 README 只确认配置语义,Provider 内部解析不在本文范围 |
ZCODE_DIST_BASE_URL | 命令行安装脚本使用的下载根地址 | build:zcode 打包时也要求提供或通过 --base-url 传入 |
ZCODE_SERVER_AUTH_TOKEN | 直接启动通用 Web 服务时的 API/WebSocket 认证令牌 | 通过程序接口创建服务时对应选项名为 authToken |
例如,桌面测试环境可以使用独立数据目录:
ZCODE_DATA_BASE_DIR="$HOME/.zcode-dev-home" pnpm dev:desktop:testSource: README.md
Web 发行模式还涉及认证与监听地址:README 说明 CLI Web 模式默认监听 127.0.0.1、默认不启用访问令牌;使用非本机监听地址时默认生成令牌,也可用 --token 或 --no-token 覆盖。直接启动通用 Web 服务时,则使用 ZCODE_SERVER_AUTH_TOKEN。
构建、检查与发行
根脚本把构建和质量门禁分为几个层次:
pnpm build递归执行各 workspace 的构建脚本。pnpm build:bootstrap构建packages/*,排除 desktop,再单独执行桌面无运行时资源构建。pnpm typecheck对 RPC、Provider、shared、services、client、server、CLI、UI、Web 和 desktop host 配置执行 TypeScript 项目检查。pnpm verify:pre-push串联 lint 与变更范围架构检查。pnpm architecture:check、architecture:report和architecture:baseline:update提供架构约束检查与基线维护。
1"build": "pnpm -r build",
2"build:bootstrap": "pnpm -r --filter \"./packages/*\" --filter \"!@zcode/desktop\" build && pnpm --filter @zcode/desktop build:no-runtime-assets",
3"typecheck": "tsc -b packages/rpc packages/provider packages/provider-node packages/shared packages/services packages/client packages/server packages/zcode-server-cli packages/ui packages/web packages/desktop/tsconfig.host.json",
4"verify:pre-push": "pnpm run lint && pnpm run architecture:check -- --changed"Source: package.json
桌面 bundle 使用 bundle:desktop,支持 --os 与 --arch;README 记录的默认目标是 macOS arm64,默认输出目录为 packages/desktop/dist/。命令行发行构建则使用 build:zcode,输出目录为 dist/zcode/,并可用 --skip-build 只重新组包。
1pnpm bundle:desktop
2
3# 指定目标平台与 CPU 架构
4pnpm bundle:desktop -- --os win --arch x64
5
6pnpm build:zcode --base-url https://downloads.example.com/zcode/
7pnpm build:zcode --skip-build失败模式、边界与运维注意事项
端口、监听地址与认证
Web 开发依赖默认的 5173/3030 拓扑;如果后端端口、代理或工作区配置被改变,应以实际启动输出和当前 workspace 配置为准。CLI Web 模式的 --port、--host、--token 和 --no-token 会影响可访问性与安全边界:本机监听适合开发,局域网监听时应保留令牌保护,除非有明确理由关闭。
数据隔离
ZCODE_DATA_BASE_DIR 只改变应用数据基目录,并不等价于改变项目工作区。前者用于隔离 .zcode/ 数据,后者通过 ZCODE_SERVER_WORKSPACE 或 CLI --workspace 指定服务/会话处理的项目路径。把两者混淆可能导致“代码项目已切换但本地应用状态仍共享”的开发体验。
远程工作区
README 说明 SSH/WSL 开发需要先执行 bootstrap:with-remote 准备远程资源;开发态资源来自本地 packages/desktop/mock-cdn 和本地构建产物,再经 SFTP 上传到远程,不访问 CDN。该流程属于桌面远程能力的运维前置条件,不能用普通 bootstrap 的本地默认行为替代。
版本前置条件
README 要求 Git、Node.js 24.14.0 和 pnpm 10.33.2,版本以 mise.toml 为准;根 package.json 同时声明 Node >=24.0.0 与 pnpm 10.33.2。依赖版本不满足时,优先检查工具链而不是修改业务源码。
扩展点与边界
根级扩展点主要是脚本编排:新增 workspace 能力时,应在对应 package 提供自己的 dev/build 脚本,再由根 package.json 通过 pnpm filter 或递归命令接入。需要改变桌面环境选择时,入口集中在 dev:desktop:test、dev:desktop:prod 及其 scripts/dev-desktop-env.mjs 实现;需要改变 Web 联调拓扑时,应同时检查 @zcode/web 的代理配置与 @zcode/server 的监听配置,而不是只修改根命令。
现有根脚本还为依赖图、依赖引用、架构报告、lint、格式化和 release 提供独立命令。它们构成工程化扩展面,但具体检查规则、服务 API 和插件机制不在当前“项目概览与运行形态”页面中展开。
Usage Examples
源码 CLI 开发
1pnpm --filter @zcode/cli dev --help
2pnpm --filter @zcode/cli dev
3
4# 构建 CLI 及其 workspace 依赖
5pnpm --filter @zcode/cli... build
6node apps/zcode-cli/packages/cli/dist/zcode.cjs --helpSource: README.md
基础初始化
pnpm bootstrapSource: README.md
bootstrap 适合第一次初始化:README 说明它会安装 workspace 依赖、准备桌面本地运行资源,再执行 build:bootstrap。如果需要远程资源,应改用 bootstrap:with-remote;如果只需要浏览器开发,则可直接安装依赖后使用 dev:web。
命令参考
根目录可确认的公共入口如下;这些是脚本签名而非 TypeScript API,因此参数语义以 README 的命令示例和 package script 定义为准。
| 命令 | 作用 | 适用场景 |
|---|---|---|
pnpm bootstrap | 安装 workspace 依赖、准备桌面本地资源并执行 bootstrap 构建 | 首次初始化 |
pnpm dev:desktop | 使用生产配置启动桌面开发流程 | Electron 桌面开发 |
pnpm dev:desktop:test | 使用测试环境启动桌面开发流程 | 测试配置或隔离数据 |
pnpm dev:web | 并行启动 Web 与 server dev 进程 | 浏览器端开发 |
pnpm build | 递归执行 workspace 构建 | 全仓库构建 |
pnpm typecheck | 对指定项目引用执行 TypeScript 检查 | 类型质量门禁 |
pnpm bundle:desktop | 打包桌面发行物 | 本地桌面发行验证 |
pnpm build:zcode | 组装 CLI/Web/Agent 命令行发行包 | 命令行发行构建 |
根脚本中没有为运行时服务声明 HTTP endpoint 级别的 API 签名;本文因此不对 server 内部路由、返回结构或异常类型作推断。要记录这些细节,需要继续阅读 packages/server 和相关共享协议源码。
性能与操作建议
- Web 开发采用并行进程,减少手动分别启动前后端的成本;
concurrently -k也避免一端退出后另一端孤立运行。 - CLI 和桌面构建均支持复用已有产物或准备本地资源,
build:zcode --skip-build适合只验证重新组包的场景。 - 远程开发先准备 mock-CDN/远程资源,再启动桌面应用,避免开发过程中依赖外部 CDN。
pnpm typecheck和架构检查覆盖多个 workspace,适合在提交前捕获跨包接口和层次违规;根脚本明确把它们纳入verify:pre-push。- 本页没有发现连接池、缓存、重试、并发锁或持久化事务实现;这些实现细节不应从运行入口文档推导。
测试与验证边界
从已读取的根配置和 README 可以确认的验证方式包括:dev:desktop:test 测试环境启动、typecheck 类型检查、lint/格式化,以及 architecture:check -- --changed 的变更架构检查。具体单元测试数量、覆盖率和各服务的集成测试未在本页已读取材料中出现,因此实现细节不足以作进一步结论。