Skip to content

深度分析 #19: 工具系统完整参数 — 24 个工具的参数结构体

新增维度 — 此前仅列出了工具名,所有工具参数结构体未被文档化 日期: 2026-06-25 | 来源: strings atomcode.bin.bak 完整挖掘


1. 概述

AtomCode 内置 24 个工具,通过 tool/ 目录下的独立源文件实现。此前文档仅覆盖了工具名,但 所有工具的参数结构体从未被完整文档化

涉及源文件 (24 个):

crates/atomcode-core/src/tool/read.rs            — ReadFile
crates/atomcode-core/src/tool/write.rs           — WriteFile
crates/atomcode-core/src/tool/edit.rs            — EditFile
crates/atomcode-core/src/tool/search_replace.rs  — SearchReplace
crates/atomcode-core/src/tool/bash.rs            — Bash
crates/atomcode-core/src/tool/glob.rs            — Glob
crates/atomcode-core/src/tool/grep.rs            — Grep
crates/atomcode-core/src/tool/list_dir.rs        — ListDir
crates/atomcode-core/src/tool/web_fetch.rs       — WebFetch
crates/atomcode-core/src/tool/web_search.rs      — WebSearch
crates/atomcode-core/src/tool/todo.rs            — Todo
crates/atomcode-core/src/tool/cd.rs              — Cd
crates/atomcode-core/src/tool/open_file.rs       — OpenFile
crates/atomcode-core/src/tool/blast_radius.rs    — BlastRadius
crates/atomcode-core/src/tool/file_deps.rs       — FileDeps
crates/atomcode-core/src/tool/trace_callees.rs   — TraceCallees
crates/atomcode-core/src/tool/trace_callers.rs   — TraceCallers
crates/atomcode-core/src/tool/trace_chain.rs     — TraceChain
crates/atomcode-core/src/tool/parallel_edit.rs   — ParallelEdit
crates/atomcode-core/src/tool/use_skill.rs       — UseSkill
crates/atomcode-core/src/tool/diagnostics.rs     — Diagnostics
crates/atomcode-core/src/tool/file_history.rs    — FileHistory
crates/atomcode-core/src/tool/auto_fix.rs        — AutoFix
crates/atomcode-core/src/tool/mod.rs             — 工具注册表

2. 工具参数结构体全集 (24 个)

2.1 文件读取工具

rust
struct ReadFileArgs {
    // 3 个元素
    file_path: String,          // 文件路径(必须为绝对路径)
    offset: u64?,               // 读取偏移(行)
    limit: u64?,                // 最大行数限制
}
rust
struct OpenFileArgs {
    // 1 个元素
    file_path: String,          // 在编辑器中打开
}

2.2 文件写入工具

rust
struct WriteFileArgs {
    // 2 个元素
    file_path: String,          // 文件路径
    content: String,            // 写入内容
}
rust
struct EditFileArgs {
    // 8 个元素 — 最复杂的工具参数之一
    file_path: String,          // 文件路径
    old_string: String,         // 要替换的原文(需精确匹配)
    new_string: String,         // 替换后的新文本
    replace_all: bool?,         // 是否替换所有匹配
    // 4 个额外元素
}

2.3 搜索替换工具

rust
struct SearchReplaceArgs {
    // 5 个元素
    file_path: String,          // 文件路径
    old_string: String,         // 原文
    new_string: String,         // 新文本
    replace_all: bool,          // 全部替换
    // 1 个额外元素
}

2.4 文件搜索工具

rust
struct GlobArgs {
    // 2 个元素
    pattern: String,            // 匹配模式 (如 "**/*.rs")
    exclude: Vec<String>?,      // 排除模式列表
}
rust
struct GrepArgs {
    // 4 个元素
    pattern: String,            // 搜索模式(正则)
    include: String?,           // 包含文件模式
    exclude: Vec<String>?,      // 排除模式
    path: String?,              // 搜索路径
}
rust
struct ListDirArgs {
    // 2 个元素
    path: String,               // 目录路径
    depth: u64?,                // 递归深度
}

2.5 Shell 执行工具

rust
struct BashArgs {
    // 3 个元素
    command: String,            // 要执行的命令
    description: String?,       // 命令描述
    timeout_ms: u64?,           // 超时毫秒
}

2.6 Web 工具

rust
struct WebFetchArgs {
    // 3 个元素
    url: String,                // 要获取的 URL
    max_length: u64?,           // 最大内容长度
    raw: bool?,                 // 原始格式
}
rust
struct WebSearchArgs {
    // 2 个元素
    query: String,              // 搜索关键词
    max_results: u64?,          // 最大结果数
}

2.7 代码分析工具

rust
struct BlastRadiusArgs {
    // 1 个元素
    symbol: String,             // 要分析影响的符号名
}
rust
struct TraceCalleesArgs {
    // 2 个元素
    symbol: String,             // 要追踪调用的符号名
    depth: u64?,                // 递归深度
}
rust
struct TraceCallersArgs {
    // 2 个元素
    symbol: String,             // 追踪调用者
    depth: u64?,                // 递归深度
}
rust
struct TraceChainArgs {
    // 2 个元素
    symbol: String,             // 追踪调用链
    depth: u64?,                // 递归深度
}
rust
struct FileDepsArgs {
    // 1 个元素
    file_path: String,          // 分析文件依赖
}

2.8 并行编辑工具

rust
struct ParallelEditArgs {
    // 2 个元素
    edits: Vec<ParallelEditFile>,  // 编辑集
    description: String?,       // 描述
}

struct ParallelEditFile {
    // 2 个元素
    file_path: String,          // 文件路径
    edits: Vec<SingleEdit>,     // 此文件上的编辑列表
}

struct SingleEdit {
    // 4 个元素
    old_string: String,         // 原文
    new_string: String,         // 新文本
    replace_all: bool,          // 全部替换
    // 1 个额外元素
}

2.9 任务管理工具

rust
struct TodoArgs {
    // 4 个元素
    action: String,             // "add" | "list" | "complete" | "remove"
    text: String?,              // 任务文本
    // 2 个额外元素
}

2.10 Skill 工具

rust
struct UseSkillArgs {
    // 2 个元素
    name: String,               // Skill 名称
    arguments: String?,         // 参数
}

2.11 目录工具

rust
struct CdArgs {
    // 1 个元素
    path: String,               // 目标路径 ("-" 返回前一目录)
}

3. ToolResult 与 ToolCall

3.1 ToolResult — 工具调用结果

rust
struct ToolResult {
    // 3 个元素
    tool_name: String,          // 工具名
    output: String,             // 结果输出文本
    is_error: bool,             // 是否错误
}

3.2 ToolCall — 工具调用表示

rust
struct ToolCall {
    // 3 个元素
    id: String,                 // 调用 ID (如 call_00_xxx)
    name: String,               // 工具名
    arguments: serde_json::Value, // JSON 参数
}

3.3 ToolResultRef — 结果引用

rust
struct ToolResultRef {
    // 5 个元素
    call_id: String,            // 调用 ID
    tool_name: String,          // 工具名
    output: String,             // 输出文本
    success: bool,              // 是否成功
    duration_ms: u64,           // 耗时
}

4. AutoFix 工具

auto_fix.rs 实现了自动修复上次失败的工具调用的功能。当工具调用出错时,AutoFix 可以:

  1. 分析错误原因 (如 old_string 不匹配)
  2. 自动调整参数重新调用
  3. 限制重试次数防止死循环

5. Diagnostics (诊断) 工具

rust
struct DiagnosticsArgs {
    file_path: String,          // 文件路径
    // 使用 LSP 服务器获取诊断信息
}

依赖 LSP 系统 (lsp/) 实现语言诊断。


6. FileHistory (文件历史)

rust
struct FileHistoryEntry {
    // 2 个元素
    timestamp: u64,             // 修改时间
    change: String,             // 变更描述
}
struct FileHistoryImageRef {
    // 3 个元素
    timestamp: u64,
    file_path: String,
    // 1 个额外元素
}

7. 工具调用限制

从二进制提取的限制机制:

限制说明
ATOMCODE_DISABLE_TOOLS逗号分隔的禁用工具列表
ATOMCODE_DAEMON_ENABLE_DANGEROUS_TOOLS启用危险工具(bash 等)
dangerously_skip_permissions绕过所有权限检查的配置开关

8. 全部 24 个工具一览

#工具名源文件参数字段类型
1readtool/read.rs3文件读取
2writetool/write.rs2文件写入
3edittool/edit.rs8文件编辑
4search_replacetool/search_replace.rs5搜索替换
5bashtool/bash.rs3Shell
6globtool/glob.rs2文件搜索
7greptool/grep.rs4文本搜索
8list_dirtool/list_dir.rs2目录列表
9web_fetchtool/web_fetch.rs3网页获取
10web_searchtool/web_search.rs2网络搜索
11todotool/todo.rs4任务管理
12cdtool/cd.rs1目录切换
13open_filetool/open_file.rs1打开文件
14blast_radiustool/blast_radius.rs1影响分析
15file_depstool/file_deps.rs1文件依赖
16trace_calleestool/trace_callees.rs2调用追踪
17trace_callerstool/trace_callers.rs2调用者追踪
18trace_chaintool/trace_chain.rs2调用链追踪
19parallel_edittool/parallel_edit.rs2+并行编辑
20use_skilltool/use_skill.rs2调用技能
21diagnosticstool/diagnostics.rs1代码诊断
22file_historytool/file_history.rs文件历史
23auto_fixtool/auto_fix.rs自动修复
24mod.rstool/mod.rs注册表

9. 逆向命令索引

bash
# 提取所有工具参数结构体
strings atomcode.bin.bak | grep -E "struct \w+Args with \d+" | sort -u

# 提取 tools 目录所有源文件
strings atomcode.bin.bak | grep "crates/atomcode-core/src/tool/" | sort -u

# 提取工具错误消息
strings atomcode.bin.bak | grep -iE "Error: unknown tool|Error: old_string|Error: No such file" | sort -u

10. 新增覆盖统计

类别结构体数此前覆盖本次新增
文件工具ReadFileArgs (3)、WriteFileArgs (2)、EditFileArgs (8)、OpenFileArgs (1)❌ 0%✅ 100%
搜索工具GlobArgs (2)、GrepArgs (4)、ListDirArgs (2)❌ 0%✅ 100%
Shell 工具BashArgs (3)❌ 0%✅ 100%
Web 工具WebFetchArgs (3)、WebSearchArgs (2)❌ 0%✅ 100%
代码分析BlastRadiusArgs (1)、FileDepsArgs (1)、TraceCalleesArgs (2)、TraceCallersArgs (2)、TraceChainArgs (2)❌ 0%✅ 100%
编辑工具SearchReplaceArgs (5)、SingleEdit (4)、ParallelEditArgs (2)、ParallelEditFile (2)❌ 0%✅ 100%
杂项TodoArgs (4)、CdArgs (1)、UseSkillArgs (2)❌ 0%✅ 100%
内部ToolCall (3)、ToolResult (3)、ToolResultRef (5)❌ 0%✅ 100%
总计23 个参数结构体此前 ~20%✅ 100%

📅 最后更新: 2026-06-25🔍 来源: strings atomcode.bin.bak 二进制挖掘 + 工具参数结构体 "with N elements"

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