@ai-matrx/content-ir 0.2.0 → 0.2.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/ir-types.ts","../core/kind-schema.types.ts","../core/discriminator.ts","../core/ir-tree.ts","../core/json-tokenizer.ts","../core/kind-snapshot.ts","../core/kind-parser.ts","../core/fingerprint.ts","../core/normalize.ts","../core/envelope-cache.ts","../core/envelope-read.ts","../core/envelope-value.ts","../utils/text-case-converter.ts","../core/schema-structure.ts","../session/parse-session.ts","../session/session-manager.ts","../registry/kind-storage-transform.ts","../registry/kind-dual-gate.ts","../convert/openai-schema-converter.ts","../convert/kind-to-json-schema.ts","../wire/partial-kind.ts","../wire/runtime-wrapper.ts","../wire/emit-payload.ts"],"names":["fieldSchema","isRecord","Ajv","base","type","nullable"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The canonical IR contract for structured content.\n *\n * Every source (live agent stream, DB reload, Python-preprocessed results,\n * notes, any future surface) is normalized into these shapes exactly once.\n * Anything already carrying this IR passes through downstream layers by\n * reference — see `core/normalize.ts` for the idempotence law.\n *\n * This file is pure types + path helpers. No React, no Redux, no IO.\n */\n\n/** Path of a value inside a parsed region (object keys + array indices). */\nexport type IrPath = Array<string | number>;\n\n/** How a node's kind was (or wasn't) established. */\nexport type IrKindState =\n | \"resolved\" // __kind seen + schema validated\n | \"speculative\" // committed from parent itemKinds before __kind arrived\n | \"pending_kind\" // object open, no __kind yet, no speculation possible\n | \"pending_schema\" // kind known, registry cold-fetch in flight\n | \"raw\"; // fell back — plain data, no schema claims\n\n/**\n * System-level zero-data-loss channel. Unknown keys are NEVER merged into a\n * node's `value` (they'd be indistinguishable from schema fields); they are\n * carried here verbatim — Protobuf unknown-fields discipline. Distinct from\n * any domain-level `additionalDetails` field, which is an ordinary schema\n * field inside `value`.\n */\nexport interface IrResidue {\n /** Keys present in the source object but absent from the kind schema. */\n extra: Record<string, unknown> | null;\n /** Optional schema fields the source never provided. */\n optionalMissing: string[] | null;\n /** Structured warnings attached during parsing (speculation backtracks, truncation, …). */\n notices: Array<{ code: string; message: string; at?: number }> | null;\n}\n\n/** Which wire syntax carried the kind discriminator for a node. */\nexport type IrDiscriminator =\n | { format: \"json\"; key: \"__kind\" }\n | { format: \"xml\"; tag: string }\n | { format: \"fence\"; language: string };\n\n/** A schema-shaped structured node. Children live inside `value` (and carry their own metadata via `nodeIndex`). */\nexport interface IrStructuredNode {\n role: \"structured\";\n /** Canonical kind slug. Empty string while pending. */\n kind: string;\n kindState: IrKindState;\n discriminator: IrDiscriminator;\n /** Region-relative path ([] = region root). */\n path: IrPath;\n status: \"streaming\" | \"complete\" | \"error\";\n /** Compliant snapshot: schema fields + __kind ONLY. Unknown keys → residue. */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n}\n\n/** Envelope version. Bump = migration point for persisted envelopes. */\nexport const IR_VERSION = 1 as const;\n\n/** Reserved key carrying the envelope inside RenderBlockPayload.data. */\nexport const IR_ENVELOPE_KEY = \"__ir\" as const;\n\n/**\n * One parsed region's canonical form. Serializable (plain JSON), carried on\n * render blocks (`data.__ir`), persisted on artifacts and message metadata,\n * and — with `engine: \"py-block-detector\"` — accepted pre-built from Python.\n */\nexport interface CanonicalBlockIR {\n v: typeof IR_VERSION;\n /** Provenance: which implementation produced this envelope. */\n engine: \"fe-kind-parser\" | \"py-block-detector\";\n /** Stable hash of the region source text — the idempotence / cache key. */\n fingerprint: string;\n root: IrStructuredNode;\n /**\n * pathKey → node metadata for per-path readers (child kinds under root).\n * Carries each child node's residue — child snapshot values inside\n * `root.value` hold schema fields only, so WITHOUT this the envelope would\n * silently drop nested unknown keys (zero-data-loss violation).\n */\n nodeIndex?: Record<\n string,\n Pick<IrStructuredNode, \"kind\" | \"kindState\" | \"status\"> & {\n residue?: IrResidue | null;\n }\n >;\n}\n\n/** Normalizer output segment: prose stays raw text; structured regions carry IR. */\nexport type CanonicalSegment =\n | { role: \"text\"; content: string }\n | {\n role: \"block\";\n blockType: string;\n content: string;\n ir: CanonicalBlockIR | null;\n };\n\nexport interface CanonicalContent {\n v: typeof IR_VERSION;\n segments: CanonicalSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// Path helpers — the ONE implementation. Consumers must not roll their own.\n// ---------------------------------------------------------------------------\n\nexport function irPathKey(path: IrPath): string {\n return path.map((segment) => String(segment)).join(\".\");\n}\n\nexport function irPathsEqual(left: IrPath, right: IrPath): boolean {\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nexport function irPathIsUnderOrEqual(path: IrPath, prefix: IrPath): boolean {\n if (path.length < prefix.length) return false;\n for (let i = 0; i < prefix.length; i++) {\n if (path[i] !== prefix[i]) return false;\n }\n return true;\n}\n\n/** Human label for a path (\"root\", \"cards[2].front\"). */\nexport function irPathLabel(path: IrPath): string {\n if (path.length === 0) return \"root\";\n\n const parts: string[] = [];\n for (const segment of path) {\n if (typeof segment === \"number\") {\n parts[parts.length - 1] += `[${segment}]`;\n } else {\n parts.push(String(segment));\n }\n }\n return parts.join(\".\");\n}\n\n/** True when every residue channel is empty — normalize to null instead. */\nexport function isEmptyResidue(residue: IrResidue): boolean {\n return (\n (residue.extra === null || Object.keys(residue.extra).length === 0) &&\n (residue.optionalMissing === null ||\n residue.optionalMissing.length === 0) &&\n (residue.notices === null || residue.notices.length === 0)\n );\n}\n","/**\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 * Discriminator abstraction — how a node's kind is established from the wire.\n *\n * The parser never hardcodes \"kind comes from a JSON key\". JSON resolves via\n * the `__kind` field (implemented today); XML resolves via tag → registry\n * alias (Phase 6 — contract only). `IrStructuredNode.discriminator` records\n * which resolver produced each node so renderers and round-trip serializers\n * can reconstruct the original wire format per node.\n */\n\nimport type { IrDiscriminator } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nexport const JSON_DISCRIMINATOR: IrDiscriminator = {\n format: \"json\",\n key: KIND_KEY,\n};\n\nexport function xmlDiscriminator(tag: string): IrDiscriminator {\n return { format: \"xml\", tag };\n}\n\nexport function fenceDiscriminator(language: string): IrDiscriminator {\n return { format: \"fence\", language };\n}\n\n/** What a resolver can say about an opening compound value. */\nexport type KindResolution =\n | { outcome: \"kind\"; kind: string }\n | { outcome: \"pending\" }\n | { outcome: \"raw\"; reason: string };\n","/**\n * IrTree — the immutable, structurally-shared view of a parsed region.\n *\n * Consumes KindStreamEvents and maintains one node per kind-resolved path.\n * Node values are STABILIZED: compound children that are themselves kind\n * nodes are substituted by their current tree value, so an update to\n * cards[7] produces new identities for root → cards → cards[7] ONLY;\n * cards[0..6] keep referential identity and memoized components bail out.\n *\n * Parser frame values are NEVER exposed — everything handed out is rebuilt\n * copy-on-write, so it is safe to freeze (Redux dev-mode immutability) and\n * safe to hold across renders.\n *\n * Both the live ParseSession and the one-shot normalizer build their\n * CanonicalBlockIR from this tree — one assembly path, structurally\n * identical output for stream and static input.\n */\n\nimport { JSON_DISCRIMINATOR } from \"./discriminator\";\nimport {\n IR_VERSION,\n irPathKey,\n type CanonicalBlockIR,\n type IrKindState,\n type IrPath,\n type IrResidue,\n type IrStructuredNode,\n} from \"./ir-types\";\nimport type { KindStreamEvent } from \"./kind-parser\";\n\nexport interface IrTreeNode {\n kind: string;\n kindState: IrKindState;\n path: IrPath;\n pathKey: string;\n /** Stabilized immutable snapshot value (schema fields + __kind only). */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n complete: boolean;\n /** Bumps on every update to this node (incl. child propagation). */\n version: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * THE NO-REGRESSION LAW: a value already shown to a user is never taken away.\n *\n * A degrade (raw_object) or a late completion carries the parser's plain view\n * of a node, which can be POORER than the snapshot the tree already holds —\n * `{}` in the worst case, when a root object closes and its schema was never\n * satisfied. Overwriting with it blanks a fully-rendered block mid-stream.\n * Incoming keys win; prior keys the incoming lacks survive.\n *\n * Returns the merged value plus whether prior fields had to be rescued —\n * a rescue means a real defect upstream and is reported on the envelope as a\n * `degrade_data_rescued` notice, never silently absorbed.\n */\nfunction mergeWithoutLoss(\n prior: unknown,\n incoming: unknown,\n): { value: unknown; rescued: string[] } {\n if (!isRecord(prior)) return { value: incoming, rescued: [] };\n if (!isRecord(incoming)) {\n // A real array/scalar is a genuine shape change, not a blanking; only\n // nothing-at-all loses to what we already have.\n if (incoming !== null && incoming !== undefined) {\n return { value: incoming, rescued: [] };\n }\n return { value: prior, rescued: Object.keys(prior) };\n }\n const rescued = Object.keys(prior).filter((key) => !(key in incoming));\n if (rescued.length === 0) return { value: incoming, rescued };\n return { value: { ...prior, ...incoming }, rescued };\n}\n\nexport class IrTree {\n private readonly nodes = new Map<string, IrTreeNode>();\n private readonly rawPaths = new Map<string, string>(); // pathKey → reason\n private readonly dirty = new Set<string>();\n\n /**\n * KIND PRESERVATION (streaming db/cloud kinds): pathKey → identified kind\n * for nodes whose kind is KNOWN (kind_identified / pending_schema) but that\n * have no snapshot node yet because the schema is still cold-fetching.\n * Without this, the envelope reports `kind: \"\"` for the whole pending\n * window and the render seam can only show raw JSON.\n */\n private readonly identifiedKinds = new Map<string, string>();\n /** pathKeys currently waiting on a schema cold fetch. */\n private readonly pendingSchemaPaths = new Set<string>();\n /**\n * Early top-level scalar fields (title, loading_message, …) captured for\n * identified-but-schema-pending nodes — the loading-component fuel. Scalars\n * only (no live parser references can escape through here). Superseded the\n * moment a real snapshot node exists.\n */\n private readonly earlyFields = new Map<string, Record<string, unknown>>();\n /**\n * pathKey → identified kind preserved through a SCHEMA-AVAILABILITY raw\n * fallback (parser stamped `kind` on the raw_object event). Structural raws\n * (missing __kind, duplicate key, validation failure) never land here.\n */\n private readonly rawKinds = new Map<string, string>();\n\n private regionStatus: \"streaming\" | \"complete\" | \"error\" = \"streaming\";\n private errorReason: string | null = null;\n private rootRawValue: Record<string, unknown> | null = null;\n /** Notices for degrades that tried to erase already-published data. */\n private readonly rescueNotices: NonNullable<IrResidue[\"notices\"]> = [];\n private completedKind = \"\";\n\n get status(): \"streaming\" | \"complete\" | \"error\" {\n return this.regionStatus;\n }\n\n applyEvent(event: KindStreamEvent): void {\n switch (event.type) {\n case \"kind_identified\": {\n this.identifiedKinds.set(irPathKey(event.path), event.kind);\n this.dirty.add(irPathKey(event.path));\n return;\n }\n case \"pending_schema\": {\n const pathKey = irPathKey(event.path);\n this.identifiedKinds.set(pathKey, event.kind);\n this.pendingSchemaPaths.add(pathKey);\n this.dirty.add(pathKey);\n return;\n }\n case \"field\": {\n // Only meaningful pre-schema: an identified node with NO snapshot yet\n // accumulates its early scalar values for the loading component.\n const parentKey = irPathKey(event.path.slice(0, -1));\n if (this.nodes.has(parentKey)) return;\n if (!this.identifiedKinds.has(parentKey)) return;\n const v = event.value;\n if (v !== null && typeof v === \"object\") return; // scalars only\n const bucket = this.earlyFields.get(parentKey) ?? {};\n bucket[event.key] = v;\n this.earlyFields.set(parentKey, bucket);\n this.dirty.add(parentKey);\n return;\n }\n case \"block_snapshot\": {\n const pathKey = irPathKey(event.path);\n this.pendingSchemaPaths.delete(pathKey);\n this.earlyFields.delete(pathKey);\n this.upsertNode(event.path, {\n kind: event.kind,\n value: event.value,\n residue: event.residue,\n complete: event.complete,\n });\n return;\n }\n case \"raw_object\": {\n const pathKey = irPathKey(event.path);\n this.pendingSchemaPaths.delete(pathKey);\n this.earlyFields.delete(pathKey);\n if (event.kind) this.rawKinds.set(pathKey, event.kind);\n this.markRaw(event.path, event.reason, event.value);\n return;\n }\n case \"complete\": {\n this.regionStatus = this.errorReason ? \"error\" : \"complete\";\n this.completedKind = event.kind;\n if (this.rawPaths.has(\"\") && isRecord(event.value)) {\n // The completion value is the parser's full view of the region — it\n // fills a raw root, and merges with (never regresses) one a mid-\n // stream degrade already wrote.\n const merged = mergeWithoutLoss(this.rootRawValue, event.value);\n this.recordRescue(\"\", \"complete\", merged.rescued);\n if (isRecord(merged.value)) this.rootRawValue = merged.value;\n }\n this.dirty.add(\"\");\n return;\n }\n case \"error\": {\n this.errorReason = event.reason;\n this.regionStatus = \"error\";\n this.dirty.add(\"\");\n return;\n }\n default:\n return;\n }\n }\n\n getNode(pathKey: string): IrTreeNode | null {\n return this.nodes.get(pathKey) ?? null;\n }\n\n listNodes(): IrTreeNode[] {\n return [...this.nodes.values()];\n }\n\n isRawPath(pathKey: string): boolean {\n return this.rawPaths.has(pathKey);\n }\n\n /** Dirty pathKeys since the last drain — the flush/notify unit. */\n drainDirty(): string[] {\n const drained = [...this.dirty];\n this.dirty.clear();\n return drained;\n }\n\n hasDirty(): boolean {\n return this.dirty.size > 0;\n }\n\n // -------------------------------------------------------------------------\n\n private upsertNode(\n path: IrPath,\n payload: {\n kind: string;\n value: Record<string, unknown>;\n residue: IrResidue | null;\n complete: boolean;\n },\n ): void {\n const pathKey = irPathKey(path);\n if (this.rawPaths.has(pathKey)) return;\n\n const stabilized = this.stabilizeValue(\n payload.value,\n path,\n pathKey,\n ) as Record<string, unknown>;\n\n const prior = this.nodes.get(pathKey);\n const node: IrTreeNode = {\n kind: payload.kind,\n kindState: payload.complete\n ? \"resolved\"\n : (prior?.kindState ?? \"resolved\"),\n path,\n pathKey,\n value: stabilized,\n residue: payload.residue,\n complete: payload.complete,\n version: (prior?.version ?? 0) + 1,\n };\n this.nodes.set(pathKey, node);\n this.dirty.add(pathKey);\n\n this.propagateToAncestors(path, node.value);\n }\n\n /**\n * Substitute kind-node children with their current tree values so sibling\n * identities are stable; deep-copy everything else so no live parser\n * reference ever escapes.\n */\n private stabilizeValue(\n value: unknown,\n path: IrPath,\n applyingPathKey: string,\n ): unknown {\n if (Array.isArray(value)) {\n return value.map((item, index) =>\n this.stabilizeValue(item, [...path, index], applyingPathKey),\n );\n }\n if (isRecord(value)) {\n const pathKey = irPathKey(path);\n if (pathKey !== applyingPathKey) {\n const childNode = this.nodes.get(pathKey);\n if (childNode) return childNode.value;\n }\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n out[key] = this.stabilizeValue(child, [...path, key], applyingPathKey);\n }\n return out;\n }\n return value;\n }\n\n /**\n * COW spine rebuild: replace the child's slot in each ancestor kind-node's\n * value, shallow-copying only the containers along the way. Siblings keep\n * identity; every ancestor gets a new value identity + version bump.\n */\n private propagateToAncestors(childPath: IrPath, childValue: unknown): void {\n let currentPath = childPath;\n let currentValue: unknown = childValue;\n\n while (currentPath.length > 0) {\n const ancestor = this.findNearestAncestorNode(currentPath);\n if (!ancestor) return;\n\n const relative = currentPath.slice(ancestor.path.length);\n const rebuilt = this.cloneAlong(ancestor.value, relative, currentValue);\n if (rebuilt === ancestor.value) return;\n\n const updated: IrTreeNode = {\n ...ancestor,\n value: rebuilt as Record<string, unknown>,\n version: ancestor.version + 1,\n };\n this.nodes.set(ancestor.pathKey, updated);\n this.dirty.add(ancestor.pathKey);\n\n currentPath = ancestor.path;\n currentValue = updated.value;\n }\n }\n\n private findNearestAncestorNode(path: IrPath): IrTreeNode | null {\n for (let len = path.length - 1; len >= 0; len--) {\n const node = this.nodes.get(irPathKey(path.slice(0, len)));\n if (node) return node;\n }\n return null;\n }\n\n private cloneAlong(\n container: unknown,\n relative: IrPath,\n leaf: unknown,\n ): unknown {\n if (relative.length === 0) return leaf;\n\n const [head, ...rest] = relative;\n\n if (Array.isArray(container)) {\n const index = typeof head === \"number\" ? head : Number(head);\n const copy = container.slice();\n // Growing the array (a child that hasn't hit the parent snapshot yet).\n while (copy.length <= index) copy.push(undefined);\n copy[index] = this.cloneAlong(container[index], rest, leaf);\n return copy;\n }\n\n if (isRecord(container)) {\n const key = String(head);\n return {\n ...container,\n [key]: this.cloneAlong(container[key], rest, leaf),\n };\n }\n\n // The slot's container hasn't arrived in the ancestor value yet — build it.\n const built: unknown =\n typeof head === \"number\"\n ? this.cloneAlong([], relative, leaf)\n : this.cloneAlong({}, relative, leaf);\n return built;\n }\n\n private markRaw(path: IrPath, reason: string, value: unknown): void {\n const pathKey = irPathKey(path);\n // NO REGRESSION: the degrade must not blank the snapshot this node already\n // published. Its plain data still belongs to its ancestors — zero loss.\n const prior =\n path.length === 0\n ? (this.nodes.get(\"\")?.value ?? this.rootRawValue)\n : this.nodes.get(pathKey)?.value;\n const merged = mergeWithoutLoss(prior, value);\n this.recordRescue(pathKey, reason, merged.rescued);\n\n this.rawPaths.set(pathKey, reason);\n this.nodes.delete(pathKey);\n this.dirty.add(pathKey);\n\n if (path.length === 0) {\n if (isRecord(merged.value)) this.rootRawValue = merged.value;\n return;\n }\n\n this.propagateToAncestors(path, merged.value);\n }\n\n /**\n * A rescue means a degrade tried to erase data a user could already see —\n * an upstream defect. It rides the envelope as a notice so it surfaces in the\n * Error Inspector instead of being silently absorbed (`core/` is a pure\n * kernel: no console, no capture — the notice IS the alarm).\n */\n private recordRescue(\n pathKey: string,\n reason: string,\n rescued: string[],\n ): void {\n if (rescued.length === 0) return;\n this.rescueNotices.push({\n code: \"degrade_data_rescued\",\n message: `degrade (${reason}) at path \"${pathKey || \"<root>\"}\" would have dropped: ${rescued.join(\", \")}`,\n });\n }\n\n /**\n * Assemble the canonical envelope. ONE code path for stream + one-shot.\n * Callers supply the fingerprint (one-shot hashes the source; live sessions\n * keep an incremental hasher so no per-flush re-hash happens).\n */\n buildEnvelope(fingerprint: string): CanonicalBlockIR {\n const rootNode = this.nodes.get(\"\");\n const rootRawReason = this.rawPaths.get(\"\") ?? null;\n\n const notices: NonNullable<IrResidue[\"notices\"]> = [];\n if (this.errorReason) {\n notices.push({ code: \"parse_error\", message: this.errorReason });\n }\n if (rootRawReason) {\n notices.push({ code: \"raw_fallback\", message: rootRawReason });\n }\n notices.push(...this.rescueNotices);\n\n const baseResidue = rootNode?.residue ?? null;\n let residue = baseResidue;\n if (notices.length > 0) {\n residue = {\n extra: baseResidue?.extra ?? null,\n optionalMissing: baseResidue?.optionalMissing ?? null,\n notices: [...(baseResidue?.notices ?? []), ...notices],\n };\n }\n\n const isRaw = rootRawReason !== null;\n\n // KIND PRESERVATION: a root that degraded raw purely because its schema\n // never arrived (rawKinds) keeps its identified kind — the render seam\n // routes it to the generic viewer / db component instead of raw JSON, and\n // a late schema/component arrival can upgrade it via repaint. Structural\n // raws (no entry in rawKinds) stay kind-less exactly as before. While\n // STREAMING with a known-but-cold kind (no node yet), the identified kind\n // + early scalar fields surface so the loading layer can render.\n const identifiedKind = this.identifiedKinds.get(\"\") ?? \"\";\n const rootKind = isRaw\n ? (this.rawKinds.get(\"\") ?? \"\")\n : (rootNode?.kind ?? (this.completedKind || identifiedKind));\n\n const root: IrStructuredNode = {\n role: \"structured\",\n kind: rootKind,\n kindState: isRaw\n ? \"raw\"\n : rootNode\n ? rootNode.kindState\n : this.pendingSchemaPaths.has(\"\")\n ? \"pending_schema\"\n : this.regionStatus === \"streaming\"\n ? identifiedKind\n ? \"pending_schema\"\n : \"pending_kind\"\n : \"raw\",\n discriminator: JSON_DISCRIMINATOR,\n path: [],\n status: this.regionStatus,\n value:\n rootNode?.value ??\n this.rootRawValue ??\n // Copy: the early-fields bucket keeps mutating as fields arrive; the\n // envelope must be freezable (Redux dev-mode immutability).\n (this.earlyFields.has(\"\") ? { ...this.earlyFields.get(\"\") } : {}),\n residue,\n };\n\n const nodeIndex: NonNullable<CanonicalBlockIR[\"nodeIndex\"]> = {};\n for (const node of this.nodes.values()) {\n if (node.pathKey === \"\") continue;\n nodeIndex[node.pathKey] = {\n kind: node.kind,\n kindState: node.kindState,\n status: node.complete ? \"complete\" : \"streaming\",\n ...(node.residue ? { residue: node.residue } : {}),\n };\n }\n for (const [pathKey] of this.rawPaths) {\n if (pathKey === \"\") continue;\n nodeIndex[pathKey] = { kind: \"\", kindState: \"raw\", status: \"complete\" };\n }\n\n return {\n v: IR_VERSION,\n engine: \"fe-kind-parser\",\n fingerprint,\n root,\n ...(Object.keys(nodeIndex).length > 0 ? { nodeIndex } : {}),\n };\n }\n}\n","/**\n * Character-level incremental JSON tokenizer. Survives chunk boundaries\n * mid-token (strings, escapes, unicode sequences, primitives). Pure — no\n * React, no Redux, no IO.\n *\n * Moved from app/(dev)/demos/json-block-detector/reusable-logic.ts (the demo\n * is now a consumer of this library).\n */\n\nexport type Punct = \"{\" | \"}\" | \"[\" | \"]\" | \":\" | \",\";\n\nexport type JsonToken =\n | { type: \"punct\"; value: Punct; at: number }\n | { type: \"string\"; value: string; at: number }\n | { type: \"number\"; value: number; at: number }\n | { type: \"boolean\"; value: boolean; at: number }\n | { type: \"null\"; value: null; at: number };\n\nexport class JsonStreamTokenizer {\n private mode: \"normal\" | \"string\" | \"escape\" | \"unicode\" | \"primitive\" =\n \"normal\";\n private pos = 0;\n\n private stringBuffer = \"\";\n private primitiveBuffer = \"\";\n private unicodeBuffer = \"\";\n private tokenStart = 0;\n\n constructor(private readonly onToken: (token: JsonToken) => void) {}\n\n get position(): number {\n return this.pos;\n }\n\n push(chunk: string): void {\n for (let i = 0; i < chunk.length; i++) {\n const ch = chunk[i];\n const at = this.pos;\n this.pos += 1;\n\n // `i < chunk.length` is the loop bound above, so `ch` is always a real\n // character here — this guard is unreachable in practice, it only\n // satisfies noUncheckedIndexedAccess's string-index typing.\n if (ch === undefined) continue;\n\n if (this.mode === \"primitive\") {\n if (this.isDelimiter(ch)) {\n this.emitPrimitive();\n this.handleNormalChar(ch, at);\n } else {\n this.primitiveBuffer += ch;\n }\n continue;\n }\n\n if (this.mode === \"string\") {\n if (ch === '\"') {\n this.onToken({\n type: \"string\",\n value: this.stringBuffer,\n at: this.tokenStart,\n });\n this.stringBuffer = \"\";\n this.mode = \"normal\";\n continue;\n }\n\n if (ch === \"\\\\\") {\n this.mode = \"escape\";\n continue;\n }\n\n if (ch === \"\\n\" || ch === \"\\r\") {\n throw new Error(`Invalid unescaped newline in JSON string at ${at}`);\n }\n\n this.stringBuffer += ch;\n continue;\n }\n\n if (this.mode === \"escape\") {\n if (ch === \"u\") {\n this.unicodeBuffer = \"\";\n this.mode = \"unicode\";\n continue;\n }\n\n const escaped: Record<string, string> = {\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n };\n\n if (!(ch in escaped)) {\n throw new Error(`Invalid JSON escape sequence at ${at}`);\n }\n\n this.stringBuffer += escaped[ch];\n this.mode = \"string\";\n continue;\n }\n\n if (this.mode === \"unicode\") {\n if (!/[0-9a-fA-F]/.test(ch)) {\n throw new Error(`Invalid unicode escape at ${at}`);\n }\n\n this.unicodeBuffer += ch;\n\n if (this.unicodeBuffer.length === 4) {\n this.stringBuffer += String.fromCharCode(\n parseInt(this.unicodeBuffer, 16),\n );\n this.unicodeBuffer = \"\";\n this.mode = \"string\";\n }\n\n continue;\n }\n\n this.handleNormalChar(ch, at);\n }\n }\n\n end(): void {\n if (this.mode === \"primitive\") {\n this.emitPrimitive();\n return;\n }\n\n if (this.mode !== \"normal\") {\n throw new Error(\n `Stream ended while parsing JSON ${this.mode} at ${this.pos}`,\n );\n }\n }\n\n private handleNormalChar(ch: string, at: number): void {\n if (/\\s/.test(ch)) return;\n\n if (\n ch === \"{\" ||\n ch === \"}\" ||\n ch === \"[\" ||\n ch === \"]\" ||\n ch === \":\" ||\n ch === \",\"\n ) {\n this.onToken({ type: \"punct\", value: ch, at });\n return;\n }\n\n if (ch === '\"') {\n this.mode = \"string\";\n this.stringBuffer = \"\";\n this.tokenStart = at;\n return;\n }\n\n if (/[-0-9tfn]/.test(ch)) {\n this.mode = \"primitive\";\n this.primitiveBuffer = ch;\n this.tokenStart = at;\n return;\n }\n\n throw new Error(`Unexpected character \"${ch}\" at ${at}`);\n }\n\n private emitPrimitive(): void {\n const raw = this.primitiveBuffer;\n const at = this.tokenStart;\n\n this.primitiveBuffer = \"\";\n this.mode = \"normal\";\n\n let value: unknown;\n\n try {\n value = JSON.parse(raw);\n } catch {\n throw new Error(`Invalid JSON primitive \"${raw}\" at ${at}`);\n }\n\n if (typeof value === \"number\") {\n this.onToken({ type: \"number\", value, at });\n return;\n }\n\n if (typeof value === \"boolean\") {\n this.onToken({ type: \"boolean\", value, at });\n return;\n }\n\n if (value === null) {\n this.onToken({ type: \"null\", value, at });\n return;\n }\n\n throw new Error(`Unsupported JSON primitive \"${raw}\" at ${at}`);\n }\n\n private isDelimiter(ch: string): boolean {\n return (\n /\\s/.test(ch) ||\n ch === \"{\" ||\n ch === \"}\" ||\n ch === \"[\" ||\n ch === \"]\" ||\n ch === \":\" ||\n ch === \",\"\n );\n }\n}\n","/**\n * Compliant snapshot builder — the guarantee that a renderer always receives\n * a well-formed, schema-shaped object even mid-stream.\n *\n * ZERO DATA LOSS: unknown keys are NOT merged into the snapshot value (they\n * would be indistinguishable from schema fields). They are returned on the\n * residue channel and re-merged only at wire-serialization time via\n * `mergeResidueIntoValue`.\n */\n\nimport { isEmptyResidue, type IrResidue } from \"./ir-types\";\nimport {\n KIND_KEY,\n type FieldSchema,\n type KindSchema,\n} from \"./kind-schema.types\";\n\n/** Placeholder for a required field not yet received during streaming. */\nexport function emptyValueForFieldSchema(field: FieldSchema): unknown {\n if (field.nullable) return null;\n\n switch (field.type) {\n case \"string\":\n return \"\";\n case \"number\":\n return 0;\n case \"boolean\":\n return false;\n case \"json\":\n // Any JSON value — null is the honest \"nothing arrived yet\" member.\n return null;\n case \"string[]\":\n case \"number[]\":\n case \"boolean[]\":\n case \"json[]\":\n case \"array\":\n return [];\n case \"object\":\n case \"inline_object\":\n case \"record\":\n return {};\n case \"enum\":\n return \"\";\n case \"union\":\n if (field.scalars.includes(\"string\")) return \"\";\n if (field.scalars.includes(\"number\")) return 0;\n if (field.scalars.includes(\"boolean\")) return false;\n // Kinds-only object union — an empty object is the least-wrong stub.\n return {};\n default:\n return null;\n }\n}\n\nexport interface CompliantKindSnapshot {\n /** Schema fields + __kind only. Required-but-missing fields hold typed placeholders. */\n value: Record<string, unknown>;\n /** Unknown keys + missing optionals. Null when both channels are empty. */\n residue: IrResidue | null;\n}\n\nexport function buildCompliantKindSnapshot(\n schema: KindSchema,\n partial: Record<string, unknown>,\n): CompliantKindSnapshot {\n const value: Record<string, unknown> = {\n [KIND_KEY]: schema.kind,\n };\n const optionalMissing: string[] = [];\n\n for (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {\n if (fieldName in partial && partial[fieldName] !== undefined) {\n value[fieldName] = partial[fieldName];\n } else if (fieldSchema.required) {\n value[fieldName] = emptyValueForFieldSchema(fieldSchema);\n } else {\n optionalMissing.push(fieldName);\n }\n }\n\n let extra: Record<string, unknown> | null = null;\n for (const [fieldName, fieldValue] of Object.entries(partial)) {\n if (fieldName === KIND_KEY) continue;\n if (fieldName in schema.fields) continue;\n if (extra === null) extra = {};\n extra[fieldName] = fieldValue;\n }\n\n const residue: IrResidue = {\n extra,\n optionalMissing: optionalMissing.length > 0 ? optionalMissing : null,\n notices: null,\n };\n\n return { value, residue: isEmptyResidue(residue) ? null : residue };\n}\n\n/**\n * Wire/round-trip form: schema fields + unknown keys back together, exactly\n * as the source carried them. `residue.extra` wins nothing — snapshot value\n * and extras are disjoint by construction.\n */\nexport function mergeResidueIntoValue(\n value: Record<string, unknown>,\n residue: IrResidue | null,\n): Record<string, unknown> {\n if (!residue?.extra) return value;\n return { ...value, ...residue.extra };\n}\n","/**\n * KindStreamParser — the streaming, schema-validating, __kind-discriminated\n * JSON parser at the heart of content-ir.\n *\n * Frame-stack pushdown parser over JsonStreamTokenizer tokens. Every value is\n * path-addressed; every object resolves a kind against the schema registry;\n * schema-shaped `block_snapshot` events fire on field arrival so renderers\n * get live partials; unknown/invalid structures degrade to `raw_object`\n * instead of failing the stream.\n *\n * The pushdown discipline (commit → descend → never re-ask → backtrack):\n * - SPECULATIVE DESCENT: when a parent field schema predicts a child's kind\n * ({type:\"object\", kind} or {type:\"array\", itemKinds:[K]} with one member),\n * the child commits to that kind THE INSTANT `{` opens and renders a\n * placeholder snapshot. `__kind` arrival confirms (no-op), re-tags (allowed\n * sibling kind), or backtracks to raw (contradiction). An object under a\n * predicting parent doesn't even need `__kind` — prediction alone types it.\n * - PENDING SCHEMA: an identified kind whose schema isn't loaded holds the\n * node open (`pending_schema` event, fields keep accumulating), fires the\n * resolver's cold fetch, and upgrades in place via `notifySchemaArrived` —\n * even after the node (or the whole region) has closed.\n * - POP-UP-ONE-LEVEL: node-scoped problems (duplicate key, schema violation,\n * disallowed itemKind) mark THAT node raw and keep parsing the parent.\n * Only grammar/tokenizer errors are region-fatal — and the host degrades\n * the region to a plain code block, never the stream.\n */\n\nimport { JsonStreamTokenizer, type JsonToken } from \"./json-tokenizer\";\nimport type { IrPath, IrResidue } from \"./ir-types\";\nimport {\n KIND_KEY,\n isJsonAnyField,\n isScalarArrayType,\n readObjectKind,\n scalarArrayItemType,\n type FieldSchema,\n type KindSchema,\n type RecordValueType,\n} from \"./kind-schema.types\";\nimport { buildCompliantKindSnapshot } from \"./kind-snapshot\";\n\n/** Kept as the historical name for the parser's event paths. */\nexport type JsonPath = IrPath;\n\n/**\n * Schema source abstraction. A plain Record works for static sets; the\n * registry supplies a resolver whose `request` fires a cold fetch and later\n * calls `parser.notifySchemaArrived`.\n */\nexport interface SchemaResolver {\n get(kind: string): KindSchema | undefined;\n /** Fire-and-forget cold fetch. Absent = static source, unknown kinds go raw. */\n request?(kind: string): void;\n /**\n * Optional per-resolver override for legacy root-key recognition. Most hosts\n * leave this unset and register the lookup once via\n * `setJsonRootKeyLookup` — see that function for why.\n */\n kindForJsonRootKey?(key: string): string | null;\n}\n\n/**\n * Legacy root-key recognition: `{\"quiz_title\": …}` → `quiz_set`.\n *\n * REGISTERED BY THE HOST, never imported by this file. The surface registry is\n * host-coupled (it reaches `captureError`), and this file is a pinned kernel\n * twin shared with aidream's Workflow Studio — a direct import breaks that\n * build outright.\n *\n * It is a module seam rather than a constructor argument because recognition\n * must not depend on each CALLER remembering to inject it: most callers pass a\n * plain `Record<string, KindSchema>` for `schemas`, which cannot carry a\n * function. Making this per-call silently disabled root-key recognition for\n * every one of them.\n *\n * Unset = the host has no surface table and root-key recognition does not\n * happen — the correct posture for a pure consumer like Workflow Studio.\n */\nlet jsonRootKeyLookup: ((key: string) => string | null) | null = null;\n\nexport function setJsonRootKeyLookup(\n lookup: ((key: string) => string | null) | null,\n): void {\n jsonRootKeyLookup = lookup;\n}\n\ntype ObjectFrame = {\n kind: \"object\";\n path: JsonPath;\n value: Record<string, unknown>;\n expecting: \"keyOrEnd\" | \"key\" | \"colon\" | \"value\" | \"commaOrEnd\";\n currentKey?: string | undefined;\n keyCount: number;\n};\n\ntype ArrayFrame = {\n kind: \"array\";\n path: JsonPath;\n value: unknown[];\n expecting: \"valueOrEnd\" | \"value\" | \"commaOrEnd\";\n nextIndex: number;\n};\n\ntype Frame = ObjectFrame | ArrayFrame;\n\ntype SchemaValidationOutcome = {\n error: string | null;\n optionalMissing: string[];\n extraFields: string[];\n};\n\nexport type KindStreamEvent =\n | {\n type: \"kind_identified\";\n kind: string;\n path: JsonPath;\n /** True when committed from the parent schema before __kind arrived. */\n speculative?: boolean;\n at: number;\n }\n | { type: \"pending_kind\"; path: JsonPath; at: number }\n | {\n type: \"kind_wait_end\";\n path: JsonPath;\n outcome: \"identified\" | \"raw_fallback\";\n kind?: string;\n reason?: string;\n at: number;\n }\n | {\n type: \"pending_schema\";\n kind: string;\n path: JsonPath;\n at: number;\n }\n | {\n type: \"field\";\n kind: string;\n path: JsonPath;\n key: string;\n value: unknown;\n at: number;\n }\n | { type: \"object_start\"; path: JsonPath; at: number }\n | {\n type: \"object_complete\";\n kind: string;\n path: JsonPath;\n value: Record<string, unknown>;\n at: number;\n }\n | {\n type: \"raw_object\";\n path: JsonPath;\n value: unknown;\n reason: string;\n /**\n * The kind that WAS identified for this node before it degraded raw —\n * present ONLY for schema-availability failures (\"no schema registered\"\n * for an identified/declared kind), never for structural failures\n * (missing __kind, duplicate keys, schema violations). Consumers use it\n * to preserve a known-but-unrenderable kind on the envelope so the\n * render seam can route to the generic viewer (or upgrade when the\n * schema arrives late) instead of dumping raw JSON.\n */\n kind?: string;\n at: number;\n }\n | {\n type: \"optional_field_missing\";\n kind: string;\n path: JsonPath;\n field: string;\n at: number;\n }\n | {\n type: \"extra_field\";\n kind: string;\n path: JsonPath;\n field: string;\n at: number;\n }\n | {\n type: \"block_snapshot\";\n kind: string;\n path: JsonPath;\n value: Record<string, unknown>;\n residue: IrResidue | null;\n complete: boolean;\n at: number;\n }\n | { type: \"array_start\"; path: JsonPath; field: string; at: number }\n | { type: \"complete\"; kind: string; value: unknown; at: number }\n | { type: \"error\"; reason: string; at: number };\n\nexport type KindStreamParserOptions = {\n onEvent: (event: KindStreamEvent) => void;\n schemas: Record<string, KindSchema> | SchemaResolver;\n /**\n * Known-context root prediction (e.g. \"this agent's output schema is\n * flashcard_set\"). The root commits speculatively at `{` open — the Option-1\n * provenance path for agents whose schemas don't carry __kind yet.\n */\n expectedRootKind?: string;\n};\n\nfunction isSchemaResolver(\n source: Record<string, KindSchema> | SchemaResolver,\n): source is SchemaResolver {\n return typeof (source as SchemaResolver).get === \"function\";\n}\n\nfunction safeCopy<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch {\n return value;\n }\n}\n\nexport class KindStreamParser {\n private readonly resolver: SchemaResolver;\n private readonly stack: Frame[] = [];\n private readonly objectKinds = new Map<string, string>();\n private readonly inlineSchemas = new Map<\n string,\n Record<string, FieldSchema>\n >();\n private readonly recordSchemas = new Map<string, RecordValueType>();\n private readonly rawObjectPaths = new Set<string>();\n /**\n * Subtrees whose value domain is \"any JSON\" by schema (`json` / `json[]`\n * fields, `record` with `values:\"json\"` members). OPAQUE by contract: no\n * kind identification, no pending_kind, no raw_object degradation — unknown\n * structure here is the declared shape, not a failure. Propagates to every\n * descendant compound.\n */\n private readonly opaquePaths = new Set<string>();\n private readonly deferredFields = new Map<\n string,\n Array<{ key: string; value: unknown; at: number }>\n >();\n private readonly awaitingKindPaths = new Set<string>();\n /** Paths whose kind came from parent-schema prediction, unconfirmed so far. */\n private readonly speculativeKinds = new Set<string>();\n /**\n * Kind named by the root object's FIRST key through the `json_root_key`\n * surface registry — a candidate, adopted only at root finalize.\n */\n private rootSurfaceKind: string | null = null;\n /** kind → paths (by key) waiting for the resolver's cold fetch. */\n private readonly pendingSchemaPaths = new Map<string, Map<string, JsonPath>>();\n /** Pending-schema paths whose object already closed. */\n private readonly closedPendingPaths = new Set<string>();\n /** Schemas delivered via notifySchemaArrived (overlay over the resolver). */\n private readonly arrivedSchemas = new Map<string, KindSchema>();\n\n private tokenizer: JsonStreamTokenizer;\n private root: unknown;\n private rootKind = \"\";\n private rootDone = false;\n private failed = false;\n\n constructor(private readonly options: KindStreamParserOptions) {\n this.resolver = isSchemaResolver(options.schemas)\n ? options.schemas\n : {\n get: (kind: string) =>\n (options.schemas as Record<string, KindSchema>)[kind],\n };\n\n this.tokenizer = new JsonStreamTokenizer((token) =>\n this.handleToken(token),\n );\n }\n\n push(chunk: string): void {\n if (this.failed || this.rootDone) return;\n\n try {\n this.tokenizer.push(chunk);\n } catch (error) {\n this.fail(\n error instanceof Error ? error.message : String(error),\n this.tokenizer.position,\n );\n }\n }\n\n end(): void {\n if (this.failed) return;\n\n try {\n this.tokenizer.end();\n } catch (error) {\n this.fail(\n error instanceof Error ? error.message : String(error),\n this.tokenizer.position,\n );\n return;\n }\n\n // The region is over: pending-schema nodes whose cold fetch hasn't\n // answered fall back to raw NOW. This keeps the end-of-region envelope\n // deterministic and byte-identical to the static (no-request) path;\n // upgrade-in-place remains a live-region feature. The data is preserved\n // verbatim on the raw node — zero loss.\n this.resolvePendingSchemasAsRaw();\n\n if (!this.rootDone) {\n this.fail(\n \"Stream ended before the root JSON object was complete.\",\n this.tokenizer.position,\n );\n }\n }\n\n private resolvePendingSchemasAsRaw(): void {\n const at = this.tokenizer.position;\n for (const [kind, paths] of [...this.pendingSchemaPaths]) {\n this.pendingSchemaPaths.delete(kind);\n for (const [pathKey, path] of paths) {\n this.closedPendingPaths.delete(pathKey);\n if (this.rawObjectPaths.has(pathKey)) continue;\n const value =\n this.getLiveObjectValue(path) ??\n this.getFinalizedObjectValue(path) ??\n {};\n this.emitRawObject(\n path,\n safeCopy(value),\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n }\n }\n }\n\n /** True once the root value has closed — the region is fully consumed. */\n get isComplete(): boolean {\n return this.rootDone;\n }\n\n get hasFailed(): boolean {\n return this.failed;\n }\n\n /**\n * Upgrade-in-place: the registry's cold fetch answered. Pending nodes for\n * this kind validate and complete (closed nodes retroactively); a null\n * schema (fetch miss) drops them to raw. Safe to call after end().\n */\n notifySchemaArrived(kind: string, schema: KindSchema | null): void {\n const waiting = this.pendingSchemaPaths.get(kind);\n if (!waiting) return;\n this.pendingSchemaPaths.delete(kind);\n\n if (schema) {\n this.arrivedSchemas.set(kind, schema);\n }\n\n const at = this.tokenizer.position;\n\n for (const [pathKey, path] of waiting) {\n if (this.rawObjectPaths.has(pathKey)) continue;\n\n const value =\n this.getLiveObjectValue(path) ?? this.getFinalizedObjectValue(path);\n\n if (!schema) {\n this.emitRawObject(\n path,\n safeCopy(value ?? {}),\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n this.closedPendingPaths.delete(pathKey);\n continue;\n }\n\n if (this.closedPendingPaths.has(pathKey)) {\n this.closedPendingPaths.delete(pathKey);\n if (value) {\n this.finalizeTypedObject(path, value, at);\n }\n } else {\n // Still streaming — emit the schema-shaped snapshot it was owed.\n this.emitBlockSnapshotForObject(path, at);\n }\n }\n }\n\n private handleToken(token: JsonToken): void {\n if (this.failed) return;\n\n if (this.rootDone) {\n this.fail(\"Unexpected token after complete JSON object.\", token.at);\n return;\n }\n\n if (token.type === \"punct\") {\n this.handlePunctuation(token);\n return;\n }\n\n if (token.type === \"string\") {\n this.handleString(token);\n return;\n }\n\n this.beginScalar(token.value, token.at);\n }\n\n private handleString(token: Extract<JsonToken, { type: \"string\" }>): void {\n const frame = this.currentFrame();\n\n if (\n frame?.kind === \"object\" &&\n (frame.expecting === \"keyOrEnd\" || frame.expecting === \"key\")\n ) {\n this.acceptObjectKey(frame, token.value, token.at);\n return;\n }\n\n this.beginScalar(token.value, token.at);\n }\n\n private handlePunctuation(\n token: Extract<JsonToken, { type: \"punct\" }>,\n ): void {\n switch (token.value) {\n case \"{\":\n this.beginCompound(\"object\", token.at);\n return;\n case \"[\":\n this.beginCompound(\"array\", token.at);\n return;\n case \"}\":\n this.closeCompound(\"object\", token.at);\n return;\n case \"]\":\n this.closeCompound(\"array\", token.at);\n return;\n case \":\":\n this.acceptColon(token.at);\n return;\n case \",\":\n this.acceptComma(token.at);\n return;\n }\n }\n\n private beginCompound(kind: \"object\" | \"array\", at: number): void {\n const value = kind === \"object\" ? {} : [];\n // The frame this value lands in — read BEFORE placeValue/push mutate it.\n const container = this.currentFrame();\n const path = this.placeValue(value, kind, at, false);\n if (!path || this.failed) return;\n\n // OPAQUE DESCENT: a compound under a json-any placement (or inside an\n // already-opaque subtree) is schema-legal unknown structure. Mark it and\n // skip ALL kind machinery below.\n const opaque =\n (container !== undefined &&\n this.opaquePaths.has(this.pathKey(container.path))) ||\n this.isJsonAnyPlacement(path);\n if (opaque) this.opaquePaths.add(this.pathKey(path));\n\n if (kind === \"object\") {\n this.emit({ type: \"object_start\", path, at });\n if (opaque) {\n this.stack.push({\n kind: \"object\",\n path,\n value: value as Record<string, unknown>,\n expecting: \"keyOrEnd\",\n keyCount: 0,\n });\n return;\n }\n this.registerObjectContext(path);\n const pathKey = this.pathKey(path);\n\n this.stack.push({\n kind: \"object\",\n path,\n value: value as Record<string, unknown>,\n expecting: \"keyOrEnd\",\n keyCount: 0,\n });\n\n if (this.inlineSchemas.has(pathKey) || this.recordSchemas.has(pathKey)) {\n return;\n }\n\n // SPECULATIVE DESCENT: commit the predicted kind the instant `{` opens.\n const speculated = this.resolveSpeculativeKind(path);\n if (speculated) {\n this.objectKinds.set(pathKey, speculated);\n this.speculativeKinds.add(pathKey);\n if (path.length === 0) {\n this.rootKind = speculated;\n }\n this.emit({\n type: \"kind_identified\",\n kind: speculated,\n path,\n speculative: true,\n at,\n });\n this.emitBlockSnapshotForObject(path, at);\n return;\n }\n\n this.awaitingKindPaths.add(pathKey);\n this.emit({ type: \"pending_kind\", path, at });\n return;\n }\n\n const parentField = this.parentFieldName(path);\n if (parentField) {\n this.emit({ type: \"array_start\", path, field: parentField, at });\n }\n\n this.stack.push({\n kind: \"array\",\n path,\n value: value as unknown[],\n expecting: \"valueOrEnd\",\n nextIndex: 0,\n });\n }\n\n /**\n * THE JSON-ROOT-KEY SURFACE — `content_ir.kind_surface` rows of type\n * `json_root_key`, live at last (they were inert phantom rows until\n * 2026-08-20).\n *\n * A legacy payload such as `{\"quiz_title\": ...}` carries no `__kind`, but\n * the ONE surface registry knows exactly which kind that root key names —\n * the same lookup the SERVER performs before adapting the payload\n * (`aidream .../processing/blocks/envelope.py`). Consulting it HERE, in the\n * shared parser core, is what makes one place decide it: both hosts — the\n * one-shot `normalizeJsonRegion` (DB reload / reconcile) and the live\n * `openParseSession` (streaming) — build their parser through\n * `createKindStreamParser`, so neither passes an option and neither can\n * drift from the other.\n *\n * Recorded at the first root key; ADOPTED only when the root object closes\n * (`completeTypedObject`). That is the surface registry's complete-only\n * convergence law, and every json_root_key row is `streaming:false` — these\n * legacy shapes are recognised by their whole payload, so speculating\n * mid-stream would flash a kind component over an object that may never\n * satisfy the schema. An explicit `expectedRootKind` (an agent's declared\n * output schema) is stronger context and always wins; an actual `__kind`\n * still wins over both.\n */\n private noteRootSurfaceKind(key: string): void {\n if (key === KIND_KEY) return;\n if (this.options.expectedRootKind) return;\n if (this.rootKind || this.objectKinds.has(this.pathKey([]))) return;\n\n const kind =\n this.resolver.kindForJsonRootKey?.(key) ?? jsonRootKeyLookup?.(key);\n if (!kind) return;\n\n this.rootSurfaceKind = kind;\n\n // Warm a cold schema now so finalize can actually validate against it.\n if (!this.lookupSchema(kind)) {\n this.resolver.request?.(kind);\n }\n }\n\n /**\n * Prediction from the parent schema: object field → declared kind; array\n * item → sole itemKind; root → expectedRootKind. Only when the schema is\n * actually resolvable (a prediction we can't validate against is not a\n * commitment worth making).\n */\n private resolveSpeculativeKind(path: JsonPath): string | null {\n if (path.length === 0) {\n const expected = this.options.expectedRootKind;\n return expected && this.lookupObjectSchema(expected) ? expected : null;\n }\n\n const last = path[path.length - 1];\n\n if (typeof last === \"string\") {\n const fieldSchema = this.resolveParentFieldSchema(path);\n if (\n fieldSchema?.type === \"object\" &&\n this.lookupObjectSchema(fieldSchema.kind)\n ) {\n return fieldSchema.kind;\n }\n return null;\n }\n\n // Array item: owner object → field schema → single-member itemKinds.\n const fieldName = this.parentFieldName(path);\n if (!fieldName) return null;\n\n const ownerPath = path.slice(0, -2);\n const ownerKind = this.getObjectKindForPath(ownerPath);\n if (!ownerKind) return null;\n\n const fieldSchema = this.lookupSchema(ownerKind)?.fields[fieldName];\n const soleItemKind =\n fieldSchema?.type === \"array\" && fieldSchema.itemKinds.length === 1\n ? fieldSchema.itemKinds[0]\n : undefined;\n if (soleItemKind !== undefined && this.lookupObjectSchema(soleItemKind)) {\n return soleItemKind;\n }\n return null;\n }\n\n /**\n * A schema usable for OBJECT speculation/snapshots — root-form kinds\n * (non-object data-only shapes) are never a valid object commitment.\n */\n private lookupObjectSchema(kind: string): KindSchema | undefined {\n const schema = this.lookupSchema(kind);\n return schema && !schema.root ? schema : undefined;\n }\n\n private beginScalar(value: unknown, at: number): void {\n this.placeValue(value, \"scalar\", at, true);\n }\n\n private placeValue(\n value: unknown,\n valueKind: \"object\" | \"array\" | \"scalar\",\n at: number,\n finalizedImmediately: boolean,\n ): JsonPath | null {\n if (this.root === undefined) {\n if (valueKind !== \"object\") {\n this.fail(\"Root value must be a JSON object.\", at);\n return null;\n }\n this.root = value;\n return [];\n }\n\n const parent = this.currentFrame();\n if (!parent) {\n this.fail(\"Unexpected value after root object.\", at);\n return null;\n }\n\n let path: JsonPath;\n let fieldKey: string | undefined;\n\n if (parent.kind === \"object\") {\n if (parent.expecting !== \"value\") {\n this.fail(\n `Unexpected value inside object. Expected ${parent.expecting}.`,\n at,\n );\n return null;\n }\n if (parent.currentKey === undefined) {\n this.fail(\"Internal parser error: missing object key.\", at);\n return null;\n }\n\n fieldKey = parent.currentKey;\n path = [...parent.path, fieldKey];\n\n // Node-scoped validation failure → mark the PARENT raw, keep parsing.\n const placementError = this.validateFieldPlacement(\n parent,\n fieldKey,\n valueKind,\n value,\n );\n if (placementError) {\n this.markNodeRaw(parent.path, parent.value, placementError, at);\n }\n\n parent.value[fieldKey] = value;\n parent.currentKey = undefined;\n parent.expecting = \"commaOrEnd\";\n } else {\n if (parent.expecting !== \"valueOrEnd\" && parent.expecting !== \"value\") {\n this.fail(\n `Unexpected value inside array. Expected ${parent.expecting}.`,\n at,\n );\n return null;\n }\n\n const index = parent.nextIndex;\n path = [...parent.path, index];\n fieldKey = this.parentFieldName(path);\n\n parent.value.push(value);\n parent.nextIndex += 1;\n parent.expecting = \"commaOrEnd\";\n }\n\n if (finalizedImmediately) {\n this.onValueFinalized(path, value, at);\n }\n\n return path;\n }\n\n private acceptObjectKey(frame: ObjectFrame, key: string, at: number): void {\n if (frame.expecting !== \"keyOrEnd\" && frame.expecting !== \"key\") {\n this.fail(`Unexpected object key \"${key}\".`, at);\n return;\n }\n\n if (Object.prototype.hasOwnProperty.call(frame.value, key)) {\n // Node-scoped: this object goes raw (last-wins semantics), parent lives.\n this.markNodeRaw(\n frame.path,\n frame.value,\n `Duplicate key \"${key}\".`,\n at,\n );\n }\n\n if (frame.path.length === 0 && frame.keyCount === 0) {\n this.noteRootSurfaceKind(key);\n }\n\n frame.currentKey = key;\n frame.keyCount += 1;\n frame.expecting = \"colon\";\n }\n\n private acceptColon(at: number): void {\n const frame = this.currentFrame();\n if (!frame || frame.kind !== \"object\" || frame.expecting !== \"colon\") {\n this.fail(\"Unexpected colon.\", at);\n return;\n }\n frame.expecting = \"value\";\n }\n\n private acceptComma(at: number): void {\n const frame = this.currentFrame();\n if (!frame || frame.expecting !== \"commaOrEnd\") {\n this.fail(\"Unexpected comma.\", at);\n return;\n }\n\n if (frame.kind === \"object\") {\n frame.expecting = \"key\";\n } else {\n frame.expecting = \"value\";\n }\n }\n\n private closeCompound(kind: \"object\" | \"array\", at: number): void {\n const frame = this.currentFrame();\n if (!frame || frame.kind !== kind) {\n this.fail(\n `Unexpected closing ${kind === \"object\" ? \"brace\" : \"bracket\"}.`,\n at,\n );\n return;\n }\n\n if (frame.kind === \"object\") {\n if (frame.expecting !== \"keyOrEnd\" && frame.expecting !== \"commaOrEnd\") {\n this.fail(`Object closed too early. Expected ${frame.expecting}.`, at);\n return;\n }\n } else if (\n frame.expecting !== \"valueOrEnd\" &&\n frame.expecting !== \"commaOrEnd\"\n ) {\n this.fail(`Array closed too early. Expected ${frame.expecting}.`, at);\n return;\n }\n\n this.stack.pop();\n if (this.stack.length === 0) {\n this.rootDone = true;\n }\n\n this.onValueFinalized(frame.path, frame.value, at);\n }\n\n /**\n * True when a value placed at `path` sits directly under a json-any\n * placement: a `json`/`json[]` FIELD, or a member of a `record` whose\n * values are `\"json\"`. (Deeper descendants inherit via `opaquePaths`.)\n */\n private isJsonAnyPlacement(path: JsonPath): boolean {\n const fieldSchema = this.resolveParentFieldSchema(path);\n if (fieldSchema && isJsonAnyField(fieldSchema)) return true;\n\n const last = path[path.length - 1];\n if (typeof last === \"string\") {\n const parentKey = this.pathKey(path.slice(0, -1));\n if (this.recordSchemas.get(parentKey) === \"json\") return true;\n }\n return false;\n }\n\n private onValueFinalized(path: JsonPath, value: unknown, at: number): void {\n if (this.failed) return;\n\n const pathKey = this.pathKey(path);\n\n // Opaque subtree: the value is schema-legal by contract; no kind\n // identification, no snapshots, no raw degradation.\n const parentIsOpaque =\n path.length > 0 && this.opaquePaths.has(this.pathKey(path.slice(0, -1)));\n if (this.opaquePaths.has(pathKey)) {\n // The subtree ROOT sits on a typed parent's json-any field — surface it\n // as an ordinary field event (and parent snapshot) like any scalar.\n if (!parentIsOpaque) this.emitFieldIfReady(path, value, at);\n return;\n }\n if (parentIsOpaque) return;\n\n if (this.isKindFieldPath(path)) {\n if (typeof value !== \"string\") {\n return;\n }\n\n this.onKindDiscriminatorArrived(path.slice(0, -1), value, at);\n return;\n }\n\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const objectValue = value as Record<string, unknown>;\n\n const inlineFields = this.inlineSchemas.get(pathKey);\n if (inlineFields) {\n const inlineError = this.validateObjectAgainstFields(\n objectValue,\n inlineFields,\n );\n if (inlineError.error) {\n this.emitRawObject(path, objectValue, inlineError.error, at);\n return;\n }\n this.inlineSchemas.delete(pathKey);\n this.emitSchemaNotices(path, \"inline_object\", inlineError, at);\n this.emit({\n type: \"object_complete\",\n kind: \"inline_object\",\n path,\n value: objectValue,\n at,\n });\n } else {\n const recordValueType = this.recordSchemas.get(pathKey);\n if (recordValueType) {\n const recordError = this.validateRecordObject(\n objectValue,\n recordValueType,\n );\n if (recordError) {\n this.emitRawObject(path, objectValue, recordError, at);\n return;\n }\n this.recordSchemas.delete(pathKey);\n this.emit({\n type: \"object_complete\",\n kind: \"record\",\n path,\n value: objectValue,\n at,\n });\n } else {\n this.completeTypedObject(path, objectValue, at);\n }\n }\n }\n\n this.emitFieldIfReady(path, value, at);\n\n if (path.length === 0) {\n this.completeRoot(value as Record<string, unknown>, at);\n }\n }\n\n /** __kind arrived for an object — confirm speculation, identify, or backtrack. */\n private onKindDiscriminatorArrived(\n objectPath: JsonPath,\n kind: string,\n at: number,\n ): void {\n const objectPathKey = this.pathKey(objectPath);\n\n if (this.rawObjectPaths.has(objectPathKey)) return;\n\n const prior = this.objectKinds.get(objectPathKey);\n const wasSpeculative = this.speculativeKinds.has(objectPathKey);\n\n if (prior !== undefined && wasSpeculative) {\n this.speculativeKinds.delete(objectPathKey);\n\n if (prior === kind) {\n // Confirmation — the commitment was right; nothing to redo.\n this.emitBlockSnapshotForObject(objectPath, at);\n return;\n }\n\n // Contradiction. Allowed sibling kind (multi-member itemKinds) → re-tag.\n if (\n this.lookupSchema(kind) &&\n this.validateArrayItemKind(objectPath, kind) === null &&\n this.speculativeRetagAllowed(objectPath, kind)\n ) {\n this.objectKinds.set(objectPathKey, kind);\n if (objectPath.length === 0) {\n this.rootKind = kind;\n }\n this.emit({ type: \"kind_identified\", kind, path: objectPath, at });\n this.emitBlockSnapshotForObject(objectPath, at);\n return;\n }\n\n // Backtrack: the prediction was wrong and the truth doesn't fit here.\n const live = this.getLiveObjectValue(objectPath);\n this.objectKinds.delete(objectPathKey);\n if (objectPath.length === 0) {\n this.rootKind = \"\";\n }\n this.emitRawObject(\n objectPath,\n safeCopy(live ?? {}),\n `Speculated kind \"${prior}\" contradicted by ${KIND_KEY} \"${kind}\".`,\n at,\n );\n return;\n }\n\n this.objectKinds.set(objectPathKey, kind);\n\n this.emit({\n type: \"kind_identified\",\n kind,\n path: objectPath,\n at,\n });\n\n this.clearKindWait(objectPath, \"identified\", at, kind);\n\n if (objectPath.length === 0) {\n this.rootKind = kind;\n }\n\n // PENDING SCHEMA: kind known, schema cold — hold and fetch.\n if (!this.lookupSchema(kind) && this.resolver.request) {\n this.addPendingSchemaPath(kind, objectPath);\n this.emit({ type: \"pending_schema\", kind, path: objectPath, at });\n this.resolver.request(kind);\n return;\n }\n\n this.flushDeferredFields(objectPath, kind, at);\n this.emitBlockSnapshotForObject(objectPath, at);\n }\n\n /** A contradicted speculation may re-tag only where the new kind is legal. */\n private speculativeRetagAllowed(path: JsonPath, kind: string): boolean {\n if (path.length === 0) {\n // Root prediction came from external context; any registered kind is a\n // legal correction.\n return true;\n }\n\n const last = path[path.length - 1];\n if (typeof last === \"number\") {\n const fieldName = this.parentFieldName(path);\n const ownerKind = this.getObjectKindForPath(path.slice(0, -2));\n if (!fieldName || !ownerKind) return false;\n const fieldSchema = this.lookupSchema(ownerKind)?.fields[fieldName];\n return (\n fieldSchema?.type === \"array\" && fieldSchema.itemKinds.includes(kind)\n );\n }\n\n // Declared object fields pin exactly one kind — a different one is a\n // contradiction, not a re-tag.\n return false;\n }\n\n private addPendingSchemaPath(kind: string, path: JsonPath): void {\n const pathKey = this.pathKey(path);\n const existing = this.pendingSchemaPaths.get(kind) ?? new Map();\n existing.set(pathKey, path);\n this.pendingSchemaPaths.set(kind, existing);\n }\n\n private completeTypedObject(\n path: JsonPath,\n objectValue: Record<string, unknown>,\n at: number,\n ): void {\n const pathKey = this.pathKey(path);\n\n // Already backtracked to raw mid-stream — nothing further to claim.\n if (this.rawObjectPaths.has(pathKey)) return;\n\n const declaredKind = readObjectKind(objectValue);\n const committedKind = this.objectKinds.get(pathKey);\n\n // Closed while its schema fetch is still in flight — defer finalization.\n if (\n committedKind &&\n this.pendingSchemaPaths.get(committedKind)?.has(pathKey)\n ) {\n this.closedPendingPaths.add(pathKey);\n return;\n }\n\n // Speculation that never saw __kind: prediction alone types the object.\n if (!declaredKind && committedKind && this.speculativeKinds.has(pathKey)) {\n this.speculativeKinds.delete(pathKey);\n this.finalizeSpeculatedObject(path, objectValue, committedKind, at);\n return;\n }\n\n // THE JSON-ROOT-KEY SURFACE converges here (see noteRootSurfaceKind).\n // Same posture as any speculation: it NEVER claims a kind it cannot\n // validate — a payload that doesn't satisfy the schema still degrades to\n // raw, but with a notice naming the expected kind and the real contract\n // gap instead of the misleading `Object is missing \"__kind\"`.\n if (\n path.length === 0 &&\n !declaredKind &&\n !committedKind &&\n this.rootSurfaceKind\n ) {\n const surfaceKind = this.rootSurfaceKind;\n this.rootSurfaceKind = null;\n this.objectKinds.set(pathKey, surfaceKind);\n this.rootKind = surfaceKind;\n this.emit({\n type: \"kind_identified\",\n kind: surfaceKind,\n path,\n speculative: true,\n at,\n });\n this.clearKindWait(path, \"identified\", at, surfaceKind);\n this.finalizeSpeculatedObject(path, objectValue, surfaceKind, at);\n return;\n }\n\n if (!declaredKind) {\n this.emitRawObject(\n path,\n objectValue,\n `Object is missing \"${KIND_KEY}\".`,\n at,\n );\n return;\n }\n\n this.speculativeKinds.delete(pathKey);\n this.finalizeTypedObject(path, objectValue, at);\n }\n\n /** Validate + complete an object whose value carries __kind. */\n private finalizeTypedObject(\n path: JsonPath,\n objectValue: Record<string, unknown>,\n at: number,\n ): void {\n const pathKey = this.pathKey(path);\n const kind = readObjectKind(objectValue);\n\n if (!kind) {\n this.emitRawObject(\n path,\n objectValue,\n `Object is missing \"${KIND_KEY}\".`,\n at,\n );\n return;\n }\n\n const schema = this.lookupSchema(kind);\n if (!schema) {\n this.emitRawObject(\n path,\n objectValue,\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n return;\n }\n\n const arrayItemError = this.validateArrayItemKind(path, kind);\n if (arrayItemError) {\n this.emitRawObject(path, objectValue, arrayItemError, at);\n return;\n }\n\n const outcome = this.validateObjectAgainstSchema(objectValue, schema);\n if (outcome.error) {\n this.emitRawObject(path, objectValue, outcome.error, at);\n return;\n }\n\n this.objectKinds.set(pathKey, kind);\n this.emitSchemaNotices(path, kind, outcome, at);\n this.emitBlockSnapshotForObject(path, at, true);\n this.emit({\n type: \"object_complete\",\n kind,\n path,\n value: objectValue,\n at,\n });\n }\n\n /** Validate + complete an object typed purely by parent prediction. */\n private finalizeSpeculatedObject(\n path: JsonPath,\n objectValue: Record<string, unknown>,\n kind: string,\n at: number,\n ): void {\n const schema = this.lookupSchema(kind);\n if (!schema) {\n this.emitRawObject(\n path,\n objectValue,\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n return;\n }\n\n const outcome = this.validateObjectAgainstSchema(\n { ...objectValue, [KIND_KEY]: kind },\n schema,\n );\n if (outcome.error) {\n this.emitRawObject(path, objectValue, outcome.error, at);\n return;\n }\n\n this.emitSchemaNotices(path, kind, outcome, at);\n this.emitBlockSnapshotForObject(path, at, true);\n this.emit({\n type: \"object_complete\",\n kind,\n path,\n value: objectValue,\n at,\n });\n }\n\n private validateArrayItemKind(path: JsonPath, kind: string): string | null {\n const last = path[path.length - 1];\n if (typeof last !== \"number\") return null;\n\n const fieldName = this.parentFieldName(path);\n if (!fieldName) return null;\n\n const ownerObjectPath = path.slice(0, -2);\n const parentKind = this.getObjectKindForPath(ownerObjectPath);\n if (!parentKind) return null;\n\n const fieldSchema = this.lookupSchema(parentKind)?.fields[fieldName];\n if (!fieldSchema || fieldSchema.type !== \"array\") return null;\n\n if (!fieldSchema.itemKinds.includes(kind)) {\n return `Kind \"${kind}\" is not allowed in \"${fieldName}\" on \"${parentKind}\" (expected one of: ${fieldSchema.itemKinds.join(\", \")}).`;\n }\n\n return null;\n }\n\n private completeRoot(rootObject: Record<string, unknown>, at: number): void {\n const pathKey = this.pathKey([]);\n\n if (this.rawObjectPaths.has(pathKey)) {\n this.emit({\n type: \"complete\",\n kind: readObjectKind(rootObject) ?? \"\",\n value: rootObject,\n at,\n });\n return;\n }\n\n // Root closed while its schema fetch is in flight — completeTypedObject\n // already recorded the deferral; report the committed kind.\n const committedKind = this.objectKinds.get(pathKey);\n if (\n committedKind &&\n this.pendingSchemaPaths.get(committedKind)?.has(pathKey)\n ) {\n this.emit({\n type: \"complete\",\n kind: committedKind,\n value: rootObject,\n at,\n });\n return;\n }\n\n this.emit({\n type: \"complete\",\n kind: this.objectKinds.get(pathKey) ?? readObjectKind(rootObject) ?? \"\",\n value: rootObject,\n at,\n });\n }\n\n /** Mark a node raw (node-scoped failure) without killing the stream. */\n private markNodeRaw(\n path: JsonPath,\n liveValue: unknown,\n reason: string,\n at: number,\n ): void {\n const pathKey = this.pathKey(path);\n if (this.rawObjectPaths.has(pathKey)) return;\n\n this.speculativeKinds.delete(pathKey);\n this.emitRawObject(path, safeCopy(liveValue), reason, at);\n }\n\n private emitRawObject(\n path: JsonPath,\n value: unknown,\n reason: string,\n at: number,\n identifiedKind?: string,\n ): void {\n const pathKey = this.pathKey(path);\n if (this.rawObjectPaths.has(pathKey)) return;\n\n this.rawObjectPaths.add(pathKey);\n this.clearKindWait(path, \"raw_fallback\", at, undefined, reason);\n this.emit({\n type: \"raw_object\",\n path,\n value,\n reason,\n ...(identifiedKind !== undefined && { kind: identifiedKind }),\n at,\n });\n }\n\n private clearKindWait(\n path: JsonPath,\n outcome: \"identified\" | \"raw_fallback\",\n at: number,\n kind?: string,\n reason?: string,\n ): void {\n const pathKey = this.pathKey(path);\n if (!this.awaitingKindPaths.has(pathKey)) return;\n\n this.awaitingKindPaths.delete(pathKey);\n this.emit({\n type: \"kind_wait_end\",\n path,\n outcome,\n ...(kind !== undefined && { kind }),\n ...(reason !== undefined && { reason }),\n at,\n });\n }\n\n private emitFieldIfReady(path: JsonPath, value: unknown, at: number): void {\n const fieldKey = this.fieldKeyFromPath(path);\n if (!fieldKey || fieldKey === KIND_KEY) return;\n\n const parentPath = path.slice(0, -1);\n const objectKind = this.getDirectObjectKind(parentPath);\n if (!objectKind) {\n const parentPathKey = this.pathKey(parentPath);\n const deferred = this.deferredFields.get(parentPathKey) ?? [];\n deferred.push({ key: fieldKey, value, at });\n this.deferredFields.set(parentPathKey, deferred);\n return;\n }\n\n // PENDING-SCHEMA EARLY FIELDS: an identified kind whose schema hasn't\n // arrived yet (cold fetch in flight) cannot validate fields — but its\n // early top-level values (title, loading_message, …) are exactly what a\n // loading component needs to render meaningfully DURING the wait. Emit\n // them un-validated; once the schema lands, snapshots take over and the\n // compliant value supersedes anything shown early.\n const schemaResolved = this.lookupSchema(objectKind) !== undefined;\n if (\n schemaResolved &&\n !this.isAllowedSchemaField(parentPath, fieldKey, objectKind)\n ) {\n return;\n }\n\n this.emit({\n type: \"field\",\n kind: objectKind,\n path,\n key: fieldKey,\n value,\n at,\n });\n\n this.emitBlockSnapshotForObject(parentPath, at);\n }\n\n private flushDeferredFields(\n objectPath: JsonPath,\n kind: string,\n at: number,\n ): void {\n const pathKey = this.pathKey(objectPath);\n const deferred = this.deferredFields.get(pathKey);\n if (!deferred) return;\n\n for (const entry of deferred) {\n if (entry.key === KIND_KEY) continue;\n if (!this.isAllowedSchemaField(objectPath, entry.key, kind)) continue;\n\n this.emit({\n type: \"field\",\n kind,\n path: [...objectPath, entry.key],\n key: entry.key,\n value: entry.value,\n at: entry.at,\n });\n }\n\n this.deferredFields.delete(pathKey);\n this.emitBlockSnapshotForObject(objectPath, at);\n }\n\n private getLiveObjectValue(path: JsonPath): Record<string, unknown> | null {\n const pathKey = this.pathKey(path);\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const frame = this.stack[i];\n // `i` ranges over [0, stack.length) by construction, so `frame` is\n // always defined here — unreachable, satisfies noUncheckedIndexedAccess.\n if (!frame) continue;\n if (frame.kind === \"object\" && this.pathKey(frame.path) === pathKey) {\n return frame.value;\n }\n }\n return null;\n }\n\n private emitBlockSnapshotForObject(\n objectPath: JsonPath,\n at: number,\n complete = false,\n ): void {\n const pathKey = this.pathKey(objectPath);\n if (this.rawObjectPaths.has(pathKey)) return;\n\n const kind = this.getDirectObjectKind(objectPath);\n if (!kind) return;\n\n // Root-form kinds have no object field map — nothing to snapshot.\n const schema = this.lookupObjectSchema(kind);\n if (!schema) return;\n\n const partial = complete\n ? this.getFinalizedObjectValue(objectPath)\n : this.getLiveObjectValue(objectPath);\n if (!partial) return;\n\n const { value, residue } = buildCompliantKindSnapshot(schema, partial);\n this.emit({\n type: \"block_snapshot\",\n kind,\n path: objectPath,\n value,\n residue,\n complete,\n at,\n });\n }\n\n /**\n * On `complete` snapshots (and post-close schema upgrades) the frame has\n * already been popped — the finalized value lives in the root tree.\n */\n private getFinalizedObjectValue(\n path: JsonPath,\n ): Record<string, unknown> | null {\n const live = this.getLiveObjectValue(path);\n if (live) return live;\n\n if (path.length === 0) {\n return typeof this.root === \"object\" &&\n this.root !== null &&\n !Array.isArray(this.root)\n ? (this.root as Record<string, unknown>)\n : null;\n }\n\n let cursor: unknown = this.root;\n for (const segment of path) {\n if (cursor === null || typeof cursor !== \"object\") return null;\n cursor = (cursor as Record<string | number, unknown>)[\n segment as string | number\n ];\n }\n return typeof cursor === \"object\" &&\n cursor !== null &&\n !Array.isArray(cursor)\n ? (cursor as Record<string, unknown>)\n : null;\n }\n\n private validateFieldPlacement(\n parent: ObjectFrame,\n fieldKey: string,\n valueKind: \"object\" | \"array\" | \"scalar\",\n value: unknown,\n ): string | null {\n const parentPathKey = this.pathKey(parent.path);\n const inlineFields = this.inlineSchemas.get(parentPathKey);\n if (inlineFields) {\n const fieldSchema = inlineFields[fieldKey];\n if (!fieldSchema) {\n return null;\n }\n return this.validateValueAgainstField(\n fieldSchema,\n valueKind,\n value,\n fieldKey,\n );\n }\n\n const recordValueType = this.recordSchemas.get(parentPathKey);\n if (recordValueType) {\n if (recordValueType === \"json\") return null; // any member value is legal\n if (valueKind !== \"scalar\") {\n return `Record field \"${fieldKey}\" must be a scalar.`;\n }\n return this.validateRecordScalar(recordValueType, value, fieldKey);\n }\n\n return null;\n }\n\n private emitSchemaNotices(\n path: JsonPath,\n kind: string,\n outcome: Pick<SchemaValidationOutcome, \"optionalMissing\" | \"extraFields\">,\n at: number,\n ): void {\n for (const field of outcome.optionalMissing) {\n this.emit({\n type: \"optional_field_missing\",\n kind,\n path,\n field,\n at,\n });\n }\n\n for (const field of outcome.extraFields) {\n this.emit({\n type: \"extra_field\",\n kind,\n path,\n field,\n at,\n });\n }\n }\n\n private validateObjectAgainstSchema(\n objectValue: Record<string, unknown>,\n schema: KindSchema,\n ): SchemaValidationOutcome {\n const optionalMissing: string[] = [];\n const extraFields: string[] = [];\n const emptyOutcome = { optionalMissing, extraFields };\n\n // Root-form kinds are data-only (scalar/array/json roots): a __kind\n // object claiming one is a contradiction, never a trivial pass.\n if (schema.root) {\n return {\n error: `Kind \"${schema.kind}\" has a non-object root form and cannot be a \"${KIND_KEY}\" object.`,\n ...emptyOutcome,\n };\n }\n\n const kind = readObjectKind(objectValue);\n if (kind !== schema.kind) {\n return {\n error: `Object \"${KIND_KEY}\" is \"${kind ?? \"missing\"}\", expected \"${schema.kind}\".`,\n ...emptyOutcome,\n };\n }\n\n for (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Kind \"${schema.kind}\" is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\n if (!(fieldName in objectValue)) {\n optionalMissing.push(fieldName);\n }\n }\n\n for (const [fieldName, fieldValue] of Object.entries(objectValue)) {\n if (fieldName === KIND_KEY) continue;\n\n const fieldSchema = schema.fields[fieldName];\n if (!fieldSchema) {\n extraFields.push(fieldName);\n continue;\n }\n\n const error = this.validateFinalFieldValue(\n fieldSchema,\n fieldValue,\n fieldName,\n schema.kind,\n );\n if (error) {\n return { error, optionalMissing, extraFields };\n }\n }\n\n return { error: null, optionalMissing, extraFields };\n }\n\n private validateFinalFieldValue(\n fieldSchema: FieldSchema,\n value: unknown,\n fieldName: string,\n objectKind: string,\n ): string | null {\n // Any JSON value is legal — including null, objects, arrays.\n if (fieldSchema.type === \"json\") return null;\n\n if (fieldSchema.type === \"json[]\") {\n if (value === null) {\n return fieldSchema.nullable\n ? null\n : `Field \"${fieldName}\" on kind \"${objectKind}\" cannot be null.`;\n }\n if (!Array.isArray(value)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n }\n return null;\n }\n\n if (isScalarArrayType(fieldSchema.type)) {\n if (!Array.isArray(value)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n }\n const itemType = scalarArrayItemType(fieldSchema.type);\n if (!value.every((item) => typeof item === itemType)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array of ${itemType}s.`;\n }\n // Items-enum (string[] option sets): closed sets reject unknown values;\n // `open` sets are advisory — any string item is legal.\n if (\n fieldSchema.type === \"string[]\" &&\n fieldSchema.values !== undefined &&\n !fieldSchema.open\n ) {\n const allowed = fieldSchema.values;\n const bad = value.find(\n (item) => typeof item === \"string\" && !allowed.includes(item),\n );\n if (bad !== undefined) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" items must be one of: ${allowed.join(\", \")}.`;\n }\n }\n return null;\n }\n\n if (fieldSchema.type === \"array\") {\n if (!Array.isArray(value)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n }\n return null;\n }\n\n if (fieldSchema.type === \"object\") {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an object.`;\n }\n const nestedKind = readObjectKind(value as Record<string, unknown>);\n if (nestedKind !== fieldSchema.kind) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be kind \"${fieldSchema.kind}\".`;\n }\n const nestedSchema = this.lookupSchema(fieldSchema.kind);\n if (!nestedSchema) {\n return `Unknown nested kind \"${fieldSchema.kind}\" on field \"${fieldName}\".`;\n }\n return this.validateObjectAgainstSchema(\n value as Record<string, unknown>,\n nestedSchema,\n ).error;\n }\n\n if (fieldSchema.type === \"inline_object\") {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an inline object.`;\n }\n return this.validateObjectAgainstFields(\n value as Record<string, unknown>,\n fieldSchema.fields,\n ).error;\n }\n\n if (fieldSchema.type === \"record\") {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be a record object.`;\n }\n return this.validateRecordObject(\n value as Record<string, unknown>,\n fieldSchema.values,\n );\n }\n\n if (fieldSchema.type === \"union\") {\n // Object union member — the value must be one of the declared kinds.\n if (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n ) {\n const kinds = fieldSchema.kinds ?? [];\n if (kinds.length === 0) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n }\n const memberKind = readObjectKind(value as Record<string, unknown>);\n if (!memberKind || !kinds.includes(memberKind)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be one of kinds: ${kinds.join(\", \")}.`;\n }\n const memberSchema = this.lookupSchema(memberKind);\n if (!memberSchema) {\n return `Unknown union member kind \"${memberKind}\" on field \"${fieldName}\".`;\n }\n return this.validateObjectAgainstSchema(\n value as Record<string, unknown>,\n memberSchema,\n ).error;\n }\n return this.validateScalarField(fieldSchema, value, fieldName);\n }\n\n if (\n fieldSchema.type === \"string\" ||\n fieldSchema.type === \"number\" ||\n fieldSchema.type === \"boolean\" ||\n fieldSchema.type === \"enum\"\n ) {\n return this.validateScalarField(fieldSchema, value, fieldName);\n }\n\n return `Unsupported field schema for \"${fieldName}\".`;\n }\n\n private validateValueAgainstField(\n fieldSchema: FieldSchema,\n valueKind: \"object\" | \"array\" | \"scalar\",\n value: unknown,\n fieldName: string,\n ): string | null {\n if (fieldSchema.type === \"json\") {\n // Any placement is legal for a json-any field.\n return null;\n }\n if (fieldSchema.type === \"array\" || fieldSchema.type === \"json[]\") {\n return valueKind === \"array\"\n ? null\n : `Field \"${fieldName}\" must be an array.`;\n }\n if (\n fieldSchema.type === \"object\" ||\n fieldSchema.type === \"inline_object\"\n ) {\n return valueKind === \"object\"\n ? null\n : `Field \"${fieldName}\" must be an object.`;\n }\n if (fieldSchema.type === \"record\") {\n return valueKind === \"object\"\n ? null\n : `Field \"${fieldName}\" must be a record object.`;\n }\n if (isScalarArrayType(fieldSchema.type)) {\n return valueKind === \"array\"\n ? null\n : `Field \"${fieldName}\" must be an array.`;\n }\n if (fieldSchema.type === \"union\" && (fieldSchema.kinds?.length ?? 0) > 0) {\n // Object union members arrive as objects; scalars stay scalar-checked.\n if (valueKind === \"object\") return null;\n }\n if (valueKind !== \"scalar\") {\n return `Field \"${fieldName}\" must be a scalar.`;\n }\n return this.validateScalarField(fieldSchema, value, fieldName);\n }\n\n private validateScalarField(\n fieldSchema: FieldSchema,\n value: unknown,\n fieldName: string,\n ): string | null {\n if (value === null) {\n return fieldSchema.nullable\n ? null\n : `Field \"${fieldName}\" cannot be null.`;\n }\n\n if (fieldSchema.type === \"enum\") {\n if (typeof value !== \"string\") {\n return `Field \"${fieldName}\" must be a string.`;\n }\n // `open` — the option set is advisory (\"these OR any string\"); any\n // string value is legal. Closed enums reject unknown values.\n if (!fieldSchema.open && !fieldSchema.values.includes(value)) {\n return `Field \"${fieldName}\" must be one of: ${fieldSchema.values.join(\", \")}.`;\n }\n return null;\n }\n\n if (fieldSchema.type === \"union\") {\n const valueType = typeof value;\n if (\n valueType !== \"string\" &&\n valueType !== \"number\" &&\n valueType !== \"boolean\"\n ) {\n return `Field \"${fieldName}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n }\n if (\n !fieldSchema.scalars.includes(\n valueType as \"string\" | \"number\" | \"boolean\",\n )\n ) {\n return `Field \"${fieldName}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n }\n return null;\n }\n\n if (\n fieldSchema.type === \"string\" ||\n fieldSchema.type === \"number\" ||\n fieldSchema.type === \"boolean\"\n ) {\n if (typeof value !== fieldSchema.type) {\n return `Field \"${fieldName}\" must be ${fieldSchema.type}.`;\n }\n // Numeric bounds (inclusive, mirroring JSON Schema minimum/maximum).\n // `step` (multipleOf) stays annotation-level here — float modulo is\n // unreliable; the emitted JSON Schema gate (ajv/Pydantic) owns it.\n if (fieldSchema.type === \"number\" && typeof value === \"number\") {\n if (fieldSchema.min !== undefined && value < fieldSchema.min) {\n return `Field \"${fieldName}\" must be >= ${fieldSchema.min}.`;\n }\n if (fieldSchema.max !== undefined && value > fieldSchema.max) {\n return `Field \"${fieldName}\" must be <= ${fieldSchema.max}.`;\n }\n }\n return null;\n }\n\n return `Field \"${fieldName}\" is not a scalar.`;\n }\n\n private validateRecordScalar(\n valueType: RecordValueType,\n value: unknown,\n fieldName: string,\n ): string | null {\n if (valueType === \"json\") return null;\n if (typeof value !== valueType) {\n return `Record field \"${fieldName}\" must be ${valueType}.`;\n }\n return null;\n }\n\n private validateRecordObject(\n objectValue: Record<string, unknown>,\n valueType: RecordValueType,\n ): string | null {\n if (valueType === \"json\") return null;\n for (const [key, entry] of Object.entries(objectValue)) {\n if (typeof entry !== valueType) {\n return `Record key \"${key}\" must be ${valueType}.`;\n }\n }\n return null;\n }\n\n private validateObjectAgainstFields(\n objectValue: Record<string, unknown>,\n fields: Record<string, FieldSchema>,\n ): SchemaValidationOutcome {\n const optionalMissing: string[] = [];\n const extraFields: string[] = [];\n const emptyOutcome = { optionalMissing, extraFields };\n\n for (const [fieldName, fieldSchema] of Object.entries(fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Inline object is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\n if (!(fieldName in objectValue)) {\n optionalMissing.push(fieldName);\n }\n }\n\n for (const [fieldName, fieldValue] of Object.entries(objectValue)) {\n const fieldSchema = fields[fieldName];\n if (!fieldSchema) {\n extraFields.push(fieldName);\n continue;\n }\n\n const error = this.validateFinalFieldValue(\n fieldSchema,\n fieldValue,\n fieldName,\n \"inline_object\",\n );\n if (error) {\n return { error, optionalMissing, extraFields };\n }\n }\n\n return { error: null, optionalMissing, extraFields };\n }\n\n private registerObjectContext(path: JsonPath): void {\n const fieldSchema = this.resolveParentFieldSchema(path);\n if (!fieldSchema) return;\n\n const pathKey = this.pathKey(path);\n if (fieldSchema.type === \"inline_object\") {\n this.inlineSchemas.set(pathKey, fieldSchema.fields);\n }\n if (fieldSchema.type === \"record\") {\n this.recordSchemas.set(pathKey, fieldSchema.values);\n }\n }\n\n private resolveParentFieldSchema(path: JsonPath): FieldSchema | undefined {\n const fieldKey = this.fieldKeyFromPath(path);\n if (!fieldKey) return undefined;\n\n const parentPath = path.slice(0, -1);\n const parentKind = this.getObjectKindForPath(parentPath);\n if (!parentKind) return undefined;\n\n return this.lookupSchema(parentKind)?.fields[fieldKey];\n }\n\n private getObjectKindForPath(path: JsonPath): string | null {\n return (\n this.objectKinds.get(this.pathKey(path)) ??\n (path.length === 0 ? this.rootKind || null : null)\n );\n }\n\n private getDirectObjectKind(objectPath: JsonPath): string | null {\n if (objectPath.length === 0) {\n return this.rootKind || null;\n }\n return this.objectKinds.get(this.pathKey(objectPath)) ?? null;\n }\n\n private isAllowedSchemaField(\n objectPath: JsonPath,\n fieldKey: string,\n objectKind: string,\n ): boolean {\n const pathKey = this.pathKey(objectPath);\n const inlineFields = this.inlineSchemas.get(pathKey);\n if (inlineFields) {\n return fieldKey in inlineFields;\n }\n\n if (this.recordSchemas.has(pathKey)) {\n return true;\n }\n\n const schema = this.lookupSchema(objectKind);\n return !!schema?.fields[fieldKey];\n }\n\n private parentFieldName(path: JsonPath): string | undefined {\n if (path.length === 0) return undefined;\n const parent = path[path.length - 2];\n return typeof parent === \"string\" ? parent : undefined;\n }\n\n private fieldKeyFromPath(path: JsonPath): string | null {\n const last = path[path.length - 1];\n return typeof last === \"string\" ? last : null;\n }\n\n private isKindFieldPath(path: JsonPath): boolean {\n return path[path.length - 1] === KIND_KEY;\n }\n\n private pathKey(path: JsonPath): string {\n return path.map((segment) => String(segment)).join(\".\");\n }\n\n private lookupSchema(kind: string): KindSchema | undefined {\n return this.resolver.get(kind) ?? this.arrivedSchemas.get(kind);\n }\n\n private fail(reason: string, at: number): void {\n if (this.failed) return;\n this.failed = true;\n this.emit({ type: \"error\", reason, at });\n }\n\n private emit(event: KindStreamEvent): void {\n this.options.onEvent(event);\n }\n\n private currentFrame(): Frame | undefined {\n return this.stack[this.stack.length - 1];\n }\n}\n\nexport function createKindStreamParser(\n options: KindStreamParserOptions,\n): KindStreamParser {\n return new KindStreamParser(options);\n}\n","/**\n * Stable, fast content fingerprint for IR envelopes.\n *\n * Used as the idempotence / cache key: a persisted CanonicalBlockIR is only\n * reused when its fingerprint matches the region source text it claims to\n * represent. Not cryptographic — collision resistance at the \"same message,\n * same block\" scale is all that's required, and it must be synchronous and\n * dependency-free (runs per region on the hot streaming path).\n *\n * FNV-1a 32-bit, applied twice with different seeds and concatenated, so a\n * single 32-bit collision doesn't alias two regions.\n *\n * `createFingerprinter` is the incremental form for live streams: feeding\n * chunks one at a time yields EXACTLY the same fingerprint as\n * `fingerprintText` over the concatenation — sessions never re-hash the\n * whole source per flush.\n */\n\nconst SEED_A = 0x811c9dc5;\nconst SEED_B = 0x01000193;\n\nfunction fnv1aStep(hash: number, input: string): number {\n let h = hash >>> 0;\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i);\n // h *= 16777619 (FNV prime), in 32-bit space without BigInt.\n h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;\n }\n return h >>> 0;\n}\n\nexport interface Fingerprinter {\n push(chunk: string): void;\n /** Fingerprint of everything pushed so far. */\n current(): string;\n}\n\nexport function createFingerprinter(): Fingerprinter {\n let a = SEED_A;\n let b = SEED_B;\n let length = 0;\n\n return {\n push(chunk: string): void {\n a = fnv1aStep(a, chunk);\n b = fnv1aStep(b, chunk);\n length += chunk.length;\n },\n current(): string {\n return `${length.toString(36)}-${a.toString(36)}${b.toString(36)}`;\n },\n };\n}\n\nexport function fingerprintText(source: string): string {\n const hasher = createFingerprinter();\n hasher.push(source);\n return hasher.current();\n}\n","/**\n * Idempotent normalizer — the \"recognizes its own work\" property.\n *\n * THE LAW: anything already carrying a current CanonicalBlockIR envelope is\n * returned BY REFERENCE — zero reprocessing, reference equality holds, React\n * bails out. Only raw text (a detected region's source) is ever parsed, and\n * it is parsed exactly once per fingerprint.\n *\n * `normalizeJsonRegion` is the one-shot mode: the same KindStreamParser that\n * powers live streams, run over a complete region string (DB reloads,\n * reconcile passes), assembled through the same IrTree the live session uses\n * — stream and static output are structurally identical by construction.\n */\n\nimport { fingerprintText } from \"./fingerprint\";\nimport {\n IR_VERSION,\n type CanonicalBlockIR,\n type IrDiscriminator,\n type IrStructuredNode,\n} from \"./ir-types\";\nimport { KIND_KEY, type KindSchema } from \"./kind-schema.types\";\nimport { IrTree } from \"./ir-tree\";\nimport {\n createKindStreamParser,\n type SchemaResolver,\n} from \"./kind-parser\";\n\nexport function isCanonicalBlockIR(value: unknown): value is CanonicalBlockIR {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Partial<CanonicalBlockIR>;\n return (\n candidate.v === IR_VERSION &&\n typeof candidate.fingerprint === \"string\" &&\n typeof candidate.engine === \"string\" &&\n typeof candidate.root === \"object\" &&\n candidate.root !== null &&\n (candidate.root as IrStructuredNode).role === \"structured\"\n );\n}\n\n/**\n * The idempotence fast path: return the existing envelope by reference when\n * it still describes this source text; null means \"parse needed\".\n */\nexport function reuseEnvelopeIfCurrent(\n source: string,\n candidate: unknown,\n): CanonicalBlockIR | null {\n if (!isCanonicalBlockIR(candidate)) return null;\n return candidate.fingerprint === fingerprintText(source) ? candidate : null;\n}\n\nexport interface NormalizeJsonRegionOptions {\n schemas: Record<string, KindSchema> | SchemaResolver;\n /** Known-context root prediction (agent output schema, fence hint). */\n expectedRootKind?: string;\n /**\n * Pass a previously persisted envelope (message metadata, artifact row);\n * when its fingerprint matches, it is returned as-is and nothing parses.\n */\n existing?: unknown;\n}\n\nexport interface CompleteValueEnvelopeOptions {\n /**\n * Wire discriminator recorded on the root node — which syntax established\n * the kind. Defaults to the JSON `__kind` key; XML surfaces converging at\n * region finalize pass `xmlDiscriminator(tag)` so round-trip serializers\n * know the original arrival format.\n */\n discriminator?: IrDiscriminator;\n}\n\n/**\n * Build a resolved, complete envelope directly from an already-structured\n * value (a persisted artifact's `content.data` object, or a completed XML\n * region's strategy output). This is the zero-reprocessing rehydration path:\n * the value IS the reconstructed region value (schema fields + residue extras\n * merged at persist time), so no tokenizer/parser run is needed — the\n * envelope wraps it verbatim. The fingerprint hashes the canonical value\n * serialization, so any two paths producing the same value produce the SAME\n * envelope (stream ≡ static by construction).\n */\nexport function envelopeFromCompleteValue(\n value: Record<string, unknown>,\n kind: string,\n options?: CompleteValueEnvelopeOptions,\n): CanonicalBlockIR {\n return {\n v: IR_VERSION,\n engine: \"fe-kind-parser\",\n fingerprint: fingerprintText(JSON.stringify(value)),\n root: {\n role: \"structured\",\n kind,\n kindState: \"resolved\",\n discriminator: options?.discriminator ?? { format: \"json\", key: KIND_KEY },\n path: [],\n status: \"complete\",\n value,\n residue: null,\n },\n };\n}\n\n/** One-shot: complete region text in → canonical envelope out. */\nexport function normalizeJsonRegion(\n source: string,\n options: NormalizeJsonRegionOptions,\n): CanonicalBlockIR {\n const reused = reuseEnvelopeIfCurrent(source, options.existing);\n if (reused) return reused;\n\n const tree = new IrTree();\n const parser = createKindStreamParser({\n schemas: options.schemas,\n ...(options.expectedRootKind !== undefined && {\n expectedRootKind: options.expectedRootKind,\n }),\n onEvent(event) {\n tree.applyEvent(event);\n },\n });\n parser.push(source);\n parser.end();\n\n return tree.buildEnvelope(fingerprintText(source));\n}\n","/**\n * IrEnvelopeCache — the persisted envelope cache carried on MESSAGE PARTS.\n *\n * Phase 5 (reload without re-parse): at stream end, `assembleMessageParts`\n * stamps every completed JSON region's CanonicalBlockIR onto the committed\n * `CxTextContent.metadata.__ir` as this cache — keyed by fingerprint, because\n * one text part can embed several regions. On reload the splitter's envelope\n * memo consults the seeded cache (`registry/region-envelope-memo.ts`) and\n * reuses the persisted envelope BY REFERENCE via `reuseEnvelopeIfCurrent`\n * (exact fingerprint match of the detected region source) — zero re-parse.\n *\n * Shape discipline: the SAME `__ir` metadata key carries two shapes at two\n * levels, disambiguated by validators that reject each other —\n * - render block metadata → a single CanonicalBlockIR (`isCanonicalBlockIR`)\n * - message part metadata → this cache (`isIrEnvelopeCache`)\n *\n * Pure kernel module: types + validators only. No React/Redux/Supabase.\n */\n\nimport type { CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Cache version. Bump = migration point for persisted part caches. */\nexport const IR_ENVELOPE_CACHE_VERSION = 1 as const;\n\n/**\n * The envelope cache persisted on a message part's `metadata.__ir`.\n * `blocks` maps each region-source fingerprint to its complete envelope.\n */\nexport interface IrEnvelopeCache {\n v: typeof IR_ENVELOPE_CACHE_VERSION;\n blocks: Record<string, CanonicalBlockIR>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Strict whole-cache validation: every entry must be a complete\n * CanonicalBlockIR keyed by its OWN fingerprint. A cache failing this guard\n * came from a buggy or foreign writer — callers surface that loudly and seed\n * nothing (a half-trusted cache is how poisoned envelopes reach renderers).\n */\nexport function isIrEnvelopeCache(value: unknown): value is IrEnvelopeCache {\n if (!isRecord(value)) return false;\n if (value.v !== IR_ENVELOPE_CACHE_VERSION) return false;\n if (!isRecord(value.blocks)) return false;\n\n const entries = Object.entries(value.blocks);\n if (entries.length === 0) return false;\n for (const [fingerprint, envelope] of entries) {\n if (!isCanonicalBlockIR(envelope)) return false;\n if (envelope.fingerprint !== fingerprint) return false;\n if (envelope.root.status !== \"complete\") return false;\n }\n return true;\n}\n\n/**\n * Build the persistable cache from a run's collected envelopes. Only\n * complete envelopes are cacheable (a streaming/error envelope can never be\n * reused — its fingerprint doesn't describe a finished region). Duplicate\n * regions (same fingerprint) collapse to one entry. Engine-agnostic by\n * design: an aidream-built `engine: \"py-block-detector\"` envelope is cached\n * identically to an FE-parsed one. Returns null when nothing qualifies so\n * callers skip the metadata stamp entirely.\n */\nexport function envelopeCacheFromEnvelopes(\n envelopes: readonly CanonicalBlockIR[],\n): IrEnvelopeCache | null {\n let blocks: Record<string, CanonicalBlockIR> | null = null;\n for (const envelope of envelopes) {\n if (!isCanonicalBlockIR(envelope)) continue;\n if (envelope.root.status !== \"complete\") continue;\n (blocks ??= {})[envelope.fingerprint] = envelope;\n }\n return blocks ? { v: IR_ENVELOPE_CACHE_VERSION, blocks } : null;\n}\n","/**\n * PURE envelope ingestion — reading `metadata.__ir` off a block's metadata\n * and gating SERVER-BUILT envelopes at the wire boundary. Twin-safe: no\n * React / Redux / Supabase / host diagnostics — side effects (seeding the\n * region-envelope memo, screaming to the Error Inspector) are injected by\n * the host through `InboundEnvelopeHooks`.\n *\n * The frontend host shell is `redux/render-block-envelope.ts` (binds the\n * hooks to `seedEnvelope` + `captureError`); aidream's Workflow Studio binds\n * its own. Contract: features/content-ir/docs/PYTHON_ENVELOPE_CONTRACT.md.\n */\n\nimport { IR_ENVELOPE_KEY, type CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Read a CanonicalBlockIR envelope off a block's metadata (or anything). */\nexport function readEnvelope(\n metadata: Record<string, unknown> | null | undefined,\n): CanonicalBlockIR | null {\n const candidate = metadata?.[IR_ENVELOPE_KEY];\n return isCanonicalBlockIR(candidate) ? candidate : null;\n}\n\n/** Pure classification of inbound metadata carrying (or not) an envelope. */\nexport type InboundEnvelopeVerdict =\n | {\n /** No `__ir` key — zero-touch pass, same reference back. */\n outcome: \"absent\";\n metadata: Record<string, unknown> | undefined;\n }\n | {\n /** Valid CanonicalBlockIR — same reference back (idempotence law). */\n outcome: \"valid\";\n metadata: Record<string, unknown>;\n envelope: CanonicalBlockIR;\n }\n | {\n /** Malformed/foreign `__ir` — a COPY with `__ir` stripped. */\n outcome: \"malformed\";\n metadata: Record<string, unknown>;\n engine: string;\n raw: unknown;\n };\n\nexport function classifyInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n): InboundEnvelopeVerdict {\n if (!metadata || !(IR_ENVELOPE_KEY in metadata)) {\n return { outcome: \"absent\", metadata: metadata ?? undefined };\n }\n\n const candidate = metadata[IR_ENVELOPE_KEY];\n if (isCanonicalBlockIR(candidate)) {\n return { outcome: \"valid\", metadata, envelope: candidate };\n }\n\n const engine =\n typeof candidate === \"object\" &&\n candidate !== null &&\n typeof (candidate as { engine?: unknown }).engine === \"string\"\n ? (candidate as { engine: string }).engine\n : \"unknown\";\n\n const { [IR_ENVELOPE_KEY]: _dropped, ...rest } = metadata;\n void _dropped;\n return { outcome: \"malformed\", metadata: rest, engine, raw: candidate };\n}\n\n/** Host-injected side effects for the inbound gate. */\nexport interface InboundEnvelopeHooks {\n /** Called with every VALID envelope so later re-splits reuse it by reference. */\n seedEnvelope?: (envelope: CanonicalBlockIR) => void;\n /** Called LOUDLY for every malformed envelope — a bad envelope is a defect. */\n reportMalformed?: (info: {\n blockId: string;\n engine: string;\n raw: unknown;\n }) => void;\n}\n\n/**\n * Ingest guard for SERVER-BUILT envelopes riding `metadata.__ir` on a\n * `render_block` event.\n *\n * - No `__ir` key → the SAME metadata reference back (zero-touch pass).\n * - Valid CanonicalBlockIR → the SAME metadata reference back (reuse-by-\n * reference — the idempotence law) AND `hooks.seedEnvelope` fires so any\n * later re-split of the same region source reuses it instead of parsing.\n * - Malformed/foreign `__ir` → a COPY with `__ir` stripped, plus a loud\n * `hooks.reportMalformed`. A bad envelope must never poison kind routing\n * or the persistence cache; dropping it degrades that block to the\n * ordinary content-driven path, nothing more.\n */\nexport function sanitizeInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n context: { blockId: string },\n hooks: InboundEnvelopeHooks = {},\n): Record<string, unknown> | undefined {\n const verdict = classifyInboundEnvelopeMetadata(metadata);\n if (verdict.outcome === \"valid\") {\n hooks.seedEnvelope?.(verdict.envelope);\n return verdict.metadata;\n }\n if (verdict.outcome === \"malformed\") {\n hooks.reportMalformed?.({\n blockId: context.blockId,\n engine: verdict.engine,\n raw: verdict.raw,\n });\n return verdict.metadata;\n }\n return verdict.metadata;\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n const cloned = structuredClone(envelope.root.value);\n\n const applyExtras = (\n target: Record<string, unknown>,\n extras: Record<string, unknown> | null | undefined,\n ) => {\n if (!extras) return;\n for (const [key, value] of Object.entries(extras)) {\n target[key] = structuredClone(value);\n }\n };\n\n applyExtras(cloned, envelope.root.residue?.extra);\n\n for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n const residue = meta.residue;\n if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n const segments = pathKey.split(\".\");\n let cursor: unknown = cloned;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(segment)];\n } else if (isRecord(cursor)) {\n cursor = cursor[segment];\n } else {\n cursor = undefined;\n break;\n }\n }\n if (isRecord(cursor)) {\n applyExtras(cursor, residue.extra);\n }\n }\n\n return cloned;\n}\n\n/** Deep-remove the __kind discriminator (the parser injects it into snapshots). */\nexport function stripKindDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripKindDeep);\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindDeep(child);\n }\n return out;\n }\n return value;\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 * ParseSession — one live region parse per stream identity.\n *\n * Owns the parser + IrTree OUTSIDE React and Redux. Writers push chunks;\n * N readers subscribe per path (useIrNode / selectors) and are notified on\n * the host's flush cadence — never per token.\n *\n * Notification contract: `write()`/`end()` never notify. The host (demo rAF\n * loop, process-stream's dispatchBatch tick) calls `flushNotify()` to publish\n * dirty paths. Late schema arrivals (registry cold fetch) notify themselves —\n * they happen outside any streaming tick.\n */\n\nimport { IrTree, type IrTreeNode } from \"../core/ir-tree\";\nimport { createFingerprinter, type Fingerprinter } from \"../core/fingerprint\";\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport type { KindSchema } from \"../core/kind-schema.types\";\nimport {\n createKindStreamParser,\n type KindStreamEvent,\n type KindStreamParser,\n type SchemaResolver,\n} from \"../core/kind-parser\";\n\nexport interface ParseSessionOptions {\n identity: string;\n schemas: Record<string, KindSchema> | SchemaResolver;\n expectedRootKind?: string;\n /**\n * Registry hook: subscribe to cold-fetch answers, return an unsubscribe.\n * The session forwards arrivals into the parser (upgrade-in-place) and\n * notifies affected readers immediately.\n */\n onSchemaArrived?: (\n deliver: (kind: string, schema: KindSchema | null) => void,\n ) => () => void;\n /** Observe every parser event (demo inspector, telemetry). */\n onEvent?: (event: KindStreamEvent) => void;\n}\n\ntype Listener = () => void;\n\nexport class ParseSession {\n readonly identity: string;\n\n private readonly parser: KindStreamParser;\n private readonly tree = new IrTree();\n private readonly listeners = new Map<string, Set<Listener>>();\n private readonly anyListeners = new Set<Listener>();\n private readonly unsubscribeSchemaArrivals: (() => void) | null;\n\n private readonly fingerprinter: Fingerprinter = createFingerprinter();\n private ended = false;\n\n constructor(options: ParseSessionOptions) {\n this.identity = options.identity;\n\n this.parser = createKindStreamParser({\n schemas: options.schemas,\n ...(options.expectedRootKind !== undefined && {\n expectedRootKind: options.expectedRootKind,\n }),\n onEvent: (event) => {\n this.tree.applyEvent(event);\n options.onEvent?.(event);\n },\n });\n\n this.unsubscribeSchemaArrivals =\n options.onSchemaArrived?.((kind, schema) => {\n this.parser.notifySchemaArrived(kind, schema);\n // Upgrades happen outside the streaming tick — publish right away.\n this.flushNotify();\n }) ?? null;\n }\n\n /** The single writer's input. Does NOT notify — host flushes on its cadence. */\n write(chunk: string): void {\n this.fingerprinter.push(chunk);\n this.parser.push(chunk);\n }\n\n end(): void {\n if (this.ended) return;\n this.ended = true;\n this.parser.end();\n }\n\n get isEnded(): boolean {\n return this.ended;\n }\n\n get status(): \"streaming\" | \"complete\" | \"error\" {\n return this.tree.status;\n }\n\n getNode(pathKey: string): IrTreeNode | null {\n return this.tree.getNode(pathKey);\n }\n\n listNodes(): IrTreeNode[] {\n return this.tree.listNodes();\n }\n\n isRawPath(pathKey: string): boolean {\n return this.tree.isRawPath(pathKey);\n }\n\n subscribe(pathKey: string, listener: Listener): () => void {\n const set = this.listeners.get(pathKey) ?? new Set();\n set.add(listener);\n this.listeners.set(pathKey, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) this.listeners.delete(pathKey);\n };\n }\n\n /** Structural subscription: fires when ANY node changes (mount lists). */\n subscribeAny(listener: Listener): () => void {\n this.anyListeners.add(listener);\n return () => {\n this.anyListeners.delete(listener);\n };\n }\n\n /** Publish dirty paths to their readers. Host-cadence, coalesced. */\n flushNotify(): void {\n if (!this.tree.hasDirty()) return;\n const dirty = this.tree.drainDirty();\n\n for (const pathKey of dirty) {\n const set = this.listeners.get(pathKey);\n if (!set) continue;\n for (const listener of set) listener();\n }\n\n if (this.anyListeners.size > 0) {\n for (const listener of this.anyListeners) listener();\n }\n }\n\n buildEnvelope(): CanonicalBlockIR {\n return this.tree.buildEnvelope(this.fingerprinter.current());\n }\n\n dispose(): void {\n this.unsubscribeSchemaArrivals?.();\n this.listeners.clear();\n this.anyListeners.clear();\n }\n}\n","/**\n * Session manager — one writer per stream identity, N readers, mechanically\n * enforced: a second `openParseSession` for a live identity THROWS. Readers\n * resolve sessions by identity and never gain write access.\n *\n * Identities: `\"{requestId}:{blockId}\"` for agent-stream regions; any unique\n * string for other hosts (demo runs, notes, one-shot upgrades).\n *\n * Ended sessions stay resolvable for late readers (reload happens via the\n * persisted envelope, but in-session remounts read here) until disposed.\n */\n\nimport { ParseSession, type ParseSessionOptions } from \"./parse-session\";\n\nconst sessions = new Map<string, ParseSession>();\n\nexport function openParseSession(options: ParseSessionOptions): ParseSession {\n const existing = sessions.get(options.identity);\n if (existing && !existing.isEnded) {\n throw new Error(\n `content-ir: a writer is already open for identity \"${options.identity}\". ` +\n \"One writer per stream identity — everyone else reads.\",\n );\n }\n existing?.dispose();\n\n const session = new ParseSession(options);\n sessions.set(options.identity, session);\n return session;\n}\n\nexport function getParseSession(identity: string): ParseSession | null {\n return sessions.get(identity) ?? null;\n}\n\nexport function disposeParseSession(identity: string): void {\n const session = sessions.get(identity);\n if (!session) return;\n session.dispose();\n sessions.delete(identity);\n}\n","/**\n * Kind ↔ content_ir storage shape — the pure, DB-free reshaping between the\n * consumed `KindSchema` and the `content_ir.kind_definition.data` array +\n * `content_ir.kind_edge` rows.\n *\n * Two exact inverses:\n * - `kindSchemaToStorage` — the MIGRATION / write direction: a parsed\n * `KindSchema` (fields Record, targets inline) → an ORDERED `data` array\n * (targets stripped) + externalized `kind_edge` specs (targets, keyed by\n * field PATH). This is what pours `flexible_data` (and future authored\n * kinds) into the canonical tables.\n * - `storageToKindSchema` — the ADAPTER / read direction: `data` array +\n * edges → the same `KindSchema` the parser/emitter consume, re-attaching\n * `object.kind` / `array.itemKinds` from the edges by path.\n *\n * Design invariants (KIND_REGISTRY_STORAGE.md §4):\n * - The `data` element is `FieldSchema` + `name`, MINUS ref targets. Order is\n * intrinsic to the array (fixes the jsonb key-reorder bug).\n * - `kind_edge` is the SINGLE source of truth for kind→kind refs: `object`\n * → one edge (position null); `array` → N edges (union) ordered by\n * `position`. `field_name` is a dot-PATH so a ref nested inside an\n * `inline_object` still gets a distinct, collision-free edge.\n * - `inline_object` is structural: its `fields` is an ordered array, it never\n * becomes a registry row and never carries `__kind`. Its nested refs DO get\n * edges (path-prefixed) so cascade/pinning see every dependency. Its\n * `open` flag persists on the element (losing it is the open-empty-object\n * defect).\n * - `union.kinds` refs externalize to edges exactly like `array.itemKinds`;\n * the stored element keeps `hasKinds: true` so lost edges scream on read.\n * - A NON-OBJECT ROOT (`KindSchema.root`) stores as ONE reserved element\n * named `ROOT_STORAGE_NAME` (\"__root\") — the only element allowed in that\n * kind's `data`. Real fields may never use the reserved name.\n *\n * NO imports of supabase / the DB — this is pure and unit-tested by round-trip\n * (`__tests__/kind-storage-transform.test.ts`).\n */\n\nimport type {\n FieldSchema,\n KindSchema,\n RecordValueType,\n} from \"../core/kind-schema.types\";\n\n/**\n * Reserved `data[]` element name for a NON-OBJECT ROOT form (`KindSchema.root`).\n * A root-form kind stores exactly one element under this name; the read\n * direction reconstructs `{ root }` instead of a field map. The write\n * direction rejects any REAL field with this name — the name is the marker.\n */\nexport const ROOT_STORAGE_NAME = \"__root\";\n\n// ---------------------------------------------------------------------------\n// Stored shapes (mirror content_ir.kind_definition.data + content_ir.kind_edge)\n// ---------------------------------------------------------------------------\n\ntype StoredFieldBase = {\n name: string;\n required?: boolean;\n nullable?: boolean;\n /** Human guidance — mirrors FieldBase.description. */\n description?: string;\n /** Default VALUE (annotation-level) — mirrors FieldBase.default. */\n default?: unknown;\n};\n\n/** One element of `kind_definition.data` — FieldSchema + name, ref targets removed. */\nexport type StoredFieldElement =\n | (StoredFieldBase & { type: \"string\" | \"boolean\" })\n | (StoredFieldBase & {\n type: \"number\";\n min?: number;\n max?: number;\n step?: number;\n })\n | (StoredFieldBase & { type: \"string[]\"; values?: string[]; open?: boolean })\n | (StoredFieldBase & { type: \"number[]\" | \"boolean[]\" })\n | (StoredFieldBase & { type: \"json\" })\n | (StoredFieldBase & { type: \"json[]\" })\n | (StoredFieldBase & { type: \"array\" }) // ref array — targets live in edges\n | (StoredFieldBase & { type: \"object\" }) // single ref — target lives in edges\n | (StoredFieldBase & {\n type: \"inline_object\";\n fields: StoredFieldElement[];\n open?: boolean;\n })\n | (StoredFieldBase & { type: \"record\"; values: RecordValueType })\n | (StoredFieldBase & { type: \"enum\"; values: string[]; open?: boolean })\n | (StoredFieldBase & {\n type: \"union\";\n scalars: Array<\"string\" | \"number\" | \"boolean\">;\n /** Marker that this union's kind refs live in edges (positions ordered). */\n hasKinds?: boolean;\n });\n\n/** One `content_ir.kind_edge` row (child resolved to an id at insert time). */\nexport type KindEdgeSpec = {\n /** Field PATH in the parent's `data` (dot-notation into inline_objects). */\n fieldPath: string;\n /** Child kind slug — insert resolves this to `child_definition_id`. */\n childKind: string;\n /** Union (anyOf) ordering for array refs; null for a single object ref. */\n position: number | null;\n};\n\n/** The full write payload for one kind: the ordered data array + its edges. */\nexport type KindStorageShape = {\n data: StoredFieldElement[];\n edges: KindEdgeSpec[];\n};\n\nexport class KindStorageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"KindStorageError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// WRITE direction: KindSchema → { data[], edges[] }\n// ---------------------------------------------------------------------------\n\nconst PATH_SEP = \".\";\n\nfunction base(field: FieldSchema): StoredFieldBase & { name: string } {\n // name is filled by the caller; required/nullable copied only when true so\n // the stored element stays minimal (matches the emitter's optional reads).\n const out: {\n name: string;\n required?: boolean;\n nullable?: boolean;\n description?: string;\n default?: unknown;\n } = {\n name: \"\",\n };\n if (field.required) out.required = true;\n if (field.nullable) out.nullable = true;\n if (field.description !== undefined) out.description = field.description;\n // `null` is a legitimate default; only ABSENCE is absence.\n if (field.default !== undefined) out.default = field.default;\n return out;\n}\n\n/**\n * Reshape a field into its stored element, pushing any ref targets into `edges`\n * keyed by the field's full path. `path` is the dot-path of THIS field.\n */\nfunction storeField(\n name: string,\n field: FieldSchema,\n path: string,\n edges: KindEdgeSpec[],\n): StoredFieldElement {\n const b = { ...base(field), name };\n\n switch (field.type) {\n case \"string\":\n case \"boolean\":\n case \"number[]\":\n case \"boolean[]\":\n case \"json\":\n case \"json[]\":\n return { ...b, type: field.type };\n\n case \"number\":\n return {\n ...b,\n type: \"number\",\n ...(field.min !== undefined ? { min: field.min } : {}),\n ...(field.max !== undefined ? { max: field.max } : {}),\n ...(field.step !== undefined ? { step: field.step } : {}),\n };\n\n case \"string[]\":\n return {\n ...b,\n type: \"string[]\",\n ...(field.values !== undefined ? { values: [...field.values] } : {}),\n ...(field.open ? { open: true } : {}),\n };\n\n case \"record\":\n return { ...b, type: \"record\", values: field.values };\n\n case \"enum\":\n return {\n ...b,\n type: \"enum\",\n values: [...field.values],\n ...(field.open ? { open: true } : {}),\n };\n\n case \"union\": {\n // Object-union members are refs → edges (positions ordered), exactly\n // like array itemKinds. `hasKinds` marks the element so the read\n // direction can scream about lost edges instead of silently narrowing.\n if (field.kinds && field.kinds.length > 0) {\n field.kinds.forEach((childKind, position) => {\n edges.push({ fieldPath: path, childKind, position });\n });\n return { ...b, type: \"union\", scalars: [...field.scalars], hasKinds: true };\n }\n return { ...b, type: \"union\", scalars: [...field.scalars] };\n }\n\n case \"object\":\n // Single ref → exactly one edge, no position.\n edges.push({ fieldPath: path, childKind: field.kind, position: null });\n return { ...b, type: \"object\" };\n\n case \"array\":\n // Ref array (union) → one edge per itemKind, ordered by position.\n field.itemKinds.forEach((childKind, position) => {\n edges.push({ fieldPath: path, childKind, position });\n });\n return { ...b, type: \"array\" };\n\n case \"inline_object\": {\n // Structural: recurse, prefixing nested paths so nested refs get their\n // own collision-free edges. Field order preserved (Object.entries).\n const fields: StoredFieldElement[] = [];\n for (const [childName, childField] of Object.entries(field.fields)) {\n fields.push(\n storeField(\n childName,\n childField,\n `${path}${PATH_SEP}${childName}`,\n edges,\n ),\n );\n }\n // `open` persists on the element — losing it is the open-empty-object\n // defect (an open {} materializing as CLOSED).\n return field.open\n ? { ...b, type: \"inline_object\", fields, open: true }\n : { ...b, type: \"inline_object\", fields };\n }\n }\n}\n\n/**\n * MIGRATION / write direction. Order of `data` follows `Object.entries(fields)`\n * — the caller supplies the KindSchema whose field order is authoritative\n * (prefer the compiled `system-kinds.ts` order for system kinds during the\n * one-time flexible_data migration; jsonb order is the fallback for user kinds).\n */\nexport function kindSchemaToStorage(schema: KindSchema): KindStorageShape {\n const data: StoredFieldElement[] = [];\n const edges: KindEdgeSpec[] = [];\n\n if (schema.root) {\n // Non-object root form: exactly one reserved element carries the root\n // field; a field map alongside it would be two contradictory shapes.\n if (Object.keys(schema.fields).length > 0) {\n throw new KindStorageError(\n `kind \"${schema.kind}\": root form and a non-empty fields map are mutually exclusive.`,\n );\n }\n data.push(storeField(ROOT_STORAGE_NAME, schema.root, ROOT_STORAGE_NAME, edges));\n return { data, edges };\n }\n\n for (const [name, field] of Object.entries(schema.fields)) {\n if (name === ROOT_STORAGE_NAME) {\n throw new KindStorageError(\n `kind \"${schema.kind}\": field name \"${ROOT_STORAGE_NAME}\" is reserved for the non-object root form.`,\n );\n }\n data.push(storeField(name, field, name, edges));\n }\n return { data, edges };\n}\n\n// ---------------------------------------------------------------------------\n// READ direction: { data[], edges[] } → KindSchema (the adapter's core)\n// ---------------------------------------------------------------------------\n\n/** Index edges by field path for O(1) re-attachment. */\nfunction indexEdges(edges: KindEdgeSpec[]): Map<string, KindEdgeSpec[]> {\n const byPath = new Map<string, KindEdgeSpec[]>();\n for (const edge of edges) {\n const list = byPath.get(edge.fieldPath);\n if (list) list.push(edge);\n else byPath.set(edge.fieldPath, [edge]);\n }\n return byPath;\n}\n\nfunction restoreField(\n element: StoredFieldElement,\n path: string,\n byPath: Map<string, KindEdgeSpec[]>,\n): FieldSchema {\n const b: {\n required?: boolean;\n nullable?: boolean;\n description?: string;\n default?: unknown;\n } = {};\n if (element.required) b.required = true;\n if (element.nullable) b.nullable = true;\n if (element.description !== undefined) b.description = element.description;\n if (element.default !== undefined) b.default = element.default;\n\n switch (element.type) {\n case \"string\":\n case \"boolean\":\n case \"number[]\":\n case \"boolean[]\":\n case \"json\":\n case \"json[]\":\n return { ...b, type: element.type };\n\n case \"number\":\n return {\n ...b,\n type: \"number\",\n ...(element.min !== undefined ? { min: element.min } : {}),\n ...(element.max !== undefined ? { max: element.max } : {}),\n ...(element.step !== undefined ? { step: element.step } : {}),\n };\n\n case \"string[]\":\n return {\n ...b,\n type: \"string[]\",\n ...(element.values !== undefined\n ? { values: [...element.values] }\n : {}),\n ...(element.open ? { open: true } : {}),\n };\n\n case \"record\":\n return { ...b, type: \"record\", values: element.values };\n\n case \"enum\":\n return {\n ...b,\n type: \"enum\",\n values: [...element.values],\n ...(element.open ? { open: true } : {}),\n };\n\n case \"union\": {\n const list = byPath.get(path) ?? [];\n if (element.hasKinds) {\n if (list.length === 0) {\n throw new KindStorageError(\n `union field \"${path}\" declares kind members (hasKinds) but has no edges.`,\n );\n }\n const kinds = [...list]\n .sort((a, z) => (a.position ?? 0) - (z.position ?? 0))\n .map((e) => e.childKind);\n return { ...b, type: \"union\", scalars: [...element.scalars], kinds };\n }\n if (list.length > 0) {\n throw new KindStorageError(\n `union field \"${path}\" has ${list.length} edge(s) but does not declare hasKinds.`,\n );\n }\n return { ...b, type: \"union\", scalars: [...element.scalars] };\n }\n\n case \"object\": {\n const list = byPath.get(path) ?? [];\n if (list.length !== 1) {\n throw new KindStorageError(\n `object field \"${path}\" must have exactly one edge, found ${list.length}.`,\n );\n }\n const [edge] = list;\n if (!edge) {\n throw new KindStorageError(\n `object field \"${path}\" must have exactly one edge, found 0.`,\n );\n }\n return { ...b, type: \"object\", kind: edge.childKind };\n }\n\n case \"array\": {\n const list = byPath.get(path) ?? [];\n if (list.length === 0) {\n throw new KindStorageError(\n `array field \"${path}\" must have at least one edge.`,\n );\n }\n const itemKinds = [...list]\n .sort((a, z) => (a.position ?? 0) - (z.position ?? 0))\n .map((e) => e.childKind);\n return { ...b, type: \"array\", itemKinds };\n }\n\n case \"inline_object\": {\n const fields: Record<string, FieldSchema> = {};\n for (const child of element.fields) {\n fields[child.name] = restoreField(\n child,\n `${path}${PATH_SEP}${child.name}`,\n byPath,\n );\n }\n return element.open\n ? { ...b, type: \"inline_object\", fields, open: true }\n : { ...b, type: \"inline_object\", fields };\n }\n }\n}\n\n/** ADAPTER / read direction — the exact inverse of `kindSchemaToStorage`. */\nexport function storageToKindSchema(\n kind: string,\n shape: KindStorageShape,\n): KindSchema {\n const byPath = indexEdges(shape.edges);\n\n // Non-object root form: the single reserved element IS the root field.\n const [first] = shape.data;\n if (first && first.name === ROOT_STORAGE_NAME) {\n if (shape.data.length !== 1) {\n throw new KindStorageError(\n `kind \"${kind}\": a \"${ROOT_STORAGE_NAME}\" element must be the only data element (found ${shape.data.length}).`,\n );\n }\n return {\n kind,\n fields: {},\n root: restoreField(first, ROOT_STORAGE_NAME, byPath),\n };\n }\n\n const fields: Record<string, FieldSchema> = {};\n for (const element of shape.data) {\n if (element.name === ROOT_STORAGE_NAME) {\n throw new KindStorageError(\n `kind \"${kind}\": \"${ROOT_STORAGE_NAME}\" must be the first and only data element.`,\n );\n }\n fields[element.name] = restoreField(element, element.name, byPath);\n }\n return { kind, fields };\n}\n","/**\n * The dual gate — Arman's law as executable code: a kind is only `is_active`\n * when its canonical `sample_data` passes BOTH systems.\n *\n * 1. Structural (Pydantic): the sample validates against the kind's\n * `emitted_json_schema`. Python's Pydantic is the AUTHORITATIVE owner of\n * this leg, but it reads the SAME materialized `emitted_json_schema` — so\n * this TS ajv check and the Python check validate the same sample against\n * the same schema and agree by construction. A disagreement IS the\n * screamer (a schema Pydantic can't express, or an ajv/Pydantic gap).\n * 2. Render (UI): the sample lights up the kind's real component. TS is the\n * AUTHORITATIVE owner of this leg. It is a PROXY for a DOM render, not a\n * DOM render. Exactly what it checks, and nothing more:\n * · the kind has something to render with (`legacyBlockType` or\n * `component`);\n * · for BRIDGED kinds, `toLegacyServerData(sample)` returns a plain\n * object that is SEMANTICALLY non-empty — see\n * `describeUnrenderableBridgeOutput` for the exact predicate;\n * · BRIDGELESS kinds pass with a recorded caveat — nothing is verified.\n *\n * This catches the 2026-07-04 \"No flashcards available yet\" class: a\n * bridge that returns `undefined`, `{}`, `{language:\"json\"}` (the raw\n * code-region annotation), or an object whose every value is empty.\n *\n * What it does NOT do — stated plainly, because a gate that overclaims is\n * worse than no gate: it does not mount the component, and it cannot know\n * WHICH key carries the payload. `{title:\"Cell Biology\", cards:[]}` passes\n * this leg on `title` alone. Proving the payload key is populated needs\n * per-kind knowledge the gate deliberately does not have; a DOM-level\n * render check is the deeper leg, deferred to an RTL harness.\n *\n * Both legs necessary, neither sufficient. Fail either → `isActive: false` and\n * the caller reports it loudly (Error Inspector, `content-ir`) and holds the\n * row out of production. This module is PURE (deps injected) so it runs in the\n * harness, in CI, and in a browser author-save alike.\n *\n * Ownership split (KIND_REGISTRY_STORAGE.md §2): the caller writes the outcome\n * to the LIVE `content_ir.kind_definition` row's `is_active`; the canonical\n * `_version_capture` trigger snapshots that state into `history.row_versions`\n * (never a post-hoc history mutation).\n */\n\nimport Ajv, { type ValidateFunction } from \"ajv\";\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport { KIND_KEY } from \"../core/kind-schema.types\";\nimport { envelopeFromCompleteValue } from \"../core/normalize\";\n\n/** The facets the render leg needs — a structural subset of KindDefinition. */\nexport interface DualGateDefinition {\n legacyBlockType?: string;\n toLegacyServerData?: (\n envelope: CanonicalBlockIR,\n ) => Record<string, unknown> | undefined;\n component?: { load: () => Promise<unknown> };\n}\n\n/**\n * The render leg's second satisfier: an ACTIVE `role='output'` component\n * resolved from `content_ir.kind_component`. Feed this from\n * `resolveComponent(kind, \"web\", \"output\")`.\n *\n * Why this exists: the render leg originally consulted only the compiled TS\n * registry, so an agent-authored kind whose renderer is a `source='db'` row was\n * structurally unable to pass — `definition` came back null and the gate said\n * \"no component\" about a kind that had a live, working one. Six authored kinds\n * (wine_tasting, employee_card, employee_roster, employee_of_the_week,\n * flashcard_deck, arman_video_prompt) sat permanently inactive because of it.\n *\n * NOT a mirror of `content_ir.evaluate_kind_activation`. The SQL render leg is\n * presence-only — it checks that an active `role='output'` row exists, because\n * SQL cannot execute a TypeScript bridge. THIS leg is strictly stronger: for a\n * compiled kind it also runs `toLegacyServerData` and rejects semantically\n * empty output (the \"No <kind> available\" class).\n *\n * The asymmetry is deliberate and bounded: SQL is the FLOOR (necessary, and\n * sufficient for DB-authored components, which own no bridge), while this leg\n * is the CEILING for compiled kinds. Consequence to know: activating a COMPILED\n * kind whose bridge is broken would pass the RPC and fail here. Compiled kinds\n * are activated by developers through `scripts/shape/activate-kinds.ts`, which\n * runs this leg — the studio control only ever reaches owner-authored kinds.\n * If that ever stops being true, the browser control must run this gate before\n * enabling its button.\n */\nexport interface DualGateResolvedComponent {\n componentKey: string;\n /** The row's own render-trust verdict (R6). Inactive rows do not satisfy. */\n isActive: boolean;\n /** \"bundled\" | \"db\" — reported in the leg detail, never gates the verdict. */\n source: string;\n}\n\nexport interface DualGateInput {\n kind: string;\n /** The canonical instance (kind_definition.sample_data). */\n sample: Record<string, unknown>;\n /** The materialized kind_definition.emitted_json_schema (plain, no __kind). */\n emittedJsonSchema: unknown;\n /** The registry definition for the kind (or null when unregistered). */\n definition: DualGateDefinition | null;\n /**\n * The resolver's `(kind, web, output)` answer, when the caller has one.\n * Omit (or pass null) to check the compiled registry alone.\n */\n resolvedComponent?: DualGateResolvedComponent | null;\n /**\n * True when the kind is a generated data-only contract\n * (`metadata.family` ∈ workflow_io | tool_io | action_io | agent_io).\n * Those are passed between nodes and never rendered, so the render leg is\n * structurally inapplicable — the same `n/a` doctrine the shape doctor uses.\n * Failing them would be noise, and noise erodes the gate.\n */\n dataOnly?: boolean;\n}\n\nexport interface LegResult {\n ok: boolean;\n detail?: string;\n}\n\nexport interface DualGateResult {\n /** True only when BOTH legs pass — the value the caller writes to is_active. */\n isActive: boolean;\n structural: LegResult;\n render: LegResult;\n}\n\n// ajv authoring-strictness is OFF (tolerate provider schema keywords like the\n// recursive \"#\" root ref); DATA strictness comes from the schema itself\n// (additionalProperties:false + required), which ajv enforces during validate.\nconst ajv = new Ajv({ allErrors: true, strict: false });\n\n/**\n * Recursively drop `__kind` from a value. `emitted_json_schema` (and the\n * Pydantic model it mirrors) represent SOURCE data — `__kind` is injected only\n * at emit time — so the sample must be stripped to validate against them. This\n * is what keeps the TS ajv leg and Python's Pydantic leg checking the same\n * thing. (The render leg, by contrast, keeps `__kind` — bridges ignore it.)\n */\nfunction stripKind(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripKind);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (k === KIND_KEY) continue;\n out[k] = stripKind(v);\n }\n return out;\n }\n return value;\n}\n\n/**\n * The structural leg, exported on its own so the shape doctor\n * (`shape-doctor.ts`) RECOMPUTES gate validation with the exact same ajv\n * config + `__kind`-stripping semantics as activation — never a parallel\n * validator. `sample` is `unknown` (not `Record`) because kind examples may\n * legitimately be scalars/arrays (workflow I/O kinds like `text`/`number`).\n */\nexport function validateStructuralLeg(\n sample: unknown,\n emittedJsonSchema: unknown,\n): LegResult {\n let validate: ValidateFunction;\n try {\n validate = ajv.compile(emittedJsonSchema as object);\n } catch (err) {\n return {\n ok: false,\n detail: `emitted_json_schema failed to compile: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n const ok = validate(stripKind(sample));\n if (ok) return { ok: true };\n const errors = (validate.errors ?? [])\n .map((e) => `${e.instancePath || \"(root)\"} ${e.message ?? \"\"}`.trim())\n .slice(0, 8);\n return { ok: false, detail: `sample failed schema: ${errors.join(\"; \")}` };\n}\n\n/**\n * Keys a bridge may emit that carry NO kind content — pure region annotation.\n *\n * `language` is the sole member, and it is here because of a real, shipped bug.\n * `StreamBlockAccumulator.buildBlockData()` emits `data: { language: \"json\" }`\n * for an UNTYPED code region (a bare ```json fence), and\n * `render-block-to-content-block.ts` maps `rb.data` → `block.serverData`. That\n * annotation therefore arrives downstream as a TRUTHY `serverData` holding zero\n * kind data. On 2026-07-04 it reached the flashcards component in place of\n * `cards` and rendered \"No flashcards available yet\" (see `react/kind-route.ts`,\n * which now REPLACES or CLEARS it rather than forwarding it).\n *\n * This list only removes keys from the \"is anything substantive here?\" tally —\n * it never fails a bridge on its own. A kind whose serverData is\n * `{ language: \"python\", code: \"...\" }` still passes, on `code`. Only a bridge\n * whose ENTIRE output is annotation has produced nothing renderable.\n *\n * Add a key here only with evidence that the region-annotation path emits it and\n * that it can never itself be kind content.\n */\nconst SERVER_DATA_ANNOTATION_KEYS: ReadonlySet<string> = new Set([\"language\"]);\n\n/** serverData is JSON-shaped; this only guards pathological/cyclic nesting. */\nconst SUBSTANCE_DEPTH_LIMIT = 8;\n\n/**\n * Is `value` real content that a component could render?\n *\n * string → non-empty after trim (\"\" and \" \" are not content)\n * number → any finite number (0 IS content: `completedItems: 0`)\n * boolean → always (false IS content: `isComplete: false`)\n * array → ≥1 substantive ELEMENT ([] and [\"\"] are not content)\n * object → ≥1 substantive VALUE ({} and {a:\"\"} are not content)\n * null | undefined | NaN | function | symbol | bigint → never content\n *\n * Recursive by design: `{ data: { items: [] } }` is structurally present and\n * semantically empty, and telling those two apart is this leg's entire job.\n */\nfunction isSubstantiveValue(value: unknown, depth = 0): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value === \"boolean\") return true;\n // Deep AND present — stop descending rather than claim it is empty.\n if (depth >= SUBSTANCE_DEPTH_LIMIT) return true;\n if (Array.isArray(value)) {\n return value.some((entry) => isSubstantiveValue(entry, depth + 1));\n }\n if (typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).some((entry) =>\n isSubstantiveValue(entry, depth + 1),\n );\n }\n return false;\n}\n\n/**\n * The render leg's real predicate: why is this bridge output NOT renderable?\n * Returns a specific reason, or `null` when the output is genuinely renderable.\n *\n * `serverData` is typed `unknown` on purpose — the facet's declared return type\n * is a promise the gate must not take on faith; a bridge is ordinary code that\n * can return anything at runtime.\n *\n * Renderable ⇔ a non-null, non-array object with at least one key that is not\n * pure annotation AND whose value is substantive (see `isSubstantiveValue`).\n */\nfunction describeUnrenderableBridgeOutput(serverData: unknown): string | null {\n if (serverData === undefined || serverData === null) {\n return \"bridge returned no serverData (undefined)\";\n }\n if (typeof serverData !== \"object\") {\n return `bridge returned a non-object serverData (${typeof serverData})`;\n }\n if (Array.isArray(serverData)) {\n return \"bridge returned an array, not a serverData record\";\n }\n\n const record = serverData as Record<string, unknown>;\n const keys = Object.keys(record);\n if (keys.length === 0) return \"bridge returned an empty object ({})\";\n\n const contentKeys = keys.filter((key) => !SERVER_DATA_ANNOTATION_KEYS.has(key));\n if (contentKeys.length === 0) {\n return `bridge returned only annotation keys [${keys.join(\", \")}] — that is the raw code-region annotation, not kind data`;\n }\n if (!contentKeys.some((key) => isSubstantiveValue(record[key]))) {\n return `bridge returned serverData whose every content value is empty (keys: ${contentKeys.join(\", \")}) — structurally present, semantically empty`;\n }\n return null;\n}\n\nfunction validateRender(\n kind: string,\n sample: Record<string, unknown>,\n definition: DualGateDefinition | null,\n resolvedComponent?: DualGateResolvedComponent | null,\n dataOnly?: boolean,\n): LegResult {\n // Data-only contract kinds are never rendered — the leg is n/a, not failed.\n if (dataOnly) {\n return {\n ok: true,\n detail:\n \"data-only contract kind — render leg is structurally inapplicable (n/a)\",\n };\n }\n\n // ORDER IS LOAD-BEARING. The compiled-bridge check below is the STRONGEST\n // satisfier — it actually exercises the bridge and catches the\n // \"No <kind> available\" class (the 2026-07-04 flashcards regression). Every\n // compiled kind also owns a `source='bundled'` kind_component row, so\n // checking `resolvedComponent` first would short-circuit past the bridge for\n // exactly the kinds that guard protects, silently disabling it. The resolved\n // component is therefore the LAST resort, not the first.\n if (!definition && !resolvedComponent?.isActive) {\n return {\n ok: false,\n detail: `kind \"${kind}\" has no component (not in the compiled registry, and no active role='output' kind_component row) — nothing to render`,\n };\n }\n\n if (\n definition &&\n !definition.legacyBlockType &&\n !definition.component &&\n !definition.toLegacyServerData &&\n !resolvedComponent?.isActive\n ) {\n return {\n ok: false,\n detail: `kind \"${kind}\" has no component (no compiled legacyBlockType/component facet, and no active role='output' kind_component row) — nothing to render`,\n };\n }\n\n // Bridged kinds: the bridge MUST derive real serverData from the sample.\n if (definition?.toLegacyServerData) {\n let serverData: Record<string, unknown> | undefined;\n try {\n serverData = definition.toLegacyServerData(\n envelopeFromCompleteValue(sample, kind),\n );\n } catch (err) {\n return {\n ok: false,\n detail: `toLegacyServerData threw: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n const problem = describeUnrenderableBridgeOutput(serverData);\n if (problem) {\n return {\n ok: false,\n detail: `${problem} (the \"No ${kind} available\" failure)`,\n };\n }\n return { ok: true };\n }\n\n // Bridgeless kinds parse their own content — the bridge-data proxy can't\n // verify them; a full DOM render check is the deeper leg (deferred to an RTL\n // harness). Pass with a recorded caveat so it's never silently \"fully gated\",\n // and name the satisfier so a reader can tell a compiled bridgeless component\n // from a DB-authored one without re-deriving it.\n const satisfier = definition?.legacyBlockType\n ? `compiled component \"${definition.legacyBlockType}\"`\n : definition?.component\n ? \"compiled component facet\"\n : resolvedComponent\n ? `resolved ${resolvedComponent.source} component \"${resolvedComponent.componentKey}\"`\n : \"component\";\n return {\n ok: true,\n detail: `bridgeless kind — ${satisfier} parses content itself; full DOM render check deferred to an RTL harness`,\n };\n}\n\nexport function runKindDualGate(input: DualGateInput): DualGateResult {\n const structural = validateStructuralLeg(input.sample, input.emittedJsonSchema);\n const render = validateRender(\n input.kind,\n input.sample,\n input.definition,\n input.resolvedComponent,\n input.dataOnly,\n );\n return { isActive: structural.ok && render.ok, structural, render };\n}\n\n/**\n * One-line, Error-Inspector-ready reason for a failed gate (empty string when\n * it passed). The caller feeds this to `captureError({ source: \"content-ir\" })`\n * and sets `is_active=false`.\n */\nexport function describeDualGateFailure(\n kind: string,\n result: DualGateResult,\n): string {\n if (result.isActive) return \"\";\n const parts: string[] = [];\n if (!result.structural.ok) {\n parts.push(`structural(Pydantic): ${result.structural.detail ?? \"failed\"}`);\n }\n if (!result.render.ok) {\n parts.push(`render(UI): ${result.render.detail ?? \"failed\"}`);\n }\n return `kind \"${kind}\" failed the dual gate — ${parts.join(\" | \")}`;\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 const raw = node.type;\n if (typeof raw === \"string\") {\n return { type: raw === \"integer\" ? \"number\" : raw, nullable: false };\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 primary =\n types.find((t) => t !== \"null\") ??\n (nullable && types.length === 1 ? \"null\" : null);\n if (primary === \"integer\") {\n return { type: \"number\", nullable };\n }\n return { type: primary ?? null, nullable };\n }\n if (node.enum) return { type: \"string\", nullable: false };\n if (node.properties) return { type: \"object\", nullable: false };\n if (node.items) return { type: \"array\", nullable: false };\n return { type: null, nullable: false };\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\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 const converted = convertProperty(\n propName,\n propNode,\n memberRequired.has(propName),\n `${path}.${propName}`,\n ctx,\n );\n if (converted) fields[propName] = converted;\n }\n ctx.blockSchemas.push({\n slug: declaredKind,\n label: formatBlockLabel(declaredKind),\n fields,\n });\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 ctx.problems.push({\n severity: \"error\",\n path,\n message: `$ref is not supported (\"${node.$ref}\"). Inline the schema manually.`,\n });\n return null;\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 ctx.problems.push({\n severity: \"error\",\n path,\n message: `$ref inside anyOf/oneOf is not supported (\"${variant.$ref}\"). Inline the schema manually.`,\n });\n unsupported = true;\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 } = resolvePrimaryType(node);\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: {} — 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 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.\",\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 const converted = convertProperty(\n propName,\n propNode,\n itemRequired.has(propName),\n `${path}[].${propName}`,\n ctx,\n );\n if (converted) {\n itemFields[propName] = converted;\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 const converted = convertProperty(\n propName,\n propNode,\n nestedRequired.has(propName),\n `${path}.${propName}`,\n ctx,\n );\n if (converted) {\n nestedFields[propName] = converted;\n }\n }\n\n const referencedKind = readBlockKindFromProperties(node.properties);\n\n if (referencedKind) {\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 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 ctx: ConvertContext = {\n schemaName,\n strict,\n problems: [],\n droppedMetadata: [],\n blockSchemas: [],\n arrayBindings: [],\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 const converted = convertProperty(\n fieldName,\n fieldNode,\n required.has(fieldName),\n fieldName,\n ctx,\n );\n if (converted) {\n convertedFields[fieldName] = converted;\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 * Streaming partial kinds — the TS twin of the Python producer's contract.\n *\n * Cross-repo system-of-record (read it before changing anything here):\n * `common-docs/systems/content-ir-system/STREAMING_PARTIAL_KINDS.md`.\n * Python twin: `aidream/packages/matrx-graph/matrx_graph/content_ir/partial.py`.\n *\n * WHAT THIS IS\n * ------------\n * While a structured region streams, the server announces what it thinks the\n * region IS and what has arrived so far, so the UI fills in progressively\n * instead of showing a spinner until the closing brace. Three events, a CLOSED\n * union on `state`, all riding `metadata.__ir_partial` on the `render_block`\n * events this app already receives:\n *\n * partial — repeatable. A provisional instance whose `root.value` is\n * VALID, CLOSED JSON (the server truncates and closes it, so\n * this side never repairs or guesses). `kindState` is\n * \"speculative\": it MAY still turn out to be something else.\n * superseded — TERMINAL. The region completed as the announced kind; drop\n * the provisional render, the block's own content/`__ir` is the\n * truth.\n * retracted — TERMINAL escape hatch. Detection was wrong; `becameKind` /\n * `becameBlockType` name what it actually is. Never a silent\n * swap.\n *\n * WHY IT IS NOT ON `__ir`\n * -----------------------\n * `__ir` means \"validated against the registered schema\", and a valid `__ir`\n * is SEEDED into the fingerprint-keyed envelope memo. A provisional value\n * there would poison every later read of that region. The two channels never\n * touch: `classifyInboundEnvelopeMetadata` sees `absent` for a partial and\n * passes the metadata through by reference.\n *\n * Pure kernel module: types + validators only. No React, no Redux, no IO.\n * Lives in @ai-matrx/content-ir `wire/` so EVERY UI (Matrix, Workflow Studio,\n * the dashboard, the Chrome extension, the desktop app) reads the channel\n * through the same reader.\n */\n\nimport { IR_VERSION } from \"../core/ir-types\";\nimport type { IrDiscriminator, IrPath, IrResidue } from \"../core/ir-types\";\n\n/** The reserved metadata key carrying every event of this contract. */\nexport const IR_PARTIAL_KEY = \"__ir_partial\" as const;\n\nexport type PartialKindState = \"partial\" | \"superseded\" | \"retracted\";\n\nconst PARTIAL_STATES: readonly PartialKindState[] = [\n \"partial\",\n \"superseded\",\n \"retracted\",\n];\n\n/** The provisional node. Deliberately `IrStructuredNode`-shaped so existing IR readers work. */\nexport interface PartialKindNode {\n role: \"structured\";\n /** The server's DETECTION GUESS for this region. */\n kind: string;\n /** Always \"speculative\" on a partial — pre-recognition, not a resolved kind. */\n kindState: \"speculative\";\n discriminator: IrDiscriminator;\n path: IrPath;\n status: \"streaming\";\n /**\n * Valid, closed JSON carrying its own `__kind`. MAY be missing required\n * schema fields — that is what `partial_unvalidated` in `residue.notices`\n * says. A renderer that throws on an absent field is not partial-ready and\n * must not be routed a provisional value.\n */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n}\n\nexport interface PartialKindEvent {\n v: typeof IR_VERSION;\n engine: string;\n state: \"partial\";\n /** Monotonic PER BLOCK — the ordering / staleness key. Keep the highest. */\n seq: number;\n fingerprint: string;\n root: PartialKindNode;\n}\n\nexport interface SupersededKindEvent {\n v: typeof IR_VERSION;\n engine: string;\n state: \"superseded\";\n seq: number;\n kind: string;\n}\n\nexport interface RetractedKindEvent {\n v: typeof IR_VERSION;\n engine: string;\n state: \"retracted\";\n seq: number;\n /** The kind that was WRONGLY announced. */\n kind: string;\n reason: string;\n /** What it actually is — null when it resolved to no registered kind. */\n becameKind: string | null;\n /** The detector's final block type, so a consumer re-routes without guessing. */\n becameBlockType: string | null;\n}\n\nexport type AnyPartialKindEvent =\n | PartialKindEvent\n | SupersededKindEvent\n | RetractedKindEvent;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readPath(value: unknown): IrPath | null {\n if (!Array.isArray(value)) return null;\n return value.every(\n (segment) => typeof segment === \"string\" || typeof segment === \"number\",\n )\n ? value\n : null;\n}\n\nfunction readDiscriminator(value: unknown): IrDiscriminator | null {\n if (!isRecord(value)) return null;\n if (value.format === \"json\" && value.key === \"__kind\") {\n return { format: \"json\", key: \"__kind\" };\n }\n if (value.format === \"xml\" && typeof value.tag === \"string\") {\n return { format: \"xml\", tag: value.tag };\n }\n if (value.format === \"fence\" && typeof value.language === \"string\") {\n return { format: \"fence\", language: value.language };\n }\n return null;\n}\n\nfunction readResidue(value: unknown): IrResidue | null | undefined {\n if (value === null) return null;\n if (!isRecord(value)) return undefined;\n const extra = value.extra;\n const optionalMissing = value.optionalMissing;\n const notices = value.notices;\n if (extra !== null && !isRecord(extra)) return undefined;\n if (\n optionalMissing !== null &&\n (!Array.isArray(optionalMissing) ||\n !optionalMissing.every((item) => typeof item === \"string\"))\n ) {\n return undefined;\n }\n if (\n notices !== null &&\n (!Array.isArray(notices) ||\n !notices.every(\n (notice) =>\n isRecord(notice) &&\n typeof notice.code === \"string\" &&\n typeof notice.message === \"string\" &&\n (notice.at === undefined || typeof notice.at === \"number\"),\n ))\n ) {\n return undefined;\n }\n return { extra, optionalMissing, notices };\n}\n\n/**\n * Read + validate a partial-channel event off a block's metadata.\n *\n * Returns null for anything malformed, foreign, or of an unknown `state`. A\n * malformed partial degrades to \"no live rendering\" — never to a wrong render,\n * and never to a thrown error inside a stream handler.\n */\nexport function readPartialKindEvent(\n metadata: Record<string, unknown> | null | undefined,\n): AnyPartialKindEvent | null {\n if (!isRecord(metadata)) return null;\n const candidate = metadata[IR_PARTIAL_KEY];\n if (!isRecord(candidate)) return null;\n if (candidate.v !== IR_VERSION) return null;\n if (typeof candidate.engine !== \"string\") return null;\n if (typeof candidate.seq !== \"number\" || !Number.isFinite(candidate.seq)) {\n return null;\n }\n\n const state = candidate.state;\n if (typeof state !== \"string\") return null;\n if (!PARTIAL_STATES.includes(state as PartialKindState)) return null;\n\n if (state === \"partial\") {\n const root = candidate.root;\n if (!isRecord(root)) return null;\n if (root.role !== \"structured\") return null;\n if (root.status !== \"streaming\") return null;\n if (root.kindState !== \"speculative\") return null;\n if (typeof root.kind !== \"string\" || !root.kind) return null;\n if (!isRecord(root.value)) return null;\n const discriminator = readDiscriminator(root.discriminator);\n const path = readPath(root.path);\n const residue = readResidue(root.residue);\n if (discriminator === null || path === null || residue === undefined) {\n return null;\n }\n return {\n v: IR_VERSION,\n engine: candidate.engine,\n state: \"partial\",\n seq: candidate.seq,\n fingerprint:\n typeof candidate.fingerprint === \"string\" ? candidate.fingerprint : \"\",\n root: {\n role: \"structured\",\n kind: root.kind,\n kindState: \"speculative\",\n discriminator,\n path,\n status: \"streaming\",\n value: root.value,\n residue,\n },\n };\n }\n\n if (typeof candidate.kind !== \"string\" || !candidate.kind) return null;\n\n if (state === \"superseded\") {\n return {\n v: IR_VERSION,\n engine: candidate.engine,\n state: \"superseded\",\n seq: candidate.seq,\n kind: candidate.kind,\n };\n }\n\n if (typeof candidate.reason !== \"string\" || !candidate.reason) return null;\n if (\n candidate.becameKind !== null &&\n typeof candidate.becameKind !== \"string\"\n ) {\n return null;\n }\n if (\n candidate.becameBlockType !== null &&\n typeof candidate.becameBlockType !== \"string\"\n ) {\n return null;\n }\n return {\n v: IR_VERSION,\n engine: candidate.engine,\n state: \"retracted\",\n seq: candidate.seq,\n kind: candidate.kind,\n reason: candidate.reason,\n becameKind: candidate.becameKind,\n becameBlockType: candidate.becameBlockType,\n };\n}\n\n/**\n * Ingest guard for the partial channel on a `render_block` event — the twin of\n * `sanitizeInboundEnvelopeMetadata` for `__ir`, and it exists for the same\n * reason: a malformed server event must be stripped at the wire boundary, not\n * carried into Redux where every later reader has to re-decide whether to\n * trust it.\n *\n * - no `__ir_partial` key → the SAME metadata reference back (zero-touch).\n * - valid event → the SAME metadata reference back (idempotence law).\n * - malformed → a COPY with the key stripped, plus a loud `reportMalformed`.\n * Dropping it degrades that block to \"no live rendering\" and nothing more.\n *\n * Pure: the host injects the reporter, exactly like the envelope gate, so\n * aidream's Workflow Studio can bind its own.\n */\nexport function sanitizeInboundPartialKindMetadata(\n metadata: Record<string, unknown> | null | undefined,\n context: { blockId: string },\n hooks: {\n reportMalformed?: (info: { blockId: string; raw: unknown }) => void;\n } = {},\n): Record<string, unknown> | undefined {\n if (!isRecord(metadata) || !(IR_PARTIAL_KEY in metadata)) {\n return metadata ?? undefined;\n }\n if (readPartialKindEvent(metadata) !== null) return metadata;\n\n const { [IR_PARTIAL_KEY]: raw, ...rest } = metadata;\n hooks.reportMalformed?.({ blockId: context.blockId, raw });\n return rest;\n}\n\n/** Narrowing helper: is this the repeatable provisional event? */\nexport function isProvisionalKind(\n event: AnyPartialKindEvent | null,\n): event is PartialKindEvent {\n return event !== null && event.state === \"partial\";\n}\n\n/**\n * Narrowing helper: is this a TERMINAL event? Every partial ends in exactly\n * one of these — that law is what makes a stuck skeleton impossible, so a\n * consumer clears its provisional render here and nowhere else.\n */\nexport function isTerminalKindEvent(\n event: AnyPartialKindEvent | null,\n): event is SupersededKindEvent | RetractedKindEvent {\n return (\n event !== null && (event.state === \"superseded\" || event.state === \"retracted\")\n );\n}\n\n/**\n * Per-block staleness gate. Events can be re-dispatched, replayed on reconnect,\n * or arrive out of order; only a strictly higher `seq` advances a block.\n * Returns null when the event should be ignored.\n *\n * Pure: the caller owns the `seen` map, so this composes into a reducer\n * without hiding module state.\n */\nexport function advancePartialKind(\n seen: Record<string, number>,\n blockId: string,\n event: AnyPartialKindEvent | null,\n): AnyPartialKindEvent | null {\n if (event === null) return null;\n const last = seen[blockId];\n if (last !== undefined && event.seq <= last) return null;\n return event;\n}\n\n/**\n * The per-block staleness GATE, as a stateful closure over `advancePartialKind`\n * — one per stream.\n *\n * `upsertRenderBlock` REPLACES the stored block, so an event landing on a block\n * would regress what the user is looking at (a filled-in quiz snapping back to\n * two questions, or a terminal being undone by a late `partial`). The highest\n * accepted event is CARRIED FORWARD rather than dropped, so it is a no-op on\n * screen instead of a flicker back to the skeleton.\n *\n * 🚨 TWO arrivals must be carried, and the second one is the common case:\n *\n * 1. A STALE key — a replay or an out-of-order event (`seq <= last`).\n * 2. **NO key at all.** The producer clears `__ir_partial` at the top of every\n * stamp and re-adds it only when the value genuinely advanced\n * (`stream_processor.py::_stamp_partial` → `_partials.advanced(...)`), so\n * it is CORRECT for it to omit the key — re-shipping an identical payload\n * every token is pure wire cost. But the block still ships whole, and\n * replacing the stored block with one that has no partial metadata is what\n * made the provisional render vanish between advances: every non-advancing\n * token dropped the user back to the pending skeleton.\n *\n * Carrying stops at the TERMINAL, and only there. After `superseded` /\n * `retracted` the region's truth is its own content or `__ir`, so resurrecting\n * a provisional value would be a lie that outlives its own contract.\n *\n * Returns the metadata to store: the same reference when nothing changed, a\n * copy with the carried-forward event otherwise.\n */\nexport function makePartialKindStalenessGate(): (\n blockId: string,\n metadata: Record<string, unknown> | undefined,\n) => Record<string, unknown> | undefined {\n const seen: Record<string, number> = {};\n const lastAccepted: Record<string, unknown> = {};\n const terminated: Record<string, true> = {};\n\n return (blockId, metadata) => {\n if (!isRecord(metadata)) return metadata;\n\n if (!(IR_PARTIAL_KEY in metadata)) {\n // The producer omitted the key because nothing advanced. Keep showing the\n // last provisional value — unless this block already terminated, in which\n // case its own content/`__ir` is the truth and the partial must stay gone.\n const open = lastAccepted[blockId];\n if (terminated[blockId] || open === undefined) return metadata;\n return { ...metadata, [IR_PARTIAL_KEY]: open };\n }\n // Anything malformed was stripped by `sanitizeInboundPartialKindMetadata`\n // at the same boundary, so a key still present here reads as valid.\n const parsed = readPartialKindEvent(metadata);\n if (parsed === null) return metadata;\n\n if (advancePartialKind(seen, blockId, parsed) !== null) {\n seen[blockId] = parsed.seq;\n // The highest accepted event is always retained — including a TERMINAL,\n // so a replayed `partial` arriving after it is suppressed by the terminal\n // rather than re-opening a closed region.\n lastAccepted[blockId] = metadata[IR_PARTIAL_KEY];\n if (isTerminalKindEvent(parsed)) terminated[blockId] = true;\n return metadata;\n }\n\n const carried = lastAccepted[blockId];\n if (carried === undefined || carried === metadata[IR_PARTIAL_KEY]) {\n return metadata;\n }\n return { ...metadata, [IR_PARTIAL_KEY]: carried };\n };\n}\n","/**\n * Runtime wrapper kinds — the reader, and THE elision gate.\n *\n * Cross-repo contract (system of record):\n * `common-docs/systems/content-ir-system/RUNTIME_WRAPPER_WIRE.md`.\n *\n * A runtime wrapper is the CLOSED set of envelopes that carry instance\n * context with a data kind NESTED inside: `node_outcome` (one settled node\n * invocation) and `run_result` (one terminated run, nesting one\n * `node_outcome` per terminal node). `tool_result` is registered server-side\n * but nothing emits it yet, so nothing here reads it.\n *\n * ## THE ELISION RULE — do it ONCE, here\n *\n * The payload is NEVER sent twice. On the wire `output` is `null` and\n * `output_ref` names the FRAME field that already holds the value:\n *\n * - `\"output\"` → the frame's own `output` (`node_completed.output`,\n * the run row's `output`).\n * - `\"output.<node_id>\"` → that key of the frame's terminal output map.\n *\n * PRESENCE OF `output_ref` IS THE MARKER. A bare `output: null` with NO ref is\n * a legitimately empty payload — never an elision, never something to go\n * looking for. This is the same rule the `__ir` envelope follows with\n * `value_ref`, for the same reason: otherwise every payload is serialized\n * twice per streamed event, twice per durable row and twice per run read.\n *\n * Rehydration happens at the single INGEST GATE (each host's one ingest point —\n * Matrix's workflow-runs reducer, the Studio's inbound-envelope gate),\n * before anything reads the wrapper. No renderer, selector or component ever\n * sees an un-rehydrated wrapper, so none of them may re-implement this.\n *\n * ## Never load-bearing\n *\n * Assembly is a pure read. A malformed wrapper yields `null` and the frame's\n * own fields carry the surface exactly as they did before the wrapper\n * existed — additive on the wire, additive here.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\n\n/** The registered slugs — named once, never spelled by hand elsewhere. */\nexport const NODE_OUTCOME_KIND = \"node_outcome\";\nexport const RUN_RESULT_KIND = \"run_result\";\n\n/** One settled node invocation, with its data kind nested in `output`. */\nexport interface NodeOutcomeWrapper {\n __kind: typeof NODE_OUTCOME_KIND;\n run_id: string;\n node_id: string;\n workflow_id: string | null;\n step: number | null;\n attempt: number;\n status: string;\n started_at: string | null;\n ended_at: string | null;\n /** `0` is a REAL duration, not \"unknown\"; `null` is unknown. */\n duration_ms: number | null;\n /** null = the node declared no kind (a loud defect, never a pass). */\n output_kind: string | null;\n /** null = never checked / degraded — NEVER renderable as a pass. */\n output_kind_ok: boolean | null;\n output_kind_errors: string[] | null;\n /** Rehydrated by {@link rehydrateNodeOutcome}; null = genuinely empty. */\n output: unknown;\n}\n\n/** One terminated run. `outputs` is one wrapper per TERMINAL node. */\nexport interface RunResultWrapper {\n __kind: typeof RUN_RESULT_KIND;\n run_id: string;\n workflow_id: string | null;\n status: string;\n started_at: string | null;\n ended_at: string | null;\n duration_ms: number | null;\n output_kind: string | null;\n output: unknown;\n outputs: NodeOutcomeWrapper[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction str(source: Record<string, unknown>, key: string): string | null {\n const value = source[key];\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction num(source: Record<string, unknown>, key: string): number | null {\n const value = source[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction bool(source: Record<string, unknown>, key: string): boolean | null {\n const value = source[key];\n return typeof value === \"boolean\" ? value : null;\n}\n\nfunction strings(\n source: Record<string, unknown>,\n key: string,\n): string[] | null {\n const value = source[key];\n if (!Array.isArray(value)) return null;\n const out = value.filter((item): item is string => typeof item === \"string\");\n return out.length > 0 ? out : null;\n}\n\n/**\n * Resolve a dotted `output_ref` against the frame that carries the payload.\n * Returns `undefined` when the path does not resolve — the caller keeps\n * `output: null` rather than inventing a value.\n */\nexport function readOutputRef(frame: unknown, ref: string): unknown {\n let cursor: unknown = frame;\n for (const segment of ref.split(\".\")) {\n if (!isRecord(cursor)) return undefined;\n if (!(segment in cursor)) return undefined;\n cursor = cursor[segment];\n }\n return cursor;\n}\n\n/**\n * Read a `node_outcome` off a frame and rehydrate its elided payload.\n *\n * `frame` is the object the wrapper travelled ON — the `node_completed` event,\n * or the run read response for a `run_result`'s children. Returns null for\n * anything that is not a node_outcome (including a missing wrapper: the\n * producer fails OPEN, so an absent wrapper is a normal, non-fatal state).\n */\nexport function rehydrateNodeOutcome(\n raw: unknown,\n frame: unknown,\n): NodeOutcomeWrapper | null {\n if (!isRecord(raw)) return null;\n if (raw[KIND_KEY] !== NODE_OUTCOME_KIND) return null;\n // THE ELISION RULE. Presence of the ref is the marker; a bare null is empty.\n const ref = str(raw, \"output_ref\");\n const resolved = ref === null ? undefined : readOutputRef(frame, ref);\n return readNodeOutcomeValue(\n resolved === undefined ? raw : { ...raw, output: resolved },\n );\n}\n\n/**\n * Read an ALREADY-REHYDRATED node_outcome value into its typed form.\n *\n * Deliberately does NOT require `__kind`: the render bridge strips the root\n * discriminator before the component sees the value, and it does NOT touch\n * `output_ref` — by the time anything renders, the ingest gate has already\n * resolved the elision, and a second resolution attempt against a frame that\n * is no longer there is how a payload goes missing.\n */\nexport function readNodeOutcomeValue(\n raw: unknown,\n): NodeOutcomeWrapper | null {\n if (!isRecord(raw)) return null;\n const runId = str(raw, \"run_id\");\n const nodeId = str(raw, \"node_id\");\n if (!runId || !nodeId) return null;\n const output = raw.output ?? null;\n\n return {\n __kind: NODE_OUTCOME_KIND,\n run_id: runId,\n node_id: nodeId,\n workflow_id: str(raw, \"workflow_id\"),\n step: num(raw, \"step\"),\n attempt: num(raw, \"attempt\") ?? 1,\n status: str(raw, \"status\") ?? \"completed\",\n started_at: str(raw, \"started_at\"),\n ended_at: str(raw, \"ended_at\"),\n duration_ms: num(raw, \"duration_ms\"),\n output_kind: str(raw, \"output_kind\"),\n output_kind_ok: bool(raw, \"output_kind_ok\"),\n output_kind_errors: strings(raw, \"output_kind_errors\"),\n output,\n };\n}\n\n/**\n * Read a `run_result` off the run read response and rehydrate every elided\n * payload — its own, and each terminal node's. Both resolve against the SAME\n * frame (the run read response), which is what `\"output.<node_id>\"` addresses.\n */\nexport function rehydrateRunResult(\n raw: unknown,\n frame: unknown,\n): RunResultWrapper | null {\n if (!isRecord(raw)) return null;\n if (raw[KIND_KEY] !== RUN_RESULT_KIND) return null;\n const ref = str(raw, \"output_ref\");\n const resolved = ref === null ? undefined : readOutputRef(frame, ref);\n const outputs = Array.isArray(raw.outputs)\n ? raw.outputs.map((child) => rehydrateNodeOutcome(child, frame) ?? child)\n : [];\n return readRunResultValue({\n ...raw,\n ...(resolved === undefined ? {} : { output: resolved }),\n outputs,\n });\n}\n\n/**\n * Read an ALREADY-REHYDRATED run_result value into its typed form. Same\n * contract as {@link readNodeOutcomeValue}: no `__kind` requirement, no\n * second elision pass.\n */\nexport function readRunResultValue(raw: unknown): RunResultWrapper | null {\n if (!isRecord(raw)) return null;\n const runId = str(raw, \"run_id\");\n if (!runId) return null;\n const output = raw.output ?? null;\n const outputs = Array.isArray(raw.outputs)\n ? raw.outputs\n .map((child) => readNodeOutcomeValue(child))\n .filter((child): child is NodeOutcomeWrapper => child !== null)\n : [];\n\n return {\n __kind: RUN_RESULT_KIND,\n run_id: runId,\n workflow_id: str(raw, \"workflow_id\"),\n status: str(raw, \"status\") ?? \"completed\",\n started_at: str(raw, \"started_at\"),\n ended_at: str(raw, \"ended_at\"),\n duration_ms: num(raw, \"duration_ms\"),\n output_kind: str(raw, \"output_kind\"),\n output,\n outputs,\n };\n}\n\n/**\n * The kind verdict, as three states the UI must keep distinct.\n *\n * `unchecked` is NEVER a pass: the engine either did not check (no declared\n * kind) or checked and could not conclude. Collapsing it into \"ok\" is how a\n * confidently-rendered document gets shown for a shape nobody verified.\n */\nexport type KindVerdict = \"passed\" | \"failed\" | \"unchecked\";\n\nexport function kindVerdictOf(wrapper: {\n output_kind: string | null;\n output_kind_ok: boolean | null;\n}): KindVerdict {\n if (wrapper.output_kind_ok === true) return \"passed\";\n if (wrapper.output_kind_ok === false) return \"failed\";\n return \"unchecked\";\n}\n","/**\n * The forward composer: given a kind's stored example, produce the EMIT/RENDER\n * payload — `{ \"__kind\": <slug>, ...data }`.\n *\n * Pure kernel module (@ai-matrx/content-ir `wire/`): no React, no Redux, no IO.\n *\n * Since 2026-08-23 stored examples and instances ALREADY carry their marker\n * (`__kind` is part of the data — KINDS_EVERYWHERE_PLAN §4.2), so for a\n * well-formed row this is an IDENTITY with a guarantee attached: the marker is\n * the FIRST key and it names the right slug. It stays because it is also the\n * repair for the legacy rows and hand-typed values that do not, and because a\n * caller wanting a copy-ready render payload should not have to know which it\n * has.\n *\n * Scalars/arrays are returned unchanged — for those kinds the identity travels\n * out of band (`root.kind`); there is no key to add.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\n\nexport function withRootKind(kind: string, value: unknown): unknown {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return { [KIND_KEY]: kind, ...(value as Record<string, unknown>) };\n }\n return value;\n}\n\n/** The copy-ready render payload: pretty JSON of `{ __kind, ...data }`. */\nexport function emitPayloadJson(kind: string, value: unknown): string {\n return JSON.stringify(withRootKind(kind, value), null, 2);\n}\n\n/**\n * The copy-ready render BLOCK — the render payload inside a ```json fence, the\n * exact form an agent emits and a user pastes into a prompt or a message to see\n * it render live.\n */\nexport function emitPayloadFence(kind: string, value: unknown): string {\n return \"```json\\n\" + emitPayloadJson(kind, value) + \"\\n```\";\n}\n"]}
1
+ {"version":3,"sources":["../core/ir-types.ts","../core/kind-schema.types.ts","../core/discriminator.ts","../core/ir-tree.ts","../core/json-tokenizer.ts","../core/kind-snapshot.ts","../core/kind-parser.ts","../core/fingerprint.ts","../core/normalize.ts","../core/envelope-cache.ts","../core/envelope-read.ts","../core/envelope-value.ts","../utils/text-case-converter.ts","../core/schema-structure.ts","../session/parse-session.ts","../session/session-manager.ts","../registry/kind-storage-transform.ts","../registry/kind-dual-gate.ts","../convert/openai-schema-converter.ts","../convert/kind-to-json-schema.ts","../wire/partial-kind.ts","../wire/runtime-wrapper.ts","../wire/emit-payload.ts"],"names":["fieldSchema","isRecord","Ajv","base","type","nullable"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The canonical IR contract for structured content.\n *\n * Every source (live agent stream, DB reload, Python-preprocessed results,\n * notes, any future surface) is normalized into these shapes exactly once.\n * Anything already carrying this IR passes through downstream layers by\n * reference — see `core/normalize.ts` for the idempotence law.\n *\n * This file is pure types + path helpers. No React, no Redux, no IO.\n */\n\n/** Path of a value inside a parsed region (object keys + array indices). */\nexport type IrPath = Array<string | number>;\n\n/** How a node's kind was (or wasn't) established. */\nexport type IrKindState =\n | \"resolved\" // __kind seen + schema validated\n | \"speculative\" // committed from parent itemKinds before __kind arrived\n | \"pending_kind\" // object open, no __kind yet, no speculation possible\n | \"pending_schema\" // kind known, registry cold-fetch in flight\n | \"raw\"; // fell back — plain data, no schema claims\n\n/**\n * System-level zero-data-loss channel. Unknown keys are NEVER merged into a\n * node's `value` (they'd be indistinguishable from schema fields); they are\n * carried here verbatim — Protobuf unknown-fields discipline. Distinct from\n * any domain-level `additionalDetails` field, which is an ordinary schema\n * field inside `value`.\n */\nexport interface IrResidue {\n /** Keys present in the source object but absent from the kind schema. */\n extra: Record<string, unknown> | null;\n /** Optional schema fields the source never provided. */\n optionalMissing: string[] | null;\n /** Structured warnings attached during parsing (speculation backtracks, truncation, …). */\n notices: Array<{ code: string; message: string; at?: number }> | null;\n}\n\n/** Which wire syntax carried the kind discriminator for a node. */\nexport type IrDiscriminator =\n | { format: \"json\"; key: \"__kind\" }\n | { format: \"xml\"; tag: string }\n | { format: \"fence\"; language: string };\n\n/** A schema-shaped structured node. Children live inside `value` (and carry their own metadata via `nodeIndex`). */\nexport interface IrStructuredNode {\n role: \"structured\";\n /** Canonical kind slug. Empty string while pending. */\n kind: string;\n kindState: IrKindState;\n discriminator: IrDiscriminator;\n /** Region-relative path ([] = region root). */\n path: IrPath;\n status: \"streaming\" | \"complete\" | \"error\";\n /** Compliant snapshot: schema fields + __kind ONLY. Unknown keys → residue. */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n}\n\n/** Envelope version. Bump = migration point for persisted envelopes. */\nexport const IR_VERSION = 1 as const;\n\n/** Reserved key carrying the envelope inside RenderBlockPayload.data. */\nexport const IR_ENVELOPE_KEY = \"__ir\" as const;\n\n/**\n * One parsed region's canonical form. Serializable (plain JSON), carried on\n * render blocks (`data.__ir`), persisted on artifacts and message metadata,\n * and — with `engine: \"py-block-detector\"` — accepted pre-built from Python.\n */\nexport interface CanonicalBlockIR {\n v: typeof IR_VERSION;\n /** Provenance: which implementation produced this envelope. */\n engine: \"fe-kind-parser\" | \"py-block-detector\";\n /** Stable hash of the region source text — the idempotence / cache key. */\n fingerprint: string;\n root: IrStructuredNode;\n /**\n * pathKey → node metadata for per-path readers (child kinds under root).\n * Carries each child node's residue — child snapshot values inside\n * `root.value` hold schema fields only, so WITHOUT this the envelope would\n * silently drop nested unknown keys (zero-data-loss violation).\n */\n nodeIndex?: Record<\n string,\n Pick<IrStructuredNode, \"kind\" | \"kindState\" | \"status\"> & {\n residue?: IrResidue | null;\n }\n >;\n}\n\n/** Normalizer output segment: prose stays raw text; structured regions carry IR. */\nexport type CanonicalSegment =\n | { role: \"text\"; content: string }\n | {\n role: \"block\";\n blockType: string;\n content: string;\n ir: CanonicalBlockIR | null;\n };\n\nexport interface CanonicalContent {\n v: typeof IR_VERSION;\n segments: CanonicalSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// Path helpers — the ONE implementation. Consumers must not roll their own.\n// ---------------------------------------------------------------------------\n\nexport function irPathKey(path: IrPath): string {\n return path.map((segment) => String(segment)).join(\".\");\n}\n\nexport function irPathsEqual(left: IrPath, right: IrPath): boolean {\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nexport function irPathIsUnderOrEqual(path: IrPath, prefix: IrPath): boolean {\n if (path.length < prefix.length) return false;\n for (let i = 0; i < prefix.length; i++) {\n if (path[i] !== prefix[i]) return false;\n }\n return true;\n}\n\n/** Human label for a path (\"root\", \"cards[2].front\"). */\nexport function irPathLabel(path: IrPath): string {\n if (path.length === 0) return \"root\";\n\n const parts: string[] = [];\n for (const segment of path) {\n if (typeof segment === \"number\") {\n parts[parts.length - 1] += `[${segment}]`;\n } else {\n parts.push(String(segment));\n }\n }\n return parts.join(\".\");\n}\n\n/** True when every residue channel is empty — normalize to null instead. */\nexport function isEmptyResidue(residue: IrResidue): boolean {\n return (\n (residue.extra === null || Object.keys(residue.extra).length === 0) &&\n (residue.optionalMissing === null ||\n residue.optionalMissing.length === 0) &&\n (residue.notices === null || residue.notices.length === 0)\n );\n}\n","/**\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 * Discriminator abstraction — how a node's kind is established from the wire.\n *\n * The parser never hardcodes \"kind comes from a JSON key\". JSON resolves via\n * the `__kind` field (implemented today); XML resolves via tag → registry\n * alias (Phase 6 — contract only). `IrStructuredNode.discriminator` records\n * which resolver produced each node so renderers and round-trip serializers\n * can reconstruct the original wire format per node.\n */\n\nimport type { IrDiscriminator } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nexport const JSON_DISCRIMINATOR: IrDiscriminator = {\n format: \"json\",\n key: KIND_KEY,\n};\n\nexport function xmlDiscriminator(tag: string): IrDiscriminator {\n return { format: \"xml\", tag };\n}\n\nexport function fenceDiscriminator(language: string): IrDiscriminator {\n return { format: \"fence\", language };\n}\n\n/** What a resolver can say about an opening compound value. */\nexport type KindResolution =\n | { outcome: \"kind\"; kind: string }\n | { outcome: \"pending\" }\n | { outcome: \"raw\"; reason: string };\n","/**\n * IrTree — the immutable, structurally-shared view of a parsed region.\n *\n * Consumes KindStreamEvents and maintains one node per kind-resolved path.\n * Node values are STABILIZED: compound children that are themselves kind\n * nodes are substituted by their current tree value, so an update to\n * cards[7] produces new identities for root → cards → cards[7] ONLY;\n * cards[0..6] keep referential identity and memoized components bail out.\n *\n * Parser frame values are NEVER exposed — everything handed out is rebuilt\n * copy-on-write, so it is safe to freeze (Redux dev-mode immutability) and\n * safe to hold across renders.\n *\n * Both the live ParseSession and the one-shot normalizer build their\n * CanonicalBlockIR from this tree — one assembly path, structurally\n * identical output for stream and static input.\n */\n\nimport { JSON_DISCRIMINATOR } from \"./discriminator\";\nimport {\n IR_VERSION,\n irPathKey,\n type CanonicalBlockIR,\n type IrKindState,\n type IrPath,\n type IrResidue,\n type IrStructuredNode,\n} from \"./ir-types\";\nimport type { KindStreamEvent } from \"./kind-parser\";\n\nexport interface IrTreeNode {\n kind: string;\n kindState: IrKindState;\n path: IrPath;\n pathKey: string;\n /** Stabilized immutable snapshot value (schema fields + __kind only). */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n complete: boolean;\n /** Bumps on every update to this node (incl. child propagation). */\n version: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * THE NO-REGRESSION LAW: a value already shown to a user is never taken away.\n *\n * A degrade (raw_object) or a late completion carries the parser's plain view\n * of a node, which can be POORER than the snapshot the tree already holds —\n * `{}` in the worst case, when a root object closes and its schema was never\n * satisfied. Overwriting with it blanks a fully-rendered block mid-stream.\n * Incoming keys win; prior keys the incoming lacks survive.\n *\n * Returns the merged value plus whether prior fields had to be rescued —\n * a rescue means a real defect upstream and is reported on the envelope as a\n * `degrade_data_rescued` notice, never silently absorbed.\n */\nfunction mergeWithoutLoss(\n prior: unknown,\n incoming: unknown,\n): { value: unknown; rescued: string[] } {\n if (!isRecord(prior)) return { value: incoming, rescued: [] };\n if (!isRecord(incoming)) {\n // A real array/scalar is a genuine shape change, not a blanking; only\n // nothing-at-all loses to what we already have.\n if (incoming !== null && incoming !== undefined) {\n return { value: incoming, rescued: [] };\n }\n return { value: prior, rescued: Object.keys(prior) };\n }\n const rescued = Object.keys(prior).filter((key) => !(key in incoming));\n if (rescued.length === 0) return { value: incoming, rescued };\n return { value: { ...prior, ...incoming }, rescued };\n}\n\nexport class IrTree {\n private readonly nodes = new Map<string, IrTreeNode>();\n private readonly rawPaths = new Map<string, string>(); // pathKey → reason\n private readonly dirty = new Set<string>();\n\n /**\n * KIND PRESERVATION (streaming db/cloud kinds): pathKey → identified kind\n * for nodes whose kind is KNOWN (kind_identified / pending_schema) but that\n * have no snapshot node yet because the schema is still cold-fetching.\n * Without this, the envelope reports `kind: \"\"` for the whole pending\n * window and the render seam can only show raw JSON.\n */\n private readonly identifiedKinds = new Map<string, string>();\n /** pathKeys currently waiting on a schema cold fetch. */\n private readonly pendingSchemaPaths = new Set<string>();\n /**\n * Early top-level scalar fields (title, loading_message, …) captured for\n * identified-but-schema-pending nodes — the loading-component fuel. Scalars\n * only (no live parser references can escape through here). Superseded the\n * moment a real snapshot node exists.\n */\n private readonly earlyFields = new Map<string, Record<string, unknown>>();\n /**\n * pathKey → identified kind preserved through a SCHEMA-AVAILABILITY raw\n * fallback (parser stamped `kind` on the raw_object event). Structural raws\n * (missing __kind, duplicate key, validation failure) never land here.\n */\n private readonly rawKinds = new Map<string, string>();\n\n private regionStatus: \"streaming\" | \"complete\" | \"error\" = \"streaming\";\n private errorReason: string | null = null;\n private rootRawValue: Record<string, unknown> | null = null;\n /** Notices for degrades that tried to erase already-published data. */\n private readonly rescueNotices: NonNullable<IrResidue[\"notices\"]> = [];\n private completedKind = \"\";\n\n get status(): \"streaming\" | \"complete\" | \"error\" {\n return this.regionStatus;\n }\n\n applyEvent(event: KindStreamEvent): void {\n switch (event.type) {\n case \"kind_identified\": {\n this.identifiedKinds.set(irPathKey(event.path), event.kind);\n this.dirty.add(irPathKey(event.path));\n return;\n }\n case \"pending_schema\": {\n const pathKey = irPathKey(event.path);\n this.identifiedKinds.set(pathKey, event.kind);\n this.pendingSchemaPaths.add(pathKey);\n this.dirty.add(pathKey);\n return;\n }\n case \"field\": {\n // Only meaningful pre-schema: an identified node with NO snapshot yet\n // accumulates its early scalar values for the loading component.\n const parentKey = irPathKey(event.path.slice(0, -1));\n if (this.nodes.has(parentKey)) return;\n if (!this.identifiedKinds.has(parentKey)) return;\n const v = event.value;\n if (v !== null && typeof v === \"object\") return; // scalars only\n const bucket = this.earlyFields.get(parentKey) ?? {};\n bucket[event.key] = v;\n this.earlyFields.set(parentKey, bucket);\n this.dirty.add(parentKey);\n return;\n }\n case \"block_snapshot\": {\n const pathKey = irPathKey(event.path);\n this.pendingSchemaPaths.delete(pathKey);\n this.earlyFields.delete(pathKey);\n this.upsertNode(event.path, {\n kind: event.kind,\n value: event.value,\n residue: event.residue,\n complete: event.complete,\n });\n return;\n }\n case \"raw_object\": {\n const pathKey = irPathKey(event.path);\n this.pendingSchemaPaths.delete(pathKey);\n this.earlyFields.delete(pathKey);\n if (event.kind) this.rawKinds.set(pathKey, event.kind);\n this.markRaw(event.path, event.reason, event.value);\n return;\n }\n case \"complete\": {\n this.regionStatus = this.errorReason ? \"error\" : \"complete\";\n this.completedKind = event.kind;\n if (this.rawPaths.has(\"\") && isRecord(event.value)) {\n // The completion value is the parser's full view of the region — it\n // fills a raw root, and merges with (never regresses) one a mid-\n // stream degrade already wrote.\n const merged = mergeWithoutLoss(this.rootRawValue, event.value);\n this.recordRescue(\"\", \"complete\", merged.rescued);\n if (isRecord(merged.value)) this.rootRawValue = merged.value;\n }\n this.dirty.add(\"\");\n return;\n }\n case \"error\": {\n this.errorReason = event.reason;\n this.regionStatus = \"error\";\n this.dirty.add(\"\");\n return;\n }\n default:\n return;\n }\n }\n\n getNode(pathKey: string): IrTreeNode | null {\n return this.nodes.get(pathKey) ?? null;\n }\n\n listNodes(): IrTreeNode[] {\n return [...this.nodes.values()];\n }\n\n isRawPath(pathKey: string): boolean {\n return this.rawPaths.has(pathKey);\n }\n\n /** Dirty pathKeys since the last drain — the flush/notify unit. */\n drainDirty(): string[] {\n const drained = [...this.dirty];\n this.dirty.clear();\n return drained;\n }\n\n hasDirty(): boolean {\n return this.dirty.size > 0;\n }\n\n // -------------------------------------------------------------------------\n\n private upsertNode(\n path: IrPath,\n payload: {\n kind: string;\n value: Record<string, unknown>;\n residue: IrResidue | null;\n complete: boolean;\n },\n ): void {\n const pathKey = irPathKey(path);\n if (this.rawPaths.has(pathKey)) return;\n\n const stabilized = this.stabilizeValue(\n payload.value,\n path,\n pathKey,\n ) as Record<string, unknown>;\n\n const prior = this.nodes.get(pathKey);\n const node: IrTreeNode = {\n kind: payload.kind,\n kindState: payload.complete\n ? \"resolved\"\n : (prior?.kindState ?? \"resolved\"),\n path,\n pathKey,\n value: stabilized,\n residue: payload.residue,\n complete: payload.complete,\n version: (prior?.version ?? 0) + 1,\n };\n this.nodes.set(pathKey, node);\n this.dirty.add(pathKey);\n\n this.propagateToAncestors(path, node.value);\n }\n\n /**\n * Substitute kind-node children with their current tree values so sibling\n * identities are stable; deep-copy everything else so no live parser\n * reference ever escapes.\n */\n private stabilizeValue(\n value: unknown,\n path: IrPath,\n applyingPathKey: string,\n ): unknown {\n if (Array.isArray(value)) {\n return value.map((item, index) =>\n this.stabilizeValue(item, [...path, index], applyingPathKey),\n );\n }\n if (isRecord(value)) {\n const pathKey = irPathKey(path);\n if (pathKey !== applyingPathKey) {\n const childNode = this.nodes.get(pathKey);\n if (childNode) return childNode.value;\n }\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n out[key] = this.stabilizeValue(child, [...path, key], applyingPathKey);\n }\n return out;\n }\n return value;\n }\n\n /**\n * COW spine rebuild: replace the child's slot in each ancestor kind-node's\n * value, shallow-copying only the containers along the way. Siblings keep\n * identity; every ancestor gets a new value identity + version bump.\n */\n private propagateToAncestors(childPath: IrPath, childValue: unknown): void {\n let currentPath = childPath;\n let currentValue: unknown = childValue;\n\n while (currentPath.length > 0) {\n const ancestor = this.findNearestAncestorNode(currentPath);\n if (!ancestor) return;\n\n const relative = currentPath.slice(ancestor.path.length);\n const rebuilt = this.cloneAlong(ancestor.value, relative, currentValue);\n if (rebuilt === ancestor.value) return;\n\n const updated: IrTreeNode = {\n ...ancestor,\n value: rebuilt as Record<string, unknown>,\n version: ancestor.version + 1,\n };\n this.nodes.set(ancestor.pathKey, updated);\n this.dirty.add(ancestor.pathKey);\n\n currentPath = ancestor.path;\n currentValue = updated.value;\n }\n }\n\n private findNearestAncestorNode(path: IrPath): IrTreeNode | null {\n for (let len = path.length - 1; len >= 0; len--) {\n const node = this.nodes.get(irPathKey(path.slice(0, len)));\n if (node) return node;\n }\n return null;\n }\n\n private cloneAlong(\n container: unknown,\n relative: IrPath,\n leaf: unknown,\n ): unknown {\n if (relative.length === 0) return leaf;\n\n const [head, ...rest] = relative;\n\n if (Array.isArray(container)) {\n const index = typeof head === \"number\" ? head : Number(head);\n const copy = container.slice();\n // Growing the array (a child that hasn't hit the parent snapshot yet).\n while (copy.length <= index) copy.push(undefined);\n copy[index] = this.cloneAlong(container[index], rest, leaf);\n return copy;\n }\n\n if (isRecord(container)) {\n const key = String(head);\n return {\n ...container,\n [key]: this.cloneAlong(container[key], rest, leaf),\n };\n }\n\n // The slot's container hasn't arrived in the ancestor value yet — build it.\n const built: unknown =\n typeof head === \"number\"\n ? this.cloneAlong([], relative, leaf)\n : this.cloneAlong({}, relative, leaf);\n return built;\n }\n\n private markRaw(path: IrPath, reason: string, value: unknown): void {\n const pathKey = irPathKey(path);\n // NO REGRESSION: the degrade must not blank the snapshot this node already\n // published. Its plain data still belongs to its ancestors — zero loss.\n const prior =\n path.length === 0\n ? (this.nodes.get(\"\")?.value ?? this.rootRawValue)\n : this.nodes.get(pathKey)?.value;\n const merged = mergeWithoutLoss(prior, value);\n this.recordRescue(pathKey, reason, merged.rescued);\n\n this.rawPaths.set(pathKey, reason);\n this.nodes.delete(pathKey);\n this.dirty.add(pathKey);\n\n if (path.length === 0) {\n if (isRecord(merged.value)) this.rootRawValue = merged.value;\n return;\n }\n\n this.propagateToAncestors(path, merged.value);\n }\n\n /**\n * A rescue means a degrade tried to erase data a user could already see —\n * an upstream defect. It rides the envelope as a notice so it surfaces in the\n * Error Inspector instead of being silently absorbed (`core/` is a pure\n * kernel: no console, no capture — the notice IS the alarm).\n */\n private recordRescue(\n pathKey: string,\n reason: string,\n rescued: string[],\n ): void {\n if (rescued.length === 0) return;\n this.rescueNotices.push({\n code: \"degrade_data_rescued\",\n message: `degrade (${reason}) at path \"${pathKey || \"<root>\"}\" would have dropped: ${rescued.join(\", \")}`,\n });\n }\n\n /**\n * Assemble the canonical envelope. ONE code path for stream + one-shot.\n * Callers supply the fingerprint (one-shot hashes the source; live sessions\n * keep an incremental hasher so no per-flush re-hash happens).\n */\n buildEnvelope(fingerprint: string): CanonicalBlockIR {\n const rootNode = this.nodes.get(\"\");\n const rootRawReason = this.rawPaths.get(\"\") ?? null;\n\n const notices: NonNullable<IrResidue[\"notices\"]> = [];\n if (this.errorReason) {\n notices.push({ code: \"parse_error\", message: this.errorReason });\n }\n if (rootRawReason) {\n notices.push({ code: \"raw_fallback\", message: rootRawReason });\n }\n notices.push(...this.rescueNotices);\n\n const baseResidue = rootNode?.residue ?? null;\n let residue = baseResidue;\n if (notices.length > 0) {\n residue = {\n extra: baseResidue?.extra ?? null,\n optionalMissing: baseResidue?.optionalMissing ?? null,\n notices: [...(baseResidue?.notices ?? []), ...notices],\n };\n }\n\n const isRaw = rootRawReason !== null;\n\n // KIND PRESERVATION: a root that degraded raw purely because its schema\n // never arrived (rawKinds) keeps its identified kind — the render seam\n // routes it to the generic viewer / db component instead of raw JSON, and\n // a late schema/component arrival can upgrade it via repaint. Structural\n // raws (no entry in rawKinds) stay kind-less exactly as before. While\n // STREAMING with a known-but-cold kind (no node yet), the identified kind\n // + early scalar fields surface so the loading layer can render.\n const identifiedKind = this.identifiedKinds.get(\"\") ?? \"\";\n const rootKind = isRaw\n ? (this.rawKinds.get(\"\") ?? \"\")\n : (rootNode?.kind ?? (this.completedKind || identifiedKind));\n\n const root: IrStructuredNode = {\n role: \"structured\",\n kind: rootKind,\n kindState: isRaw\n ? \"raw\"\n : rootNode\n ? rootNode.kindState\n : this.pendingSchemaPaths.has(\"\")\n ? \"pending_schema\"\n : this.regionStatus === \"streaming\"\n ? identifiedKind\n ? \"pending_schema\"\n : \"pending_kind\"\n : \"raw\",\n discriminator: JSON_DISCRIMINATOR,\n path: [],\n status: this.regionStatus,\n value:\n rootNode?.value ??\n this.rootRawValue ??\n // Copy: the early-fields bucket keeps mutating as fields arrive; the\n // envelope must be freezable (Redux dev-mode immutability).\n (this.earlyFields.has(\"\") ? { ...this.earlyFields.get(\"\") } : {}),\n residue,\n };\n\n const nodeIndex: NonNullable<CanonicalBlockIR[\"nodeIndex\"]> = {};\n for (const node of this.nodes.values()) {\n if (node.pathKey === \"\") continue;\n nodeIndex[node.pathKey] = {\n kind: node.kind,\n kindState: node.kindState,\n status: node.complete ? \"complete\" : \"streaming\",\n ...(node.residue ? { residue: node.residue } : {}),\n };\n }\n for (const [pathKey] of this.rawPaths) {\n if (pathKey === \"\") continue;\n nodeIndex[pathKey] = { kind: \"\", kindState: \"raw\", status: \"complete\" };\n }\n\n return {\n v: IR_VERSION,\n engine: \"fe-kind-parser\",\n fingerprint,\n root,\n ...(Object.keys(nodeIndex).length > 0 ? { nodeIndex } : {}),\n };\n }\n}\n","/**\n * Character-level incremental JSON tokenizer. Survives chunk boundaries\n * mid-token (strings, escapes, unicode sequences, primitives). Pure — no\n * React, no Redux, no IO.\n *\n * Moved from app/(dev)/demos/json-block-detector/reusable-logic.ts (the demo\n * is now a consumer of this library).\n */\n\nexport type Punct = \"{\" | \"}\" | \"[\" | \"]\" | \":\" | \",\";\n\nexport type JsonToken =\n | { type: \"punct\"; value: Punct; at: number }\n | { type: \"string\"; value: string; at: number }\n | { type: \"number\"; value: number; at: number }\n | { type: \"boolean\"; value: boolean; at: number }\n | { type: \"null\"; value: null; at: number };\n\nexport class JsonStreamTokenizer {\n private mode: \"normal\" | \"string\" | \"escape\" | \"unicode\" | \"primitive\" =\n \"normal\";\n private pos = 0;\n\n private stringBuffer = \"\";\n private primitiveBuffer = \"\";\n private unicodeBuffer = \"\";\n private tokenStart = 0;\n\n private readonly onToken: (token: JsonToken) => void;\n\n // Explicit field rather than a parameter property: consumers compile this\n // source directly, and a strict host (the dashboard) sets\n // `erasableSyntaxOnly`, under which parameter properties are a hard error.\n constructor(onToken: (token: JsonToken) => void) {\n this.onToken = onToken;\n }\n\n get position(): number {\n return this.pos;\n }\n\n push(chunk: string): void {\n for (let i = 0; i < chunk.length; i++) {\n const ch = chunk[i];\n const at = this.pos;\n this.pos += 1;\n\n // `i < chunk.length` is the loop bound above, so `ch` is always a real\n // character here — this guard is unreachable in practice, it only\n // satisfies noUncheckedIndexedAccess's string-index typing.\n if (ch === undefined) continue;\n\n if (this.mode === \"primitive\") {\n if (this.isDelimiter(ch)) {\n this.emitPrimitive();\n this.handleNormalChar(ch, at);\n } else {\n this.primitiveBuffer += ch;\n }\n continue;\n }\n\n if (this.mode === \"string\") {\n if (ch === '\"') {\n this.onToken({\n type: \"string\",\n value: this.stringBuffer,\n at: this.tokenStart,\n });\n this.stringBuffer = \"\";\n this.mode = \"normal\";\n continue;\n }\n\n if (ch === \"\\\\\") {\n this.mode = \"escape\";\n continue;\n }\n\n if (ch === \"\\n\" || ch === \"\\r\") {\n throw new Error(`Invalid unescaped newline in JSON string at ${at}`);\n }\n\n this.stringBuffer += ch;\n continue;\n }\n\n if (this.mode === \"escape\") {\n if (ch === \"u\") {\n this.unicodeBuffer = \"\";\n this.mode = \"unicode\";\n continue;\n }\n\n const escaped: Record<string, string> = {\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n };\n\n if (!(ch in escaped)) {\n throw new Error(`Invalid JSON escape sequence at ${at}`);\n }\n\n this.stringBuffer += escaped[ch];\n this.mode = \"string\";\n continue;\n }\n\n if (this.mode === \"unicode\") {\n if (!/[0-9a-fA-F]/.test(ch)) {\n throw new Error(`Invalid unicode escape at ${at}`);\n }\n\n this.unicodeBuffer += ch;\n\n if (this.unicodeBuffer.length === 4) {\n this.stringBuffer += String.fromCharCode(\n parseInt(this.unicodeBuffer, 16),\n );\n this.unicodeBuffer = \"\";\n this.mode = \"string\";\n }\n\n continue;\n }\n\n this.handleNormalChar(ch, at);\n }\n }\n\n end(): void {\n if (this.mode === \"primitive\") {\n this.emitPrimitive();\n return;\n }\n\n if (this.mode !== \"normal\") {\n throw new Error(\n `Stream ended while parsing JSON ${this.mode} at ${this.pos}`,\n );\n }\n }\n\n private handleNormalChar(ch: string, at: number): void {\n if (/\\s/.test(ch)) return;\n\n if (\n ch === \"{\" ||\n ch === \"}\" ||\n ch === \"[\" ||\n ch === \"]\" ||\n ch === \":\" ||\n ch === \",\"\n ) {\n this.onToken({ type: \"punct\", value: ch, at });\n return;\n }\n\n if (ch === '\"') {\n this.mode = \"string\";\n this.stringBuffer = \"\";\n this.tokenStart = at;\n return;\n }\n\n if (/[-0-9tfn]/.test(ch)) {\n this.mode = \"primitive\";\n this.primitiveBuffer = ch;\n this.tokenStart = at;\n return;\n }\n\n throw new Error(`Unexpected character \"${ch}\" at ${at}`);\n }\n\n private emitPrimitive(): void {\n const raw = this.primitiveBuffer;\n const at = this.tokenStart;\n\n this.primitiveBuffer = \"\";\n this.mode = \"normal\";\n\n let value: unknown;\n\n try {\n value = JSON.parse(raw);\n } catch {\n throw new Error(`Invalid JSON primitive \"${raw}\" at ${at}`);\n }\n\n if (typeof value === \"number\") {\n this.onToken({ type: \"number\", value, at });\n return;\n }\n\n if (typeof value === \"boolean\") {\n this.onToken({ type: \"boolean\", value, at });\n return;\n }\n\n if (value === null) {\n this.onToken({ type: \"null\", value, at });\n return;\n }\n\n throw new Error(`Unsupported JSON primitive \"${raw}\" at ${at}`);\n }\n\n private isDelimiter(ch: string): boolean {\n return (\n /\\s/.test(ch) ||\n ch === \"{\" ||\n ch === \"}\" ||\n ch === \"[\" ||\n ch === \"]\" ||\n ch === \":\" ||\n ch === \",\"\n );\n }\n}\n","/**\n * Compliant snapshot builder — the guarantee that a renderer always receives\n * a well-formed, schema-shaped object even mid-stream.\n *\n * ZERO DATA LOSS: unknown keys are NOT merged into the snapshot value (they\n * would be indistinguishable from schema fields). They are returned on the\n * residue channel and re-merged only at wire-serialization time via\n * `mergeResidueIntoValue`.\n */\n\nimport { isEmptyResidue, type IrResidue } from \"./ir-types\";\nimport {\n KIND_KEY,\n type FieldSchema,\n type KindSchema,\n} from \"./kind-schema.types\";\n\n/** Placeholder for a required field not yet received during streaming. */\nexport function emptyValueForFieldSchema(field: FieldSchema): unknown {\n if (field.nullable) return null;\n\n switch (field.type) {\n case \"string\":\n return \"\";\n case \"number\":\n return 0;\n case \"boolean\":\n return false;\n case \"json\":\n // Any JSON value — null is the honest \"nothing arrived yet\" member.\n return null;\n case \"string[]\":\n case \"number[]\":\n case \"boolean[]\":\n case \"json[]\":\n case \"array\":\n return [];\n case \"object\":\n case \"inline_object\":\n case \"record\":\n return {};\n case \"enum\":\n return \"\";\n case \"union\":\n if (field.scalars.includes(\"string\")) return \"\";\n if (field.scalars.includes(\"number\")) return 0;\n if (field.scalars.includes(\"boolean\")) return false;\n // Kinds-only object union — an empty object is the least-wrong stub.\n return {};\n default:\n return null;\n }\n}\n\nexport interface CompliantKindSnapshot {\n /** Schema fields + __kind only. Required-but-missing fields hold typed placeholders. */\n value: Record<string, unknown>;\n /** Unknown keys + missing optionals. Null when both channels are empty. */\n residue: IrResidue | null;\n}\n\nexport function buildCompliantKindSnapshot(\n schema: KindSchema,\n partial: Record<string, unknown>,\n): CompliantKindSnapshot {\n const value: Record<string, unknown> = {\n [KIND_KEY]: schema.kind,\n };\n const optionalMissing: string[] = [];\n\n for (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {\n if (fieldName in partial && partial[fieldName] !== undefined) {\n value[fieldName] = partial[fieldName];\n } else if (fieldSchema.required) {\n value[fieldName] = emptyValueForFieldSchema(fieldSchema);\n } else {\n optionalMissing.push(fieldName);\n }\n }\n\n let extra: Record<string, unknown> | null = null;\n for (const [fieldName, fieldValue] of Object.entries(partial)) {\n if (fieldName === KIND_KEY) continue;\n if (fieldName in schema.fields) continue;\n if (extra === null) extra = {};\n extra[fieldName] = fieldValue;\n }\n\n const residue: IrResidue = {\n extra,\n optionalMissing: optionalMissing.length > 0 ? optionalMissing : null,\n notices: null,\n };\n\n return { value, residue: isEmptyResidue(residue) ? null : residue };\n}\n\n/**\n * Wire/round-trip form: schema fields + unknown keys back together, exactly\n * as the source carried them. `residue.extra` wins nothing — snapshot value\n * and extras are disjoint by construction.\n */\nexport function mergeResidueIntoValue(\n value: Record<string, unknown>,\n residue: IrResidue | null,\n): Record<string, unknown> {\n if (!residue?.extra) return value;\n return { ...value, ...residue.extra };\n}\n","/**\n * KindStreamParser — the streaming, schema-validating, __kind-discriminated\n * JSON parser at the heart of content-ir.\n *\n * Frame-stack pushdown parser over JsonStreamTokenizer tokens. Every value is\n * path-addressed; every object resolves a kind against the schema registry;\n * schema-shaped `block_snapshot` events fire on field arrival so renderers\n * get live partials; unknown/invalid structures degrade to `raw_object`\n * instead of failing the stream.\n *\n * The pushdown discipline (commit → descend → never re-ask → backtrack):\n * - SPECULATIVE DESCENT: when a parent field schema predicts a child's kind\n * ({type:\"object\", kind} or {type:\"array\", itemKinds:[K]} with one member),\n * the child commits to that kind THE INSTANT `{` opens and renders a\n * placeholder snapshot. `__kind` arrival confirms (no-op), re-tags (allowed\n * sibling kind), or backtracks to raw (contradiction). An object under a\n * predicting parent doesn't even need `__kind` — prediction alone types it.\n * - PENDING SCHEMA: an identified kind whose schema isn't loaded holds the\n * node open (`pending_schema` event, fields keep accumulating), fires the\n * resolver's cold fetch, and upgrades in place via `notifySchemaArrived` —\n * even after the node (or the whole region) has closed.\n * - POP-UP-ONE-LEVEL: node-scoped problems (duplicate key, schema violation,\n * disallowed itemKind) mark THAT node raw and keep parsing the parent.\n * Only grammar/tokenizer errors are region-fatal — and the host degrades\n * the region to a plain code block, never the stream.\n */\n\nimport { JsonStreamTokenizer, type JsonToken } from \"./json-tokenizer\";\nimport type { IrPath, IrResidue } from \"./ir-types\";\nimport {\n KIND_KEY,\n isJsonAnyField,\n isScalarArrayType,\n readObjectKind,\n scalarArrayItemType,\n type FieldSchema,\n type KindSchema,\n type RecordValueType,\n} from \"./kind-schema.types\";\nimport { buildCompliantKindSnapshot } from \"./kind-snapshot\";\n\n/** Kept as the historical name for the parser's event paths. */\nexport type JsonPath = IrPath;\n\n/**\n * Schema source abstraction. A plain Record works for static sets; the\n * registry supplies a resolver whose `request` fires a cold fetch and later\n * calls `parser.notifySchemaArrived`.\n */\nexport interface SchemaResolver {\n get(kind: string): KindSchema | undefined;\n /** Fire-and-forget cold fetch. Absent = static source, unknown kinds go raw. */\n request?(kind: string): void;\n /**\n * Optional per-resolver override for legacy root-key recognition. Most hosts\n * leave this unset and register the lookup once via\n * `setJsonRootKeyLookup` — see that function for why.\n */\n kindForJsonRootKey?(key: string): string | null;\n}\n\n/**\n * Legacy root-key recognition: `{\"quiz_title\": …}` → `quiz_set`.\n *\n * REGISTERED BY THE HOST, never imported by this file. The surface registry is\n * host-coupled (it reaches `captureError`), and this file is a pinned kernel\n * twin shared with aidream's Workflow Studio — a direct import breaks that\n * build outright.\n *\n * It is a module seam rather than a constructor argument because recognition\n * must not depend on each CALLER remembering to inject it: most callers pass a\n * plain `Record<string, KindSchema>` for `schemas`, which cannot carry a\n * function. Making this per-call silently disabled root-key recognition for\n * every one of them.\n *\n * Unset = the host has no surface table and root-key recognition does not\n * happen — the correct posture for a pure consumer like Workflow Studio.\n */\nlet jsonRootKeyLookup: ((key: string) => string | null) | null = null;\n\nexport function setJsonRootKeyLookup(\n lookup: ((key: string) => string | null) | null,\n): void {\n jsonRootKeyLookup = lookup;\n}\n\ntype ObjectFrame = {\n kind: \"object\";\n path: JsonPath;\n value: Record<string, unknown>;\n expecting: \"keyOrEnd\" | \"key\" | \"colon\" | \"value\" | \"commaOrEnd\";\n currentKey?: string | undefined;\n keyCount: number;\n};\n\ntype ArrayFrame = {\n kind: \"array\";\n path: JsonPath;\n value: unknown[];\n expecting: \"valueOrEnd\" | \"value\" | \"commaOrEnd\";\n nextIndex: number;\n};\n\ntype Frame = ObjectFrame | ArrayFrame;\n\ntype SchemaValidationOutcome = {\n error: string | null;\n optionalMissing: string[];\n extraFields: string[];\n};\n\nexport type KindStreamEvent =\n | {\n type: \"kind_identified\";\n kind: string;\n path: JsonPath;\n /** True when committed from the parent schema before __kind arrived. */\n speculative?: boolean;\n at: number;\n }\n | { type: \"pending_kind\"; path: JsonPath; at: number }\n | {\n type: \"kind_wait_end\";\n path: JsonPath;\n outcome: \"identified\" | \"raw_fallback\";\n kind?: string;\n reason?: string;\n at: number;\n }\n | {\n type: \"pending_schema\";\n kind: string;\n path: JsonPath;\n at: number;\n }\n | {\n type: \"field\";\n kind: string;\n path: JsonPath;\n key: string;\n value: unknown;\n at: number;\n }\n | { type: \"object_start\"; path: JsonPath; at: number }\n | {\n type: \"object_complete\";\n kind: string;\n path: JsonPath;\n value: Record<string, unknown>;\n at: number;\n }\n | {\n type: \"raw_object\";\n path: JsonPath;\n value: unknown;\n reason: string;\n /**\n * The kind that WAS identified for this node before it degraded raw —\n * present ONLY for schema-availability failures (\"no schema registered\"\n * for an identified/declared kind), never for structural failures\n * (missing __kind, duplicate keys, schema violations). Consumers use it\n * to preserve a known-but-unrenderable kind on the envelope so the\n * render seam can route to the generic viewer (or upgrade when the\n * schema arrives late) instead of dumping raw JSON.\n */\n kind?: string;\n at: number;\n }\n | {\n type: \"optional_field_missing\";\n kind: string;\n path: JsonPath;\n field: string;\n at: number;\n }\n | {\n type: \"extra_field\";\n kind: string;\n path: JsonPath;\n field: string;\n at: number;\n }\n | {\n type: \"block_snapshot\";\n kind: string;\n path: JsonPath;\n value: Record<string, unknown>;\n residue: IrResidue | null;\n complete: boolean;\n at: number;\n }\n | { type: \"array_start\"; path: JsonPath; field: string; at: number }\n | { type: \"complete\"; kind: string; value: unknown; at: number }\n | { type: \"error\"; reason: string; at: number };\n\nexport type KindStreamParserOptions = {\n onEvent: (event: KindStreamEvent) => void;\n schemas: Record<string, KindSchema> | SchemaResolver;\n /**\n * Known-context root prediction (e.g. \"this agent's output schema is\n * flashcard_set\"). The root commits speculatively at `{` open — the Option-1\n * provenance path for agents whose schemas don't carry __kind yet.\n */\n expectedRootKind?: string;\n};\n\nfunction isSchemaResolver(\n source: Record<string, KindSchema> | SchemaResolver,\n): source is SchemaResolver {\n return typeof (source as SchemaResolver).get === \"function\";\n}\n\nfunction safeCopy<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch {\n return value;\n }\n}\n\nexport class KindStreamParser {\n private readonly resolver: SchemaResolver;\n private readonly stack: Frame[] = [];\n private readonly objectKinds = new Map<string, string>();\n private readonly inlineSchemas = new Map<\n string,\n Record<string, FieldSchema>\n >();\n private readonly recordSchemas = new Map<string, RecordValueType>();\n private readonly rawObjectPaths = new Set<string>();\n /**\n * Subtrees whose value domain is \"any JSON\" by schema (`json` / `json[]`\n * fields, `record` with `values:\"json\"` members). OPAQUE by contract: no\n * kind identification, no pending_kind, no raw_object degradation — unknown\n * structure here is the declared shape, not a failure. Propagates to every\n * descendant compound.\n */\n private readonly opaquePaths = new Set<string>();\n private readonly deferredFields = new Map<\n string,\n Array<{ key: string; value: unknown; at: number }>\n >();\n private readonly awaitingKindPaths = new Set<string>();\n /** Paths whose kind came from parent-schema prediction, unconfirmed so far. */\n private readonly speculativeKinds = new Set<string>();\n /**\n * Kind named by the root object's FIRST key through the `json_root_key`\n * surface registry — a candidate, adopted only at root finalize.\n */\n private rootSurfaceKind: string | null = null;\n /** kind → paths (by key) waiting for the resolver's cold fetch. */\n private readonly pendingSchemaPaths = new Map<string, Map<string, JsonPath>>();\n /** Pending-schema paths whose object already closed. */\n private readonly closedPendingPaths = new Set<string>();\n /** Schemas delivered via notifySchemaArrived (overlay over the resolver). */\n private readonly arrivedSchemas = new Map<string, KindSchema>();\n\n private tokenizer: JsonStreamTokenizer;\n private root: unknown;\n private rootKind = \"\";\n private rootDone = false;\n private failed = false;\n\n private readonly options: KindStreamParserOptions;\n\n // Explicit field, not a parameter property — see the note in\n // `json-tokenizer.ts`: `erasableSyntaxOnly` hosts compile this source.\n constructor(options: KindStreamParserOptions) {\n this.options = options;\n this.resolver = isSchemaResolver(options.schemas)\n ? options.schemas\n : {\n get: (kind: string) =>\n (options.schemas as Record<string, KindSchema>)[kind],\n };\n\n this.tokenizer = new JsonStreamTokenizer((token) =>\n this.handleToken(token),\n );\n }\n\n push(chunk: string): void {\n if (this.failed || this.rootDone) return;\n\n try {\n this.tokenizer.push(chunk);\n } catch (error) {\n this.fail(\n error instanceof Error ? error.message : String(error),\n this.tokenizer.position,\n );\n }\n }\n\n end(): void {\n if (this.failed) return;\n\n try {\n this.tokenizer.end();\n } catch (error) {\n this.fail(\n error instanceof Error ? error.message : String(error),\n this.tokenizer.position,\n );\n return;\n }\n\n // The region is over: pending-schema nodes whose cold fetch hasn't\n // answered fall back to raw NOW. This keeps the end-of-region envelope\n // deterministic and byte-identical to the static (no-request) path;\n // upgrade-in-place remains a live-region feature. The data is preserved\n // verbatim on the raw node — zero loss.\n this.resolvePendingSchemasAsRaw();\n\n if (!this.rootDone) {\n this.fail(\n \"Stream ended before the root JSON object was complete.\",\n this.tokenizer.position,\n );\n }\n }\n\n private resolvePendingSchemasAsRaw(): void {\n const at = this.tokenizer.position;\n for (const [kind, paths] of [...this.pendingSchemaPaths]) {\n this.pendingSchemaPaths.delete(kind);\n for (const [pathKey, path] of paths) {\n this.closedPendingPaths.delete(pathKey);\n if (this.rawObjectPaths.has(pathKey)) continue;\n const value =\n this.getLiveObjectValue(path) ??\n this.getFinalizedObjectValue(path) ??\n {};\n this.emitRawObject(\n path,\n safeCopy(value),\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n }\n }\n }\n\n /** True once the root value has closed — the region is fully consumed. */\n get isComplete(): boolean {\n return this.rootDone;\n }\n\n get hasFailed(): boolean {\n return this.failed;\n }\n\n /**\n * Upgrade-in-place: the registry's cold fetch answered. Pending nodes for\n * this kind validate and complete (closed nodes retroactively); a null\n * schema (fetch miss) drops them to raw. Safe to call after end().\n */\n notifySchemaArrived(kind: string, schema: KindSchema | null): void {\n const waiting = this.pendingSchemaPaths.get(kind);\n if (!waiting) return;\n this.pendingSchemaPaths.delete(kind);\n\n if (schema) {\n this.arrivedSchemas.set(kind, schema);\n }\n\n const at = this.tokenizer.position;\n\n for (const [pathKey, path] of waiting) {\n if (this.rawObjectPaths.has(pathKey)) continue;\n\n const value =\n this.getLiveObjectValue(path) ?? this.getFinalizedObjectValue(path);\n\n if (!schema) {\n this.emitRawObject(\n path,\n safeCopy(value ?? {}),\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n this.closedPendingPaths.delete(pathKey);\n continue;\n }\n\n if (this.closedPendingPaths.has(pathKey)) {\n this.closedPendingPaths.delete(pathKey);\n if (value) {\n this.finalizeTypedObject(path, value, at);\n }\n } else {\n // Still streaming — emit the schema-shaped snapshot it was owed.\n this.emitBlockSnapshotForObject(path, at);\n }\n }\n }\n\n private handleToken(token: JsonToken): void {\n if (this.failed) return;\n\n if (this.rootDone) {\n this.fail(\"Unexpected token after complete JSON object.\", token.at);\n return;\n }\n\n if (token.type === \"punct\") {\n this.handlePunctuation(token);\n return;\n }\n\n if (token.type === \"string\") {\n this.handleString(token);\n return;\n }\n\n this.beginScalar(token.value, token.at);\n }\n\n private handleString(token: Extract<JsonToken, { type: \"string\" }>): void {\n const frame = this.currentFrame();\n\n if (\n frame?.kind === \"object\" &&\n (frame.expecting === \"keyOrEnd\" || frame.expecting === \"key\")\n ) {\n this.acceptObjectKey(frame, token.value, token.at);\n return;\n }\n\n this.beginScalar(token.value, token.at);\n }\n\n private handlePunctuation(\n token: Extract<JsonToken, { type: \"punct\" }>,\n ): void {\n switch (token.value) {\n case \"{\":\n this.beginCompound(\"object\", token.at);\n return;\n case \"[\":\n this.beginCompound(\"array\", token.at);\n return;\n case \"}\":\n this.closeCompound(\"object\", token.at);\n return;\n case \"]\":\n this.closeCompound(\"array\", token.at);\n return;\n case \":\":\n this.acceptColon(token.at);\n return;\n case \",\":\n this.acceptComma(token.at);\n return;\n }\n }\n\n private beginCompound(kind: \"object\" | \"array\", at: number): void {\n const value = kind === \"object\" ? {} : [];\n // The frame this value lands in — read BEFORE placeValue/push mutate it.\n const container = this.currentFrame();\n const path = this.placeValue(value, kind, at, false);\n if (!path || this.failed) return;\n\n // OPAQUE DESCENT: a compound under a json-any placement (or inside an\n // already-opaque subtree) is schema-legal unknown structure. Mark it and\n // skip ALL kind machinery below.\n const opaque =\n (container !== undefined &&\n this.opaquePaths.has(this.pathKey(container.path))) ||\n this.isJsonAnyPlacement(path);\n if (opaque) this.opaquePaths.add(this.pathKey(path));\n\n if (kind === \"object\") {\n this.emit({ type: \"object_start\", path, at });\n if (opaque) {\n this.stack.push({\n kind: \"object\",\n path,\n value: value as Record<string, unknown>,\n expecting: \"keyOrEnd\",\n keyCount: 0,\n });\n return;\n }\n this.registerObjectContext(path);\n const pathKey = this.pathKey(path);\n\n this.stack.push({\n kind: \"object\",\n path,\n value: value as Record<string, unknown>,\n expecting: \"keyOrEnd\",\n keyCount: 0,\n });\n\n if (this.inlineSchemas.has(pathKey) || this.recordSchemas.has(pathKey)) {\n return;\n }\n\n // SPECULATIVE DESCENT: commit the predicted kind the instant `{` opens.\n const speculated = this.resolveSpeculativeKind(path);\n if (speculated) {\n this.objectKinds.set(pathKey, speculated);\n this.speculativeKinds.add(pathKey);\n if (path.length === 0) {\n this.rootKind = speculated;\n }\n this.emit({\n type: \"kind_identified\",\n kind: speculated,\n path,\n speculative: true,\n at,\n });\n this.emitBlockSnapshotForObject(path, at);\n return;\n }\n\n this.awaitingKindPaths.add(pathKey);\n this.emit({ type: \"pending_kind\", path, at });\n return;\n }\n\n const parentField = this.parentFieldName(path);\n if (parentField) {\n this.emit({ type: \"array_start\", path, field: parentField, at });\n }\n\n this.stack.push({\n kind: \"array\",\n path,\n value: value as unknown[],\n expecting: \"valueOrEnd\",\n nextIndex: 0,\n });\n }\n\n /**\n * THE JSON-ROOT-KEY SURFACE — `content_ir.kind_surface` rows of type\n * `json_root_key`, live at last (they were inert phantom rows until\n * 2026-08-20).\n *\n * A legacy payload such as `{\"quiz_title\": ...}` carries no `__kind`, but\n * the ONE surface registry knows exactly which kind that root key names —\n * the same lookup the SERVER performs before adapting the payload\n * (`aidream .../processing/blocks/envelope.py`). Consulting it HERE, in the\n * shared parser core, is what makes one place decide it: both hosts — the\n * one-shot `normalizeJsonRegion` (DB reload / reconcile) and the live\n * `openParseSession` (streaming) — build their parser through\n * `createKindStreamParser`, so neither passes an option and neither can\n * drift from the other.\n *\n * Recorded at the first root key; ADOPTED only when the root object closes\n * (`completeTypedObject`). That is the surface registry's complete-only\n * convergence law, and every json_root_key row is `streaming:false` — these\n * legacy shapes are recognised by their whole payload, so speculating\n * mid-stream would flash a kind component over an object that may never\n * satisfy the schema. An explicit `expectedRootKind` (an agent's declared\n * output schema) is stronger context and always wins; an actual `__kind`\n * still wins over both.\n */\n private noteRootSurfaceKind(key: string): void {\n if (key === KIND_KEY) return;\n if (this.options.expectedRootKind) return;\n if (this.rootKind || this.objectKinds.has(this.pathKey([]))) return;\n\n const kind =\n this.resolver.kindForJsonRootKey?.(key) ?? jsonRootKeyLookup?.(key);\n if (!kind) return;\n\n this.rootSurfaceKind = kind;\n\n // Warm a cold schema now so finalize can actually validate against it.\n if (!this.lookupSchema(kind)) {\n this.resolver.request?.(kind);\n }\n }\n\n /**\n * Prediction from the parent schema: object field → declared kind; array\n * item → sole itemKind; root → expectedRootKind. Only when the schema is\n * actually resolvable (a prediction we can't validate against is not a\n * commitment worth making).\n */\n private resolveSpeculativeKind(path: JsonPath): string | null {\n if (path.length === 0) {\n const expected = this.options.expectedRootKind;\n return expected && this.lookupObjectSchema(expected) ? expected : null;\n }\n\n const last = path[path.length - 1];\n\n if (typeof last === \"string\") {\n const fieldSchema = this.resolveParentFieldSchema(path);\n if (\n fieldSchema?.type === \"object\" &&\n this.lookupObjectSchema(fieldSchema.kind)\n ) {\n return fieldSchema.kind;\n }\n return null;\n }\n\n // Array item: owner object → field schema → single-member itemKinds.\n const fieldName = this.parentFieldName(path);\n if (!fieldName) return null;\n\n const ownerPath = path.slice(0, -2);\n const ownerKind = this.getObjectKindForPath(ownerPath);\n if (!ownerKind) return null;\n\n const fieldSchema = this.lookupSchema(ownerKind)?.fields[fieldName];\n const soleItemKind =\n fieldSchema?.type === \"array\" && fieldSchema.itemKinds.length === 1\n ? fieldSchema.itemKinds[0]\n : undefined;\n if (soleItemKind !== undefined && this.lookupObjectSchema(soleItemKind)) {\n return soleItemKind;\n }\n return null;\n }\n\n /**\n * A schema usable for OBJECT speculation/snapshots — root-form kinds\n * (non-object data-only shapes) are never a valid object commitment.\n */\n private lookupObjectSchema(kind: string): KindSchema | undefined {\n const schema = this.lookupSchema(kind);\n return schema && !schema.root ? schema : undefined;\n }\n\n private beginScalar(value: unknown, at: number): void {\n this.placeValue(value, \"scalar\", at, true);\n }\n\n private placeValue(\n value: unknown,\n valueKind: \"object\" | \"array\" | \"scalar\",\n at: number,\n finalizedImmediately: boolean,\n ): JsonPath | null {\n if (this.root === undefined) {\n if (valueKind !== \"object\") {\n this.fail(\"Root value must be a JSON object.\", at);\n return null;\n }\n this.root = value;\n return [];\n }\n\n const parent = this.currentFrame();\n if (!parent) {\n this.fail(\"Unexpected value after root object.\", at);\n return null;\n }\n\n let path: JsonPath;\n let fieldKey: string | undefined;\n\n if (parent.kind === \"object\") {\n if (parent.expecting !== \"value\") {\n this.fail(\n `Unexpected value inside object. Expected ${parent.expecting}.`,\n at,\n );\n return null;\n }\n if (parent.currentKey === undefined) {\n this.fail(\"Internal parser error: missing object key.\", at);\n return null;\n }\n\n fieldKey = parent.currentKey;\n path = [...parent.path, fieldKey];\n\n // Node-scoped validation failure → mark the PARENT raw, keep parsing.\n const placementError = this.validateFieldPlacement(\n parent,\n fieldKey,\n valueKind,\n value,\n );\n if (placementError) {\n this.markNodeRaw(parent.path, parent.value, placementError, at);\n }\n\n parent.value[fieldKey] = value;\n parent.currentKey = undefined;\n parent.expecting = \"commaOrEnd\";\n } else {\n if (parent.expecting !== \"valueOrEnd\" && parent.expecting !== \"value\") {\n this.fail(\n `Unexpected value inside array. Expected ${parent.expecting}.`,\n at,\n );\n return null;\n }\n\n const index = parent.nextIndex;\n path = [...parent.path, index];\n fieldKey = this.parentFieldName(path);\n\n parent.value.push(value);\n parent.nextIndex += 1;\n parent.expecting = \"commaOrEnd\";\n }\n\n if (finalizedImmediately) {\n this.onValueFinalized(path, value, at);\n }\n\n return path;\n }\n\n private acceptObjectKey(frame: ObjectFrame, key: string, at: number): void {\n if (frame.expecting !== \"keyOrEnd\" && frame.expecting !== \"key\") {\n this.fail(`Unexpected object key \"${key}\".`, at);\n return;\n }\n\n if (Object.prototype.hasOwnProperty.call(frame.value, key)) {\n // Node-scoped: this object goes raw (last-wins semantics), parent lives.\n this.markNodeRaw(\n frame.path,\n frame.value,\n `Duplicate key \"${key}\".`,\n at,\n );\n }\n\n if (frame.path.length === 0 && frame.keyCount === 0) {\n this.noteRootSurfaceKind(key);\n }\n\n frame.currentKey = key;\n frame.keyCount += 1;\n frame.expecting = \"colon\";\n }\n\n private acceptColon(at: number): void {\n const frame = this.currentFrame();\n if (!frame || frame.kind !== \"object\" || frame.expecting !== \"colon\") {\n this.fail(\"Unexpected colon.\", at);\n return;\n }\n frame.expecting = \"value\";\n }\n\n private acceptComma(at: number): void {\n const frame = this.currentFrame();\n if (!frame || frame.expecting !== \"commaOrEnd\") {\n this.fail(\"Unexpected comma.\", at);\n return;\n }\n\n if (frame.kind === \"object\") {\n frame.expecting = \"key\";\n } else {\n frame.expecting = \"value\";\n }\n }\n\n private closeCompound(kind: \"object\" | \"array\", at: number): void {\n const frame = this.currentFrame();\n if (!frame || frame.kind !== kind) {\n this.fail(\n `Unexpected closing ${kind === \"object\" ? \"brace\" : \"bracket\"}.`,\n at,\n );\n return;\n }\n\n if (frame.kind === \"object\") {\n if (frame.expecting !== \"keyOrEnd\" && frame.expecting !== \"commaOrEnd\") {\n this.fail(`Object closed too early. Expected ${frame.expecting}.`, at);\n return;\n }\n } else if (\n frame.expecting !== \"valueOrEnd\" &&\n frame.expecting !== \"commaOrEnd\"\n ) {\n this.fail(`Array closed too early. Expected ${frame.expecting}.`, at);\n return;\n }\n\n this.stack.pop();\n if (this.stack.length === 0) {\n this.rootDone = true;\n }\n\n this.onValueFinalized(frame.path, frame.value, at);\n }\n\n /**\n * True when a value placed at `path` sits directly under a json-any\n * placement: a `json`/`json[]` FIELD, or a member of a `record` whose\n * values are `\"json\"`. (Deeper descendants inherit via `opaquePaths`.)\n */\n private isJsonAnyPlacement(path: JsonPath): boolean {\n const fieldSchema = this.resolveParentFieldSchema(path);\n if (fieldSchema && isJsonAnyField(fieldSchema)) return true;\n\n const last = path[path.length - 1];\n if (typeof last === \"string\") {\n const parentKey = this.pathKey(path.slice(0, -1));\n if (this.recordSchemas.get(parentKey) === \"json\") return true;\n }\n return false;\n }\n\n private onValueFinalized(path: JsonPath, value: unknown, at: number): void {\n if (this.failed) return;\n\n const pathKey = this.pathKey(path);\n\n // Opaque subtree: the value is schema-legal by contract; no kind\n // identification, no snapshots, no raw degradation.\n const parentIsOpaque =\n path.length > 0 && this.opaquePaths.has(this.pathKey(path.slice(0, -1)));\n if (this.opaquePaths.has(pathKey)) {\n // The subtree ROOT sits on a typed parent's json-any field — surface it\n // as an ordinary field event (and parent snapshot) like any scalar.\n if (!parentIsOpaque) this.emitFieldIfReady(path, value, at);\n return;\n }\n if (parentIsOpaque) return;\n\n if (this.isKindFieldPath(path)) {\n if (typeof value !== \"string\") {\n return;\n }\n\n this.onKindDiscriminatorArrived(path.slice(0, -1), value, at);\n return;\n }\n\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const objectValue = value as Record<string, unknown>;\n\n const inlineFields = this.inlineSchemas.get(pathKey);\n if (inlineFields) {\n const inlineError = this.validateObjectAgainstFields(\n objectValue,\n inlineFields,\n );\n if (inlineError.error) {\n this.emitRawObject(path, objectValue, inlineError.error, at);\n return;\n }\n this.inlineSchemas.delete(pathKey);\n this.emitSchemaNotices(path, \"inline_object\", inlineError, at);\n this.emit({\n type: \"object_complete\",\n kind: \"inline_object\",\n path,\n value: objectValue,\n at,\n });\n } else {\n const recordValueType = this.recordSchemas.get(pathKey);\n if (recordValueType) {\n const recordError = this.validateRecordObject(\n objectValue,\n recordValueType,\n );\n if (recordError) {\n this.emitRawObject(path, objectValue, recordError, at);\n return;\n }\n this.recordSchemas.delete(pathKey);\n this.emit({\n type: \"object_complete\",\n kind: \"record\",\n path,\n value: objectValue,\n at,\n });\n } else {\n this.completeTypedObject(path, objectValue, at);\n }\n }\n }\n\n this.emitFieldIfReady(path, value, at);\n\n if (path.length === 0) {\n this.completeRoot(value as Record<string, unknown>, at);\n }\n }\n\n /** __kind arrived for an object — confirm speculation, identify, or backtrack. */\n private onKindDiscriminatorArrived(\n objectPath: JsonPath,\n kind: string,\n at: number,\n ): void {\n const objectPathKey = this.pathKey(objectPath);\n\n if (this.rawObjectPaths.has(objectPathKey)) return;\n\n const prior = this.objectKinds.get(objectPathKey);\n const wasSpeculative = this.speculativeKinds.has(objectPathKey);\n\n if (prior !== undefined && wasSpeculative) {\n this.speculativeKinds.delete(objectPathKey);\n\n if (prior === kind) {\n // Confirmation — the commitment was right; nothing to redo.\n this.emitBlockSnapshotForObject(objectPath, at);\n return;\n }\n\n // Contradiction. Allowed sibling kind (multi-member itemKinds) → re-tag.\n if (\n this.lookupSchema(kind) &&\n this.validateArrayItemKind(objectPath, kind) === null &&\n this.speculativeRetagAllowed(objectPath, kind)\n ) {\n this.objectKinds.set(objectPathKey, kind);\n if (objectPath.length === 0) {\n this.rootKind = kind;\n }\n this.emit({ type: \"kind_identified\", kind, path: objectPath, at });\n this.emitBlockSnapshotForObject(objectPath, at);\n return;\n }\n\n // Backtrack: the prediction was wrong and the truth doesn't fit here.\n const live = this.getLiveObjectValue(objectPath);\n this.objectKinds.delete(objectPathKey);\n if (objectPath.length === 0) {\n this.rootKind = \"\";\n }\n this.emitRawObject(\n objectPath,\n safeCopy(live ?? {}),\n `Speculated kind \"${prior}\" contradicted by ${KIND_KEY} \"${kind}\".`,\n at,\n );\n return;\n }\n\n this.objectKinds.set(objectPathKey, kind);\n\n this.emit({\n type: \"kind_identified\",\n kind,\n path: objectPath,\n at,\n });\n\n this.clearKindWait(objectPath, \"identified\", at, kind);\n\n if (objectPath.length === 0) {\n this.rootKind = kind;\n }\n\n // PENDING SCHEMA: kind known, schema cold — hold and fetch.\n if (!this.lookupSchema(kind) && this.resolver.request) {\n this.addPendingSchemaPath(kind, objectPath);\n this.emit({ type: \"pending_schema\", kind, path: objectPath, at });\n this.resolver.request(kind);\n return;\n }\n\n this.flushDeferredFields(objectPath, kind, at);\n this.emitBlockSnapshotForObject(objectPath, at);\n }\n\n /** A contradicted speculation may re-tag only where the new kind is legal. */\n private speculativeRetagAllowed(path: JsonPath, kind: string): boolean {\n if (path.length === 0) {\n // Root prediction came from external context; any registered kind is a\n // legal correction.\n return true;\n }\n\n const last = path[path.length - 1];\n if (typeof last === \"number\") {\n const fieldName = this.parentFieldName(path);\n const ownerKind = this.getObjectKindForPath(path.slice(0, -2));\n if (!fieldName || !ownerKind) return false;\n const fieldSchema = this.lookupSchema(ownerKind)?.fields[fieldName];\n return (\n fieldSchema?.type === \"array\" && fieldSchema.itemKinds.includes(kind)\n );\n }\n\n // Declared object fields pin exactly one kind — a different one is a\n // contradiction, not a re-tag.\n return false;\n }\n\n private addPendingSchemaPath(kind: string, path: JsonPath): void {\n const pathKey = this.pathKey(path);\n const existing = this.pendingSchemaPaths.get(kind) ?? new Map();\n existing.set(pathKey, path);\n this.pendingSchemaPaths.set(kind, existing);\n }\n\n private completeTypedObject(\n path: JsonPath,\n objectValue: Record<string, unknown>,\n at: number,\n ): void {\n const pathKey = this.pathKey(path);\n\n // Already backtracked to raw mid-stream — nothing further to claim.\n if (this.rawObjectPaths.has(pathKey)) return;\n\n const declaredKind = readObjectKind(objectValue);\n const committedKind = this.objectKinds.get(pathKey);\n\n // Closed while its schema fetch is still in flight — defer finalization.\n if (\n committedKind &&\n this.pendingSchemaPaths.get(committedKind)?.has(pathKey)\n ) {\n this.closedPendingPaths.add(pathKey);\n return;\n }\n\n // Speculation that never saw __kind: prediction alone types the object.\n if (!declaredKind && committedKind && this.speculativeKinds.has(pathKey)) {\n this.speculativeKinds.delete(pathKey);\n this.finalizeSpeculatedObject(path, objectValue, committedKind, at);\n return;\n }\n\n // THE JSON-ROOT-KEY SURFACE converges here (see noteRootSurfaceKind).\n // Same posture as any speculation: it NEVER claims a kind it cannot\n // validate — a payload that doesn't satisfy the schema still degrades to\n // raw, but with a notice naming the expected kind and the real contract\n // gap instead of the misleading `Object is missing \"__kind\"`.\n if (\n path.length === 0 &&\n !declaredKind &&\n !committedKind &&\n this.rootSurfaceKind\n ) {\n const surfaceKind = this.rootSurfaceKind;\n this.rootSurfaceKind = null;\n this.objectKinds.set(pathKey, surfaceKind);\n this.rootKind = surfaceKind;\n this.emit({\n type: \"kind_identified\",\n kind: surfaceKind,\n path,\n speculative: true,\n at,\n });\n this.clearKindWait(path, \"identified\", at, surfaceKind);\n this.finalizeSpeculatedObject(path, objectValue, surfaceKind, at);\n return;\n }\n\n if (!declaredKind) {\n this.emitRawObject(\n path,\n objectValue,\n `Object is missing \"${KIND_KEY}\".`,\n at,\n );\n return;\n }\n\n this.speculativeKinds.delete(pathKey);\n this.finalizeTypedObject(path, objectValue, at);\n }\n\n /** Validate + complete an object whose value carries __kind. */\n private finalizeTypedObject(\n path: JsonPath,\n objectValue: Record<string, unknown>,\n at: number,\n ): void {\n const pathKey = this.pathKey(path);\n const kind = readObjectKind(objectValue);\n\n if (!kind) {\n this.emitRawObject(\n path,\n objectValue,\n `Object is missing \"${KIND_KEY}\".`,\n at,\n );\n return;\n }\n\n const schema = this.lookupSchema(kind);\n if (!schema) {\n this.emitRawObject(\n path,\n objectValue,\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n return;\n }\n\n const arrayItemError = this.validateArrayItemKind(path, kind);\n if (arrayItemError) {\n this.emitRawObject(path, objectValue, arrayItemError, at);\n return;\n }\n\n const outcome = this.validateObjectAgainstSchema(objectValue, schema);\n if (outcome.error) {\n this.emitRawObject(path, objectValue, outcome.error, at);\n return;\n }\n\n this.objectKinds.set(pathKey, kind);\n this.emitSchemaNotices(path, kind, outcome, at);\n this.emitBlockSnapshotForObject(path, at, true);\n this.emit({\n type: \"object_complete\",\n kind,\n path,\n value: objectValue,\n at,\n });\n }\n\n /** Validate + complete an object typed purely by parent prediction. */\n private finalizeSpeculatedObject(\n path: JsonPath,\n objectValue: Record<string, unknown>,\n kind: string,\n at: number,\n ): void {\n const schema = this.lookupSchema(kind);\n if (!schema) {\n this.emitRawObject(\n path,\n objectValue,\n `No block schema registered for \"${kind}\".`,\n at,\n kind,\n );\n return;\n }\n\n const outcome = this.validateObjectAgainstSchema(\n { ...objectValue, [KIND_KEY]: kind },\n schema,\n );\n if (outcome.error) {\n this.emitRawObject(path, objectValue, outcome.error, at);\n return;\n }\n\n this.emitSchemaNotices(path, kind, outcome, at);\n this.emitBlockSnapshotForObject(path, at, true);\n this.emit({\n type: \"object_complete\",\n kind,\n path,\n value: objectValue,\n at,\n });\n }\n\n private validateArrayItemKind(path: JsonPath, kind: string): string | null {\n const last = path[path.length - 1];\n if (typeof last !== \"number\") return null;\n\n const fieldName = this.parentFieldName(path);\n if (!fieldName) return null;\n\n const ownerObjectPath = path.slice(0, -2);\n const parentKind = this.getObjectKindForPath(ownerObjectPath);\n if (!parentKind) return null;\n\n const fieldSchema = this.lookupSchema(parentKind)?.fields[fieldName];\n if (!fieldSchema || fieldSchema.type !== \"array\") return null;\n\n if (!fieldSchema.itemKinds.includes(kind)) {\n return `Kind \"${kind}\" is not allowed in \"${fieldName}\" on \"${parentKind}\" (expected one of: ${fieldSchema.itemKinds.join(\", \")}).`;\n }\n\n return null;\n }\n\n private completeRoot(rootObject: Record<string, unknown>, at: number): void {\n const pathKey = this.pathKey([]);\n\n if (this.rawObjectPaths.has(pathKey)) {\n this.emit({\n type: \"complete\",\n kind: readObjectKind(rootObject) ?? \"\",\n value: rootObject,\n at,\n });\n return;\n }\n\n // Root closed while its schema fetch is in flight — completeTypedObject\n // already recorded the deferral; report the committed kind.\n const committedKind = this.objectKinds.get(pathKey);\n if (\n committedKind &&\n this.pendingSchemaPaths.get(committedKind)?.has(pathKey)\n ) {\n this.emit({\n type: \"complete\",\n kind: committedKind,\n value: rootObject,\n at,\n });\n return;\n }\n\n this.emit({\n type: \"complete\",\n kind: this.objectKinds.get(pathKey) ?? readObjectKind(rootObject) ?? \"\",\n value: rootObject,\n at,\n });\n }\n\n /** Mark a node raw (node-scoped failure) without killing the stream. */\n private markNodeRaw(\n path: JsonPath,\n liveValue: unknown,\n reason: string,\n at: number,\n ): void {\n const pathKey = this.pathKey(path);\n if (this.rawObjectPaths.has(pathKey)) return;\n\n this.speculativeKinds.delete(pathKey);\n this.emitRawObject(path, safeCopy(liveValue), reason, at);\n }\n\n private emitRawObject(\n path: JsonPath,\n value: unknown,\n reason: string,\n at: number,\n identifiedKind?: string,\n ): void {\n const pathKey = this.pathKey(path);\n if (this.rawObjectPaths.has(pathKey)) return;\n\n this.rawObjectPaths.add(pathKey);\n this.clearKindWait(path, \"raw_fallback\", at, undefined, reason);\n this.emit({\n type: \"raw_object\",\n path,\n value,\n reason,\n ...(identifiedKind !== undefined && { kind: identifiedKind }),\n at,\n });\n }\n\n private clearKindWait(\n path: JsonPath,\n outcome: \"identified\" | \"raw_fallback\",\n at: number,\n kind?: string,\n reason?: string,\n ): void {\n const pathKey = this.pathKey(path);\n if (!this.awaitingKindPaths.has(pathKey)) return;\n\n this.awaitingKindPaths.delete(pathKey);\n this.emit({\n type: \"kind_wait_end\",\n path,\n outcome,\n ...(kind !== undefined && { kind }),\n ...(reason !== undefined && { reason }),\n at,\n });\n }\n\n private emitFieldIfReady(path: JsonPath, value: unknown, at: number): void {\n const fieldKey = this.fieldKeyFromPath(path);\n if (!fieldKey || fieldKey === KIND_KEY) return;\n\n const parentPath = path.slice(0, -1);\n const objectKind = this.getDirectObjectKind(parentPath);\n if (!objectKind) {\n const parentPathKey = this.pathKey(parentPath);\n const deferred = this.deferredFields.get(parentPathKey) ?? [];\n deferred.push({ key: fieldKey, value, at });\n this.deferredFields.set(parentPathKey, deferred);\n return;\n }\n\n // PENDING-SCHEMA EARLY FIELDS: an identified kind whose schema hasn't\n // arrived yet (cold fetch in flight) cannot validate fields — but its\n // early top-level values (title, loading_message, …) are exactly what a\n // loading component needs to render meaningfully DURING the wait. Emit\n // them un-validated; once the schema lands, snapshots take over and the\n // compliant value supersedes anything shown early.\n const schemaResolved = this.lookupSchema(objectKind) !== undefined;\n if (\n schemaResolved &&\n !this.isAllowedSchemaField(parentPath, fieldKey, objectKind)\n ) {\n return;\n }\n\n this.emit({\n type: \"field\",\n kind: objectKind,\n path,\n key: fieldKey,\n value,\n at,\n });\n\n this.emitBlockSnapshotForObject(parentPath, at);\n }\n\n private flushDeferredFields(\n objectPath: JsonPath,\n kind: string,\n at: number,\n ): void {\n const pathKey = this.pathKey(objectPath);\n const deferred = this.deferredFields.get(pathKey);\n if (!deferred) return;\n\n for (const entry of deferred) {\n if (entry.key === KIND_KEY) continue;\n if (!this.isAllowedSchemaField(objectPath, entry.key, kind)) continue;\n\n this.emit({\n type: \"field\",\n kind,\n path: [...objectPath, entry.key],\n key: entry.key,\n value: entry.value,\n at: entry.at,\n });\n }\n\n this.deferredFields.delete(pathKey);\n this.emitBlockSnapshotForObject(objectPath, at);\n }\n\n private getLiveObjectValue(path: JsonPath): Record<string, unknown> | null {\n const pathKey = this.pathKey(path);\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const frame = this.stack[i];\n // `i` ranges over [0, stack.length) by construction, so `frame` is\n // always defined here — unreachable, satisfies noUncheckedIndexedAccess.\n if (!frame) continue;\n if (frame.kind === \"object\" && this.pathKey(frame.path) === pathKey) {\n return frame.value;\n }\n }\n return null;\n }\n\n private emitBlockSnapshotForObject(\n objectPath: JsonPath,\n at: number,\n complete = false,\n ): void {\n const pathKey = this.pathKey(objectPath);\n if (this.rawObjectPaths.has(pathKey)) return;\n\n const kind = this.getDirectObjectKind(objectPath);\n if (!kind) return;\n\n // Root-form kinds have no object field map — nothing to snapshot.\n const schema = this.lookupObjectSchema(kind);\n if (!schema) return;\n\n const partial = complete\n ? this.getFinalizedObjectValue(objectPath)\n : this.getLiveObjectValue(objectPath);\n if (!partial) return;\n\n const { value, residue } = buildCompliantKindSnapshot(schema, partial);\n this.emit({\n type: \"block_snapshot\",\n kind,\n path: objectPath,\n value,\n residue,\n complete,\n at,\n });\n }\n\n /**\n * On `complete` snapshots (and post-close schema upgrades) the frame has\n * already been popped — the finalized value lives in the root tree.\n */\n private getFinalizedObjectValue(\n path: JsonPath,\n ): Record<string, unknown> | null {\n const live = this.getLiveObjectValue(path);\n if (live) return live;\n\n if (path.length === 0) {\n return typeof this.root === \"object\" &&\n this.root !== null &&\n !Array.isArray(this.root)\n ? (this.root as Record<string, unknown>)\n : null;\n }\n\n let cursor: unknown = this.root;\n for (const segment of path) {\n if (cursor === null || typeof cursor !== \"object\") return null;\n cursor = (cursor as Record<string | number, unknown>)[\n segment as string | number\n ];\n }\n return typeof cursor === \"object\" &&\n cursor !== null &&\n !Array.isArray(cursor)\n ? (cursor as Record<string, unknown>)\n : null;\n }\n\n private validateFieldPlacement(\n parent: ObjectFrame,\n fieldKey: string,\n valueKind: \"object\" | \"array\" | \"scalar\",\n value: unknown,\n ): string | null {\n const parentPathKey = this.pathKey(parent.path);\n const inlineFields = this.inlineSchemas.get(parentPathKey);\n if (inlineFields) {\n const fieldSchema = inlineFields[fieldKey];\n if (!fieldSchema) {\n return null;\n }\n return this.validateValueAgainstField(\n fieldSchema,\n valueKind,\n value,\n fieldKey,\n );\n }\n\n const recordValueType = this.recordSchemas.get(parentPathKey);\n if (recordValueType) {\n if (recordValueType === \"json\") return null; // any member value is legal\n if (valueKind !== \"scalar\") {\n return `Record field \"${fieldKey}\" must be a scalar.`;\n }\n return this.validateRecordScalar(recordValueType, value, fieldKey);\n }\n\n return null;\n }\n\n private emitSchemaNotices(\n path: JsonPath,\n kind: string,\n outcome: Pick<SchemaValidationOutcome, \"optionalMissing\" | \"extraFields\">,\n at: number,\n ): void {\n for (const field of outcome.optionalMissing) {\n this.emit({\n type: \"optional_field_missing\",\n kind,\n path,\n field,\n at,\n });\n }\n\n for (const field of outcome.extraFields) {\n this.emit({\n type: \"extra_field\",\n kind,\n path,\n field,\n at,\n });\n }\n }\n\n private validateObjectAgainstSchema(\n objectValue: Record<string, unknown>,\n schema: KindSchema,\n ): SchemaValidationOutcome {\n const optionalMissing: string[] = [];\n const extraFields: string[] = [];\n const emptyOutcome = { optionalMissing, extraFields };\n\n // Root-form kinds are data-only (scalar/array/json roots): a __kind\n // object claiming one is a contradiction, never a trivial pass.\n if (schema.root) {\n return {\n error: `Kind \"${schema.kind}\" has a non-object root form and cannot be a \"${KIND_KEY}\" object.`,\n ...emptyOutcome,\n };\n }\n\n const kind = readObjectKind(objectValue);\n if (kind !== schema.kind) {\n return {\n error: `Object \"${KIND_KEY}\" is \"${kind ?? \"missing\"}\", expected \"${schema.kind}\".`,\n ...emptyOutcome,\n };\n }\n\n for (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Kind \"${schema.kind}\" is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\n if (!(fieldName in objectValue)) {\n optionalMissing.push(fieldName);\n }\n }\n\n for (const [fieldName, fieldValue] of Object.entries(objectValue)) {\n if (fieldName === KIND_KEY) continue;\n\n const fieldSchema = schema.fields[fieldName];\n if (!fieldSchema) {\n extraFields.push(fieldName);\n continue;\n }\n\n const error = this.validateFinalFieldValue(\n fieldSchema,\n fieldValue,\n fieldName,\n schema.kind,\n );\n if (error) {\n return { error, optionalMissing, extraFields };\n }\n }\n\n return { error: null, optionalMissing, extraFields };\n }\n\n private validateFinalFieldValue(\n fieldSchema: FieldSchema,\n value: unknown,\n fieldName: string,\n objectKind: string,\n ): string | null {\n // Any JSON value is legal — including null, objects, arrays.\n if (fieldSchema.type === \"json\") return null;\n\n if (fieldSchema.type === \"json[]\") {\n if (value === null) {\n return fieldSchema.nullable\n ? null\n : `Field \"${fieldName}\" on kind \"${objectKind}\" cannot be null.`;\n }\n if (!Array.isArray(value)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n }\n return null;\n }\n\n if (isScalarArrayType(fieldSchema.type)) {\n if (!Array.isArray(value)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n }\n const itemType = scalarArrayItemType(fieldSchema.type);\n if (!value.every((item) => typeof item === itemType)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array of ${itemType}s.`;\n }\n // Items-enum (string[] option sets): closed sets reject unknown values;\n // `open` sets are advisory — any string item is legal.\n if (\n fieldSchema.type === \"string[]\" &&\n fieldSchema.values !== undefined &&\n !fieldSchema.open\n ) {\n const allowed = fieldSchema.values;\n const bad = value.find(\n (item) => typeof item === \"string\" && !allowed.includes(item),\n );\n if (bad !== undefined) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" items must be one of: ${allowed.join(\", \")}.`;\n }\n }\n return null;\n }\n\n if (fieldSchema.type === \"array\") {\n if (!Array.isArray(value)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n }\n return null;\n }\n\n if (fieldSchema.type === \"object\") {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an object.`;\n }\n const nestedKind = readObjectKind(value as Record<string, unknown>);\n if (nestedKind !== fieldSchema.kind) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be kind \"${fieldSchema.kind}\".`;\n }\n const nestedSchema = this.lookupSchema(fieldSchema.kind);\n if (!nestedSchema) {\n return `Unknown nested kind \"${fieldSchema.kind}\" on field \"${fieldName}\".`;\n }\n return this.validateObjectAgainstSchema(\n value as Record<string, unknown>,\n nestedSchema,\n ).error;\n }\n\n if (fieldSchema.type === \"inline_object\") {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an inline object.`;\n }\n return this.validateObjectAgainstFields(\n value as Record<string, unknown>,\n fieldSchema.fields,\n ).error;\n }\n\n if (fieldSchema.type === \"record\") {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be a record object.`;\n }\n return this.validateRecordObject(\n value as Record<string, unknown>,\n fieldSchema.values,\n );\n }\n\n if (fieldSchema.type === \"union\") {\n // Object union member — the value must be one of the declared kinds.\n if (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n ) {\n const kinds = fieldSchema.kinds ?? [];\n if (kinds.length === 0) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n }\n const memberKind = readObjectKind(value as Record<string, unknown>);\n if (!memberKind || !kinds.includes(memberKind)) {\n return `Field \"${fieldName}\" on kind \"${objectKind}\" must be one of kinds: ${kinds.join(\", \")}.`;\n }\n const memberSchema = this.lookupSchema(memberKind);\n if (!memberSchema) {\n return `Unknown union member kind \"${memberKind}\" on field \"${fieldName}\".`;\n }\n return this.validateObjectAgainstSchema(\n value as Record<string, unknown>,\n memberSchema,\n ).error;\n }\n return this.validateScalarField(fieldSchema, value, fieldName);\n }\n\n if (\n fieldSchema.type === \"string\" ||\n fieldSchema.type === \"number\" ||\n fieldSchema.type === \"boolean\" ||\n fieldSchema.type === \"enum\"\n ) {\n return this.validateScalarField(fieldSchema, value, fieldName);\n }\n\n return `Unsupported field schema for \"${fieldName}\".`;\n }\n\n private validateValueAgainstField(\n fieldSchema: FieldSchema,\n valueKind: \"object\" | \"array\" | \"scalar\",\n value: unknown,\n fieldName: string,\n ): string | null {\n if (fieldSchema.type === \"json\") {\n // Any placement is legal for a json-any field.\n return null;\n }\n if (fieldSchema.type === \"array\" || fieldSchema.type === \"json[]\") {\n return valueKind === \"array\"\n ? null\n : `Field \"${fieldName}\" must be an array.`;\n }\n if (\n fieldSchema.type === \"object\" ||\n fieldSchema.type === \"inline_object\"\n ) {\n return valueKind === \"object\"\n ? null\n : `Field \"${fieldName}\" must be an object.`;\n }\n if (fieldSchema.type === \"record\") {\n return valueKind === \"object\"\n ? null\n : `Field \"${fieldName}\" must be a record object.`;\n }\n if (isScalarArrayType(fieldSchema.type)) {\n return valueKind === \"array\"\n ? null\n : `Field \"${fieldName}\" must be an array.`;\n }\n if (fieldSchema.type === \"union\" && (fieldSchema.kinds?.length ?? 0) > 0) {\n // Object union members arrive as objects; scalars stay scalar-checked.\n if (valueKind === \"object\") return null;\n }\n if (valueKind !== \"scalar\") {\n return `Field \"${fieldName}\" must be a scalar.`;\n }\n return this.validateScalarField(fieldSchema, value, fieldName);\n }\n\n private validateScalarField(\n fieldSchema: FieldSchema,\n value: unknown,\n fieldName: string,\n ): string | null {\n if (value === null) {\n return fieldSchema.nullable\n ? null\n : `Field \"${fieldName}\" cannot be null.`;\n }\n\n if (fieldSchema.type === \"enum\") {\n if (typeof value !== \"string\") {\n return `Field \"${fieldName}\" must be a string.`;\n }\n // `open` — the option set is advisory (\"these OR any string\"); any\n // string value is legal. Closed enums reject unknown values.\n if (!fieldSchema.open && !fieldSchema.values.includes(value)) {\n return `Field \"${fieldName}\" must be one of: ${fieldSchema.values.join(\", \")}.`;\n }\n return null;\n }\n\n if (fieldSchema.type === \"union\") {\n const valueType = typeof value;\n if (\n valueType !== \"string\" &&\n valueType !== \"number\" &&\n valueType !== \"boolean\"\n ) {\n return `Field \"${fieldName}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n }\n if (\n !fieldSchema.scalars.includes(\n valueType as \"string\" | \"number\" | \"boolean\",\n )\n ) {\n return `Field \"${fieldName}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n }\n return null;\n }\n\n if (\n fieldSchema.type === \"string\" ||\n fieldSchema.type === \"number\" ||\n fieldSchema.type === \"boolean\"\n ) {\n if (typeof value !== fieldSchema.type) {\n return `Field \"${fieldName}\" must be ${fieldSchema.type}.`;\n }\n // Numeric bounds (inclusive, mirroring JSON Schema minimum/maximum).\n // `step` (multipleOf) stays annotation-level here — float modulo is\n // unreliable; the emitted JSON Schema gate (ajv/Pydantic) owns it.\n if (fieldSchema.type === \"number\" && typeof value === \"number\") {\n if (fieldSchema.min !== undefined && value < fieldSchema.min) {\n return `Field \"${fieldName}\" must be >= ${fieldSchema.min}.`;\n }\n if (fieldSchema.max !== undefined && value > fieldSchema.max) {\n return `Field \"${fieldName}\" must be <= ${fieldSchema.max}.`;\n }\n }\n return null;\n }\n\n return `Field \"${fieldName}\" is not a scalar.`;\n }\n\n private validateRecordScalar(\n valueType: RecordValueType,\n value: unknown,\n fieldName: string,\n ): string | null {\n if (valueType === \"json\") return null;\n if (typeof value !== valueType) {\n return `Record field \"${fieldName}\" must be ${valueType}.`;\n }\n return null;\n }\n\n private validateRecordObject(\n objectValue: Record<string, unknown>,\n valueType: RecordValueType,\n ): string | null {\n if (valueType === \"json\") return null;\n for (const [key, entry] of Object.entries(objectValue)) {\n if (typeof entry !== valueType) {\n return `Record key \"${key}\" must be ${valueType}.`;\n }\n }\n return null;\n }\n\n private validateObjectAgainstFields(\n objectValue: Record<string, unknown>,\n fields: Record<string, FieldSchema>,\n ): SchemaValidationOutcome {\n const optionalMissing: string[] = [];\n const extraFields: string[] = [];\n const emptyOutcome = { optionalMissing, extraFields };\n\n for (const [fieldName, fieldSchema] of Object.entries(fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Inline object is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\n if (!(fieldName in objectValue)) {\n optionalMissing.push(fieldName);\n }\n }\n\n for (const [fieldName, fieldValue] of Object.entries(objectValue)) {\n const fieldSchema = fields[fieldName];\n if (!fieldSchema) {\n extraFields.push(fieldName);\n continue;\n }\n\n const error = this.validateFinalFieldValue(\n fieldSchema,\n fieldValue,\n fieldName,\n \"inline_object\",\n );\n if (error) {\n return { error, optionalMissing, extraFields };\n }\n }\n\n return { error: null, optionalMissing, extraFields };\n }\n\n private registerObjectContext(path: JsonPath): void {\n const fieldSchema = this.resolveParentFieldSchema(path);\n if (!fieldSchema) return;\n\n const pathKey = this.pathKey(path);\n if (fieldSchema.type === \"inline_object\") {\n this.inlineSchemas.set(pathKey, fieldSchema.fields);\n }\n if (fieldSchema.type === \"record\") {\n this.recordSchemas.set(pathKey, fieldSchema.values);\n }\n }\n\n private resolveParentFieldSchema(path: JsonPath): FieldSchema | undefined {\n const fieldKey = this.fieldKeyFromPath(path);\n if (!fieldKey) return undefined;\n\n const parentPath = path.slice(0, -1);\n const parentKind = this.getObjectKindForPath(parentPath);\n if (!parentKind) return undefined;\n\n return this.lookupSchema(parentKind)?.fields[fieldKey];\n }\n\n private getObjectKindForPath(path: JsonPath): string | null {\n return (\n this.objectKinds.get(this.pathKey(path)) ??\n (path.length === 0 ? this.rootKind || null : null)\n );\n }\n\n private getDirectObjectKind(objectPath: JsonPath): string | null {\n if (objectPath.length === 0) {\n return this.rootKind || null;\n }\n return this.objectKinds.get(this.pathKey(objectPath)) ?? null;\n }\n\n private isAllowedSchemaField(\n objectPath: JsonPath,\n fieldKey: string,\n objectKind: string,\n ): boolean {\n const pathKey = this.pathKey(objectPath);\n const inlineFields = this.inlineSchemas.get(pathKey);\n if (inlineFields) {\n return fieldKey in inlineFields;\n }\n\n if (this.recordSchemas.has(pathKey)) {\n return true;\n }\n\n const schema = this.lookupSchema(objectKind);\n return !!schema?.fields[fieldKey];\n }\n\n private parentFieldName(path: JsonPath): string | undefined {\n if (path.length === 0) return undefined;\n const parent = path[path.length - 2];\n return typeof parent === \"string\" ? parent : undefined;\n }\n\n private fieldKeyFromPath(path: JsonPath): string | null {\n const last = path[path.length - 1];\n return typeof last === \"string\" ? last : null;\n }\n\n private isKindFieldPath(path: JsonPath): boolean {\n return path[path.length - 1] === KIND_KEY;\n }\n\n private pathKey(path: JsonPath): string {\n return path.map((segment) => String(segment)).join(\".\");\n }\n\n private lookupSchema(kind: string): KindSchema | undefined {\n return this.resolver.get(kind) ?? this.arrivedSchemas.get(kind);\n }\n\n private fail(reason: string, at: number): void {\n if (this.failed) return;\n this.failed = true;\n this.emit({ type: \"error\", reason, at });\n }\n\n private emit(event: KindStreamEvent): void {\n this.options.onEvent(event);\n }\n\n private currentFrame(): Frame | undefined {\n return this.stack[this.stack.length - 1];\n }\n}\n\nexport function createKindStreamParser(\n options: KindStreamParserOptions,\n): KindStreamParser {\n return new KindStreamParser(options);\n}\n","/**\n * Stable, fast content fingerprint for IR envelopes.\n *\n * Used as the idempotence / cache key: a persisted CanonicalBlockIR is only\n * reused when its fingerprint matches the region source text it claims to\n * represent. Not cryptographic — collision resistance at the \"same message,\n * same block\" scale is all that's required, and it must be synchronous and\n * dependency-free (runs per region on the hot streaming path).\n *\n * FNV-1a 32-bit, applied twice with different seeds and concatenated, so a\n * single 32-bit collision doesn't alias two regions.\n *\n * `createFingerprinter` is the incremental form for live streams: feeding\n * chunks one at a time yields EXACTLY the same fingerprint as\n * `fingerprintText` over the concatenation — sessions never re-hash the\n * whole source per flush.\n */\n\nconst SEED_A = 0x811c9dc5;\nconst SEED_B = 0x01000193;\n\nfunction fnv1aStep(hash: number, input: string): number {\n let h = hash >>> 0;\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i);\n // h *= 16777619 (FNV prime), in 32-bit space without BigInt.\n h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;\n }\n return h >>> 0;\n}\n\nexport interface Fingerprinter {\n push(chunk: string): void;\n /** Fingerprint of everything pushed so far. */\n current(): string;\n}\n\nexport function createFingerprinter(): Fingerprinter {\n let a = SEED_A;\n let b = SEED_B;\n let length = 0;\n\n return {\n push(chunk: string): void {\n a = fnv1aStep(a, chunk);\n b = fnv1aStep(b, chunk);\n length += chunk.length;\n },\n current(): string {\n return `${length.toString(36)}-${a.toString(36)}${b.toString(36)}`;\n },\n };\n}\n\nexport function fingerprintText(source: string): string {\n const hasher = createFingerprinter();\n hasher.push(source);\n return hasher.current();\n}\n","/**\n * Idempotent normalizer — the \"recognizes its own work\" property.\n *\n * THE LAW: anything already carrying a current CanonicalBlockIR envelope is\n * returned BY REFERENCE — zero reprocessing, reference equality holds, React\n * bails out. Only raw text (a detected region's source) is ever parsed, and\n * it is parsed exactly once per fingerprint.\n *\n * `normalizeJsonRegion` is the one-shot mode: the same KindStreamParser that\n * powers live streams, run over a complete region string (DB reloads,\n * reconcile passes), assembled through the same IrTree the live session uses\n * — stream and static output are structurally identical by construction.\n */\n\nimport { fingerprintText } from \"./fingerprint\";\nimport {\n IR_VERSION,\n type CanonicalBlockIR,\n type IrDiscriminator,\n type IrStructuredNode,\n} from \"./ir-types\";\nimport { KIND_KEY, type KindSchema } from \"./kind-schema.types\";\nimport { IrTree } from \"./ir-tree\";\nimport {\n createKindStreamParser,\n type SchemaResolver,\n} from \"./kind-parser\";\n\nexport function isCanonicalBlockIR(value: unknown): value is CanonicalBlockIR {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Partial<CanonicalBlockIR>;\n return (\n candidate.v === IR_VERSION &&\n typeof candidate.fingerprint === \"string\" &&\n typeof candidate.engine === \"string\" &&\n typeof candidate.root === \"object\" &&\n candidate.root !== null &&\n (candidate.root as IrStructuredNode).role === \"structured\"\n );\n}\n\n/**\n * The idempotence fast path: return the existing envelope by reference when\n * it still describes this source text; null means \"parse needed\".\n */\nexport function reuseEnvelopeIfCurrent(\n source: string,\n candidate: unknown,\n): CanonicalBlockIR | null {\n if (!isCanonicalBlockIR(candidate)) return null;\n return candidate.fingerprint === fingerprintText(source) ? candidate : null;\n}\n\nexport interface NormalizeJsonRegionOptions {\n schemas: Record<string, KindSchema> | SchemaResolver;\n /** Known-context root prediction (agent output schema, fence hint). */\n expectedRootKind?: string;\n /**\n * Pass a previously persisted envelope (message metadata, artifact row);\n * when its fingerprint matches, it is returned as-is and nothing parses.\n */\n existing?: unknown;\n}\n\nexport interface CompleteValueEnvelopeOptions {\n /**\n * Wire discriminator recorded on the root node — which syntax established\n * the kind. Defaults to the JSON `__kind` key; XML surfaces converging at\n * region finalize pass `xmlDiscriminator(tag)` so round-trip serializers\n * know the original arrival format.\n */\n discriminator?: IrDiscriminator;\n}\n\n/**\n * Build a resolved, complete envelope directly from an already-structured\n * value (a persisted artifact's `content.data` object, or a completed XML\n * region's strategy output). This is the zero-reprocessing rehydration path:\n * the value IS the reconstructed region value (schema fields + residue extras\n * merged at persist time), so no tokenizer/parser run is needed — the\n * envelope wraps it verbatim. The fingerprint hashes the canonical value\n * serialization, so any two paths producing the same value produce the SAME\n * envelope (stream ≡ static by construction).\n */\nexport function envelopeFromCompleteValue(\n value: Record<string, unknown>,\n kind: string,\n options?: CompleteValueEnvelopeOptions,\n): CanonicalBlockIR {\n return {\n v: IR_VERSION,\n engine: \"fe-kind-parser\",\n fingerprint: fingerprintText(JSON.stringify(value)),\n root: {\n role: \"structured\",\n kind,\n kindState: \"resolved\",\n discriminator: options?.discriminator ?? { format: \"json\", key: KIND_KEY },\n path: [],\n status: \"complete\",\n value,\n residue: null,\n },\n };\n}\n\n/** One-shot: complete region text in → canonical envelope out. */\nexport function normalizeJsonRegion(\n source: string,\n options: NormalizeJsonRegionOptions,\n): CanonicalBlockIR {\n const reused = reuseEnvelopeIfCurrent(source, options.existing);\n if (reused) return reused;\n\n const tree = new IrTree();\n const parser = createKindStreamParser({\n schemas: options.schemas,\n ...(options.expectedRootKind !== undefined && {\n expectedRootKind: options.expectedRootKind,\n }),\n onEvent(event) {\n tree.applyEvent(event);\n },\n });\n parser.push(source);\n parser.end();\n\n return tree.buildEnvelope(fingerprintText(source));\n}\n","/**\n * IrEnvelopeCache — the persisted envelope cache carried on MESSAGE PARTS.\n *\n * Phase 5 (reload without re-parse): at stream end, `assembleMessageParts`\n * stamps every completed JSON region's CanonicalBlockIR onto the committed\n * `CxTextContent.metadata.__ir` as this cache — keyed by fingerprint, because\n * one text part can embed several regions. On reload the splitter's envelope\n * memo consults the seeded cache (`registry/region-envelope-memo.ts`) and\n * reuses the persisted envelope BY REFERENCE via `reuseEnvelopeIfCurrent`\n * (exact fingerprint match of the detected region source) — zero re-parse.\n *\n * Shape discipline: the SAME `__ir` metadata key carries two shapes at two\n * levels, disambiguated by validators that reject each other —\n * - render block metadata → a single CanonicalBlockIR (`isCanonicalBlockIR`)\n * - message part metadata → this cache (`isIrEnvelopeCache`)\n *\n * Pure kernel module: types + validators only. No React/Redux/Supabase.\n */\n\nimport type { CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Cache version. Bump = migration point for persisted part caches. */\nexport const IR_ENVELOPE_CACHE_VERSION = 1 as const;\n\n/**\n * The envelope cache persisted on a message part's `metadata.__ir`.\n * `blocks` maps each region-source fingerprint to its complete envelope.\n */\nexport interface IrEnvelopeCache {\n v: typeof IR_ENVELOPE_CACHE_VERSION;\n blocks: Record<string, CanonicalBlockIR>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Strict whole-cache validation: every entry must be a complete\n * CanonicalBlockIR keyed by its OWN fingerprint. A cache failing this guard\n * came from a buggy or foreign writer — callers surface that loudly and seed\n * nothing (a half-trusted cache is how poisoned envelopes reach renderers).\n */\nexport function isIrEnvelopeCache(value: unknown): value is IrEnvelopeCache {\n if (!isRecord(value)) return false;\n if (value.v !== IR_ENVELOPE_CACHE_VERSION) return false;\n if (!isRecord(value.blocks)) return false;\n\n const entries = Object.entries(value.blocks);\n if (entries.length === 0) return false;\n for (const [fingerprint, envelope] of entries) {\n if (!isCanonicalBlockIR(envelope)) return false;\n if (envelope.fingerprint !== fingerprint) return false;\n if (envelope.root.status !== \"complete\") return false;\n }\n return true;\n}\n\n/**\n * Build the persistable cache from a run's collected envelopes. Only\n * complete envelopes are cacheable (a streaming/error envelope can never be\n * reused — its fingerprint doesn't describe a finished region). Duplicate\n * regions (same fingerprint) collapse to one entry. Engine-agnostic by\n * design: an aidream-built `engine: \"py-block-detector\"` envelope is cached\n * identically to an FE-parsed one. Returns null when nothing qualifies so\n * callers skip the metadata stamp entirely.\n */\nexport function envelopeCacheFromEnvelopes(\n envelopes: readonly CanonicalBlockIR[],\n): IrEnvelopeCache | null {\n let blocks: Record<string, CanonicalBlockIR> | null = null;\n for (const envelope of envelopes) {\n if (!isCanonicalBlockIR(envelope)) continue;\n if (envelope.root.status !== \"complete\") continue;\n (blocks ??= {})[envelope.fingerprint] = envelope;\n }\n return blocks ? { v: IR_ENVELOPE_CACHE_VERSION, blocks } : null;\n}\n","/**\n * PURE envelope ingestion — reading `metadata.__ir` off a block's metadata\n * and gating SERVER-BUILT envelopes at the wire boundary. Twin-safe: no\n * React / Redux / Supabase / host diagnostics — side effects (seeding the\n * region-envelope memo, screaming to the Error Inspector) are injected by\n * the host through `InboundEnvelopeHooks`.\n *\n * The frontend host shell is `redux/render-block-envelope.ts` (binds the\n * hooks to `seedEnvelope` + `captureError`); aidream's Workflow Studio binds\n * its own. Contract: features/content-ir/docs/PYTHON_ENVELOPE_CONTRACT.md.\n */\n\nimport { IR_ENVELOPE_KEY, type CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Read a CanonicalBlockIR envelope off a block's metadata (or anything). */\nexport function readEnvelope(\n metadata: Record<string, unknown> | null | undefined,\n): CanonicalBlockIR | null {\n const candidate = metadata?.[IR_ENVELOPE_KEY];\n return isCanonicalBlockIR(candidate) ? candidate : null;\n}\n\n/** Pure classification of inbound metadata carrying (or not) an envelope. */\nexport type InboundEnvelopeVerdict =\n | {\n /** No `__ir` key — zero-touch pass, same reference back. */\n outcome: \"absent\";\n metadata: Record<string, unknown> | undefined;\n }\n | {\n /** Valid CanonicalBlockIR — same reference back (idempotence law). */\n outcome: \"valid\";\n metadata: Record<string, unknown>;\n envelope: CanonicalBlockIR;\n }\n | {\n /** Malformed/foreign `__ir` — a COPY with `__ir` stripped. */\n outcome: \"malformed\";\n metadata: Record<string, unknown>;\n engine: string;\n raw: unknown;\n };\n\nexport function classifyInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n): InboundEnvelopeVerdict {\n if (!metadata || !(IR_ENVELOPE_KEY in metadata)) {\n return { outcome: \"absent\", metadata: metadata ?? undefined };\n }\n\n const candidate = metadata[IR_ENVELOPE_KEY];\n if (isCanonicalBlockIR(candidate)) {\n return { outcome: \"valid\", metadata, envelope: candidate };\n }\n\n const engine =\n typeof candidate === \"object\" &&\n candidate !== null &&\n typeof (candidate as { engine?: unknown }).engine === \"string\"\n ? (candidate as { engine: string }).engine\n : \"unknown\";\n\n const { [IR_ENVELOPE_KEY]: _dropped, ...rest } = metadata;\n void _dropped;\n return { outcome: \"malformed\", metadata: rest, engine, raw: candidate };\n}\n\n/** Host-injected side effects for the inbound gate. */\nexport interface InboundEnvelopeHooks {\n /** Called with every VALID envelope so later re-splits reuse it by reference. */\n seedEnvelope?: (envelope: CanonicalBlockIR) => void;\n /** Called LOUDLY for every malformed envelope — a bad envelope is a defect. */\n reportMalformed?: (info: {\n blockId: string;\n engine: string;\n raw: unknown;\n }) => void;\n}\n\n/**\n * Ingest guard for SERVER-BUILT envelopes riding `metadata.__ir` on a\n * `render_block` event.\n *\n * - No `__ir` key → the SAME metadata reference back (zero-touch pass).\n * - Valid CanonicalBlockIR → the SAME metadata reference back (reuse-by-\n * reference — the idempotence law) AND `hooks.seedEnvelope` fires so any\n * later re-split of the same region source reuses it instead of parsing.\n * - Malformed/foreign `__ir` → a COPY with `__ir` stripped, plus a loud\n * `hooks.reportMalformed`. A bad envelope must never poison kind routing\n * or the persistence cache; dropping it degrades that block to the\n * ordinary content-driven path, nothing more.\n */\nexport function sanitizeInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n context: { blockId: string },\n hooks: InboundEnvelopeHooks = {},\n): Record<string, unknown> | undefined {\n const verdict = classifyInboundEnvelopeMetadata(metadata);\n if (verdict.outcome === \"valid\") {\n hooks.seedEnvelope?.(verdict.envelope);\n return verdict.metadata;\n }\n if (verdict.outcome === \"malformed\") {\n hooks.reportMalformed?.({\n blockId: context.blockId,\n engine: verdict.engine,\n raw: verdict.raw,\n });\n return verdict.metadata;\n }\n return verdict.metadata;\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n const cloned = structuredClone(envelope.root.value);\n\n const applyExtras = (\n target: Record<string, unknown>,\n extras: Record<string, unknown> | null | undefined,\n ) => {\n if (!extras) return;\n for (const [key, value] of Object.entries(extras)) {\n target[key] = structuredClone(value);\n }\n };\n\n applyExtras(cloned, envelope.root.residue?.extra);\n\n for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n const residue = meta.residue;\n if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n const segments = pathKey.split(\".\");\n let cursor: unknown = cloned;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(segment)];\n } else if (isRecord(cursor)) {\n cursor = cursor[segment];\n } else {\n cursor = undefined;\n break;\n }\n }\n if (isRecord(cursor)) {\n applyExtras(cursor, residue.extra);\n }\n }\n\n return cloned;\n}\n\n/**\n * Deep-remove the `__kind` discriminator.\n *\n * 🚨 NOT A TRANSFORM FOR PLATFORM DATA. `__kind` is part of the data\n * (KINDS_EVERYWHERE_PLAN §4.2) and stripping it from anything stored, passed or\n * rendered was annihilated on 2026-08-23. This helper survives for exactly two\n * shapes of caller, both of which are guarded:\n * - a SYMMETRIC COMPARISON that reduces both sides and returns a boolean;\n * - legacy validation TOLERANCE against a pre-2026-08-23 schema version.\n * Guards: aidream `scripts/check_kind_marker_law.py`,\n * matrx-frontend `pnpm check:kind-marker-law`.\n */\nexport function stripKindDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripKindDeep);\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindDeep(child);\n }\n return out;\n }\n return value;\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 * ParseSession — one live region parse per stream identity.\n *\n * Owns the parser + IrTree OUTSIDE React and Redux. Writers push chunks;\n * N readers subscribe per path (useIrNode / selectors) and are notified on\n * the host's flush cadence — never per token.\n *\n * Notification contract: `write()`/`end()` never notify. The host (demo rAF\n * loop, process-stream's dispatchBatch tick) calls `flushNotify()` to publish\n * dirty paths. Late schema arrivals (registry cold fetch) notify themselves —\n * they happen outside any streaming tick.\n */\n\nimport { IrTree, type IrTreeNode } from \"../core/ir-tree\";\nimport { createFingerprinter, type Fingerprinter } from \"../core/fingerprint\";\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport type { KindSchema } from \"../core/kind-schema.types\";\nimport {\n createKindStreamParser,\n type KindStreamEvent,\n type KindStreamParser,\n type SchemaResolver,\n} from \"../core/kind-parser\";\n\nexport interface ParseSessionOptions {\n identity: string;\n schemas: Record<string, KindSchema> | SchemaResolver;\n expectedRootKind?: string;\n /**\n * Registry hook: subscribe to cold-fetch answers, return an unsubscribe.\n * The session forwards arrivals into the parser (upgrade-in-place) and\n * notifies affected readers immediately.\n */\n onSchemaArrived?: (\n deliver: (kind: string, schema: KindSchema | null) => void,\n ) => () => void;\n /** Observe every parser event (demo inspector, telemetry). */\n onEvent?: (event: KindStreamEvent) => void;\n}\n\ntype Listener = () => void;\n\nexport class ParseSession {\n readonly identity: string;\n\n private readonly parser: KindStreamParser;\n private readonly tree = new IrTree();\n private readonly listeners = new Map<string, Set<Listener>>();\n private readonly anyListeners = new Set<Listener>();\n private readonly unsubscribeSchemaArrivals: (() => void) | null;\n\n private readonly fingerprinter: Fingerprinter = createFingerprinter();\n private ended = false;\n\n constructor(options: ParseSessionOptions) {\n this.identity = options.identity;\n\n this.parser = createKindStreamParser({\n schemas: options.schemas,\n ...(options.expectedRootKind !== undefined && {\n expectedRootKind: options.expectedRootKind,\n }),\n onEvent: (event) => {\n this.tree.applyEvent(event);\n options.onEvent?.(event);\n },\n });\n\n this.unsubscribeSchemaArrivals =\n options.onSchemaArrived?.((kind, schema) => {\n this.parser.notifySchemaArrived(kind, schema);\n // Upgrades happen outside the streaming tick — publish right away.\n this.flushNotify();\n }) ?? null;\n }\n\n /** The single writer's input. Does NOT notify — host flushes on its cadence. */\n write(chunk: string): void {\n this.fingerprinter.push(chunk);\n this.parser.push(chunk);\n }\n\n end(): void {\n if (this.ended) return;\n this.ended = true;\n this.parser.end();\n }\n\n get isEnded(): boolean {\n return this.ended;\n }\n\n get status(): \"streaming\" | \"complete\" | \"error\" {\n return this.tree.status;\n }\n\n getNode(pathKey: string): IrTreeNode | null {\n return this.tree.getNode(pathKey);\n }\n\n listNodes(): IrTreeNode[] {\n return this.tree.listNodes();\n }\n\n isRawPath(pathKey: string): boolean {\n return this.tree.isRawPath(pathKey);\n }\n\n subscribe(pathKey: string, listener: Listener): () => void {\n const set = this.listeners.get(pathKey) ?? new Set();\n set.add(listener);\n this.listeners.set(pathKey, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) this.listeners.delete(pathKey);\n };\n }\n\n /** Structural subscription: fires when ANY node changes (mount lists). */\n subscribeAny(listener: Listener): () => void {\n this.anyListeners.add(listener);\n return () => {\n this.anyListeners.delete(listener);\n };\n }\n\n /** Publish dirty paths to their readers. Host-cadence, coalesced. */\n flushNotify(): void {\n if (!this.tree.hasDirty()) return;\n const dirty = this.tree.drainDirty();\n\n for (const pathKey of dirty) {\n const set = this.listeners.get(pathKey);\n if (!set) continue;\n for (const listener of set) listener();\n }\n\n if (this.anyListeners.size > 0) {\n for (const listener of this.anyListeners) listener();\n }\n }\n\n buildEnvelope(): CanonicalBlockIR {\n return this.tree.buildEnvelope(this.fingerprinter.current());\n }\n\n dispose(): void {\n this.unsubscribeSchemaArrivals?.();\n this.listeners.clear();\n this.anyListeners.clear();\n }\n}\n","/**\n * Session manager — one writer per stream identity, N readers, mechanically\n * enforced: a second `openParseSession` for a live identity THROWS. Readers\n * resolve sessions by identity and never gain write access.\n *\n * Identities: `\"{requestId}:{blockId}\"` for agent-stream regions; any unique\n * string for other hosts (demo runs, notes, one-shot upgrades).\n *\n * Ended sessions stay resolvable for late readers (reload happens via the\n * persisted envelope, but in-session remounts read here) until disposed.\n */\n\nimport { ParseSession, type ParseSessionOptions } from \"./parse-session\";\n\nconst sessions = new Map<string, ParseSession>();\n\nexport function openParseSession(options: ParseSessionOptions): ParseSession {\n const existing = sessions.get(options.identity);\n if (existing && !existing.isEnded) {\n throw new Error(\n `content-ir: a writer is already open for identity \"${options.identity}\". ` +\n \"One writer per stream identity — everyone else reads.\",\n );\n }\n existing?.dispose();\n\n const session = new ParseSession(options);\n sessions.set(options.identity, session);\n return session;\n}\n\nexport function getParseSession(identity: string): ParseSession | null {\n return sessions.get(identity) ?? null;\n}\n\nexport function disposeParseSession(identity: string): void {\n const session = sessions.get(identity);\n if (!session) return;\n session.dispose();\n sessions.delete(identity);\n}\n","/**\n * Kind ↔ content_ir storage shape — the pure, DB-free reshaping between the\n * consumed `KindSchema` and the `content_ir.kind_definition.data` array +\n * `content_ir.kind_edge` rows.\n *\n * Two exact inverses:\n * - `kindSchemaToStorage` — the MIGRATION / write direction: a parsed\n * `KindSchema` (fields Record, targets inline) → an ORDERED `data` array\n * (targets stripped) + externalized `kind_edge` specs (targets, keyed by\n * field PATH). This is what pours `flexible_data` (and future authored\n * kinds) into the canonical tables.\n * - `storageToKindSchema` — the ADAPTER / read direction: `data` array +\n * edges → the same `KindSchema` the parser/emitter consume, re-attaching\n * `object.kind` / `array.itemKinds` from the edges by path.\n *\n * Design invariants (KIND_REGISTRY_STORAGE.md §4):\n * - The `data` element is `FieldSchema` + `name`, MINUS ref targets. Order is\n * intrinsic to the array (fixes the jsonb key-reorder bug).\n * - `kind_edge` is the SINGLE source of truth for kind→kind refs: `object`\n * → one edge (position null); `array` → N edges (union) ordered by\n * `position`. `field_name` is a dot-PATH so a ref nested inside an\n * `inline_object` still gets a distinct, collision-free edge.\n * - `inline_object` is structural: its `fields` is an ordered array, it never\n * becomes a registry row and never carries `__kind`. Its nested refs DO get\n * edges (path-prefixed) so cascade/pinning see every dependency. Its\n * `open` flag persists on the element (losing it is the open-empty-object\n * defect).\n * - `union.kinds` refs externalize to edges exactly like `array.itemKinds`;\n * the stored element keeps `hasKinds: true` so lost edges scream on read.\n * - A NON-OBJECT ROOT (`KindSchema.root`) stores as ONE reserved element\n * named `ROOT_STORAGE_NAME` (\"__root\") — the only element allowed in that\n * kind's `data`. Real fields may never use the reserved name.\n *\n * NO imports of supabase / the DB — this is pure and unit-tested by round-trip\n * (`__tests__/kind-storage-transform.test.ts`).\n */\n\nimport type {\n FieldSchema,\n KindSchema,\n RecordValueType,\n} from \"../core/kind-schema.types\";\n\n/**\n * Reserved `data[]` element name for a NON-OBJECT ROOT form (`KindSchema.root`).\n * A root-form kind stores exactly one element under this name; the read\n * direction reconstructs `{ root }` instead of a field map. The write\n * direction rejects any REAL field with this name — the name is the marker.\n */\nexport const ROOT_STORAGE_NAME = \"__root\";\n\n// ---------------------------------------------------------------------------\n// Stored shapes (mirror content_ir.kind_definition.data + content_ir.kind_edge)\n// ---------------------------------------------------------------------------\n\ntype StoredFieldBase = {\n name: string;\n required?: boolean;\n nullable?: boolean;\n /** Human guidance — mirrors FieldBase.description. */\n description?: string;\n /** Default VALUE (annotation-level) — mirrors FieldBase.default. */\n default?: unknown;\n};\n\n/** One element of `kind_definition.data` — FieldSchema + name, ref targets removed. */\nexport type StoredFieldElement =\n | (StoredFieldBase & { type: \"string\" | \"boolean\" })\n | (StoredFieldBase & {\n type: \"number\";\n min?: number;\n max?: number;\n step?: number;\n })\n | (StoredFieldBase & { type: \"string[]\"; values?: string[]; open?: boolean })\n | (StoredFieldBase & { type: \"number[]\" | \"boolean[]\" })\n | (StoredFieldBase & { type: \"json\" })\n | (StoredFieldBase & { type: \"json[]\" })\n | (StoredFieldBase & { type: \"array\" }) // ref array — targets live in edges\n | (StoredFieldBase & { type: \"object\" }) // single ref — target lives in edges\n | (StoredFieldBase & {\n type: \"inline_object\";\n fields: StoredFieldElement[];\n open?: boolean;\n })\n | (StoredFieldBase & { type: \"record\"; values: RecordValueType })\n | (StoredFieldBase & { type: \"enum\"; values: string[]; open?: boolean })\n | (StoredFieldBase & {\n type: \"union\";\n scalars: Array<\"string\" | \"number\" | \"boolean\">;\n /** Marker that this union's kind refs live in edges (positions ordered). */\n hasKinds?: boolean;\n });\n\n/** One `content_ir.kind_edge` row (child resolved to an id at insert time). */\nexport type KindEdgeSpec = {\n /** Field PATH in the parent's `data` (dot-notation into inline_objects). */\n fieldPath: string;\n /** Child kind slug — insert resolves this to `child_definition_id`. */\n childKind: string;\n /** Union (anyOf) ordering for array refs; null for a single object ref. */\n position: number | null;\n};\n\n/** The full write payload for one kind: the ordered data array + its edges. */\nexport type KindStorageShape = {\n data: StoredFieldElement[];\n edges: KindEdgeSpec[];\n};\n\nexport class KindStorageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"KindStorageError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// WRITE direction: KindSchema → { data[], edges[] }\n// ---------------------------------------------------------------------------\n\nconst PATH_SEP = \".\";\n\nfunction base(field: FieldSchema): StoredFieldBase & { name: string } {\n // name is filled by the caller; required/nullable copied only when true so\n // the stored element stays minimal (matches the emitter's optional reads).\n const out: {\n name: string;\n required?: boolean;\n nullable?: boolean;\n description?: string;\n default?: unknown;\n } = {\n name: \"\",\n };\n if (field.required) out.required = true;\n if (field.nullable) out.nullable = true;\n if (field.description !== undefined) out.description = field.description;\n // `null` is a legitimate default; only ABSENCE is absence.\n if (field.default !== undefined) out.default = field.default;\n return out;\n}\n\n/**\n * Reshape a field into its stored element, pushing any ref targets into `edges`\n * keyed by the field's full path. `path` is the dot-path of THIS field.\n */\nfunction storeField(\n name: string,\n field: FieldSchema,\n path: string,\n edges: KindEdgeSpec[],\n): StoredFieldElement {\n const b = { ...base(field), name };\n\n switch (field.type) {\n case \"string\":\n case \"boolean\":\n case \"number[]\":\n case \"boolean[]\":\n case \"json\":\n case \"json[]\":\n return { ...b, type: field.type };\n\n case \"number\":\n return {\n ...b,\n type: \"number\",\n ...(field.min !== undefined ? { min: field.min } : {}),\n ...(field.max !== undefined ? { max: field.max } : {}),\n ...(field.step !== undefined ? { step: field.step } : {}),\n };\n\n case \"string[]\":\n return {\n ...b,\n type: \"string[]\",\n ...(field.values !== undefined ? { values: [...field.values] } : {}),\n ...(field.open ? { open: true } : {}),\n };\n\n case \"record\":\n return { ...b, type: \"record\", values: field.values };\n\n case \"enum\":\n return {\n ...b,\n type: \"enum\",\n values: [...field.values],\n ...(field.open ? { open: true } : {}),\n };\n\n case \"union\": {\n // Object-union members are refs → edges (positions ordered), exactly\n // like array itemKinds. `hasKinds` marks the element so the read\n // direction can scream about lost edges instead of silently narrowing.\n if (field.kinds && field.kinds.length > 0) {\n field.kinds.forEach((childKind, position) => {\n edges.push({ fieldPath: path, childKind, position });\n });\n return { ...b, type: \"union\", scalars: [...field.scalars], hasKinds: true };\n }\n return { ...b, type: \"union\", scalars: [...field.scalars] };\n }\n\n case \"object\":\n // Single ref → exactly one edge, no position.\n edges.push({ fieldPath: path, childKind: field.kind, position: null });\n return { ...b, type: \"object\" };\n\n case \"array\":\n // Ref array (union) → one edge per itemKind, ordered by position.\n field.itemKinds.forEach((childKind, position) => {\n edges.push({ fieldPath: path, childKind, position });\n });\n return { ...b, type: \"array\" };\n\n case \"inline_object\": {\n // Structural: recurse, prefixing nested paths so nested refs get their\n // own collision-free edges. Field order preserved (Object.entries).\n const fields: StoredFieldElement[] = [];\n for (const [childName, childField] of Object.entries(field.fields)) {\n fields.push(\n storeField(\n childName,\n childField,\n `${path}${PATH_SEP}${childName}`,\n edges,\n ),\n );\n }\n // `open` persists on the element — losing it is the open-empty-object\n // defect (an open {} materializing as CLOSED).\n return field.open\n ? { ...b, type: \"inline_object\", fields, open: true }\n : { ...b, type: \"inline_object\", fields };\n }\n }\n}\n\n/**\n * MIGRATION / write direction. Order of `data` follows `Object.entries(fields)`\n * — the caller supplies the KindSchema whose field order is authoritative\n * (prefer the compiled `system-kinds.ts` order for system kinds during the\n * one-time flexible_data migration; jsonb order is the fallback for user kinds).\n */\nexport function kindSchemaToStorage(schema: KindSchema): KindStorageShape {\n const data: StoredFieldElement[] = [];\n const edges: KindEdgeSpec[] = [];\n\n if (schema.root) {\n // Non-object root form: exactly one reserved element carries the root\n // field; a field map alongside it would be two contradictory shapes.\n if (Object.keys(schema.fields).length > 0) {\n throw new KindStorageError(\n `kind \"${schema.kind}\": root form and a non-empty fields map are mutually exclusive.`,\n );\n }\n data.push(storeField(ROOT_STORAGE_NAME, schema.root, ROOT_STORAGE_NAME, edges));\n return { data, edges };\n }\n\n for (const [name, field] of Object.entries(schema.fields)) {\n if (name === ROOT_STORAGE_NAME) {\n throw new KindStorageError(\n `kind \"${schema.kind}\": field name \"${ROOT_STORAGE_NAME}\" is reserved for the non-object root form.`,\n );\n }\n data.push(storeField(name, field, name, edges));\n }\n return { data, edges };\n}\n\n// ---------------------------------------------------------------------------\n// READ direction: { data[], edges[] } → KindSchema (the adapter's core)\n// ---------------------------------------------------------------------------\n\n/** Index edges by field path for O(1) re-attachment. */\nfunction indexEdges(edges: KindEdgeSpec[]): Map<string, KindEdgeSpec[]> {\n const byPath = new Map<string, KindEdgeSpec[]>();\n for (const edge of edges) {\n const list = byPath.get(edge.fieldPath);\n if (list) list.push(edge);\n else byPath.set(edge.fieldPath, [edge]);\n }\n return byPath;\n}\n\nfunction restoreField(\n element: StoredFieldElement,\n path: string,\n byPath: Map<string, KindEdgeSpec[]>,\n): FieldSchema {\n const b: {\n required?: boolean;\n nullable?: boolean;\n description?: string;\n default?: unknown;\n } = {};\n if (element.required) b.required = true;\n if (element.nullable) b.nullable = true;\n if (element.description !== undefined) b.description = element.description;\n if (element.default !== undefined) b.default = element.default;\n\n switch (element.type) {\n case \"string\":\n case \"boolean\":\n case \"number[]\":\n case \"boolean[]\":\n case \"json\":\n case \"json[]\":\n return { ...b, type: element.type };\n\n case \"number\":\n return {\n ...b,\n type: \"number\",\n ...(element.min !== undefined ? { min: element.min } : {}),\n ...(element.max !== undefined ? { max: element.max } : {}),\n ...(element.step !== undefined ? { step: element.step } : {}),\n };\n\n case \"string[]\":\n return {\n ...b,\n type: \"string[]\",\n ...(element.values !== undefined\n ? { values: [...element.values] }\n : {}),\n ...(element.open ? { open: true } : {}),\n };\n\n case \"record\":\n return { ...b, type: \"record\", values: element.values };\n\n case \"enum\":\n return {\n ...b,\n type: \"enum\",\n values: [...element.values],\n ...(element.open ? { open: true } : {}),\n };\n\n case \"union\": {\n const list = byPath.get(path) ?? [];\n if (element.hasKinds) {\n if (list.length === 0) {\n throw new KindStorageError(\n `union field \"${path}\" declares kind members (hasKinds) but has no edges.`,\n );\n }\n const kinds = [...list]\n .sort((a, z) => (a.position ?? 0) - (z.position ?? 0))\n .map((e) => e.childKind);\n return { ...b, type: \"union\", scalars: [...element.scalars], kinds };\n }\n if (list.length > 0) {\n throw new KindStorageError(\n `union field \"${path}\" has ${list.length} edge(s) but does not declare hasKinds.`,\n );\n }\n return { ...b, type: \"union\", scalars: [...element.scalars] };\n }\n\n case \"object\": {\n const list = byPath.get(path) ?? [];\n if (list.length !== 1) {\n throw new KindStorageError(\n `object field \"${path}\" must have exactly one edge, found ${list.length}.`,\n );\n }\n const [edge] = list;\n if (!edge) {\n throw new KindStorageError(\n `object field \"${path}\" must have exactly one edge, found 0.`,\n );\n }\n return { ...b, type: \"object\", kind: edge.childKind };\n }\n\n case \"array\": {\n const list = byPath.get(path) ?? [];\n if (list.length === 0) {\n throw new KindStorageError(\n `array field \"${path}\" must have at least one edge.`,\n );\n }\n const itemKinds = [...list]\n .sort((a, z) => (a.position ?? 0) - (z.position ?? 0))\n .map((e) => e.childKind);\n return { ...b, type: \"array\", itemKinds };\n }\n\n case \"inline_object\": {\n const fields: Record<string, FieldSchema> = {};\n for (const child of element.fields) {\n fields[child.name] = restoreField(\n child,\n `${path}${PATH_SEP}${child.name}`,\n byPath,\n );\n }\n return element.open\n ? { ...b, type: \"inline_object\", fields, open: true }\n : { ...b, type: \"inline_object\", fields };\n }\n }\n}\n\n/** ADAPTER / read direction — the exact inverse of `kindSchemaToStorage`. */\nexport function storageToKindSchema(\n kind: string,\n shape: KindStorageShape,\n): KindSchema {\n const byPath = indexEdges(shape.edges);\n\n // Non-object root form: the single reserved element IS the root field.\n const [first] = shape.data;\n if (first && first.name === ROOT_STORAGE_NAME) {\n if (shape.data.length !== 1) {\n throw new KindStorageError(\n `kind \"${kind}\": a \"${ROOT_STORAGE_NAME}\" element must be the only data element (found ${shape.data.length}).`,\n );\n }\n return {\n kind,\n fields: {},\n root: restoreField(first, ROOT_STORAGE_NAME, byPath),\n };\n }\n\n const fields: Record<string, FieldSchema> = {};\n for (const element of shape.data) {\n if (element.name === ROOT_STORAGE_NAME) {\n throw new KindStorageError(\n `kind \"${kind}\": \"${ROOT_STORAGE_NAME}\" must be the first and only data element.`,\n );\n }\n fields[element.name] = restoreField(element, element.name, byPath);\n }\n return { kind, fields };\n}\n","/**\n * The dual gate — Arman's law as executable code: a kind is only `is_active`\n * when its canonical `sample_data` passes BOTH systems.\n *\n * 1. Structural (Pydantic): the sample validates against the kind's\n * `emitted_json_schema`. Python's Pydantic is the AUTHORITATIVE owner of\n * this leg, but it reads the SAME materialized `emitted_json_schema` — so\n * this TS ajv check and the Python check validate the same sample against\n * the same schema and agree by construction. A disagreement IS the\n * screamer (a schema Pydantic can't express, or an ajv/Pydantic gap).\n * 2. Render (UI): the sample lights up the kind's real component. TS is the\n * AUTHORITATIVE owner of this leg. It is a PROXY for a DOM render, not a\n * DOM render. Exactly what it checks, and nothing more:\n * · the kind has something to render with (`legacyBlockType` or\n * `component`);\n * · for BRIDGED kinds, `toLegacyServerData(sample)` returns a plain\n * object that is SEMANTICALLY non-empty — see\n * `describeUnrenderableBridgeOutput` for the exact predicate;\n * · BRIDGELESS kinds pass with a recorded caveat — nothing is verified.\n *\n * This catches the 2026-07-04 \"No flashcards available yet\" class: a\n * bridge that returns `undefined`, `{}`, `{language:\"json\"}` (the raw\n * code-region annotation), or an object whose every value is empty.\n *\n * What it does NOT do — stated plainly, because a gate that overclaims is\n * worse than no gate: it does not mount the component, and it cannot know\n * WHICH key carries the payload. `{title:\"Cell Biology\", cards:[]}` passes\n * this leg on `title` alone. Proving the payload key is populated needs\n * per-kind knowledge the gate deliberately does not have; a DOM-level\n * render check is the deeper leg, deferred to an RTL harness.\n *\n * Both legs necessary, neither sufficient. Fail either → `isActive: false` and\n * the caller reports it loudly (Error Inspector, `content-ir`) and holds the\n * row out of production. This module is PURE (deps injected) so it runs in the\n * harness, in CI, and in a browser author-save alike.\n *\n * Ownership split (KIND_REGISTRY_STORAGE.md §2): the caller writes the outcome\n * to the LIVE `content_ir.kind_definition` row's `is_active`; the canonical\n * `_version_capture` trigger snapshots that state into `history.row_versions`\n * (never a post-hoc history mutation).\n */\n\nimport Ajv, { type ValidateFunction } from \"ajv\";\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport { KIND_KEY } from \"../core/kind-schema.types\";\nimport { envelopeFromCompleteValue } from \"../core/normalize\";\n\n/** The facets the render leg needs — a structural subset of KindDefinition. */\nexport interface DualGateDefinition {\n legacyBlockType?: string;\n toLegacyServerData?: (\n envelope: CanonicalBlockIR,\n ) => Record<string, unknown> | undefined;\n component?: { load: () => Promise<unknown> };\n}\n\n/**\n * The render leg's second satisfier: an ACTIVE `role='output'` component\n * resolved from `content_ir.kind_component`. Feed this from\n * `resolveComponent(kind, \"web\", \"output\")`.\n *\n * Why this exists: the render leg originally consulted only the compiled TS\n * registry, so an agent-authored kind whose renderer is a `source='db'` row was\n * structurally unable to pass — `definition` came back null and the gate said\n * \"no component\" about a kind that had a live, working one. Six authored kinds\n * (wine_tasting, employee_card, employee_roster, employee_of_the_week,\n * flashcard_deck, arman_video_prompt) sat permanently inactive because of it.\n *\n * NOT a mirror of `content_ir.evaluate_kind_activation`. The SQL render leg is\n * presence-only — it checks that an active `role='output'` row exists, because\n * SQL cannot execute a TypeScript bridge. THIS leg is strictly stronger: for a\n * compiled kind it also runs `toLegacyServerData` and rejects semantically\n * empty output (the \"No <kind> available\" class).\n *\n * The asymmetry is deliberate and bounded: SQL is the FLOOR (necessary, and\n * sufficient for DB-authored components, which own no bridge), while this leg\n * is the CEILING for compiled kinds. Consequence to know: activating a COMPILED\n * kind whose bridge is broken would pass the RPC and fail here. Compiled kinds\n * are activated by developers through `scripts/shape/activate-kinds.ts`, which\n * runs this leg — the studio control only ever reaches owner-authored kinds.\n * If that ever stops being true, the browser control must run this gate before\n * enabling its button.\n */\nexport interface DualGateResolvedComponent {\n componentKey: string;\n /** The row's own render-trust verdict (R6). Inactive rows do not satisfy. */\n isActive: boolean;\n /** \"bundled\" | \"db\" — reported in the leg detail, never gates the verdict. */\n source: string;\n}\n\n/**\n * THE FALLBACK IS NOT A COMPONENT (Arman, 2026-08-23). MUST equal\n * `GENERIC_STRUCTURED_COMPONENT_KEY` (../react/kind-route) and\n * `content_ir.evaluate_kind_activation`'s render leg. Duplicated rather than\n * imported: this registry module must not pull in the react layer.\n */\nconst GENERIC_FALLBACK_COMPONENT_KEY = \"generic_structured\";\n\n/**\n * A resolved component SATISFIES the render leg only when it is active AND is\n * not the generic fallback.\n *\n * `resolveComponent(kind, \"web\", \"output\")` ALWAYS answers — the platform\n * guarantees a kind can never fail to render, so it falls back to\n * `generic_structured`. Feeding that answer straight in (KindGateTab.tsx does)\n * made the render leg pass for every kind ever built, including kinds whose\n * only \"component\" is the key/value dump: an unfalsifiable green\n * (conversion-campaigns.md § Law 4b). The gate's own detail string was\n * literally printing `resolved bundled component \"generic_structured\"` as the\n * reason it passed.\n */\nfunction satisfies(resolved?: DualGateResolvedComponent | null): boolean {\n return Boolean(\n resolved?.isActive &&\n resolved.componentKey !== GENERIC_FALLBACK_COMPONENT_KEY,\n );\n}\n\nexport interface DualGateInput {\n kind: string;\n /** The canonical instance (kind_definition.sample_data). */\n sample: Record<string, unknown>;\n /** The materialized kind_definition.emitted_json_schema (plain, no __kind). */\n emittedJsonSchema: unknown;\n /** The registry definition for the kind (or null when unregistered). */\n definition: DualGateDefinition | null;\n /**\n * The resolver's `(kind, web, output)` answer, when the caller has one.\n * Omit (or pass null) to check the compiled registry alone.\n */\n resolvedComponent?: DualGateResolvedComponent | null;\n /**\n * True when the kind is a generated data-only contract\n * (`metadata.family` ∈ workflow_io | tool_io | action_io | agent_io).\n * Those are passed between nodes and never rendered, so the render leg is\n * structurally inapplicable — the same `n/a` doctrine the shape doctor uses.\n * Failing them would be noise, and noise erodes the gate.\n */\n dataOnly?: boolean;\n}\n\nexport interface LegResult {\n ok: boolean;\n detail?: string;\n}\n\nexport interface DualGateResult {\n /** True only when BOTH legs pass — the value the caller writes to is_active. */\n isActive: boolean;\n structural: LegResult;\n render: LegResult;\n}\n\n// ajv authoring-strictness is OFF (tolerate provider schema keywords like the\n// recursive \"#\" root ref); DATA strictness comes from the schema itself\n// (additionalProperties:false + required), which ajv enforces during validate.\nconst ajv = new Ajv({ allErrors: true, strict: false });\n\n/**\n * BACKWARD-COMPATIBILITY TOLERANCE ONLY — never the contract.\n *\n * This existed because `emitted_json_schema` was the marker-free \"wire\" export:\n * the dead doctrine held that `__kind` was envelope framing injected at emit\n * time, so a sample had to be stripped to validate. That doctrine is GONE\n * (Arman, 2026-08-23): every kind schema now DECLARES `__kind` at every object\n * position — const + required where the kind is known — so a marked sample\n * validates AS-IS and stripping it is not a no-op, it is a FAILURE\n * (`must have required property '__kind'`).\n *\n * So the strip is a SECOND ATTEMPT, never the first one: the leg validates the\n * caller's value verbatim, and only if that fails retries a marker-free LOCAL\n * copy, so a row still pinned to a pre-2026-08-23 marker-free schema keeps\n * validating while it is repinned. The caller's value is never touched. Delete\n * it once no live row pins a marker-free version. KINDS_EVERYWHERE_PLAN §4.2.\n */\nfunction stripKind(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripKind);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (k === KIND_KEY) continue;\n out[k] = stripKind(v);\n }\n return out;\n }\n return value;\n}\n\nfunction describeAjvErrors(errors: ValidateFunction[\"errors\"]): string[] {\n return (errors ?? [])\n .map((e) => `${e.instancePath || \"(root)\"} ${e.message ?? \"\"}`.trim())\n .slice(0, 8);\n}\n\n/** True when the root schema declares the `__kind` marker as a property. */\nfunction schemaDeclaresKind(emittedJsonSchema: unknown): boolean {\n if (!emittedJsonSchema || typeof emittedJsonSchema !== \"object\") return false;\n const properties = (emittedJsonSchema as Record<string, unknown>).properties;\n return (\n !!properties &&\n typeof properties === \"object\" &&\n KIND_KEY in (properties as Record<string, unknown>)\n );\n}\n\n/**\n * The structural leg, exported on its own so the shape doctor\n * (`shape-doctor.ts`) RECOMPUTES gate validation with the exact same ajv\n * config + marker semantics as activation (verbatim first, marker-free retry\n * second) — never a parallel validator. `sample` is `unknown` (not `Record`) because kind examples may\n * legitimately be scalars/arrays (workflow I/O kinds like `text`/`number`).\n */\nexport function validateStructuralLeg(\n sample: unknown,\n emittedJsonSchema: unknown,\n): LegResult {\n let validate: ValidateFunction;\n try {\n validate = ajv.compile(emittedJsonSchema as object);\n } catch (err) {\n return {\n ok: false,\n detail: `emitted_json_schema failed to compile: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n // The marker is DATA: validate exactly what the caller holds. Only if that\n // fails do we retry the marker-free reduction, for a value still pinned to a\n // pre-2026-08-23 schema that never declared `__kind` (see `stripKind`).\n if (validate(sample)) return { ok: true };\n const markedErrors = describeAjvErrors(validate.errors);\n if (validate(stripKind(sample))) return { ok: true };\n const strippedErrors = describeAjvErrors(validate.errors);\n\n // Report the attempt that matches the schema in hand, so the message names\n // the real defect instead of the fallback's collateral damage.\n const errors = schemaDeclaresKind(emittedJsonSchema)\n ? markedErrors\n : strippedErrors;\n return { ok: false, detail: `sample failed schema: ${errors.join(\"; \")}` };\n}\n\n/**\n * Keys a bridge may emit that carry NO kind content — pure region annotation.\n *\n * `language` is the sole member, and it is here because of a real, shipped bug.\n * `StreamBlockAccumulator.buildBlockData()` emits `data: { language: \"json\" }`\n * for an UNTYPED code region (a bare ```json fence), and\n * `render-block-to-content-block.ts` maps `rb.data` → `block.serverData`. That\n * annotation therefore arrives downstream as a TRUTHY `serverData` holding zero\n * kind data. On 2026-07-04 it reached the flashcards component in place of\n * `cards` and rendered \"No flashcards available yet\" (see `react/kind-route.ts`,\n * which now REPLACES or CLEARS it rather than forwarding it).\n *\n * This list only removes keys from the \"is anything substantive here?\" tally —\n * it never fails a bridge on its own. A kind whose serverData is\n * `{ language: \"python\", code: \"...\" }` still passes, on `code`. Only a bridge\n * whose ENTIRE output is annotation has produced nothing renderable.\n *\n * Add a key here only with evidence that the region-annotation path emits it and\n * that it can never itself be kind content.\n */\nconst SERVER_DATA_ANNOTATION_KEYS: ReadonlySet<string> = new Set([\"language\"]);\n\n/** serverData is JSON-shaped; this only guards pathological/cyclic nesting. */\nconst SUBSTANCE_DEPTH_LIMIT = 8;\n\n/**\n * Is `value` real content that a component could render?\n *\n * string → non-empty after trim (\"\" and \" \" are not content)\n * number → any finite number (0 IS content: `completedItems: 0`)\n * boolean → always (false IS content: `isComplete: false`)\n * array → ≥1 substantive ELEMENT ([] and [\"\"] are not content)\n * object → ≥1 substantive VALUE ({} and {a:\"\"} are not content)\n * null | undefined | NaN | function | symbol | bigint → never content\n *\n * Recursive by design: `{ data: { items: [] } }` is structurally present and\n * semantically empty, and telling those two apart is this leg's entire job.\n */\nfunction isSubstantiveValue(value: unknown, depth = 0): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value === \"boolean\") return true;\n // Deep AND present — stop descending rather than claim it is empty.\n if (depth >= SUBSTANCE_DEPTH_LIMIT) return true;\n if (Array.isArray(value)) {\n return value.some((entry) => isSubstantiveValue(entry, depth + 1));\n }\n if (typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).some((entry) =>\n isSubstantiveValue(entry, depth + 1),\n );\n }\n return false;\n}\n\n/**\n * The render leg's real predicate: why is this bridge output NOT renderable?\n * Returns a specific reason, or `null` when the output is genuinely renderable.\n *\n * `serverData` is typed `unknown` on purpose — the facet's declared return type\n * is a promise the gate must not take on faith; a bridge is ordinary code that\n * can return anything at runtime.\n *\n * Renderable ⇔ a non-null, non-array object with at least one key that is not\n * pure annotation AND whose value is substantive (see `isSubstantiveValue`).\n */\nfunction describeUnrenderableBridgeOutput(serverData: unknown): string | null {\n if (serverData === undefined || serverData === null) {\n return \"bridge returned no serverData (undefined)\";\n }\n if (typeof serverData !== \"object\") {\n return `bridge returned a non-object serverData (${typeof serverData})`;\n }\n if (Array.isArray(serverData)) {\n return \"bridge returned an array, not a serverData record\";\n }\n\n const record = serverData as Record<string, unknown>;\n const keys = Object.keys(record);\n if (keys.length === 0) return \"bridge returned an empty object ({})\";\n\n const contentKeys = keys.filter((key) => !SERVER_DATA_ANNOTATION_KEYS.has(key));\n if (contentKeys.length === 0) {\n return `bridge returned only annotation keys [${keys.join(\", \")}] — that is the raw code-region annotation, not kind data`;\n }\n if (!contentKeys.some((key) => isSubstantiveValue(record[key]))) {\n return `bridge returned serverData whose every content value is empty (keys: ${contentKeys.join(\", \")}) — structurally present, semantically empty`;\n }\n return null;\n}\n\nfunction validateRender(\n kind: string,\n sample: Record<string, unknown>,\n definition: DualGateDefinition | null,\n resolvedComponent?: DualGateResolvedComponent | null,\n dataOnly?: boolean,\n): LegResult {\n // Data-only contract kinds are never rendered — the leg is n/a, not failed.\n if (dataOnly) {\n return {\n ok: true,\n detail:\n \"data-only contract kind — render leg is structurally inapplicable (n/a)\",\n };\n }\n\n // ORDER IS LOAD-BEARING. The compiled-bridge check below is the STRONGEST\n // satisfier — it actually exercises the bridge and catches the\n // \"No <kind> available\" class (the 2026-07-04 flashcards regression). Every\n // compiled kind also owns a `source='bundled'` kind_component row, so\n // checking `resolvedComponent` first would short-circuit past the bridge for\n // exactly the kinds that guard protects, silently disabling it. The resolved\n // component is therefore the LAST resort, not the first.\n // \"Only the fallback resolved\" is a DIFFERENT repair from \"nothing resolved\"\n // (author a component AND retire the decoy vs. just author one), so the\n // detail says which — mirroring evaluate_kind_activation's two branches.\n const onlyFallback =\n resolvedComponent?.isActive &&\n resolvedComponent.componentKey === GENERIC_FALLBACK_COMPONENT_KEY;\n const noComponentDetail = onlyFallback\n ? `the only active role='output' component for kind \"${kind}\" is ` +\n `'${GENERIC_FALLBACK_COMPONENT_KEY}' — that IS the generic viewer, i.e. no ` +\n `component. A reader would get a key/value dump. Author a real ` +\n `source='db' component (or register a compiled one), then retire the ` +\n `generic row.`\n : null;\n\n if (!definition && !satisfies(resolvedComponent)) {\n return {\n ok: false,\n detail:\n noComponentDetail ??\n `kind \"${kind}\" has no component (not in the compiled registry, and no active role='output' kind_component row) — nothing to render`,\n };\n }\n\n if (\n definition &&\n !definition.legacyBlockType &&\n !definition.component &&\n !definition.toLegacyServerData &&\n !satisfies(resolvedComponent)\n ) {\n return {\n ok: false,\n detail:\n noComponentDetail ??\n `kind \"${kind}\" has no component (no compiled legacyBlockType/component facet, and no active role='output' kind_component row) — nothing to render`,\n };\n }\n\n // Bridged kinds: the bridge MUST derive real serverData from the sample.\n if (definition?.toLegacyServerData) {\n let serverData: Record<string, unknown> | undefined;\n try {\n serverData = definition.toLegacyServerData(\n envelopeFromCompleteValue(sample, kind),\n );\n } catch (err) {\n return {\n ok: false,\n detail: `toLegacyServerData threw: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n const problem = describeUnrenderableBridgeOutput(serverData);\n if (problem) {\n return {\n ok: false,\n detail: `${problem} (the \"No ${kind} available\" failure)`,\n };\n }\n return { ok: true };\n }\n\n // Bridgeless kinds parse their own content — the bridge-data proxy can't\n // verify them; a full DOM render check is the deeper leg (deferred to an RTL\n // harness). Pass with a recorded caveat so it's never silently \"fully gated\",\n // and name the satisfier so a reader can tell a compiled bridgeless component\n // from a DB-authored one without re-deriving it.\n const satisfier = definition?.legacyBlockType\n ? `compiled component \"${definition.legacyBlockType}\"`\n : definition?.component\n ? \"compiled component facet\"\n : satisfies(resolvedComponent) && resolvedComponent\n ? `resolved ${resolvedComponent.source} component \"${resolvedComponent.componentKey}\"`\n : \"component\";\n return {\n ok: true,\n detail: `bridgeless kind — ${satisfier} parses content itself; full DOM render check deferred to an RTL harness`,\n };\n}\n\nexport function runKindDualGate(input: DualGateInput): DualGateResult {\n const structural = validateStructuralLeg(input.sample, input.emittedJsonSchema);\n const render = validateRender(\n input.kind,\n input.sample,\n input.definition,\n input.resolvedComponent,\n input.dataOnly,\n );\n return { isActive: structural.ok && render.ok, structural, render };\n}\n\n/**\n * One-line, Error-Inspector-ready reason for a failed gate (empty string when\n * it passed). The caller feeds this to `captureError({ source: \"content-ir\" })`\n * and sets `is_active=false`.\n */\nexport function describeDualGateFailure(\n kind: string,\n result: DualGateResult,\n): string {\n if (result.isActive) return \"\";\n const parts: string[] = [];\n if (!result.structural.ok) {\n parts.push(`structural(Pydantic): ${result.structural.detail ?? \"failed\"}`);\n }\n if (!result.render.ok) {\n parts.push(`render(UI): ${result.render.detail ?? \"failed\"}`);\n }\n return `kind \"${kind}\" failed the dual gate — ${parts.join(\" | \")}`;\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 const raw = node.type;\n if (typeof raw === \"string\") {\n return { type: raw === \"integer\" ? \"number\" : raw, nullable: false };\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 primary =\n types.find((t) => t !== \"null\") ??\n (nullable && types.length === 1 ? \"null\" : null);\n if (primary === \"integer\") {\n return { type: \"number\", nullable };\n }\n return { type: primary ?? null, nullable };\n }\n if (node.enum) return { type: \"string\", nullable: false };\n if (node.properties) return { type: \"object\", nullable: false };\n if (node.items) return { type: \"array\", nullable: false };\n return { type: null, nullable: false };\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\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 const converted = convertProperty(\n propName,\n propNode,\n memberRequired.has(propName),\n `${path}.${propName}`,\n ctx,\n );\n if (converted) fields[propName] = converted;\n }\n ctx.blockSchemas.push({\n slug: declaredKind,\n label: formatBlockLabel(declaredKind),\n fields,\n });\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 ctx.problems.push({\n severity: \"error\",\n path,\n message: `$ref is not supported (\"${node.$ref}\"). Inline the schema manually.`,\n });\n return null;\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 ctx.problems.push({\n severity: \"error\",\n path,\n message: `$ref inside anyOf/oneOf is not supported (\"${variant.$ref}\"). Inline the schema manually.`,\n });\n unsupported = true;\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 } = resolvePrimaryType(node);\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: {} — 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 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.\",\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 const converted = convertProperty(\n propName,\n propNode,\n itemRequired.has(propName),\n `${path}[].${propName}`,\n ctx,\n );\n if (converted) {\n itemFields[propName] = converted;\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 const converted = convertProperty(\n propName,\n propNode,\n nestedRequired.has(propName),\n `${path}.${propName}`,\n ctx,\n );\n if (converted) {\n nestedFields[propName] = converted;\n }\n }\n\n const referencedKind = readBlockKindFromProperties(node.properties);\n\n if (referencedKind) {\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 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 ctx: ConvertContext = {\n schemaName,\n strict,\n problems: [],\n droppedMetadata: [],\n blockSchemas: [],\n arrayBindings: [],\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 const converted = convertProperty(\n fieldName,\n fieldNode,\n required.has(fieldName),\n fieldName,\n ctx,\n );\n if (converted) {\n convertedFields[fieldName] = converted;\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 * Streaming partial kinds — the TS twin of the Python producer's contract.\n *\n * Cross-repo system-of-record (read it before changing anything here):\n * `common-docs/systems/content-ir-system/STREAMING_PARTIAL_KINDS.md`.\n * Python twin: `aidream/packages/matrx-graph/matrx_graph/content_ir/partial.py`.\n *\n * WHAT THIS IS\n * ------------\n * While a structured region streams, the server announces what it thinks the\n * region IS and what has arrived so far, so the UI fills in progressively\n * instead of showing a spinner until the closing brace. Three events, a CLOSED\n * union on `state`, all riding `metadata.__ir_partial` on the `render_block`\n * events this app already receives:\n *\n * partial — repeatable. A provisional instance whose `root.value` is\n * VALID, CLOSED JSON (the server truncates and closes it, so\n * this side never repairs or guesses). `kindState` is\n * \"speculative\": it MAY still turn out to be something else.\n * superseded — TERMINAL. The region completed as the announced kind; drop\n * the provisional render, the block's own content/`__ir` is the\n * truth.\n * retracted — TERMINAL escape hatch. Detection was wrong; `becameKind` /\n * `becameBlockType` name what it actually is. Never a silent\n * swap.\n *\n * WHY IT IS NOT ON `__ir`\n * -----------------------\n * `__ir` means \"validated against the registered schema\", and a valid `__ir`\n * is SEEDED into the fingerprint-keyed envelope memo. A provisional value\n * there would poison every later read of that region. The two channels never\n * touch: `classifyInboundEnvelopeMetadata` sees `absent` for a partial and\n * passes the metadata through by reference.\n *\n * Pure kernel module: types + validators only. No React, no Redux, no IO.\n * Lives in @ai-matrx/content-ir `wire/` so EVERY UI (Matrix, Workflow Studio,\n * the dashboard, the Chrome extension, the desktop app) reads the channel\n * through the same reader.\n */\n\nimport { IR_VERSION } from \"../core/ir-types\";\nimport type { IrDiscriminator, IrPath, IrResidue } from \"../core/ir-types\";\n\n/** The reserved metadata key carrying every event of this contract. */\nexport const IR_PARTIAL_KEY = \"__ir_partial\" as const;\n\nexport type PartialKindState = \"partial\" | \"superseded\" | \"retracted\";\n\nconst PARTIAL_STATES: readonly PartialKindState[] = [\n \"partial\",\n \"superseded\",\n \"retracted\",\n];\n\n/** The provisional node. Deliberately `IrStructuredNode`-shaped so existing IR readers work. */\nexport interface PartialKindNode {\n role: \"structured\";\n /** The server's DETECTION GUESS for this region. */\n kind: string;\n /** Always \"speculative\" on a partial — pre-recognition, not a resolved kind. */\n kindState: \"speculative\";\n discriminator: IrDiscriminator;\n path: IrPath;\n status: \"streaming\";\n /**\n * Valid, closed JSON carrying its own `__kind`. MAY be missing required\n * schema fields — that is what `partial_unvalidated` in `residue.notices`\n * says. A renderer that throws on an absent field is not partial-ready and\n * must not be routed a provisional value.\n */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n}\n\nexport interface PartialKindEvent {\n v: typeof IR_VERSION;\n engine: string;\n state: \"partial\";\n /** Monotonic PER BLOCK — the ordering / staleness key. Keep the highest. */\n seq: number;\n fingerprint: string;\n root: PartialKindNode;\n}\n\nexport interface SupersededKindEvent {\n v: typeof IR_VERSION;\n engine: string;\n state: \"superseded\";\n seq: number;\n kind: string;\n}\n\nexport interface RetractedKindEvent {\n v: typeof IR_VERSION;\n engine: string;\n state: \"retracted\";\n seq: number;\n /** The kind that was WRONGLY announced. */\n kind: string;\n reason: string;\n /** What it actually is — null when it resolved to no registered kind. */\n becameKind: string | null;\n /** The detector's final block type, so a consumer re-routes without guessing. */\n becameBlockType: string | null;\n}\n\nexport type AnyPartialKindEvent =\n | PartialKindEvent\n | SupersededKindEvent\n | RetractedKindEvent;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readPath(value: unknown): IrPath | null {\n if (!Array.isArray(value)) return null;\n return value.every(\n (segment) => typeof segment === \"string\" || typeof segment === \"number\",\n )\n ? value\n : null;\n}\n\nfunction readDiscriminator(value: unknown): IrDiscriminator | null {\n if (!isRecord(value)) return null;\n if (value.format === \"json\" && value.key === \"__kind\") {\n return { format: \"json\", key: \"__kind\" };\n }\n if (value.format === \"xml\" && typeof value.tag === \"string\") {\n return { format: \"xml\", tag: value.tag };\n }\n if (value.format === \"fence\" && typeof value.language === \"string\") {\n return { format: \"fence\", language: value.language };\n }\n return null;\n}\n\nfunction readResidue(value: unknown): IrResidue | null | undefined {\n if (value === null) return null;\n if (!isRecord(value)) return undefined;\n const extra = value.extra;\n const optionalMissing = value.optionalMissing;\n const notices = value.notices;\n if (extra !== null && !isRecord(extra)) return undefined;\n if (\n optionalMissing !== null &&\n (!Array.isArray(optionalMissing) ||\n !optionalMissing.every((item) => typeof item === \"string\"))\n ) {\n return undefined;\n }\n if (\n notices !== null &&\n (!Array.isArray(notices) ||\n !notices.every(\n (notice) =>\n isRecord(notice) &&\n typeof notice.code === \"string\" &&\n typeof notice.message === \"string\" &&\n (notice.at === undefined || typeof notice.at === \"number\"),\n ))\n ) {\n return undefined;\n }\n return { extra, optionalMissing, notices };\n}\n\n/**\n * Read + validate a partial-channel event off a block's metadata.\n *\n * Returns null for anything malformed, foreign, or of an unknown `state`. A\n * malformed partial degrades to \"no live rendering\" — never to a wrong render,\n * and never to a thrown error inside a stream handler.\n */\nexport function readPartialKindEvent(\n metadata: Record<string, unknown> | null | undefined,\n): AnyPartialKindEvent | null {\n if (!isRecord(metadata)) return null;\n const candidate = metadata[IR_PARTIAL_KEY];\n if (!isRecord(candidate)) return null;\n if (candidate.v !== IR_VERSION) return null;\n if (typeof candidate.engine !== \"string\") return null;\n if (typeof candidate.seq !== \"number\" || !Number.isFinite(candidate.seq)) {\n return null;\n }\n\n const state = candidate.state;\n if (typeof state !== \"string\") return null;\n if (!PARTIAL_STATES.includes(state as PartialKindState)) return null;\n\n if (state === \"partial\") {\n const root = candidate.root;\n if (!isRecord(root)) return null;\n if (root.role !== \"structured\") return null;\n if (root.status !== \"streaming\") return null;\n if (root.kindState !== \"speculative\") return null;\n if (typeof root.kind !== \"string\" || !root.kind) return null;\n if (!isRecord(root.value)) return null;\n const discriminator = readDiscriminator(root.discriminator);\n const path = readPath(root.path);\n const residue = readResidue(root.residue);\n if (discriminator === null || path === null || residue === undefined) {\n return null;\n }\n return {\n v: IR_VERSION,\n engine: candidate.engine,\n state: \"partial\",\n seq: candidate.seq,\n fingerprint:\n typeof candidate.fingerprint === \"string\" ? candidate.fingerprint : \"\",\n root: {\n role: \"structured\",\n kind: root.kind,\n kindState: \"speculative\",\n discriminator,\n path,\n status: \"streaming\",\n value: root.value,\n residue,\n },\n };\n }\n\n if (typeof candidate.kind !== \"string\" || !candidate.kind) return null;\n\n if (state === \"superseded\") {\n return {\n v: IR_VERSION,\n engine: candidate.engine,\n state: \"superseded\",\n seq: candidate.seq,\n kind: candidate.kind,\n };\n }\n\n if (typeof candidate.reason !== \"string\" || !candidate.reason) return null;\n if (\n candidate.becameKind !== null &&\n typeof candidate.becameKind !== \"string\"\n ) {\n return null;\n }\n if (\n candidate.becameBlockType !== null &&\n typeof candidate.becameBlockType !== \"string\"\n ) {\n return null;\n }\n return {\n v: IR_VERSION,\n engine: candidate.engine,\n state: \"retracted\",\n seq: candidate.seq,\n kind: candidate.kind,\n reason: candidate.reason,\n becameKind: candidate.becameKind,\n becameBlockType: candidate.becameBlockType,\n };\n}\n\n/**\n * Ingest guard for the partial channel on a `render_block` event — the twin of\n * `sanitizeInboundEnvelopeMetadata` for `__ir`, and it exists for the same\n * reason: a malformed server event must be stripped at the wire boundary, not\n * carried into Redux where every later reader has to re-decide whether to\n * trust it.\n *\n * - no `__ir_partial` key → the SAME metadata reference back (zero-touch).\n * - valid event → the SAME metadata reference back (idempotence law).\n * - malformed → a COPY with the key stripped, plus a loud `reportMalformed`.\n * Dropping it degrades that block to \"no live rendering\" and nothing more.\n *\n * Pure: the host injects the reporter, exactly like the envelope gate, so\n * aidream's Workflow Studio can bind its own.\n */\nexport function sanitizeInboundPartialKindMetadata(\n metadata: Record<string, unknown> | null | undefined,\n context: { blockId: string },\n hooks: {\n reportMalformed?: (info: { blockId: string; raw: unknown }) => void;\n } = {},\n): Record<string, unknown> | undefined {\n if (!isRecord(metadata) || !(IR_PARTIAL_KEY in metadata)) {\n return metadata ?? undefined;\n }\n if (readPartialKindEvent(metadata) !== null) return metadata;\n\n const { [IR_PARTIAL_KEY]: raw, ...rest } = metadata;\n hooks.reportMalformed?.({ blockId: context.blockId, raw });\n return rest;\n}\n\n/** Narrowing helper: is this the repeatable provisional event? */\nexport function isProvisionalKind(\n event: AnyPartialKindEvent | null,\n): event is PartialKindEvent {\n return event !== null && event.state === \"partial\";\n}\n\n/**\n * Narrowing helper: is this a TERMINAL event? Every partial ends in exactly\n * one of these — that law is what makes a stuck skeleton impossible, so a\n * consumer clears its provisional render here and nowhere else.\n */\nexport function isTerminalKindEvent(\n event: AnyPartialKindEvent | null,\n): event is SupersededKindEvent | RetractedKindEvent {\n return (\n event !== null && (event.state === \"superseded\" || event.state === \"retracted\")\n );\n}\n\n/**\n * Per-block staleness gate. Events can be re-dispatched, replayed on reconnect,\n * or arrive out of order; only a strictly higher `seq` advances a block.\n * Returns null when the event should be ignored.\n *\n * Pure: the caller owns the `seen` map, so this composes into a reducer\n * without hiding module state.\n */\nexport function advancePartialKind(\n seen: Record<string, number>,\n blockId: string,\n event: AnyPartialKindEvent | null,\n): AnyPartialKindEvent | null {\n if (event === null) return null;\n const last = seen[blockId];\n if (last !== undefined && event.seq <= last) return null;\n return event;\n}\n\n/**\n * The per-block staleness GATE, as a stateful closure over `advancePartialKind`\n * — one per stream.\n *\n * `upsertRenderBlock` REPLACES the stored block, so an event landing on a block\n * would regress what the user is looking at (a filled-in quiz snapping back to\n * two questions, or a terminal being undone by a late `partial`). The highest\n * accepted event is CARRIED FORWARD rather than dropped, so it is a no-op on\n * screen instead of a flicker back to the skeleton.\n *\n * 🚨 TWO arrivals must be carried, and the second one is the common case:\n *\n * 1. A STALE key — a replay or an out-of-order event (`seq <= last`).\n * 2. **NO key at all.** The producer clears `__ir_partial` at the top of every\n * stamp and re-adds it only when the value genuinely advanced\n * (`stream_processor.py::_stamp_partial` → `_partials.advanced(...)`), so\n * it is CORRECT for it to omit the key — re-shipping an identical payload\n * every token is pure wire cost. But the block still ships whole, and\n * replacing the stored block with one that has no partial metadata is what\n * made the provisional render vanish between advances: every non-advancing\n * token dropped the user back to the pending skeleton.\n *\n * Carrying stops at the TERMINAL, and only there. After `superseded` /\n * `retracted` the region's truth is its own content or `__ir`, so resurrecting\n * a provisional value would be a lie that outlives its own contract.\n *\n * Returns the metadata to store: the same reference when nothing changed, a\n * copy with the carried-forward event otherwise.\n */\nexport function makePartialKindStalenessGate(): (\n blockId: string,\n metadata: Record<string, unknown> | undefined,\n) => Record<string, unknown> | undefined {\n const seen: Record<string, number> = {};\n const lastAccepted: Record<string, unknown> = {};\n const terminated: Record<string, true> = {};\n\n return (blockId, metadata) => {\n if (!isRecord(metadata)) return metadata;\n\n if (!(IR_PARTIAL_KEY in metadata)) {\n // The producer omitted the key because nothing advanced. Keep showing the\n // last provisional value — unless this block already terminated, in which\n // case its own content/`__ir` is the truth and the partial must stay gone.\n const open = lastAccepted[blockId];\n if (terminated[blockId] || open === undefined) return metadata;\n return { ...metadata, [IR_PARTIAL_KEY]: open };\n }\n // Anything malformed was stripped by `sanitizeInboundPartialKindMetadata`\n // at the same boundary, so a key still present here reads as valid.\n const parsed = readPartialKindEvent(metadata);\n if (parsed === null) return metadata;\n\n if (advancePartialKind(seen, blockId, parsed) !== null) {\n seen[blockId] = parsed.seq;\n // The highest accepted event is always retained — including a TERMINAL,\n // so a replayed `partial` arriving after it is suppressed by the terminal\n // rather than re-opening a closed region.\n lastAccepted[blockId] = metadata[IR_PARTIAL_KEY];\n if (isTerminalKindEvent(parsed)) terminated[blockId] = true;\n return metadata;\n }\n\n const carried = lastAccepted[blockId];\n if (carried === undefined || carried === metadata[IR_PARTIAL_KEY]) {\n return metadata;\n }\n return { ...metadata, [IR_PARTIAL_KEY]: carried };\n };\n}\n","/**\n * Runtime wrapper kinds — the reader, and THE elision gate.\n *\n * Cross-repo contract (system of record):\n * `common-docs/systems/content-ir-system/RUNTIME_WRAPPER_WIRE.md`.\n *\n * A runtime wrapper is the CLOSED set of envelopes that carry instance\n * context with a data kind NESTED inside: `node_outcome` (one settled node\n * invocation) and `run_result` (one terminated run, nesting one\n * `node_outcome` per terminal node). `tool_result` is registered server-side\n * but nothing emits it yet, so nothing here reads it.\n *\n * ## THE ELISION RULE — do it ONCE, here\n *\n * The payload is NEVER sent twice. On the wire `output` is `null` and\n * `output_ref` names the FRAME field that already holds the value:\n *\n * - `\"output\"` → the frame's own `output` (`node_completed.output`,\n * the run row's `output`).\n * - `\"output.<node_id>\"` → that key of the frame's terminal output map.\n *\n * PRESENCE OF `output_ref` IS THE MARKER. A bare `output: null` with NO ref is\n * a legitimately empty payload — never an elision, never something to go\n * looking for. This is the same rule the `__ir` envelope follows with\n * `value_ref`, for the same reason: otherwise every payload is serialized\n * twice per streamed event, twice per durable row and twice per run read.\n *\n * Rehydration happens at the single INGEST GATE (each host's one ingest point —\n * Matrix's workflow-runs reducer, the Studio's inbound-envelope gate),\n * before anything reads the wrapper. No renderer, selector or component ever\n * sees an un-rehydrated wrapper, so none of them may re-implement this.\n *\n * ## Never load-bearing\n *\n * Assembly is a pure read. A malformed wrapper yields `null` and the frame's\n * own fields carry the surface exactly as they did before the wrapper\n * existed — additive on the wire, additive here.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\n\n/** The registered slugs — named once, never spelled by hand elsewhere. */\nexport const NODE_OUTCOME_KIND = \"node_outcome\";\nexport const RUN_RESULT_KIND = \"run_result\";\n\n/** One settled node invocation, with its data kind nested in `output`. */\nexport interface NodeOutcomeWrapper {\n __kind: typeof NODE_OUTCOME_KIND;\n run_id: string;\n node_id: string;\n workflow_id: string | null;\n step: number | null;\n attempt: number;\n status: string;\n started_at: string | null;\n ended_at: string | null;\n /** `0` is a REAL duration, not \"unknown\"; `null` is unknown. */\n duration_ms: number | null;\n /** null = the node declared no kind (a loud defect, never a pass). */\n output_kind: string | null;\n /** null = never checked / degraded — NEVER renderable as a pass. */\n output_kind_ok: boolean | null;\n output_kind_errors: string[] | null;\n /** Rehydrated by {@link rehydrateNodeOutcome}; null = genuinely empty. */\n output: unknown;\n}\n\n/** One terminated run. `outputs` is one wrapper per TERMINAL node. */\nexport interface RunResultWrapper {\n __kind: typeof RUN_RESULT_KIND;\n run_id: string;\n workflow_id: string | null;\n status: string;\n started_at: string | null;\n ended_at: string | null;\n duration_ms: number | null;\n output_kind: string | null;\n output: unknown;\n outputs: NodeOutcomeWrapper[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction str(source: Record<string, unknown>, key: string): string | null {\n const value = source[key];\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction num(source: Record<string, unknown>, key: string): number | null {\n const value = source[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction bool(source: Record<string, unknown>, key: string): boolean | null {\n const value = source[key];\n return typeof value === \"boolean\" ? value : null;\n}\n\nfunction strings(\n source: Record<string, unknown>,\n key: string,\n): string[] | null {\n const value = source[key];\n if (!Array.isArray(value)) return null;\n const out = value.filter((item): item is string => typeof item === \"string\");\n return out.length > 0 ? out : null;\n}\n\n/**\n * Resolve a dotted `output_ref` against the frame that carries the payload.\n * Returns `undefined` when the path does not resolve — the caller keeps\n * `output: null` rather than inventing a value.\n */\nexport function readOutputRef(frame: unknown, ref: string): unknown {\n let cursor: unknown = frame;\n for (const segment of ref.split(\".\")) {\n if (!isRecord(cursor)) return undefined;\n if (!(segment in cursor)) return undefined;\n cursor = cursor[segment];\n }\n return cursor;\n}\n\n/**\n * Read a `node_outcome` off a frame and rehydrate its elided payload.\n *\n * `frame` is the object the wrapper travelled ON — the `node_completed` event,\n * or the run read response for a `run_result`'s children. Returns null for\n * anything that is not a node_outcome (including a missing wrapper: the\n * producer fails OPEN, so an absent wrapper is a normal, non-fatal state).\n */\nexport function rehydrateNodeOutcome(\n raw: unknown,\n frame: unknown,\n): NodeOutcomeWrapper | null {\n if (!isRecord(raw)) return null;\n if (raw[KIND_KEY] !== NODE_OUTCOME_KIND) return null;\n // THE ELISION RULE. Presence of the ref is the marker; a bare null is empty.\n const ref = str(raw, \"output_ref\");\n const resolved = ref === null ? undefined : readOutputRef(frame, ref);\n return readNodeOutcomeValue(\n resolved === undefined ? raw : { ...raw, output: resolved },\n );\n}\n\n/**\n * Read an ALREADY-REHYDRATED node_outcome value into its typed form.\n *\n * Deliberately does NOT require `__kind`: the render bridge strips the root\n * discriminator before the component sees the value, and it does NOT touch\n * `output_ref` — by the time anything renders, the ingest gate has already\n * resolved the elision, and a second resolution attempt against a frame that\n * is no longer there is how a payload goes missing.\n */\nexport function readNodeOutcomeValue(\n raw: unknown,\n): NodeOutcomeWrapper | null {\n if (!isRecord(raw)) return null;\n const runId = str(raw, \"run_id\");\n const nodeId = str(raw, \"node_id\");\n if (!runId || !nodeId) return null;\n const output = raw.output ?? null;\n\n return {\n __kind: NODE_OUTCOME_KIND,\n run_id: runId,\n node_id: nodeId,\n workflow_id: str(raw, \"workflow_id\"),\n step: num(raw, \"step\"),\n attempt: num(raw, \"attempt\") ?? 1,\n status: str(raw, \"status\") ?? \"completed\",\n started_at: str(raw, \"started_at\"),\n ended_at: str(raw, \"ended_at\"),\n duration_ms: num(raw, \"duration_ms\"),\n output_kind: str(raw, \"output_kind\"),\n output_kind_ok: bool(raw, \"output_kind_ok\"),\n output_kind_errors: strings(raw, \"output_kind_errors\"),\n output,\n };\n}\n\n/**\n * Read a `run_result` off the run read response and rehydrate every elided\n * payload — its own, and each terminal node's. Both resolve against the SAME\n * frame (the run read response), which is what `\"output.<node_id>\"` addresses.\n */\nexport function rehydrateRunResult(\n raw: unknown,\n frame: unknown,\n): RunResultWrapper | null {\n if (!isRecord(raw)) return null;\n if (raw[KIND_KEY] !== RUN_RESULT_KIND) return null;\n const ref = str(raw, \"output_ref\");\n const resolved = ref === null ? undefined : readOutputRef(frame, ref);\n const outputs = Array.isArray(raw.outputs)\n ? raw.outputs\n .map((child) => rehydrateNodeOutcome(child, frame))\n .filter((child): child is NodeOutcomeWrapper => child !== null)\n : [];\n return readRunResultValue({\n ...raw,\n ...(resolved === undefined ? {} : { output: resolved }),\n outputs,\n });\n}\n\n/**\n * Read an ALREADY-REHYDRATED run_result value into its typed form. Same\n * contract as {@link readNodeOutcomeValue}: no `__kind` requirement, no\n * second elision pass.\n */\nexport function readRunResultValue(raw: unknown): RunResultWrapper | null {\n if (!isRecord(raw)) return null;\n const runId = str(raw, \"run_id\");\n if (!runId) return null;\n const output = raw.output ?? null;\n const outputs = Array.isArray(raw.outputs)\n ? raw.outputs\n .map((child) => readNodeOutcomeValue(child))\n .filter((child): child is NodeOutcomeWrapper => child !== null)\n : [];\n\n return {\n __kind: RUN_RESULT_KIND,\n run_id: runId,\n workflow_id: str(raw, \"workflow_id\"),\n status: str(raw, \"status\") ?? \"completed\",\n started_at: str(raw, \"started_at\"),\n ended_at: str(raw, \"ended_at\"),\n duration_ms: num(raw, \"duration_ms\"),\n output_kind: str(raw, \"output_kind\"),\n output,\n outputs,\n };\n}\n\n/**\n * The kind verdict, as three states the UI must keep distinct.\n *\n * `unchecked` is NEVER a pass: the engine either did not check (no declared\n * kind) or checked and could not conclude. Collapsing it into \"ok\" is how a\n * confidently-rendered document gets shown for a shape nobody verified.\n */\nexport type KindVerdict = \"passed\" | \"failed\" | \"unchecked\";\n\nexport function kindVerdictOf(wrapper: {\n output_kind: string | null;\n output_kind_ok: boolean | null;\n}): KindVerdict {\n if (wrapper.output_kind_ok === true) return \"passed\";\n if (wrapper.output_kind_ok === false) return \"failed\";\n return \"unchecked\";\n}\n","/**\n * The forward composer: given a kind's stored example, produce the EMIT/RENDER\n * payload — `{ \"__kind\": <slug>, ...data }`.\n *\n * Pure kernel module (@ai-matrx/content-ir `wire/`): no React, no Redux, no IO.\n *\n * Since 2026-08-23 stored examples and instances ALREADY carry their marker\n * (`__kind` is part of the data — KINDS_EVERYWHERE_PLAN §4.2), so for a\n * well-formed row this is an IDENTITY with a guarantee attached: the marker is\n * the FIRST key and it names the right slug. It stays because it is also the\n * repair for the legacy rows and hand-typed values that do not, and because a\n * caller wanting a copy-ready render payload should not have to know which it\n * has.\n *\n * Scalars/arrays are returned unchanged — for those kinds the identity travels\n * out of band (`root.kind`); there is no key to add.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\n\nexport function withRootKind(kind: string, value: unknown): unknown {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return { [KIND_KEY]: kind, ...(value as Record<string, unknown>) };\n }\n return value;\n}\n\n/** The copy-ready render payload: pretty JSON of `{ __kind, ...data }`. */\nexport function emitPayloadJson(kind: string, value: unknown): string {\n return JSON.stringify(withRootKind(kind, value), null, 2);\n}\n\n/**\n * The copy-ready render BLOCK — the render payload inside a ```json fence, the\n * exact form an agent emits and a user pastes into a prompt or a message to see\n * it render live.\n */\nexport function emitPayloadFence(kind: string, value: unknown): string {\n return \"```json\\n\" + emitPayloadJson(kind, value) + \"\\n```\";\n}\n"]}