{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "ambientui",
  "homepage": "https://registry.ambientui.ai",
  "items": [
    {
      "name": "foundation-tokens",
      "type": "registry:lib",
      "title": "The configuration space",
      "description": "Every dimension the design system can vary — accents, grays, the radius window, the spacing grid, scaling, the role map, motion characters, fonts, icon libraries — and the compiler that turns a config into CSS. Data and one pure function; no React.",
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "packages/foundation/src/tokens.ts",
          "type": "registry:lib",
          "target": "lib/foundation/tokens.ts"
        }
      ],
      "docs": "compileFoundationCss(config) returns the whole theme as text. Inject it into a <style> tag at runtime, or render it into your globals at build time — the provider is one way to use this, not the only one.\n\n  import { compileFoundationCss, DEFAULT_FOUNDATION } from \"@/lib/foundation/tokens\"",
      "meta": {
        "door": "foundation",
        "layer": "data"
      }
    },
    {
      "name": "foundation-theme",
      "type": "registry:file",
      "title": "The token bridge",
      "description": "The runtime variables the Foundation drives — the radius window and the motion roles — and the @theme block that routes Tailwind's utilities through them.",
      "files": [
        {
          "path": "styles/foundation.css",
          "type": "registry:file",
          "target": "styles/foundation.css"
        }
      ],
      "cssVars": {
        "light": {
          "radius-window-xs": "0.125rem",
          "radius-window-sm": "0.25rem",
          "radius-window-md": "0.375rem",
          "radius-window-lg": "0.5rem",
          "radius-window-xl": "0.75rem",
          "radius-window-2xl": "1rem",
          "radius-window-3xl": "1.5rem",
          "radius-window-4xl": "2rem",
          "motion-micro": "120ms",
          "motion-control": "180ms",
          "motion-surface": "240ms",
          "motion-page": "320ms",
          "motion-ease": "cubic-bezier(0.2, 0, 0, 1)"
        }
      },
      "docs": "Add `@import \"./styles/foundation.css\";` to your globals.css, AFTER `@import \"tailwindcss\"` and after your own shadcn token block. It does not ship shadcn's base — run `npx shadcn init` first and keep yours.",
      "meta": {
        "door": "foundation",
        "layer": "css"
      }
    },
    {
      "name": "foundation",
      "type": "registry:block",
      "title": "The Foundation",
      "description": "The design system as a bounded configuration space: pick the accent, the gray, the radius step, the spacing unit, the motion character, and every surface follows. Saving is the commit point.",
      "dependencies": [],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/foundation-tokens.json",
        "https://registry.ambientui.ai/r/foundation-theme.json",
        "https://registry.ambientui.ai/r/icon.json"
      ],
      "files": [
        {
          "path": "packages/foundation/src/foundation-context.tsx",
          "type": "registry:component",
          "target": "components/foundation-provider.tsx"
        }
      ],
      "docs": "Wrap your app:\n\n  <FoundationProvider>{children}</FoundationProvider>\n\nIt compiles the config into a <style id=\"ambientui-foundation\"> tag and persists it under \"ambientui-foundation\". It does NOT mount an assistant — if you took the ambient layer too, add foundation-ambient-bridge.",
      "meta": {
        "door": "foundation",
        "layer": "runtime"
      }
    },
    {
      "name": "foundation-ambient-bridge",
      "type": "registry:component",
      "title": "Foundation → ambient layer",
      "description": "Binds the ambient layer's motion, palette and stream pace to your Foundation config, so the assistant has no values of its own.",
      "dependencies": [],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/foundation.json",
        "https://registry.ambientui.ai/r/ambient-layer.json"
      ],
      "files": [
        {
          "path": "packages/foundation/src/ambient-bridge.tsx",
          "type": "registry:component",
          "target": "components/foundation-ambient-bridge.tsx"
        }
      ],
      "docs": "Only needed if you took BOTH doors. Mount it inside FoundationProvider:\n\n  <FoundationProvider>\n    <FoundationAmbientBridge>{children}</FoundationAmbientBridge>\n  </FoundationProvider>",
      "meta": {
        "door": "foundation",
        "layer": "bridge"
      }
    },
    {
      "name": "ambient-assets",
      "type": "registry:file",
      "title": "The orb's shapes",
      "description": "The five SVG shapes the heat shader wraps — the circle the orb wears and the rects a surface field fills. Static files, served from your public root.",
      "files": [
        {
          "path": "packages/ambient/assets/orb-circle.svg",
          "type": "registry:file",
          "target": "public/orb-circle.svg"
        },
        {
          "path": "packages/ambient/assets/orb-rect.svg",
          "type": "registry:file",
          "target": "public/orb-rect.svg"
        },
        {
          "path": "packages/ambient/assets/orb-rect-wide.svg",
          "type": "registry:file",
          "target": "public/orb-rect-wide.svg"
        },
        {
          "path": "packages/ambient/assets/orb-rect-tall.svg",
          "type": "registry:file",
          "target": "public/orb-rect-tall.svg"
        },
        {
          "path": "packages/ambient/assets/orb-rect-banner.svg",
          "type": "registry:file",
          "target": "public/orb-rect-banner.svg"
        }
      ],
      "docs": "These land in public/ and are loaded by URL at runtime. If your app is served from a subpath, pass that base to the layer (assetBase on the runtime, or FoundationProvider's assetBase prop) — a root-absolute URL resolves against the domain, not your app."
    },
    {
      "name": "ambient-styles",
      "type": "registry:file",
      "title": "Ambient material",
      "description": "The glass recipes, translucency tokens, live border, glyph breath and stream edge that every ambient surface wears.",
      "files": [
        {
          "path": "packages/ambient/src/styles/ambient.css",
          "type": "registry:file",
          "target": "styles/ambient.css"
        }
      ],
      "cssVars": {
        "light": {
          "ambient-blur": "48px",
          "ambient-accent": "#2563eb",
          "ambient-accent-wash": "rgba(59, 130, 246, 0.1)"
        },
        "dark": {
          "ambient-accent": "#4d9aff",
          "ambient-accent-wash": "rgba(61, 130, 246, 0.16)"
        }
      },
      "docs": "Add `@import \"./styles/ambient.css\";` to your globals.css, after `@import \"tailwindcss\"` and after your shadcn token block. Requires Tailwind v4 and the standard shadcn variables. --ambient-accent is the one value worth retuning per app: it drives the live border, the stream's leading edge and the shimmering placeholder."
    },
    {
      "name": "ambient-layer",
      "type": "registry:block",
      "title": "The ambient layer",
      "description": "The complete AI assistant surface — orb, line, panel, dock, spotlight and history. It renders above your product rather than inside its component tree.",
      "dependencies": [
        "framer-motion",
        "@paper-design/shaders-react",
        "@hugeicons/react",
        "@hugeicons/core-free-icons"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json",
        "https://registry.ambientui.ai/r/icon.json",
        "button",
        "input",
        "skeleton",
        "sidebar"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/assistant.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant.tsx"
        },
        {
          "path": "packages/ambient/src/attach-menu.tsx",
          "type": "registry:component",
          "target": "components/ambient/attach-menu.tsx"
        },
        {
          "path": "packages/ambient/src/compose-response.ts",
          "type": "registry:lib",
          "target": "components/ambient/compose-response.ts"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/index.ts",
          "type": "registry:lib",
          "target": "components/ambient/index.ts"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/orb.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb.tsx"
        },
        {
          "path": "packages/ambient/src/response-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/response-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-attach-menu.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-attach-menu.ts"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "Import the material once: `@import \"./styles/ambient.css\";` in your globals.css. Then mount the layer at the root of your app:\n\n  <AssistantProvider navItems={NAV} onNavigate={(id) => router.push(id)}>\n    {children}\n    <Assistant />\n  </AssistantProvider>\n\nIt needs no other providers — it falls back to DEFAULT_AMBIENT_RUNTIME. Supply your own design system by wrapping it in AmbientRuntimeProvider. This copies ~8,300 lines you will own and can edit — owning the source is the point; a versioned `ambientui` npm package is planned for those who want an upgrade path instead."
    },
    {
      "name": "icon",
      "type": "registry:ui",
      "title": "Icon",
      "description": "One semantic name, drawn by whichever icon library the design system is configured to use. Components name what an icon MEANS; the library is a Foundation choice, not a per-component import.",
      "dependencies": [
        "lucide-react",
        "@tabler/icons-react",
        "@phosphor-icons/react",
        "@remixicon/react",
        "@hugeicons/react",
        "@hugeicons/core-free-icons"
      ],
      "files": [
        {
          "path": "packages/ui/src/components/icon.tsx",
          "type": "registry:ui",
          "target": "components/ui/icon.tsx"
        },
        {
          "path": "packages/ui/src/lib/icon-library.ts",
          "type": "registry:lib",
          "target": "lib/icon-library.ts"
        }
      ],
      "docs": "Every name is mapped in all five libraries, so switching library redraws the whole product and never leaves a hole. That is why all five are dependencies: they are named ESM exports, so the bundle cost is near zero — the cost is install size. Wrap your app in IconLibraryProvider to choose one; it defaults to hugeicons."
    },
    {
      "name": "governance",
      "type": "registry:file",
      "title": "The governance layer for your AI",
      "description": "The rules an AI agent works under in this system: the constitution's hard rules, plus three review roles — design-system manager, product-design manager, and copy.",
      "files": [
        {
          "path": "CLAUDE.md",
          "type": "registry:file",
          "target": "~/CLAUDE.md"
        },
        {
          "path": ".claude/skills/ds-manager/SKILL.md",
          "type": "registry:file",
          "target": "~/.claude/skills/ds-manager/SKILL.md"
        },
        {
          "path": ".claude/skills/product-design-manager/SKILL.md",
          "type": "registry:file",
          "target": "~/.claude/skills/product-design-manager/SKILL.md"
        },
        {
          "path": ".claude/skills/product-copy/SKILL.md",
          "type": "registry:file",
          "target": "~/.claude/skills/product-copy/SKILL.md"
        },
        {
          "path": ".claude/skills/product-copy/REFERENCE.md",
          "type": "registry:file",
          "target": "~/.claude/skills/product-copy/REFERENCE.md"
        }
      ],
      "docs": "These files are written for THIS repo and reference its paths. Read them and adapt the paths to your own before relying on them — an unedited copy will point an agent at directories you do not have."
    },
    {
      "name": "section-rail",
      "type": "registry:ui",
      "title": "SectionRail",
      "description": "Right-edge dash rail for jumping between page sections — an ambientui extension to the product vocabulary (promoted via the watchlist).",
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "packages/ui/src/components/section-rail.tsx",
          "type": "registry:ui",
          "target": "components/ui/section-rail.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • Long single-column settings or document pages with 4+ named sections (the Foundation page).\n  • When the reader needs a sense of place plus one-click jumps without a full sidebar.\n\nWHEN NOT TO USE\n  • Pages that already have a navigation rail for their sections — one wayfinding system per page.\n  • Fewer than three sections — a rail for two items is noise.\n\n  import { SectionRail } from \"@/components/ui/section-rail\"",
      "meta": {
        "vocabulary": "product"
      }
    },
    {
      "name": "view-menu",
      "type": "registry:ui",
      "title": "ViewMenu",
      "description": "The app's destinations as a segmented pill — every view visible as an icon, the current one expanded to wear its name (an ambientui extension to the product vocabulary).",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/foundation.json",
        "https://registry.ambientui.ai/r/icon.json",
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "packages/patterns/src/view-menu.tsx",
          "type": "registry:ui",
          "target": "components/ui/view-menu.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • Switching between a small set of top-level views on a surface where permanent chrome would compete with the content.\n\nWHEN NOT TO USE\n  • Tabbed panes INSIDE a page — that is Tabs, and the relationship there is between siblings, not destinations.\n  • More than a handful of destinations, or anything needing search — that is the spotlight.\n  • As a home for settings. Appearance earns its place because it is reached without meaning to go anywhere; a second one would turn a row of destinations into a menu bar.\n\n  import { ViewMenu } from \"@/components/ui/view-menu\"",
      "meta": {
        "vocabulary": "product"
      }
    },
    {
      "name": "save-reminder",
      "type": "registry:ui",
      "title": "SaveReminder",
      "description": "A save bar that rises from the bottom only while there are unsaved changes — the settings-kit's save affordance (promoted via the watchlist).",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/foundation.json",
        "button"
      ],
      "files": [
        {
          "path": "packages/patterns/src/settings-kit.tsx",
          "type": "registry:ui",
          "target": "components/ui/settings-kit.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • Pages with explicit save semantics where edits apply live but persist on save (the Foundation page).\n  • Any form where forgetting to save loses work on reload.\n\nWHEN NOT TO USE\n  • Autosaving surfaces — a reminder for something already saved erodes trust.\n  • Modal flows with their own confirm/cancel footer.\n\n  import { SaveReminder } from \"@/components/ui/settings-kit\"",
      "meta": {
        "vocabulary": "product"
      }
    },
    {
      "name": "orb-character",
      "type": "registry:ui",
      "title": "OrbCharacter",
      "description": "The assistant's animated identity — an iridescent sphere whose palette derives from the theme accent, with four states covering the AI's lifecycle.",
      "dependencies": [
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • As the assistant's face — the floating orb is this character at 52px.\n  • Anywhere the AI's lifecycle needs to be visible: avatars, processing surfaces.\n\nWHEN NOT TO USE\n  • As decoration on pages where no AI is present — the character means the AI is here.\n  • ONE CHARACTER PER SURFACE, in the row you speak to it: the composer mark, the quick-ask pill, and the resting orb. Not headers, not footers, not navigation. A shell that stamps the character on every bar is signing itself once per component, and the mark stops meaning \"the assistant is listening here\" and starts meaning \"logo\".\n\nOrbCharacter ships inside orb-character.tsx, alongside 3 sibling components (OrbGlyph, OrbHeat, OrbField). They share the stage queue and cannot be separated.\n\n  import { OrbCharacter } from \"@/components/ambient/orb-character\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "orb-character.tsx"
      }
    },
    {
      "name": "streaming-text",
      "type": "registry:ui",
      "title": "StreamingText",
      "description": "Text that arrives rather than appears — the assistant writing, with a warm tail and a blurred leading edge.",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • Any assistant text that is genuinely being produced as you watch.\n  • When the pace of arrival is information — a slow answer should look slow.\n\nWHEN NOT TO USE\n  • Text that is already known — faking a stream is a lie about latency.\n  • Long documents or code; use a settled block and show progress elsewhere.\n  • Product copy of any kind: this treatment says an assistant is writing.\n\nStreamingText ships inside streaming-text.tsx.\n\n  import { StreamingText } from \"@/components/ambient/streaming-text\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "streaming-text.tsx"
      }
    },
    {
      "name": "message-branches",
      "type": "registry:ui",
      "title": "MessageBranches",
      "description": "Regenerated versions of the same answer, navigable without losing your place.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/response-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/response-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Wherever regeneration is offered — the alternative is silently destroying an answer the user might have preferred.\n  • When comparing phrasings or approaches matters more than the latest attempt.\n\nWHEN NOT TO USE\n  • Across different questions; branches are versions of one answer, not a history.\n  • For editing a sent message — that is a different object, with its own consequence disclosure.\n\nMessageBranches ships inside response-kit.tsx, alongside 4 sibling components (ReferenceChips, UserMessage, MessagePair, ResponseBlock). They share the stage queue and cannot be separated.\n\n  import { MessageBranches } from \"@/components/ambient/response-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "response-kit.tsx"
      }
    },
    {
      "name": "message-pair",
      "type": "registry:ui",
      "title": "MessagePair",
      "description": "The unit of a conversation: one question and the answer it produced, presented together.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/response-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/response-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any assistant exchange in a conversation surface — panel, dock, or the spotlight's AI Overview.\n  • When the question needs to stay visible next to its answer, which is nearly always.\n\nWHEN NOT TO USE\n  • A one-shot answer with no question worth showing — render the answer alone.\n  • System notices or confirmations; those are toasts or an error object.\n\nMessagePair ships inside response-kit.tsx, alongside 4 sibling components (ReferenceChips, UserMessage, MessageBranches, ResponseBlock). They share the stage queue and cannot be separated.\n\n  import { MessagePair } from \"@/components/ambient/response-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "response-kit.tsx"
      }
    },
    {
      "name": "reference-chips",
      "type": "registry:ui",
      "title": "ReferenceChips",
      "description": "Numbered provenance chips under an answer — what the assistant grounded its reply in.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/response-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/response-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Under any composed answer that used page context or attached items.\n  • For citations — give web sources their logo and internal ones a typed icon, so provenance is recognizable before it is read.\n  • When the user needs to audit what the assistant saw — the governance habit applied to answers.\n\nWHEN NOT TO USE\n  • As navigation through the product — a reference opens its source, it is not a menu.\n  • For attaching context, which is the AI form's ContextRow.\n  • To dress up an unsourced claim: a mark makes a reference look authoritative, so never add one the answer did not actually use.\n\nReferenceChips ships inside response-kit.tsx, alongside 4 sibling components (UserMessage, MessagePair, MessageBranches, ResponseBlock). They share the stage queue and cannot be separated.\n\n  import { ReferenceChips } from \"@/components/ambient/response-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "response-kit.tsx"
      }
    },
    {
      "name": "shimmer-placeholder",
      "type": "registry:ui",
      "title": "ShimmerPlaceholder",
      "description": "The placeholder every AI form wears — text with a highlight travelling through it, the ambient layer's way of saying the assistant is listening before anything is typed.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • Any input that talks to the assistant, in any form factor.\n  • When a field should feel awake before it is used — the shimmer is presence, not decoration.\n\nWHEN NOT TO USE\n  • Product inputs (settings, forms, filters) — a shimmering placeholder there claims an AI is listening when none is.\n  • Fields that already have a value, or read-only text; motion on stable content is noise.\n  • As a loading indicator — the orb's states carry progress, this only carries availability.\n\nShimmerPlaceholder ships inside ambient-marks.tsx, alongside 3 sibling components (AssistantMark, IconTile, ContextChipView). They share the stage queue and cannot be separated.\n\n  import { ShimmerPlaceholder } from \"@/components/ambient/ambient-marks\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "ambient-marks.tsx"
      }
    },
    {
      "name": "context-chip",
      "type": "registry:ui",
      "title": "ContextChip · ContextChipView",
      "description": "One attached thing the assistant can see — the chip that makes context visible instead of implied.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • Above any AI input, to show what the answer will be grounded in before it is asked.\n  • Whenever the assistant gains access to something new mid-conversation.\n\nWHEN NOT TO USE\n  • For filters or tags in product UI — this pill claims 'the assistant can see this', which is a specific promise.\n  • For results or citations after an answer — that is ReferenceChips.\n\nContextChip and ContextChipView ship inside ambient-marks.tsx, alongside 3 sibling components (ShimmerPlaceholder, AssistantMark, IconTile). They share the stage queue and cannot be separated.\n\n  import { ContextChip, ContextChipView } from \"@/components/ambient/ambient-marks\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "ambient-marks.tsx"
      }
    },
    {
      "name": "composer",
      "type": "registry:ui",
      "title": "Composer",
      "description": "The one place a question is written: an optional character mark, context chips, the input, and one control.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Anywhere a question is typed to the assistant — it is the only sanctioned composer.\n\nWHEN NOT TO USE\n  • For product search or filters; this control promises an AI on the other end.\n  • Never rebuild the input row inline in a surface — that is exactly the drift this extraction removes.\n\nComposer ships inside composer.tsx.\n\n  import { Composer } from \"@/components/ambient/composer\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "composer.tsx"
      }
    },
    {
      "name": "review-comment",
      "type": "registry:ui",
      "title": "ReviewComment",
      "description": "A teammate's note threaded into the code it is about, with the assistant reachable from inside it.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Human review notes inside a diff or an editor, where the assistant may be asked to resolve them.\n  • Anywhere a comment's meaning depends on exactly which line it points at.\n\nWHEN NOT TO USE\n  • For the assistant's own output — that is the response kit; this component is for a person's words.\n  • As a general comment feed detached from code; without an anchor it is just a message list.\n\nReviewComment ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { ReviewComment } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "attach-menu",
      "type": "registry:ui",
      "title": "AttachMenu · AskAI",
      "description": "The attach gesture: right-click anything to make it context, or ask where the data is.",
      "dependencies": [
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/attach-menu.tsx",
          "type": "registry:component",
          "target": "components/ambient/attach-menu.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        }
      ],
      "docs": "WHEN TO USE\n  • On any object a user might reasonably ask about — a row, a cell, a file, a line of code.\n  • Beside a problem or anomaly the product already surfaces; that is the moment the question exists.\n\nWHEN NOT TO USE\n  • On every element indiscriminately — if everything is attachable, the gesture stops meaning anything.\n  • As a replacement for the product's own actions; this attaches context, it does not perform work.\n\nAttachMenu and AskAI ship inside attach-menu.tsx.\n\n  import { AttachMenu, AskAI } from \"@/components/ambient/attach-menu\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "attach-menu.tsx"
      }
    },
    {
      "name": "message-actions",
      "type": "registry:ui",
      "title": "MessageActions",
      "description": "Copy, rate, and regenerate — the quiet row under an answer, where each action confirms itself.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Under any completed assistant answer.\n  • Anywhere the user's reaction is worth capturing at the moment they have it.\n\nWHEN NOT TO USE\n  • On a message still streaming — rating an unfinished answer measures patience, not quality.\n  • For destructive actions; put those behind the More control with their own confirmation.\n\nMessageActions ships inside message-kit.tsx, alongside 14 sibling components (THINKING, FollowUpSuggestions, ErrorState, MessageQueue, …). They share the stage queue and cannot be separated.\n\n  import { MessageActions } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "follow-up-suggestions",
      "type": "registry:ui",
      "title": "FollowUpSuggestions",
      "description": "A titled group of next turns, offered as prompts rather than performed.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • After an answer that opens obvious next questions — a diff to review, a test to write.\n  • In an empty conversation, as the fastest way to show what the assistant can do.\n\nWHEN NOT TO USE\n  • As navigation to product features; that is the palette's job.\n  • More than about four at a time — a menu of prompts is a decision, not a shortcut.\n\nFollowUpSuggestions ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, ErrorState, MessageQueue, …). They share the stage queue and cannot be separated.\n\n  import { FollowUpSuggestions } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "error-state",
      "type": "registry:ui",
      "title": "ErrorState",
      "description": "A quiet failure banner with a retry path, not a modal in your face.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • A generation that stopped, timed out, or hit a limit.\n  • Any failure where retrying is genuinely the right next step.\n\nWHEN NOT TO USE\n  • For a failed tool call inside an otherwise fine answer — that is ToolFailure, which is scoped to the call.\n  • For validation or empty states; a failure claim should be reserved for actual failures.\n\nErrorState ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, MessageQueue, …). They share the stage queue and cannot be separated.\n\n  import { ErrorState } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "message-queue",
      "type": "registry:ui",
      "title": "MessageQueue",
      "description": "Turns you typed while a run was in flight, stacked and cancelable until it finishes.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Whenever the composer accepts input during a run — the alternative is blocking the input and making the user hold a thought.\n\nWHEN NOT TO USE\n  • As a task list; these are unsent messages, not work items.\n  • When turns cannot actually be reordered or canceled — showing controls that do nothing is worse than a plain count.\n\nMessageQueue ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { MessageQueue } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "reasoning-panel",
      "type": "registry:ui",
      "title": "ReasoningPanel",
      "description": "A collapsible trace that streams reasoning steps, then settles into a summary.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any run where thinking takes long enough that silence reads as a hang.\n  • When the reasoning is genuinely reviewable — a plan, a search strategy, a chain of constraints.\n\nWHEN NOT TO USE\n  • To pad a fast answer with theatre; a trace on a 200ms reply is a costume.\n  • For tool activity, which has its own objects (ToolCall, ToolTimeline).\n\nReasoningPanel ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { ReasoningPanel } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "reasoning-effort",
      "type": "registry:ui",
      "title": "ReasoningEffort",
      "description": "How hard to think, and how much of that budget the run actually spent.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Wherever the user pays for thinking — in tokens, in latency, or in both.\n  • In settings AND beside a run, so the choice can be learned from its result.\n\nWHEN NOT TO USE\n  • When effort makes no observable difference; a control with no consequence teaches the user to ignore controls.\n\nReasoningEffort ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { ReasoningEffort } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "message-attachments",
      "type": "registry:ui",
      "title": "MessageAttachments",
      "description": "What was attached, before or after sending — a pasted stack trace, an image to open, a document with its page count.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • On a user turn that carried files, and on assistant turns that produced them.\n  • In a composer that stands alone (`compact`), for anything staged while the turn is still being written. Inside the ambient layer, the context row does this instead.\n\nWHEN NOT TO USE\n  • For links or references; those are ContextChip and ReferenceChips.\n  • As a second place to show what is already staged. ONE ROW OWNS THE STAGE: where a context row exists it draws the attachments itself, in its own slider, and the composer is handed none. Rendering them in both produced two of every chip, each with its own remove button — and later, when that was fixed by stacking them instead, two rows that read as two different kinds of thing.\n\nMessageAttachments ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { MessageAttachments } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "quote-reply",
      "type": "registry:ui",
      "title": "QuoteReply",
      "description": "Select a phrase and a contextual edit bar attaches beneath it — describe an edit, or pick one, and watch the rewrite arrive in place.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Around long assistant answers, especially ones mixing prose and code.\n\nWHEN NOT TO USE\n  • Around user messages — quoting yourself back to the assistant is what the composer is for.\n  • Where text is short enough to reference whole; a toolbar over one sentence is friction.\n\nQuoteReply ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { QuoteReply } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "feedback-dialog",
      "type": "registry:ui",
      "title": "FeedbackDialog",
      "description": "A thumbs-down that asks why, so the signal arrives with a reason attached.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Immediately after a negative rating, in place.\n\nWHEN NOT TO USE\n  • After a positive rating — interrogating praise is how you stop receiving it.\n  • As a general support form; this is about one answer.\n\nFeedbackDialog ships inside message-kit.tsx, alongside 14 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { FeedbackDialog } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "timestamps",
      "type": "registry:ui",
      "title": "DayDivider · MessageTime",
      "description": "Chronology in a long thread: days marked, exact times on hover.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Threads that span sessions or days.\n  • Anywhere the age of an answer changes how much to trust it.\n\nWHEN NOT TO USE\n  • In a short-lived surface — quick ask, the palette — where everything happened just now.\n\nDayDivider and MessageTime ship inside message-kit.tsx, alongside 13 sibling components (THINKING, MessageActions, FollowUpSuggestions, ErrorState, …). They share the stage queue and cannot be separated.\n\n  import { DayDivider, MessageTime } from \"@/components/ambient/message-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "message-kit.tsx"
      }
    },
    {
      "name": "tool-call",
      "type": "registry:ui",
      "title": "ToolCall",
      "description": "One tool invocation with its request and result tucked behind a disclosure.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Every tool invocation the user should be able to audit.\n\nWHEN NOT TO USE\n  • For several calls that went out together — that is ParallelTools, which collapses them to one row.\n  • For a whole session's activity — that is ToolTimeline.\n\nToolCall ships inside tool-kit.tsx, alongside 7 sibling components (ToolTimeline, TerminalBlock, CodeDiff, ReviewableDiff, …). They share the stage queue and cannot be separated.\n\n  import { ToolCall } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "tool-timeline",
      "type": "registry:ui",
      "title": "ToolTimeline",
      "description": "A whole working session summarized as verbs, targets, and file stats.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • After an agent run of more than a couple of steps.\n  • Wherever the user needs to know what was touched before they trust the result.\n\nWHEN NOT TO USE\n  • For a single call, which reads better as a ToolCall.\n  • As a progress indicator during the run — it is a record, not a spinner.\n\nToolTimeline ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, TerminalBlock, CodeDiff, ReviewableDiff, …). They share the stage queue and cannot be separated.\n\n  import { ToolTimeline } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "terminal-block",
      "type": "registry:ui",
      "title": "TerminalBlock",
      "description": "Command output that streams line by line and ends with an exit status.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any command the assistant ran on the user's behalf.\n\nWHEN NOT TO USE\n  • For code the assistant wrote — that is CodeRunner, where the output belongs to a snippet.\n  • For long logs; link to them rather than pasting a thousand lines into a conversation.\n\nTerminalBlock ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, ToolTimeline, CodeDiff, ReviewableDiff, …). They share the stage queue and cannot be separated.\n\n  import { TerminalBlock } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "code-diff",
      "type": "registry:ui",
      "title": "CodeDiff",
      "description": "A unified diff with tinted additions and removals, sized for chat.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Whenever an answer changed code the user has not seen yet.\n\nWHEN NOT TO USE\n  • When the change still needs the user's approval — that is ReviewableDiff, where each hunk is a decision.\n  • For whole files; a diff is an argument about what changed.\n\nCodeDiff ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, ToolTimeline, TerminalBlock, ReviewableDiff, …). They share the stage queue and cannot be separated.\n\n  import { CodeDiff } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "reviewable-diff",
      "type": "registry:ui",
      "title": "ReviewableDiff",
      "description": "The same diff, but each hunk is a decision: keep it, discard it, apply what survived.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any change the assistant proposes to files the user owns.\n  • Wherever partial acceptance is genuinely possible.\n\nWHEN NOT TO USE\n  • For changes already applied — showing decisions for a fait accompli is theatre.\n  • When the hunks are not independent; offering per-hunk choice on a change that only works whole invites a broken state.\n\nReviewableDiff ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, ToolTimeline, TerminalBlock, CodeDiff, …). They share the stage queue and cannot be separated.\n\n  import { ReviewableDiff } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "parallel-tools",
      "type": "registry:ui",
      "title": "ParallelTools",
      "description": "Calls that went out together, collapsed to one row until you want the detail.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any fan-out — reading several files, querying several sources at once.\n\nWHEN NOT TO USE\n  • For sequential calls, where order carries meaning that a batch hides.\n  • For two calls; a batch of two is just two rows.\n\nParallelTools ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, ToolTimeline, TerminalBlock, CodeDiff, …). They share the stage queue and cannot be separated.\n\n  import { ParallelTools } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "tool-failure",
      "type": "registry:ui",
      "title": "ToolFailure",
      "description": "One call failed. The error, the attempt count, and a retry that doesn't restart the turn.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any tool call that failed inside an otherwise live turn.\n\nWHEN NOT TO USE\n  • When the whole generation stopped — that is ErrorState.\n  • For expected empty results; \"no matches\" is an answer, not a failure.\n\nToolFailure ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, ToolTimeline, TerminalBlock, CodeDiff, …). They share the stage queue and cannot be separated.\n\n  import { ToolFailure } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "code-runner",
      "type": "registry:ui",
      "title": "CodeRunner",
      "description": "A snippet with a run button, and the output it produced attached below it.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@paper-design/shaders-react",
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json",
        "https://registry.ambientui.ai/r/ambient-assets.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-marks.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-marks.tsx"
        },
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/assistant-context.tsx",
          "type": "registry:component",
          "target": "components/ambient/assistant-context.tsx"
        },
        {
          "path": "packages/ambient/src/composer.tsx",
          "type": "registry:component",
          "target": "components/ambient/composer.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/message-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/message-kit.tsx"
        },
        {
          "path": "packages/ambient/src/orb-character.tsx",
          "type": "registry:component",
          "target": "components/ambient/orb-character.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/tool-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/tool-kit.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Executable snippets the user is meant to try, not just read.\n\nWHEN NOT TO USE\n  • For code that changes files or state — that needs a ReviewableDiff and an explicit apply.\n  • For output with no code behind it; that is a TerminalBlock.\n\nCodeRunner ships inside tool-kit.tsx, alongside 7 sibling components (ToolCall, ToolTimeline, TerminalBlock, CodeDiff, …). They share the stage queue and cannot be separated.\n\n  import { CodeRunner } from \"@/components/ambient/tool-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "tool-kit.tsx"
      }
    },
    {
      "name": "web-search",
      "type": "registry:ui",
      "title": "WebSearch",
      "description": "A search query and its results landing one by one as the agent reads.",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Any answer grounded in a live search.\n  • Whenever the user should be able to challenge WHAT was searched, not just what was found.\n\nWHEN NOT TO USE\n  • As a final bibliography — that is ReferenceChips, under the answer.\n  • For internal retrieval with no user-visible sources.\n\nWebSearch ships inside knowledge-kit.tsx, alongside 2 sibling components (InlineCitation, ResearchReport). They share the stage queue and cannot be separated.\n\n  import { WebSearch } from \"@/components/ambient/knowledge-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "knowledge-kit.tsx"
      }
    },
    {
      "name": "inline-citation",
      "type": "registry:ui",
      "title": "InlineCitation",
      "description": "Numbered references inside a sentence, each with a hover preview of its source.",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Answers where individual claims have individual sources.\n  • Anywhere a reader may want to verify one sentence without auditing the whole reply.\n\nWHEN NOT TO USE\n  • On every sentence; a paragraph of superscripts is unreadable and reads as defensiveness.\n  • When the source does not actually support that specific claim — a citation is a promise.\n\nInlineCitation ships inside knowledge-kit.tsx, alongside 2 sibling components (WebSearch, ResearchReport). They share the stage queue and cannot be separated.\n\n  import { InlineCitation } from \"@/components/ambient/knowledge-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "knowledge-kit.tsx"
      }
    },
    {
      "name": "research-report",
      "type": "registry:ui",
      "title": "ResearchReport",
      "description": "An outline that fills in section by section, each carrying the sources behind it.",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "https://registry.ambientui.ai/r/ambient-styles.json"
      ],
      "files": [
        {
          "path": "packages/ambient/src/ambient-runtime.tsx",
          "type": "registry:component",
          "target": "components/ambient/ambient-runtime.tsx"
        },
        {
          "path": "packages/ambient/src/kit-vocabulary.ts",
          "type": "registry:lib",
          "target": "components/ambient/kit-vocabulary.ts"
        },
        {
          "path": "packages/ambient/src/knowledge-kit.tsx",
          "type": "registry:component",
          "target": "components/ambient/knowledge-kit.tsx"
        },
        {
          "path": "packages/ambient/src/stage-queue.ts",
          "type": "registry:lib",
          "target": "components/ambient/stage-queue.ts"
        },
        {
          "path": "packages/ambient/src/staging.tsx",
          "type": "registry:component",
          "target": "components/ambient/staging.tsx"
        },
        {
          "path": "packages/ambient/src/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/ambient/streaming-text.tsx"
        },
        {
          "path": "packages/ambient/src/use-staged-reveal.ts",
          "type": "registry:hook",
          "target": "components/ambient/use-staged-reveal.ts"
        }
      ],
      "docs": "WHEN TO USE\n  • Long-running research where the shape of the answer is known before its content.\n  • Any deliverable a user will read in pieces rather than all at once.\n\nWHEN NOT TO USE\n  • For a conversational answer; an outline over three sentences is bureaucracy.\n  • When the sections are not known upfront — a skeleton that keeps changing is worse than none.\n\nResearchReport ships inside knowledge-kit.tsx, alongside 2 sibling components (WebSearch, InlineCitation). They share the stage queue and cannot be separated.\n\n  import { ResearchReport } from \"@/components/ambient/knowledge-kit\"",
      "meta": {
        "vocabulary": "ambient",
        "kit": "knowledge-kit.tsx"
      }
    }
  ]
}
