开发
本页面向从源码构建 Codeg —— 无论是为了对它做二次开发、自行打包,还是运行一个未发布的构建。Codeg 是单个 Cargo 工作区,产出三个 Rust 二进制文件外加一个 Next.js 前端,其工具链也反映了这一点:你既需要 Node 环境,也需要 Rust 环境。下面的命令正是项目自身所用的;除非另有说明,请从仓库根目录运行它们。
前置要求
| 工具 | 版本 | 用于 |
|---|---|---|
| Node.js | >=22(推荐) | 前端和 pnpm 脚本 |
| pnpm | >=10 | 仓库锁定使用的包管理器 |
| Rust | stable(2021 版) | codeg_lib 核心和全部三个二进制文件 |
| Tauri 2 构建依赖 | — | 仅 桌面 二进制文件(codeg) |
只有在构建桌面应用时才需要 Tauri 系统库;服务器和 MCP 伴生程序无需它们即可编译。在 Debian/Ubuntu 上:
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
patchelf(macOS 和 Windows 有各自的 Tauri 前置要求 —— 参见 Tauri 2 前置要求指南。)
然后安装一次 JavaScript 依赖:
pnpm install三个二进制文件
一切都从单个工作区、在共享的 codeg_lib crate 之上构建 —— 架构页面解释了这一设计。二进制文件之间的差异在于一个 Cargo 特性开关:默认特性构建开启了 Tauri GUI 的桌面应用,而 --no-default-features 则将同一核心以无头方式编译为服务器和伴生程序。
| 二进制文件 | 它是什么 | 构建 |
|---|---|---|
codeg | Tauri 桌面应用(窗口、托盘、更新器) | pnpm tauri build · pnpm tauri dev |
codeg-server | 用于浏览器 / 无头场景的独立 HTTP + WebSocket 服务器 | pnpm server:build · pnpm server:dev |
codeg-mcp | 按次启动的 stdio MCP 伴生程序,为智能体 CLI 提供 delegate_to_agent 工具 | pnpm tauri:prepare-sidecars |
codeg-mcp 必须紧挨其父进程
运行时,伴生程序会在 codeg / codeg-server 旁边被查找。pnpm tauri dev 和 pnpm tauri build 会为你构建并放置它,安装程序和 Docker 镜像也是如此。如果你把它构建在了别处 —— 或者运行的是一个手工构建的 codeg-server —— 请用 CODEG_MCP_BIN=/abs/path/codeg-mcp 让运行时指向它。当它无法被找到时,多智能体委派会被跳过(记录一条警告),其余一切照常工作。
日常命令
从最轻量到最完整的常见流程:
# Frontend only — Next.js dev server, no Rust involved
pnpm dev
# Frontend static export to out/
pnpm build
# Full desktop app — Tauri + Next.js; builds the codeg-mcp sidecar automatically
pnpm tauri dev
# Desktop release build — bundles codeg-mcp as an externalBin
pnpm tauri build
# Standalone server — no Tauri / GUI required
pnpm server:dev
pnpm server:build # release binary → src-tauri/target/release/codeg-server
# Build the codeg-mcp companion on its own, for the host triple
pnpm tauri:prepare-sidecars # output: src-tauri/binaries/codeg-mcp-<triple>当你在迭代前端、且不需要委派时,跳过 sidecar 步骤可以节省时间:
CODEG_SKIP_SIDECAR=1 pnpm tauri dev那样的构建禁用了委派,因此对于任何你打算交付的东西,请不要设置该标志。
检查与测试
前端,从仓库根目录:
pnpm eslint . # lint
pnpm test # vitest, once
pnpm test:watch # vitest, watch mode
pnpm test:coverage # with coverageRust,从 src-tauri/ 目录 —— 同样的特性开关拆分依然适用,因此每个二进制文件都在它实际交付时所处的模式下受到检查:
cargo check # desktop (default features)
cargo check --no-default-features --bin codeg-server # server mode
cargo check --no-default-features --bin codeg-mcp # MCP companion
cargo clippy --all-targets --features test-utils -- -D warnings
cargo test --features test-utils # desktop (incl. integration)
cargo test --no-default-features --bin codeg-server --lib # server mode
cargo insta review # accept parser snapshot updatestest-utils 特性启用集成测试所需的测试辅助工具和固件;cargo insta review 用于当对话解析器的某项改动移动了已存储的快照、而你想接受新输出时。
从源码构建服务器
要在没有桌面工具链的情况下产出一个可运行的服务器,先构建前端,然后并排构建两个无头二进制文件:
pnpm install && pnpm build # frontend → out/
cd src-tauri
cargo build --release --bin codeg-server --no-default-features
cargo build --release --bin codeg-mcp --no-default-features # delegation companion
CODEG_STATIC_DIR=../out ./target/release/codeg-server # codeg-mcp picked up as a siblingCODEG_STATIC_DIR 让服务器指向你刚构建的静态导出产物。由于两个二进制文件都落在 target/release/ 中,服务器会自动将 codeg-mcp 作为同级找到;若把它们分散到不同目录,你就又需要 CODEG_MCP_BIN 了。至于运行服务器的已打包方式 —— 安装脚本、发布 tarball、Docker —— 参见部署,环境变量的完整清单则见配置。
让运行中的服务器指向一个新构建的伴生程序
只重新构建了 codeg-mcp,并想让一个手动启动的 codeg-server 无需重装即可使用它?导出它的绝对路径:
export CODEG_MCP_BIN=$(pwd)/src-tauri/target/release/codeg-mcp值得了解
- Node 用于前端,Rust 用于核心。 每次构建都需要两套工具链;只有桌面二进制文件额外需要 Tauri 系统库。
- 默认特性 = 桌面,
--no-default-features= 无头。 正是这一个特性开关把共享核心变成 GUI 应用或服务器 / 伴生程序 —— 它是贯穿本页每一条构建和检查命令的主线。 pnpm tauri dev/build会处理 sidecar。 你很少直接调用tauri:prepare-sidecars;它作为桌面构建的一部分运行,而当你不需要委派时,CODEG_SKIP_SIDECAR=1可将其跳过。- 让
codeg-mcp紧挨其父进程。 最常见的源码构建坑 —— 如果委派悄无声息地什么都不做,检查一下伴生程序是否是同级,或者CODEG_MCP_BIN是否已设置。