工具注册表与内置工具(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/1jehuang/jcode/2.3-tool-registry-and-built-in-tools
翻译时间:2026-05-27T08:45:24.860Z
翻译模型:deepseek-chat
原文字符数:9689
项目:jcode (jcode)
---
工具注册表与内置工具
相关源文件
以下文件被用作生成此维基页面的上下文:
crates/jcode-protocol/src/notifications.rssrc/background.rssrc/bin/harness.rssrc/bus.rssrc/mcp/client.rssrc/mcp/manager.rssrc/mcp/mod.rssrc/mcp/protocol.rssrc/mcp/tool.rssrc/message/notifications.rssrc/protocol/notifications.rssrc/server/file_activity_tests.rssrc/server/state.rssrc/server/tests.rssrc/skill.rssrc/tool/agentgrep.rssrc/tool/agentgrep/args.rssrc/tool/agentgrep/context.rssrc/tool/agentgrep/render.rssrc/tool/agentgrep_tests.rssrc/tool/apply_patch.rssrc/tool/bash.rssrc/tool/bg.rssrc/tool/codesearch.rssrc/tool/conversation_search.rssrc/tool/edit.rssrc/tool/glob.rssrc/tool/grep.rssrc/tool/ls.rssrc/tool/lsp.rssrc/tool/mcp.rssrc/tool/mod.rssrc/tool/multiedit.rssrc/tool/patch.rssrc/tool/read.rssrc/tool/skill.rssrc/tool/task.rssrc/tool/tests.rssrc/tool/write.rssrc/tui/app/remote_notifications.rs
工具注册表是 jcode 智能体所有可执行能力的中央编排点。它管理着多种多样的工具集合,涵盖从本地文件系统操作、Shell 执行到复杂的多智能体协调以及模型上下文协议(MCP)集成。
注册表架构
Registry 结构体 src/tool/mod.rs:54-58 作为工具、技能和 CompactionManager 的容器。它通过 Arc 在会话间共享,同时在克隆时会创建一个新的 CompactionManager,从而为子智能体提供隔离 src/tool/mod.rs:60-70。
工具分类
注册表将工具组织为三个主要层级:
- 基础工具:无状态的共享工具(例如
read、grep、bash),它们只初始化一次并缓存在OnceLock中src/tool/mod.rs:109-112。 - 会话级工具:需要会话特定状态的工具,例如
subagent工具(实现为SubagentTool),它需要访问会话的提供者和注册表src/tool/task.rs:16-19。 - MCP 工具:由外部模型上下文协议服务器提供的动态工具。这些工具通过
McpManagementTool和McpManager集成到注册表中src/tool/mcp.rs:26-29。
工具特质
所有工具都必须实现 Tool 特质 src/tool/mod.rs:47-47,该特质定义了:
name():大语言模型(LLM)使用的标识符(例如 "bash")。parameters_schema():定义工具输入要求的 JSON Schema。execute():一个异步函数,用于处理输入并返回ToolOutputsrc/tool/mod.rs:48-48。
ToolContext 与执行安全
当工具被执行时,它会收到一个 ToolContext src/tool/mod.rs:47-47。该上下文提供了:
- 路径解析:工具会将会话工作目录的相对路径解析为绝对路径。
- 输出截断:为防止上下文窗口耗尽,工具会强制执行限制。例如,
bash工具的MAX_OUTPUT_LEN为 30,000 个字符src/tool/bash.rs:22-22。 - 进度追踪:工具可以向系统
Bus发送进度更新src/bus.rs:32-40。
工具数据流:从大语言模型到执行
下图展示了自然语言请求如何被转换为代码层面的工具执行。
工具执行管线
graph TD
subgraph "自然语言空间"
UserPrompt["用户:'查找认证逻辑'"]
LLM["大语言模型(例如 Claude 3.5 Sonnet)"]
end
subgraph "代码实体空间"
Agent["Agent::run_turn (src/agent/mod.rs)"]
Registry["Registry::tools (src/tool/mod.rs)"]
ToolImpl["AgentGrepTool::execute (src/tool/agentgrep.rs)"]
ToolOutput["ToolOutput (jcode_tool_types)"]
end
UserPrompt --> Agent
Agent --> LLM
LLM -- "tool_use: agentgrep { mode: 'grep', query: 'auth' }" --> Agent
Agent --> Registry
Registry -- "Arc<dyn Tool>" --> Agent
Agent --> ToolImpl
ToolImpl -- "搜索结果" --> ToolOutput
ToolOutput --> Agent
Agent -- "观察结果:在 auth.rs 中找到" --> LLM
来源:src/tool/mod.rs:54-70, src/tool/agentgrep.rs:171-180, src/tool/task.rs:77-85
---
内置工具目录
jcode 包含超过 30 个内置工具。它们按功能领域进行分类。
文件系统与搜索
这些工具提供了智能体与代码库交互的主要接口。
| 工具 | 用途 | 关键逻辑 |
|---|---|---|
read | 读取文本、图像或 PDF,并显示行号。 | normalize_read_range src/tool/read.rs:59-117 |
write | 创建或覆盖文件。 | WriteTool src/tool/mod.rs:188-188 |
edit | 应用搜索/替换编辑。 | EditTool src/tool/mod.rs:130-130 |
multiedit | 跨多个文件应用多项编辑。 | MultiEditTool src/tool/mod.rs:134-135 |
ls | 列出目录内容。 | LsTool src/tool/mod.rs:146-146 |
glob | 查找匹配模式的文件。 | GlobTool src/tool/mod.rs:144-144 |
grep | 搜索文本模式。 | GrepTool src/tool/mod.rs:145-145 |
agentgrep | 结构感知搜索(grep、find、outline、trace)。 | AgentGrepTool src/tool/agentgrep.rs:163-180 |
apply_patch | 应用统一差异补丁。 | ApplyPatchTool src/tool/mod.rs:141-143 |
系统与执行
用于与宿主操作系统和后台进程交互的工具。
| 工具 | 用途 | 关键逻辑 |
|---|---|---|
bash | 执行 Shell 命令并解析进度。 | TokioCommand 和 JCODE_PROGRESS src/tool/bash.rs:19-28 |
bg | 管理后台任务(列出、等待、取消、状态)。 | BackgroundTaskManager src/tool/bg.rs:7-8 |
browser | 控制无头浏览器会话。 | BrowserTool src/tool/mod.rs:148-148 |
lsp | 查询语言服务器协议以获取符号信息。 | LspTool src/tool/mod.rs:169-169 |
websearch | 搜索网络信息。 | WebSearchTool src/tool/mod.rs:159-161 |
webfetch | 从 URL 获取内容。 | WebFetchTool src/tool/mod.rs:153-155 |
协调与记忆
用于多智能体工作流和长期知识检索的工具。
| 工具 | 用途 | 关键逻辑 |
|---|---|---|
subagent | 生成专门的子智能体(回答/压缩/完整)。 | SubagentTool::execute src/tool/task.rs:126-195 |
swarm | 与群组中的其他智能体通信。 | CommunicateTool src/tool/mod.rs:174-177 |
memory | 查询或更新语义记忆。 | MemoryTool src/tool/mod.rs:184-184 |
skill_manage | 加载、列出和重新加载"技能"(提示集)。 | SkillTool::execute src/tool/skill.rs:69-93 |
mcp | 管理 MCP 服务器连接(列出、连接、重新加载)。 | McpManagementTool src/tool/mcp.rs:88-101 |
来源:src/tool/mod.rs:116-188, src/tool/bash.rs:145-157, src/tool/task.rs:77-85, src/tool/bg.rs:125-142
---
智能体到系统的映射
下图将大语言模型使用的高级工具名称桥接到它们调用的具体 Rust 模块和系统实体。
工具到系统实体的映射
graph LR
subgraph "大语言模型工具名称"
T_BASH["'bash'"]
T_READ["'read'"]
T_SUB["'subagent'"]
T_BG["'bg'"]
T_MCP["'mcp'"]
end
subgraph "Rust 实现 (src/tool/)"
M_BASH["bash.rs: BashTool"]
M_READ["read.rs: ReadTool"]
M_TASK["task.rs: SubagentTool"]
M_BG["bg.rs: BgTool"]
M_MCP["mcp.rs: McpManagementTool"]
end
subgraph "系统/运行时实体"
S_PROC["tokio::process::Command"]
S_FS["tokio::fs"]
S_AGENT["Agent (src/agent/mod.rs)"]
S_BGMGR["BackgroundTaskManager (src/background.rs)"]
S_MCPMGR["McpManager (src/mcp/manager.rs)"]
end
T_BASH --> M_BASH
T_READ --> M_READ
T_SUB --> M_TASK
T_BG --> M_BG
T_MCP --> M_MCP
M_BASH --> S_PROC
M_READ --> S_FS
M_TASK --> S_AGENT
M_BG --> S_BGMGR
M_MCP --> S_MCPMGR
来源:src/tool/bash.rs:19-19, src/tool/read.rs:191-191, src/tool/task.rs:1-2, src/background.rs:36-40, src/tool/mcp.rs:3-4
后台任务管理
BackgroundTaskManager src/background.rs:36-39 允许工具异步运行。它使用基于文件的存储来实现崩溃恢复,将任务状态写入 .status.json 文件 src/background.rs:83-85。bg 工具与该管理器交互,使智能体能够等待任务完成或查看输出尾部 src/tool/bg.rs:43-98。
来源:src/background.rs:36-85, src/tool/bg.rs:125-142