Skip to main content

knowledge-integration-and-workflow-tool-adapters

Covers 领域能力如何包装成内置工具、getBuiltinTools 的 Session 依赖注入、ToolSearch 延迟激活,以及 Goal/Task/Team/Plan/Skill/LSP/MCP/Web/Config/Worktree 适配边界。 Navigate when: 新增或移除内置工具、改变工具集合条件、调整领域工厂依赖、排查 deferred schema、MCP helper 或工作流工具权限分类。 Excludes: 各领域内部状态机(见对应顶层域)、通用 Tool 契约(见 ../tool-contracts-and-registry/)、执行顺序(见 ../tool-execution-pipeline/)。 Keywords: getBuiltinTools, ToolSearch, createGoalTools, createTaskTools, createTeamTools, createMcpContentTools, createMcpTaskTools, createLspTool, createBrowserTools.

Quellinformationen

Repository
echoVic/blade-code
Letzte Quellaktivität
26. August 2026 um 19:57
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
181
Forks
28

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
knowledge-integration-and-workflow-tool-adapters
description
Covers 领域能力如何包装成内置工具、getBuiltinTools 的 Session 依赖注入、ToolSearch 延迟激活,以及 Goal/Task/Team/Plan/Skill/LSP/MCP/Web/Config/Worktree 适配边界。 Navigate when: 新增或移除内置工具、改变工具集合条件、调整领域工厂依赖、排查 deferred schema、MCP helper 或工作流工具权限分类。 Excludes: 各领域内部状态机(见对应顶层域)、通用 Tool 契约(见 ../tool-contracts-and-registry/)、执行顺序(见 ../tool-execution-pipeline/)。 Keywords: getBuiltinTools, ToolSearch, createGoalTools, createTaskTools, createTeamTools, createMcpContentTools, createMcpTaskTools, createLspTool, createBrowserTools.
## Module Structure 该组件不实现领域核心状态,而是把 Session 拥有的服务、注册表和资源快照适配为统一 `Tool[]`。静态单例工具与依赖注入工厂在 `getBuiltinTools` 汇合,再由 SessionRuntime 加入动态 MCP 工具和按 Agent 的 allow/deny 过滤。 ### Directory Layout - `packages/cli/src/tools/builtin/index.ts` — 内置工具组合根与条件注入 - `packages/cli/src/tools/builtin/system/` — ToolSearch、Skill、SlashCommand、AskUserQuestion 与 prompt artifact - `packages/cli/src/tools/builtin/task/` / `team/` / `goal/` — Agent 工作流适配器 - `packages/cli/src/tools/builtin/mcp/` / `lsp/` — MCP 内容/任务与 Session LSP 查询适配器 - `packages/cli/src/tools/builtin/web/` — WebFetch/WebSearch、缓存和 Provider fallback - `packages/cli/src/tools/builtin/config/` / `memory/` / `plan/` / `worktree/` — 配置、记忆、模式和工作区适配器 ### Key Entry Points - `getBuiltinTools()` in `packages/cli/src/tools/builtin/index.ts` — 依据 Session 能力构造完整内置目录 - `toolSearchTool` in `packages/cli/src/tools/builtin/system/ToolSearchTool.ts` — 搜索并激活 deferred schema - `createMcpTool()` in `packages/cli/src/mcp/createMcpTool.ts` — 将外部 MCP tool definition 转换为 Blade Tool - `SessionRuntime.registerBuiltinTools()` in `packages/cli/src/agent/runtime/SessionRuntime.ts` — 注入 Session-owned Browser/LSP/资源 ## API Surface ### `getBuiltinTools` - `getBuiltinTools(options?)` — 返回当前 Session 的工具数组,并为需要状态的领域调用工厂 - `browserRuntime` — 提供时加入六个 Browser 工具,否则不暴露 Browser 能力 - `lspManager` / `lspResources` — 仅 manager available 时加入 LSP,并传给子代理 - `agentTeamsEnabled` — 唯一控制 Team 工具是否进入目录的显式能力门 - `agentResources` / `modelResources` — 固定当前 Session 的 Agent、Skill、命令与模型资源 - `userPromptArtifactStore` — 提供时加入 `ReadPromptArtifact` ### Domain Adapter Factories - `createGoalTools()` / `createTaskListTools()` / `createTeamTools()` — 把持久状态和协调服务包装为工具 - `createSkillTool()` / `createSlashCommandTool()` — 加载 Markdown 扩展并把约束返回给主对话 - `createLspTool()` / `createBrowserTools()` — 绑定 Session-owned runtime,避免模块级跨会话状态 - `createMcpContentTools()` / `createMcpTaskTools()` — 暴露当前 MCP catalog 与异步任务,而外部 MCP 方法由 `createMcpTool()` 动态生成 ### `ToolSearch` - `select:<name,...>` — 按精确名称返回 function declarations 并标记已加载 - 普通 query — 搜索名称、显示名、描述、分类和标签,并受 `max_results` 限制 ## Usage Examples ### Session 注入可用能力 ```typescript const builtinTools = await getBuiltinTools({ sessionId: this.sessionId, workspaceRoot: this.workspaceRoot, agentResources: this.agentResources, lspManager: this.lspManager, browserRuntime: this.browserRuntime, }); ``` ### 在基础目录上叠加 MCP 能力 ```typescript this.baseRegistry.replaceMcpTools(registry.getCatalogSnapshot().tools); this.baseRegistry.registerAll(createMcpContentTools(registry)); this.baseRegistry.registerAll(createMcpTaskTools(registry)); ``` ## Gotchas - `getBuiltinTools()` 混合模块级单例和 Session 工厂;任何持有 Session 状态的新工具必须通过 options 注入,不能在模块加载时捕获当前 cwd、Session 或 runtime (`packages/cli/src/tools/builtin/index.ts`, `packages/cli/src/agent/runtime/SessionRuntime.ts`) - 当前 fail-closed 重试清单只有 `GetGoal`、`Glob`、`Grep`、`LSP`、`MemoryRead`、`Read`、`ReadPromptArtifact`、`TaskGet`、`TaskList`、`TeamStatus`、`ToolSearch`;未列出的工具即使是 ReadOnly 也不会自动重放 (`packages/cli/tests/unit/tooling/tools/builtin/tool-retry-safety.test.ts`, `packages/cli/src/tools/core/createTool.ts`) - `ToolKind.ReadOnly` 是权限标签而非“没有状态变化”:`CreateGoal`、`UpdateGoal`、`TaskCreate/Update` 和多项 Team 工具会写持久状态但为 Plan 流程保留 ReadOnly 分类,因此仍显式关闭并发和重试 (`packages/cli/src/tools/builtin/goal/goalTools.ts`, `packages/cli/src/tools/builtin/task/taskListTools.ts`, `packages/cli/src/tools/builtin/team/teamTools.ts`) - `WebFetch` 被声明为 ReadOnly,但 schema 允许 POST/PUT/DELETE 和 body;它没有 `isRetrySafe`,修改权限或重试策略时不能只依据 kind 把任意请求视为无副作用 (`packages/cli/src/tools/builtin/web/webFetch.ts`) - `WebSearch` 没有工具级 `isRetrySafe`,但其内部 HTTP provider 会做最多 3 次指数退避并在多个 Provider 间 failover;不要再叠加 invocation 重放造成成倍请求 (`packages/cli/src/tools/builtin/web/webSearch.ts`) - MCP catalog 中的外部工具统一包装为 `ToolKind.Execute` 且默认不可重放,即使远端 schema/描述声称只读也不会改变本地权限基线 (`packages/cli/src/mcp/createMcpTool.ts`) - MCP 内容和任务 helper 是内置工具,不属于动态 `mcp__*` Map;替换 MCP catalog 时不能删除这些 helper,SessionRuntime 会分别注册两类工具 (`packages/cli/src/agent/runtime/SessionRuntime.ts`, `packages/cli/src/tools/builtin/mcp/mcpContentTools.ts`) - `ToolSearch` 只在 `ExecutionContext` 同时拿到 registry 和 deferred manager 时永久激活当前目录中的 schema;返回 `<functions>` 文本本身不会修改其他 executor 的加载状态 (`packages/cli/src/tools/builtin/system/ToolSearchTool.ts`, `packages/cli/src/agent/loop/executeLoopGenerator.ts`) - Browser、LSP、Teams 和 prompt artifact 都是条件工具;测试或备用 Agent 用缺省 options 调 `getBuiltinTools()` 时看到的目录必然更小 (`packages/cli/src/tools/builtin/index.ts`, `packages/cli/src/agent/Agent.ts`) - Skill 和 SlashCommand 返回的是供后续模型执行的指令及 `allowedTools`/model 元数据,不会在工具函数内部直接完成整个 Skill 或命令请求 (`packages/cli/src/tools/builtin/system/skill.ts`, `packages/cli/src/tools/builtin/system/slashCommand.ts`) - `TaskOutput` 聚合子代理、MCP task 和 Background Shell 三类 ID;新增后台任务类型时必须同步路由和结果形状,不能只在 producer 侧注册 (`packages/cli/src/tools/builtin/task/taskOutput.ts`) ## Architecture - 内置目录先由 `getBuiltinTools` 组装,SessionRuntime 再过滤非 `mcp__` 内置项、接入 MCP catalog 与 helper,最后为每个 Agent 创建独立过滤 registry (`packages/cli/src/tools/builtin/index.ts`, `packages/cli/src/agent/runtime/SessionRuntime.ts`) - 工厂注入将状态所有权留在领域服务:GoalStore、TaskListManager、LspSessionManager、SessionBrowserRuntime、SkillRegistry 等不会被通用 Tool 接口重新实现 (`packages/cli/src/tools/builtin/goal/goalTools.ts`, `packages/cli/src/tools/builtin/lsp/lsp.ts`, `packages/cli/src/tools/builtin/browser/browserTools.ts`) - deferred 工具仍已注册并可被 `ToolSearch` 搜索,只是 full schema 不进入 Provider 请求;核心工具集合由 `DeferredToolManager` 的固定 allowlist 立即暴露 (`packages/cli/src/tools/registry/DeferredToolManager.ts`, `packages/cli/src/tools/builtin/system/ToolSearchTool.ts`) - 动态 MCP catalog 变化会同步到所有已创建 executor registry,并按各自 allow/deny 集重新过滤,避免旧 Agent 看到已删除或越权工具 (`packages/cli/src/agent/runtime/SessionRuntime.ts`, `packages/cli/src/tools/registry/ToolRegistry.ts`) ## Decisions - Browser 只有在 SessionRuntime 创建并注入 runtime 后加入目录,保持 import/启动无 Chromium 副作用且确保 Session dispose 能回收 Context (`packages/cli/src/tools/builtin/index.ts`, `packages/cli/src/agent/runtime/SessionRuntime.ts`) - LSP 只有 Session manager 报告 available 时才注册,且 ACP-owned remote files 不走本地 LSP,避免暴露一个必然失败的 schema (`packages/cli/src/tools/builtin/lsp/lsp.ts`, `packages/cli/src/tools/builtin/index.ts`) - deferred catalog 用 ToolSearch 实现渐进披露,核心编辑/搜索/任务工具常驻,Browser 与多数集成能力仅以名称进入系统提示,降低每轮 schema token 成本 (`packages/cli/src/tools/registry/DeferredToolManager.ts`, `git:25d5a7d3`) ## Patterns - 单例无状态工具直接导入,依赖 Session 状态的工具统一使用 `createXTools(options)`;新增适配器应先判断它属于哪一类 (`packages/cli/src/tools/builtin/index.ts`) - 适配器失败应返回统一 `ToolResult` 和稳定 error type/code,把领域对象限制在 metadata,而不是把原始异常或内部路径直接泄露给模型 (`packages/cli/src/tools/builtin/browser/browserTools.ts`, `packages/cli/src/mcp/createMcpTool.ts`) - 读取类领域工具只有经过幂等审计后才添加 `isRetrySafe: true`;“查询”名称、ReadOnly kind 或 `isConcurrencySafe` 都不足以作为 opt-in 理由 (`packages/cli/src/tools/builtin/lsp/lsp.ts`, `packages/cli/src/tools/builtin/system/readPromptArtifact.ts`) ## Consumer Analysis - `packages/cli/src/agent/runtime/SessionRuntime.ts` 是完整消费者:它注入 Session 资源、注册 MCP helper、传播 catalog 变化,并为前台 Agent、子代理和旁路对话创建过滤 executor (`packages/cli/src/agent/runtime/SessionRuntime.ts`) - `packages/cli/src/agent/Agent.ts` 是兼容/独立消费者:缺少完整 Session runtime 时用默认资源构建较小目录,并单独连接 MCP 内容工具 (`packages/cli/src/agent/Agent.ts`) - `packages/cli/src/agent/loop/executeLoopGenerator.ts` 消费模式过滤后的 declarations 与 deferred listing,并把 registry/manager 回注到调用上下文以支持 ToolSearch (`packages/cli/src/agent/loop/executeLoopGenerator.ts`) - `packages/cli/src/mcp/` 同时生产动态外部 Tool 和供 builtin 工厂使用的 Registry;外部调用、内容目录和异步 task 的所有权不能在适配层混为一类 (`packages/cli/src/mcp/createMcpTool.ts`, `packages/cli/src/mcp/McpRegistry.ts`) - `packages/cli/src/ui/`、`packages/cli/src/commands/headless.ts`、`packages/cli/src/server/` 和 `packages/cli/src/acp/` 不直接实现领域工具,而是消费统一 ToolResult、确认请求和展示投影 (`packages/cli/src/tools/display/ToolResultProjector.ts`, `packages/cli/src/ui/utils/toolFormatters.ts`)
Auf GitHub ansehen