Skip to content

AtomCode v5.0.9 → v5.2.3 版本差异全量分析 ​

基于 strings / readelf / 运行时验证差异对比的跨版本逆向分析 2026-10-14 前置报告:05-version-diff-v4.25.5-to-v5.0.9.md


概览 ​

属性v5.0.9 (旧)v5.2.3 (新)
大小34,166,592 字节47,261,520 字节
增长—+13,094,928 字节 (+38.3%)
MD5f7aa98704af26f37e83a4653d0f49ace0d7eae0f9f36e249ee17324e34b10dcb
SHA-256—14e223e47ba9b7252ff03c9028f03581174ed7755c40b62a28a6601fcade8e9f
strings (-n 6)42,353 行71,877 行
strings 增长—+29,524 行 (+69.7%)
独有 strings—+31,943 行(移除 2,419 行)
Rust 模块路径210 个353 个
结构体元数据—+315 个 struct 定义(含 192 个带元素计数)

ELF 段尺寸对比 ​

段v5.0.9v5.2.3变化
.text11,218,74215,453,510+4,234,768 (+37.7%)
.rodata19,352,22026,954,396+7,602,176 (+39.3%)
.eh_frame1,683,7162,347,296+663,580 (+39.4%)
.data.rel.ro663,152866,112+202,960 (+30.6%)
.data24,60037,448+12,848 (+52.2%)

结论:v5.0.9 → v5.2.3 是架构级重写,而非常规功能迭代。新增 3 个全新 crate (atomcode-plexus、atomcode-harness、atomcode-tui),移除 15 个旧模块,跨 v5.1.0 / v5.2.0 / v5.2.2 / v5.2.3 四个发布节点完成。字符串增长 69.7%、结构体 +315、.rodata +39% 均远超 v4.25.5 → v5.0.9 的增量,证实这是一次运行时架构从"单体引擎"向 "一切皆插件的行级运行时"的迁移。


发布路线(v5.0.9 → v5.2.3) ​

版本日期关键内容
v5.1.02026-09-18OpenRouter 一键接入、Code Rewind(opt-in 重新启用)、Bash 后台任务、权限预授权、OpenAI Responses API、Ollama 上下文钉住、Kotlin 代码图谱、/worklog、local 记忆层
v5.2.02026-10-01全新 TUI 默认界面、atomcode-plexus 行级运行时、异步 Agent 团队、后台会话 /bg、可配置安全授权、多语言界面、MCP 管理面板
v5.2.12026-10-01回退版本:整体回退到 v5.1.0 基线(规避 v5.2.0 问题)
v5.2.22026-10-10重新发布(覆盖 v5.1.0 以来全部改动):分层运行时、会话事件化、全新全屏界面为默认
v5.2.32026-10-13Anthropic 原生缓存(4 断点)、回复断流自动续接、静默超时连接恢复(180s 预算)、TUI 滚动条/复制/置顶提问、WebUI KaTeX 公式渲染、SSH 显示修复、Windows 兼容

⚠️ 注意:v5.2.1 是一次回退版本(基线回退到 v5.1.0),v5.2.2 才重新发布完整功能。 因此 v5.2.3 实际是"v5.1.0 架构改进 + v5.2.0/5.2.2 架构重写 + v5.2.3 稳定性加固"的总和。 本报告分析的二进制(v5.2.3)是最终交付形态。


1. 全新 Crate:atomcode-plexus — "一切皆插件"行级运行时(最大架构革新) ​

1.1 源码模块(全新 crate) ​

crates/atomcode-plexus/src/app.rs        ← 应用装配
crates/atomcode-plexus/src/context.rs    ← 行上下文
crates/atomcode-plexus/src/event.rs      ← 事件总线
crates/atomcode-plexus/src/fiber.rs      ← 执行单元(fiber)
crates/atomcode-plexus/src/plugin.rs     ← 插件行定义
crates/atomcode-plexus/src/realm.rs      ← 隔离域(realm)
crates/atomcode-plexus/src/service.rs    ← 服务槽

v5.0.9 中不存在 atomcode-plexus crate,此运行时为全新加入。

1.2 核心概念(从二进制字符串还原) ​

概念二进制证据
plugin row(插件行)This agent is assembled at runtime from plugin rows on the plexus kernel. There is no fixed feature set — 每个面板、工具、命令都是一行
realm(隔离域)#in-process, isolated realm, tools: ...、run a child agent in an isolated realm, with a reduced tool set、cannot claim it (unload the incumbent or isolate a realm)
fiber(执行单元)fiber status poisoned、fiber ledger poisoned、fiber table poisoned、``rootrealm tree poisoned
event(事件)event bus poisoned、crates/atomcode-plexus/src/event.rs
装配mounting stalled with unsatisfied dependencies:、insertpatchroot fiber always exists、RawEntry / RawPatch / RawRemove

1.3 能力即行的注册机制 ​

rust
struct RawEntry   // 4 元素 — 行条目
struct RawPatch   // 4 元素 — 行补丁
struct RawRemove  // 1 元素 — 行移除

工具、技能、斜杠命令、MCP 服务器、审批闸门、压缩策略、人格(persona)、code_review、 tool-web 等都以行注册,可在运行中替换或卸载单个行。

1.4 注入机制(依赖注入,来自 --tui --audit 运行时验证) ​

· `tui-brand` is provided but nothing injects it
· `tui-mcp-phase` is provided but nothing injects it
· `tui-rasters` is provided but nothing injects it
· `tui-repaint` is provided but nothing injects it
· `tui-team-roster` is provided but nothing injects it

no defects; 5 note(s) above

→ TUI 组件通过**注入器(injector)**注册为行。--tui --audit 可检查屏幕组成是否健全。


2. 全新 Crate:atomcode-harness — 分层运行时(42 个插件行) ​

2.1 源码模块(全新 crate) ​

crates/atomcode-harness/src/agent.rs            crates/atomcode-harness/src/commands.rs
crates/atomcode-harness/src/diagnostics.rs      crates/atomcode-harness/src/exec.rs
crates/atomcode-harness/src/feed.rs             crates/atomcode-harness/src/model_source.rs
crates/atomcode-harness/src/seams.rs            crates/atomcode-harness/src/session.rs

2.2 42 个插件行(plugins/ 子模块全清单) ​

agent_loop / agents / ask / capabilities / compaction / findings / handle /
image_budget / llm / loop_policy / opener / persona / policy_rows / policy /
product_dirs / reasoning_effort / recall / recovery / registries /
self_knowledge / session / session_title / subagent / team / todo_reminder /
tool_exec / tools / trace / truncation / ui_jsonrpc / ui / ui_web / world /
world_tools

2.3 插件行标识符(二进制证据) ​

agent-loop          system-prompt       tool-search         ui-handle
agent-handle        user-questions      tool-driver         llm-atomcode-config
llm-openai-compat   llm-injected        llm-replay          llm-retry
llm-request-timeout llm-stream-recovery llm-rate-limit      llm-utility-selected
self-knowledge      persona-atomcode    persona-coding      product-dirs
reasoning-effort    reasoning-filter    compaction-overflow compaction-tail
image-budget        tool-exec-parallel  tool-open-file-workspace
subagent-in-process subagents           session-persistence

2.4 插件行语义(从提示文本还原) ​

行 ID职责
self-knowledge"This agent is assembled at runtime from plugin rows on the plexus kernel" — 自我认知
ui-handle"drive this harness through the AgentHandle protocol the shipped UIs speak"
agent-handle"grants agent-handle"
user-questions"user-questionstool-driver"
llm-stream-recovery"keep what a broken stream produced and continue from it"
llm-request-timeout"bound one model request so a turn cannot hang forever"
llm-retry"…"
image-budget"how many image bytes one model request carries; the oldest are left out first"
compaction-overflow / compaction-tail上下文压缩策略
tool-exec-parallel"overlap the tool calls that declare themselves safe to overlap"
token-budget"send a turn once it has spent enough prompt tokens"
delegation-bounds"declarative allow/deny rules over tool calls"

2.5 装配链收敛 ​

  • 移除:ATOMCODE_ENGINE 引擎选择开关(二进制中已无此字符串)
  • 移除:手写中间件链、crates/atomcode-kernel/src/agent.rs(旧内核)
  • 保留唯一路径:parts::prepare → runtime::mount(行清单装配)

3. 全新 Crate:atomcode-tui — 全屏终端界面(默认界面) ​

3.1 源码模块(全新 crate,44+ 文件) ​

crates/atomcode-tui/src/ansi.rs          crates/atomcode-tui/src/ask.rs
crates/atomcode-tui/src/attach.rs        crates/atomcode-tui/src/block.rs
crates/atomcode-tui/src/command.rs       crates/atomcode-tui/src/commands.rs
crates/atomcode-tui/src/content.rs       crates/atomcode-tui/src/diff.rs
crates/atomcode-tui/src/el.rs            crates/atomcode-tui/src/frame.rs
crates/atomcode-tui/src/host.rs          crates/atomcode-tui/src/keymap.rs
crates/atomcode-tui/src/launch.rs        crates/atomcode-tui/src/layout.rs
crates/atomcode-tui/src/markdown/mod.rs  crates/atomcode-tui/src/markdown/table.rs
crates/atomcode-tui/src/mcp.rs           crates/atomcode-tui/src/menu.rs
crates/atomcode-tui/src/module.rs        crates/atomcode-tui/src/moment.rs
crates/atomcode-tui/src/overlay.rs       crates/atomcode-tui/src/plugin.rs
crates/atomcode-tui/src/plugins.rs       crates/atomcode-tui/src/providers.rs
crates/atomcode-tui/src/qr.rs            crates/atomcode-tui/src/raster.rs
crates/atomcode-tui/src/rows.rs          crates/atomcode-tui/src/scrollbar.rs
crates/atomcode-tui/src/search.rs        crates/atomcode-tui/src/secret.rs
crates/atomcode-tui/src/settings.rs      crates/atomcode-tui/src/sheet.rs
crates/atomcode-tui/src/surface.rs       crates/atomcode-tui/src/text.rs
crates/atomcode-tui/src/theme.rs         crates/atomcode-tui/src/wizard.rs
crates/atomcode-tui/src/modules/ask.rs        crates/atomcode-tui/src/modules/bg.rs
crates/atomcode-tui/src/modules/chrome.rs     crates/atomcode-tui/src/modules/input.rs
crates/atomcode-tui/src/modules/plugins.rs    crates/atomcode-tui/src/modules/providers.rs
crates/atomcode-tui/src/modules/settings.rs   crates/atomcode-tui/src/modules/sheet.rs
crates/atomcode-tui/src/modules/status.rs     crates/atomcode-tui/src/modules/todo.rs
crates/atomcode-tui/src/modules/transcript.rs

→ 自研布局引擎:layout.rs(flex 布局)、surface.rs、raster.rs、frame.rs、el.rs、 scrollbar.rs、theme.rs、keymap.rs(鼠标/键盘映射)、raster.rs(栅格渲染)。

3.2 CLI 切换机制 ​

--tui       Open the full-screen UI assembled from plugin rows for this launch, whatever `[ui] screen` says. It is also what opens without a flag
--classic   Open the classic screen for this launch, whatever `[ui] screen` says — the escape hatch. `[ui] screen = "classic"` makes it the one that opens without the flag

→ 默认界面 = 新 TUI;旧 atomcode-tuix 界面保留,通过 --classic 或 [ui] screen = "classic" 切换。

3.3 新界面功能(运行时验证 --tui --demo) ​

❯ fix the build                                 ← 输入框
⚑ rate limited; waiting 30s (1/5)              ← 限流等待
● scout 汇报回来了  点击展开                    ← 子代理行
✻ Done · 0ms · 1 轮 · 2 工具 · 880 tokens · 本轮缓存 33%   ← 回合结束条
● write_file 我的笔记/notes.md → 允许一次       ← 审批可视化
● Allow `bash` to run? → 拒绝                  ← 审批可视化
replay │ AtomCodeReverseEngineering │ 1.2K tok │ 缓存 33%   ← 状态栏
  • 审批可视化:屏幕内直接完成审批;审批答完后收成一行 ● bash … → 允许一次,可点击展开
  • 工具调用折叠:写/改类工具直接展开画 diff
  • 后台会话面板:/bg 会话后台继续跑,状态栏显示后台在跑数量
  • 提问面板:完整兑现 request_user_input(多选/自己输入/纯文字/批量分页)
  • 思考强度控制:/effort 面板
  • 回合结束条:显示结束时刻、耗时、轮数、工具数、缓存命中
  • 面板化界面:/agents、/cd、/diff、/view、/proxy 改为底部内联面板

3.4 新界面 CLI 选项 ​

--probe-terminal   Print what the terminal says its colours are and what every colour role resolves to
--no-mouse         On the row-assembled screen: leave the mouse to the terminal
--audit            With --tui: check that the screen's composition is sound, and exit
--demo             With --tui: print one composed frame of the screen, and exit
--mascot           On the row-assembled screen: show the mascot
--theme `THEME`    auto|dark|light

4. 会话事件化(Event-Sourced Sessions)— 全新会话存储模型 ​

4.1 新模块 ​

crates/atomcode-capabilities/src/session/events.rs    ← 会话事件流
crates/atomcode-coding/src/session_store.rs           ← 会话存储
crates/atomcode-capabilities/src/session/session_list.rs
crates/atomcode-capabilities/src/session/status_reminder.rs

4.2 SessionEvent 枚举(24 个变体,完整清单) ​

struct variant SessionEvent::TurnStart      (1 element)
struct variant SessionEvent::UserMessage    (3 elements)
struct variant SessionEvent::StepStart      (2 elements)
struct variant SessionEvent::RequestHeader  (4 elements)
struct variant SessionEvent::AssistantChunk (4 elements)
struct variant SessionEvent::AssistantMessage (7 elements)
struct variant SessionEvent::ToolStarted    (3 elements)
struct variant SessionEvent::ToolResultLogged (6 elements)
struct variant SessionEvent::ToolResultsStubbed (2 elements)
struct variant SessionEvent::StepEnd        (3 elements)
struct variant SessionEvent::TurnEnd        (3 elements)
struct variant SessionEvent::Usage          (3 elements)
struct variant SessionEvent::Compacted      (4 elements)
struct variant SessionEvent::Rewound        (3 elements)
struct variant SessionEvent::MessagesRewritten (2 elements)
struct variant SessionEvent::Answered       (3 elements)
struct variant SessionEvent::Asked          (2 elements)
struct variant SessionEvent::Injected       (3 elements)
struct variant SessionEvent::Interrupted    (2 elements)
struct variant SessionEvent::PartialReply   (4 elements)
struct variant SessionEvent::PolicyIntervention (2 elements)
struct variant SessionEvent::RateLimitPaused (2 elements)
struct variant SessionEvent::Notice         (4 elements)
struct variant SessionEvent::Titled         (3 elements)
struct variant SessionEvent::Checkpointed   (2 elements)
struct variant SessionEvent::Stopped        (1 element)

4.3 事件流语义(从字段还原) ​

turn_start / user_message / step_start / request_header / assistant_chunk /
assistant_message / tool_started / tool_result_logged / tool_results_stubbed /
step_end / turn_end / usage / compacted / rewound / messages_rewritten /
answered / asked / injected / interrupted / partial_reply / policy_intervention /
rate_limit_paused / notice / titled / checkpointed / stopped

→ 追加式事件日志:撤销(rewound)、回退、压缩(compacted)都作为新记录追加, 不改写历史。中断或崩溃后可完整恢复(replay)。

4.4 存储布局(关键架构文档原文) ​

SESSION IDENTITY. The tree's own agent takes its session from the `session` row: `id`
  names it (minted when absent), and `resume = true` continues that session by replaying
  the events `session-persistence` stored for it before the first turn. There is no
  separate snapshot format for this: the stored events are the snapshot.

every fact of the conversation, appended as it happens; a resume replays that file and
  nothing else; ``id`.index` holds its name, working directory and per-turn statistics.

append every committed event to `root`/<session-id>.jsonl

→ 事件即快照:存储的事件本身即快照。持久化为 root`/<session-id>.jsonl` + id.index(名称 / 工作目录 / 每轮统计)。插件名:session-persistence-jsonl、 session-event-log、session-event-log/this-session。

4.5 快照状态位(上次会话结束原因) ​

SessionSnapshot / turn_counter / request_counter(单调计数器,冲突检测)
overflow_compacted / provider_retry / output_left_cut_off / compaction_degraded /
config_skipped / member_not_restored

→ 快照携带两个单调计数器(turn 级、请求级)+ 6 个状态位枚举,记录上次结束退化原因。

4.6 会话快照与恢复 ​

struct SessionSnapshot
struct SessionHeader
internally tagged enum SessionEvent
replay / ReplayCall / ReplayStep / ReplayRow
restored_files / RewindPoint / prompt_number / prompt_preview / before_tree / after_tree

→ 快照 = 存储的事件本身,无独立快照格式:the stored events are the snapshot。 /resume 可预览会话最后聊了什么,按两次 Ctrl+D 删除会话。

4.5 相关结构体 ​

struct TurnRecord   struct SessionMeta   struct InflightSnapshot
struct HistoryEntry struct ForkInfo      struct UsageRecord
struct SessionHeader struct ImportInfo   struct MemberHeader

5. 后台会话(/bg、/background)与异步 Agent 团队 ​

5.1 后台会话模块 ​

crates/atomcode-cli/src/background.rs          ← 后台会话管理器(事件埋点 996/849/816)
crates/atomcode-cli/src/tui_bg.rs              ← TUI 后台面板
crates/atomcode-tui/src/modules/bg.rs          ← 后台面板 UI(tui-panel-team / tui-panel-rewind)
crates/atomcode-capabilities/src/tools/bash/background.rs  ← 后台 bash 工具三件套

⚠️ 注意:/bg / /background 命令族在 v5.0.9 已存在(basic 版)。v5.2.3 是在其基础上 大幅增强:新增 /bg list、/bg N、`/bg drop `N、/bg tell 全套命令、 background.rs 运行时埋点、后台面板插件行、background_only 配置项。

5.2 后台会话生命周期(二进制证据) ​

Your conversation moved to the background
background result not delivered to the conversation that started it; it is still in /bg
a background session whose result came home is still offered in /resume
a background session taken up is still left out of /resume
To resume the background session, run: ...
background sessions are still running ...
background session identity mismatch: runtime=
injected:background(TUI 注入标签)
background_only(配置项)

→ /bg <任务> / /background 让会话在后台继续跑;后台问询可在前台就地答复; 结果回落(result came home)以"另一个会话"身份回到发起它的对话;/review 默认在后台跑; 退出时后台还在跑会先问一次(background sessions are still running ...)。

5.3 异步 Agent 团队 ​

struct TeamArgs with 8 elements / struct MemberHeader with 8 elements
struct TeamRow / struct SubagentRow / struct SessionRow
crates/atomcode-coding/src/team_progress.rs
crates/atomcode-harness/src/plugins/team.rs
crates/atomcode-harness/src/plugins/agents.rs
team.max_members(默认 6)/ team/manager.rs / team-member-worktrees / team-in-process / team-note
[subagent] max_concurrent(默认 3)/ max_rounds(默认 200)

team 工具动作集(工具 schema 原文):

{"action":"delegate","name":"scout","role":"explorer","task":"..."}
delegate / tell / stop / status
成员属性:name / role / model(可换模型)/ reasoning_effort / task / 写作用域 glob(files)
permission 角色:explore(looks, changes nothing)/ worker(may edit files and run commands)
difficulty:simple(fast model)/ hard(strong one)
  • 委派子代理硬边界:a delegated agent never runs a shell, delegating, sensitive paths, writes outside its lane、delegation-bounds
  • 成员按角色跑,Worker 各得独立 worktree(team-member-worktrees);写作用域 glob 非重叠
  • 成员会话保存,重启后随主会话恢复(member sessions are saved and come back with their lead)
  • 状态位:member_not_restored / appendMemberHeader

6. Anthropic 原生 Prompt Caching(v5.2.3 新增) ​

6.1 证据(provider/anthropic.rs 新事件与字段) ​

cache_control / ephemeral / cache_read_input_tokens / cache_creation_input_tokens
redacted_thinking / text_delta / thinking_delta / signature_delta
message_start / content_block_start / content_block_delta / content_block_stop
message_delta / message_stop
crates/atomcode-capabilities/src/provider/anthropic.rs:1038 / 438 / 473 / 449

6.2 机制 ​

  • 最多 4 个缓存断点:add up to four cache breakpoints across tools, system and conversation history while preserving thinking blocks and signatures
  • 跳过 thinking 块:redacted_thinking / thinking_delta — 缓存时跳过 thinking,保留签名
  • 用量统计:cache_read_input_tokens(命中读取)、cache_creation_input_tokens(创建写入)
  • 累计逻辑:Update cumulative streaming input and cache usage without double counting, retaining prior values when fields are absent
  • 签名保留:signature_delta — 保序签名
  • Steadier caching:the session's system prompt stays fixed, Plan mode notes and compaction summaries move out of it, and earlier file reads stay unchanged, so the prefix cache no longer collapses periodically

7. 回复断流自动续接与静默超时连接恢复(v5.2.3 新增) ​

7.1 证据 ​

stream_transport_interrupted / stream_idle_timeout
stream timeout after automatic reconnects
stream timeout after partial response; to avoid duplicate output or tool execution,
  the request was not replayed; partial response preserved
stream timed out again after one safe continuation; current progress was preserved; send 'continue' to resume
[The previous assistant stream was interrupted. The preserved assistant messages and
  paired tool results above are authoritative. Continue from that saved progress.
  Do not repeat completed tool calls or restart the task.]
recovery.rs / llm-stream-recovery / recovery provider

7.2 机制 ​

  • 触发条件:连接重置、提前断开、provider 流式空闲超时
  • 安全续接一次:已有正文或上一批工具全部执行成功、且断流处无新的工具调用/参数片段
  • 不重复执行工具:续接中相同工具、相同参数、相同工作目录的已完成有副作用调用复用已确认结果
  • 预算共享:恢复过程与超时恢复共用预算,支持取消
  • 静默超时刷新连接池:等待响应头超时且允许重试时,最多刷新一次连接池
  • 重试总预算:默认最多 180 秒,耗尽后停止自动重试;覆盖 OpenAI 兼容、Responses 和 Anthropic 请求
  • provider 客户端可替换:Anthropic 与 OpenAI 兼容 provider 的 HTTP 客户端支持在超时恢复时重建连接池

7.3 策略表配置(二进制内嵌 [[insert]] 行 — 每轮最多续接 1 次) ​

# Recovery, outermost first: a bound that each retry resets is not a bound,
# and waiting out a limit has to happen outside everything that would burn it.
[[insert]] name = "llm-request-timeout"   config = { request_secs = 600 }
[[insert]] name = "llm-rate-limit"        config = { max_waits = 5, max_wait_secs = 120, fallback_secs = 5 }
[[insert]] name = "compaction-overflow"   config = { max_attempts = 3 }
[[insert]] name = "truncation-recovery"   config = { max_continuations = 4 }
[[insert]] name = "llm-stream-recovery"   config = { max_recoveries = 1 }

→ llm-stream-recovery / max_recoveries = 1:每轮只允许安全续接 1 次; llm-request-timeout 包裹在最外层(request_secs = 600)。

7.4 防重复执行的运行时标记 ​

=[Recovery: confirmed result reused; tool not executed again]

→ 终端与 WebUI 都会展示"结果已复用、工具未再次执行"。复用判定 = tool 实例 + 参数 + 工作目录三者全一致。 MCP stdio 路径同样防重放:MCP tool execution result is unknown; request was not replayed to avoid duplicate side effects。

7.5 断流错误码与连接池刷新 ​

os error 10054                          ← Windows 连接被对方重置(WSAECONNRESET)
"stream idle timeout: no event for      ← 无事件超时诊断
pool_refreshed(openai_compat.rs:1131 事件) ← 静默超时后刷新连接池
provider open retry budget exhausted    ← 重试总预算耗尽(budget_ms 字段)

→ 静默超时先 pool_refreshed(最多一次)→ 流中断保留部分响应 → 再次超时续接 1 次 → 预算 180s 耗尽 → provider open retry budget exhausted 无自动重试。

7.3 恢复提示注入 ​

[The previous assistant stream was interrupted. The preserved assistant messages and paired
tool results above are authoritative. Continue from that saved progress. Do not repeat
completed tool calls or restart the task.]

8. Provider 生态扩展 ​

8.1 新模块 ​

crates/atomcode-auth/src/openrouter.rs                ← OpenRouter OAuth 接入
crates/atomcode-capabilities/src/provider/responses.rs ← OpenAI Responses API 适配器
crates/atomcode-capabilities/src/provider/discovery.rs ← 模型发现
crates/atomcode-capabilities/src/provider/probe.rs     ← 连通性探测
crates/atomcode-capabilities/src/provider/latency.rs   ← 延迟统计
crates/atomcode-capabilities/src/provider/reasoning.rs ← 推理强度
crates/atomcode-config/src/provider_book.rs            ← Provider 登记簿
crates/atomcode-config/src/provider_edit.rs            ← Provider 编辑

8.2 OpenAI Responses API(/v1/responses) ​

response.output_item.added / response.output_text.delta
response.reasoning_summary_text.delta / response.reasoning_text.delta
response.function_call_arguments.delta / response.function_call_arguments.done
response.output_item.done / response.completed / response.failed / response.incomplete
output_index / item/type / item/call_id / item/name / item/arguments
/input_tokens_details/cached_tokens
crates/atomcode-capabilities/src/provider/responses.rs:544 / 356

→ 系统消息→instructions、工具/工具结果 Responses 编码、response.* SSE 流解码; 与 chat/completions 共享连接池、TLS 与重试语义。

8.3 模型发现与探测 ​

/v1/models/api/tags(Ollama)
model discovery supports only http and https URLs / limit=1000
model discovery URL must not contain credentials
DiscoverModelsRequest / ProbeRequest / ProviderPresetInfo
model_sourcediscoverable / probeable
OllamaModelsResponse / OpenAiModelsResponse
POST /providers/discover-models  ← 请求 {type, base_url, api_key}
POST /provider-accounts/:account/probe  ← 连通性探测

8.4 OpenRouter 一键接入 ​

/openrouter [key] 命令;无参数走浏览器 OAuth(PKCE)
crates/atomcode-auth/src/openrouter.rs
crates/atomcode-cli/src/tui_openrouter.rs
crates/atomcode-tuix/src/event_loop/openrouter_connect.rs
openrouter.ai/api/v1/key / /auth/keys
'openrouter: discover page not fetched (
OpenRouter is connected: ... / OpenRouter was not connected: ...
'OpenRouter free model 引导' / '额度用尽 nudge'
自动发现免费模型(tool-use + 文本输出)Top 5 落盘

8.5 其他 Provider ​

  • Ollama 上下文钉住:ATOMCODE_OLLAMA_NUM_CTX(新 env)显式钉住运行时窗口
  • OpenCode Zen 兼容:请求自动补发 x-opencode-session 头
  • Kotlin 代码图谱:.kt / .kts 支持
  • 推理强度:reasoning_effort / LowMediumXHigh / thinking_budget / thinking_type / reasoning_history

9. 安全与授权模型升级 ​

9.1 声明式权限规则([permissions]) ​

crates/atomcode-capabilities/src/tools/permission_rules.rs
declarative allow/deny rules over tool calls
  • 语法与 Claude Code 的 permissions.allow/deny 兼容(Bash(git *)、Read(~/.zshrc)、mcp__server__tool)
  • deny 优先,allow 永不作用于敏感路径
  • credential_shell = "strict" 下便利闸门只问"是否已决",安全边界只认"由人批准"

9.2 Authorization 三态 ​

ToolExec 的布尔 pre_approved 替换为三态 Authorization(No / Presumed / ByPerson)

9.3 allow_all_bash 危险选项 ​

struct ApprovalRequest with 5 elements
allow_all_bash / AskAcceptEdits

→ 审批面板新增"总是允许所有 Bash"选项;重新弹出的审批透明展示授权原因。

9.4 凭据脱敏(遥测 scrubbing) ​

crates/atomcode-telemetry/src/scrub.rs
valid token secret regex: gh[opsru]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|glpat-[A-Za-z0-9\-_]{16,}|xox[baprs]-...|sk-[A-Za-z0-9\-_]{16,}|AKIA[0-9A-Z]{16}|ASIA...|AIza...|eyJ...(JWT)
valid kv secret regex: (authorization|x-api-key|api[-_]?key|access[-_]?token|private[-_]?token|auth[-_]?token|password|passwd|secret)\s*[:=]\s*"?(bearer|token...)?([^"'\s,;)]{6,})
`HOME``CWD`${1}`REDACTED``REDACTED`

→ 录制输出脱敏覆盖带引号的密钥内容;Provider 错误链中的请求地址去掉凭据。

9.5 MCP Trust Store 与 OAuth ​

struct TrustStore / struct TrustEntry / trustedblocked
GithubOauth / add-github-oauth / client_secret_env / SCOPES
struct McpOAuthToken(access_token/refresh_token/scopes/client_id/client_secret_env/token_endpoint)
mcp_auth.toml / Failed to poll the OAuth callback listener
RFC 9728/8414 自动发现 + RFC 7591 动态注册(`atomcode mcp login` 无需 client secret)

→ /mcp 面板支持启用/停用;MCP OAuth 登录持久化到 mcp_auth.toml; 服务器指令隔离为 untrusted, server-scoped tool guidance。

9.6 委派子代理边界 ​

a delegated agent never runs a shell, delegating, sensitive paths, writes outside its lane
refuse outright what a delegated agent may never do: a shell, delegating, sensitive paths, writes outside its lane
delegation-bounds(配置行,拒绝先于一切规则与询问)

9.7 敏感文件审批 ​

读取凭据、密钥、.env 等敏感文件前先请求审批
Refused: the arguments name a sensitive path (credentials, keys, `.env`) and ...
tool-open-file-workspace:open_file 目标在工作区内无需审批
tool-write-approval / tool-bash-workspace / tool-credential-shell(off|prompt|strict)

9.8 门链重构(kernel ToolMiddleware) ​

[[insert]] name = "tool-open-file-workspace"
[[insert]] name = "tool-credential-shell"
[[insert]] name = "tool-write-approval"
[[insert]] name = "tool-bash-workspace"
approval seam(默认 mode = "deny-risky")
钩子优先:ahead of the gates that auto-approve, so a PreToolUse hook sees a write first

10. 新工具与能力 ​

10.1 Bash 后台任务三件套 ​

crates/atomcode-capabilities/src/tools/bash/background.rs
bash_start / bash_poll / bash_kill
  • 启动脱离前台超时上限的后台任务,跨工具调用存活
  • 模型通过轮询获取增量输出;输出尾部有界截断(256 KiB)
  • 并发上限 64;孤儿进程由平台进程组/作业对象兜底回收
  • 后台命令与前台 bash 走同一套工作区/凭证/推送标签中间件

10.2 fetch_output(截断输出恢复) ​

fetch_output:Read more of a large tool output that was truncated. Pass the artifact_id
from a truncation marker plus a byte offset and limit. Returns the requested byte slice;
if the artifact is unavailable, re-run the original command instead.

10.3 list_sessions / /worklog ​

list_sessions:枚举本项目历史会话(标题/时间/大小)
/worklog:跨项目汇总当日完成的回合、耗时与工具使用,生成固定模板工作小结
crates/atomcode-capabilities/src/session/worklog.rs

10.4 代码图谱 Kotlin / 索引上限 ​

.kt / .kts 支持
索引超限可操作报错:目录排除 + 文件数/字节数上限(默认 20k 文件 / 256 MiB)
edit_file 匹配失败回传现场

10.5 AtomGit 工具扩展 ​

atomgit_issue 新增 update / close 能力
atomgit_pr 新增 list_mine(列当前用户 PR)、update(改 PR:title/body/state/milestone/labels/draft/close_related_issue/prune_branch/squash_merge)、comment 系列(create/view/edit/delete/reply)、link_issues/unlink_issues
PrArgs 30 元素(大幅扩展)

10.6 图片预算(image-budget 插件) ​

image-budget / max_bytes / 413(压缩减半重发)
一次请求图片数量有上限并自动压缩(单张约 512KB,413 时减半重发)
预算按 4 张一步裁剪,不打穿提示词缓存
crates/atomcode-capabilities/src/image_normalize.rs

10.7 world / world_tools(世界问答入口) ​

crates/atomcode-capabilities/src/world.rs
crates/atomcode-harness/src/plugins/world.rs / world_tools.rs
world`team` / not the project you are working in. Every answer is generated from the running system,
  so none of it can be out of date; it is read-only and cheap
session = ...; services = ...; tools = ...; models = ...; operations = ...; settings = ...

→ 只读、实时、廉价的"系统自述"工具,从运行中的行装配读取实时状态。


11. 配置体系扩展 ​

11.1 新增配置段(来自 struct Config with 28 elements 及字段) ​

[ui] screen = "classic"|auto       [ui] theme = auto|dark|light
[ui] auto_copy_code_blocks         [ui] ai_session_naming
[ui] whats_new                     [ui] terminal_status_glyph
[ui] mode_switch_key               [ui] mouse / no_mouse
[ui] scrollbar                     [ui] recap
[ui] rewind
[tools] todo.enabled               [tools] atomgit.enabled
[coding] max_rounds                [coding] shell_guard_policy
[coding] repeat_stop_rounds        [coding] vision_preprocessor_provider
[loop_config] max_rounds           [network] upstream_retry_max_attempts
[network] proxy
[subagent] max_concurrent          [subagent] max_rounds
[subagent] codex                   [subagent] claude
[agent] team.max_members           [agent] ... 
[team] max_members                 [team] invalid_capacity
[permissions] ...                  [lsp] auto_detect / servers
[plugin] auto_install_default_skills  [plugin] auto_update_marketplaces
[notifications] enabled / bell     [datalog] enabled
[telemetry] enabled                [memory] ... local tier
[rewind] ...                       2 GiB / 500 MiB 预算
[worklog] ...
[persona] ...
[seed] ... / ATOMCODE_SEED_CONFIG / offline_mode
[provider_book] ... / enterprise_url

11.2 新增环境变量 ​

ATOMCODE_CODE_REWIND(代码回滚 opt-in 开关)
ATOMCODE_FIRST_TOKEN_TIMEOUT_SECS   ATOMCODE_STREAM_TIMEOUT_SECS
ATOMCODE_GOAL_MAX_DURATION_SECS     ATOMCODE_GOAL_MAX_ROUNDS
ATOMCODE_LOOP_MAX_ROUNDS            ATOMCODE_TURN_MAX_ROUNDS
ATOMCODE_OLLAMA_NUM_CTX             ATOMCODE_THEME
ATOMCODE_TOOL_OUTPUT_THRESHOLD_BYTES ATOMCODE_MEMORY_TOOL
ATOMCODE_MEMORY_APPROVAL            ATOMCODE_DAEMON_IDLE_TIMEOUT
ATOMCODE_GITHUB_MCP_CLIENT_ID       ATOMCODE_SEED_CONFIG
ATOMCODE_PROJECT_MEMORY_DIR         ATOMCODE_DANGEROUSLY_ALLOW_REMOTE_NO_AUTH
ATOMCODE_PLUGIN_ROOT                ATOMCODE_UPDATE_MANIFEST_URL

11.3 机器本地记忆层(local tier) ​

memory.local / local tier(global > project > local)
存于 .atomcode/local/ 并自动 gitignore

12. WebUI 更新 ​

12.1 KaTeX 数学公式渲染 ​

59 个 KaTeX 资产嵌入(assets/KaTeX_*.woff2 / woff / ttf)
katex / KaTeX / throwOnError / displayMode / formula / math rendering

→ 支持行内与块级 TeX 公式渲染;代码和货币文本保持原样,无法渲染的公式保留原始文本。

12.2 /webui 参数生效 ​

--port(默认 13457,刻意错开 VSCode daemon 的 13456)
--host(默认 127.0.0.1;0.0.0.0 暴露到局域网/外网,仅 token 保护、无 TLS)
--no-open
端口被占用时自动顺延探测

12.3 会话计数一致 ​

项目侧栏计数与展开列表共用可见性规则,闲置空会话不再计数,fork 分支只计一次

12.4 WebUI 新 UI 特征(从打包 JS 还原) ​

chat.kbdHint / chat.kbdHintMobile / chat.skillExpand
user-message-bubble / is-markdown / msg-time-user
SessionDetail / TurnStats / Backgrounded / BackgroundSessions / BackgroundQuestion
UsageStats / Entitlement / ModelChoice / UsageWindow

13. 新 CLI 命令与子命令 ​

13.1 新子命令(v5.2.3 help) ​

review        Review a diff and report structured findings, then exit
  --base `BASE`      git range 对比(`base`...HEAD)
  --staged           only staged changes
  --pr `PR`          GitHub PR by number(gh pr diff)
  --diff-file `FILE` diff from file or stdin(任何 forge)
  --repo / --model / --api-key
rollback     回退到上一个版本(与 .bak 交换)
mcp add-github-oauth / mcp login / mcp logout
telemetry recover
schedule sync

13.2 新斜杠命令 ​

/audit /background(/bg) /capabilities /cd /changelog /codingplan /compact
/config /context /copy /copy code /cost /datalog /goal /health /issues /live
/local /login /look /loop 5m /mcp /memory /mode /model /notes /onboarding
/openrouter /plugin /provider /proxy /quit /rename /repos /responses /resume
/review /rewind /rewind purge /rustc /save /schedule /setup /signed /skills
/status /sync /sys /todo add /todo clear /token /toolbox /um /upgrade /usr /view
/webui --port /worklog /worktree /raw

13.3 会话与命令修复 ​

  • 恢复历史会话后 /goal、/loop、/queue、/policy、/worktree 保持可用
  • /worktree 使用当前会话目录的 Git 仓库(避免恢复会话后仍操作启动时的仓库)

14. 移除项(v5.0.9 → v5.2.3) ​

移除模块替代
crates/atomcode-kernel/src/agent.rsatomcode-harness/src/plugins/agent_loop.rs
crates/atomcode-coding/src/execution_policy.rsatomcode-harness/src/plugins/policy.rs
crates/atomcode-coding/src/skill_first.rsatomcode-harness/src/plugins/registries.rs
crates/atomcode-coding/src/team/runner.rs / team/tool.rsatomcode-harness/src/plugins/team.rs / agents.rs
crates/atomcode-coding/src/session_title.rsatomcode-harness/src/plugins/session_title.rs
crates/atomcode-coding/src/plan_mode.rsatomcode-harness/src/plugins/*
crates/atomcode-coding/src/mcp_instructions.rsMCP trust store 重构
crates/atomcode-capabilities/src/tools/approval.rspermission_rules.rs + Authorization 三态
crates/atomcode-capabilities/src/tools/atomgit_bash_gate.rs通用审批/凭证守卫覆盖
crates/atomcode-capabilities/src/tools/task.rsatomcode-harness/src/plugins/subagent.rs
crates/atomcode-capabilities/src/memory/hook.rsmemory local tier 重构
crates/atomcode-capabilities/src/session/transcript.rssession/events.rs 事件化
crates/atomcode-capabilities/src/skills/catalog_hook.rsskills registry 重构
crates/atomcode-config/src/config/memory.rs配置系统扩展

14.1 行为变化(Behavior Changes) ​

  • 默认界面切换为新 TUI(atomcode 无参数直接打开全屏界面;--classic 回退)
  • 装配链移除:ATOMCODE_ENGINE 引擎选择开关与手写中间件链已删除
  • Code Rewind 默认关闭:ATOMCODE_CODE_REWIND=1|true|on|yes 显式启用
  • 授权语义收紧:[permissions] allow 不再等同于"人工当场批准"
  • npm 平台包独立发布:@atomgit.com/atomcode-{os}-{arch}

15. 遥测与更新管道 ​

15.1 遥测脱敏(新增 scrub.rs) ​

crates/atomcode-telemetry/src/scrub.rs
telemetry_recover(新子命令):Recover legacy .partial files

15.2 签名校验 ​

official_build_required / official release build
源码构建缺少官方网关签名能力时明确拒绝请求,避免进程崩溃

15.3 更新域名 ​

atomCode-air-releases / relay-atomcode.atomgit.com / api.gitcode.com
ATOMCODE_APP_RELAY / ATOMCODE_DESKTOP_DOWNLOAD_URL
RelayManifest / relay-latest.json

16. Daemon API 与 Live 端点变化 ​

16.1 新增 Live 端点 ​

/live/release            ← 新增(释放会话)
/live/goal/arm           /live/goal/stop
/live/mcp/trust          /live/switch_session
/live/reasoning_effort   /live/compact
/fs/search /fs/mkdir     /mcp/status /mcp/reload
/provider-accounts       /providers/discover-models

16.2 新 daemon API 结构体(55+) ​

AppendSessionMessagesRequest  AppendSessionMessage  CreateSessionRequest
DeleteSessionRequest          LoadSessionRequest    RenameRequest
RepairSessionRequest          ResumeSessionRequest  SetSessionModeRequest
SetSessionConfigOptionRequest StopChatRequest       ChatRequest
ChatUserInputAnswerRequest    CreateProviderRequest CreateAccountRequest
CreateAccountModelRequest     DiscoverModelsRequest EditAccountRequest
EditModelRequest              PatchProviderRequest  ProbeRequest
NewModelRequest               OllamaModelsResponse  OpenAiModelsResponse

16.3 health 端点(运行时验证) ​

json
{"status":"ok","version":"5.2.3","service":"atomcode-daemon",
 "binary_hash":"14e223e47ba9b7252ff03c9028f03581174ed7755c40b62a28a6601fcade8e9f",
 "instance_id":"1029b9a6-ef1b-4f11-9078-ca18ee59c48a",
 "capabilities":["goal","session_scoped_live"]}

→ 新增能力标记:goal、session_scoped_live。


17. 总结 ​

v5.0.9 → v5.2.3 是 AtomCode 迄今最大规模的架构升级:

  1. 运行时重写:单体引擎 → atomcode-plexus 行级插件运行时 + atomcode-harness 分层运行时(42 插件行)
  2. 界面换代:atomcode-tui 全新全屏界面成为默认(--classic 保留旧界面)
  3. 会话事件化:追加式事件日志取代可变快照,撤销/回退/压缩皆为新记录
  4. 断流续接与缓存:Anthropic 原生缓存(4 断点)+ 回复断流自动续接(180s 重试预算)
  5. 后台化:/bg 后台会话 + 异步 Agent 团队 + Bash 后台任务三件套
  6. 安全收紧:[permissions] 声明式规则、Authorization 三态、凭据脱敏、敏感路径审批
  7. Provider 扩展:OpenRouter 一键接入、OpenAI Responses API、模型发现/探测
  8. WebUI 增强:KaTeX 公式渲染、/webui --port/--host/--no-open
  9. 移除重构:15 个旧模块被 harness 插件体系替代

附录:涉及的全新模块路径清单 ​

crates/atomcode-plexus/src/{app,context,event,fiber,plugin,realm,service}.rs
crates/atomcode-harness/src/{agent,commands,diagnostics,exec,feed,model_source,seams,session}.rs
crates/atomcode-harness/src/plugins/*.rs(42 个)
crates/atomcode-tui/src/*.rs(44+ 个)
crates/atomcode-auth/src/openrouter.rs
crates/atomcode-capabilities/src/image_normalize.rs
crates/atomcode-capabilities/src/provider/{discovery,latency,probe,reasoning,responses}.rs
crates/atomcode-capabilities/src/search.rs
crates/atomcode-capabilities/src/session/{events,session_list,status_reminder,worklog}.rs
crates/atomcode-capabilities/src/setup/scan.rs
crates/atomcode-capabilities/src/tools/bash/background.rs
crates/atomcode-capabilities/src/tools/permission_rules.rs
crates/atomcode-capabilities/src/worktree_status.rs
crates/atomcode-capabilities/src/world.rs
crates/atomcode-cli/src/{background,host,lib,relay,review,tui_bg,tui_changelog,tui_command_meter,tui_elsewhere,tui_login,tui_mcp,tui_onboarding,tui_opening,tui_openrouter,tui_places,tui_plugins,tui_providers,tui_proxy,tui_resume,tui_rewind,tui_schedule,tui_settings,tui_setup,tui_share,tui_shell,tui_tools,tui_upgrade,tui_welcome_words}.rs
crates/atomcode-coding/src/{front_end,host_rows,on_harness,persona,policy_rows,recap,review_rows,session_store,team_progress,tool_intent}.rs
crates/atomcode-config/src/{changelog,provider_book,provider_edit}.rs
crates/atomcode-daemon/src/api_provider_accounts.rs
crates/atomcode-telemetry/src/scrub.rs

基于 VitePress 构建 · AtomCode v5.2.3 逆向工程分析文档