import type { ProgramIO } from '../../cli/cli-helpers.js'; import type { IdeAdapter } from '../ide/ide-types.js'; /** The tool names the proven surface declares. */ export type McpSurfaceLookup = () => readonly string[]; /** The production lookup. Injectable so a test can make it throw and watch the refusal. */ export declare function lookupAllowedMcpTools(): readonly string[]; /** The adapter whose harness sent this payload. */ export declare function detectAdapter(parsedStdin: unknown): IdeAdapter; /** The deny emission, in the shape the host already treats as a hard block. */ export declare function emitMcpDeny(io: ProgramIO, code: string, reason: string): void; /** * Run the MCP branch over one parsed hook payload. * * @returns `true` when the call was BLOCKED (a deny has already been emitted). * `false` means "this is not an MCP call for this surface" — every * other tool name, and every harness declaring no MCP naming, lands * there and keeps the allow/deny result it had before. */ export declare function handleMcpSurfaceGate(io: ProgramIO, parsedStdin: unknown, lookup?: McpSurfaceLookup, adapterOf?: (payload: unknown) => IdeAdapter): boolean;