工具管理服务
src/services/tools/ 管理工具的注册、发现、过滤和生命周期。
工具组装管道
assembleToolPool(src/tools.ts)组装工具池,签名:
typescript
// src/tools.ts
export function assembleToolPool(
permissionContext: ToolPermissionContext,
mcpTools: Tools,
): Tools内部流程:
- 通过
getTools(permissionContext)获取内置工具(包含 feature-gated 工具,如 Task 工具通过isTodoV2Enabled()控制,Worktree 工具通过isWorktreeModeEnabled()控制) - 过滤在 deny 列表中的 MCP 工具
- 分区排序(内置工具作为前缀,保证 prompt-cache 稳定性)
- 通过
uniqBy去重合并
工具过滤
注意: 源码中没有
ToolRegistry接口。工具通过函数式组合(assembleToolPool+mergeAndFilterTools)进行管理。
mergeAndFilterTools(src/utils/toolPool.ts)签名:
typescript
// src/utils/toolPool.ts
export function mergeAndFilterTools(
initialTools: Tools,
assembled: Tools,
mode: ToolPermissionContext['mode'],
): Tools内部流程:
initialTools优先,通过uniqBy去重- 分区排序(内置工具作为前缀,MCP 工具在后)
- 若启用了
COORDINATOR_MODE,则应用协调器工具过滤
工具查找
工具查找通过 findToolByName(src/Tool.ts)实现,从 assembleToolPool 返回的数组中按名称查找。
工具使用计数
工具使用跟踪通过分析事件系统(logEvent)记录,并非单独的 Map 计数器。每次工具调用通过 tool_use 事件记录到遥测系统。