{
  "schema_version": 1,
  "generated_by": "scripts/build-catalog.js",
  "library": {
    "name": "agent-ui",
    "version": "0.5",
    "delivery": "copy-paste HTML, CSS, and optional JS",
    "source_first": true,
    "framework": "none",
    "build_required": false,
    "runtime_network_requests": false
  },
  "setup": {
    "agent_instructions": "AGENTS.md",
    "ai_setup": "docs/guides/ai-setup.html",
    "ai_setup_markdown": "docs/guides/ai-setup.md",
    "site_url": "https://agent-ui.app",
    "og_image": "docs/og.png",
    "llms_txt": "llms.txt",
    "sitemap": "sitemap.xml",
    "robots": "robots.txt",
    "starter": "docs/starters/chat-tools.html",
    "canonical_full_run": "showcase/chat-run.html",
    "differentiation": "docs/guides/html-agent-ui.html",
    "docs_index": "docs/index.html",
    "host_chrome": "host-chrome.css",
    "recipe_css": "recipes/chat-tools.css",
    "copy_recipe": "node scripts/copy-recipe.js <recipe> <target-dir>",
    "path_convention": "Keep repository-relative paths (tokens.css, components/<name>/<name>.css, host-chrome.css). Rewrite the prefix only when nesting under an app folder.",
    "cdn_tag": "v0.5.0",
    "cdn_base": "https://cdn.jsdelivr.net/gh/itsbrennanm/agent-ui@v0.5.0",
    "docs_only_assets": [
      "docs/styles.css",
      "docs/docs.js",
      "docs/patterns/recipes.css",
      "docs/patterns/recipes.js",
      "showcase/showcase.css",
      "showcase/showcase.js"
    ],
    "checks": [
      "node scripts/check-all.js",
      "node scripts/check-browser.js"
    ],
    "shared_data_attributes": [
      "data-au-component",
      "data-au-action",
      "data-au-target",
      "data-au-value",
      "data-au-state"
    ],
    "shared_states": [
      "idle",
      "running",
      "waiting",
      "success",
      "error",
      "cancelled",
      "streaming"
    ]
  },
  "components": [
    {
      "name": "button",
      "category": "Foundation / actions",
      "description": "A compact native action control for submitting, confirming, navigating, or revealing work.",
      "agentic": false,
      "states": [
        "default",
        "hover",
        "focus-visible",
        "active",
        "disabled",
        "loading"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/button/button.css"
        ],
        "optional": []
      },
      "cssVariables": [
        "--au-btn-bg",
        "--au-btn-fg",
        "--au-btn-border",
        "--au-btn-radius",
        "--au-btn-height",
        "--au-btn-padding-inline",
        "--au-btn-gap"
      ],
      "events": [
        "native click",
        "native form events"
      ],
      "noJs": "Native keyboard and form behavior remains available without JavaScript.",
      "hostOwns": [
        "submission",
        "duplicate-submission prevention",
        "success and error feedback"
      ],
      "files": {
        "html": "components/button/button.html",
        "css": "components/button/button.css",
        "js": null,
        "fixture": "components/button/fixture.html",
        "contract": "components/button/README.md",
        "docs": "docs/components/button.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "input",
      "category": "Foundation / input",
      "description": "A native text input with a compact field wrapper for labels, hints, and errors.",
      "agentic": false,
      "states": [
        "default",
        "hover",
        "focus-visible",
        "disabled",
        "error"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/input/input.css"
        ],
        "optional": []
      },
      "cssVariables": [
        "--au-input-bg",
        "--au-input-fg",
        "--au-input-border",
        "--au-input-radius",
        "--au-input-height"
      ],
      "events": [
        "native input",
        "native change",
        "native form events"
      ],
      "noJs": "Native text entry and form submission remain available without JavaScript.",
      "hostOwns": [
        "validation",
        "error association",
        "submission",
        "value persistence"
      ],
      "files": {
        "html": "components/input/input.html",
        "css": "components/input/input.css",
        "js": null,
        "fixture": "components/input/fixture.html",
        "contract": "components/input/README.md",
        "docs": "docs/components/input.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "card",
      "category": "Foundation / display",
      "description": "A composable surface for grouping related content, evidence, or a bounded decision.",
      "agentic": false,
      "states": [
        "static",
        "interactive"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/card/card.css"
        ],
        "optional": [
          "components/button/button.css"
        ]
      },
      "cssVariables": [
        "--au-card-bg",
        "--au-card-border",
        "--au-card-radius",
        "--au-card-padding"
      ],
      "events": [
        "native child events"
      ],
      "noJs": "Static content remains fully rendered without JavaScript.",
      "hostOwns": [
        "semantic heading and landmark",
        "child actions",
        "interaction state"
      ],
      "files": {
        "html": "components/card/card.html",
        "css": "components/card/card.css",
        "js": null,
        "fixture": "components/card/fixture.html",
        "contract": "components/card/README.md",
        "docs": "docs/components/card.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "dialog",
      "category": "Foundation / feedback",
      "description": "A native modal for bounded decisions with a visible static fallback and optional focus enhancement.",
      "agentic": false,
      "states": [
        "idle",
        "waiting"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/dialog/dialog.css"
        ],
        "optional": [
          "components/button/button.css",
          "agent-ui.js"
        ]
      },
      "cssVariables": [
        "--au-dialog-bg",
        "--au-dialog-border",
        "--au-dialog-radius",
        "--au-dialog-width"
      ],
      "events": [
        "au:open",
        "au:close",
        "au:cancel"
      ],
      "noJs": "The dialog remains visible as an inline panel and native controls remain usable.",
      "hostOwns": [
        "dialog content",
        "decision validation",
        "execution",
        "persistence"
      ],
      "files": {
        "html": "components/dialog/dialog.html",
        "css": "components/dialog/dialog.css",
        "js": null,
        "fixture": "components/dialog/fixture.html",
        "contract": "components/dialog/README.md",
        "docs": "docs/components/dialog.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "chat-thread",
      "category": "Conversation",
      "description": "A normal-flow conversation container that owns message scrolling and composer placement.",
      "agentic": true,
      "states": [
        "static",
        "streaming",
        "new-content"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/chat-thread/chat-thread.css"
        ],
        "optional": [
          "components/chat-message/chat-message.css",
          "components/chat-input/chat-input.css",
          "components/button/button.css"
        ]
      },
      "cssVariables": [
        "--au-thread-bg",
        "--au-thread-border"
      ],
      "events": [
        "native child events"
      ],
      "noJs": "Messages stay readable in normal document flow and nested native forms can submit.",
      "hostOwns": [
        "scroll position",
        "stick-to-bottom behavior",
        "unread markers",
        "message insertion",
        "persistence"
      ],
      "files": {
        "html": "components/chat-thread/chat-thread.html",
        "css": "components/chat-thread/chat-thread.css",
        "js": null,
        "fixture": "components/chat-thread/fixture.html",
        "contract": "components/chat-thread/README.md",
        "docs": "docs/components/chat-thread.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "chat-message",
      "category": "Conversation",
      "description": "A single user, assistant, system, or tool turn with local status, optional model meta, expand, and host actions.",
      "agentic": true,
      "states": [
        "idle",
        "streaming",
        "success",
        "error",
        "cancelled"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/chat-message/chat-message.css"
        ],
        "optional": [
          "components/button/button.css"
        ]
      },
      "cssVariables": [
        "--au-message-gap",
        "--au-message-avatar"
      ],
      "events": [
        "native child events"
      ],
      "noJs": "The semantic article, role, time, optional model meta, expandable details, and body remain visible without JavaScript. Host action buttons stay usable when rendered.",
      "hostOwns": [
        "message identity",
        "ordering",
        "status transitions",
        "actions",
        "retry",
        "streaming buffer"
      ],
      "files": {
        "html": "components/chat-message/chat-message.html",
        "css": "components/chat-message/chat-message.css",
        "js": null,
        "fixture": "components/chat-message/fixture.html",
        "contract": "components/chat-message/README.md",
        "docs": "docs/components/chat-message.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "chat-input",
      "category": "Conversation",
      "description": "A native form composer with a textarea, helper copy, and host-owned submit action.",
      "agentic": true,
      "states": [
        "idle",
        "streaming",
        "disabled",
        "error"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/chat-input/chat-input.css"
        ],
        "optional": [
          "components/button/button.css"
        ]
      },
      "cssVariables": [],
      "events": [
        "native input",
        "native submit"
      ],
      "noJs": "The form submits normally with native controls.",
      "hostOwns": [
        "validation",
        "draft persistence",
        "uploads",
        "streaming control",
        "rate limits",
        "request lifecycle"
      ],
      "files": {
        "html": "components/chat-input/chat-input.html",
        "css": "components/chat-input/chat-input.css",
        "js": null,
        "fixture": "components/chat-input/fixture.html",
        "contract": "components/chat-input/README.md",
        "docs": "docs/components/chat-input.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "thinking-indicator",
      "category": "Agent activity",
      "description": "A compact status affordance for incremental agent work with a restrained looping indicator.",
      "agentic": true,
      "states": [
        "running",
        "streaming"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/thinking-indicator/thinking-indicator.css"
        ],
        "optional": []
      },
      "cssVariables": [],
      "events": [
        "none"
      ],
      "noJs": "The text label remains visible and understandable without animation or script.",
      "hostOwns": [
        "work start",
        "concrete result",
        "error",
        "cancellation"
      ],
      "files": {
        "html": "components/thinking-indicator/thinking-indicator.html",
        "css": "components/thinking-indicator/thinking-indicator.css",
        "js": null,
        "fixture": "components/thinking-indicator/fixture.html",
        "contract": "components/thinking-indicator/README.md",
        "docs": "docs/components/thinking-indicator.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "thinking-steps",
      "category": "Agent activity",
      "description": "A visible list of agent work with one shared state, elapsed time, and optional detail text per step.",
      "agentic": true,
      "states": [
        "idle",
        "running",
        "success",
        "error",
        "cancelled"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/thinking-steps/thinking-steps.css"
        ],
        "optional": []
      },
      "cssVariables": [],
      "events": [
        "none"
      ],
      "noJs": "Pre-rendered steps, labels, and elapsed times remain readable without JavaScript.",
      "hostOwns": [
        "step order",
        "state transitions",
        "elapsed time",
        "retry",
        "detail visibility"
      ],
      "files": {
        "html": "components/thinking-steps/thinking-steps.html",
        "css": "components/thinking-steps/thinking-steps.css",
        "js": null,
        "fixture": "components/thinking-steps/fixture.html",
        "contract": "components/thinking-steps/README.md",
        "docs": "docs/components/thinking-steps.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "tool-call",
      "category": "Tooling",
      "description": "A single tool invocation with its name, exact arguments, status, and output.",
      "agentic": true,
      "states": [
        "running",
        "waiting",
        "success",
        "error",
        "cancelled"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/tool-call/tool-call.css"
        ],
        "optional": []
      },
      "cssVariables": [],
      "events": [
        "native child events"
      ],
      "noJs": "Serialized arguments, output, tool name, and status remain visible as text.",
      "hostOwns": [
        "invocation",
        "authorization",
        "timeout",
        "retry",
        "cancellation",
        "output escaping",
        "audit identity"
      ],
      "files": {
        "html": "components/tool-call/tool-call.html",
        "css": "components/tool-call/tool-call.css",
        "js": null,
        "fixture": "components/tool-call/fixture.html",
        "contract": "components/tool-call/README.md",
        "docs": "docs/components/tool-call.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "approval-gate",
      "category": "Trust / approval",
      "description": "A bounded action proposal that requires a human decision before execution, with optional rationale.",
      "agentic": true,
      "states": [
        "waiting",
        "success",
        "error",
        "cancelled"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/approval-gate/approval-gate.css"
        ],
        "optional": [
          "components/button/button.css"
        ]
      },
      "cssVariables": [],
      "events": [
        "native submit"
      ],
      "noJs": "The exact action, optional rationale, and native decision form remain visible and can submit normally.",
      "hostOwns": [
        "authorization",
        "immutable action identity",
        "decision recording",
        "execution",
        "stale approval handling",
        "optional countdown or shortcut chrome"
      ],
      "files": {
        "html": "components/approval-gate/approval-gate.html",
        "css": "components/approval-gate/approval-gate.css",
        "js": null,
        "fixture": "components/approval-gate/fixture.html",
        "contract": "components/approval-gate/README.md",
        "docs": "docs/components/approval-gate.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    },
    {
      "name": "ask-user-question",
      "category": "Trust / input",
      "description": "A native, resumable question flow for a small set of meaningful options.",
      "agentic": true,
      "states": [
        "waiting",
        "answered",
        "error",
        "cancelled"
      ],
      "dependencies": {
        "required": [
          "tokens.css",
          "components/ask-user-question/ask-user-question.css"
        ],
        "optional": [
          "components/button/button.css"
        ]
      },
      "cssVariables": [],
      "events": [
        "native change",
        "native submit"
      ],
      "noJs": "The form submits normally and options remain visible.",
      "hostOwns": [
        "validation",
        "persistence",
        "authorization",
        "plan resumption",
        "follow-up questions"
      ],
      "files": {
        "html": "components/ask-user-question/ask-user-question.html",
        "css": "components/ask-user-question/ask-user-question.css",
        "js": null,
        "fixture": "components/ask-user-question/fixture.html",
        "contract": "components/ask-user-question/README.md",
        "docs": "docs/components/ask-user-question.html"
      },
      "commonDataAttributes": [
        "data-au-component",
        "data-au-action",
        "data-au-target",
        "data-au-value",
        "data-au-state"
      ]
    }
  ],
  "recipes": [
    {
      "name": "chat-streaming",
      "kind": "recipe",
      "path": "docs/patterns/chat-streaming.html",
      "purpose": "Show a conversation moving through streaming, success, error, and cancelled states.",
      "components": [
        "button",
        "chat-thread",
        "chat-message",
        "chat-input",
        "thinking-indicator",
        "thinking-steps"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/chat-thread/chat-thread.css",
        "components/chat-message/chat-message.css",
        "components/chat-input/chat-input.css",
        "components/thinking-indicator/thinking-indicator.css",
        "components/thinking-steps/thinking-steps.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "chat-streaming-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/chat-thread/chat-thread.css\">\n<link rel=\"stylesheet\" href=\"components/chat-message/chat-message.css\">\n<link rel=\"stylesheet\" href=\"components/chat-input/chat-input.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-indicator/thinking-indicator.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-steps/thinking-steps.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    },
    {
      "name": "tool-approval",
      "kind": "recipe",
      "path": "docs/patterns/tool-approval.html",
      "purpose": "Show an exact tool proposal waiting for approval, rejection, execution, error, or cancellation.",
      "components": [
        "button",
        "tool-call",
        "approval-gate"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/tool-call/tool-call.css",
        "components/approval-gate/approval-gate.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "tool-approval-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/tool-call/tool-call.css\">\n<link rel=\"stylesheet\" href=\"components/approval-gate/approval-gate.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    },
    {
      "name": "question-resume",
      "kind": "recipe",
      "path": "docs/patterns/question-resume.html",
      "purpose": "Show a native question that waits for an answer and resumes or fails explicitly.",
      "components": [
        "button",
        "ask-user-question"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/ask-user-question/ask-user-question.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "question-resume-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/ask-user-question/ask-user-question.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    },
    {
      "name": "chat-tools",
      "kind": "starter",
      "path": "docs/starters/chat-tools.html",
      "purpose": "Start with a complete chat-with-tools screen containing message, thinking, tool, approval, and question states.",
      "components": [
        "button",
        "chat-thread",
        "chat-message",
        "chat-input",
        "thinking-indicator",
        "thinking-steps",
        "tool-call",
        "approval-gate",
        "ask-user-question"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/chat-thread/chat-thread.css",
        "components/chat-message/chat-message.css",
        "components/chat-input/chat-input.css",
        "components/thinking-indicator/thinking-indicator.css",
        "components/thinking-steps/thinking-steps.css",
        "components/tool-call/tool-call.css",
        "components/approval-gate/approval-gate.css",
        "components/ask-user-question/ask-user-question.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "chat-tools-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/chat-thread/chat-thread.css\">\n<link rel=\"stylesheet\" href=\"components/chat-message/chat-message.css\">\n<link rel=\"stylesheet\" href=\"components/chat-input/chat-input.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-indicator/thinking-indicator.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-steps/thinking-steps.css\">\n<link rel=\"stylesheet\" href=\"components/tool-call/tool-call.css\">\n<link rel=\"stylesheet\" href=\"components/approval-gate/approval-gate.css\">\n<link rel=\"stylesheet\" href=\"components/ask-user-question/ask-user-question.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">",
      "recipe_css": "recipes/chat-tools.css",
      "canonical": true
    },
    {
      "name": "chat-run",
      "kind": "showcase",
      "path": "showcase/chat-run.html",
      "purpose": "Canonical host composition of the full chat-with-tools run. Starter aliases this approval contract.",
      "components": [
        "button",
        "chat-thread",
        "chat-message",
        "chat-input",
        "thinking-indicator",
        "thinking-steps",
        "tool-call",
        "approval-gate",
        "ask-user-question"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/chat-thread/chat-thread.css",
        "components/chat-message/chat-message.css",
        "components/chat-input/chat-input.css",
        "components/thinking-indicator/thinking-indicator.css",
        "components/thinking-steps/thinking-steps.css",
        "components/tool-call/tool-call.css",
        "components/approval-gate/approval-gate.css",
        "components/ask-user-question/ask-user-question.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "chat-run-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/chat-thread/chat-thread.css\">\n<link rel=\"stylesheet\" href=\"components/chat-message/chat-message.css\">\n<link rel=\"stylesheet\" href=\"components/chat-input/chat-input.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-indicator/thinking-indicator.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-steps/thinking-steps.css\">\n<link rel=\"stylesheet\" href=\"components/tool-call/tool-call.css\">\n<link rel=\"stylesheet\" href=\"components/approval-gate/approval-gate.css\">\n<link rel=\"stylesheet\" href=\"components/ask-user-question/ask-user-question.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">",
      "aliases": [
        "chat-tools"
      ]
    },
    {
      "name": "streaming",
      "kind": "showcase",
      "path": "showcase/streaming.html",
      "purpose": "Showcase of honest streaming, success, error, and cancelled message states.",
      "components": [
        "button",
        "chat-thread",
        "chat-message",
        "chat-input",
        "thinking-indicator",
        "thinking-steps"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/chat-thread/chat-thread.css",
        "components/chat-message/chat-message.css",
        "components/chat-input/chat-input.css",
        "components/thinking-indicator/thinking-indicator.css",
        "components/thinking-steps/thinking-steps.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "streaming-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/chat-thread/chat-thread.css\">\n<link rel=\"stylesheet\" href=\"components/chat-message/chat-message.css\">\n<link rel=\"stylesheet\" href=\"components/chat-input/chat-input.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-indicator/thinking-indicator.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-steps/thinking-steps.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    },
    {
      "name": "tool-approval-showcase",
      "kind": "showcase",
      "path": "showcase/tool-approval.html",
      "purpose": "Showcase of exact arguments, immutable action ID, and host-owned approve or reject.",
      "components": [
        "button",
        "tool-call",
        "approval-gate"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/tool-call/tool-call.css",
        "components/approval-gate/approval-gate.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "tool-approval-showcase-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/tool-call/tool-call.css\">\n<link rel=\"stylesheet\" href=\"components/approval-gate/approval-gate.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    },
    {
      "name": "judgement-pause",
      "kind": "showcase",
      "path": "showcase/judgement-pause.html",
      "purpose": "Compose approval-gate with ask-user-question when policy needs a choice first.",
      "components": [
        "button",
        "card",
        "approval-gate",
        "ask-user-question"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/card/card.css",
        "components/approval-gate/approval-gate.css",
        "components/ask-user-question/ask-user-question.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "judgement-pause-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/card/card.css\">\n<link rel=\"stylesheet\" href=\"components/approval-gate/approval-gate.css\">\n<link rel=\"stylesheet\" href=\"components/ask-user-question/ask-user-question.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    },
    {
      "name": "rich-objects",
      "kind": "showcase",
      "path": "showcase/rich-objects.html",
      "purpose": "Orbit-style synthesis and outcomes as host composition, not extracted inventory.",
      "components": [
        "button",
        "card",
        "chat-thread",
        "chat-message",
        "thinking-steps",
        "approval-gate"
      ],
      "stylesheets": [
        "tokens.css",
        "components/button/button.css",
        "components/card/card.css",
        "components/chat-thread/chat-thread.css",
        "components/chat-message/chat-message.css",
        "components/thinking-steps/thinking-steps.css",
        "components/approval-gate/approval-gate.css",
        "host-chrome.css"
      ],
      "host_chrome": true,
      "install_id": "rich-objects-install",
      "install_html": "<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components/button/button.css\">\n<link rel=\"stylesheet\" href=\"components/card/card.css\">\n<link rel=\"stylesheet\" href=\"components/chat-thread/chat-thread.css\">\n<link rel=\"stylesheet\" href=\"components/chat-message/chat-message.css\">\n<link rel=\"stylesheet\" href=\"components/thinking-steps/thinking-steps.css\">\n<link rel=\"stylesheet\" href=\"components/approval-gate/approval-gate.css\">\n<link rel=\"stylesheet\" href=\"host-chrome.css\">"
    }
  ]
}
