@ai-matrx/content-ir 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +24 -5
  3. package/dist/convert.cjs +1680 -0
  4. package/dist/convert.cjs.map +1 -0
  5. package/dist/convert.d.cts +230 -0
  6. package/dist/convert.d.ts +230 -0
  7. package/dist/convert.js +1666 -0
  8. package/dist/convert.js.map +1 -0
  9. package/dist/core.cjs +2493 -0
  10. package/dist/core.cjs.map +1 -0
  11. package/dist/core.d.cts +370 -0
  12. package/dist/core.d.ts +370 -0
  13. package/dist/core.js +2452 -0
  14. package/dist/core.js.map +1 -0
  15. package/dist/index.cjs +3 -1
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +9 -2030
  18. package/dist/index.d.ts +9 -2030
  19. package/dist/index.js +3 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/ir-tree-DbLVxbf1.d.cts +441 -0
  22. package/dist/ir-tree-Dsc_66ek.d.ts +441 -0
  23. package/dist/ir-types-95bA2cXH.d.cts +119 -0
  24. package/dist/ir-types-95bA2cXH.d.ts +119 -0
  25. package/dist/kind-schema.types-CwncWj9U.d.cts +139 -0
  26. package/dist/kind-schema.types-CwncWj9U.d.ts +139 -0
  27. package/dist/registry.cjs +468 -0
  28. package/dist/registry.cjs.map +1 -0
  29. package/dist/registry.d.cts +357 -0
  30. package/dist/registry.d.ts +357 -0
  31. package/dist/registry.js +456 -0
  32. package/dist/registry.js.map +1 -0
  33. package/dist/session.cjs +2052 -0
  34. package/dist/session.cjs.map +1 -0
  35. package/dist/session.d.cts +75 -0
  36. package/dist/session.d.ts +75 -0
  37. package/dist/session.js +2047 -0
  38. package/dist/session.js.map +1 -0
  39. package/dist/wire.cjs +310 -0
  40. package/dist/wire.cjs.map +1 -0
  41. package/dist/wire.d.cts +326 -0
  42. package/dist/wire.d.ts +326 -0
  43. package/dist/wire.js +291 -0
  44. package/dist/wire.js.map +1 -0
  45. package/package.json +73 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../core/kind-schema.types.ts","../utils/text-case-converter.ts","../core/schema-structure.ts","../convert/openai-schema-converter.ts","../convert/kind-to-json-schema.ts","../convert/json-schema-to-kind.ts"],"names":["type","nullable"],"mappings":"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","file":"convert.cjs","sourcesContent":["/**\n * KindSchema — the data-defined field model for a registered kind.\n *\n * `__kind` (KIND_KEY) is the carried discriminator: it is NOT part of a\n * kind's field map; the parser enforces it via `KindSchema.kind` and stamps\n * it onto every compliant snapshot.\n *\n * Moved from app/(dev)/demos/json-block-detector/kind-schemas.ts.\n *\n * 2026-07-15 expressivity extension (A2) — four constructs the Python-owned\n * pydantic schemas need that the v1 vocabulary could not express:\n * - `{type:\"json\"}` / `{type:\"json[]\"}` — any JSON value / array of any\n * JSON values (pydantic bare `Any` fields, `items: {}` arrays, `{}`\n * schemas). A `json` value is implicitly nullable — `null` IS a JSON\n * value — so `nullable` is meaningless (and ignored) on it.\n * - `record` values widened to `\"json\"` (pydantic `dict[str, Any]` /\n * `additionalProperties: true`).\n * - `union` may now carry `kinds` (object unions — anyOf over kind refs,\n * optionally mixed with scalars). Refs externalize to `kind_edge` rows\n * exactly like `array.itemKinds`.\n * - `KindSchema.root` — a NON-OBJECT root form: the kind's VALUE is the\n * root field itself (scalar / array / json / open object), not a `__kind`\n * object with fields. Root-form kinds are data-only: the streaming\n * `__kind` parser cannot type them (a scalar cannot carry a\n * discriminator) and refuses them loudly; validation goes through the\n * emitted JSON Schema (ajv / Pydantic). `root` and a non-empty `fields`\n * are mutually exclusive.\n * - `inline_object.open` — `additionalProperties: true`; fixes the\n * open-empty-object defect where an open `inline_object{fields:{}}`\n * materialized as CLOSED (schema_proposal / item_presentation class).\n *\n * 2026-07-15 input-semantics extension (W3-A, agent-input bridge) — the\n * constructs the Wave-1 sufficiency survey of all 1,529 live agent variables\n * showed FieldSchema could not carry, added so `AgentVariable` ⇄ kind\n * conversion is faithful:\n * - `FieldBase.description` — human guidance; round-trips JSON Schema\n * `description` and VariableDefinition `helpText`.\n * - `FieldBase.default` — the field's default VALUE (JSON Schema `default`,\n * VariableDefinition `defaultValue`). Annotation-level: validators never\n * apply it; emitters carry it verbatim.\n * - `enum.open` — \"one of these options OR any string\" (the FE's\n * `allowOther`). Emits as `anyOf: [{type:\"string\", enum}, {type:\"string\"}]`\n * so the option set survives instead of widening to bare `string`.\n * - `number` bounds `min`/`max`/`step` — JSON Schema\n * `minimum`/`maximum`/`multipleOf` (number/slider components).\n * - `string[].values` (+ `open`) — an items-enum: array of strings drawn\n * from an option set (checkbox components), `open` meaning the set is\n * advisory (`allowOther` on a multi-select).\n * Picklist bindings, scope bindings, and media component identity are\n * PROVENANCE, not structure — they never enter FieldSchema; the bridge\n * carries them out-of-band (see convert/kind-variable-bridge.ts sidecar).\n */\n\n/** System discriminator — hardcoded, not part of per-kind field schemas. */\nexport const KIND_KEY = \"__kind\";\n\nexport type ScalarFieldType = \"string\" | \"number\" | \"boolean\";\n\nexport type ArrayItemScalarType = \"string\" | \"number\" | \"boolean\";\n\n/** Value domain of a `record` field — typed scalars, or any JSON value. */\nexport type RecordValueType = ArrayItemScalarType | \"json\";\n\ntype FieldBase = {\n required?: boolean;\n nullable?: boolean;\n /** Human guidance — JSON Schema `description` / variable `helpText`. */\n description?: string;\n /**\n * Default VALUE (JSON Schema `default` / variable `defaultValue`).\n * Annotation-level: validators never apply it; emitters carry it verbatim.\n */\n default?: unknown;\n};\n\nexport type FieldSchema =\n | (FieldBase & { type: \"string\" | \"boolean\" })\n | (FieldBase & {\n type: \"number\";\n /** Inclusive lower bound — JSON Schema `minimum`. */\n min?: number;\n /** Inclusive upper bound — JSON Schema `maximum`. */\n max?: number;\n /** Increment — JSON Schema `multipleOf`. Annotation-level in the parser. */\n step?: number;\n })\n | (FieldBase & {\n type: \"string[]\";\n /** Items-enum: each item must be one of these values (checkbox option sets). */\n values?: string[];\n /** With `values`: the set is advisory — any string item is also legal (`allowOther`). */\n open?: boolean;\n })\n | (FieldBase & { type: \"number[]\" | \"boolean[]\" })\n | (FieldBase & { type: \"json\" })\n | (FieldBase & { type: \"json[]\" })\n | (FieldBase & { type: \"array\"; itemKinds: string[] })\n | (FieldBase & { type: \"object\"; kind: string })\n | (FieldBase & {\n type: \"inline_object\";\n fields: Record<string, FieldSchema>;\n /** additionalProperties: true — unknown keys are legal, not residue-only. */\n open?: boolean;\n })\n | (FieldBase & { type: \"record\"; values: RecordValueType })\n | (FieldBase & {\n type: \"enum\";\n values: string[];\n /** \"One of these OR any string\" — the option set is advisory (`allowOther`). */\n open?: boolean;\n })\n | (FieldBase & {\n type: \"union\";\n scalars: Array<\"string\" | \"number\" | \"boolean\">;\n /** Object union members — kind refs (anyOf of $refs), may mix with scalars. */\n kinds?: string[];\n });\n\n/**\n * Domain fields only — __kind is enforced by the parser via KindSchema.kind\n * (block slug). A kind with `root` set has NO field map (fields stays `{}`):\n * its value is the root field's type at the top level. See the module header.\n */\nexport type KindSchema = {\n kind: string;\n fields: Record<string, FieldSchema>;\n /** Non-object root form — mutually exclusive with a non-empty `fields`. */\n root?: FieldSchema;\n};\n\nexport function readObjectKind(value: Record<string, unknown>): string | null {\n const kind = value[KIND_KEY];\n return typeof kind === \"string\" ? kind : null;\n}\n\nexport function isScalarArrayType(\n type: FieldSchema[\"type\"],\n): type is \"string[]\" | \"number[]\" | \"boolean[]\" {\n return type === \"string[]\" || type === \"number[]\" || type === \"boolean[]\";\n}\n\nexport function scalarArrayItemType(\n type: \"string[]\" | \"number[]\" | \"boolean[]\",\n): ArrayItemScalarType {\n if (type === \"number[]\") return \"number\";\n if (type === \"boolean[]\") return \"boolean\";\n return \"string\";\n}\n\n/**\n * Does this field's value domain accept ANY JSON shape (object/array/scalar/\n * null alike)? True for `json` and `json[]` ITEMS — the parser treats the\n * subtree under such a field as opaque (no kind identification, no raw_object\n * degradation: unknown structure is the declared contract, not a failure).\n */\nexport function isJsonAnyField(field: FieldSchema): boolean {\n return field.type === \"json\" || field.type === \"json[]\";\n}\n","/**\n * Text formatting options\n */\nexport type TextCaseOption = 'title' | 'sentence' | 'normal' | 'lower' | 'upper';\n\nexport interface TextFormatterOptions {\n /**\n * Text case to apply after normalization\n * - title: First Letter Of Each Word Capitalized\n * - sentence: First letter of first word capitalized\n * - normal: No case transformation after normalization\n * - lower: all text lowercase\n * - upper: ALL TEXT UPPERCASE\n */\n textCase?: TextCaseOption;\n \n /**\n * Map of words to replace with specific formatting\n * Example: { 'api': 'API', 'ui': 'UI' }\n */\n wordReplacements?: Record<string, string>;\n \n /**\n * Whether to trim the result\n */\n trim?: boolean;\n}\n\n/**\n * Default word replacements for common acronyms and terms\n */\nexport type ReplacementMap = Readonly<Record<string, string>>;\n\nexport const DEFAULT_WORD_REPLACEMENTS: ReplacementMap = {\n // Acronyms & initialisms\n 'api': 'API',\n 'apis': 'APIs',\n 'ui': 'UI',\n 'ux': 'UX',\n 'id': 'ID',\n 'ids': 'IDs',\n 'qr': 'QR',\n 'ssr': 'SSR',\n 'csr': 'CSR',\n 'ssg': 'SSG',\n 'isr': 'ISR',\n 'spa': 'SPA',\n 'pwa': 'PWA',\n 'sdk': 'SDK',\n 'sdks': 'SDKs',\n 'cli': 'CLI',\n 'tty': 'TTY',\n 'repl': 'REPL',\n 'ci': 'CI',\n 'cd': 'CD',\n 'cpu': 'CPU',\n 'cpus': 'CPUs',\n 'gpu': 'GPU',\n 'gpus': 'GPUs',\n 'ram': 'RAM',\n 'rom': 'ROM',\n 'ssd': 'SSD',\n 'ssds': 'SSDs',\n 'hdd': 'HDD',\n 'hdds': 'HDDs',\n 'kpi': 'KPI',\n 'kpis': 'KPIs',\n 'sla': 'SLA',\n 'slas': 'SLAs',\n 'slo': 'SLO',\n 'slos': 'SLOs',\n 'sli': 'SLI',\n 'slis': 'SLIs',\n 'dom': 'DOM',\n\n // Web, formats, protocols\n 'url': 'URL',\n 'urls': 'URLs',\n 'uri': 'URI',\n 'uris': 'URIs',\n 'http': 'HTTP',\n 'https': 'HTTPS',\n 'html': 'HTML',\n 'css': 'CSS',\n 'json': 'JSON',\n 'yaml': 'YAML',\n 'yml': 'YML',\n 'toml': 'TOML',\n 'csv': 'CSV',\n 'pdf': 'PDF',\n 'tsv': 'TSV',\n 'jpg': 'JPG',\n 'jpeg': 'JPEG',\n 'png': 'PNG',\n 'gif': 'GIF',\n 'webp': 'WebP',\n 'heic': 'HEIC',\n 'heif': 'HEIF',\n 'bmp': 'BMP',\n 'tiff': 'TIFF',\n 'ico': 'ICO',\n 'xml': 'XML',\n 'sql': 'SQL',\n 'db': 'DB',\n 'dbs': 'DBs',\n 'nosql': 'NoSQL',\n 'graphql': 'GraphQL',\n 'grpc': 'gRPC',\n 'rest': 'REST',\n 'restful': 'RESTful',\n 'websocket': 'WebSocket',\n 'websockets': 'WebSockets',\n 'webrtc': 'WebRTC',\n\n // Networking\n 'ip': 'IP',\n 'ipv4': 'IPv4',\n 'ipv6': 'IPv6',\n 'dns': 'DNS',\n 'dhcp': 'DHCP',\n 'nat': 'NAT',\n 'tcp': 'TCP',\n 'udp': 'UDP',\n 'icmp': 'ICMP',\n 'ttl': 'TTL',\n 'lan': 'LAN',\n 'wan': 'WAN',\n 'vlan': 'VLAN',\n 'cdn': 'CDN',\n 'ftp': 'FTP',\n 'ssh': 'SSH',\n 'tls': 'TLS',\n 'ssl': 'SSL',\n\n // Security & crypto\n 'jwt': 'JWT',\n 'jws': 'JWS',\n 'jwe': 'JWE',\n 'hmac': 'HMAC',\n 'rsa': 'RSA',\n 'ecdsa': 'ECDSA',\n 'aes': 'AES',\n 'pbkdf2': 'PBKDF2',\n 'argon2': 'Argon2',\n 'scrypt': 'scrypt',\n 'totp': 'TOTP',\n 'hotp': 'HOTP',\n 'mfa': 'MFA',\n '2fa': '2FA',\n 'csrf': 'CSRF',\n 'xss': 'XSS',\n 'ssrf': 'SSRF',\n 'rce': 'RCE',\n 'dos': 'DoS',\n 'ddos': 'DDoS',\n 'mitm': 'MITM',\n 'csp': 'CSP',\n 'cors': 'CORS',\n 'pii': 'PII',\n 'phi': 'PHI',\n 'gdpr': 'GDPR',\n 'ccpa': 'CCPA',\n 'hipaa': 'HIPAA',\n 'rfc': 'RFC',\n\n // Platforms, langs, tools (single-token)\n 'javascript': 'JavaScript',\n 'typescript': 'TypeScript',\n 'jsx': 'JSX',\n 'tsx': 'TSX',\n 'node': 'Node', // (used when tokenized alone)\n 'deno': 'Deno',\n 'bun': 'Bun',\n 'react': 'React',\n 'nextjs': 'Next.js', // if your tokenizer drops dots, keep this\n 'nodejs': 'Node.js',\n 'postgresql': 'PostgreSQL',\n 'postgres': 'Postgres',\n 'mysql': 'MySQL',\n 'sqlite': 'SQLite',\n 'redis': 'Redis',\n 'supabase': 'Supabase',\n 'docker': 'Docker',\n 'kubernetes': 'Kubernetes',\n 'k8s': 'Kubernetes',\n 'helm': 'Helm',\n 'npm': 'npm',\n 'pnpm': 'pnpm',\n 'yarn': 'Yarn',\n 'eslint': 'ESLint',\n 'prettier': 'Prettier',\n 'vite': 'Vite',\n 'webpack': 'Webpack',\n 'babel': 'Babel',\n\n // OS & vendors\n 'macos': 'macOS',\n 'ios': 'iOS',\n 'ipados': 'iPadOS',\n 'watchos': 'watchOS',\n 'tvos': 'tvOS',\n 'windows': 'Windows',\n 'linux': 'Linux',\n 'ubuntu': 'Ubuntu',\n 'github': 'GitHub',\n 'gitlab': 'GitLab',\n 'bitbucket': 'Bitbucket',\n\n // Data & analytics\n 'etl': 'ETL',\n 'elt': 'ELT',\n 'olap': 'OLAP',\n 'oltp': 'OLTP',\n 'bi': 'BI',\n\n // Time & locales\n 'utc': 'UTC',\n 'gmt': 'GMT',\n 'pst': 'PST',\n 'pdt': 'PDT',\n 'pt': 'PT',\n\n // Common “small words” to keep lowercase (unless first/last word)\n 'or': 'or',\n 'and': 'and',\n 'the': 'the',\n 'of': 'of',\n 'in': 'in',\n 'to': 'to',\n 'with': 'with',\n 'as': 'as',\n 'by': 'by',\n 'for': 'for',\n 'on': 'on',\n 'at': 'at',\n 'up': 'up',\n 'a': 'a',\n 'an': 'an',\n 'is': 'is',\n 'are': 'are',\n 'was': 'was',\n 'were': 'were',\n 'be': 'be',\n 'but': 'but',\n 'nor': 'nor',\n 'so': 'so',\n 'yet': 'yet',\n 'per': 'per',\n 'via': 'via',\n\n // Latin abbreviations (tokenized as words in some pipelines)\n 'eg': 'e.g.',\n 'ie': 'i.e.',\n 'etc': 'etc.',\n 'aka': 'aka',\n 'vs': 'vs.',\n 'v': 'v.',\n\n // Client abbreviations\n 'CIC': 'CIC',\n 'AGR': 'AGR',\n 'AGER': 'AGER',\n 'DD': 'DD',\n 'TS': 'TS',\n 'TM': 'TM',\n 'arman': \"Arman\",\n};\n\n/**\n * Default options for text formatting\n */\nconst DEFAULT_OPTIONS: TextFormatterOptions = {\n textCase: 'title',\n wordReplacements: DEFAULT_WORD_REPLACEMENTS,\n trim: true,\n};\n\n/**\n * Formats text by normalizing case styles, applying case transformations,\n * and replacing specific words with custom formatting.\n * \n * @param text The input text to format\n * @param options Formatting options\n * @returns Formatted text\n */\nexport function formatText(text: string, options: TextFormatterOptions = {}): string {\n // Merge provided options with defaults\n const opts = { ...DEFAULT_OPTIONS, ...options };\n \n // Handle empty text\n if (!text) return '';\n \n // Step 1: Normalize various case styles to space-separated words\n let normalized = text\n // Convert snake_case to space-separated\n .replace(/_/g, ' ')\n // Convert kebab-case to space-separated\n .replace(/-/g, ' ')\n // Convert camelCase and PascalCase to space-separated\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Replace multiple spaces with a single space\n .replace(/\\s+/g, ' ');\n \n // Step 2: Apply trim if needed\n if (opts.trim) {\n normalized = normalized.trim();\n }\n \n // Step 3: Apply the specified text case\n let caseTransformed = normalized;\n switch (opts.textCase) {\n case 'title':\n caseTransformed = normalized.replace(/\\w\\S*/g, (word) => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n );\n break;\n case 'sentence':\n if (normalized.length > 0) {\n caseTransformed = normalized.charAt(0).toUpperCase() + normalized.slice(1).toLowerCase();\n }\n break;\n case 'lower':\n caseTransformed = normalized.toLowerCase();\n break;\n case 'upper':\n caseTransformed = normalized.toUpperCase();\n break;\n case 'normal':\n default:\n // No case transformation\n break;\n }\n \n // Step 4: Apply word replacements if provided\n let result = caseTransformed;\n if (opts.wordReplacements) {\n Object.entries(opts.wordReplacements).forEach(([key, value]) => {\n // Create a regex that matches the key as a whole word (case insensitive)\n const regex = new RegExp(`\\\\b${key}\\\\b`, 'gi');\n result = result.replace(regex, value);\n });\n }\n \n return result;\n}\n\n/**\n * Creates a pre-configured formatter function with specific options\n * \n * @param defaultOptions Default options for the formatter\n * @returns A formatter function with the specified default options\n */\nexport function createFormatter(defaultOptions: TextFormatterOptions = {}) {\n return (text: string, overrideOptions: TextFormatterOptions = {}) => \n formatText(text, { ...defaultOptions, ...overrideOptions });\n}\n\n// Some pre-configured formatters for common use cases\nexport const formatTitleCase = createFormatter({ textCase: 'title' });\nexport const formatSentenceCase = createFormatter({ textCase: 'sentence' });\nexport const formatNormalCase = createFormatter({ textCase: 'normal' });\nexport const formatUpperCase = createFormatter({ textCase: 'upper' });\nexport const formatLowerCase = createFormatter({ textCase: 'lower' });\nexport const formatWithoutReplacements = createFormatter({ wordReplacements: {} });\n","/**\n * Schema-shape helpers — structural depth and layout hints derived from a\n * KindSchema. Drives the generic renderer's flat / grid / nested layout and\n * human labels for slugs.\n *\n * Moved from app/(dev)/demos/json-block-detector/schema-structure.ts.\n */\n\nimport { formatText } from \"../utils/text-case-converter\";\nimport type { FieldSchema, KindSchema } from \"./kind-schema.types\";\n\n/** Human label from a slug or field key (snake_case → Title Case + acronym fixes). */\nexport function formatBlockLabel(key: string): string {\n return formatText(key, { textCase: \"title\" });\n}\n\n/**\n * Structural nesting depth of a kind schema — drives generic renderer layout.\n * 0 = flat card (scalars only)\n * 1 = grid (one array/object nesting level)\n * 2+ = expandable grid (parent → child → grandchild)\n */\nexport function schemaStructureDepth(\n schema: KindSchema,\n allSchemas: Record<string, KindSchema>,\n visiting: Set<string> = new Set(),\n): number {\n if (visiting.has(schema.kind)) return 0;\n visiting.add(schema.kind);\n\n let max = 0;\n for (const field of Object.values(schema.fields)) {\n max = Math.max(max, fieldStructureDepth(field, allSchemas, visiting));\n }\n\n visiting.delete(schema.kind);\n return max;\n}\n\nfunction fieldStructureDepth(\n field: FieldSchema,\n allSchemas: Record<string, KindSchema>,\n visiting: Set<string>,\n): number {\n switch (field.type) {\n case \"array\": {\n let itemMax = 0;\n for (const itemKind of field.itemKinds) {\n const itemSchema = allSchemas[itemKind];\n itemMax = Math.max(\n itemMax,\n itemSchema\n ? 1 + schemaStructureDepth(itemSchema, allSchemas, visiting)\n : 1,\n );\n }\n return itemMax;\n }\n case \"object\": {\n const ref = allSchemas[field.kind];\n return ref ? 1 + schemaStructureDepth(ref, allSchemas, visiting) : 1;\n }\n case \"inline_object\": {\n let nested = 0;\n for (const child of Object.values(field.fields)) {\n nested = Math.max(\n nested,\n fieldStructureDepth(child, allSchemas, visiting),\n );\n }\n return nested > 0 ? 1 + nested : 1;\n }\n default:\n return 0;\n }\n}\n\nexport type SchemaLayoutMode = \"flat\" | \"grid\" | \"nested\";\n\nexport function schemaLayoutMode(\n schema: KindSchema,\n allSchemas: Record<string, KindSchema>,\n): SchemaLayoutMode {\n const depth = schemaStructureDepth(schema, allSchemas);\n if (depth <= 0) return \"flat\";\n if (depth === 1) return \"grid\";\n return \"nested\";\n}\n","/**\n * OpenAI/provider JSON Schema → KindSchema converter + __kind injection.\n *\n * The strategic keystone: `buildAgentSchemaWithRenderBlockSupport` turns \"a\n * user/agent defined an output schema\" into \"the platform has a render\n * contract for it\" by injecting the `__kind` discriminator into the agent's\n * output schema (root + array items), so the model emits self-identifying\n * objects from then on.\n *\n * Moved from app/(dev)/demos/json-block-detector/schema-converter.ts.\n */\n\nimport {\n KIND_KEY,\n type FieldSchema,\n type KindSchema,\n} from \"../core/kind-schema.types\";\nimport { formatBlockLabel } from \"../core/schema-structure\";\n\n/**\n * `FieldSchema.required`/`nullable` are `boolean | undefined` by omission —\n * every consumer only ever does a truthy check (`field.required`), never\n * `'required' in field`. Building the flags this way (key present only when\n * true) is behavior-identical to the old `required: required || undefined`\n * under exactOptionalPropertyTypes, which forbids an explicit `undefined`\n * value for an optional key.\n */\nfunction requiredNullableFlags(\n required: boolean,\n nullable?: boolean,\n): { required?: true; nullable?: true } {\n return {\n ...(required ? { required: true } : {}),\n ...(nullable ? { nullable: true } : {}),\n };\n}\n\nexport type JsonSchemaNode = Record<string, unknown>;\n\nexport type ConversionProblem = {\n severity: \"error\" | \"warning\" | \"info\";\n path: string;\n message: string;\n};\n\nexport type DroppedMetadata = {\n path: string;\n dropped: Record<string, unknown>;\n};\n\nexport type FieldComparison = {\n field: string;\n aiPresent: boolean;\n blockPresent: boolean;\n aiSummary: string | null;\n blockSummary: string | null;\n status:\n | \"match\"\n | \"ai_only\"\n | \"block_only\"\n | \"type_mismatch\"\n | \"ai_richer\"\n | \"block_richer\";\n detail?: string;\n};\n\n/** One standalone flexible_data block schema row. */\nexport type BlockSchemaDraft = {\n slug: string;\n label: string;\n fields: Record<string, FieldSchema>;\n /**\n * NON-OBJECT ROOT form (KindSchema.root): the kind's value is this field's\n * shape at the top level (scalar / array / json / OPEN object). When set,\n * `fields` is empty — mirror of `KindSchema.root`.\n */\n root?: FieldSchema;\n};\n\nexport type ArrayItemKindBinding = {\n arrayField: string;\n itemKindSlug: string;\n};\n\nexport type SchemaConversionResult = {\n schemaName: string | null;\n strict: boolean | null;\n /** Every block schema row required for the converted shape (1..n). */\n blockSchemas: BlockSchemaDraft[];\n /** OPTION 2 — same input shape with __kind injected for agent output. */\n agentSchemaWithKinds: unknown | null;\n problems: ConversionProblem[];\n droppedMetadata: DroppedMetadata[];\n comparisons: FieldComparison[];\n};\n\nexport type SavePlanEntry = {\n draft: BlockSchemaDraft;\n existsInDb: boolean;\n willSave: boolean;\n};\n\nexport type ItemKindRefCheck = {\n parentSlug: string;\n field: string;\n itemKind: string;\n satisfied: boolean;\n source: \"batch\" | \"database\" | \"missing\";\n};\n\nexport type SavePlanValidation = {\n entries: SavePlanEntry[];\n itemKindRefs: ItemKindRefCheck[];\n newCount: number;\n canSave: boolean;\n errors: string[];\n};\n\nconst METADATA_KEYS = new Set([\n \"description\",\n \"title\",\n \"default\",\n \"examples\",\n \"format\",\n \"minimum\",\n \"maximum\",\n \"multipleOf\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"minLength\",\n \"maxLength\",\n \"minItems\",\n \"maxItems\",\n \"pattern\",\n \"const\",\n \"$schema\",\n \"$id\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepClone<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction fieldSchemaSummary(field: FieldSchema): string {\n if (field.type === \"enum\") {\n return `enum(${field.values.join(\"|\")}${field.open ? \"|+any\" : \"\"})${field.required ? \"*\" : \"\"}`;\n }\n if (field.type === \"array\") {\n return `array<${field.itemKinds.join(\"|\")}>${field.required ? \"*\" : \"\"}`;\n }\n if (field.type === \"inline_object\") {\n return `inline{${Object.keys(field.fields).join(\",\")}}${field.required ? \"*\" : \"\"}`;\n }\n if (field.type === \"object\") {\n return `object:${field.kind}${field.required ? \"*\" : \"\"}`;\n }\n if (field.type === \"union\") {\n const members = [...field.scalars, ...(field.kinds ?? [])];\n return `union(${members.join(\"|\")})${field.required ? \"*\" : \"\"}`;\n }\n if (field.type === \"record\") {\n return `record(${field.values})${field.required ? \"*\" : \"\"}`;\n }\n return `${field.type}${field.required ? \"*\" : \"\"}${field.nullable ? \"?\" : \"\"}`;\n}\n\nfunction resolvePrimaryType(node: JsonSchemaNode): {\n type: string | null;\n nullable: boolean;\n /**\n * Every non-null member of a `type: [...]` union, normalized\n * (integer → number) and deduplicated. Length > 1 means `type` above is\n * ONLY the first member and using it alone LOSES the rest — callers that\n * can express a union must branch on this. Length <= 1 for every\n * single-typed node, so existing call sites are unaffected.\n */\n members: string[];\n} {\n const raw = node.type;\n if (typeof raw === \"string\") {\n const t = raw === \"integer\" ? \"number\" : raw;\n return { type: t, nullable: false, members: [t] };\n }\n if (Array.isArray(raw)) {\n const types = raw.filter((t): t is string => typeof t === \"string\");\n const nullable = types.includes(\"null\");\n const members = [\n ...new Set(\n types\n .filter((t) => t !== \"null\")\n .map((t) => (t === \"integer\" ? \"number\" : t)),\n ),\n ];\n const primary =\n members[0] ?? (nullable && types.length === 1 ? \"null\" : null);\n return { type: primary ?? null, nullable, members };\n }\n if (node.enum) return { type: \"string\", nullable: false, members: [\"string\"] };\n if (node.properties)\n return { type: \"object\", nullable: false, members: [\"object\"] };\n if (node.items)\n return { type: \"array\", nullable: false, members: [\"array\"] };\n return { type: null, nullable: false, members: [] };\n}\n\n/**\n * Metadata keys the converted field CARRIES (input-semantics extension) —\n * these are no longer \"dropped\": description / default land on FieldBase;\n * minimum / maximum / multipleOf land on `number` fields as min/max/step.\n */\nfunction carriedMetadataKeys(field: FieldSchema | null): Set<string> {\n if (field === null) return new Set();\n const carried = new Set([\"description\", \"default\"]);\n if (field.type === \"number\") {\n carried.add(\"minimum\");\n carried.add(\"maximum\");\n carried.add(\"multipleOf\");\n }\n return carried;\n}\n\nfunction collectDropped(\n node: JsonSchemaNode,\n path: string,\n carriedField: FieldSchema | null = null,\n): DroppedMetadata[] {\n const carried = carriedMetadataKeys(carriedField);\n const dropped: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(node)) {\n if (METADATA_KEYS.has(key) && !carried.has(key)) {\n dropped[key] = value;\n }\n }\n\n if (Object.keys(dropped).length > 0) {\n return [{ path, dropped }];\n }\n return [];\n}\n\n/**\n * Attach the representable node metadata to a converted field: description\n * (string), default (any JSON value, verbatim), and — for `number` fields —\n * minimum/maximum/multipleOf as min/max/step. Never overwrites values the\n * core conversion already set.\n */\nfunction attachNodeMetadata(\n node: JsonSchemaNode,\n field: FieldSchema,\n): FieldSchema {\n let out = field;\n if (typeof node.description === \"string\" && out.description === undefined) {\n out = { ...out, description: node.description };\n }\n if (node.default !== undefined && out.default === undefined) {\n out = { ...out, default: node.default };\n }\n if (out.type === \"number\") {\n const bounds: { min?: number; max?: number; step?: number } = {};\n if (typeof node.minimum === \"number\" && out.min === undefined) {\n bounds.min = node.minimum;\n }\n if (typeof node.maximum === \"number\" && out.max === undefined) {\n bounds.max = node.maximum;\n }\n if (typeof node.multipleOf === \"number\" && out.step === undefined) {\n bounds.step = node.multipleOf;\n }\n if (Object.keys(bounds).length > 0) out = { ...out, ...bounds };\n }\n return out;\n}\n\nfunction synthesizeItemKindSlug(schemaName: string, fieldName: string): string {\n const base = fieldName.endsWith(\"ies\")\n ? `${fieldName.slice(0, -3)}y`\n : fieldName.endsWith(\"s\")\n ? fieldName.slice(0, -1)\n : fieldName;\n return `${schemaName}_${base}`;\n}\n\nfunction makeKindJsonSchemaProperty(\n kindSlug: string,\n strict: boolean,\n): JsonSchemaNode {\n const base: JsonSchemaNode = {\n type: \"string\",\n description: \"Block discriminator for render pipeline.\",\n };\n if (strict) {\n return { ...base, const: kindSlug };\n }\n return { ...base, enum: [kindSlug] };\n}\n\n/**\n * Inject the `__kind` discriminator into one object schema (const when\n * strict, enum otherwise; `__kind` prepended to required; strict also pins\n * additionalProperties:false). Shared with the REVERSE converter\n * (kind-to-json-schema.ts) so both directions stamp identical discriminators.\n */\nexport function injectKindIntoObjectSchema(\n objectSchema: JsonSchemaNode,\n kindSlug: string,\n strict: boolean,\n): JsonSchemaNode {\n const clone = deepClone(objectSchema);\n const properties: Record<string, unknown> = isRecord(clone.properties)\n ? { ...clone.properties }\n : {};\n\n properties[KIND_KEY] = makeKindJsonSchemaProperty(kindSlug, strict);\n\n const required = Array.isArray(clone.required)\n ? clone.required.filter((k): k is string => typeof k === \"string\")\n : [];\n const nextRequired = required.includes(KIND_KEY)\n ? required\n : [KIND_KEY, ...required];\n\n return {\n ...clone,\n properties,\n required: nextRequired,\n ...(strict ? { additionalProperties: false } : {}),\n };\n}\n\nfunction injectKindsIntoRootSchema(\n rootSchema: JsonSchemaNode,\n rootKindSlug: string,\n arrayBindings: ArrayItemKindBinding[],\n strict: boolean,\n): JsonSchemaNode {\n let updated = injectKindIntoObjectSchema(rootSchema, rootKindSlug, strict);\n\n if (!isRecord(updated.properties)) {\n return updated;\n }\n\n const properties = { ...updated.properties };\n\n for (const binding of arrayBindings) {\n const fieldNode = properties[binding.arrayField];\n if (!isRecord(fieldNode)) continue;\n\n const items = fieldNode.items;\n const itemNode = Array.isArray(items) ? items[0] : items;\n if (!isRecord(itemNode)) continue;\n\n const updatedItem = injectKindIntoObjectSchema(\n itemNode,\n binding.itemKindSlug,\n strict,\n );\n\n properties[binding.arrayField] = {\n ...fieldNode,\n items: updatedItem,\n };\n }\n\n return { ...updated, properties };\n}\n\nexport function buildAgentSchemaWithRenderBlockSupport(\n input: unknown,\n rootKindSlug: string,\n arrayBindings: ArrayItemKindBinding[],\n strict: boolean,\n): unknown | null {\n if (!isRecord(input)) return null;\n\n const normalized = normalizeAiSchemaInput(input);\n if (!normalized.rootSchema) return null;\n\n // Non-object roots (root-form kinds) cannot carry a __kind discriminator —\n // the agent schema passes through unchanged.\n if (\n normalized.rootSchema.type !== \"object\" &&\n !isRecord(normalized.rootSchema.properties)\n ) {\n return deepClone(input);\n }\n\n const updatedRoot = injectKindsIntoRootSchema(\n normalized.rootSchema,\n rootKindSlug,\n arrayBindings,\n strict,\n );\n\n if (isRecord(input.schema) && typeof input.name === \"string\") {\n return {\n ...deepClone(input),\n schema: updatedRoot,\n };\n }\n\n if (isRecord(input.json_schema)) {\n const inner = buildAgentSchemaWithRenderBlockSupport(\n input.json_schema,\n rootKindSlug,\n arrayBindings,\n strict,\n );\n return inner ? { ...deepClone(input), json_schema: inner } : null;\n }\n\n if (typeof input.name === \"string\") {\n return {\n ...deepClone(input),\n schema: updatedRoot,\n };\n }\n\n return updatedRoot;\n}\n\ntype ConvertContext = {\n schemaName: string;\n strict: boolean;\n problems: ConversionProblem[];\n droppedMetadata: DroppedMetadata[];\n blockSchemas: BlockSchemaDraft[];\n arrayBindings: ArrayItemKindBinding[];\n /**\n * `$defs` / `definitions` from the ROOT schema, keyed by def name. This is\n * how `kindSchemaToJsonSchema` externalizes child kinds, so without it every\n * `{type:\"object\", kind}` and `{type:\"array\", itemKinds}` field a kind\n * declares comes back EMPTY — measured 2026-08-29 as 36 of the 62 live\n * kinds that carry both a stored field list and a schema.\n */\n defs: Record<string, JsonSchemaNode>;\n /** The root schema itself — the target of a recursive `#` reference. */\n rootSchema: JsonSchemaNode;\n /** Def slugs whose draft is mid-construction — the cycle brake. */\n refsInProgress: Set<string>;\n};\n\n/**\n * Resolve a local JSON Schema reference to `{ slug, node }`.\n *\n * Supports the three forms this platform emits: `#` (the recursive-root\n * reference `kindSchemaToJsonSchema` writes for a kind that contains itself),\n * `#/$defs/<name>`, and the older `#/definitions/<name>`. A remote or\n * pointer-into-properties ref is not resolvable here and returns null — the\n * caller reports it.\n *\n * The def NAME is the kind slug by construction: the forward converter keys\n * `$defs` by slug. A resolved def usually also declares `__kind`, and that\n * declaration wins when the two disagree.\n */\nfunction resolveRef(\n ref: string,\n ctx: ConvertContext,\n): { slug: string; node: JsonSchemaNode } | null {\n if (ref === \"#\" || ref === \"#/\") {\n return { slug: ctx.schemaName, node: ctx.rootSchema };\n }\n const match = /^#\\/(?:\\$defs|definitions)\\/(.+)$/.exec(ref);\n if (!match) return null;\n const name = decodeURIComponent(\n (match[1] ?? \"\").replace(/~1/g, \"/\").replace(/~0/g, \"~\"),\n );\n const node = ctx.defs[name];\n if (!isRecord(node)) return null;\n const declared = isRecord(node.properties)\n ? readBlockKindFromProperties(node.properties)\n : null;\n return { slug: declared ?? name, node };\n}\n\n/**\n * A `$ref` in a field position: the field's value IS an instance of the\n * referenced kind, so it converts to an object ref and the referenced def is\n * registered as its own draft (guarded, so a kind that references itself\n * terminates instead of recursing forever).\n */\nfunction refToObjectField(\n resolved: { slug: string; node: JsonSchemaNode },\n path: string,\n ctx: ConvertContext,\n): void {\n if (ctx.refsInProgress.has(resolved.slug)) return;\n ctx.refsInProgress.add(resolved.slug);\n try {\n registerDeclaredKindDraft(resolved.slug, resolved.node, path, ctx);\n } finally {\n ctx.refsInProgress.delete(resolved.slug);\n }\n}\n\n/**\n * A schema node whose value domain is \"any JSON value\": no type, no enum, no\n * properties, no items, no combinators. (`{}`, or metadata-only nodes like\n * pydantic's bare `Any` fields — `{title, default, description}`.)\n */\nfunction isAnyValueSchema(node: JsonSchemaNode): boolean {\n return (\n node.type === undefined &&\n node.enum === undefined &&\n node.const === undefined &&\n node.properties === undefined &&\n node.items === undefined &&\n node.additionalProperties === undefined &&\n node.anyOf === undefined &&\n node.oneOf === undefined &&\n node.allOf === undefined &&\n node.$ref === undefined\n );\n}\n\n/**\n * An object variant that DECLARES its kind (`__kind` const/enum) becomes a\n * savable draft — same discipline as array items, so union members and\n * anyOf-array items are first-class kinds, not dangling refs.\n */\nfunction registerDeclaredKindDraft(\n declaredKind: string,\n objectNode: JsonSchemaNode,\n path: string,\n ctx: ConvertContext,\n): void {\n if (ctx.blockSchemas.some((draft) => draft.slug === declaredKind)) return;\n if (!isRecord(objectNode.properties)) return;\n\n const memberRequired = new Set(\n Array.isArray(objectNode.required)\n ? objectNode.required.filter((k): k is string => typeof k === \"string\")\n : [],\n );\n const fields: Record<string, FieldSchema> = {};\n for (const [propName, propNode] of Object.entries(objectNode.properties)) {\n if (!isRecord(propNode)) continue;\n if (propName === KIND_KEY) continue;\n fields[propName] = convertFieldOrWiden(\n propName,\n propNode,\n memberRequired.has(propName),\n `${path}.${propName}`,\n ctx,\n );\n }\n ctx.blockSchemas.push({\n slug: declaredKind,\n label: formatBlockLabel(declaredKind),\n fields,\n });\n}\n\n/**\n * 🚨 A FIELD IS NEVER DROPPED — IT WIDENS (Arman's ruling, 2026-08-29).\n *\n * `convertProperty` returns null for a construct the vocabulary cannot name\n * precisely: a 2-D array (`rows: [[...]]`), an array of untyped objects, a\n * mixed anyOf. Dropping that field from the kind's schema is the worst of the\n * available answers, and it does not merely lose detail — it inverts the\n * outcome:\n *\n * - the field disappears from the field map,\n * - so a real payload's value for it becomes unknown-key residue,\n * - and if the schema marked it required, validation FAILS,\n * - so the node goes `raw`, which the render route rightly refuses a\n * component — the exact key/value dump this whole effort exists to end.\n *\n * `json` — any JSON value — is always a TRUE statement about such a field. It\n * validates anything, loses nothing, and keeps the kind renderable. Widen,\n * record why, and move on. 28 of the 502 live kinds hit this on 2026-08-29.\n */\nfunction convertFieldOrWiden(\n fieldName: string,\n node: JsonSchemaNode,\n required: boolean,\n path: string,\n ctx: ConvertContext,\n): FieldSchema {\n const before = ctx.problems.length;\n const converted = convertProperty(fieldName, node, required, path, ctx);\n if (converted) return converted;\n\n // The conversion RECOVERED. Anything the failed attempt logged as an error\n // describes a construct we then widened around, so leaving it at \"error\"\n // would make every warm load scream about 28 kinds that render perfectly.\n // Downgrade what this attempt recorded — and only what it recorded.\n for (let i = before; i < ctx.problems.length; i++) {\n const problem = ctx.problems[i];\n if (problem && problem.severity === \"error\") problem.severity = \"warning\";\n }\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: `Field \"${fieldName}\" has no exact field type — carried as any JSON value (json) rather than dropped from the kind.`,\n });\n return { ...requiredNullableFlags(required), type: \"json\" };\n}\n\n/**\n * Convert one JSON Schema property node. Wraps the core structural\n * conversion with the metadata carry (description / default / number\n * bounds) and reports the metadata that remains genuinely dropped.\n */\nfunction convertProperty(\n fieldName: string,\n node: JsonSchemaNode,\n required: boolean,\n path: string,\n ctx: ConvertContext,\n): FieldSchema | null {\n const core = convertPropertyCore(fieldName, node, required, path, ctx);\n const field = core === null ? null : attachNodeMetadata(node, core);\n ctx.droppedMetadata.push(...collectDropped(node, path, field));\n return field;\n}\n\nfunction convertPropertyCore(\n fieldName: string,\n node: JsonSchemaNode,\n required: boolean,\n path: string,\n ctx: ConvertContext,\n): FieldSchema | null {\n if (typeof node.$ref === \"string\") {\n const resolved = resolveRef(node.$ref, ctx);\n if (!resolved) {\n ctx.problems.push({\n severity: \"error\",\n path,\n message: `Unresolvable $ref (\"${node.$ref}\") — only \"#\", \"#/$defs/<name>\" and \"#/definitions/<name>\" are supported.`,\n });\n return null;\n }\n refToObjectField(resolved, path, ctx);\n return {\n ...requiredNullableFlags(required),\n type: \"object\",\n kind: resolved.slug,\n };\n }\n\n if (Array.isArray(node.anyOf) || Array.isArray(node.oneOf)) {\n const variants = (node.anyOf ?? node.oneOf) as JsonSchemaNode[];\n const scalarTypes = new Set<\"string\" | \"number\" | \"boolean\">();\n const enumVariantSets: string[][] = [];\n const memberKinds: string[] = [];\n const anonymousObjects: JsonSchemaNode[] = [];\n let sawNull = false;\n let unsupported = false;\n\n for (const variant of variants) {\n if (!isRecord(variant)) {\n unsupported = true;\n continue;\n }\n if (typeof variant.$ref === \"string\") {\n const resolvedVariant = resolveRef(variant.$ref, ctx);\n if (!resolvedVariant) {\n ctx.problems.push({\n severity: \"error\",\n path,\n message: `Unresolvable $ref inside anyOf/oneOf (\"${variant.$ref}\").`,\n });\n unsupported = true;\n continue;\n }\n // An object union member — the same vocabulary `kinds` carries for\n // inline __kind variants. This is how a nullable object ref\n // (`anyOf: [$ref, {type:\"null\"}]`) reads back instead of degrading.\n refToObjectField(resolvedVariant, path, ctx);\n memberKinds.push(resolvedVariant.slug);\n continue;\n }\n const { type, nullable } = resolvePrimaryType(variant);\n if (nullable) sawNull = true;\n if (type === \"null\") {\n sawNull = true;\n continue;\n }\n // A string variant CARRYING an enum is an option set, not a plain\n // scalar — collected separately so anyOf [enum, string] reads back as\n // an OPEN enum instead of silently losing the options.\n if (type === \"string\" && Array.isArray(variant.enum)) {\n enumVariantSets.push(\n variant.enum.filter((v): v is string => typeof v === \"string\"),\n );\n continue;\n }\n if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n scalarTypes.add(type);\n continue;\n }\n if (type === \"object\" && isRecord(variant.properties)) {\n const declared = readBlockKindFromProperties(variant.properties);\n if (declared) {\n memberKinds.push(declared);\n registerDeclaredKindDraft(declared, variant, `${path}<${declared}>`, ctx);\n } else {\n anonymousObjects.push(variant);\n }\n continue;\n }\n unsupported = true;\n }\n\n if (unsupported) {\n ctx.problems.push({\n severity: \"error\",\n path,\n message:\n \"anyOf/oneOf with unsupported variants cannot be converted automatically.\",\n });\n return null;\n }\n\n // Enum variants (+ optionally a plain string variant, + optional null):\n // the option-set forms. [enum] → closed enum; [enum, string] → OPEN enum\n // (\"these options OR any string\" — the allowOther wire form).\n if (\n enumVariantSets.length > 0 &&\n anonymousObjects.length === 0 &&\n memberKinds.length === 0 &&\n [...scalarTypes].every((s) => s === \"string\")\n ) {\n const values = [...new Set(enumVariantSets.flat())];\n const open = scalarTypes.has(\"string\");\n return {\n ...requiredNullableFlags(required, sawNull),\n type: \"enum\",\n values,\n ...(open ? { open: true } : {}),\n };\n }\n if (enumVariantSets.length > 0) {\n // Option sets mixed with non-string members — not representable as an\n // enum; widen the enum member to string within the union, loudly.\n ctx.problems.push({\n severity: \"warning\",\n path,\n message:\n \"anyOf/oneOf mixes an enum variant with non-string members — enum widened to string within the union.\",\n });\n scalarTypes.add(\"string\");\n }\n\n // Exactly one anonymous object (+ optional null) — a nullable inline object,\n // not a union. This is the explicit-nullability fix: the old converter\n // flattened ANY nullable anyOf to `string`.\n if (\n anonymousObjects.length === 1 &&\n scalarTypes.size === 0 &&\n memberKinds.length === 0\n ) {\n const [sole] = anonymousObjects;\n const converted = sole\n ? convertProperty(fieldName, sole, required, path, ctx)\n : null;\n if (!converted) return null;\n return sawNull ? { ...converted, nullable: true } : converted;\n }\n if (anonymousObjects.length > 0) {\n ctx.problems.push({\n severity: \"error\",\n path,\n message:\n \"anyOf/oneOf mixing anonymous objects with other variants cannot be converted — declare __kind on each object variant.\",\n });\n return null;\n }\n\n // Single scalar (+ optional null) — the scalar itself, nullability kept.\n if (scalarTypes.size === 1 && memberKinds.length === 0) {\n const [scalar] = [...scalarTypes];\n if (scalar) {\n return { ...requiredNullableFlags(required, sawNull), type: scalar };\n }\n }\n\n if (scalarTypes.size > 0 || memberKinds.length > 0) {\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: `Converted anyOf/oneOf to union of: ${[\n ...scalarTypes,\n ...memberKinds,\n ].join(\", \")}.`,\n });\n return {\n ...requiredNullableFlags(required, sawNull),\n type: \"union\",\n scalars: [...scalarTypes],\n ...(memberKinds.length > 0 ? { kinds: memberKinds } : {}),\n };\n }\n\n // Nothing but null variants — degrade to json-any (null is a member),\n // loudly.\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: \"anyOf/oneOf carried only null variants — widened to json (any value).\",\n });\n return { ...requiredNullableFlags(required), type: \"json\" };\n }\n\n if (Array.isArray(node.allOf)) {\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: \"allOf merged using first object branch only.\",\n });\n const objectBranch = (node.allOf as JsonSchemaNode[]).find(\n (b) => b.properties,\n );\n if (objectBranch) {\n return convertProperty(fieldName, objectBranch, required, path, ctx);\n }\n }\n\n // Typeless schema = \"any JSON value\" in JSON Schema semantics (pydantic\n // bare `Any`, `{}`). This is the declared contract, not a fallback.\n if (isAnyValueSchema(node)) {\n ctx.problems.push({\n severity: \"info\",\n path,\n message: `Typeless schema at \"${path || \"(root)\"}\" — any JSON value (json).`,\n });\n return { ...requiredNullableFlags(required), type: \"json\" };\n }\n\n const { type, nullable, members } = resolvePrimaryType(node);\n\n // 🚨 A MULTI-TYPE UNION IS NOT ITS FIRST MEMBER. `type: [\"string\",\"number\",\n // \"boolean\",\"object\",\"array\",\"null\"]` — pydantic's `Any`, and the single\n // commonest shape in user-authored kinds — used to convert to plain\n // `string`, silently discarding five of six members. The narrowing is\n // invisible AND actively harmful: the field then REJECTS every value that\n // isn't a string, turning a valid payload into a schema violation, which\n // the render route is right to refuse a component. Express what the schema\n // actually says instead.\n if (members.length > 1) {\n const objectish = members.some((m) => m === \"object\" || m === \"array\");\n if (objectish) {\n // Spans structure and scalars: the only faithful vocabulary is \"any\n // JSON value\". `json` is implicitly nullable, so the flag is dropped.\n ctx.problems.push({\n severity: \"info\",\n path,\n message: `Union of [${members.join(\", \")}] at \"${path || \"(root)\"}\" spans objects/arrays — carried as any JSON value (json).`,\n });\n return { ...requiredNullableFlags(required), type: \"json\" };\n }\n const scalars = members.filter(\n (m): m is \"string\" | \"number\" | \"boolean\" =>\n m === \"string\" || m === \"number\" || m === \"boolean\",\n );\n if (scalars.length === members.length && scalars.length > 1) {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"union\",\n scalars,\n };\n }\n // A member the vocabulary cannot name (e.g. an exotic type keyword): stay\n // permissive rather than narrowing to whichever member happened to be\n // first. Loud, because a silent widen is still a surprise.\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: `Union of [${members.join(\", \")}] at \"${path || \"(root)\"}\" has no exact field type — carried as any JSON value (json) rather than narrowed to \"${type}\".`,\n });\n return { ...requiredNullableFlags(required), type: \"json\" };\n }\n\n if (type === \"string\") {\n if (Array.isArray(node.enum)) {\n const values = node.enum.filter(\n (v): v is string => typeof v === \"string\",\n );\n if (values.length !== node.enum.length) {\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: \"Enum contains non-string values; non-strings dropped.\",\n });\n }\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"enum\",\n values,\n };\n }\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"string\",\n };\n }\n\n if (type === \"number\") {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"number\",\n };\n }\n\n if (type === \"boolean\") {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"boolean\",\n };\n }\n\n if (type === \"array\") {\n const items = node.items;\n if (!items) {\n ctx.problems.push({\n severity: \"error\",\n path,\n message: \"Array field is missing items schema.\",\n });\n return null;\n }\n\n const itemNode = Array.isArray(items) ? items[0] : items;\n if (!isRecord(itemNode)) {\n ctx.problems.push({\n severity: \"error\",\n path,\n message: \"Array items schema must be an object.\",\n });\n return null;\n }\n\n // items: {$ref} — the externalized child-kind form `kindSchemaToJsonSchema`\n // emits for `{type:\"array\", itemKinds:[K]}`. Without this every list-of-\n // children field (sections, slides, nodes, questions, segments …) vanished\n // from the derived schema.\n if (typeof itemNode.$ref === \"string\") {\n const resolvedItem = resolveRef(itemNode.$ref, ctx);\n if (!resolvedItem) {\n ctx.problems.push({\n severity: \"error\",\n path: `${path}[]`,\n message: `Unresolvable $ref in array items (\"${itemNode.$ref}\").`,\n });\n return null;\n }\n refToObjectField(resolvedItem, `${path}[]`, ctx);\n ctx.arrayBindings.push({\n arrayField: fieldName,\n itemKindSlug: resolvedItem.slug,\n });\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"array\",\n itemKinds: [resolvedItem.slug],\n };\n }\n\n // items: {} — an array of ANY JSON values (pydantic list[Any]).\n if (isAnyValueSchema(itemNode)) {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"json[]\",\n };\n }\n\n // items: {anyOf: [...]} — every variant must DECLARE its kind; the array\n // becomes a multi-itemKind ref array (union items), each member drafted.\n const itemVariants = Array.isArray(itemNode.anyOf)\n ? (itemNode.anyOf as JsonSchemaNode[])\n : Array.isArray(itemNode.oneOf)\n ? (itemNode.oneOf as JsonSchemaNode[])\n : null;\n if (itemVariants) {\n // items: {anyOf: [string-enum, string]} — the OPEN items-enum form\n // (multi-select option set with allowOther). All-scalar-string variants\n // with at least one enum read back as string[] + values (+ open when a\n // plain string variant widens the set).\n const itemEnumSets: string[][] = [];\n let itemPlainString = false;\n let itemsAllString = true;\n for (const variant of itemVariants) {\n if (!isRecord(variant) || resolvePrimaryType(variant).type !== \"string\") {\n itemsAllString = false;\n break;\n }\n if (Array.isArray(variant.enum)) {\n itemEnumSets.push(\n variant.enum.filter((v): v is string => typeof v === \"string\"),\n );\n } else {\n itemPlainString = true;\n }\n }\n if (itemsAllString && itemEnumSets.length > 0) {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"string[]\",\n values: [...new Set(itemEnumSets.flat())],\n ...(itemPlainString ? { open: true } : {}),\n };\n }\n\n const itemKinds: string[] = [];\n for (const variant of itemVariants) {\n // items: {anyOf: [{$ref}, {$ref}, …]} — the MULTI-kind array in its\n // externalized form. `flashcard_set.cards` is exactly this, and it was\n // the last field in the live corpus that a schema-derived KindSchema\n // still could not see.\n if (isRecord(variant) && typeof variant.$ref === \"string\") {\n const resolvedVariant = resolveRef(variant.$ref, ctx);\n if (!resolvedVariant) {\n ctx.problems.push({\n severity: \"error\",\n path: `${path}[]`,\n message: `Unresolvable $ref in array items anyOf (\"${variant.$ref}\").`,\n });\n return null;\n }\n itemKinds.push(resolvedVariant.slug);\n refToObjectField(resolvedVariant, `${path}[]<${resolvedVariant.slug}>`, ctx);\n ctx.arrayBindings.push({\n arrayField: fieldName,\n itemKindSlug: resolvedVariant.slug,\n });\n continue;\n }\n if (!isRecord(variant) || !isRecord(variant.properties)) {\n ctx.problems.push({\n severity: \"error\",\n path: `${path}[]`,\n message:\n \"Array items anyOf/oneOf variants must be inline objects declaring __kind, or $refs to defs.\",\n });\n return null;\n }\n const declared = readBlockKindFromProperties(variant.properties);\n if (!declared) {\n ctx.problems.push({\n severity: \"error\",\n path: `${path}[]`,\n message:\n \"Array items anyOf/oneOf variant is missing a __kind const/enum declaration.\",\n });\n return null;\n }\n itemKinds.push(declared);\n registerDeclaredKindDraft(declared, variant, `${path}[]<${declared}>`, ctx);\n ctx.arrayBindings.push({ arrayField: fieldName, itemKindSlug: declared });\n }\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"array\",\n itemKinds,\n };\n }\n\n const itemType = resolvePrimaryType(itemNode).type;\n\n if (itemType === \"string\") {\n // items: {type:\"string\", enum:[...]} — the CLOSED items-enum form.\n if (Array.isArray(itemNode.enum)) {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"string[]\",\n values: itemNode.enum.filter(\n (v): v is string => typeof v === \"string\",\n ),\n };\n }\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"string[]\",\n };\n }\n if (itemType === \"number\") {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"number[]\",\n };\n }\n if (itemType === \"boolean\") {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"boolean[]\",\n };\n }\n\n if (itemType === \"object\" && isRecord(itemNode.properties)) {\n // Items that already carry a `__kind` const/enum DECLARE their kind —\n // honor it instead of synthesizing a slug. This is what lets the\n // reverse converter (kind-to-json-schema.ts) round-trip: an exported\n // schema's array items name their real kind (e.g. \"math_solution\"),\n // not a derived one (\"math_problem_solution\").\n const declaredItemKind = readBlockKindFromProperties(itemNode.properties);\n const itemKindSlug =\n declaredItemKind ?? synthesizeItemKindSlug(ctx.schemaName, fieldName);\n const itemRequired = new Set(\n Array.isArray(itemNode.required)\n ? itemNode.required.filter((k): k is string => typeof k === \"string\")\n : [],\n );\n const itemFields: Record<string, FieldSchema> = {};\n\n for (const [propName, propNode] of Object.entries(itemNode.properties)) {\n if (!isRecord(propNode)) continue;\n if (propName === KIND_KEY) continue;\n itemFields[propName] = convertFieldOrWiden(\n propName,\n propNode,\n itemRequired.has(propName),\n `${path}[].${propName}`,\n ctx,\n );\n }\n\n const alreadyHasBlockKind =\n propNameIsBlockKind(itemNode.properties) || itemRequired.has(KIND_KEY);\n\n ctx.arrayBindings.push({\n arrayField: fieldName,\n itemKindSlug,\n });\n\n // Two arrays may declare the SAME item kind — one draft per slug.\n if (!ctx.blockSchemas.some((draft) => draft.slug === itemKindSlug)) {\n ctx.blockSchemas.push({\n slug: itemKindSlug,\n label: declaredItemKind\n ? formatBlockLabel(itemKindSlug)\n : formatBlockLabel(`${ctx.schemaName}_${fieldName}_item`),\n fields: itemFields,\n });\n }\n\n if (!alreadyHasBlockKind) {\n ctx.problems.push({\n severity: \"warning\",\n path: `${path}[]`,\n message: `Array \"${fieldName}\" items need __kind:\"${itemKindSlug}\" at runtime (OPTION 1: server injects, OPTION 2: use agent schema with __kind).`,\n });\n }\n\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"array\",\n itemKinds: [itemKindSlug],\n };\n }\n\n ctx.problems.push({\n severity: \"error\",\n path,\n message: `Unsupported array items type \"${itemType ?? \"unknown\"}\".`,\n });\n return null;\n }\n\n if (type === \"object\") {\n const ap = node.additionalProperties;\n const apIsOpen = ap === true || (isRecord(ap) && isAnyValueSchema(ap));\n\n if (isRecord(node.properties)) {\n const nestedRequired = new Set(\n Array.isArray(node.required)\n ? node.required.filter((k): k is string => typeof k === \"string\")\n : [],\n );\n const nestedFields: Record<string, FieldSchema> = {};\n\n for (const [propName, propNode] of Object.entries(node.properties)) {\n if (!isRecord(propNode)) continue;\n if (propName === KIND_KEY) continue;\n nestedFields[propName] = convertFieldOrWiden(\n propName,\n propNode,\n nestedRequired.has(propName),\n `${path}.${propName}`,\n ctx,\n );\n }\n\n const referencedKind = readBlockKindFromProperties(node.properties);\n\n if (referencedKind) {\n // 🚨 REGISTER THE CHILD'S OWN SCHEMA TOO. Arrays of `__kind` items\n // have always done this; an object-valued field declaring a `__kind`\n // returned the ref and dropped the child's fields on the floor. The\n // parser then had a field predicting `mx_child` with no schema for it,\n // so the child went unverified — and the PARENT failed validation and\n // fell to `broken-instance`, losing its component over a child it had\n // fully described one line up. Caught by the render matrix, 2026-08-29.\n //\n // Guarded against a kind that contains itself; `registerDeclaredKindDraft`\n // is a no-op when the slug is already drafted.\n if (!ctx.refsInProgress.has(referencedKind)) {\n ctx.refsInProgress.add(referencedKind);\n try {\n registerDeclaredKindDraft(referencedKind, node, path, ctx);\n } finally {\n ctx.refsInProgress.delete(referencedKind);\n }\n }\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"object\",\n kind: referencedKind,\n };\n }\n\n // additionalProperties is now HONORED, not dropped metadata:\n // true / {} → open inline_object (the open-empty-object fix)\n // typed schema → not representable beside declared props — widen\n // to open, loudly\n // false / absent → closed (record the explicit false as dropped —\n // closed is our default reading either way)\n // …EXCEPT when the only declared property was `__kind`. Then nothing is\n // \"alongside\" the additionalProperties at all: the object is a RECORD\n // that also names its kind, which is exactly what the forward converter\n // emits for `{type:\"record\", values:\"string\"}`. Reading it as an open\n // inline_object loses the value type (presentation_slide.extra, the last\n // type divergence in the live corpus on 2026-08-29).\n if (\n Object.keys(nestedFields).length === 0 &&\n !apIsOpen &&\n isRecord(ap) &&\n KIND_KEY in node.properties\n ) {\n const apType = resolvePrimaryType(ap).type;\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"record\",\n values:\n apType === \"string\" || apType === \"number\" || apType === \"boolean\"\n ? apType\n : \"json\",\n };\n }\n\n let open = apIsOpen;\n if (!apIsOpen && isRecord(ap)) {\n ctx.problems.push({\n severity: \"warning\",\n path,\n message:\n \"Typed additionalProperties alongside declared properties is not representable — treated as an OPEN object (extra values unconstrained).\",\n });\n open = true;\n } else if (ap === false) {\n ctx.droppedMetadata.push({\n path,\n dropped: { additionalProperties: false },\n });\n }\n\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"inline_object\",\n fields: nestedFields,\n ...(open ? { open: true } : {}),\n };\n }\n\n // Properties-less object shapes → record family.\n if (apIsOpen || ap === undefined) {\n if (ap === undefined) {\n ctx.problems.push({\n severity: \"info\",\n path,\n message: `Bare object schema at \"${path || \"(root)\"}\" — record of any JSON values.`,\n });\n }\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"record\",\n values: \"json\",\n };\n }\n if (isRecord(ap)) {\n const apType = resolvePrimaryType(ap).type;\n if (apType === \"string\" || apType === \"number\" || apType === \"boolean\") {\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"record\",\n values: apType,\n };\n }\n ctx.problems.push({\n severity: \"warning\",\n path,\n message: `Record value schema at \"${path}\" is not scalar — widened to record of any JSON values.`,\n });\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"record\",\n values: \"json\",\n };\n }\n // additionalProperties: false with no properties — the closed empty object.\n return {\n ...requiredNullableFlags(required, nullable),\n type: \"inline_object\",\n fields: {},\n };\n }\n\n ctx.problems.push({\n severity: \"error\",\n path,\n message: `Unsupported or missing JSON Schema type at \"${path}\".`,\n });\n return null;\n}\n\nfunction propNameIsBlockKind(properties: Record<string, unknown>): boolean {\n return KIND_KEY in properties;\n}\n\nfunction readBlockKindFromProperties(\n properties: Record<string, unknown>,\n): string | null {\n const kindProp = properties[KIND_KEY];\n if (!isRecord(kindProp)) return null;\n if (typeof kindProp.const === \"string\") return kindProp.const;\n if (Array.isArray(kindProp.enum) && typeof kindProp.enum[0] === \"string\") {\n return kindProp.enum[0];\n }\n return null;\n}\n\nexport function normalizeAiSchemaInput(input: unknown): {\n name: string | null;\n strict: boolean | null;\n rootSchema: JsonSchemaNode | null;\n parseErrors: string[];\n} {\n const parseErrors: string[] = [];\n\n if (!isRecord(input)) {\n return {\n name: null,\n strict: null,\n rootSchema: null,\n parseErrors: [\"Input must be a JSON object.\"],\n };\n }\n\n if (isRecord(input.json_schema)) {\n return normalizeAiSchemaInput(input.json_schema);\n }\n\n if (isRecord(input.schema) && typeof input.name === \"string\") {\n return {\n name: input.name,\n strict: typeof input.strict === \"boolean\" ? input.strict : null,\n rootSchema: input.schema,\n parseErrors: [],\n };\n }\n\n // Any typed root — object, scalar, or array (root-form kinds). A fully\n // empty `{}` root is only accepted through the named wrapper forms above\n // (it is indistinguishable from a non-schema object here).\n if (\n typeof input.type === \"string\" ||\n Array.isArray(input.type) ||\n input.properties ||\n input.items\n ) {\n const name =\n typeof input.name === \"string\"\n ? input.name\n : typeof input.title === \"string\"\n ? input.title\n : null;\n return {\n name,\n strict: typeof input.strict === \"boolean\" ? input.strict : null,\n rootSchema: input,\n parseErrors: [],\n };\n }\n\n parseErrors.push(\n \"Expected OpenAI output_schema shape { name, schema } or a root JSON Schema object.\",\n );\n return { name: null, strict: null, rootSchema: null, parseErrors };\n}\n\ntype ConversionCore = {\n schemaName: string | null;\n strict: boolean | null;\n blockSchemas: BlockSchemaDraft[];\n problems: ConversionProblem[];\n droppedMetadata: DroppedMetadata[];\n};\n\nexport function convertAiSchemaToBlockFields(\n schemaName: string,\n rootSchema: JsonSchemaNode,\n strict: boolean,\n): ConversionCore {\n const rawDefs = isRecord(rootSchema.$defs)\n ? rootSchema.$defs\n : isRecord(rootSchema.definitions)\n ? rootSchema.definitions\n : {};\n const defs: Record<string, JsonSchemaNode> = {};\n for (const [name, node] of Object.entries(rawDefs)) {\n if (isRecord(node)) defs[name] = node;\n }\n\n const ctx: ConvertContext = {\n schemaName,\n strict,\n problems: [],\n droppedMetadata: [],\n blockSchemas: [],\n arrayBindings: [],\n defs,\n rootSchema,\n refsInProgress: new Set<string>(),\n };\n\n ctx.droppedMetadata.push(...collectDropped(rootSchema, \"\"));\n\n const rootAp = rootSchema.additionalProperties;\n const rootIsOpen =\n rootAp === true || (isRecord(rootAp) && isAnyValueSchema(rootAp));\n const properties = rootSchema.properties;\n\n // NON-OBJECT ROOT FORM: scalars, arrays, json-any, records, and OPEN objects\n // all convert through convertProperty into a single root FieldSchema\n // (KindSchema.root). Only a CLOSED object with declared properties takes the\n // classic field-map path below.\n if (!isRecord(properties) || rootIsOpen) {\n const rootField = convertProperty(\"$root\", rootSchema, false, \"$root\", ctx);\n if (!rootField) {\n ctx.problems.push({\n severity: \"error\",\n path: \"\",\n message:\n \"Root schema could not be converted (see problems above) — expected an object with properties, a scalar/array/json root, or an open object.\",\n });\n return emptyConversionResult(schemaName, strict, ctx);\n }\n ctx.blockSchemas.unshift({\n slug: schemaName,\n label: formatBlockLabel(schemaName),\n fields: {},\n root: rootField,\n });\n return {\n schemaName,\n strict,\n blockSchemas: ctx.blockSchemas,\n problems: ctx.problems,\n droppedMetadata: ctx.droppedMetadata,\n };\n }\n\n const required = new Set(\n Array.isArray(rootSchema.required)\n ? rootSchema.required.filter((k): k is string => typeof k === \"string\")\n : [],\n );\n\n const convertedFields: Record<string, FieldSchema> = {};\n\n for (const [fieldName, fieldNode] of Object.entries(properties)) {\n if (!isRecord(fieldNode)) continue;\n if (fieldName === KIND_KEY) continue;\n convertedFields[fieldName] = convertFieldOrWiden(\n fieldName,\n fieldNode,\n required.has(fieldName),\n fieldName,\n ctx,\n );\n }\n\n const rootHasKind = propNameIsBlockKind(properties) || required.has(KIND_KEY);\n\n if (!rootHasKind) {\n ctx.problems.push({\n severity: \"warning\",\n path: \"\",\n message: `Root object needs __kind:\"${schemaName}\" at runtime (OPTION 1: server injects, OPTION 2: use agent schema with __kind).`,\n });\n }\n\n const rootDraft: BlockSchemaDraft = {\n slug: schemaName,\n label: formatBlockLabel(schemaName),\n fields: convertedFields,\n };\n\n ctx.blockSchemas.unshift(rootDraft);\n\n if (typeof rootSchema.additionalProperties === \"boolean\") {\n ctx.droppedMetadata.push({\n path: \"\",\n dropped: { additionalProperties: rootSchema.additionalProperties },\n });\n }\n\n if (strict) {\n ctx.droppedMetadata.push({\n path: \"\",\n dropped: { strict },\n });\n }\n\n return {\n schemaName,\n strict,\n blockSchemas: ctx.blockSchemas,\n problems: ctx.problems,\n droppedMetadata: ctx.droppedMetadata,\n };\n}\n\nfunction emptyConversionResult(\n schemaName: string,\n strict: boolean,\n ctx: Pick<ConvertContext, \"problems\" | \"droppedMetadata\" | \"blockSchemas\">,\n): ConversionCore {\n return {\n schemaName,\n strict,\n blockSchemas: ctx.blockSchemas,\n problems: ctx.problems,\n droppedMetadata: ctx.droppedMetadata,\n };\n}\n\nfunction compareFieldSchemas(\n aiField: FieldSchema | undefined,\n blockField: FieldSchema | undefined,\n fieldName: string,\n): FieldComparison {\n const aiPresent = aiField !== undefined;\n const blockPresent = blockField !== undefined;\n const aiSummary = aiField ? fieldSchemaSummary(aiField) : null;\n const blockSummary = blockField ? fieldSchemaSummary(blockField) : null;\n\n if (aiPresent && blockPresent) {\n if (aiSummary === blockSummary) {\n return {\n field: fieldName,\n aiPresent,\n blockPresent,\n aiSummary,\n blockSummary,\n status: \"match\",\n };\n }\n\n const aiRicher =\n (aiField?.type === \"enum\" && blockField?.type === \"string\") ||\n (aiField?.type === \"inline_object\" &&\n blockField?.type !== \"inline_object\");\n\n const blockRicher =\n (blockField?.type === \"enum\" && aiField?.type === \"string\") ||\n (blockField?.required && !aiField?.required);\n\n return {\n field: fieldName,\n aiPresent,\n blockPresent,\n aiSummary,\n blockSummary,\n status: aiRicher\n ? \"ai_richer\"\n : blockRicher\n ? \"block_richer\"\n : \"type_mismatch\",\n ...(aiSummary !== blockSummary && {\n detail: `${aiSummary} vs ${blockSummary}`,\n }),\n };\n }\n\n if (aiPresent) {\n return {\n field: fieldName,\n aiPresent,\n blockPresent,\n aiSummary,\n blockSummary,\n status: \"ai_only\",\n };\n }\n\n return {\n field: fieldName,\n aiPresent,\n blockPresent,\n aiSummary,\n blockSummary,\n status: \"block_only\",\n };\n}\n\nexport function compareWithExistingKindSchema(\n convertedFields: Record<string, FieldSchema>,\n existing: KindSchema | null,\n): FieldComparison[] {\n if (!existing) return [];\n\n const allFields = new Set([\n ...Object.keys(convertedFields),\n ...Object.keys(existing.fields),\n ]);\n\n return [...allFields]\n .sort()\n .map((field) =>\n compareFieldSchemas(\n convertedFields[field],\n existing.fields[field],\n field,\n ),\n );\n}\n\nexport function runSchemaConversion(\n input: unknown,\n existingSchemas: Record<string, KindSchema>,\n): SchemaConversionResult & { parseErrors: string[] } {\n const normalized = normalizeAiSchemaInput(input);\n if (!normalized.rootSchema || !normalized.name) {\n return {\n schemaName: normalized.name,\n strict: normalized.strict,\n blockSchemas: [],\n agentSchemaWithKinds: null,\n problems: [],\n droppedMetadata: [],\n comparisons: [],\n parseErrors: normalized.parseErrors.length\n ? normalized.parseErrors\n : [\"Schema name and root schema are required.\"],\n };\n }\n\n const strict = normalized.strict ?? false;\n const core = convertAiSchemaToBlockFields(\n normalized.name,\n normalized.rootSchema,\n strict,\n );\n\n const existing = existingSchemas[normalized.name] ?? null;\n const rootDraft = core.blockSchemas[0];\n const comparisons = rootDraft\n ? compareWithExistingKindSchema(rootDraft.fields, existing)\n : [];\n\n const problems = [...core.problems];\n if (!existing) {\n problems.push({\n severity: \"info\",\n path: \"\",\n message: `No existing block schema with slug \"${normalized.name}\".`,\n });\n }\n\n const agentSchemaWithKinds = buildAgentSchemaWithRenderBlockSupport(\n input,\n normalized.name,\n collectArrayBindingsFromDrafts(core.blockSchemas, normalized.name),\n strict,\n );\n\n return {\n ...core,\n agentSchemaWithKinds,\n comparisons,\n problems,\n parseErrors: [],\n };\n}\n\nfunction collectArrayBindingsFromDrafts(\n drafts: BlockSchemaDraft[],\n rootSlug: string,\n): ArrayItemKindBinding[] {\n const root = drafts.find((d) => d.slug === rootSlug);\n if (!root) return [];\n\n const bindings: ArrayItemKindBinding[] = [];\n for (const [fieldName, field] of Object.entries(root.fields)) {\n if (field.type !== \"array\") continue;\n for (const itemKind of field.itemKinds) {\n bindings.push({ arrayField: fieldName, itemKindSlug: itemKind });\n }\n }\n return bindings;\n}\n\nexport function validateBlockSchemaSavePlan(\n blockSchemas: BlockSchemaDraft[],\n existingSlugs: string[],\n hasConversionErrors: boolean,\n): SavePlanValidation {\n const errors: string[] = [];\n const normalizedExisting = new Set(\n existingSlugs.map((s) => s.trim().toLowerCase()),\n );\n const batchSlugs = new Set<string>();\n const itemKindRefs: ItemKindRefCheck[] = [];\n\n for (const draft of blockSchemas) {\n const slug = draft.slug.trim();\n const normalized = slug.toLowerCase();\n\n if (!slug) {\n errors.push(\"Every block schema must have a non-empty slug.\");\n continue;\n }\n\n if (batchSlugs.has(normalized)) {\n errors.push(`Duplicate slug in conversion batch: \"${slug}\".`);\n }\n batchSlugs.add(normalized);\n }\n\n const entries: SavePlanEntry[] = blockSchemas.map((draft) => {\n const existsInDb = normalizedExisting.has(draft.slug.trim().toLowerCase());\n return {\n draft,\n existsInDb,\n willSave: !existsInDb,\n };\n });\n\n for (const draft of blockSchemas) {\n for (const [fieldName, field] of Object.entries(draft.fields)) {\n if (field.type !== \"array\") continue;\n for (const itemKind of field.itemKinds) {\n const inBatch = batchSlugs.has(itemKind.trim().toLowerCase());\n const inDb = normalizedExisting.has(itemKind.trim().toLowerCase());\n const satisfied = inBatch || inDb;\n itemKindRefs.push({\n parentSlug: draft.slug,\n field: fieldName,\n itemKind,\n satisfied,\n source: inBatch ? \"batch\" : inDb ? \"database\" : \"missing\",\n });\n if (!satisfied) {\n errors.push(\n `\"${draft.slug}\".${fieldName} references itemKind \"${itemKind}\" — not in this batch and not in DB.`,\n );\n }\n }\n }\n }\n\n const newCount = entries.filter((e) => e.willSave).length;\n\n if (newCount === 0 && blockSchemas.length > 0) {\n errors.push(\"All block schema slugs already exist in the database.\");\n }\n\n if (hasConversionErrors) {\n errors.push(\"Resolve conversion errors before saving.\");\n }\n\n return {\n entries,\n itemKindRefs,\n newCount,\n canSave: errors.length === 0 && newCount > 0,\n errors,\n };\n}\n\nexport function fieldsToDbPayload(\n fields: Record<string, FieldSchema>,\n): Record<string, unknown> {\n return JSON.parse(JSON.stringify(fields)) as Record<string, unknown>;\n}\n\nexport function isDuplicateBlockSlug(\n slug: string,\n entries: Array<{ slug: string }>,\n): boolean {\n const normalized = slug.trim().toLowerCase();\n return entries.some((e) => e.slug.trim().toLowerCase() === normalized);\n}\n","/**\n * KindSchema → provider-ready JSON Schema — the REVERSE of the OpenAI\n * converter in openai-schema-converter.ts.\n *\n * The requested root kind renders INLINE as the top-level object; every\n * OTHER kind it transitively references (via `{type:\"object\", kind}` and\n * `{type:\"array\", itemKinds}` fields, including inside inline_objects)\n * becomes a `$defs` entry referenced with `$ref: \"#/$defs/<slug>\"`.\n * References back to the ROOT kind use `\"#\"` — the standard JSON Schema\n * recursive-root reference (OpenAI structured outputs support both forms).\n * Collection is cycle-safe: each kind enters the closure exactly once.\n *\n * Round-trip contract — output fed through `runSchemaConversion`\n * (openai-schema-converter.ts) reproduces the source KindSchemas for the\n * root and every array-item child (enforced by\n * __tests__/kind-to-json-schema.test.ts). The 2026-07-15 expressivity\n * extension closed the three historical asymmetries: `record` now has a\n * forward target (properties-less objects → record scalar/json), multi-\n * itemKind arrays read back through items-anyOf when each variant declares\n * its `__kind`, and nullable anyOf preserves the member list + nullable flag\n * instead of flattening to `string`. Remaining accepted narrowings:\n * - multi-kind array items emitted as $refs (not inline __kind objects)\n * still cannot be read back — the forward converter rejects $ref.\n * - a nullable object-REF (`anyOf: [$ref, {type:\"null\"}]`) degrades for the\n * same $ref reason.\n * - JSON Schema `integer` narrows to `number` (the map_result precedent).\n */\n\nimport {\n scalarArrayItemType,\n type FieldSchema,\n type KindSchema,\n} from \"../core/kind-schema.types\";\nimport {\n injectKindIntoObjectSchema,\n type JsonSchemaNode,\n} from \"./openai-schema-converter\";\n\nexport type KindJsonSchemaOptions = {\n /**\n * Provider strict mode: additionalProperties:false on every kind object\n * and inline object, and `const` (vs `enum`) __kind discriminators —\n * mirrors makeKindJsonSchemaProperty / injectKindIntoObjectSchema.\n */\n strict?: boolean;\n /**\n * Inject the `__kind` discriminator (+ required) into the root and every\n * $defs kind object. Default true — this is what makes the emitted\n * objects self-identifying for the render pipeline.\n */\n injectKind?: boolean;\n};\n\nexport type KindJsonSchemaExport = {\n /** The root kind slug — doubles as the provider schema name. */\n name: string;\n schema: JsonSchemaNode;\n strict: boolean;\n /**\n * Referenced kinds the resolver could not supply. Each still gets a\n * permissive `$defs` object stub (never additionalProperties:false, even\n * in strict mode — a __kind-only strict object would reject every real\n * payload) so the export stays structurally valid. Surface these loudly.\n */\n unresolved: string[];\n};\n\n/**\n * Every kind referenced by a field map — `{type:\"object\", kind}` refs and\n * `{type:\"array\", itemKinds}` members, recursing through inline_objects.\n * First-sighting order, deduplicated. Shared read helper (the registry\n * catalog builds its uses / used-by graph from this).\n */\nexport function collectReferencedKinds(\n fields: Record<string, FieldSchema>,\n): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n const add = (kind: string): void => {\n if (!seen.has(kind)) {\n seen.add(kind);\n out.push(kind);\n }\n };\n const visit = (field: FieldSchema): void => {\n if (field.type === \"object\") {\n add(field.kind);\n } else if (field.type === \"array\") {\n field.itemKinds.forEach(add);\n } else if (field.type === \"union\") {\n (field.kinds ?? []).forEach(add);\n } else if (field.type === \"inline_object\") {\n Object.values(field.fields).forEach(visit);\n }\n };\n Object.values(fields).forEach(visit);\n return out;\n}\n\n/**\n * Schema-level referenced kinds — field-map refs PLUS the refs a non-object\n * root form carries. Use this (not `collectReferencedKinds(schema.fields)`)\n * whenever the schema in hand may be root-form.\n */\nexport function collectSchemaReferencedKinds(schema: KindSchema): string[] {\n if (!schema.root) return collectReferencedKinds(schema.fields);\n return collectReferencedKinds({ [ROOT_REF_FIELD]: schema.root });\n}\n\n/** Synthetic field key used only to reuse the field-walker for root forms. */\nconst ROOT_REF_FIELD = \"__root\";\n\nexport function kindSchemaToJsonSchema(\n kind: string,\n resolve: (kind: string) => KindSchema | undefined,\n options: KindJsonSchemaOptions = {},\n): KindJsonSchemaExport | null {\n const strict = options.strict ?? false;\n const injectKind = options.injectKind ?? true;\n\n const rootSchema = resolve(kind);\n if (!rootSchema) return null;\n\n // Transitive closure — BFS from the root, cycle-safe via `visited`.\n const visited = new Set<string>([kind]);\n const defsOrder: string[] = [];\n const resolvedDefs = new Map<string, KindSchema>();\n const unresolved: string[] = [];\n const queue = collectSchemaReferencedKinds(rootSchema);\n while (queue.length > 0) {\n const next = queue.shift() as string;\n if (visited.has(next)) continue;\n visited.add(next);\n defsOrder.push(next);\n const schema = resolve(next);\n if (!schema) {\n unresolved.push(next);\n continue;\n }\n resolvedDefs.set(next, schema);\n queue.push(...collectSchemaReferencedKinds(schema));\n }\n\n const refFor = (slug: string): JsonSchemaNode =>\n slug === kind ? { $ref: \"#\" } : { $ref: `#/$defs/${slug}` };\n\n const withNull = (type: string, nullable: boolean | undefined) =>\n nullable ? [type, \"null\"] : type;\n\n /**\n * Annotation carry: description / default emit beside the structural\n * schema (input-semantics extension, W3-A). Applied to every field node —\n * including anyOf wrappers (open enums), where they belong on the OUTER\n * node so the forward converter reads them back symmetrically.\n */\n function fieldToJsonSchema(field: FieldSchema): JsonSchemaNode {\n const node = fieldToJsonSchemaCore(field);\n if (field.description !== undefined) node.description = field.description;\n if (field.default !== undefined) node.default = field.default;\n return node;\n }\n\n function fieldToJsonSchemaCore(field: FieldSchema): JsonSchemaNode {\n switch (field.type) {\n case \"string\":\n case \"boolean\":\n return { type: withNull(field.type, field.nullable) };\n\n case \"number\":\n // Numeric bounds are OpenAI-strict-unsupported (minimum / maximum /\n // multipleOf) — the aidream twin strips exactly these on its OpenAI\n // paths (matrx_ai tools/models.py strip_openai_unsupported), so the\n // strict export must not emit them either (2026-07-15 review F1).\n // Non-strict exports keep them: they are honest JSON Schema.\n return {\n type: withNull(\"number\", field.nullable),\n ...(!strict && field.min !== undefined ? { minimum: field.min } : {}),\n ...(!strict && field.max !== undefined ? { maximum: field.max } : {}),\n ...(!strict && field.step !== undefined\n ? { multipleOf: field.step }\n : {}),\n };\n\n case \"json\":\n // Any JSON value — the empty schema. (Nullable is inherent: null IS\n // a JSON value.)\n return {};\n\n case \"string[]\": {\n // Items-enum (checkbox option sets): closed → items string enum;\n // open → items anyOf [enum, string] (the set survives as guidance).\n const items: JsonSchemaNode =\n field.values === undefined\n ? { type: \"string\" }\n : field.open\n ? {\n anyOf: [\n { type: \"string\", enum: [...field.values] },\n { type: \"string\" },\n ],\n }\n : { type: \"string\", enum: [...field.values] };\n return { type: withNull(\"array\", field.nullable), items };\n }\n\n case \"number[]\":\n case \"boolean[]\":\n return {\n type: withNull(\"array\", field.nullable),\n items: { type: scalarArrayItemType(field.type) },\n };\n\n case \"json[]\":\n return {\n type: withNull(\"array\", field.nullable),\n items: {},\n };\n\n case \"enum\": {\n if (!field.open) {\n return {\n type: withNull(\"string\", field.nullable),\n enum: [...field.values],\n };\n }\n // OPEN enum — \"these options OR any string\". anyOf keeps the option\n // set intact for providers instead of widening to a bare string.\n const variants: JsonSchemaNode[] = [\n { type: \"string\", enum: [...field.values] },\n { type: \"string\" },\n ];\n if (field.nullable) variants.push({ type: \"null\" });\n return { anyOf: variants };\n }\n\n case \"union\": {\n const variants: JsonSchemaNode[] = field.scalars.map((scalar) => ({\n type: scalar,\n }));\n for (const memberKind of field.kinds ?? []) {\n variants.push(refFor(memberKind));\n }\n if (field.nullable) variants.push({ type: \"null\" });\n return { anyOf: variants };\n }\n\n case \"record\":\n return {\n type: withNull(\"object\", field.nullable),\n additionalProperties:\n field.values === \"json\" ? true : { type: field.values },\n };\n\n case \"inline_object\": {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n for (const [name, child] of Object.entries(field.fields)) {\n properties[name] = fieldToJsonSchema(child);\n if (child.required) required.push(name);\n }\n // `open` ALWAYS wins over strict: pinning an open object with\n // additionalProperties:false is the open-empty-object defect (an open\n // {} that rejects every real payload).\n return {\n type: withNull(\"object\", field.nullable),\n properties,\n required,\n ...(field.open\n ? { additionalProperties: true }\n : strict\n ? { additionalProperties: false }\n : {}),\n };\n }\n\n case \"object\":\n return field.nullable\n ? { anyOf: [refFor(field.kind), { type: \"null\" }] }\n : refFor(field.kind);\n\n case \"array\": {\n const [soleItemKind] = field.itemKinds;\n const items =\n field.itemKinds.length === 1 && soleItemKind !== undefined\n ? refFor(soleItemKind)\n : { anyOf: field.itemKinds.map(refFor) };\n return { type: withNull(\"array\", field.nullable), items };\n }\n }\n }\n\n function kindObjectSchema(schema: KindSchema): JsonSchemaNode {\n // Root-form kind: the value IS the root field's shape — no __kind\n // discriminator (a scalar/array/any root cannot carry one).\n if (schema.root) {\n return fieldToJsonSchema(schema.root);\n }\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n for (const [name, field] of Object.entries(schema.fields)) {\n properties[name] = fieldToJsonSchema(field);\n if (field.required) required.push(name);\n }\n const node: JsonSchemaNode = {\n type: \"object\",\n properties,\n required,\n ...(strict ? { additionalProperties: false } : {}),\n };\n return injectKind\n ? injectKindIntoObjectSchema(node, schema.kind, strict)\n : node;\n }\n\n function unresolvedStub(slug: string): JsonSchemaNode {\n const node: JsonSchemaNode = {\n type: \"object\",\n description: `Unresolved kind \"${slug}\" — schema not available at export time.`,\n };\n // Deliberately never strict: a __kind-only object pinned with\n // additionalProperties:false would reject every real payload.\n return injectKind ? injectKindIntoObjectSchema(node, slug, false) : node;\n }\n\n const rootNode = kindObjectSchema(rootSchema);\n\n if (defsOrder.length === 0) {\n return { name: kind, schema: rootNode, strict, unresolved };\n }\n\n const defs: Record<string, JsonSchemaNode> = {};\n for (const slug of defsOrder) {\n const schema = resolvedDefs.get(slug);\n defs[slug] = schema ? kindObjectSchema(schema) : unresolvedStub(slug);\n }\n\n return { name: kind, schema: { ...rootNode, $defs: defs }, strict, unresolved };\n}\n","/**\n * JSON Schema → KindSchema — THE registry-facing direction.\n *\n * 🚨 WHY THIS FILE IS THE POINT OF THE WHOLE CONVERT LAYER (Arman's ruling,\n * 2026-08-29): a kind's fields must be DERIVED from its schema, never stored a\n * second time. `content_ir.kind_definition` used to carry both — a JSON Schema\n * AND a flattened field list written beside it — and the two had already\n * diverged on 13 of the 62 live kinds that carried both: stored lists holding\n * `__kind` as if it were a data field, enums flattened to bare strings,\n * min/max bounds and required flags the schema states and the copy never\n * learned. A cache that can disagree with its source is not a cache.\n *\n * The heavy lifting lives in `openai-schema-converter.ts` (it also serves the\n * agent-authoring flow, which needs the problems/dropped-metadata detail).\n * This module is the narrow, honest door the registry calls: one schema in,\n * one `KindSchema` out, plus whatever child kinds the schema declared inline\n * or through `$defs`.\n *\n * Accepts both storage shapes seen in the wild: a bare JSON Schema, and the\n * provider `{name, schema, strict}` response-format envelope that 5 live rows\n * carry.\n */\n\nimport type { KindSchema } from \"../core/kind-schema.types\";\nimport {\n convertAiSchemaToBlockFields,\n normalizeAiSchemaInput,\n type ConversionProblem,\n type JsonSchemaNode,\n} from \"./openai-schema-converter\";\n\nexport type KindSchemaFromJsonResult = {\n /**\n * The requested kind's schema, or null when the input could not be read as\n * an object contract at all. NEVER a partial guess: a field the vocabulary\n * cannot express degrades to `json` (widening, always safe), and only a\n * structurally unusable root yields null.\n */\n schema: KindSchema | null;\n /**\n * Child kinds the schema declared inline or via `$defs`, keyed by slug.\n * A registry that ingests these gets the whole tree from ONE row's schema —\n * which is how a nested kind renders before its children's rows load.\n */\n children: Record<string, KindSchema>;\n /** Conversion notes. `severity: \"error\"` entries are worth screaming about. */\n problems: ConversionProblem[];\n};\n\n/**\n * Derive `kind`'s field schema from its JSON Schema.\n *\n * Pure and synchronous — no registry, no IO — so a host can call it from a\n * warm load, a cold fetch, a reducer, or a test.\n */\nexport function kindSchemaFromJsonSchema(\n kind: string,\n jsonSchema: unknown,\n): KindSchemaFromJsonResult {\n if (jsonSchema === null || jsonSchema === undefined) {\n return { schema: null, children: {}, problems: [] };\n }\n\n const normalized = normalizeAiSchemaInput(jsonSchema);\n const rootSchema: JsonSchemaNode | null =\n normalized.rootSchema ??\n (typeof jsonSchema === \"object\" && !Array.isArray(jsonSchema)\n ? (jsonSchema as JsonSchemaNode)\n : null);\n\n if (!rootSchema) {\n return {\n schema: null,\n children: {},\n problems: [\n {\n severity: \"error\",\n path: \"\",\n message: `Kind \"${kind}\": emitted_json_schema is not a JSON object.`,\n },\n ],\n };\n }\n\n const converted = convertAiSchemaToBlockFields(kind, rootSchema, false);\n\n let schema: KindSchema | null = null;\n const children: Record<string, KindSchema> = {};\n for (const draft of converted.blockSchemas) {\n const asKindSchema: KindSchema = {\n kind: draft.slug,\n fields: draft.fields,\n ...(draft.root ? { root: draft.root } : {}),\n };\n if (draft.slug === kind) schema = asKindSchema;\n else children[draft.slug] = asKindSchema;\n }\n\n return { schema, children, problems: converted.problems };\n}\n"]}
@@ -0,0 +1,230 @@
1
+ import { F as FieldSchema, a as KindSchema } from './kind-schema.types-CwncWj9U.cjs';
2
+
3
+ /**
4
+ * OpenAI/provider JSON Schema → KindSchema converter + __kind injection.
5
+ *
6
+ * The strategic keystone: `buildAgentSchemaWithRenderBlockSupport` turns "a
7
+ * user/agent defined an output schema" into "the platform has a render
8
+ * contract for it" by injecting the `__kind` discriminator into the agent's
9
+ * output schema (root + array items), so the model emits self-identifying
10
+ * objects from then on.
11
+ *
12
+ * Moved from app/(dev)/demos/json-block-detector/schema-converter.ts.
13
+ */
14
+
15
+ type JsonSchemaNode = Record<string, unknown>;
16
+ type ConversionProblem = {
17
+ severity: "error" | "warning" | "info";
18
+ path: string;
19
+ message: string;
20
+ };
21
+ type DroppedMetadata = {
22
+ path: string;
23
+ dropped: Record<string, unknown>;
24
+ };
25
+ type FieldComparison = {
26
+ field: string;
27
+ aiPresent: boolean;
28
+ blockPresent: boolean;
29
+ aiSummary: string | null;
30
+ blockSummary: string | null;
31
+ status: "match" | "ai_only" | "block_only" | "type_mismatch" | "ai_richer" | "block_richer";
32
+ detail?: string;
33
+ };
34
+ /** One standalone flexible_data block schema row. */
35
+ type BlockSchemaDraft = {
36
+ slug: string;
37
+ label: string;
38
+ fields: Record<string, FieldSchema>;
39
+ /**
40
+ * NON-OBJECT ROOT form (KindSchema.root): the kind's value is this field's
41
+ * shape at the top level (scalar / array / json / OPEN object). When set,
42
+ * `fields` is empty — mirror of `KindSchema.root`.
43
+ */
44
+ root?: FieldSchema;
45
+ };
46
+ type ArrayItemKindBinding = {
47
+ arrayField: string;
48
+ itemKindSlug: string;
49
+ };
50
+ type SchemaConversionResult = {
51
+ schemaName: string | null;
52
+ strict: boolean | null;
53
+ /** Every block schema row required for the converted shape (1..n). */
54
+ blockSchemas: BlockSchemaDraft[];
55
+ /** OPTION 2 — same input shape with __kind injected for agent output. */
56
+ agentSchemaWithKinds: unknown | null;
57
+ problems: ConversionProblem[];
58
+ droppedMetadata: DroppedMetadata[];
59
+ comparisons: FieldComparison[];
60
+ };
61
+ type SavePlanEntry = {
62
+ draft: BlockSchemaDraft;
63
+ existsInDb: boolean;
64
+ willSave: boolean;
65
+ };
66
+ type ItemKindRefCheck = {
67
+ parentSlug: string;
68
+ field: string;
69
+ itemKind: string;
70
+ satisfied: boolean;
71
+ source: "batch" | "database" | "missing";
72
+ };
73
+ type SavePlanValidation = {
74
+ entries: SavePlanEntry[];
75
+ itemKindRefs: ItemKindRefCheck[];
76
+ newCount: number;
77
+ canSave: boolean;
78
+ errors: string[];
79
+ };
80
+ /**
81
+ * Inject the `__kind` discriminator into one object schema (const when
82
+ * strict, enum otherwise; `__kind` prepended to required; strict also pins
83
+ * additionalProperties:false). Shared with the REVERSE converter
84
+ * (kind-to-json-schema.ts) so both directions stamp identical discriminators.
85
+ */
86
+ declare function injectKindIntoObjectSchema(objectSchema: JsonSchemaNode, kindSlug: string, strict: boolean): JsonSchemaNode;
87
+ declare function buildAgentSchemaWithRenderBlockSupport(input: unknown, rootKindSlug: string, arrayBindings: ArrayItemKindBinding[], strict: boolean): unknown | null;
88
+ declare function normalizeAiSchemaInput(input: unknown): {
89
+ name: string | null;
90
+ strict: boolean | null;
91
+ rootSchema: JsonSchemaNode | null;
92
+ parseErrors: string[];
93
+ };
94
+ type ConversionCore = {
95
+ schemaName: string | null;
96
+ strict: boolean | null;
97
+ blockSchemas: BlockSchemaDraft[];
98
+ problems: ConversionProblem[];
99
+ droppedMetadata: DroppedMetadata[];
100
+ };
101
+ declare function convertAiSchemaToBlockFields(schemaName: string, rootSchema: JsonSchemaNode, strict: boolean): ConversionCore;
102
+ declare function compareWithExistingKindSchema(convertedFields: Record<string, FieldSchema>, existing: KindSchema | null): FieldComparison[];
103
+ declare function runSchemaConversion(input: unknown, existingSchemas: Record<string, KindSchema>): SchemaConversionResult & {
104
+ parseErrors: string[];
105
+ };
106
+ declare function validateBlockSchemaSavePlan(blockSchemas: BlockSchemaDraft[], existingSlugs: string[], hasConversionErrors: boolean): SavePlanValidation;
107
+ declare function fieldsToDbPayload(fields: Record<string, FieldSchema>): Record<string, unknown>;
108
+ declare function isDuplicateBlockSlug(slug: string, entries: Array<{
109
+ slug: string;
110
+ }>): boolean;
111
+
112
+ /**
113
+ * KindSchema → provider-ready JSON Schema — the REVERSE of the OpenAI
114
+ * converter in openai-schema-converter.ts.
115
+ *
116
+ * The requested root kind renders INLINE as the top-level object; every
117
+ * OTHER kind it transitively references (via `{type:"object", kind}` and
118
+ * `{type:"array", itemKinds}` fields, including inside inline_objects)
119
+ * becomes a `$defs` entry referenced with `$ref: "#/$defs/<slug>"`.
120
+ * References back to the ROOT kind use `"#"` — the standard JSON Schema
121
+ * recursive-root reference (OpenAI structured outputs support both forms).
122
+ * Collection is cycle-safe: each kind enters the closure exactly once.
123
+ *
124
+ * Round-trip contract — output fed through `runSchemaConversion`
125
+ * (openai-schema-converter.ts) reproduces the source KindSchemas for the
126
+ * root and every array-item child (enforced by
127
+ * __tests__/kind-to-json-schema.test.ts). The 2026-07-15 expressivity
128
+ * extension closed the three historical asymmetries: `record` now has a
129
+ * forward target (properties-less objects → record scalar/json), multi-
130
+ * itemKind arrays read back through items-anyOf when each variant declares
131
+ * its `__kind`, and nullable anyOf preserves the member list + nullable flag
132
+ * instead of flattening to `string`. Remaining accepted narrowings:
133
+ * - multi-kind array items emitted as $refs (not inline __kind objects)
134
+ * still cannot be read back — the forward converter rejects $ref.
135
+ * - a nullable object-REF (`anyOf: [$ref, {type:"null"}]`) degrades for the
136
+ * same $ref reason.
137
+ * - JSON Schema `integer` narrows to `number` (the map_result precedent).
138
+ */
139
+
140
+ type KindJsonSchemaOptions = {
141
+ /**
142
+ * Provider strict mode: additionalProperties:false on every kind object
143
+ * and inline object, and `const` (vs `enum`) __kind discriminators —
144
+ * mirrors makeKindJsonSchemaProperty / injectKindIntoObjectSchema.
145
+ */
146
+ strict?: boolean;
147
+ /**
148
+ * Inject the `__kind` discriminator (+ required) into the root and every
149
+ * $defs kind object. Default true — this is what makes the emitted
150
+ * objects self-identifying for the render pipeline.
151
+ */
152
+ injectKind?: boolean;
153
+ };
154
+ type KindJsonSchemaExport = {
155
+ /** The root kind slug — doubles as the provider schema name. */
156
+ name: string;
157
+ schema: JsonSchemaNode;
158
+ strict: boolean;
159
+ /**
160
+ * Referenced kinds the resolver could not supply. Each still gets a
161
+ * permissive `$defs` object stub (never additionalProperties:false, even
162
+ * in strict mode — a __kind-only strict object would reject every real
163
+ * payload) so the export stays structurally valid. Surface these loudly.
164
+ */
165
+ unresolved: string[];
166
+ };
167
+ /**
168
+ * Every kind referenced by a field map — `{type:"object", kind}` refs and
169
+ * `{type:"array", itemKinds}` members, recursing through inline_objects.
170
+ * First-sighting order, deduplicated. Shared read helper (the registry
171
+ * catalog builds its uses / used-by graph from this).
172
+ */
173
+ declare function collectReferencedKinds(fields: Record<string, FieldSchema>): string[];
174
+ /**
175
+ * Schema-level referenced kinds — field-map refs PLUS the refs a non-object
176
+ * root form carries. Use this (not `collectReferencedKinds(schema.fields)`)
177
+ * whenever the schema in hand may be root-form.
178
+ */
179
+ declare function collectSchemaReferencedKinds(schema: KindSchema): string[];
180
+ declare function kindSchemaToJsonSchema(kind: string, resolve: (kind: string) => KindSchema | undefined, options?: KindJsonSchemaOptions): KindJsonSchemaExport | null;
181
+
182
+ /**
183
+ * JSON Schema → KindSchema — THE registry-facing direction.
184
+ *
185
+ * 🚨 WHY THIS FILE IS THE POINT OF THE WHOLE CONVERT LAYER (Arman's ruling,
186
+ * 2026-08-29): a kind's fields must be DERIVED from its schema, never stored a
187
+ * second time. `content_ir.kind_definition` used to carry both — a JSON Schema
188
+ * AND a flattened field list written beside it — and the two had already
189
+ * diverged on 13 of the 62 live kinds that carried both: stored lists holding
190
+ * `__kind` as if it were a data field, enums flattened to bare strings,
191
+ * min/max bounds and required flags the schema states and the copy never
192
+ * learned. A cache that can disagree with its source is not a cache.
193
+ *
194
+ * The heavy lifting lives in `openai-schema-converter.ts` (it also serves the
195
+ * agent-authoring flow, which needs the problems/dropped-metadata detail).
196
+ * This module is the narrow, honest door the registry calls: one schema in,
197
+ * one `KindSchema` out, plus whatever child kinds the schema declared inline
198
+ * or through `$defs`.
199
+ *
200
+ * Accepts both storage shapes seen in the wild: a bare JSON Schema, and the
201
+ * provider `{name, schema, strict}` response-format envelope that 5 live rows
202
+ * carry.
203
+ */
204
+
205
+ type KindSchemaFromJsonResult = {
206
+ /**
207
+ * The requested kind's schema, or null when the input could not be read as
208
+ * an object contract at all. NEVER a partial guess: a field the vocabulary
209
+ * cannot express degrades to `json` (widening, always safe), and only a
210
+ * structurally unusable root yields null.
211
+ */
212
+ schema: KindSchema | null;
213
+ /**
214
+ * Child kinds the schema declared inline or via `$defs`, keyed by slug.
215
+ * A registry that ingests these gets the whole tree from ONE row's schema —
216
+ * which is how a nested kind renders before its children's rows load.
217
+ */
218
+ children: Record<string, KindSchema>;
219
+ /** Conversion notes. `severity: "error"` entries are worth screaming about. */
220
+ problems: ConversionProblem[];
221
+ };
222
+ /**
223
+ * Derive `kind`'s field schema from its JSON Schema.
224
+ *
225
+ * Pure and synchronous — no registry, no IO — so a host can call it from a
226
+ * warm load, a cold fetch, a reducer, or a test.
227
+ */
228
+ declare function kindSchemaFromJsonSchema(kind: string, jsonSchema: unknown): KindSchemaFromJsonResult;
229
+
230
+ export { type ArrayItemKindBinding, type BlockSchemaDraft, type ConversionProblem, type DroppedMetadata, type FieldComparison, type ItemKindRefCheck, type JsonSchemaNode, type KindJsonSchemaExport, type KindJsonSchemaOptions, type KindSchemaFromJsonResult, type SavePlanEntry, type SavePlanValidation, type SchemaConversionResult, buildAgentSchemaWithRenderBlockSupport, collectReferencedKinds, collectSchemaReferencedKinds, compareWithExistingKindSchema, convertAiSchemaToBlockFields, fieldsToDbPayload, injectKindIntoObjectSchema, isDuplicateBlockSlug, kindSchemaFromJsonSchema, kindSchemaToJsonSchema, normalizeAiSchemaInput, runSchemaConversion, validateBlockSchemaSavePlan };