/**
 * @fileoverview Cross-vendor JSON Schema portability lint rules.
 *
 * MCP pins JSON Schema 2020-12 as the default dialect (SEP-1613), but the LLM
 * vendors that ultimately consume tool/resource schemas each accept a different
 * subset of 2020-12. Schemas that pass `schema-serializable` and the rest of
 * the linter can still hard-fail at registration or silently lose fields when
 * the same server is consumed by a non-Anthropic client.
 *
 * These rules walk the emitted JSON Schema (not the Zod tree) and flag the
 * patterns most likely to break cross-vendor — see issue #132 for the spec
 * matrix and field-report evidence (gpt-5-codex hard-rejecting `format: "uri"`
 * via `cyanheads/git-mcp-server#47`, Gemini's `$defs` and `anyOf`-type-required
 * rules, Mastra's silent-drop matrix).
 *
 * @module src/linter/rules/portability-rules
 */
import type { LintDefinitionType, LintDiagnostic } from '../types.js';
/**
 * Default allowlist of JSON Schema `format` values, taken from OpenAI's
 * structured-outputs documentation — the strictest commonly-used target.
 * Override via `validateDefinitions({ formatAllowlist })` when targeting
 * a different vendor matrix.
 */
export declare const DEFAULT_FORMAT_ALLOWLIST: ReadonlySet<string>;
/**
 * Options threaded from `validateDefinitions` into the portability rule
 * runner. `formatAllowlist` is always resolved (default applied) before
 * being passed; rules treat absent allowlist as a programmer error.
 */
export interface PortabilityOptions {
    /** Resolved `format` allowlist. */
    formatAllowlist: ReadonlySet<string>;
    /**
     * Promotes opt-in rules (`schema-no-defs`, `schema-dialect-tag`) to
     * warnings when set to `'strict'`. Otherwise those rules don't fire.
     */
    portability?: 'strict';
}
/**
 * Runs every cross-vendor portability rule against one Zod schema.
 *
 * Caller contract: pass a ZodObject (validated by `checkIsZodObject`) that has
 * already passed `checkSchemaSerializable`. Non-objects are silently skipped;
 * serialization failures return no diagnostics so the existing
 * `schema-serializable` error stays the single source of truth for that class.
 */
export declare function lintSchemaPortability(schema: unknown, fieldName: string, definitionType: LintDefinitionType, definitionName: string, opts: PortabilityOptions): LintDiagnostic[];
//# sourceMappingURL=portability-rules.d.ts.map