--- 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]] — 所属模块