/** * gatedTools — wrap any ToolProvider with a per-tool gating predicate. * * The DECORATOR for tool providers. Filters the inner provider's * output by running the predicate against each tool name. Composes * freely: * * gatedTools( * gatedTools(staticTools(allTools), readOnlyPredicate), * skillGatePredicate, * ) * * Reads as: "static list of all tools, filtered by readonly policy, * then further filtered by the active skill's tool set." Each gate * is one concern; composition handles the rest. * * Pattern: Decorator (GoF) — wraps any ToolProvider with an additional * filter. Mirrors `withRetry` / `withFallback` over LLMProvider. * * @example Read-only enforcement * const readOnly = gatedTools( * staticTools([read, write]), * (toolName) => toolName.startsWith('read_'), * ); * readOnly.list(ctx); // → [read] * * @example Skill-gated dispatch (autoActivate use case) * const skillGated = gatedTools( * staticTools(allTools), * (toolName, ctx) => ctx.activeSkillId * ? skillToolMap[ctx.activeSkillId].includes(toolName) * : alwaysVisible.includes(toolName), * ); */ import type { ToolProvider, ToolGatePredicate } from './types.js'; export declare function gatedTools(inner: ToolProvider, predicate: ToolGatePredicate): ToolProvider; //# sourceMappingURL=gatedTools.d.ts.map