/** * Converts Zod v4 schemas to JSON Schema using native toJSONSchema. */ import { toJSONSchema, type ZodTypeAny } from 'zod/v4' export type JsonSchema7Type = Record // toolToAPISchema() runs this for every tool on every API request (~60-250 // times/turn). Tool schemas are wrapped with lazySchema() which guarantees the // same ZodTypeAny reference per session, so we can cache by identity. const cache = new WeakMap() /** * Converts a Zod v4 schema to JSON Schema format. */ export function zodToJsonSchema(schema: ZodTypeAny): JsonSchema7Type { const hit = cache.get(schema) if (hit) return hit const result = toJSONSchema(schema) as JsonSchema7Type cache.set(schema, result) return result }