136 lines
4.0 KiB
Markdown
Raw Normal View History

2026-05-20 21:39:12 +08:00
---
title: Tool Catalog 工具目录系统
created: 2026-04-16
updated: 2026-05-15
type: entity
tags: [tool, agent, architecture]
sources: [packages/backend/src/modules/netaclaw/tools/catalog.ts]
---
# Tool Catalog 工具目录系统
## 概述
轻量级 schema 元数据注册表,只负责注册“系统中定义了哪些工具”。它不直接决定工具是否可用,也不保存运营侧治理配置;这些职责已转移到 [[tool-governance]]。当前它更像工具体系的“源头清单”,为 resolver、manifest、runtime diagnostic 提供静态起点。
## 目录结构
```text
netaclaw/tools/
├── catalog.ts # schema 注册表核心
├── common.ts # AgentTool 接口与辅助函数
├── fuzzy_match.ts # 9级模糊匹配引擎供 patch 使用)
├── todo_tool.ts # Todo 工具 schema
└── builtin/
├── bash.ts
├── file.ts
├── patch.ts
├── clarify.ts
├── memory.ts
├── mysql.ts
├── read_skill.ts
├── read_skill_file.ts
├── skill_manage.ts
├── delegate_task.ts
├── delegate_parallel.ts
└── escalate.ts
```
## ToolSchema
```typescript
interface ToolSchema {
name: string;
toolset: string;
description: string;
visibility?: 'internal' | 'tool' | 'skill';
capability?: 'text' | 'vision' | 'multimodal';
isCore?: boolean;
canDisable?: boolean;
supportsPromptHint?: boolean;
}
```
相比旧版catalog 现在除了名称和工具集,还承担:
- 模型能力要求
- 是否核心工具
- 是否允许关闭
- 是否支持 Prompt Hint
- 可见性标记
但它依然不负责:
- 子 Agent 是否允许使用该工具
- 当前 session 下是否需要主进程代理
- blocked reason 和最终 runtime route
- 前端最终展示文案
## 核心 API
| API | 说明 |
|-----|------|
| `registerSchema(schema)` | 注册工具 schema |
| `getAllToolSchemas()` | 获取全部 schema |
| `getToolSchema(name)` | 查询单个 schema |
| `getToolNamesByToolset(toolset)` | 按 toolset 查询 |
| `getToolNamesByToolsets(toolsets)` | 按多个 toolset 查询 |
## 默认工具集
- `TOOLSET_DEFAULTS = ['base', 'planning', 'interaction']`
- 另外保留 `vision``document``mysql` 等常量,用于能力分组和 Agent 工具集配置。
## 当前工具集分类
| 工具集 | 说明 |
|--------|------|
| `base` | 基础文件与命令工具 |
| `planning` | todo 规划工具 |
| `interaction` | clarify / escalate |
| `memory` | 长期记忆工具 |
| `skill` | Skill 相关工具 |
| `crew` | 委派工具 |
| `mysql` | MySQL 只读问数工具,详见 [[mysql-data-source]] |
## 注册机制
`catalog.ts` 底部通过 import 触发各工具文件调用 `registerSchema()`,形成静态注册表。这个注册表随后会被:
- `tool_registry.ts` 用来同步和对齐 DB 治理配置。
- `tool_resolver.ts` 用来拼装最终可用工具集。
- `tools/manifest.ts` / `tools/runtime_policy.ts` 用来生成运行时画像与路由。
## 与治理层的分工
### Catalog 负责
- 系统里有哪些工具
- 每个工具的 schema 元信息
- 默认工具集与分类
### Governance 负责
- 全局启停
- Agent 级启停覆盖
- Prompt Hint 覆写
- 模型能力过滤
- 上下文角色限制
- 动态运行路由与诊断输出
详见 [[tool-governance]]。
## 与 Prompt Builder 的关系
旧版 `collectAvailableToolNames()` 仍在 [[prompt-builder]] 中保留,但当前关键运行链路已转向 `tool_resolver.resolve()` 先给出最终 `toolNames`,再交给 Prompt Builder 组装提示词。
## 关联页面
- [[tool-system]] — 工具系统总览
- [[tool-governance]] — catalog 之上的治理层
- [[mysql-data-source]] — mysql toolset 的数据源、schema、query 和审计边界
- [[prompt-builder]] — 消费最终工具列表
- [[patch-tool]] — Patch 工具base 工具集)
- [[clarify-tool]] — Clarify 工具interaction 工具集)
- [[netaclaw-module]] — 所属模块