AtomCode v5.0.1 分支改动报告解读:core/bridge 引擎退役与 CodingRuntime 原生运行时迁移实战
人工智能AI Agent代码智能体自主智能体MCP ClientsCLI【免费下载链接】atomcodeClaude Code 的开源替代方案。连接任意大模型编辑代码运行命令自动验证 — 全自动执行。用 Rust 构建极致性能。 An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get Started项目地址https://gitcode.com/atomgit_atomcode/atomcode点击查看免费下载导读本文以 docs/release-v5.0.1-current-branch-change-report.md 为骨架全面解读 AtomCode 在 release/v5.0.1 分支上完成的引擎 driver 调用链 legacy 接口面退役这一核心迁移CLI、TUI、daemon、background、ACP 与 clix 如何统一到 kernel 原生命令、事件与CodingRuntime生命周期边界以及request_user_input新交互如何在不恢复旧协议的前提下接入 native runtime。读完本文你将掌握该分支的提交结构、新旧调用链差异、运行时不变量、测试证据体系与已知问题并能在实际迁移中复用其四态退役判定口径。1. 报告背景与结论0 behind / 5 ahead该报告生成于 2026-07-18对比对象为release/v5.0.1_1cfe4209c当前分支与origin/release/v5.0.19fcc92d9最新远端merge-base 为9fcc92d9。核心结论如下当前分支完整包含最新release/v5.0.1提交关系为0 behind / 5 ahead基线采集时工作区干净报告生成后仅新增本文档本分支的核心修改是彻底退役core/bridge旧引擎调用链将 CLI、TUI、daemon、background、ACP 和 clix 统一到 kernel 原生命令、事件及CodingRuntime生命周期边界最新分支新增的request_user_input已通过 nativeCodingRuntimeEvent::Request / DriverCommand::Respond接入没有恢复已删除的 bridge 或 core legacy driver 协议。报告采用项目的四态口径给出迁移判定判定项当前状态新逻辑已实现是driver 已切换是无 legacy fallback是legacy 调用点、协议、handler、依赖和 bridge crate 已删除是因此引擎 driver 调用链达到legacy 接口面已退役状态。但报告同时谨慎指出最终树尚未完成所有受影响 crate 的完整测试和真实 provider 跨入口 smoke当前测试证据足以支持合并后的编译与定向行为判断不足以替代发布前全量验证。2. 对比基线与规模2.1 基线数据项目结果当前分支release/v5.0.1_1cfe4209c最新远端origin/release/v5.0.19fcc92d9merge-base9fcc92d9分叉关系远端独有 0 个提交当前独有 5 个提交工作区基线采集时 clean生成报告后仅新增本文档当前分支净改动115 文件12,860 / -21,905从净改动规模删除行数远超新增行数可以看出这是一次典型的减法式重构删除约 2.2 万行 legacy 代码新增约 1.3 万行 native 实现整体代码面明显收缩。2.2 当前独有提交提交内容59d4c284refactor(runtime): retire legacy engine bridge81985e9cfix(auth): restore codingplan crypto feature244fba39合并早期release/v5.0.11e923fb7合并request_user_input、TUI、VSCode 等最新改动并完成 native 协议适配cfe4209c合并request_user_input新版单选、多选和自由文本交互报告明确指出真正的本地功能变更集中在前两个提交后三个提交负责持续同步远端并解决新功能与 runtime 退役之间的协议冲突。3. Runtime 与协议退役从 bridge 到 CodingRuntime3.1 旧链路 vs 新链路报告给出的旧调用链legacy bridgedriver - core AgentCommand - atomcode-bridge / daemon adapter - kernel - core AgentEvent - driver新调用链native runtimeCLI / TUI / daemon / background / ACP / clix - CodingRuntimeHandle / DriverCommand - CodingRuntime - kernel AgentCommand / AgentEvent - CodingRuntimeEvent - driver-local projection从源码结构看新链路的核心载体是 crates/atomcode-coding/src/runtime.rsCodingRuntime约 runtime.rs#L1407持有handle、events、task和session四个字段作为唯一 runtime owner 对外暴露CodingRuntimeHandleruntime.rs#L1689是驱动侧的命令入口CodingRuntimeEventruntime.rs#L93是#[non_exhaustive]的原生事件枚举涵盖Agent、Team、VisionPreprocessSuccess/Failed、SteerAcknowledged、CompactionStarted/Finished、RuntimeStopped、Request、TurnFinished、PolicyInterventionResolved等全部不依赖 legacyatomcode-coredriver 协议DriverCommandruntime.rs#L818是原生命令枚举包含Submit、Respond、Cancel、PauseGoal、Compact、SetMode、ReloadProvider、UndoToPrompt、Rewind、StartGoal/StopGoal/StartLoop等被报告称为core AgentCommand channel 在异步 runtime 启动期的原生替代。3.2 实际删除项清单报告明确列出的删除项包括整个atomcode-bridgecrate、Cargo 依赖和 lockfile 记录coreagentdriver 协议及 goal、loop、compression、parallel-edit legacy 实现core v1TurnRunner、permission、loop guard、tool args、datalog、log 旧执行链CLI、TUI、daemon、background 对 bridge/core legacy command/event 的发送和消费daemon 重复 kernel driver、双引擎入口及 mixed legacy/native eventTUI legacy/native 双 endpoint。静态搜索确认生产代码中不再存在以下符号atomcode_bridge spawn_bridged_runtime_with_control BridgedRuntime BridgeConfig atomcode_core::agent::AgentClient atomcode_core::agent::AgentCommand atomcode_core::agent::AgentEvent ATOMCODE_DAEMON_ENGINE DaemonRuntimeEvent::Legacy DaemonRuntimeEvent::Native3.3 生命周期统一CodingRuntime成为唯一 runtime owner统一管理provider 构建、reload 和 reassemblefresh、resume、restore、undo、change directorysession id、working directory、snapshot 和 generationsubmit、steer、cancel、approval 和 shutdowncompact exactly-once terminalgoal/self-paced loop 的互斥、held turn、wakeup 和 terminalbackground、daemon、TUI 和 headless 的统一事件来源。报告同时列出主要不变量invariants一个CodingParts不产生两个 live agentlifecycle 操作由 actor 串行化provider/session 切换失败不得静默回退 fresh sessionpending request 在 cancel、reload、session switch 和 shutdown 时 fail-closedstale generation 事件不得进入 replacement runtimesnapshot、provider、working directory、approval grants 和 gateway affinity 不因 reassemble 丢失。源码中droppingeventscauses a fail-closed shutdownruntime.rs#L1406 附近注释与authorised state 变更前的 fail-closed 顺序runtime.rs#L1306 附近直接印证了 fail-closed 不变量RuntimeRequestruntime.rs#L627携带id、kind、payload和可选snapshot正是 request id 关联与 fail-close 的实现载体。4. Daemon 与 driver 的 native 化Daemon 侧改为使用统一CodingRuntime删除重复的KernelDriver生命周期实现增加 native runtime hostlegacy_convert.rs仅用于历史 session/snapshot 数据转换不能投递旧 engine commandHTTP、SSE、WebSocket 只负责 native runtime event 的传输映射/chat文本模型图片输入复用 VL 预处理策略原图继续用于持久化和缩略图kernel 输入使用 VL 描述。源码佐证位于 crates/atomcode-daemon/src/kernel_runtime.rs该文件开篇即注明Daemon entry points for the unified nativeatomcode_coding::CodingRuntime内部调用CodingRuntime::start_with_session_lease/CodingRuntime::start_with_bootstrap并在事件循环中匹配CodingRuntimeEvent::Agent(...)等原生事件见 kernel_runtime.rs#L235 附近legacy_convert的converge_session仅被用于会话数据收敛kernel_runtime.rs#L103、kernel_runtime.rs#L129。另一个值得注意的行为约定CLI/headless、clix 和 daemon 对无法交互处理的非 approval request 统一返回Null避免工具回合永久挂起。这与request_user_input.rs中null_result()返回 Interactive questions are not supported in this environment. 的实现完全一致。5. request_user_input 合并适配保留产品行为迁移协议接入点最新release/v5.0.1新增的request_user_input是本分支合入的最重要新功能。报告的关键决策是保留其产品行为但将协议接入点迁到 native runtime且没有恢复远端曾新增的 coreAgentEvent::Request / AgentCommand::Respondbridge passthrough。5.1 接入点设计kernel 增加Requester和ToolContext.requestcapability 注册request_user_input默认关闭由ATOMCODE_REQUEST_USER_INPUT控制工具名始终进入 coding allowlist实际 mount 仍以环境开关和注册结果为准persona 提示与工具开关保持一致runtime 关联 request id并在 cancel/reload/shutdown 时 fail-closedTUI 支持 single、multiple、text、自定义文本、Esc、CtrlC 和 bypass 自动跳过single 模式在选项行按 Enter 立即提交不显示单独 Submit 行multiple 模式保留 Submit 行并可附加自由文本CLI/headless、clix 和 daemon 对非交互 request 返回Null。5.2 源码级实现Requester定义在 crates/atomcode-kernel/src/request.rs它是一个thin, cloneable handle exposing ONLY the request round-trip通过RequestFnArcdyn Fn(String, Value) - BoxFuturestatic, Value抽象驱动侧应答且支持RequesterInner::Kernel(RequestCtx)与RequesterInner::Host(RequestFn)两种实现——工具无法区分差异request_user_input无论由谁运行都以同样的方式发问。request_user_input工具本身位于 crates/atomcode-capabilities/src/tools/request_user_input.rsREQUEST_USER_INPUT_KIND request_user_input是通用 request/respond round-trip 的 kind 字符串UserInputModesingle / multiple / text、UserInputRequestquestion、header、mode、options、custom、UserInputResponsedeclined、selected、text、images构成完整协议类型供各 driver 导入MAX_QUESTIONS 4限制单次批量提问数量parse_args/parse_batch负责参数解析并内置弱模型字段修复逻辑fill_default_mode在模型漏传mode时根据options是否为空推断 single/textfill_default_header在 header 缺失时从 question 首行派生短标签HEADER_MAX_CHARS 24且按字符非字节截断保证中文问题不会被拦腰截断选择类模式single/multiple要求非空options数组否则报错legacy 字段custom被统一归一化为true确保用户永远保留自由文本逃生通道null_result()处理无 driver 可展示问题的场景。5.3 测试证据报告 6.1 节记录了cargo test -p atomcode-capabilities -p atomcode-kernel -p atomcode-coding -p atomcode-tuix request_user_input通过capability 10 项、persona 1 项cargo test -p atomcode-tuix user_input19/19 通过覆盖 single/multiple/text、自定义文本、Submit、Esc、CtrlC、bypass、render。工具自身的单测覆盖了选择无 options 报错、缺 mode 推断 single/text、缺 header 派生、批量逐题修复、custom:false归一化为true、选中项与自由文本同时回传、附加图片转发等关键行为见 request_user_input.rs#L576 起的测试模块。5.4 环境开关默认开启可关闭环境变量ATOMCODE_REQUEST_USER_INPUT控制工具的挂载与 persona 提示默认开启可通过0、false、off或空值显式关闭。判定逻辑有两处刻意保持同步的实现工具注册侧crates/atomcode-capabilities/src/tools/mod.rs中request_user_input_on块mod.rs#L249-L272默认 ON0/false/off/empty时跳过注册权威解析侧crates/atomcode-config/src/config/mod.rs::request_user_input_enabled_from_envconfig/mod.rs#L2006-L2025被atomcode-coding的 persona 门控request_user_input_switch_enabledcrates/atomcode-coding/src/persona.rs调用。注意源码注释强调atomcode-config不是atomcode-capabilities在toolsfeature 下的依赖因此两处逻辑是INTENTIONAL DUPLICATION修改时必须同步镜像。此外工具名request_user_input无条件出现在coding_tool_names()允许清单中crates/atomcode-capabilities/src/tools/mod.rs#L147实际 mount 时由注册结果决定——registered ! mounted只有注册成功且名字在 allowlist 中工具才会出现在模型 API 的tools数组里。5.5 与 kernel Request/Respond round-trip 的对接DriverCommand::Respond { id, value }runtime.rs#L820是驱动侧应答入口CodingRuntimeControl::Respond继而将应答投递给 kernel 的AgentCommand::Respond { id, value }见 runtime.rs#L4883 附近。测试中可见CodingRuntimeEvent::Request(RuntimeRequest { id: 7, .. })与AgentCommand::Respond { id: 7, value }的完整 round-trip 断言runtime.rs#L16829、runtime.rs#L16844印证了 request id 关联与应答投递路径。6. AtomGit/GitCode 网关认证下沉请求签名逻辑从 bridge/core 下沉到atomcode-auth和 capabilities provider网关识别按 HTTPS scheme 和精确 host 判断OAuth token、user id、timestamp 和随机 nonce 统一参与签名源码构建暴露 unavailable signer不伪造签名成功官方构建通过atomcode-core/codingplan-crypto - atomcode-auth/codingplan-crypto启用闭源 overlay81985e9c恢复了迁移中遗漏的 feature 声明和依赖透传。源码实现位于 crates/atomcode-auth/src/gateway_crypto.rsRequestSignertrait 定义sign与algorithm_versionSignInput携带 method、path、body、oauth_token、user_id、timestamp_unix 与 16 字节 nonce未启用codingplan-cryptofeature 时使用UnavailableSigneralgorithm_version() 0sign 恒返回SignError::Unavailable启用后RealSigner仍先校验algorithm_version() ! 0避免feature 选择本身不能证明官方 overlay 存在Refuse before entering the public placeholders panic-only sign_v1随后调用atomcode_codingplan_crypto::sign_v1生成签名头。这正是报告所述源码构建暴露 unavailable signer不伪造签名成功的实现依据。7. TUI 与 VSCode 侧改动7.1 TUI使用 runtime control 和 TUI-localUiEvent新增结构化用户输入面板/usage按显示宽度处理 CJK 对齐foreground/background、approval、mode、session replay 和 undo 继续使用统一 runtime。7.2 VSCodechat font family 和输入框字体行为调整provider queue 在无 focused panel 时仍按 session 正确排队和出队approval mode pending 状态不会被 initial state 覆盖session 展示继续按当前 workspace/project 过滤。8. 影响范围评估报告给出的影响面矩阵影响面风险说明Runtime 生命周期高provider、session、snapshot、cancel、shutdown 和 generation 全部跨 crate 改动Driver parity高CLI、TUI、daemon、background、ACP、clix 同时切换协议Approval/request高request id 关联或 fail-close 出错会导致越权、误拒绝或回合挂起Goal/loop高与 held turn、snapshot、continuation 和 wakeup 同生命周期Daemon transport中HTTP/SSE/WebSocket 事件映射改变但不再持有第二套 runtimeProvider/auth中网关签名位置和 feature 透传改变TUI/VSCode UI中输入面板、队列、审批状态和渲染路径变化构建依赖中bridge crate 删除、core/coding/capabilities 依赖边界变化文档低部分旧 README 架构描述尚未同步9. 已知问题与审计结论9.1 文档静态验收项不完全一致迁移设计文档把KernelRuntimeAdapter列入最终静态零命中项但当前atomcode-coding/src/runtime.rs仍保留同名内部类型见 runtime.rs#L3678。该类型服务于 kernel agent 管理和 compaction提供suspend_compaction、resume_compaction、stop_agent、replace_agent、shutdown等管理方法不依赖 bridge也不能投递 core legacy command因此不构成 legacy fallback但文档的字面验收标准与代码不一致应修正文档或重命名该内部类型。9.2 README 架构描述陈旧中英文 README 仍描述 coreAgentLoop通过AgentCommand / AgentEvent与 TUI 通信与当前CodingRuntime架构不一致。这不影响运行时行为但会误导后续维护者。9.3 删除旧测试后的覆盖迁移bridge stream timeout、core turn runner、hook integration 等旧链路测试随实现删除是合理的对应行为必须由 kernel、capabilities、CodingRuntime 和各 driver parity 测试继续覆盖。不能只依据删除代码量判断退役完成。10. 测试依据与未完成验证10.1 最终合并树cfe4209c的测试证据命令结果覆盖cargo check -p atomcode -p atomcode-daemon -p atomcode-clix --all-targets通过CLI、daemon、clix 及依赖链 all-target 编译cargo test -p atomcode-capabilities -p atomcode-kernel -p atomcode-coding -p atomcode-tuix request_user_input通过capability 10 项、persona 1 项其余同名过滤项无失败cargo test -p atomcode-tuix user_input19/19 通过single/multiple/text、自定义文本、Submit、Esc、CtrlC、bypass、rendernpm run test:webview通过webview test runner 全部通过可见 31 项 node:test 断言通过并包含静默 provider queue regression编译期间存在一个既有 warningatomcode-kernel/tests/liveness.rs的SilentStreamProviderunused import。该 warning 不影响验证结果但应在后续维护中清理。10.2 迁移提交父树的补充测试证据在合入最新版request_user_input前曾从干净HEAD快照执行更广范围测试范围结果CLI50 个 lib、25 个 main、12 个 integration 测试通过atomcode-auth33 项通过atomcode-capabilities748 项通过唯一 askpass Unix socket 用例因沙箱权限失败沙箱外单独复核通过atomcode-coding161 个单测通过coding integrationassemble、cache prefix、full assembly、overflow recovery、plan mode、sensitive path 通过permission grants在仓库工作区单独复核通过runtime requestrequest 关联及 shutdown fail-close 定向测试通过kernel requesterRequest/Respond round-trip 定向测试通过报告强调上述补充结果证明迁移主体已有较广测试基础但它们不是最终cfe4209c全量测试的替代品。10.3 未完成验证清单最终合并树尚未运行所有受影响 crate 的完整cargo test --all-targets尚未完成真实 provider 的 CLI、TUI、daemon 跨入口 smoke尚未在真实交互中覆盖 approval、cancel、resume、provider reload、图片 VL 预处理和request_user_input全模式组合未执行发布构建中的闭源codingplan-cryptooverlay 验证。11. 迁移状态与唯一下一步11.1 迁移状态总表判定项当前状态逻辑已实现是driver 已切换是legacy fallback 仍可达否legacy 接口面已退役是最新release/v5.0.1已合入是0 behind原代码工作区可提交是当前仅新增本文档发布级全量测试完成否11.2 唯一下一步在磁盘空间充足的环境中对最终cfe4209c运行受影响 crate 的完整 all-target 测试然后使用真实 provider 做一次 CLI、TUI、daemon 跨入口 smoke覆盖 turn、approval、cancel、resume、provider reload、图片输入和request_user_input只有这一步完成后才能把当前结论从编译与定向行为判断提升为发布级验证完成。12. 可复用的工程方法论从这份报告可以提炼出适用于大型 Rust 工作区引擎退役迁移的实践要点四态退役口径以新逻辑已实现 / driver 已切换 / 无 legacy fallback / legacy 接口面已删除四个状态判定迁移进度避免只凭代码删除量下结论静态搜索符号清单用一组精确符号如BridgedRuntime、AgentClient、DaemonRuntimeEvent::Legacy做全仓零命中验证作为接口面退役的可审计证据双份 env 开关逻辑显式同步ATOMCODE_REQUEST_USER_INPUT在 capabilities 注册侧与 config 解析侧刻意复制实现并以注释声明INTENTIONAL DUPLICATION改动必须镜像防止依赖方向错误的隐式耦合fail-closed 优先级pending request 在 cancel/reload/session switch/shutdown 时一律 fail-closed杜绝越权、误拒绝与回合挂起区分实现删除与行为覆盖旧测试随实现删除合理但行为必须由新链路测试继续覆盖报告明确警告不能只依据删除代码量判断退役完成文档验收标准与代码保持同步KernelRuntimeAdapter字面验收与实现的偏差被明确记录为待修正项避免静态验收项沦为无效约束。赞分享人工智能AI Agent代码智能体自主智能体MCP ClientsCLI【免费下载链接】atomcodeClaude Code 的开源替代方案。连接任意大模型编辑代码运行命令自动验证 — 全自动执行。用 Rust 构建极致性能。 An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get Started项目地址https://gitcode.com/atomgit_atomcode/atomcode点击查看免费下载相关推荐atomcode v5.0.0 bridge/core 退役路线图从 v1 引擎到 kernel 原生协议的渐进迁移实战atomcode v5.0.0 bridge/core 退役路线图从 v1 引擎到 kernel 原生协议的渐进迁移实战 导读 本文以 atomcode 开人工智能AI Agent代码智能体自主智能体MCP ClientsCLIatomcode 的 CodingRuntime 原生驱动全量迁移从 bridge 双引擎到单一运行时所有者的架构落地atomcode 的 CodingRuntime 原生驱动全量迁移从 bridge 双引擎到单一运行时所有者的架构落地 导读 本文以 atomcode 仓库中人工智能AI Agent代码智能体自主智能体MCP ClientsCLIAtomCode /compact 原生迁移复盘从 legacy bridge 协议到 kernel-native runtime 的垂直退役实战手册AtomCode /compact 原生迁移复盘从 legacy bridge 协议到 kernel native runtime 的垂直退役实战手册 本文基人工智能AI Agent代码智能体自主智能体MCP ClientsCLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考