Codeg架构深潜:一套Rust代码如何共享桌面、codeg-server与codeg-mcp三个二进制核心
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/codegCodegCollaborative 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-runtimefeaturecodeg-server自建服务器→ src/bin/codeg_server.rs无 feature 要求codeg-mcpMCP 伴生进程→ 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/WebKitLinux或 WebView2Windows这些是体积庞大且平台专属的依赖。Codeg 的做法是把它们全部挂到tauri-runtimefeature 下见 Cargo.toml 第18-40行。构建codeg-server或codeg-mcp时使用--no-default-featuresTauri 相关依赖就整个不参与编译——服务器的 CI 和 Docker 镜像因此无需安装 GTK构建又快又轻。但不编译不等于不共享。以内置浏览器为例src-tauri/src/browser/mod.rsagent、types等纯数据类型模块在两种运行时下都会编译——因为服务器上的 MCP 工具和桌面上的浏览器标签页必须使用同一份PageSnapshot等线上格式第二份类型副本只会导致协议悄悄漂移channel、downloads、shim等真正触碰 webview 的模块则用#[cfg(feature tauri-runtime)]隔离仅在桌面端编译这套纯逻辑共享、平台层隔离的粒度正是三个二进制能共存于一个 crate 的关键。三个入口各管一摊1. 桌面端 codegTauri 应用全家桶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 监督者负责在原地升级后重启 workersupervise.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.rsMCP 伴生进程入口src-tauri/src/bin/codeg_mcp.rsDocker 进程监督src-tauri/src/supervise.rsACP 连接与委托协议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),仅供参考