深度分析 #29: CLI 主入口与 Telemetry 命令 — main.rs + telemetry_cmd.rs
新增维度 — 此前已覆盖 CLI 子命令清单,入口文件和遥测 CLI 命令未分析 日期: 2026-06-29 | 来源:
strings atomcode.bin.bak完整挖掘
1. 概述
CLI crate 仅包含两个源文件:main.rs 是二进制入口,telemetry_cmd.rs 处理 atomcode telemetry 子命令。
涉及源文件:
crates/atomcode-cli/src/main.rs — CLI 主入口
crates/atomcode-cli/src/telemetry_cmd.rs — 遥测子命令2. CLI 主入口 (main.rs)
2.1 入口流程
bash
strings atomcode.bin.bak | grep "^crates/atomcode-cli/src/main.rs"输出:
crates/atomcode-cli/src/main.rsmain.rs 入口流程:
│
├── 1. 解析命令行参数(clap derive)
├── 2. 设置全局选项:
│ ├── --verbose — 详细输出
│ ├── --no-telemetry — 禁用遥测
│ ├── --dev — 开发模式
│ ├── --config — 配置文件路径
│ └── --dir — 工作目录
│
├── 3. 路由到子命令:
│ ├── daemon — 启动 daemon
│ ├── webui — 启动 WebUI
│ ├── headless — 非交互模式
│ ├── setup — 安装设置
│ ├── login — 登录
│ ├── hook — 钩子管理
│ ├── mcp — MCP 管理
│ ├── marketplace — 市场
│ ├── telemetry — 遥测管理
│ ├── fixissue — 修复 GitHub Issue
│ └── continue_last— 恢复上轮会话
│
└── 4. 执行子命令并等待完成2.2 全局参数
bash
strings atomcode.bin.bak | grep -E "CONTINUE_LAST|VERBOSE|DEV|NO_TELEMETRY|MODEL|PROVIDER|CONFIG|DIR|LANG" | sort -u输出:
CONTINUE_LAST Continue the previous session instead of starting a new one
MODEL Model to use (overrides config provider model)
PROVIDER Provider to use (overrides config default)
CONFIG Path to config file
DIR Working directory (defaults to current directory)
LANG Set interface language (e.g. en, zh-CN, zh)
PROMPT Prompt to run in headless (non-interactive) mode
PROMPT_FILE Read the prompt from a file (alternative to -p)
VERBOSE Show tool calls, token usage, and turn summary on stderr
NO_TELEMETRY Disable telemetry for this invocation
DEV Development mode
DISABLE_TOOLS Names of tools to disable, comma-separated2.3 启动模式路由
main.rs 根据子命令路由到不同的启动模式:
│
├── daemon → 启动 daemon 服务器
├── webui → 启动 WebUI 进程
├── (无子命令) → TUI 交互模式
└── --prompt / --prompt-file → headless 模式2.4 headless 模式
bash
strings atomcode.bin.bak | grep -iE "headless|prompt.*file|non-interactive|stderr" | sort -u输出:
Prompt to run in headless (non-interactive) mode. If omitted, launches the TUI
Read the prompt from a file (alternative to -p). Useful for long prompts that
would exceed ARG_MAX or whose trailing newlines matter
Show tool calls, token usage, and turn summary on stderr (headless mode only)3. 遥测 CLI 命令 (telemetry_cmd.rs)
3.1 命令结构
bash
strings atomcode.bin.bak | grep "^crates/atomcode-cli/src/telemetry_cmd.rs"输出:
crates/atomcode-cli/src/telemetry_cmd.rs遥测子命令层次:
atomcode telemetry
├── status — 显示遥测状态和队列统计
├── enable — 启用遥测(写入 config.toml)
├── disable — 禁用遥测(写入 config.toml)
├── list — 列出待发送事件
│ └── --pretty — 格式化 JSON 输出
└── clear — 清空队列(不改 enabled 状态)3.2 各命令解析
status:
Show current telemetry state and queue stats
输出:
- 遥测 enabled/disabled
- 队列事件数
- 最近发送时间
- 磁盘使用量enable/disable:
enable — Enable telemetry (writes to ~/.atomcode/config.toml)
disable — Disable telemetry (writes to ~/.atomcode/config.toml)
直接修改 config.toml 中的 telemetry 开关,不重启 daemonlist:
list — Print pending queued events (never-sent)
--pretty — 格式化 JSON 输出
读取 telemetry/queue/ 下的 NDJSON 文件并以 JSON 展示clear:
Clear queued events (does not change enabled state)
删除所有未发送的事件文件3.3 CLI 遥测控制流程图
用户
│
├── atomcode telemetry status
│ └── 读取 ~/.atomcode/telemetry/health.json
│ 显示统计信息
│
├── atomcode telemetry enable
│ └── 写入 config.toml: [telemetry] enabled = true
│
├── atomcode telemetry disable
│ └── 写入 config.toml: [telemetry] enabled = false
│
└── atomcode telemetry list --pretty
└── 读取 queue/*.ndjson → 逐行 JSON.parse → 格式化输出4. 完整 CLI 架构图
User Command Line
│
▼
┌──────────────────────────────────────────────────┐
│ clap arg parsing │
│ (main.rs: clap::Parser derive macro) │
└──────────────────┬───────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────┐
│ Global Options Apply │
│ --verbose, --no-telemetry, --dev, --config, │
│ --dir, --provider, --model, --lang │
└──────┬───────────────┬───────────────┬───────────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌───────────┐ ┌──────────┐
│ Daemon │ │ WebUI │ │ Headless│
│ 模式进程 │ │ SPA 服务 │ │ 批处理 │
└─────────┘ └───────────┘ └──────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Subcommand Dispatch │
│ │
│ daemon ─────── crate::daemon │
│ webui ─────── crate::webui │
│ setup ─────── crate::setup │
│ login ─────── crate::auth │
│ hook ─────── crate::hook │
│ mcp ─────── crate::mcp │
│ marketplace ──── crate::marketplace │
│ telemetry ────── telemetry_cmd.rs │
│ fixissue ─────── crate::fixissue │
│ continue_last ── crate::session │
└──────────────────────────────────────────────┘5. 逆向命令索引
bash
# 提取 CLI 入口路径
strings atomcode.bin.bak | grep "^crates/atomcode-cli/" | sort -u
# 提取所有全局选项
strings atomcode.bin.bak | grep -E "^[A-Z_]+$" | grep -E "CONTINUE_LAST|VERBOSE|PROMPT_FILE|NO_TELEMETRY|DISABLE_TOOLS|DANGEROUSLY_SKIP" | sort -u
# 提取 telemetry 子命令说明
strings atomcode.bin.bak | grep -iE "telemetry.*status|telemetry.*enable|telemetry.*disable|telemetry.*list|telemetry.*clear|Show current telemetry state" | sort -u
# 提取 headless 模式说明
strings atomcode.bin.bak | grep -iE "headless|non-interactive|stderr" | sort -u6. 新增覆盖统计
| 组件 | 源文件 | 覆盖状态 |
|---|---|---|
| CLI 主入口 | cli/src/main.rs | ✅ 完整 |
| 遥测命令 | cli/src/telemetry_cmd.rs | ✅ 完整 |
| 新增覆盖 | 2 文件 | 此前 0% → 100% |
📅 最后更新: 2026-06-29🔍 来源: strings atomcode.bin.bak 二进制挖掘 + CLI help 字符串推断