import type { IdeAdapter, IdeMcpProfile } from './ide-types.js'; /** The placeholder an adapter's tool-name template uses for the bare tool id. */ export declare const TOOL_ID_PLACEHOLDER = "*"; /** A concrete tool name matched back to the adapter template that produced it. */ export interface McpToolMatch { /** The bare tool id — the part the template's placeholder stood for. */ readonly toolId: string; /** The template that matched, so a caller can report which channel fired. */ readonly template: string; } /** The declared profile, or an empty one for an adapter that opts out. */ export declare function mcpProfileOf(adapter: IdeAdapter): IdeMcpProfile | undefined; /** Every tool-name template the adapter declares, in declaration order. */ export declare function mcpToolNameTemplates(adapter: IdeAdapter): readonly string[]; /** The concrete harness tool name for a tool id under one template. */ export declare function mcpToolName(template: string, toolId: string): string; /** * The tool id a concrete name carries under one template, or `undefined`. The * template is anchored: an unanchored match would let a longer name smuggle the * id (and would make `matchMcpToolName` order-dependent). */ export declare function mcpToolIdFrom(template: string, toolName: string): string | undefined; /** * Match a concrete harness tool name against every template the adapter * declares, in declaration order. This is the ONE entry point the enforcement * branch uses, so "which channels are covered" is answered by the adapter alone. */ export declare function matchMcpToolName(adapter: IdeAdapter, toolName: string): McpToolMatch | undefined; /** * The PreToolUse `matcher` source covering every declared channel, ready to be * joined into a hook entry's matcher field. `*` becomes `.*` and everything else * is escaped, so the source matches exactly the names the templates describe. */ export declare function mcpHookMatcher(adapter: IdeAdapter): string | undefined;