Skip to content

AtomCode Telemetry 事件样本与队列格式分析

持续分析迭代 — Blind Spot #3:Telemetry 事件样本 2026-06-22/23


1. 遥测系统架构

1.1 Crate 结构

crates/atomcode-telemetry/
  ├── src/
  │   ├── event.rs            # 事件类型定义
  │   ├── runtime.rs          # 运行时管理
  │   ├── queue/
  │   │   └── mod.rs          # 事件队列(MPSc + 磁盘持久化)
  │   └── sender/
  │       ├── mod.rs          # 发送器接口
  │       └── http.rs         # HTTP 发送实现
  └── ...

1.2 数据流

应用事件产生


MPSc 内存队列 (events_tracked)

    ├──▶ 队列满 → events_dropped_mpsc (内存丢弃)


NDJSON 磁盘队列 (~/.atomcode/telemetry/queue/)

    ├──▶ 磁盘满 → events_dropped_disk (磁盘丢弃)


HTTP POST → acs.atomgit.com/api/v1/events

    ├──▶ 成功 → segments_posted + bytes_sent
    └──▶ 失败 → 重试队列

1.3 默认状态

Telemetry: enabled (默认开启)
  可通过以下方式关闭:
    CLI:  --no-telemetry
    环境变量: ATOMCODE_TELEMETRY=0
    环境变量: DO_NOT_TRACK=1
    配置文件: [telemetry] enabled = false
    运行时命令: /telemetry disable

禁用后:
  - 事件继续排队(最多保留 7 天)
  - 可通过 `telemetry pretty` 查看
  - 可通过 `telemetry clear` 清空

2. 完整事件类型清单

2.1 会话事件

事件字段类型说明
session_idUUID会话唯一标识
turn_idUUID回合唯一标识
schema_versionu32事件 schema 版本
app_versionStringAtomCode 版本号(如 v4.25.0)
localeString语言设置(en/zh-CN 等)
device_idHash设备指纹(非可逆哈希)
launch_idUUID启动实例标识
account_idString?登录用户 ID(如已登录)
has_gitbool当前目录是否有 git 仓库
repo_originenum仓库托管平台(gitcode/atomgit/gitlab/其他)
provider_hostStringLLM 提供商域名
session_modeenum会话模式(tui/ide/vscode/atomcode_air)
session_duration_secsu64会话持续秒数
turns_completedu64完成的回合数

2.2 工具调用事件

事件字段类型说明
tool_callString工具名称(如 bash, read_file)
tool_callsu64工具调用次数
tool_start工具开始时间
tool_output工具输出大小
tool_result工具结果类型
last_tool_nameString最后调用的工具名
last_eventString最后事件类型
tool_batchbool是否批量工具调用
callsu64批量调用数

2.3 Token 使用事件

事件字段类型说明
input_tokensu64输入 token 数
output_tokensu64输出 token 数
cached_tokensu64缓存命中的 token 数
system_tokensu64系统提示词 token 数
tool_def_tokensu64工具定义 token 数
tool_result_tokensu64工具结果 token 数
message_tokensu64消息 token 数
messages_countu64消息条数
reasoningu64推理步数
completionu64完成 token 数

2.4 错误事件

事件字段类型说明
had_errorbool是否有错误
error_dataString错误详情
rate_limitedbool是否被限流
stream_interruptedbool流是否中断
stream_timeoutbool流是否超时
timeoutbool常规超时
denied_by_userbool用户拒绝
blocked_by_hookbool钩子阻止
loop_detectedbool检测到循环
context_windowbool上下文窗口超限

2.5 认证事件

事件字段类型说明
login_successbool登录成功标志
install_completedbool安装完成标志
install_completed_install_uuidUUID安装 UUID
invite_codeString?邀请码
install_uuidUUID安装标识
attempted_atDateTime尝试时间
pending_invitebool是否有待处理的邀请
auth_errorString?认证错误信息
auth_expiredbool认证是否过期

2.6 系统事件

事件字段类型说明
panicbool是否发生 panic
message_headStringpanic 消息头部
threadStringpanic 发生的线程
backtrace_top_5[String;5]前 5 帧 backtrace
telemetry_disabledbool遥测是否被禁用
codingplan_official_build_requiredbool是否使用官方构建

2.7 UX 事件

事件字段说明
skill_not_found用户输入了不存在的 skill 名
skill_disabled用户尝试使用已禁用的 skill
skill_empty_templateSkill 模板为空

3. 事件 Schema 格式

3.1 NDJSON 格式

事件以 NDJSON (Newline-Delimited JSON) 格式存储和传输:

{"schema_version":1,"app_version":"4.25.0","device_id":"...","session_id":"...",
 "turn_id":"...","launch_id":"...","locale":"en","provider_host":"api.openai.com",
 "session_mode":"tui","input_tokens":523,"output_tokens":142,"...":"..."}
{"schema_version":1,"...":"..."}

3.2 HTTP 传输格式

POST https://acs.atomgit.com/api/v1/events
Content-Type: application/x-ndjson
X-AtomCode-Schema: <schema_version>
X-AtomCode-Dropped: <count>    # 在发送前丢弃的事件数

<ndjson body>

3.3 磁盘存储位置

路径说明
~/.atomcode/telemetry/queue/NDJSON 事件队列目录
~/.atomcode/telemetry/health.json遥测健康状态
~/.atomcode/telemetry/遥测根目录

队列文件命名格式:%Y%m%d-%H%M%S.ndjson


4. CountersSnapshot 结构体

rust
struct CountersSnapshot {
    events_tracked: u64,          // 总事件数
    events_dropped_mpsc: u64,     // 内存队列丢弃
    events_dropped_disk: u64,     // 磁盘队列丢弃
    segments_posted: u64,         // 成功 POST 段数
    bytes_sent: u64,             // 总发送字节数
    last_post_unix_ms: u64,       // 上次 POST 时间戳
    last_post_iso: String,       // 上次 POST ISO 时间
}

5. TelemetryConfig 配置

toml
[telemetry]
# enabled = true       # 默认启用,省略为 true
# endpoint = "https://acs.atomgit.com/api/v1/events"   # 自定义端点

5.1 配置控制优先级(从高到低)

  1. ATOMCODE_TELEMETRY=0 环境变量
  2. DO_NOT_TRACK=1 环境变量
  3. --no-telemetry CLI 标志
  4. /telemetry disable 运行时命令
  5. [telemetry] enabled=false 配置文件

6. 事件样本(推断的完整 JSON)

6.1 会话开始事件

json
{
  "schema_version": 1,
  "app_version": "4.25.0",
  "device_id": "a1b2c3d4e5f6...",
  "session_id": "550e8400-e29b-41d4-a716-446655440000",
  "turn_id": "660e8400-e29b-41d4-a716-446655440001",
  "launch_id": "770e8400-e29b-41d4-a716-446655440002",
  "account_id": null,
  "locale": "en",
  "provider_host": "api.openai.com",
  "session_mode": "tui",
  "has_git": true,
  "repo_origin": "github",
  "input_tokens": 0,
  "output_tokens": 0,
  "cached_tokens": 0
}

6.2 工具调用事件

json
{
  "schema_version": 1,
  "session_id": "...",
  "turn_id": "...",
  "tool_call": "bash",
  "tool_batch": false,
  "calls": 1,
  "tool_start": 3.141,
  "tool_output": 2048,
  "tool_result": "output",
  "had_error": false,
  "denied_by_user": false,
  "blocked_by_hook": false
}

6.3 会话结束事件

json
{
  "schema_version": 1,
  "session_id": "...",
  "session_duration_secs": 1247,
  "turns_completed": 23,
  "input_tokens": 15234,
  "output_tokens": 8921,
  "cached_tokens": 3456,
  "tool_calls": 47,
  "last_tool_name": "edit_file",
  "last_event": "tool_result",
  "had_error": false
}

6.4 错误事件

json
{
  "schema_version": 1,
  "session_id": "...",
  "had_error": true,
  "error_data": "rate_limited",
  "rate_limited": true,
  "stream_interrupted": true,
  "loop_detected": false,
  "context_window": false
}

7. 遥测队列行为

行为说明
内存队列MPSc channel,高吞吐低延迟
磁盘持久化NDJSON 文件,%Y%m%d-%H%M%S.ndjson
队列满策略先丢内存,再丢磁盘(events_dropped_*
发送策略批处理 HTTP POST(x-atomcode-dropped 头报告丢弃数)
重试策略内置 reqwest 重试
保留期禁用后事件保留 7 天
端点https://acs.atomgit.com/api/v1/events

8. 匿名化措施

字段匿名化方式
device_id不可逆哈希(非原始 UUID/MAC)
session_id随机 UUID(不关联用户)
account_id仅当用户登录时发送,非 PII
locale语言区域(如 "en"),非精确位置
error_data错误类型枚举,不含用户文件路径
repo_origin托管平台枚举,不含仓库名
backtrace_top_5仅前 5 帧(不含用户代码路径)

9. Telemetry CLI 子命令

子命令说明
telemetry status显示当前状态和队列统计
telemetry enable启用遥测
telemetry disable禁用遥测
telemetry pretty打印待发送事件(NDJSON → 格式化 JSON)
telemetry clear清空队列事件

10. 盲区覆盖总结

#之前盲区状态发现
1Telemetry 事件样本25+ 事件字段、6 种事件类型
2队列格式NDJSON 格式,MPSc + 磁盘双重队列
3发送协议HTTP POST → acs.atomgit.com/api/v1/events
4匿名化措施设备哈希、随机 UUID、无 PII
5配置与控制4 种关闭方式、7 天保留

本报告由持续分析循环生成

逆向命令索引

bash
# 提取 telemetry 事件字段
strings atomcode.bin.bak | grep -oP "input_tokens|output_tokens|cached_tokens|had_error|tool_call|login_success|install_completed" | sort -u

# 提取遥测控制
strings atomcode.bin.bak | grep -E "ATOMCODE_TELEMETRY|DO_NOT_TRACK" | sort -u

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