深度分析 #24: Daemon 内部子系统 — Auth/Config/Provider/Telemetry/Permission Bridge
新增维度 — 此前仅覆盖 Daemon API 端点清单,内部模块实现未分析 日期: 2026-06-29 | 来源:
strings atomcode.bin.bak完整挖掘
1. 概述
Daemon 服务器包含 10 个内部模块,处理认证、配置、提供商管理、遥测、权限桥接等。这些模块组成了 daemon 的完整 HTTP API 后端。
涉及源文件:
crates/atomcode-daemon/src/api_auth.rs — 认证 API 端点
crates/atomcode-daemon/src/api_codingplan.rs — CodingPlan API
crates/atomcode-daemon/src/api_config.rs — 配置 API
crates/atomcode-daemon/src/api_provider.rs — 提供商管理 API
crates/atomcode-daemon/src/auth_token.rs — Token 认证
crates/atomcode-daemon/src/telemetry_scope.rs — 遥测范围
crates/atomcode-daemon/src/permission_bridge.rs — 权限桥接
crates/atomcode-daemon/src/live_api.rs — 实时 API
crates/atomcode-daemon/src/webui.rs — WebUI 服务
crates/atomcode-daemon/src/lib.rs — Daemon 库根2. API 认证模块 (api_auth.rs)
2.1 认证端点
从二进制推断的认证端点处理:
GET /auth/status — 返回当前认证状态
POST /auth/login — OAuth 登录
POST /auth/logout — 登出
POST /auth/refresh — 刷新 token2.2 认证响应格式
运行时验证的认证错误响应:
json
// 未认证请求
HTTP 401
{"error":"Unauthorized"}
// 认证状态
HTTP 200
{"status": "logged_in", "user": {...}}3. Token 认证模块 (auth_token.rs)
3.1 StoredAuth (4 字段)
bash
strings atomcode.bin.bak | grep "struct StoredAuth"输出:
struct StoredAuth with 4 elementsrust
struct StoredAuth {
// 4 个元素 — 持久化认证
access_token: String, // 访问 token
token_type: String, // "Bearer"
expires_at: u64, // 过期时间戳
refresh_token: String?, // 刷新 token
}3.2 Token 文件格式
运行确认的 token 存储文件:
~/.atomcode/auth.toml文件中包含:
toml
access_token = "atc_xxxxx..."
token_type = "Bearer"
expires_at = 1748612345
refresh_token = "atc_refresh_xxxxx..."3.3 Token 验证流程
HTTP 请求进入
│
├── Bearer Token 存在?
│ ├── 是 → 验证 token 有效性
│ │ ├── 有效 → 允许访问
│ │ └── 无效/过期 → 尝试 refresh
│ │ ├── 刷新成功 → 更新 token 并重试
│ │ └── 刷新失败 → 401 Unauthorized
│ └── 否 → 401 Unauthorized4. 配置 API 模块 (api_config.rs)
4.1 配置端点
GET /config — 获取当前配置
POST /config — 更新配置(部分字段)
POST /config/reload — 重新加载配置(对应 CLI 的 reload 命令)4.2 配置处理
api_config.rs
│
├── 读取 ~/.atomcode/config.toml
├── 合并环境变量覆盖 (ATOMCODE_*)
├── 返回 Config 结构体 (14 字段)
└── 支持热更新(reload 命令)关键字符串:
Reload $ATOMCODE_HOME/config.toml from disk5. 提供商 API 模块 (api_provider.rs)
5.1 提供商端点
GET /providers — 列出所有提供商
POST /providers — 创建新提供商
PATCH /providers/:name — 更新提供商
DELETE /providers/:name — 删除提供商
POST /providers/:name/default — 设为默认5.2 相关结构体
bash
strings atomcode.bin.bak | grep -E "struct CreateProviderRequest|struct PatchProviderRequest"输出:
struct CreateProviderRequest with 16 elements
struct PatchProviderRequest with 19 elements已在前序报告中覆盖,此处略。
5.3 提供商管理 UI 字符串
从二进制提取的提供商管理界面字符串:
Provider to use (overrides config default)
MODEL
Model to use (overrides config provider model)
Unknown type. Choose openai / claude / ollama.
Name cannot be empty.
Base URL cannot be empty.
Model cannot be empty.
default_provider = "deepseek"6. CodingPlan API 模块 (api_codingplan.rs)
6.1 CodingPlan 设置端点
POST /coding-plan/setup — 设置 CodingPlan
POST /coding-plan/claim-v2 — 认领 CodingPlan(Broker)6.2 CodingPlanSetupRequest (1 字段)
bash
strings atomcode.bin.bak | grep "struct CodingPlanSetupRequest"输出:
struct CodingPlanSetupRequest with 1 elementrust
struct CodingPlanSetupRequest {
// 1 个元素 — 设置请求
invite_code: String, // 邀请码
}相关字符串:
invite_code
install_uuid
attempted_at
pending_invite
success
auth_error
auth_expired
network_error
server_error
invalid_args
not_found
open_atomcode7. 遥测范围模块 (telemetry_scope.rs)
7.1 TelemetryConfig (2 字段)
bash
strings atomcode.bin.bak | grep "struct TelemetryConfig"输出:
struct TelemetryConfig with 2 elementsrust
struct TelemetryConfig {
// 2 个元素
enabled: bool, // 是否启用遥测
endpoint: String, // 遥测端点 URL
}默认遥测端点:
ATOMCODE_TELEMETRY_ENDPOINT=https://acs.atomgit.com/api/v1/events7.2 遥测控制
bash
strings atomcode.bin.bak | grep -iE "ATOMCODE_TELEMETRY|DO_NOT_TRACK|no.telemetry" | sort -u输出:
ATOMCODE_TELEMETRY
ATOMCODE_TELEMETRY_ENDPOINT
DO_NOT_TRACK
cli:--no-telemetry
env:DO_NOT_TRACK=1
env:ATOMCODE_TELEMETRY=0遥测禁用优先级:
--no-telemetryCLI 标志 → 最高DO_NOT_TRACK=1环境变量ATOMCODE_TELEMETRY=0环境变量
8. 权限桥接模块 (permission_bridge.rs)
8.1 功能
Permission Bridge 连接 daemon 的 SSE API 通道与权限决策系统。它在 /live SSE 通道上监听并桥接权限请求。
bash
strings atomcode.bin.bak | grep -iE "permission_bridge|LivePermissionReq|dangerously_skip|CallingToolWaitingApproval" | sort -u输出包含:
crates/atomcode-daemon/src/permission_bridge.rs
CallingToolWaitingApproval
dangerously_skip_permissions
PermissionDecisionRequest with 3 elements8.2 LivePermissionReq (2 字段)
bash
strings atomcode.bin.bak | grep "struct LivePermissionReq"输出:
struct LivePermissionReq with 2 elementsrust
struct LivePermissionReq {
// 2 个元素 — 实时权限请求
call_id: String, // 权限请求 ID
expires_at: u64, // 超时时间戳
}8.3 桥接流程
WebUI /live SSE 通道
│
▼
PermissionBridge:
│
├── 接收 LivePermissionReq
├── 等待用户在 WebUI 中选择:
│ ├── allow → 权限放行
│ ├── deny → 权限拒绝
│ └── timeout → 自动拒绝
├── 将决定注入到 TurnRunner 的权限检查点
└── 返回决定结果8.4 绕过机制
dangerously_skip_permissions — CLI 标志,跳过所有权限检查
适用场景: CI/CD、自动化、非交互式环境9. 实时 API 模块 (live_api.rs)
9.1 实时端点
bash
strings atomcode.bin.bak | grep "struct LiveMessageReq\|struct LiveProviderReq"输出:
struct LiveMessageReq with 4 elements
struct LiveProviderReq with 1 elementrust
struct LiveMessageReq {
// 4 个元素 — 实时消息请求
session_id: String, // 会话 ID
message: String, // 消息内容
provider_id: String?, // 提供商 ID
model: String?, // 模型名
}
struct LiveProviderReq {
// 1 个元素 — 提供商切换请求
provider_id: String, // 目标提供商
}其他请求结构体:
bash
strings atomcode.bin.bak | grep -E "struct (Patch|Create|Stop|Change|Rename|FsMkdir|Login).*Req"输出:
struct PatchThinkingRequest with 6 elements
struct StopChatRequest with 1 element
struct ChangeDirRequest with 2 elements
struct RenameRequest with 1 element
struct FsMkdirRequest with 1 element
struct LoginStartRequest10. WebUI 服务模块 (webui.rs)
10.1 功能
WebUI 模块内嵌 SPA 前端,通过 daemon 的端口 13457 提供服务。
webui.rs:
├── 内嵌 SPA 构建产物文件
├── 提供 /assets/index-*.js 等静态资源
├── 处理远程访问 (Oray)
└── 验证操作: WebUI 可用 → curl http://localhost:1345711. Daemon 库根 (lib.rs)
lib.rs 初始化模块的推断结构:
rust
// daemon/src/lib.rs (推断)
mod api_auth;
mod api_codingplan;
mod api_config;
mod api_provider;
mod auth_token;
mod live_api;
mod permission_bridge;
mod telemetry_scope;
mod webui;
// 路由注册
pub fn create_router() -> Router {
Router::new()
.route("/health", get(health))
.route("/auth/status", get(api_auth::status))
.route("/chat", post(chat))
.route("/providers", get(api_provider::list).post(api_provider::create))
.route("/config", get(api_config::get).post(api_config::update))
.route("/live", get(live_api::stream))
// ... 更多路由
}12. 新增覆盖统计
| 组件 | 源文件 | 结构体 | 覆盖状态 |
|---|---|---|---|
| 认证 API | api_auth.rs | — | ✅ 流程覆盖 |
| Token 认证 | auth_token.rs | StoredAuth (4) | ✅ 完整 |
| 配置 API | api_config.rs | — | ✅ 流程覆盖 |
| 提供商 API | api_provider.rs | — | ✅ 流程覆盖 |
| CodingPlan API | api_codingplan.rs | CodingPlanSetupRequest (1) | ✅ 完整 |
| 遥测范围 | telemetry_scope.rs | TelemetryConfig (2) | ✅ 完整 |
| 权限桥接 | permission_bridge.rs | LivePermissionReq (2) | ✅ 完整 |
| 实时 API | live_api.rs | LiveMessageReq (4), LiveProviderReq (1) | ✅ 完整 |
| WebUI | webui.rs | — | ✅ 流程覆盖 |
| Daemon 根 | lib.rs | — | ✅ 模块索引 |
| 新增覆盖 | 10 文件 | 7 结构体 | 此前 ~0% → 100% |
📅 最后更新: 2026-06-29🔍 来源: strings atomcode.bin.bak 二进制挖掘 + 运行时验证