import type { ToolPlugin } from "../types/tool.js"; /** tool_search 元工具名(deferred 模式下注入 coreTools,模型调用它检索 deferred 工具 schema)。 */ export declare const TOOL_SEARCH_NAME = "tool_search"; /** 默认核心工具集(覆盖 90% 场景,工具数超阈值时这些仍全量注入)。 */ export declare const DEFAULT_CORE_TOOL_NAMES: readonly ["read", "edit", "write", "bash", "grep", "glob", "task"]; /** 工具数达到此阈值才启用 deferred 模式(否则全量注入,保持当前行为零回归)。 */ export declare const DEFAULT_DEFERRED_THRESHOLD = 30; export interface DeferredToolDecision { /** all=全量注入(工具少/未达阈值);deferred=核心 + tool_search,其余按需暴露 */ mode: "all" | "deferred"; /** 注入 schema 的工具名(含 tool_search 元工具,若 deferred 模式) */ coreTools: string[]; /** 不注入 schema、按需暴露的工具名 */ deferredTools: string[]; } export interface DecideDeferredToolsInput { /** 全量已注册工具 */ allTools: ToolPlugin[]; /** 静态白名单(可选):先子集化再分 core/deferred,与 deferred 正交叠加 */ toolWhitelist?: string[]; /** 工具数 >= 此值才进 deferred 模式(默认 30) */ deferredThreshold?: number; /** 配置强制核心工具名(默认 DEFAULT_CORE_TOOL_NAMES) */ coreToolNames?: string[]; } /** * 决策工具的 deferred 划分。纯函数,零 Effect 依赖。 * * 规则: * 1. toolWhitelist 先子集化(若提供,只保留白名单内工具)。 * 2. 子集化后工具数 < threshold → mode:"all",全量注入(无 tool_search)。 * 3. 否则 mode:"deferred": * - 显式 deferred:false → 永进 core * - 显式 deferred:true → 永进 deferred * - 未声明 → 看是否在 coreToolNames(默认核心集)内,在则 core,否则 deferred * - coreTools 追加 tool_search 元工具(若未已被注册为真实工具,去重) * 4. core 与 deferred 互斥。 */ export declare function decideDeferredTools(input: DecideDeferredToolsInput): DeferredToolDecision; /** 检索结果项:工具的完整 schema(name/description/parameters),供按需注入请求。 */ export interface DeferredToolSearchResult { name: string; description: string; parameters: Record; } export interface SearchDeferredToolsInput { /** 候选 deferred 工具池(通常为 decideDeferredTools 划出的 deferredTools 对应的 ToolPlugin) */ tools: ToolPlugin[]; /** 精确工具名匹配(可选) */ names?: string[]; /** 模糊查询(可选):按 name 与 description 子串匹配,大小写不敏感 */ query?: string; } /** * 检索 deferred 工具 schema(纯函数)。tool_search 元工具的执行核心(步骤 b)。 * 模型调用 tool_search({names?, query?})时,本函数从候选池返回匹配工具的完整 schema, * host 据此把激活的工具 schema 注入后续请求。 * * 规则: * - names 精确匹配 + query 模糊匹配(name/description 子串,大小写不敏感),取并集去重。 * - 无 names 也无 query → 返回空(不默认返回全部,防 schema 膨胀)。 * - 保持工具池相对顺序(稳定去重)。 * - 载体无关:本函数只做检索,不处理"激活态写入/注入"(host 集成层职责,步骤 c)。 */ export declare function searchDeferredTools(input: SearchDeferredToolsInput): DeferredToolSearchResult[];