263 lines
7.5 KiB
Markdown
263 lines
7.5 KiB
Markdown
# 工具系统分析
|
||
|
||
## 架构概述
|
||
|
||
工具系统是 Claude Code 的核心能力层,定义了 Agent 可以执行的所有操作。每个工具是一个自包含模块,包含输入 Schema、权限模型和执行逻辑。
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class Tool {
|
||
+string name
|
||
+string description
|
||
+ToolInputJSONSchema inputSchema
|
||
+isEnabled() boolean
|
||
+getDescription() string
|
||
+getPrompt() string
|
||
+execute(input, context) ToolResult
|
||
+validateInput(input) ValidationResult
|
||
}
|
||
|
||
class BashTool {
|
||
+name = "Bash"
|
||
+execute() 运行 Shell 命令
|
||
+沙盒支持
|
||
+安全验证
|
||
}
|
||
|
||
class FileReadTool {
|
||
+name = "Read"
|
||
+支持图片/PDF/Notebook
|
||
+行号范围读取
|
||
}
|
||
|
||
class FileWriteTool {
|
||
+name = "Write"
|
||
+完整文件写入
|
||
+读取前置检查
|
||
}
|
||
|
||
class FileEditTool {
|
||
+name = "Edit"
|
||
+字符串替换编辑
|
||
+replace_all 模式
|
||
}
|
||
|
||
class GlobTool {
|
||
+name = "Glob"
|
||
+文件模式匹配
|
||
+基于 ripgrep
|
||
}
|
||
|
||
class GrepTool {
|
||
+name = "Grep"
|
||
+内容正则搜索
|
||
+ripgrep 集成
|
||
}
|
||
|
||
class AgentTool {
|
||
+name = "Agent"
|
||
+子代理生成
|
||
+worktree 隔离
|
||
+代理类型选择
|
||
}
|
||
|
||
class MCPTool {
|
||
+MCP 服务器工具调用
|
||
}
|
||
|
||
class LSPTool {
|
||
+LSP 操作
|
||
+goToDefinition 等
|
||
}
|
||
|
||
class WebFetchTool {
|
||
+URL 内容获取
|
||
}
|
||
|
||
class WebSearchTool {
|
||
+Web 搜索
|
||
}
|
||
|
||
Tool <|-- BashTool
|
||
Tool <|-- FileReadTool
|
||
Tool <|-- FileWriteTool
|
||
Tool <|-- FileEditTool
|
||
Tool <|-- GlobTool
|
||
Tool <|-- GrepTool
|
||
Tool <|-- AgentTool
|
||
Tool <|-- MCPTool
|
||
Tool <|-- LSPTool
|
||
Tool <|-- WebFetchTool
|
||
Tool <|-- WebSearchTool
|
||
```
|
||
|
||
## 工具注册机制
|
||
|
||
工具注册在 `src/tools.ts` 中,通过 `getAllBaseTools()` 函数集中管理:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[getAllBaseTools] --> B{环境判断}
|
||
B -->|默认| C[核心工具集]
|
||
B -->|USER_TYPE=ant| D[内部工具集]
|
||
B -->|feature flag| E[特性开关工具]
|
||
|
||
C --> F[AgentTool, BashTool, FileReadTool, FileEditTool, FileWriteTool, GlobTool, GrepTool, NotebookEditTool, WebFetchTool, WebSearchTool, AskUserQuestionTool, SkillTool, BriefTool, TaskStopTool, TodoWriteTool, ExitPlanModeV2Tool, ListMcpResourcesTool, ReadMcpResourceTool]
|
||
|
||
D --> G[ConfigTool, TungstenTool, REPLTool, SuggestBackgroundPRTool]
|
||
|
||
E --> H[SleepTool PROACTIVE/KAIROS]
|
||
E --> I[CronCreateTool/CronDeleteTool/CronListTool AGENT_TRIGGERS]
|
||
E --> J[RemoteTriggerTool AGENT_TRIGGERS_REMOTE]
|
||
E --> K[EnterWorktreeTool/ExitWorktreeTool]
|
||
E --> L[TeamCreateTool/TeamDeleteTool]
|
||
E --> M[SendMessageTool]
|
||
E --> N[ToolSearchTool]
|
||
E --> O[WorkflowTool WORKFLOW_SCRIPTS]
|
||
E --> P[WebBrowserTool WEB_BROWSER_TOOL]
|
||
E --> Q[MonitorTool MONITOR_TOOL]
|
||
E --> R[PowerShellTool]
|
||
```
|
||
|
||
## 工具分类
|
||
|
||
### 文件操作类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| FileReadTool | Read | 读取文件(支持图片、PDF、Jupyter Notebook) |
|
||
| FileWriteTool | Write | 创建或覆盖文件 |
|
||
| FileEditTool | Edit | 部分文件修改(字符串替换) |
|
||
| GlobTool | Glob | 文件模式匹配搜索 |
|
||
| GrepTool | Grep | 基于 ripgrep 的内容搜索 |
|
||
| NotebookEditTool | NotebookEdit | Jupyter Notebook 编辑 |
|
||
|
||
### 执行类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| BashTool | Bash | Shell 命令执行(含沙盒) |
|
||
| PowerShellTool | PowerShell | Windows PowerShell 命令 |
|
||
|
||
### 网络类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| WebFetchTool | WebFetch | 获取 URL 内容 |
|
||
| WebSearchTool | WebSearch | Web 搜索 |
|
||
|
||
### 代理和协调类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| AgentTool | Agent | 生成子代理(支持 worktree 隔离) |
|
||
| SendMessageTool | SendMessage | 代理间消息传递 |
|
||
| TeamCreateTool | TeamCreate | 创建代理团队 |
|
||
| TeamDeleteTool | TeamDelete | 删除代理团队 |
|
||
| TaskCreateTool | TaskCreate | 创建任务 |
|
||
| TaskGetTool | TaskGet | 获取任务详情 |
|
||
| TaskUpdateTool | TaskUpdate | 更新任务状态 |
|
||
| TaskListTool | TaskList | 列出所有任务 |
|
||
| TaskOutputTool | TaskOutput | 获取后台任务输出 |
|
||
| TaskStopTool | TaskStop | 停止后台任务 |
|
||
|
||
### 交互类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| AskUserQuestionTool | AskUserQuestion | 向用户提问获取输入 |
|
||
| EnterPlanModeTool | EnterPlanMode | 进入计划模式 |
|
||
| ExitPlanModeV2Tool | ExitPlanMode | 退出计划模式 |
|
||
| EnterWorktreeTool | EnterWorktree | 进入 Git Worktree |
|
||
| ExitWorktreeTool | ExitWorktree | 退出 Git Worktree |
|
||
|
||
### 集成类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| MCPTool | (动态) | MCP 服务器工具调用 |
|
||
| ListMcpResourcesTool | ListMcpResources | 列出 MCP 资源 |
|
||
| ReadMcpResourceTool | ReadMcpResource | 读取 MCP 资源 |
|
||
| LSPTool | LSP | Language Server Protocol 集成 |
|
||
| SkillTool | Skill | 技能执行 |
|
||
|
||
### 特殊类
|
||
| 工具 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| BriefTool | Brief | 附件处理和上传 |
|
||
| ConfigTool | Config | 设置管理(仅内部) |
|
||
| ToolSearchTool | ToolSearch | 延迟工具发现 |
|
||
| TodoWriteTool | TodoWrite | 待办事项管理 |
|
||
| SleepTool | Sleep | 主动模式等待 |
|
||
| SyntheticOutputTool | SyntheticOutput | 结构化输出生成 |
|
||
| ScheduleCronTool | CronCreate/CronDelete/CronList | 定时任务 |
|
||
| RemoteTriggerTool | RemoteTrigger | 远程触发 |
|
||
| REPLTool | REPL | REPL 模式(仅内部) |
|
||
| WorkflowTool | Workflow | 工作流脚本执行 |
|
||
| WebBrowserTool | WebBrowser | Web 浏览器自动化 |
|
||
|
||
## 权限模型
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[工具调用请求] --> B{权限检查}
|
||
B -->|auto 模式| C[自动允许]
|
||
B -->|default 模式| D{规则匹配}
|
||
B -->|plan 模式| E[只读操作允许]
|
||
B -->|bypassPermissions| C
|
||
|
||
D -->|允许规则| F[执行工具]
|
||
D -->|拒绝规则| G[拒绝执行]
|
||
D -->|无规则| H[提示用户]
|
||
|
||
H -->|用户允许| F
|
||
H -->|用户拒绝| G
|
||
H -->|用户允许本次| I[临时允许并执行]
|
||
|
||
G --> J[getDenyRuleForTool 过滤]
|
||
J --> K[从工具列表中移除]
|
||
```
|
||
|
||
## AgentTool 子代理架构
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[AgentTool] --> B[子代理类型选择]
|
||
B --> C[general-purpose<br/>通用代理]
|
||
B --> D[Explore<br/>代码探索]
|
||
B --> E[Plan<br/>架构规划]
|
||
B --> F[claude-code-guide<br/>使用指南]
|
||
|
||
C --> G[可用工具: 全部]
|
||
D --> H[可用工具: 只读<br/>Glob, Grep, Read, Agent]
|
||
E --> I[可用工具: 只读<br/>同 Explore]
|
||
|
||
A --> J{隔离模式}
|
||
J -->|worktree| K[Git Worktree 隔离]
|
||
J -->|默认| L[同目录执行]
|
||
|
||
A --> M[代理能力]
|
||
M --> N[并行代理启动]
|
||
M --> O[后台运行]
|
||
M --> P[消息传递]
|
||
M --> Q[内存管理]
|
||
```
|
||
|
||
## BashTool 安全机制
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[BashTool 命令执行] --> B{安全检查}
|
||
B --> C[路径验证<br/>pathValidation.ts]
|
||
B --> D[只读验证<br/>readOnlyValidation.ts]
|
||
B --> E[破坏性命令警告<br/>destructiveCommandWarning.ts]
|
||
B --> F[沙盒检查<br/>shouldUseSandbox.ts]
|
||
B --> G[sed 命令验证<br/>sedValidation.ts]
|
||
|
||
C --> H{在工作目录内?}
|
||
H -->|是| I[允许执行]
|
||
H -->|否| J[路径限制警告]
|
||
|
||
E --> K{破坏性命令?}
|
||
K -->|rm, git reset --hard| L[额外确认]
|
||
K -->|其他| I
|
||
|
||
F --> M{沙盒可用?}
|
||
M -->|是| N[沙盒执行]
|
||
M -->|否| I
|
||
```
|