import type { DomainName } from "../constants.js"; /** * Rebuild a strict object schema with a filter-aware unrecognized-key message. * Anything else (raw shapes, non-strict objects, unions) is returned as-is — * we never make a lenient schema strict as a side effect. * * The rebuild reuses the exact same field schemas, so defaults, descriptions * and per-field messages are preserved. Only issues raised *by the object * itself* reach our error function; a field-level failure (e.g. `page: 500`) * keeps the message its own schema defines, which is why the returned * `undefined` fallback matters. */ export declare function withFilterHints(schema: T, domain?: DomainName): T; interface ToolConfigLike { inputSchema?: unknown; annotations?: { openWorldHint?: boolean; }; } /** * Is this a search-shaped tool, i.e. one whose filter vocabulary is worth * explaining? * * Keyed on the *registration* rather than the name only. `openWorldHint: true` * is exactly the annotation the codebase reserves for paginated, * keyword-filtered listing tools (see CLAUDE.md §MCP Annotations), so it catches * `boond_reporting_{companies,projects,resources,synthesis,production_plans}` — * strict schemas carrying the same treacherous `perimeter*` / `*States` * vocabulary, which a `_search` suffix test silently skipped — and any future * hand-rolled search tool that doesn't happen to be named `*_search`. The name * check is kept as an OR so a listing tool that omits the annotation is still * covered. */ export declare function isSearchTool(name: string, config?: ToolConfigLike): boolean; /** * Return the registration config a search tool should be registered with: * the same object with its `inputSchema` swapped for the hint-enriched clone. * Non-search tools and configs without a strict object schema come back * untouched (same reference), so this is a no-op for the ~150 other tools. */ export declare function withValidationFeedback(name: string, config: C, domain?: DomainName): C; export {}; //# sourceMappingURL=validation-wrapper.d.ts.map