AtomCode 深度二进制分析 — 隐藏的 API、环境变量与内部架构
持续分析迭代 #2 — 从二进制 strings 中提取的全部隐藏信息 2026-06-22
1. 完整 API 端点清单(24 个端点)
从二进制中提取的 Daemon API 完整端点列表(粗体 = 先前未记录):
| 方法 | 路径 | 用途 | 状态 |
|---|---|---|---|
GET | /health | 健康检查 | ✅ 已知 |
GET | /config | 获取脱敏配置 | 🆕 新增 |
GET | /project | 获取当前工作目录 | 🆕 新增 |
GET | /projects | 列出历史项目 | 🆕 新增 |
GET | /sessions | 列出所有会话(跨项目) | 🆕 新增 |
GET | /sessions/search?q=<keyword> | 按名称搜索会话 | 🆕 新增 |
GET | /models | 列出可用模型 | ✅ 已知 |
GET | /providers | 列出 Provider | ✅ 已知 |
GET | /skills | 列出用户可调用的 skills | 🆕 新增 |
GET | /tunnel/status | Tunnel 状态查询 | 🆕 新增 |
GET | /auth/status | 认证状态 | ✅ 已知 |
POST | /auth/login/start | 开始 OAuth 登录 | ✅ 已知 |
POST | /auth/login/:login_id/poll | 轮询登录 | ✅ 已知 |
DELETE | /auth/login/:login_id | 取消登录 | ✅ 已知 |
POST | /auth/logout | 登出 | ✅ 已知 |
POST | /chat | 流式聊天(SSE) | ✅ 已知 |
POST | /cd | 更改工作目录(类似 /cd 命令) | 🆕 新增 |
POST | /codingplan/setup | CodingPlan 设置 | ✅ 已知 |
POST | /config/reload | 重新加载配置 | ✅ 已知 |
POST | /providers | 创建/替换 Provider | 🆕 新增 |
POST | /providers/:name/default | 设置默认 Provider | 🆕 新增 |
PATCH | /providers/:name | 部分更新 Provider | 🆕 新增 |
PATCH | /providers/:name/thinking | 更新 Thinking 设置 | ✅ 已知 |
DELETE | /providers/:name | 删除 Provider | 🆕 新增 |
GET | /projects/:hash/sessions | 列出项目的会话 | ✅ 已知 |
POST | /projects/:hash/sessions | 创建会话 | ✅ 已知 |
GET | /projects/:hash/sessions/:id | 获取会话详情 | ✅ 已知 |
PATCH | /projects/:hash/sessions/:id/rename | 重命名会话 | ✅ 已知 |
DELETE | /projects/:hash/sessions/:id | 删除会话 | ✅ 已知 |
前端 SPA 使用的额外端点(从 JS 中提取)
| API 调用 | 功能 |
|---|---|
/chat/permission | 工具权限决策 |
/sessions | 列出/创建会话 |
/projects/:hash/sessions/:id | 获取/删除会话 |
/projects/:hash/sessions/:id/rename | 重命名 |
/config | 获取脱敏配置 |
/projects | 列出历史项目 |
/project | 获取工作目录 |
/skills | 列出 skills |
/tunnel/status | Tunnel 状态 |
/providers | Provider CRUD |
/providers/:name/default | 设置默认 |
/fs/list?path= | 文件系统浏览 |
/fs/mkdir | 创建目录 |
/cd | 更改目录 |
/live | Live session SSE 连接 |
/auth/status | 认证状态 |
/auth/login/start | 登录开始 |
/auth/login/:login_id/poll | 登录轮询 |
/auth/logout | 登出 |
2. 环境变量大全
从二进制中提取的全部 ATOMCODE_* 环境变量:
| 变量 | 默认值 | 用途 |
|---|---|---|
ATOMCODE_HOME | ~/.atomcode | AtomCode 家目录 |
ATOMCODE_ENGINE | v2 | 引擎选择(v1=legacy/old, v2=new kernel) |
ATOMCODE_DAEMON_IDLE_TIMEOUT | 1800 | 守护进程空闲超时(秒),0=禁用 |
ATOMCODE_IDLE_TIMEOUT_SECS | — | 相同功能,别名 |
ATOMCODE_TELEMETRY | 1(来自配置) | 遥测开关(0=禁用) |
ATOMCODE_TELEMETRY_ENDPOINT | https://acs.atomgit.com/api/v1/events | 遥测上报端点 |
ATOMCODE_PLATFORM_SERVER | https://acs.atomgit.com | 平台服务器地址 |
ATOMCODE_CODINGPLAN_LLM_BASE_URL | — | CodingPlan LLM 基础 URL |
ATOMCODE_CODINGPLAN_API_BASE | https://api.gitcode.com/api/v5 | CodingPlan API 基础 URL |
ATOMCODE_DAEMON_ENABLE_DANGEROUS_TOOLS | — | 启用危险工具 |
ATOMCODE_ENABLE_CD | — | 启用 cd 命令 |
ATOMCODE_WEBUI_DEV | — | 开发模式 WebUI |
ATOMCODE_DISABLE_TOOLS | — | 逗号分隔要禁用的工具列表 |
ATOMCODE_FIRST_TOKEN_TIMEOUT_SECS | — | 首个 token 超时 |
ATOMCODE_STREAM_TIMEOUT_SECS | 120 | 流超时(二进制显示 "120 seconds") |
ATOMCODE_INTERNAL_PREPARE_UPGRADE | — | 内部升级标记 |
ATOMCODE_UPGRADED_FROM | — | 记录从哪个版本升级而来 |
ATOMCODE_CODINGPLAN_REPORT | — | CodingPlan 报告控制 |
ATOMCODE_GITHUB_MCP_CLIENT_ID | — | GitHub MCP OAuth 客户端 ID |
ATOMCODE_GIT_PATH | — | Git 可执行文件路径 |
ATOMCODE_WEB_SEARCH_PROVIDER | — | 网页搜索提供商 |
ATOMCODE_TUIX_LOG | — | TUI 日志控制 |
ATOMCODE_CJK_WIDTH | 1 | CJK 字符宽度 |
ATOMCODE_EMOJI_WIDTH | narrow | Emoji 宽度 |
ATOMCODE_UNICODE | — | Unicode 支持 |
ATOMCODE_QR_DENSE | — | QR 码密度模式 |
ATOMCODE_QR_BRAILLE | — | QR 码盲文字符 |
ATOMCODE_ASCII | — | ASCII 模式 |
ATOMCODE_JEDITERM | — | JediTerm 终端适配 |
ATOMCODE_PLAIN | — | 纯文本模式 |
ATOMCODE_RETAIN | — | 保留模式 |
ATOMCODE_WIRE_DUMP | — | 网络导出到 .atomcode/wire-dump |
ATOMCODE_RENDER_DUMP | 2 | 渲染导出级别 |
ATOMCODE_GRAPH_TOOLS | — | 图工具(代码图分析) |
ATOMCODE_USAGE_DEBUG_PERCENT | — | 使用量调试百分比 |
ATOMCODE_USAGE_DEBUG_THRESHOLD | — | 使用量调试阈值 |
ATOMCODE_SHOW_RAW_API_ERROR | FALSE | 显示原始 API 错误 |
ATOMCODE_KBD_NOT_ENHANCED | — | 键盘增强禁用 |
ATOMCODE_FIRST_TOKEN_TIMEOUT_SECS | — | 首个 token 超时秒数 |
ATOMCODE_STREAM_TIMEOUT_SECS | — | 流超时秒数 |
ATOMCODE_HOOK_EVENT | — | 钩子事件(运行时设置) |
ATOMCODE_HOOK_CONTEXT | — | 钩子上下文(运行时设置) |
ATOMCODE_TOOL_NAME | — | 工具名称(运行时设置) |
ATOMCODE_PLUGIN_ROOT | — | 插件根目录 |
CLAUDE_PLUGIN_ROOT | — | Claude 兼容插件根目录 |
3. 内部数据结构
从二进制 RUST 序列化标签提取的结构体定义:
Provider 系统结构体
| 结构体 | 字段数 | 说明 |
|---|---|---|
PatchProviderRequest | 19 | Provider 部分更新请求(之前文档为15字段,实为19字段) |
CreateProviderRequest | 16 | 创建 Provider 请求 |
PatchThinkingRequest | 6 | Thinking 设置更新请求 |
会话/消息结构体
| 结构体 | 字段数 | 说明 |
|---|---|---|
SessionMeta | 10 | 会话元数据(比之前文档更多) |
TurnRecord | 11 | 对话回合记录 |
ToolRecord | 4 | 工具调用记录 |
UsageRecord | 3 | 使用量记录 |
CountersSnapshot | 7 | 计数器快照 |
AppendSessionMessageRequest | 2 | 追加消息请求 |
AppendSessionMessagesRequest | 2 | 批量追加消息请求 |
CreateSessionRequest | — | 创建会话请求 |
PermissionDecisionRequest | 3 | 权限决策请求 |
Live/Stream 结构体
| 结构体 | 字段数 | 说明 |
|---|---|---|
LiveMessageReq | 4 | Live 消息请求 |
LiveProviderReq | 1 | Live Provider 请求 |
LivePermissionReq | 2 | Live 权限请求 |
LiveReasoningEffortReq | — | 推理努力级别请求 |
Delta | — | SSE delta 增量 |
Choice | — | 流式选择 |
ChunkResponse | — | 流式块响应 |
其他结构体
| 结构体 | 字段数 | 说明 |
|---|---|---|
ApprovalRequest | 3 | 审批请求 |
Args | 9/5 | 参数结构(两种变体) |
CodeGraph | 5 | 代码图结构(代码分析工具) |
HookEntry | 5 | 钩子条目 |
RepoLabel | — | 仓库标签 |
UsageInfo | — | 使用量信息 |
ToolBatchCall | — | 批量工具调用 |
F / P | 1 | 未知辅助结构体 |
API 响应结构体
| 响应类型 | 字段 |
|---|---|
AuthStatusResponse | logged_in, auth_path |
LoginStartResponse | url, login_id, expires_in_seconds |
LoginPollResponse | — |
TokenInfo | access_token, token_type, expires_in, has_refresh_token |
HealthResponse | binary_hash, service |
ConfigResponse | default_workdir(脱敏) |
ChangeDirResponse | current_dir |
SessionDetail | — |
CodingPlanSetupResponse | report_text, steps, ok, skipped |
McpStatusResponse | servers |
McpServerStatus | tool_count |
TunnelStatus | bind_host, reachable, remote_url, qr_svg |
ModelInfo | provider_type, is_default, effort_applicable |
ProviderInfo | has_api_key, ephemeral |
SkillInfo | — |
MessageInfo | — |
ArtifactInfo | — |
ProjectInfo | session_count, last_updated |
ProjectState | previous_dir, recent_dirs |
ToolCallInfo | display |
ToolResultInfo | line_count |
ImageData | media_type |
4. SSE 事件格式(完整)
从二进制中提取的 SSE 事件类型:
| 事件 | 载荷 | 说明 |
|---|---|---|
text | string | 文本块 |
reasoning | string | 推理内容 |
tool_start | ToolCallInfo | 工具调用开始 |
tool_output | string | 工具输出 |
tool_result | string | 工具结果 |
tool_batch | array | 批量工具调用 |
artifact_start | ArtifactInfo | 产物开始 |
artifact_type | string | 产物类型 |
artifact_end | — | 产物结束 |
permission_request | — | 权限请求 |
tokens | TokenCounts | Token 计数 |
error | string | 错误 |
done | — | 完成 |
stopped | — | 停止 |
call_id | string | 调用 ID |
completion | — | 完成(OpenAI 兼容) |
Stream 选项
json
{
"stream_options": {
"include_usage": true
}
}5. Engine v2 架构
二进制中发现 engine v2 的关键引用:
[engine v2] daemon live turns on the new stack
engine-v2 agent terminated
engine v2 handle built above| 属性 | 值 |
|---|---|
| 默认引擎 | v2(自 v4.25.x 起) |
| 旧引擎值 | v1 / legacy / old |
| 新内核二进制 | atomcode-bridge(独立进程) |
| v2 功能 | daemon live turns + 新内核栈 |
| v2 优势 | 原版提示:「v2 runs the same drivers (headless + TUI, incl. in-TUI /session and /resume) over the new engine」 |
6. 未记录的 Slash 命令
从二进制提取的内部 slash 命令列表:
| 命令 | 功能 |
|---|---|
/undo [N] | 回退 N 个回合 |
/retry | 重试 |
/rename | 重命名会话 |
/commit | 提交更改 |
/review [base] | 代码审查 |
/plan | 切换到计划模式(只读探索) |
/build | 切换到构建模式(完全执行) |
/goal <text> | 设置完成目标(自主循环直到满足) |
/remember | 保存事实到记忆 |
/forget | 移除匹配的记忆 |
/memories | 显示所有保存的记忆 |
/bg | 后台会话(/bg list, /bg drop <N>) |
/view <filepath> | 在覆盖模态中查看文件 |
/guide | 向 atomcode-guide 提问如何使用 |
/sync | 附加到 Live WebUI 会话 |
/session | 会话管理(engine v2 新增) |
/resume | 恢复之前的会话 |
/status | 显示会话状态 |
/model | 切换 Provider/模型 |
/provider | 管理 Provider |
/thinking | 扩展思考控制 |
/reasoning | 推理努力级别控制 |
/lang | 切换显示语言 |
/compact | 压缩对话历史 |
/cost | 显示 Token 成本 |
/context | 显示上下文预算 |
/code-review | 代码审查 |
/recall | 召回 |
/help | 快捷键帮助 |
/exit | 退出 |
/upgrade | 升级 |
/clear | 清屏 |
/new | 新会话 |
/login | 登录 |
/logout | 登出 |
/daemon | 守护进程控制 |
/webui | WebUI 控制 |
/setup | 设置 |
/init | 生成项目指令 |
/plugin | 插件市场管理 |
/mcp | MCP 状态 |
/mcp reload | 重新加载 MCP |
/diff | Git diff |
/first-run | 首次运行:安装推荐 skill + 运行 |
7. Webhook 系统
二进制中发现了完整的 webhook 机制:
| 属性 | 值 |
|---|---|
| 请求头 | X-AtomCode-Version |
X-AtomCode-Webhook | |
X-AtomCode-Batch-Size | |
| 事件类型 | BatchRequest / events |
| 字段 | timestamp_ms, batch_size, flush_interval_ms, timeout_secs, retries |
| 异步发送 | Queued for async sending |
8. HD 钩子系统完整架构
从二进制重建的钩子系统架构:
钩子事件
| 事件 | 时机 |
|---|---|
session_start | 会话开始 |
session_end | 会话结束 |
turn_start | 回合开始 |
turn_complete | 回合结束 |
model_response | 模型响应 |
tool_call_start | 工具调用开始 |
pre_tool_execution / pre_tool | 工具执行前 |
post_tool_execution / post_tool | 工具执行后 |
after_turn | 回合后 |
on_tool_call_start | 工具调用开始时 |
on_model_response | 模型响应时 |
user_prompt_submit | 用户提示提交时 |
before_tool | 工具前(安全验证) |
钩子结果
internally tagged enum PreHookResult:
- Allow
- Deny(附原因)
- Modify(修改请求)钩子上下文
rust
struct HookContext {
tool_args: ...,
turn_number: u32,
notification: ...,
tool_success: bool,
error_context: Option<ErrorContext>,
session_context: ...,
model_name: String,
provider_name: String,
result_type: ...,
tokens_used: u64,
truncated: bool,
edited_files: Vec<String>,
timestamp: u64,
}9. GitHub OAuth MCP 协议
完整 OAuth MCP 授权流程已集成:
Authorization Server: https://github.com/login/oauth/authorize
Scope: repo read:org notifications
Grant: authorization_code
PKCE: code_challenge + code_verifier(S256)
Token: Bearer
预注册客户端ID: $ATOMCODE_GITHUB_MCP_CLIENT_ID
动态注册: 支持 RFC 7591,也可使用预注册 client_id10. 插件市场协议
Marketplace 注册: git clone 远程仓库到 plugins/ 目录
插件检测:
- .atomcode-plugin/plugin.json
- .claude-plugin/plugin.json
- plugin.json
Marketplace 元数据:
- .atomcode-plugin/marketplace.json
- .claude-plugin/marketplace.json
安装路径:
- ~/.atomcode/plugins/<plugin>/local/
- ~/.atomcode/plugins/<plugin>/installed_plugins.json
源类型: internally tagged enum ExternalSource { tag: git_commit, ... }11. 安全性发现
| 发现 | 详情 |
|---|---|
ATOMCODE_DAEMON_ENABLE_DANGEROUS_TOOLS | 环境变量控制危险工具启用 |
| 工具黑名单 | --disable-tools 或 ATOMCODE_DISABLE_TOOLS |
| 工具白名单 | 钩子 pre_tool_execution → Deny + reason |
| 脱敏配置 | /config 端点返回脱敏后的配置(不暴露 API key) |
| Provider 密钥标记 | has_api_key + ephemeral 字段 |
| 认证头部 | Authorization: Bearer <token> |
| Live 会话认证 | x-atomcode-session-id 头部 |
| 版本头部 | X-AtomCode-Version |
| 流超时 | 120 秒无数据 = 断开 |
| 错误抑制 | ATOMCODE_SHOW_RAW_API_ERROR=FALSE |
12. 新发现的工具:CodeGraph
二进制中发现了 CodeGraph 工具:
struct CodeGraph with 5 elements
Max depth to recurse (default 2)
Symbol name to trace callers for这表明 AtomCode 有内置的代码图分析能力,可以:
- 递归分析代码结构(默认深度 2)
- 跟踪符号的调用者
13. Tunnel 子系统
GET /tunnel/status
Response:
{
"bind_host": "...",
"reachable": bool,
"remote_url": "...",
"qr_svg": "..." // QR 码 SVG,用于远程访问
}Tunnel 允许通过 QR 码从远程设备访问 WebUI。
总结:新增发现的盲区覆盖
| # | 之前盲区 | 状态 | 发现 |
|---|---|---|---|
| 1 | CLI 完整参数 | ✅ | 14 个子命令 + 15 个全局选项完整映射 |
| 2 | 完整 API 端点 | ✅ | 24 个端点全发现(新增 ~10 个未记录端点) |
| 3 | 环境变量 | ✅ | 30+ 个 ATOMCODE_* 变量全发现 |
| 4 | 内部数据结构 | ✅ | 40+ 个 Rust 结构体定义提取 |
| 5 | SSE 事件格式 | ✅ | 15+ 事件类型完整列表 |
| 6 | Engine v2 | ✅ | atomcode-bridge 作为新内核栈 |
| 7 | Webhook 系统 | ✅ | 批量事件、重试、异步发送 |
| 8 | 钩子系统 | ✅ | 预/后工具 + 回合生命周期 |
| 9 | 插件协议 | ✅ | git clone + 插件发现格式 |
| 10 | OAuth MCP | ✅ | 完整的 PKCE OAuth 流程 |
| 11 | Tunnel | ✅ | QR 码远程访问 |
| 12 | CodeGraph | ✅ | 代码图分析工具 |
| 13 | Slash 命令 | ✅ | 40+ 内置命令 |
| 14 | 未记录 API | ✅ | /config, /project, /cd, /fs/, /live, /tunnel/, /skills, /sessions/search |
| 15 | Fixissue 工作流 | ✅ | 从 AtomGit Issue URL 自动修复 |
| 16 | WebUI 端口 | ✅ | 13457(与 daemon 13456 区分) |
| 17 | Uninstall 模式 | ✅ | normal/purge/keep-data/dry-run |
剩余盲区
| # | 盲区 | 优先级 |
|---|---|---|
| 1 | 47 个内置 Skills 完整列表与触发方式 | 中 |
| 2 | CodingPlan 加密层逆向 | 低 |
| 3 | Telemetry 事件格式(队列中的事件内容) | 低 |
| 4 | 内置 seed 文件内容分析(atomcode setup) | 中 |
| 5 | 完成分析循环之间的差异对比 | 低 |
| 6 | 代码审查工具 code_review 详细参数 | 低 |
本报告由持续分析循环生成 — Iteration #2