{"version":3,"sources":["../src/diff.ts","../src/merge.ts","../src/parser.ts","../src/transform.ts","../src/prompt.ts"],"sourcesContent":["export { diffToPatches } from \"@json-render/core\";\n","export { deepMergeSpec } from \"@json-render/core\";\n","import { parse } from \"yaml\";\nimport type { JsonPatch } from \"@json-render/core\";\nimport { diffToPatches } from \"./diff\";\n\n/**\n * Streaming YAML compiler that incrementally parses YAML text and emits\n * JSON Patch operations for each change detected.\n *\n * Same interface shape as `SpecStreamCompiler` from `@json-render/core`.\n */\nexport interface YamlStreamCompiler<T> {\n  /** Push a chunk of text. Returns the current result and any new patches. */\n  push(chunk: string): { result: T; newPatches: JsonPatch[] };\n  /** Flush remaining buffer and return the final result. */\n  flush(): { result: T; newPatches: JsonPatch[] };\n  /** Get the current compiled result. */\n  getResult(): T;\n  /** Get all patches that have been applied. */\n  getPatches(): JsonPatch[];\n  /** Reset the compiler to initial state. */\n  reset(initial?: Partial<T>): void;\n}\n\n/**\n * Create a streaming YAML compiler.\n *\n * Incrementally parses YAML text as it arrives and emits JSON Patch\n * operations by diffing each successful parse against the previous snapshot.\n *\n * Uses `yaml.parse()` with YAML 1.2 defaults (the `yaml` v2 default).\n * YAML 1.2 does not coerce `yes`/`no`/`on`/`off` to booleans.\n *\n * @example\n * ```ts\n * const compiler = createYamlStreamCompiler<Spec>();\n * compiler.push(\"root: main\\n\");\n * compiler.push(\"elements:\\n  main:\\n    type: Card\\n\");\n * const { result } = compiler.flush();\n * ```\n */\nexport function createYamlStreamCompiler<\n  T extends Record<string, unknown> = Record<string, unknown>,\n>(initial?: Partial<T>): YamlStreamCompiler<T> {\n  let accumulated = \"\";\n  let snapshot: Record<string, unknown> = initial\n    ? { ...initial }\n    : ({} as Record<string, unknown>);\n  let result: T = { ...snapshot } as T;\n  const allPatches: JsonPatch[] = [];\n\n  function tryParse(): { result: T; newPatches: JsonPatch[] } {\n    const newPatches: JsonPatch[] = [];\n\n    try {\n      const parsed = parse(accumulated);\n\n      if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n        const patches = diffToPatches(\n          snapshot,\n          parsed as Record<string, unknown>,\n        );\n\n        if (patches.length > 0) {\n          snapshot = structuredClone(parsed as Record<string, unknown>);\n          result = { ...snapshot } as T;\n          allPatches.push(...patches);\n          newPatches.push(...patches);\n        }\n      }\n    } catch {\n      // Incomplete YAML — wait for more data\n    }\n\n    return { result, newPatches };\n  }\n\n  return {\n    push(chunk: string): { result: T; newPatches: JsonPatch[] } {\n      accumulated += chunk;\n\n      // Only attempt parse when we have a complete line\n      if (chunk.includes(\"\\n\")) {\n        return tryParse();\n      }\n\n      return { result, newPatches: [] };\n    },\n\n    flush(): { result: T; newPatches: JsonPatch[] } {\n      return tryParse();\n    },\n\n    getResult(): T {\n      return result;\n    },\n\n    getPatches(): JsonPatch[] {\n      return [...allPatches];\n    },\n\n    reset(newInitial?: Partial<T>): void {\n      accumulated = \"\";\n      snapshot = newInitial\n        ? { ...newInitial }\n        : ({} as Record<string, unknown>);\n      result = { ...snapshot } as T;\n      allPatches.length = 0;\n    },\n  };\n}\n","import { parse, stringify } from \"yaml\";\nimport { applyPatch as applyUnifiedDiff } from \"diff\";\nimport {\n  SPEC_DATA_PART_TYPE,\n  deepMergeSpec,\n  diffToPatches,\n  type JsonPatch,\n  type Spec,\n  type StreamChunk,\n} from \"@json-render/core\";\nimport { createYamlStreamCompiler } from \"./parser\";\n\nexport const YAML_SPEC_FENCE = \"```yaml-spec\";\nexport const YAML_EDIT_FENCE = \"```yaml-edit\";\nexport const YAML_PATCH_FENCE = \"```yaml-patch\";\nexport const DIFF_FENCE = \"```diff\";\nexport const FENCE_CLOSE = \"```\";\n\nexport interface YamlTransformOptions {\n  /** Seed with a previous spec for multi-turn edit support. */\n  previousSpec?: Spec;\n}\n\n/**\n * Creates a `TransformStream` that intercepts AI SDK UI message stream chunks\n * and converts YAML spec/edit blocks into json-render patch data parts.\n *\n * Two fence types are recognised:\n *\n * 1. **`\\`\\`\\`yaml-spec`** — Full YAML spec. Parsed progressively, emitting\n *    patches as each new property is detected.\n * 2. **`\\`\\`\\`yaml-edit`** — Partial YAML. Deep-merged with the current spec,\n *    then diffed to produce patches. Only changed keys need to be included.\n *\n * Non-fenced text passes through unchanged as `text-delta` chunks, matching\n * the behaviour of `createJsonRenderTransform` from `@json-render/core`.\n */\nexport function createYamlTransform(\n  options?: YamlTransformOptions,\n): TransformStream<StreamChunk, StreamChunk> {\n  let currentTextId = \"\";\n  let inTextBlock = false;\n  let textIdCounter = 0;\n\n  let lineBuffer = \"\";\n  let buffering = false;\n\n  // Fence state\n  let fenceMode: \"yaml-spec\" | \"yaml-edit\" | \"yaml-patch\" | \"diff\" | null =\n    null;\n  let yamlAccumulated = \"\";\n  let diffAccumulated = \"\";\n\n  // Streaming compiler for yaml-spec progressive rendering\n  let compiler = createYamlStreamCompiler<Record<string, unknown>>();\n\n  // The \"current spec\" — built up during yaml-spec, used as base for yaml-edit\n  let currentSpec: Record<string, unknown> = options?.previousSpec\n    ? structuredClone(\n        options.previousSpec as unknown as Record<string, unknown>,\n      )\n    : {};\n\n  // ── Text block helpers (same pattern as createJsonRenderTransform) ──\n\n  function closeTextBlock(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    if (inTextBlock) {\n      controller.enqueue({ type: \"text-end\", id: currentTextId });\n      inTextBlock = false;\n    }\n  }\n\n  function ensureTextBlock(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    if (!inTextBlock) {\n      textIdCounter++;\n      currentTextId = String(textIdCounter);\n      controller.enqueue({ type: \"text-start\", id: currentTextId });\n      inTextBlock = true;\n    }\n  }\n\n  function emitTextDelta(\n    delta: string,\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    ensureTextBlock(controller);\n    controller.enqueue({ type: \"text-delta\", id: currentTextId, delta });\n  }\n\n  function emitPatch(\n    patch: JsonPatch,\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    closeTextBlock(controller);\n    controller.enqueue({\n      type: SPEC_DATA_PART_TYPE,\n      data: { type: \"patch\", patch },\n    });\n  }\n\n  function emitPatches(\n    patches: JsonPatch[],\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    for (const patch of patches) {\n      emitPatch(patch, controller);\n    }\n  }\n\n  // ── YAML fence processing ──\n\n  /**\n   * Feed a line of YAML to the streaming compiler (yaml-spec mode).\n   * Emits patches for any newly detected properties.\n   */\n  function feedYamlSpec(\n    line: string,\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    yamlAccumulated += line + \"\\n\";\n    const { newPatches } = compiler.push(line + \"\\n\");\n    if (newPatches.length > 0) {\n      emitPatches(newPatches, controller);\n    }\n  }\n\n  /**\n   * Feed a line of YAML for edit mode. We accumulate all lines and process\n   * on fence close since partial edits may not parse until complete.\n   */\n  function feedYamlEdit(line: string) {\n    yamlAccumulated += line + \"\\n\";\n  }\n\n  /**\n   * Finalise a yaml-edit block: parse the accumulated YAML, deep-merge\n   * with the current spec, diff, and emit patches.\n   */\n  function finaliseYamlEdit(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    try {\n      const editObj = parse(yamlAccumulated);\n      if (editObj && typeof editObj === \"object\" && !Array.isArray(editObj)) {\n        const merged = deepMergeSpec(\n          currentSpec,\n          editObj as Record<string, unknown>,\n        );\n        const patches = diffToPatches(currentSpec, merged);\n        if (patches.length > 0) {\n          currentSpec = merged;\n          emitPatches(patches, controller);\n        }\n      }\n    } catch {\n      // Invalid YAML edit block — silently drop\n    }\n  }\n\n  /**\n   * Finalise a yaml-spec block: flush the compiler for any remaining\n   * partial data and update currentSpec.\n   */\n  function finaliseYamlSpec(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    const { newPatches } = compiler.flush();\n    if (newPatches.length > 0) {\n      emitPatches(newPatches, controller);\n    }\n    currentSpec = structuredClone(\n      compiler.getResult() as Record<string, unknown>,\n    );\n  }\n\n  /**\n   * Finalise a yaml-patch block: parse each accumulated line as an\n   * RFC 6902 JSON Patch operation and emit directly.\n   */\n  function finaliseYamlPatch(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    for (const line of yamlAccumulated.split(\"\\n\")) {\n      const trimmed = line.trim();\n      if (!trimmed) continue;\n      try {\n        const patch = JSON.parse(trimmed) as JsonPatch;\n        if (patch.op) {\n          emitPatch(patch, controller);\n          // Update currentSpec for subsequent edits\n          if (patch.op === \"add\" || patch.op === \"replace\") {\n            const parts = patch.path.split(\"/\").filter(Boolean);\n            let target: Record<string, unknown> = currentSpec;\n            for (let i = 0; i < parts.length - 1; i++) {\n              const key = parts[i]!;\n              if (typeof target[key] !== \"object\" || target[key] === null) {\n                target[key] = {};\n              }\n              target = target[key] as Record<string, unknown>;\n            }\n            const lastKey = parts[parts.length - 1];\n            if (lastKey) target[lastKey] = patch.value;\n          } else if (patch.op === \"remove\") {\n            const parts = patch.path.split(\"/\").filter(Boolean);\n            let target: Record<string, unknown> = currentSpec;\n            for (let i = 0; i < parts.length - 1; i++) {\n              const key = parts[i]!;\n              if (typeof target[key] !== \"object\" || target[key] === null)\n                break;\n              target = target[key] as Record<string, unknown>;\n            }\n            const lastKey = parts[parts.length - 1];\n            if (lastKey) delete target[lastKey];\n          }\n        }\n      } catch {\n        // Skip invalid JSON lines\n      }\n    }\n  }\n\n  /**\n   * Finalise a diff block: apply the unified diff to the YAML-serialized\n   * current spec, reparse, diff against current, and emit patches.\n   */\n  function finaliseDiff(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    try {\n      const currentYaml = stringify(currentSpec, { indent: 2 });\n      const patched = applyUnifiedDiff(currentYaml, diffAccumulated);\n      if (patched === false) return;\n      const newSpec = parse(patched);\n      if (newSpec && typeof newSpec === \"object\" && !Array.isArray(newSpec)) {\n        const patches = diffToPatches(\n          currentSpec,\n          newSpec as Record<string, unknown>,\n        );\n        if (patches.length > 0) {\n          currentSpec = newSpec as Record<string, unknown>;\n          emitPatches(patches, controller);\n        }\n      }\n    } catch {\n      // Diff apply or reparse failed\n    }\n  }\n\n  // ── Line processing ──\n\n  function processCompleteLine(\n    line: string,\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    const trimmed = line.trim();\n\n    // Fence open detection\n    if (fenceMode === null) {\n      if (trimmed.startsWith(YAML_SPEC_FENCE)) {\n        fenceMode = \"yaml-spec\";\n        yamlAccumulated = \"\";\n        compiler.reset(currentSpec);\n        return;\n      }\n      if (trimmed.startsWith(YAML_EDIT_FENCE)) {\n        fenceMode = \"yaml-edit\";\n        yamlAccumulated = \"\";\n        return;\n      }\n      if (trimmed.startsWith(YAML_PATCH_FENCE)) {\n        fenceMode = \"yaml-patch\";\n        yamlAccumulated = \"\";\n        return;\n      }\n      if (trimmed.startsWith(DIFF_FENCE)) {\n        fenceMode = \"diff\";\n        diffAccumulated = \"\";\n        return;\n      }\n    }\n\n    // Fence close detection\n    if (fenceMode !== null && trimmed === FENCE_CLOSE) {\n      if (fenceMode === \"yaml-spec\") {\n        finaliseYamlSpec(controller);\n      } else if (fenceMode === \"yaml-edit\") {\n        finaliseYamlEdit(controller);\n      } else if (fenceMode === \"yaml-patch\") {\n        finaliseYamlPatch(controller);\n      } else if (fenceMode === \"diff\") {\n        finaliseDiff(controller);\n      }\n      fenceMode = null;\n      return;\n    }\n\n    // Inside a fence\n    if (fenceMode === \"yaml-spec\") {\n      feedYamlSpec(line, controller);\n      return;\n    }\n    if (fenceMode === \"yaml-edit\") {\n      feedYamlEdit(line);\n      return;\n    }\n    if (fenceMode === \"yaml-patch\") {\n      yamlAccumulated += line + \"\\n\";\n      return;\n    }\n    if (fenceMode === \"diff\") {\n      diffAccumulated += line + \"\\n\";\n      return;\n    }\n\n    // Outside fence — pass through as text\n    if (!trimmed) {\n      emitTextDelta(\"\\n\", controller);\n      return;\n    }\n    emitTextDelta(line + \"\\n\", controller);\n  }\n\n  function flushBuffer(\n    controller: TransformStreamDefaultController<StreamChunk>,\n  ) {\n    if (!lineBuffer) return;\n\n    if (fenceMode !== null) {\n      processCompleteLine(lineBuffer, controller);\n    } else {\n      emitTextDelta(lineBuffer, controller);\n    }\n    lineBuffer = \"\";\n    buffering = false;\n  }\n\n  // ── TransformStream ──\n\n  return new TransformStream<StreamChunk, StreamChunk>({\n    transform(chunk, controller) {\n      switch (chunk.type) {\n        case \"text-start\": {\n          const id = (chunk as { id: string }).id;\n          const idNum = parseInt(id, 10);\n          if (!isNaN(idNum) && idNum >= textIdCounter) {\n            textIdCounter = idNum;\n          }\n          currentTextId = id;\n          inTextBlock = true;\n          controller.enqueue(chunk);\n          break;\n        }\n\n        case \"text-delta\": {\n          const delta = chunk as { id: string; delta: string };\n          const text = delta.delta;\n\n          for (let i = 0; i < text.length; i++) {\n            const ch = text.charAt(i);\n\n            if (ch === \"\\n\") {\n              if (buffering) {\n                processCompleteLine(lineBuffer, controller);\n                lineBuffer = \"\";\n                buffering = false;\n              } else if (fenceMode === null) {\n                emitTextDelta(\"\\n\", controller);\n              }\n            } else if (lineBuffer.length === 0 && !buffering) {\n              // Inside a fence, buffer everything. Outside, only buffer\n              // potential fence-open lines (start with backtick).\n              if (fenceMode !== null || ch === \"`\") {\n                buffering = true;\n                lineBuffer += ch;\n              } else {\n                emitTextDelta(ch, controller);\n              }\n            } else if (buffering) {\n              lineBuffer += ch;\n            } else {\n              emitTextDelta(ch, controller);\n            }\n          }\n          break;\n        }\n\n        case \"text-end\": {\n          flushBuffer(controller);\n          if (inTextBlock) {\n            controller.enqueue({ type: \"text-end\", id: currentTextId });\n            inTextBlock = false;\n          }\n          break;\n        }\n\n        default: {\n          controller.enqueue(chunk);\n          break;\n        }\n      }\n    },\n\n    flush(controller) {\n      flushBuffer(controller);\n      if (fenceMode === \"yaml-spec\") {\n        finaliseYamlSpec(controller);\n      } else if (fenceMode === \"yaml-edit\") {\n        finaliseYamlEdit(controller);\n      } else if (fenceMode === \"yaml-patch\") {\n        finaliseYamlPatch(controller);\n      } else if (fenceMode === \"diff\") {\n        finaliseDiff(controller);\n      }\n      closeTextBlock(controller);\n    },\n  });\n}\n\n/**\n * Convenience wrapper that pipes an AI SDK UI message stream through the\n * YAML transform, converting YAML spec/edit blocks into json-render patches.\n *\n * Drop-in replacement for `pipeJsonRender` from `@json-render/core`.\n *\n * @example\n * ```ts\n * import { pipeYamlRender } from \"@json-render/yaml\";\n *\n * const stream = createUIMessageStream({\n *   execute: async ({ writer }) => {\n *     writer.merge(pipeYamlRender(result.toUIMessageStream()));\n *   },\n * });\n * return createUIMessageStreamResponse({ stream });\n * ```\n */\nexport function pipeYamlRender<T = StreamChunk>(\n  stream: ReadableStream<T>,\n  options?: YamlTransformOptions,\n): ReadableStream<T> {\n  return stream.pipeThrough(\n    createYamlTransform(options) as unknown as TransformStream<T, T>,\n  );\n}\n","import { stringify } from \"yaml\";\nimport type { Catalog, EditMode, SchemaDefinition } from \"@json-render/core\";\nimport { buildEditInstructions } from \"@json-render/core\";\n\ninterface ZodLike {\n  _def?: Record<string, unknown>;\n}\n\nexport interface YamlPromptOptions {\n  /** Custom system message intro. */\n  system?: string;\n  /**\n   * - `\"standalone\"` (default): LLM outputs only the YAML spec (no prose).\n   * - `\"inline\"`: LLM responds conversationally, then wraps YAML in a fence.\n   */\n  mode?: \"standalone\" | \"inline\";\n  /** Additional rules appended to the RULES section. */\n  customRules?: string[];\n  /** Edit modes to document. Default: `[\"merge\"]` (yaml-edit). */\n  editModes?: EditMode[];\n}\n\ninterface CatalogComponentDef {\n  props?: ZodLike;\n  description?: string;\n  slots?: string[];\n  events?: string[];\n  example?: Record<string, unknown>;\n}\n\n// ── Zod introspection (local, minimal) ──────────────────────────────────────\n\nfunction getZodTypeName(schema: ZodLike): string {\n  if (!schema?._def) return \"\";\n  const def = schema._def;\n  return (\n    (def.typeName as string | undefined) ??\n    (typeof def.type === \"string\" ? (def.type as string) : \"\") ??\n    \"\"\n  );\n}\n\nfunction formatZodType(schema: ZodLike): string {\n  if (!schema?._def) return \"unknown\";\n  const def = schema._def;\n  const typeName = getZodTypeName(schema);\n\n  switch (typeName) {\n    case \"ZodString\":\n    case \"string\":\n      return \"string\";\n    case \"ZodNumber\":\n    case \"number\":\n      return \"number\";\n    case \"ZodBoolean\":\n    case \"boolean\":\n      return \"boolean\";\n    case \"ZodLiteral\":\n    case \"literal\": {\n      // Zod 4 uses def.values (array), Zod 3 uses def.value\n      const litValues = def.values as unknown[] | undefined;\n      const litValue = litValues?.[0] ?? def.value;\n      return JSON.stringify(litValue);\n    }\n    case \"ZodEnum\":\n    case \"enum\": {\n      let values: string[];\n      if (Array.isArray(def.values)) {\n        values = def.values as string[];\n      } else if (def.entries && typeof def.entries === \"object\") {\n        values = Object.values(def.entries as Record<string, string>);\n      } else {\n        return \"enum\";\n      }\n      return values.map((v) => `\"${v}\"`).join(\" | \");\n    }\n    case \"ZodArray\":\n    case \"array\": {\n      const inner = (\n        typeof def.element === \"object\"\n          ? def.element\n          : typeof def.type === \"object\"\n            ? def.type\n            : undefined\n      ) as ZodLike | undefined;\n      return inner ? `Array<${formatZodType(inner)}>` : \"Array<unknown>\";\n    }\n    case \"ZodObject\":\n    case \"object\": {\n      const shape =\n        typeof def.shape === \"function\"\n          ? (def.shape as () => Record<string, ZodLike>)()\n          : (def.shape as Record<string, ZodLike>);\n      if (!shape) return \"object\";\n      const props = Object.entries(shape)\n        .map(([key, value]) => {\n          const innerTypeName = getZodTypeName(value);\n          const isOptional =\n            innerTypeName === \"ZodOptional\" ||\n            innerTypeName === \"ZodNullable\" ||\n            innerTypeName === \"optional\" ||\n            innerTypeName === \"nullable\";\n          return `${key}${isOptional ? \"?\" : \"\"}: ${formatZodType(value)}`;\n        })\n        .join(\", \");\n      return `{ ${props} }`;\n    }\n    case \"ZodOptional\":\n    case \"optional\":\n    case \"ZodNullable\":\n    case \"nullable\": {\n      const inner = (def.innerType as ZodLike) ?? (def.wrapped as ZodLike);\n      return inner ? formatZodType(inner) : \"unknown\";\n    }\n    case \"ZodUnion\":\n    case \"union\": {\n      const options = def.options as ZodLike[] | undefined;\n      return options\n        ? options.map((opt) => formatZodType(opt)).join(\" | \")\n        : \"unknown\";\n    }\n    case \"ZodRecord\":\n    case \"record\": {\n      const keyType = (def.keyType as ZodLike) ?? undefined;\n      const valueType =\n        (def.valueType as ZodLike) ?? (def.element as ZodLike) ?? undefined;\n      const keyStr = keyType ? formatZodType(keyType) : \"string\";\n      const valueStr = valueType ? formatZodType(valueType) : \"unknown\";\n      return `Record<${keyStr}, ${valueStr}>`;\n    }\n    case \"ZodDefault\":\n    case \"default\": {\n      const inner = (def.innerType as ZodLike) ?? (def.wrapped as ZodLike);\n      return inner ? formatZodType(inner) : \"unknown\";\n    }\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction getExampleProps(def: CatalogComponentDef): Record<string, unknown> {\n  if (def.example && Object.keys(def.example).length > 0) return def.example;\n  if (!def.props?._def) return {};\n  const zodDef = def.props._def;\n  const typeName = getZodTypeName(def.props);\n  if (typeName !== \"ZodObject\" && typeName !== \"object\") return {};\n  const shape =\n    typeof zodDef.shape === \"function\"\n      ? (zodDef.shape as () => Record<string, ZodLike>)()\n      : (zodDef.shape as Record<string, ZodLike>);\n  if (!shape) return {};\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(shape)) {\n    const inner = getZodTypeName(value);\n    if (\n      inner === \"ZodOptional\" ||\n      inner === \"optional\" ||\n      inner === \"ZodNullable\" ||\n      inner === \"nullable\"\n    )\n      continue;\n    result[key] = exampleValue(value);\n  }\n  return result;\n}\n\nfunction exampleValue(schema: ZodLike): unknown {\n  if (!schema?._def) return \"...\";\n  const def = schema._def;\n  const t = getZodTypeName(schema);\n  switch (t) {\n    case \"ZodString\":\n    case \"string\":\n      return \"example\";\n    case \"ZodNumber\":\n    case \"number\":\n      return 0;\n    case \"ZodBoolean\":\n    case \"boolean\":\n      return true;\n    case \"ZodLiteral\":\n    case \"literal\":\n      return def.value;\n    case \"ZodEnum\":\n    case \"enum\": {\n      if (Array.isArray(def.values) && (def.values as unknown[]).length > 0)\n        return (def.values as unknown[])[0];\n      if (def.entries && typeof def.entries === \"object\") {\n        const vals = Object.values(def.entries as Record<string, string>);\n        return vals.length > 0 ? vals[0] : \"example\";\n      }\n      return \"example\";\n    }\n    case \"ZodOptional\":\n    case \"optional\":\n    case \"ZodNullable\":\n    case \"nullable\":\n    case \"ZodDefault\":\n    case \"default\": {\n      const inner = (def.innerType as ZodLike) ?? (def.wrapped as ZodLike);\n      return inner ? exampleValue(inner) : null;\n    }\n    case \"ZodArray\":\n    case \"array\":\n      return [];\n    case \"ZodObject\":\n    case \"object\":\n      return getExampleProps({ props: schema } as CatalogComponentDef);\n    case \"ZodUnion\":\n    case \"union\": {\n      const options = def.options as ZodLike[] | undefined;\n      return options && options.length > 0 ? exampleValue(options[0]!) : \"...\";\n    }\n    default:\n      return \"...\";\n  }\n}\n\n// ── YAML helper ──\n\n/** Render a value as an indented YAML string (2-space indent). */\nfunction toYaml(value: unknown): string {\n  return stringify(value, { indent: 2 }).trimEnd();\n}\n\n// ── Prompt generation ──\n\n/**\n * Generate a YAML-format system prompt from any json-render catalog.\n *\n * Works with catalogs from any renderer (`@json-render/react`,\n * `@json-render/vue`, etc.) — it only reads the catalog metadata.\n *\n * @example\n * ```ts\n * import { yamlPrompt } from \"@json-render/yaml\";\n * const systemPrompt = yamlPrompt(catalog, { mode: \"inline\" });\n * ```\n */\nexport function yamlPrompt(\n  catalog: Catalog<SchemaDefinition, unknown>,\n  options?: YamlPromptOptions,\n): string {\n  const {\n    system = \"You are a UI generator that outputs YAML.\",\n    mode = \"standalone\",\n    customRules = [],\n    editModes = [\"merge\"],\n  } = options ?? {};\n\n  const lines: string[] = [];\n  lines.push(system);\n  lines.push(\"\");\n\n  // ── Output format ──\n\n  if (mode === \"inline\") {\n    lines.push(\"OUTPUT FORMAT (text + YAML):\");\n    lines.push(\n      \"You respond conversationally. When generating UI, first write a brief explanation (1-3 sentences), then output the YAML spec wrapped in a ```yaml-spec code fence.\",\n    );\n    lines.push(\n      \"If the user's message does not require a UI (e.g. a greeting or clarifying question), respond with text only — no YAML.\",\n    );\n  } else {\n    lines.push(\"OUTPUT FORMAT (YAML):\");\n    lines.push(\n      \"Output a YAML document that describes a UI tree. Wrap it in a ```yaml-spec code fence.\",\n    );\n  }\n  lines.push(\"\");\n  lines.push(\n    \"The YAML document has three top-level keys: root, elements, and state (optional).\",\n  );\n  lines.push(\n    \"Stream progressively — output elements one at a time so the UI fills in as you write.\",\n  );\n  lines.push(\"\");\n\n  // ── Example ──\n\n  const allComponents = (catalog.data as Record<string, unknown>).components as\n    | Record<string, CatalogComponentDef>\n    | undefined;\n  const cn = catalog.componentNames;\n  const comp1 = cn[0] || \"Component\";\n  const comp2 = cn.length > 1 ? cn[1]! : comp1;\n  const comp1Def = allComponents?.[comp1];\n  const comp2Def = allComponents?.[comp2];\n  const comp1Props = comp1Def ? getExampleProps(comp1Def) : {};\n  const comp2Props = comp2Def ? getExampleProps(comp2Def) : {};\n\n  const exampleSpec = {\n    root: \"main\",\n    elements: {\n      main: {\n        type: comp1,\n        props: comp1Props,\n        children: [\"child-1\", \"list\"],\n      },\n      \"child-1\": {\n        type: comp2,\n        props: comp2Props,\n        children: [],\n      },\n      list: {\n        type: comp1,\n        props: comp1Props,\n        repeat: { statePath: \"/items\", key: \"id\" },\n        children: [\"item\"],\n      },\n      item: {\n        type: comp2,\n        props: { ...comp2Props },\n        children: [],\n      },\n    },\n    state: {\n      items: [\n        { id: \"1\", title: \"First Item\" },\n        { id: \"2\", title: \"Second Item\" },\n      ],\n    },\n  };\n\n  lines.push(\"Example:\");\n  lines.push(\"\");\n  lines.push(\"```yaml-spec\");\n  lines.push(toYaml(exampleSpec));\n  lines.push(\"```\");\n  lines.push(\"\");\n\n  // ── Edit modes (dynamic based on config) ──\n\n  lines.push(buildEditInstructions({ modes: editModes }, \"yaml\"));\n\n  // ── Initial state ──\n\n  lines.push(\"INITIAL STATE:\");\n  lines.push(\n    \"The spec includes a top-level `state` key to seed the state model. Components using $state, $bindState, $bindItem, $item, or $index read from this state.\",\n  );\n  lines.push(\n    \"CRITICAL: You MUST include state whenever your UI displays data via these expressions or uses repeat to iterate over arrays.\",\n  );\n  lines.push(\n    \"Include realistic sample data. For lists: 3-5 items with relevant fields. Never leave arrays empty.\",\n  );\n  lines.push(\n    'When content comes from the state model, use { \"$state\": \"/some/path\" } dynamic props instead of hardcoding values.',\n  );\n  lines.push(\n    'State paths use RFC 6901 JSON Pointer syntax (e.g. \"/todos/0/title\"). Do NOT use dot notation.',\n  );\n  lines.push(\"\");\n\n  // ── Dynamic lists ──\n\n  lines.push(\"DYNAMIC LISTS (repeat field):\");\n  lines.push(\n    \"Any element can have a top-level `repeat` field to render its children once per item in a state array.\",\n  );\n  lines.push(\"Example:\");\n  lines.push(\"\");\n  lines.push(\n    toYaml({\n      list: {\n        type: comp1,\n        props: comp1Props,\n        repeat: { statePath: \"/todos\", key: \"id\" },\n        children: [\"todo-item\"],\n      },\n    }),\n  );\n  lines.push(\"\");\n  lines.push(\n    'Inside repeated children, use { \"$item\": \"field\" } for item data and { \"$index\": true } for the array index.',\n  );\n  lines.push(\n    'For nested lists, an inner repeat can use statePath: { \"$item\": \"field\" } to read an array from the enclosing item. This form is valid only inside another repeat.',\n  );\n  lines.push(\n    \"ALWAYS use repeat for lists backed by state arrays. NEVER hardcode individual elements per item.\",\n  );\n  lines.push(\n    \"IMPORTANT: `repeat` is a top-level field on the element (sibling of type/props/children), NOT inside props.\",\n  );\n  lines.push(\"\");\n\n  // ── Array state actions ──\n\n  lines.push(\"ARRAY STATE ACTIONS:\");\n  lines.push(\n    'Use \"pushState\" to append items to arrays. Use \"removeState\" to remove items by index.',\n  );\n  lines.push('Use \"$id\" inside pushState values to auto-generate a unique ID.');\n  lines.push(\"\");\n\n  // ── Components ──\n\n  if (allComponents) {\n    lines.push(`AVAILABLE COMPONENTS (${catalog.componentNames.length}):`);\n    lines.push(\"\");\n\n    for (const [name, def] of Object.entries(allComponents)) {\n      const propsStr = def.props ? formatZodType(def.props) : \"{}\";\n      const hasChildren = def.slots && def.slots.length > 0;\n      const childrenStr = hasChildren ? \" [accepts children]\" : \"\";\n      const eventsStr =\n        def.events && def.events.length > 0\n          ? ` [events: ${def.events.join(\", \")}]`\n          : \"\";\n      const descStr = def.description ? ` - ${def.description}` : \"\";\n      lines.push(`- ${name}: ${propsStr}${descStr}${childrenStr}${eventsStr}`);\n    }\n    lines.push(\"\");\n  }\n\n  // ── Actions ──\n\n  const actions = (catalog.data as Record<string, unknown>).actions as\n    | Record<string, { params?: ZodLike; description?: string }>\n    | undefined;\n  const builtInActions = catalog.schema.builtInActions ?? [];\n  const hasCustomActions = actions && catalog.actionNames.length > 0;\n  const hasBuiltInActions = builtInActions.length > 0;\n\n  if (hasCustomActions || hasBuiltInActions) {\n    lines.push(\"AVAILABLE ACTIONS:\");\n    lines.push(\"\");\n    for (const action of builtInActions) {\n      lines.push(`- ${action.name}: ${action.description} [built-in]`);\n    }\n    if (hasCustomActions) {\n      for (const [name, def] of Object.entries(actions)) {\n        lines.push(`- ${name}${def.description ? `: ${def.description}` : \"\"}`);\n      }\n    }\n    lines.push(\"\");\n  }\n\n  // ── Events ──\n\n  lines.push(\"EVENTS (the `on` field):\");\n  lines.push(\n    \"Elements can have an optional `on` field to bind events to actions. It is a top-level field (sibling of type/props/children), NOT inside props.\",\n  );\n  lines.push(\"Example:\");\n  lines.push(\"\");\n  lines.push(\n    toYaml({\n      \"save-btn\": {\n        type: comp1,\n        props: comp1Props,\n        on: {\n          press: {\n            action: \"setState\",\n            params: { statePath: \"/saved\", value: true },\n          },\n        },\n        children: [],\n      },\n    }),\n  );\n  lines.push(\"\");\n  lines.push(\n    'Action params can use dynamic references: { \"$state\": \"/statePath\" }.',\n  );\n  lines.push(\n    \"IMPORTANT: Do NOT put action/actionParams inside props. Always use the `on` field.\",\n  );\n  lines.push(\"\");\n\n  // ── Visibility ──\n\n  lines.push(\"VISIBILITY CONDITIONS:\");\n  lines.push(\n    \"Elements can have an optional `visible` field to conditionally show/hide based on state. It is a top-level field (sibling of type/props/children).\",\n  );\n  lines.push(\"Conditions:\");\n  lines.push('- { \"$state\": \"/path\" } — visible when truthy');\n  lines.push('- { \"$state\": \"/path\", \"not\": true } — visible when falsy');\n  lines.push('- { \"$state\": \"/path\", \"eq\": \"value\" } — visible when equal');\n  lines.push(\n    '- { \"$state\": \"/path\", \"neq\": \"value\" } — visible when not equal',\n  );\n  lines.push(\n    '- { \"$state\": \"/path\", \"gt\": N } / gte / lt / lte — numeric comparisons',\n  );\n  lines.push(\"- Use ONE operator per condition. Do not combine multiple.\");\n  lines.push('- Add \"not\": true to any condition to invert it.');\n  lines.push(\"- [cond, cond] — implicit AND (all must be true)\");\n  lines.push('- { \"$and\": [...] } — explicit AND');\n  lines.push('- { \"$or\": [...] } — at least one must be true');\n  lines.push(\"- true / false — always visible/hidden\");\n  lines.push(\"\");\n\n  // ── Dynamic props ──\n\n  lines.push(\"DYNAMIC PROPS:\");\n  lines.push(\"Any prop value can be a dynamic expression:\");\n  lines.push(\n    '1. Read-only: { \"$state\": \"/path\" } — resolves to the value at that state path.',\n  );\n  lines.push(\n    '2. Two-way binding: { \"$bindState\": \"/path\" } — read + write. Use on form inputs.',\n  );\n  lines.push(\n    '   Inside repeat scopes: { \"$bindItem\": \"field\" } for item-level binding.',\n  );\n  lines.push(\n    '3. Conditional: { \"$cond\": <condition>, \"$then\": <val>, \"$else\": <val> }',\n  );\n  lines.push(\n    '4. Template: { \"$template\": \"Hello, ${/name}!\" } — interpolates state references.',\n  );\n  lines.push(\"\");\n\n  // ── $computed (only if catalog has functions) ──\n\n  const catalogFunctions = (catalog.data as Record<string, unknown>).functions;\n  if (catalogFunctions && Object.keys(catalogFunctions).length > 0) {\n    lines.push(\n      '5. Computed: { \"$computed\": \"<fn>\", \"args\": { \"key\": <expr> } }',\n    );\n    lines.push(\"   Available functions:\");\n    for (const name of Object.keys(\n      catalogFunctions as Record<string, unknown>,\n    )) {\n      lines.push(`   - ${name}`);\n    }\n    lines.push(\"\");\n  }\n\n  // ── Validation (only if components have checks) ──\n\n  const hasChecks = allComponents\n    ? Object.values(allComponents).some((def) => {\n        if (!def.props) return false;\n        return formatZodType(def.props).includes(\"checks\");\n      })\n    : false;\n\n  if (hasChecks) {\n    lines.push(\"VALIDATION:\");\n    lines.push(\n      \"Form components with a `checks` prop support client-side validation.\",\n    );\n    lines.push(\n      \"Built-in types: required, email, minLength, maxLength, pattern, min, max, numeric, url, matches, equalTo, lessThan, greaterThan, requiredIf.\",\n    );\n    lines.push(\n      \"IMPORTANT: Components with checks must also use $bindState or $bindItem for two-way binding.\",\n    );\n    lines.push(\"\");\n  }\n\n  // ── State watchers ──\n\n  if (hasCustomActions || hasBuiltInActions) {\n    lines.push(\"STATE WATCHERS:\");\n    lines.push(\n      \"Elements can have an optional `watch` field to trigger actions when state changes. Top-level field, NOT inside props.\",\n    );\n    lines.push(\n      \"Maps state paths to action bindings. Fires when the watched value changes (not on initial render).\",\n    );\n    lines.push(\"\");\n  }\n\n  // ── Rules ──\n\n  lines.push(\"RULES:\");\n  const baseRules =\n    mode === \"inline\"\n      ? [\n          \"When generating UI, wrap the YAML in a ```yaml-spec code fence\",\n          \"Write a brief conversational response before the YAML\",\n          \"When editing existing UI, use a ```yaml-edit fence with only the changed parts\",\n          \"The document must have: root (string), elements (map of elements), and optionally state\",\n          \"Each element must have: type, props, children (list of child keys)\",\n          \"ONLY use components listed above\",\n          \"Use unique, descriptive keys for elements (e.g. 'header', 'metric-1', 'chart-revenue')\",\n          \"Include state whenever using $state, $bindState, $bindItem, $item, $index, or repeat\",\n        ]\n      : [\n          \"Output ONLY the YAML spec inside a ```yaml-spec fence — no prose, no extra markdown\",\n          \"When editing existing UI, use a ```yaml-edit fence with only the changed parts\",\n          \"The document must have: root (string), elements (map of elements), and optionally state\",\n          \"Each element must have: type, props, children (list of child keys)\",\n          \"ONLY use components listed above\",\n          \"Use unique, descriptive keys for elements (e.g. 'header', 'metric-1', 'chart-revenue')\",\n          \"Include state whenever using $state, $bindState, $bindItem, $item, $index, or repeat\",\n        ];\n\n  const schemaRules = catalog.schema.defaultRules ?? [];\n  const allRules = [...baseRules, ...schemaRules, ...customRules];\n  allRules.forEach((rule, i) => {\n    lines.push(`${i + 1}. ${rule}`);\n  });\n\n  return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":["parse","deepMergeSpec","diffToPatches","parse","deepMergeSpec","diffToPatches","stringify"]}