import type { ToolCallRepairFunction, ToolSet } from "../types/index.js";
import type { ToolNameResolution } from "../types/index.js";
/**
 * Create an `experimental_repairToolCall` handler for streamText/generateText.
 * Fully dynamic — reads the tool schema at repair time, no configuration needed.
 */
export declare function createToolCallRepair(): ToolCallRepairFunction<ToolSet>;
/**
 * Match a possibly-misspelled tool name against a list of available tool
 * names. Strategies (in order): case-insensitive exact → unambiguous
 * substring → Levenshtein.
 *
 * Pulled out of `repairToolName` so the same matching policy can be reused
 * outside the AI-SDK generation loop — `experimental_repairToolCall` only
 * runs inside `streamText`/`generateText`, so a name typo at a direct MCP
 * execution boundary (`NeuroLink.executeExternalMCPTool`) previously had no
 * recovery at all. This function is pure name-matching: no `LanguageModelV3ToolCall`,
 * no logging, so callers with a different call shape can reuse it directly.
 */
export declare function resolveToolName(calledName: string, availableTools: string[]): ToolNameResolution | null;
/**
 * Rank every available tool name by similarity to `calledName` (ascending
 * normalized Levenshtein distance) and return the closest `limit`.
 *
 * Used to build the candidate list on `ExternalMcpToolNotFoundError` when
 * `resolveToolName` found no unambiguous match — unlike `resolveToolName`,
 * this makes no accept/reject judgment, it just orders what is available so
 * a caller (human or AI) can pick the right name themselves.
 */
export declare function rankToolNameCandidates(calledName: string, availableTools: string[], limit?: number): string[];
/**
 * Thrown at a direct MCP execution boundary (`NeuroLink.executeExternalMCPTool`)
 * when `resolveToolName` cannot find an unambiguous match for a requested
 * tool name against a server's discovered tools. Distinct from the plain
 * `Error` that `ToolDiscoveryService.executeTool` throws deeper in the stack
 * for the same condition, so callers can distinguish "no match — here are
 * the closest names" from every other execution failure programmatically,
 * instead of parsing a message string.
 */
export declare class ExternalMcpToolNotFoundError extends Error {
    /** The tool name that was requested and could not be resolved. */
    readonly requestedName: string;
    /** The server the tool was requested against. */
    readonly serverId: string;
    /** Closest available tool names on that server, capped (see `rankToolNameCandidates`). */
    readonly candidates: string[];
    constructor(requestedName: string, serverId: string, candidates: string[]);
}
/**
 * Coerce a value to match the expected schema type.
 * Handles: string→number, JSON string→object, JSON string→array, value→[value].
 * Exported for reuse by the MCP-layer parameter validator
 * (toolDiscoveryService), which coerces before rejecting so a recoverable
 * mismatch doesn't cost the agent loop a full model round-trip.
 */
export declare function coerceType(value: unknown, propSchema: Record<string, unknown>): unknown;
