/**
 * JSON-Schema normalizer for the protocol bridge.
 *
 * A remote MCP server advertises each tool with an `inputSchema` it authored to
 * its own taste: it may omit `type`, nest schemas built against a different JSON
 * Schema draft, or sprinkle in vendor keywords no provider understands. Before
 * that schema can become a {@link ToolDescriptor.parameters} the model is shown,
 * it must be reshaped into a small, defensive, draft-agnostic subset every
 * provider accepts.
 *
 * {@link normalizeSchema} performs that reshaping. It is built from pure,
 * table-driven functions rather than a single sprawling `switch`: a dispatch
 * table keyed by the schema's declared `type` selects a per-type normalizer,
 * and a {@link relax} combinator strips the keywords no provider validates
 * against. Every function here is total and side-effect free — given the same
 * input it returns the same fresh object and never mutates its argument.
 */
import type { JsonSchema } from "../../llmgateway/contract";
/**
 * Normalize an untrusted remote `inputSchema` into a clean, defensive
 * {@link JsonSchema} suitable for {@link ToolDescriptor.parameters}.
 *
 * The declared `type` selects a per-type normalizer from {@link NORMALIZERS};
 * an absent, non-string, or unrecognized `type` (including the array-of-types
 * form) routes to {@link normalizeUntyped}, which yields a closed object schema.
 * Unsupported keywords are stripped at every level by {@link relax}, and child
 * schemas are normalized recursively. The argument is never mutated.
 */
export declare function normalizeSchema(input: unknown): JsonSchema;
