import type { ToolPlugin, ToolContext, ToolResult, ChatCompletionFunctionTool } from "../types/tool.js"; import type { PermissionMode } from "../types/permission.js"; import { type DeferredToolDecision } from "./deferred-tools.js"; /** ToolManager 的 deferred 工具配置(12.3.8 步骤 c)。undefined = 不启用 deferred(默认行为不变)。 */ export interface ToolManagerDeferredConfig { /** 工具数 >= 此值才进 deferred 模式(默认 30) */ deferredThreshold?: number; /** 核心工具名(默认 decideDeferredTools 的 DEFAULT_CORE_TOOL_NAMES) */ coreToolNames?: string[]; } export declare class ToolManager { private toolsRegistry; private _configuredPermissionMode; /** deferred 配置(可选,未设则 getToolsConfigWithDeferred 退化为全量)。 */ private _deferredConfig; /** 本轮已激活的 deferred 工具名(per-ToolManager,每次 run new 一个 manager 故天然 per-runLoop)。 */ private _activatedDeferred; register(tool: ToolPlugin): void; registerMultiple(tools: ToolPlugin[]): void; unregister(name: string): boolean; unregisterMultiple(names: string[]): void; execute(name: string, args: Record, context: ToolContext): Promise; list(): ToolPlugin[]; /** * 返回非并发安全的工具名(isConcurrencySafe !== true)。 * 未来并行调度时,这些工具必须顺序执行;其余可并行。 */ getConcurrencyUnsafeTools(): string[]; has(name: string): boolean; getTools(): ToolPlugin[]; getToolsConfig(options?: { availableSubagents?: unknown[]; availableSkills?: unknown[]; workdir?: string; isSubagent?: boolean; }): ChatCompletionFunctionTool[]; getPermissionMode(): PermissionMode; setPermissionMode(mode: PermissionMode): void; /** 配置 deferred 工具机制(12.3.8 步骤 c)。undefined = 关闭(默认行为不变)。 */ setDeferredConfig(config: ToolManagerDeferredConfig | undefined): void; /** 获取当前 deferred 决策(供 host/测试观察)。无配置或工具数不足阈值时 mode="all"。 */ getDeferredDecision(options?: { availableSubagents?: unknown[]; availableSkills?: unknown[]; workdir?: string; isSubagent?: boolean; }): DeferredToolDecision; /** * 返回注入请求的工具 schema(12.3.8 步骤 c)。 * - 未配置 deferred → 等价 getToolsConfig(全量,默认行为不变)。 * - mode:"all" → 全量(工具数未达阈值)。 * - mode:"deferred" → 核心集 + tool_search 元工具 + 本轮已激活 deferred 的 schema。 * host 在 agent.ts 接线时调用本方法替代 getToolsConfig。 */ getToolsConfigWithDeferred(options?: { availableSubagents?: unknown[]; availableSkills?: unknown[]; workdir?: string; isSubagent?: boolean; }): ChatCompletionFunctionTool[]; /** * tool_search 元工具的执行体(12.3.8 步骤 c)。 * 从 deferred 工具池检索匹配 schema,把激活的工具名记入本轮激活集(后续请求注入)。 * host 注册 tool_search 元工具时把 execute 委托给本方法。 */ executeToolSearch(args: { query?: string; names?: string[]; }): Promise; /** 计算当前 deferred 决策(内部,纯函数 decideDeferredTools 的薄封装)。 */ private _computeDeferredDecision; }