{
  "recipes": [
    {
      "id": "streaming-indicators",
      "name": "Streaming indicators",
      "category": "ux",
      "description": "Typing, progress, and stop affordances for streaming chat.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "composer",
        "message-list"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "tool-call-cards",
      "name": "Tool call cards",
      "category": "ux",
      "description": "Inline status cards for tool execution and approval states.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "tool-call"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "citation-previews",
      "name": "Citation previews",
      "category": "rich-content",
      "description": "Accessible citation preview renderer.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "citation"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "product-carousel",
      "name": "Product carousel",
      "category": "rich-content",
      "description": "Swipe-friendly product carousel renderer for commerce chats.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "product-carousel"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "suggestion-chips",
      "name": "Suggestion chips",
      "category": "ux",
      "description": "Tappable follow-up suggestion chips.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "suggestion-chips"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "accessibility-controls",
      "name": "Accessibility controls",
      "category": "behavior",
      "description": "Focus return, reduced-motion, and keyboard control helpers.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "chat-surface"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "transport-openai",
      "name": "Openai transport",
      "category": "transport",
      "description": "Reference ChatTransport adapter for openai.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "transport"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "transport-anthropic",
      "name": "Anthropic transport",
      "category": "transport",
      "description": "Reference ChatTransport adapter for anthropic.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "transport"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "transport-gemini",
      "name": "Gemini transport",
      "category": "transport",
      "description": "Reference ChatTransport adapter for gemini.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "transport"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "transport-ollama",
      "name": "Ollama transport",
      "category": "transport",
      "description": "Reference ChatTransport adapter for ollama.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "transport"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "voice-composer",
      "name": "Voice composer",
      "category": "ux",
      "description": "Push-to-talk and open-mic composer wired against a VoiceSession with a customizable mode toggle and transcript display.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "composer"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "cart-summary",
      "name": "Cart summary",
      "category": "commerce",
      "description": "Typed renderer for a custom-payload `cart-summary` part. Renders line items, subtotal, tax, shipping, total. PCI-safe payload contract.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "cart-summary"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "order-status-card",
      "name": "Order status card",
      "category": "commerce",
      "description": "Typed renderer for order tracking + RMA (return) status. Renders milestones, ETA, and refund estimate.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "order-status",
        "rma-summary",
        "tracking-timeline"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "commerce-funnel",
      "name": "Commerce funnel aggregator",
      "category": "analytics",
      "description": "Maps ProductAnalyticsEvents to commerce funnel stages (impression → click → add_to_cart → checkout → purchase → return) with conversion rates, AOV, and cart abandonment.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "analytics"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "conversation-history",
      "name": "Conversation history",
      "category": "ux",
      "description": "Conversation list with resume, delete, and new-conversation actions backed by ConversationRegistry.",
      "files": [
        "component.tsx",
        "component.test.tsx",
        "recipe.json",
        "CLAUDE.md",
        "README.md"
      ],
      "dependencies": [],
      "registryTargets": [
        "sidebar",
        "drawer"
      ],
      "tests": [
        "component.test.tsx"
      ],
      "agentDocs": "CLAUDE.md"
    },
    {
      "id": "ui:address-confirmation",
      "name": "Address confirmation",
      "category": "a2ui-catalog",
      "description": "Verified address with edit affordance and a confirm action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "f6a570c0e9c7817e4c80a2b631694ba907c7cbfbcf04e6e5ef3f79f7bbf7b5d0"
        }
      }
    },
    {
      "id": "ui:appointment-picker",
      "name": "Appointment picker",
      "category": "a2ui-catalog",
      "description": "Date selector + time-slot grid + confirm action for booking appointments.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "ca18a4c3f84c2e2eef1fb8aa45d63024a284593bc5fab42a6a35d1dd1043d3ff"
        }
      }
    },
    {
      "id": "ui:comparison-table",
      "name": "Comparison table",
      "category": "a2ui-catalog",
      "description": "Agent-driven dynamic table for arbitrary attribute comparisons. v1 ships a host React renderer; basicCatalog has no Table primitive.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "experimental",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "cb74d315fcbcc09fdda93a8c4ff1bff2650a8aa655d541c511b669b4b5fbe3e0"
        },
        "requiresCustomPrimitives": true
      }
    },
    {
      "id": "ui:confirmation-receipt",
      "name": "Confirmation receipt",
      "category": "a2ui-catalog",
      "description": "Post-action summary: order/return/refund confirmation with line items, totals, and a primary follow-up action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "add48ba7abd993cc2f6cf335944aef99b05186953830f2414dd1684fcf3e1379"
        }
      }
    },
    {
      "id": "ui:consent-form",
      "name": "Consent form",
      "category": "a2ui-catalog",
      "description": "Multi-checkbox consent form with an audit-trail confirm action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "ab984adbc446d2b4838b73cfa75b193c738de09adcbf8f0e35e6f7b61a13aea6"
        }
      }
    },
    {
      "id": "ui:coupon-applier",
      "name": "Coupon applier",
      "category": "a2ui-catalog",
      "description": "Coupon code entry with applied state, validation message, and remove action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "458e59d923c472a4c513eacb9acdf032e4cd7a6d9a75d989f28990fb646e8919"
        }
      }
    },
    {
      "id": "ui:data-export-confirm",
      "name": "Data export confirm",
      "category": "a2ui-catalog",
      "description": "Format + delivery method picker for a personal data export request.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "2b62ac3bd51bf6b4395e4af5bf320d794ce2f32ecb91729ca48ede9e7f68cd72"
        }
      }
    },
    {
      "id": "ui:escalation-card",
      "name": "Escalation card",
      "category": "a2ui-catalog",
      "description": "Talk-to-a-person card with conversation context preview and a confirmed handoff action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "571d288b1601814f68ba06b2cae1cf3520146c12d797ad33318bc56f4d47fdaa"
        }
      }
    },
    {
      "id": "ui:eta-promise",
      "name": "ETA promise",
      "category": "a2ui-catalog",
      "description": "Agent-promised arrival time with countdown and an optional cancel action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "f27a58d3a2bc6cf0c531d68351d47b52818fb26084faff4cdd5e37067bf9d548"
        }
      }
    },
    {
      "id": "ui:feedback-quick",
      "name": "Quick feedback",
      "category": "a2ui-catalog",
      "description": "Thumbs up/down or emoji rating with optional open-text comment.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "be78a65b70e79b08a2d9124f413f2b28430b516b206a0bb8f7f9b0020f580cb1"
        }
      }
    },
    {
      "id": "ui:image-annotator",
      "name": "Image annotator",
      "category": "a2ui-catalog",
      "description": "Point/select annotations on an uploaded image. v1 ships a host React renderer (basicCatalog has no canvas primitive).",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "experimental",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "f5e6485b4cc8ee6254b6c3609f9b294d7db0096e55bac488cc30f7543ad70ace"
        },
        "requiresCustomPrimitives": true
      }
    },
    {
      "id": "ui:inventory-status",
      "name": "Inventory status",
      "category": "a2ui-catalog",
      "description": "Per-variant in-stock / low / out indicator with optional notify-me action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "df0aed2fb6754c7b9425aaa3429ecb8e22bc7274278cfdd43bd62ebac9c6e28f"
        }
      }
    },
    {
      "id": "ui:language-picker",
      "name": "Language picker",
      "category": "a2ui-catalog",
      "description": "Locale switcher: list of supported languages with selected state and a confirm action.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "5a516dd9a65ff143a30b170ded3d3ddfce421dfecc4626d25b0316c59b9e872c"
        }
      }
    },
    {
      "id": "ui:multi-step-form",
      "name": "Multi-step form",
      "category": "a2ui-catalog",
      "description": "Wizard form with progress indicator and a back/next/submit flow across N steps.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "9d9b245ad7cf8f5a21c2a830e93d4eac8c1d251293219d809789b33470f79f2a"
        }
      }
    },
    {
      "id": "ui:payment-method-picker",
      "name": "Payment method picker",
      "category": "a2ui-catalog",
      "description": "Saved-card selector plus 'add new' affordance. Card details never traverse the A2UI dataModel.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "556f87cabc3729391541f4c3a5c9c98635d120cead440b117b296db67bd3e35c"
        }
      }
    },
    {
      "id": "ui:price-compare",
      "name": "Price compare",
      "category": "a2ui-catalog",
      "description": "Side-by-side comparison of 2–3 products: pricing, key specs, and an 'add to cart' action per product.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "3377680952a124d448c350c1daf321b99712bbe1a4b5455f2afec5cf36caf61c"
        }
      }
    },
    {
      "id": "ui:quantity-stepper",
      "name": "Quantity stepper",
      "category": "a2ui-catalog",
      "description": "Integer quantity stepper with min/max bounds and a recalculated unit price summary.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "b1e6e13d62384fbcbdeb57f3e760a4b0f137901c6a8ec1b2d3dd620e8c484bf0"
        }
      }
    },
    {
      "id": "ui:shipping-tracker",
      "name": "Shipping tracker",
      "category": "a2ui-catalog",
      "description": "Order shipment timeline. v1 ships a host React renderer (no map view); the A2UI envelope carries waypoints + status only.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "experimental",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "cc7d4e24f93dbaa5bc7603d0d55f5eaf36d153d6ecc5ea3bb88e67edbad93981"
        },
        "requiresCustomPrimitives": true
      }
    },
    {
      "id": "ui:subscription-manager",
      "name": "Subscription manager",
      "category": "a2ui-catalog",
      "description": "Pause / resume / cancel a recurring subscription with current billing summary.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "stable",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "5952938f00eda6d52429cf88bffb5af459b4723b6bca91edc0dff7b68bf58af3"
        }
      }
    },
    {
      "id": "ui:troubleshooter",
      "name": "Troubleshooter",
      "category": "a2ui-catalog",
      "description": "Branching diagnostic tree: agent walks the user through yes/no questions to isolate the issue. v1 caps tree depth at 3.",
      "files": [
        "manifest.json",
        "preset.ts",
        "schema.json",
        "actions.ts",
        "component.tsx",
        "mock.ts",
        "i18n.ts",
        "README.md",
        "CLAUDE.md",
        "tests/unit.test.tsx"
      ],
      "dependencies": [],
      "registryTargets": [
        "a2ui-surface"
      ],
      "tests": [
        "tests/unit.test.tsx"
      ],
      "agentDocs": "CLAUDE.md",
      "ui": {
        "version": "1.0.0",
        "lifecycle": "experimental",
        "manifest": "manifest.json",
        "integrity": {
          "sha256": "245bee8850a7859ed5f7c084429174fa112f1995fc5eabdbedde6fdb8bdf8bd9"
        },
        "requiresCustomPrimitives": true
      }
    }
  ]
}
