☰
Codeg架构深潜:一套Rust代码如何共享桌面、codeg-server与codeg-mcp三个二进制核心
2026/9/26 6:49:58 网站建设 项目流程

Codeg架构深潜:一套Rust代码如何共享桌面、codeg-server与codeg-mcp三个二进制核心

【免费下载链接】codegCollaborative multi-agent AI coding workspace: aggregate sessions from Claude Code, Codex, OpenCode, Pi, Grok Build, etc. Desktop app, self-hosted server, or Docker.项目地址: https://gitcode.com/gh_mirrors/co/codeg

Codeg(Collaborative multi-agent AI coding workspace)是一款聚合 Claude Code、Codex、OpenCode、Pi、Grok Build 等多智能体会话的协作编码工作台,可运行在桌面端、自建服务器或 Docker 容器里。很多人好奇:同一份功能,为什么既有 Tauri 桌面应用,又有独立的codeg-server和codeg-mcp两个命令行程序?答案藏在 src-tauri/Cargo.toml 里——一个 Rust crate,一个共享库,三个二进制入口。本文带你拆解这套"一份内核、三副面孔"的架构设计。

一个 crate,一份 codeg_lib 共享内核

在 src-tauri/Cargo.toml 中可以看到全部三个二进制的声明:

  • codeg(桌面端)→ src/main.rs,需要tauri-runtimefeature
  • codeg-server(自建服务器)→ src/bin/codeg_server.rs,无 feature 要求
  • codeg-mcp(MCP 伴生进程)→ src/bin/codeg_mcp.rs,无 feature 要求

三者共享同一个库 src-tauri/src/lib.rs(内部命名codeg_lib),里面装着全部真正的业务逻辑:ACP 智能体连接驱动(src-tauri/src/acp/)、SQLite 数据库(src-tauri/src/db/)、各家 Agent 的会话解析器(src-tauri/src/parsers/)、Web 路由(src-tauri/src/web/)、委托协议(src-tauri/src/acp/delegation/)与日志系统(src-tauri/src/logging/)。三个main函数都只是薄薄的启动器,重活全在库里。

Feature Gate:服务器构建为什么不需要 GUI 工具链

桌面端依赖 Tauri、GTK/WebKit(Linux)或 WebView2(Windows),这些是体积庞大且平台专属的依赖。Codeg 的做法是把它们全部挂到tauri-runtimefeature 下(见 Cargo.toml 第18-40行)。构建codeg-server或codeg-mcp时使用--no-default-features,Tauri 相关依赖就整个不参与编译——服务器的 CI 和 Docker 镜像因此无需安装 GTK,构建又快又轻。

但"不编译"不等于"不共享"。以内置浏览器为例(src-tauri/src/browser/mod.rs):

  • agent、types等纯数据类型模块在两种运行时下都会编译——因为服务器上的 MCP 工具和桌面上的浏览器标签页必须使用同一份PageSnapshot等线上格式,"第二份类型副本"只会导致协议悄悄漂移
  • channel、downloads、shim等真正触碰 webview 的模块则用#[cfg(feature = "tauri-runtime")]隔离,仅在桌面端编译

这套"纯逻辑共享、平台层隔离"的粒度,正是三个二进制能共存于一个 crate 的关键。

三个入口,各管一摊

1. 桌面端 codeg:Tauri 应用全家桶

main.rs 只有十几行:先处理一个特例(被当作 git credential helper 调用时直接响应并退出),然后交给 lib.rs 中的 run()。run()负责装配 Tauri Builder:注册单实例、深链接、自动启动、更新器等插件,并把ConnectionManager、TerminalManager、BrowserRegistry、ChatChannelManager等几十个状态句柄注入应用上下文。桌面端额外拥有内置浏览器标签页、原生通知、桌面宠物等能力。

2. codeg-server:无头服务器与 Docker 守护

codeg_server.rs 展示了服务器形态的全部"运维素养":

  • --supervise模式作为 Docker 内的 PID 1 监督者,负责在原地升级后重启 worker(supervise.rs)
  • --credential-helper模式响应 git 凭据协议子调用,避免每次git credential都误启第二个服务器
  • 严格校验CODEG_DATA_DIR并统一数据根目录,防止数据库与上传文件分裂在两个文件系统
  • 装配与桌面端同一个 AppState:数据库、连接管理器、委托 broker、事件总线,再叠加自动化引擎(src-tauri/src/automation/)与工作流引擎(src-tauri/src/work_task/)
  • 最后用 axum 绑定CODEG_HOST:CODEG_PORT(默认 3080)对外服务,浏览器用户看到的"浏览器标签页"是 iframe,由NoBrowserTabs占位

3. codeg-mcp:被 Agent 拉起的伴生进程

codeg_mcp.rs 是三者中最小的,却最关键。当 Codeg 启动某个 Agent CLI 时,会通过 MCP 配置注入生成它,命令行必须携带三个参数:--parent-connection-id、--socket-path、--token。它通过 stdin/stdout 走 JSON-RPC,把delegate_to_agent(多智能体委托)、check_user_feedback(拉取用户中途反馈)、ask_user_question(多选提问卡片)等工具暴露给 LLM,真正的执行经 Unix Domain Socket 回合到父进程。一个巧妙的细节:它内置parent-PID 看门狗,父进程一退出就取消所有在途委托并硬退出,防止孤儿进程在 Windows 上锁住二进制文件、阻断升级。

桌面端安装包中,它由 scripts/prepare-sidecars.mjs 单独以--release --no-default-features交叉编译成 Tauri sidecar,按目标 triple 打包进安装包。

为什么这样设计:共享的回报

  • 零协议漂移:委托 broker 的线上格式、MCP 工具 schema、会话解析逻辑只有一份实现,桌面与服务器天然一致
  • 测试复用:codeg_lib里的单元测试和 tests/ 集成测试(如delegation_e2e_uds.rs、api_integration.rs)同时覆盖三个二进制的行为
  • 单一数据模式:同一个 SQLite schema 与迁移链,会话数据在桌面端和服务器之间无需格式转换
  • 构建隔离:--no-default-features让服务器和 MCP 二进制彻底甩掉 GUI 依赖,Docker 镜像保持精简

关键源码索引

想了解的模块路径
crate 与三个 bin 的声明src-tauri/Cargo.toml
共享内核根模块src-tauri/src/lib.rs
桌面端入口src-tauri/src/main.rs
服务器入口src-tauri/src/bin/codeg_server.rs
MCP 伴生进程入口src-tauri/src/bin/codeg_mcp.rs
Docker 进程监督src-tauri/src/supervise.rs
ACP 连接与委托协议src-tauri/src/acp/
Web 服务路由src-tauri/src/web/
Sidecar 打包脚本src-tauri/scripts/prepare-sidecars.mjs
应用整体说明README.md

下次当你同时打开桌面 Codeg、浏览器里的 codeg-server 页面,又看到某个 Agent 正在调用 MCP 工具时,不妨回想一下:支撑这一切的,是同一份 Rust 内核的三副面孔——feature gate 决定了各自"长什么样",而共享的codeg_lib保证了它们"说的是同一种语言"。

【免费下载链接】codegCollaborative multi-agent AI coding workspace: aggregate sessions from Claude Code, Codex, OpenCode, Pi, Grok Build, etc. Desktop app, self-hosted server, or Docker.项目地址: https://gitcode.com/gh_mirrors/co/codeg

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询