@assistant-ui/mcp-docs-server 0.1.36 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/.docs/organized/code-examples/waterfall.md +8 -9
  2. package/.docs/organized/code-examples/with-a2a.md +16 -11
  3. package/.docs/organized/code-examples/with-ag-ui.md +16 -11
  4. package/.docs/organized/code-examples/{with-ai-sdk-v6.md → with-ai-sdk-v7.md} +32 -21
  5. package/.docs/organized/code-examples/with-artifacts.md +17 -10
  6. package/.docs/organized/code-examples/with-assistant-transport.md +15 -8
  7. package/.docs/organized/code-examples/with-browser-extension.md +15 -8
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +17 -10
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +10 -9
  10. package/.docs/organized/code-examples/with-cloud.md +18 -13
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +17 -10
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +20 -13
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +20 -13
  14. package/.docs/organized/code-examples/with-eve.md +16 -9
  15. package/.docs/organized/code-examples/with-expo.md +26 -23
  16. package/.docs/organized/code-examples/with-external-store.md +16 -11
  17. package/.docs/organized/code-examples/with-ffmpeg.md +18 -13
  18. package/.docs/organized/code-examples/with-generative-ui.md +20 -15
  19. package/.docs/organized/code-examples/with-google-adk.md +16 -9
  20. package/.docs/organized/code-examples/with-heat-graph.md +8 -9
  21. package/.docs/organized/code-examples/with-image-generation.md +17 -10
  22. package/.docs/organized/code-examples/with-interactables.md +19 -15
  23. package/.docs/organized/code-examples/with-langchain.md +17 -10
  24. package/.docs/organized/code-examples/with-langgraph.md +17 -10
  25. package/.docs/organized/code-examples/with-livekit.md +21 -14
  26. package/.docs/organized/code-examples/with-mcp.md +40 -18
  27. package/.docs/organized/code-examples/with-opencode.md +22 -17
  28. package/.docs/organized/code-examples/with-pi.md +47 -12
  29. package/.docs/organized/code-examples/with-react-hook-form.md +19 -14
  30. package/.docs/organized/code-examples/with-react-ink-web.md +6 -6
  31. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  32. package/.docs/organized/code-examples/with-react-router.md +20 -15
  33. package/.docs/organized/code-examples/with-resumable-stream.md +19 -12
  34. package/.docs/organized/code-examples/with-store.md +8 -9
  35. package/.docs/organized/code-examples/with-tanstack.md +17 -11
  36. package/.docs/organized/code-examples/with-tap-runtime.md +16 -11
  37. package/.docs/organized/code-examples/with-virtualized-thread.md +17 -12
  38. package/.docs/raw/docs/(docs)/base-ui.mdx +39 -0
  39. package/.docs/raw/docs/(docs)/cli.mdx +18 -2
  40. package/.docs/raw/docs/(docs)/installation.mdx +15 -1
  41. package/.docs/raw/docs/(docs)/rtl.mdx +2 -4
  42. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +56 -0
  43. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +86 -0
  44. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +19 -1
  45. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +42 -0
  46. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +53 -2
  47. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +81 -0
  48. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +86 -0
  49. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +62 -0
  50. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +4 -1
  51. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +4 -2
  52. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +37 -0
  53. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +1 -0
  54. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +29 -29
  55. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +1 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +3 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +2 -0
  58. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -2
  59. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +12 -9
  60. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +4 -0
  61. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +7 -1
  62. package/.docs/raw/docs/cloud/langgraph.mdx +4 -2
  63. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +108 -0
  64. package/.docs/raw/docs/guides/dictation.mdx +185 -257
  65. package/.docs/raw/docs/guides/index.mdx +10 -0
  66. package/.docs/raw/docs/guides/mentions.mdx +31 -3
  67. package/.docs/raw/docs/guides/resumable-streams.mdx +12 -1
  68. package/.docs/raw/docs/guides/speech.mdx +47 -29
  69. package/.docs/raw/docs/guides/suggestions.mdx +70 -1
  70. package/.docs/raw/docs/guides/voice.mdx +197 -267
  71. package/.docs/raw/docs/ink/primitives.mdx +35 -1
  72. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +13 -7
  73. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +3 -3
  74. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +1 -1
  75. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +3 -3
  76. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  77. package/.docs/raw/docs/integrations/gateways/index.mdx +2 -2
  78. package/.docs/raw/docs/integrations/index.mdx +1 -1
  79. package/.docs/raw/docs/integrations/observability/helicone.mdx +1 -1
  80. package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
  81. package/.docs/raw/docs/integrations/observability/langsmith.mdx +3 -3
  82. package/.docs/raw/docs/migrations/index.mdx +50 -0
  83. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +2 -2
  84. package/.docs/raw/docs/migrations/toolkit-tools.mdx +4 -2
  85. package/.docs/raw/docs/primitives/chain-of-thought.mdx +6 -1
  86. package/.docs/raw/docs/primitives/composer.mdx +16 -0
  87. package/.docs/raw/docs/primitives/selection-toolbar.mdx +25 -0
  88. package/.docs/raw/docs/primitives/thread-list.mdx +30 -6
  89. package/.docs/raw/docs/react-native/primitives.mdx +23 -0
  90. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +1 -1
  91. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +124 -0
  92. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +1 -1
  93. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +13 -2
  94. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +13 -4
  95. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +11 -11
  96. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +5 -5
  97. package/.docs/raw/docs/runtimes/ai-sdk/{v6.mdx → v6-legacy.mdx} +8 -6
  98. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +717 -0
  99. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +1 -1
  100. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +1 -1
  101. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +10 -19
  102. package/.docs/raw/docs/runtimes/custom/external-store.mdx +1 -1
  103. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +2 -0
  104. package/.docs/raw/docs/runtimes/eve/overview.mdx +1 -1
  105. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +1 -1
  106. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  107. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +181 -0
  108. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +1 -1
  109. package/.docs/raw/docs/tools/backend.mdx +6 -3
  110. package/.docs/raw/docs/tools/defining-tools.mdx +12 -1
  111. package/.docs/raw/docs/tools/generative-ui.mdx +95 -0
  112. package/.docs/raw/docs/tools/mcp-apps.mdx +37 -10
  113. package/.docs/raw/docs/tools/mcp.mdx +105 -3
  114. package/.docs/raw/docs/tools/tool-ui.mdx +6 -4
  115. package/.docs/raw/docs/tools/user-managed-mcp.mdx +41 -4
  116. package/.docs/raw/docs/ui/accordion.mdx +16 -10
  117. package/.docs/raw/docs/ui/assistant-modal.mdx +8 -4
  118. package/.docs/raw/docs/ui/attachment.mdx +5 -1
  119. package/.docs/raw/docs/ui/badge.mdx +23 -12
  120. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +80 -0
  121. package/.docs/raw/docs/ui/model-selector.mdx +69 -6
  122. package/.docs/raw/docs/ui/select.mdx +22 -14
  123. package/.docs/raw/docs/ui/sources.mdx +1 -1
  124. package/.docs/raw/docs/ui/tabs.mdx +25 -14
  125. package/.docs/raw/docs/utilities/heat-graph.mdx +2 -2
  126. package/README.md +1 -1
  127. package/dist/constants.d.ts +2 -1
  128. package/dist/constants.d.ts.map +1 -1
  129. package/dist/constants.js +2 -1
  130. package/dist/constants.js.map +1 -1
  131. package/dist/index.d.ts +0 -1
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +51 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  136. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  137. package/dist/prepare-docs/copy-raw.js +0 -4
  138. package/dist/prepare-docs/copy-raw.js.map +1 -1
  139. package/dist/prompts/xulux-playground.d.ts +12 -0
  140. package/dist/prompts/xulux-playground.d.ts.map +1 -0
  141. package/dist/prompts/xulux-playground.js +33 -0
  142. package/dist/prompts/xulux-playground.js.map +1 -0
  143. package/dist/tools/docs.d.ts +2 -4
  144. package/dist/tools/docs.d.ts.map +1 -1
  145. package/dist/tools/docs.js +38 -10
  146. package/dist/tools/docs.js.map +1 -1
  147. package/dist/tools/examples.d.ts +5 -5
  148. package/dist/tools/examples.d.ts.map +1 -1
  149. package/dist/tools/examples.js +10 -7
  150. package/dist/tools/examples.js.map +1 -1
  151. package/dist/tools/resources.d.ts +6 -0
  152. package/dist/tools/resources.d.ts.map +1 -0
  153. package/dist/tools/resources.js +74 -0
  154. package/dist/tools/resources.js.map +1 -0
  155. package/dist/tools/search.d.ts +30 -0
  156. package/dist/tools/search.d.ts.map +1 -0
  157. package/dist/tools/search.js +39 -0
  158. package/dist/tools/search.js.map +1 -0
  159. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  160. package/dist/tools/tests/test-setup.js +7 -1
  161. package/dist/tools/tests/test-setup.js.map +1 -1
  162. package/dist/tools/xulux-templates.d.ts +72 -0
  163. package/dist/tools/xulux-templates.d.ts.map +1 -0
  164. package/dist/tools/xulux-templates.js +82 -0
  165. package/dist/tools/xulux-templates.js.map +1 -0
  166. package/dist/utils/cache.d.ts +5 -0
  167. package/dist/utils/cache.d.ts.map +1 -0
  168. package/dist/utils/cache.js +18 -0
  169. package/dist/utils/cache.js.map +1 -0
  170. package/dist/utils/logger.d.ts.map +1 -1
  171. package/dist/utils/mcp-format.d.ts +1 -0
  172. package/dist/utils/mcp-format.d.ts.map +1 -1
  173. package/dist/utils/mcp-format.js +7 -4
  174. package/dist/utils/mcp-format.js.map +1 -1
  175. package/dist/utils/mdx.d.ts +2 -1
  176. package/dist/utils/mdx.d.ts.map +1 -1
  177. package/dist/utils/mdx.js +19 -2
  178. package/dist/utils/mdx.js.map +1 -1
  179. package/dist/utils/paths.d.ts +2 -1
  180. package/dist/utils/paths.d.ts.map +1 -1
  181. package/dist/utils/paths.js +20 -1
  182. package/dist/utils/paths.js.map +1 -1
  183. package/dist/utils/search.d.ts +10 -0
  184. package/dist/utils/search.d.ts.map +1 -0
  185. package/dist/utils/search.js +97 -0
  186. package/dist/utils/search.js.map +1 -0
  187. package/dist/utils/security.d.ts.map +1 -1
  188. package/dist/xulux/catalog-client.d.ts +14 -0
  189. package/dist/xulux/catalog-client.d.ts.map +1 -0
  190. package/dist/xulux/catalog-client.js +67 -0
  191. package/dist/xulux/catalog-client.js.map +1 -0
  192. package/dist/xulux/fallback-catalog.d.ts +7 -0
  193. package/dist/xulux/fallback-catalog.d.ts.map +1 -0
  194. package/dist/xulux/fallback-catalog.js +47 -0
  195. package/dist/xulux/fallback-catalog.js.map +1 -0
  196. package/dist/xulux/fetch-sandbox.d.ts +5 -0
  197. package/dist/xulux/fetch-sandbox.d.ts.map +1 -0
  198. package/dist/xulux/fetch-sandbox.js +40 -0
  199. package/dist/xulux/fetch-sandbox.js.map +1 -0
  200. package/dist/xulux/template-service.d.ts +84 -0
  201. package/dist/xulux/template-service.d.ts.map +1 -0
  202. package/dist/xulux/template-service.js +223 -0
  203. package/dist/xulux/template-service.js.map +1 -0
  204. package/dist/xulux/types.d.ts +55 -0
  205. package/dist/xulux/types.d.ts.map +1 -0
  206. package/dist/xulux/types.js +6 -0
  207. package/dist/xulux/types.js.map +1 -0
  208. package/package.json +5 -5
  209. package/src/constants.ts +2 -0
  210. package/src/index.ts +67 -0
  211. package/src/prepare-docs/copy-raw.ts +0 -5
  212. package/src/prompts/xulux-playground.ts +36 -0
  213. package/src/tools/docs.ts +52 -4
  214. package/src/tools/examples.ts +18 -11
  215. package/src/tools/resources.ts +114 -0
  216. package/src/tools/search.ts +46 -0
  217. package/src/tools/tests/completions.test.ts +46 -0
  218. package/src/tools/tests/directory-size-cap.test.ts +50 -0
  219. package/src/tools/tests/docs.test.ts +20 -0
  220. package/src/tools/tests/examples.test.ts +5 -5
  221. package/src/tools/tests/listings-cache.test.ts +19 -0
  222. package/src/tools/tests/mcp-protocol.test.ts +92 -1
  223. package/src/tools/tests/resources.test.ts +102 -0
  224. package/src/tools/tests/search.test.ts +37 -0
  225. package/src/tools/tests/test-setup.ts +10 -0
  226. package/src/tools/tests/xulux-templates.test.ts +262 -0
  227. package/src/tools/xulux-templates.ts +141 -0
  228. package/src/utils/cache.ts +20 -0
  229. package/src/utils/mcp-format.ts +8 -6
  230. package/src/utils/mdx.ts +21 -1
  231. package/src/utils/paths.ts +25 -0
  232. package/src/utils/search.ts +131 -0
  233. package/src/utils/tests/cache.test.ts +51 -0
  234. package/src/utils/tests/mcp-format.test.ts +22 -0
  235. package/src/utils/tests/security.test.ts +1 -1
  236. package/src/xulux/catalog-client.ts +105 -0
  237. package/src/xulux/fallback-catalog.ts +63 -0
  238. package/src/xulux/fetch-sandbox.ts +56 -0
  239. package/src/xulux/template-service.ts +406 -0
  240. package/src/xulux/types.ts +60 -0
  241. package/.docs/raw/blog/2024-07-29-hello/index.mdx +0 -64
  242. package/.docs/raw/blog/2024-09-11/index.mdx +0 -10
  243. package/.docs/raw/blog/2024-12-15/index.mdx +0 -10
  244. package/.docs/raw/blog/2025-01-31-changelog/index.mdx +0 -127
  245. package/.docs/raw/blog/2026-03-launch-week/index.mdx +0 -258
  246. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +0 -464
@@ -595,9 +595,7 @@ export const submitSignup = async (data: object) => {
595
595
  import { withAui } from "@assistant-ui/next";
596
596
  import type { NextConfig } from "next";
597
597
 
598
- const nextConfig: NextConfig = {
599
- /* config options here */
600
- };
598
+ const nextConfig: NextConfig = {/* config options here */};
601
599
 
602
600
  export default withAui(nextConfig);
603
601
 
@@ -617,33 +615,34 @@ export default withAui(nextConfig);
617
615
  "start": "next start"
618
616
  },
619
617
  "dependencies": {
620
- "@ai-sdk/openai": "^3.0.73",
618
+ "@ai-sdk/openai": "^4.0.14",
621
619
  "@assistant-ui/react": "workspace:*",
622
620
  "@assistant-ui/react-ai-sdk": "workspace:*",
623
621
  "@assistant-ui/react-hook-form": "workspace:*",
624
622
  "@assistant-ui/react-markdown": "workspace:*",
625
623
  "@assistant-ui/ui": "workspace:*",
626
- "ai": "^6.0.208",
624
+ "ai": "^7.0.28",
627
625
  "class-variance-authority": "^0.7.1",
628
626
  "clsx": "^2.1.1",
629
- "lucide-react": "^1.21.0",
630
- "next": "^16.2.9",
627
+ "lucide-react": "^1.24.0",
628
+ "next": "^16.2.10",
631
629
  "react": "^19.2.7",
632
630
  "react-dom": "^19.2.7",
633
- "react-hook-form": "^7.80.0",
631
+ "react-hook-form": "^7.81.0",
634
632
  "tailwind-merge": "^3.6.0"
635
633
  },
636
634
  "devDependencies": {
637
635
  "@assistant-ui/next": "workspace:*",
638
636
  "@assistant-ui/x-buildutils": "workspace:*",
639
- "@tailwindcss/postcss": "^4.3.1",
640
- "@types/node": "^26.0.0",
637
+ "@tailwindcss/postcss": "^4.3.2",
638
+ "@types/node": "^26.1.1",
641
639
  "@types/react": "^19.2.17",
642
640
  "@types/react-dom": "^19.2.3",
643
- "postcss": "^8.5.15",
644
- "tailwindcss": "^4.3.1",
641
+ "postcss": "^8.5.19",
642
+ "tailwindcss": "^4.3.2",
645
643
  "tw-animate-css": "^1.4.0",
646
- "typescript": "^6.0.3"
644
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
645
+ "typescript-7": "npm:typescript@^7.0.2"
647
646
  }
648
647
  }
649
648
 
@@ -705,7 +704,13 @@ npm run dev
705
704
  "@/components/assistant-ui/*": [
706
705
  "../../packages/ui/src/components/assistant-ui/*"
707
706
  ],
708
- "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
707
+ "@/components/ui/*": [
708
+ "../../packages/ui/src/components/ui/base/*",
709
+ "../../packages/ui/src/components/ui/radix/*"
710
+ ],
711
+ "@/components/ui/radix/*": [
712
+ "../../packages/ui/src/components/ui/radix/*"
713
+ ],
709
714
  "@/lib/utils": ["../../packages/ui/src/lib/utils"],
710
715
  "@assistant-ui/ui/*": ["../../packages/ui/src/*"]
711
716
  }
@@ -417,7 +417,6 @@ import { MarkdownText } from "@assistant-ui/react-ink-markdown";
417
417
 
418
418
  // markdansi defaults width and color from process.stdout, which does not
419
419
  // exist in the browser bundle; pass both explicitly so it never reads it.
420
- // color is forwarded to markdansi but not yet declared on MarkdownTextProps.
421
420
  const BrowserMarkdownText = ({ text }: { text: string }) => {
422
421
  const { stdout } = useStdout();
423
422
  return (
@@ -425,7 +424,7 @@ const BrowserMarkdownText = ({ text }: { text: string }) => {
425
424
  text={text}
426
425
  width={(stdout?.columns ?? 80) - 4}
427
426
  hyperlinks={false}
428
- {...{ color: true }}
427
+ color
429
428
  />
430
429
  );
431
430
  };
@@ -557,19 +556,20 @@ export default config;
557
556
  "@assistant-ui/react-ink-markdown": "workspace:*",
558
557
  "@wterm/dom": "^0.3.0",
559
558
  "@wterm/react": "^0.3.0",
560
- "ai": "^6.0.208",
559
+ "ai": "^7.0.28",
561
560
  "ink": "^7.1.0",
562
561
  "ink-web": "^0.2.0",
563
- "next": "^16.2.9",
562
+ "next": "^16.2.10",
564
563
  "react": "^19.2.7",
565
564
  "react-dom": "^19.2.7",
566
565
  "react-reconciler": "^0.33.0",
567
566
  "scheduler": "^0.27.0"
568
567
  },
569
568
  "devDependencies": {
570
- "@types/node": "^26.0.0",
569
+ "@types/node": "^26.1.1",
571
570
  "@types/react": "^19.2.17",
572
- "typescript": "^6.0.3"
571
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
572
+ "typescript-7": "npm:typescript@^7.0.2"
573
573
  }
574
574
  }
575
575
 
@@ -22,8 +22,8 @@
22
22
  "devDependencies": {
23
23
  "@types/react": "^19.2.17",
24
24
  "esbuild": "^0.28.1",
25
- "tsx": "^4.22.4",
26
- "typescript": "^6.0.3"
25
+ "tsx": "^4.23.1",
26
+ "typescript": "^7.0.2"
27
27
  }
28
28
  }
29
29
 
@@ -773,30 +773,31 @@ export default function Home() {
773
773
  "dependencies": {
774
774
  "@assistant-ui/react": "workspace:*",
775
775
  "@assistant-ui/react-markdown": "workspace:*",
776
- "@react-router/node": "^8.0.1",
777
- "@react-router/serve": "^8.0.1",
776
+ "@react-router/node": "^8.2.0",
777
+ "@react-router/serve": "^8.2.0",
778
778
  "class-variance-authority": "^0.7.1",
779
779
  "clsx": "^2.1.1",
780
780
  "eventsource-parser": "^3.1.0",
781
- "isbot": "^5.1.43",
782
- "lucide-react": "^1.21.0",
783
- "openai": "^6.44.0",
781
+ "isbot": "^5.2.1",
782
+ "lucide-react": "^1.24.0",
783
+ "openai": "^6.47.0",
784
784
  "react": "^19.2.7",
785
785
  "react-dom": "^19.2.7",
786
- "react-router": "^8.0.1",
786
+ "react-router": "^8.2.0",
787
787
  "remark-gfm": "^4.0.1",
788
788
  "tailwind-merge": "^3.6.0"
789
789
  },
790
790
  "devDependencies": {
791
- "@react-router/dev": "^8.0.1",
792
- "@tailwindcss/vite": "^4.3.1",
793
- "@types/node": "^26.0.0",
791
+ "@react-router/dev": "^8.2.0",
792
+ "@tailwindcss/vite": "^4.3.2",
793
+ "@types/node": "^26.1.1",
794
794
  "@types/react": "^19.2.17",
795
795
  "@types/react-dom": "^19.2.3",
796
- "tailwindcss": "^4.3.1",
796
+ "tailwindcss": "^4.3.2",
797
797
  "tw-animate-css": "^1.4.0",
798
- "typescript": "^6.0.3",
799
- "vite": "^8.0.16",
798
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
799
+ "typescript-7": "npm:typescript@^7.0.2",
800
+ "vite": "^8.1.4",
800
801
  "vite-tsconfig-paths": "^6.1.1"
801
802
  }
802
803
  }
@@ -880,14 +881,18 @@ npm run dev
880
881
  "moduleResolution": "bundler",
881
882
  "jsx": "react-jsx",
882
883
  "rootDirs": [".", "./.react-router/types"],
883
- "baseUrl": ".",
884
- "ignoreDeprecations": "6.0",
885
884
  "paths": {
886
885
  "@/*": ["./app/*"],
887
886
  "@/components/assistant-ui/*": [
888
887
  "../../packages/ui/src/components/assistant-ui/*"
889
888
  ],
890
- "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
889
+ "@/components/ui/*": [
890
+ "../../packages/ui/src/components/ui/base/*",
891
+ "../../packages/ui/src/components/ui/radix/*"
892
+ ],
893
+ "@/components/ui/radix/*": [
894
+ "../../packages/ui/src/components/ui/radix/*"
895
+ ],
891
896
  "@/lib/utils": ["../../packages/ui/src/lib/utils"],
892
897
  "@assistant-ui/ui/*": ["../../packages/ui/src/*"]
893
898
  },
@@ -514,37 +514,38 @@ export default withAui(nextConfig);
514
514
  "start": "next start"
515
515
  },
516
516
  "dependencies": {
517
- "@ai-sdk/openai": "^3.0.73",
518
- "@ai-sdk/react": "^3.0.210",
517
+ "@ai-sdk/openai": "^4.0.14",
518
+ "@ai-sdk/react": "^4.0.30",
519
519
  "@assistant-ui/react": "workspace:*",
520
520
  "@assistant-ui/react-ai-sdk": "workspace:*",
521
521
  "@assistant-ui/react-markdown": "workspace:*",
522
522
  "@assistant-ui/store": "workspace:*",
523
523
  "@assistant-ui/tap": "workspace:*",
524
524
  "@assistant-ui/ui": "workspace:*",
525
- "ai": "^6.0.208",
525
+ "ai": "^7.0.28",
526
526
  "assistant-stream": "workspace:*",
527
527
  "class-variance-authority": "^0.7.1",
528
528
  "clsx": "^2.1.1",
529
- "lucide-react": "^1.21.0",
530
- "next": "^16.2.9",
529
+ "lucide-react": "^1.24.0",
530
+ "next": "^16.2.10",
531
531
  "react": "^19.2.7",
532
532
  "react-dom": "^19.2.7",
533
- "redis": "^6.0.0",
533
+ "redis": "^6.1.0",
534
534
  "tailwind-merge": "^3.6.0",
535
535
  "zod": "^4.4.3"
536
536
  },
537
537
  "devDependencies": {
538
538
  "@assistant-ui/next": "workspace:*",
539
539
  "@assistant-ui/x-buildutils": "workspace:*",
540
- "@tailwindcss/postcss": "^4.3.1",
541
- "@types/node": "^26.0.0",
540
+ "@tailwindcss/postcss": "^4.3.2",
541
+ "@types/node": "^26.1.1",
542
542
  "@types/react": "^19.2.17",
543
543
  "@types/react-dom": "^19.2.3",
544
- "postcss": "^8.5.15",
545
- "tailwindcss": "^4.3.1",
544
+ "postcss": "^8.5.19",
545
+ "tailwindcss": "^4.3.2",
546
546
  "tw-animate-css": "^1.4.0",
547
- "typescript": "^6.0.3"
547
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
548
+ "typescript-7": "npm:typescript@^7.0.2"
548
549
  }
549
550
  }
550
551
 
@@ -648,7 +649,13 @@ docker run -d --name redis -p 6379:6379 redis:7-alpine
648
649
  "@/components/assistant-ui/*": [
649
650
  "../../packages/ui/src/components/assistant-ui/*"
650
651
  ],
651
- "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
652
+ "@/components/ui/*": [
653
+ "../../packages/ui/src/components/ui/base/*",
654
+ "../../packages/ui/src/components/ui/radix/*"
655
+ ],
656
+ "@/components/ui/radix/*": [
657
+ "../../packages/ui/src/components/ui/radix/*"
658
+ ],
652
659
  "@/lib/utils": ["../../packages/ui/src/lib/utils"],
653
660
  "@assistant-ui/ui/*": ["../../packages/ui/src/*"]
654
661
  }
@@ -472,9 +472,7 @@ export const FooList = ({
472
472
  import { withAui } from "@assistant-ui/next";
473
473
  import type { NextConfig } from "next";
474
474
 
475
- const nextConfig: NextConfig = {
476
- /* config options here */
477
- };
475
+ const nextConfig: NextConfig = {/* config options here */};
478
476
 
479
477
  export default withAui(nextConfig);
480
478
 
@@ -496,21 +494,22 @@ export default withAui(nextConfig);
496
494
  "dependencies": {
497
495
  "@assistant-ui/store": "workspace:*",
498
496
  "@assistant-ui/tap": "workspace:*",
499
- "next": "^16.2.9",
497
+ "next": "^16.2.10",
500
498
  "react": "^19.2.7",
501
499
  "react-dom": "^19.2.7"
502
500
  },
503
501
  "devDependencies": {
504
502
  "@assistant-ui/next": "workspace:*",
505
503
  "@assistant-ui/x-buildutils": "workspace:*",
506
- "@tailwindcss/postcss": "^4.3.1",
507
- "@types/node": "^26.0.0",
504
+ "@tailwindcss/postcss": "^4.3.2",
505
+ "@types/node": "^26.1.1",
508
506
  "@types/react": "^19.2.17",
509
507
  "@types/react-dom": "^19.2.3",
510
- "postcss": "^8.5.15",
511
- "tailwindcss": "^4.3.1",
508
+ "postcss": "^8.5.19",
509
+ "tailwindcss": "^4.3.2",
512
510
  "tw-animate-css": "^1.4.0",
513
- "typescript": "^6.0.3"
511
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
512
+ "typescript-7": "npm:typescript@^7.0.2"
514
513
  }
515
514
  }
516
515
 
@@ -64,29 +64,29 @@
64
64
  "dependencies": {
65
65
  "@assistant-ui/react": "workspace:*",
66
66
  "@assistant-ui/react-markdown": "workspace:*",
67
- "@tailwindcss/vite": "^4.3.1",
68
- "@tanstack/react-router": "^1.170.16",
69
- "@tanstack/react-start": "^1.168.26",
67
+ "@tailwindcss/vite": "^4.3.2",
68
+ "@tanstack/react-router": "^1.170.18",
69
+ "@tanstack/react-start": "^1.168.28",
70
70
  "class-variance-authority": "^0.7.1",
71
71
  "clsx": "^2.1.1",
72
- "lucide-react": "^1.21.0",
72
+ "lucide-react": "^1.24.0",
73
73
  "nitro": "^3.0.260311-beta",
74
- "openai": "^6.44.0",
74
+ "openai": "^6.47.0",
75
75
  "react": "^19.2.7",
76
76
  "react-dom": "^19.2.7",
77
77
  "remark-gfm": "^4.0.1",
78
78
  "tailwind-merge": "^3.6.0",
79
- "tailwindcss": "^4.3.1",
79
+ "tailwindcss": "^4.3.2",
80
80
  "vite-tsconfig-paths": "^6.1.1"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@assistant-ui/x-buildutils": "workspace:*",
84
- "@types/node": "^26.0.0",
84
+ "@types/node": "^26.1.1",
85
85
  "@types/react": "^19.2.17",
86
86
  "@types/react-dom": "^19.2.3",
87
- "@vitejs/plugin-react": "^6.0.2",
88
- "typescript": "^6.0.3",
89
- "vite": "^8.0.16"
87
+ "@vitejs/plugin-react": "^6.0.3",
88
+ "typescript": "^7.0.2",
89
+ "vite": "^8.1.4"
90
90
  }
91
91
  }
92
92
 
@@ -742,7 +742,13 @@ export const chatStream = createServerFn({ method: "POST" })
742
742
  "@/components/assistant-ui/*": [
743
743
  "../../packages/ui/src/components/assistant-ui/*"
744
744
  ],
745
- "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
745
+ "@/components/ui/*": [
746
+ "../../packages/ui/src/components/ui/base/*",
747
+ "../../packages/ui/src/components/ui/radix/*"
748
+ ],
749
+ "@/components/ui/radix/*": [
750
+ "../../packages/ui/src/components/ui/radix/*"
751
+ ],
746
752
  "@/lib/utils": ["../../packages/ui/src/lib/utils"],
747
753
  "@assistant-ui/ui/*": ["../../packages/ui/src/*"]
748
754
  }
@@ -575,9 +575,7 @@ export default function Home() {
575
575
  import { withAui } from "@assistant-ui/next";
576
576
  import type { NextConfig } from "next";
577
577
 
578
- const nextConfig: NextConfig = {
579
- /* config options here */
580
- };
578
+ const nextConfig: NextConfig = {/* config options here */};
581
579
 
582
580
  export default withAui(nextConfig);
583
581
 
@@ -602,8 +600,8 @@ export default withAui(nextConfig);
602
600
  "@assistant-ui/ui": "workspace:*",
603
601
  "class-variance-authority": "^0.7.1",
604
602
  "clsx": "^2.1.1",
605
- "lucide-react": "^1.21.0",
606
- "next": "^16.2.9",
603
+ "lucide-react": "^1.24.0",
604
+ "next": "^16.2.10",
607
605
  "react": "^19.2.7",
608
606
  "react-dom": "^19.2.7",
609
607
  "tailwind-merge": "^3.6.0"
@@ -611,14 +609,15 @@ export default withAui(nextConfig);
611
609
  "devDependencies": {
612
610
  "@assistant-ui/next": "workspace:*",
613
611
  "@assistant-ui/x-buildutils": "workspace:*",
614
- "@tailwindcss/postcss": "^4.3.1",
615
- "@types/node": "^26.0.0",
612
+ "@tailwindcss/postcss": "^4.3.2",
613
+ "@types/node": "^26.1.1",
616
614
  "@types/react": "^19.2.17",
617
615
  "@types/react-dom": "^19.2.3",
618
- "postcss": "^8.5.15",
619
- "tailwindcss": "^4.3.1",
616
+ "postcss": "^8.5.19",
617
+ "tailwindcss": "^4.3.2",
620
618
  "tw-animate-css": "^1.4.0",
621
- "typescript": "^6.0.3"
619
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
620
+ "typescript-7": "npm:typescript@^7.0.2"
622
621
  }
623
622
  }
624
623
 
@@ -787,7 +786,13 @@ You can extend this example to:
787
786
  "@/components/assistant-ui/*": [
788
787
  "../../packages/ui/src/components/assistant-ui/*"
789
788
  ],
790
- "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
789
+ "@/components/ui/*": [
790
+ "../../packages/ui/src/components/ui/base/*",
791
+ "../../packages/ui/src/components/ui/radix/*"
792
+ ],
793
+ "@/components/ui/radix/*": [
794
+ "../../packages/ui/src/components/ui/radix/*"
795
+ ],
791
796
  "@/lib/utils": ["../../packages/ui/src/lib/utils"],
792
797
  "@assistant-ui/ui/*": ["../../packages/ui/src/*"],
793
798
  "@assistant-ui/*": ["../../packages/*/src"],
@@ -574,9 +574,7 @@ export const VirtualizedThread: FC = () => {
574
574
  import { withAui } from "@assistant-ui/next";
575
575
  import type { NextConfig } from "next";
576
576
 
577
- const nextConfig: NextConfig = {
578
- /* config options here */
579
- };
577
+ const nextConfig: NextConfig = {/* config options here */};
580
578
 
581
579
  export default withAui(nextConfig);
582
580
 
@@ -599,11 +597,11 @@ export default withAui(nextConfig);
599
597
  "@assistant-ui/react": "workspace:*",
600
598
  "@assistant-ui/react-markdown": "workspace:*",
601
599
  "@assistant-ui/ui": "workspace:*",
602
- "@tanstack/react-virtual": "^3.14.3",
600
+ "@tanstack/react-virtual": "^3.14.6",
603
601
  "class-variance-authority": "^0.7.1",
604
602
  "clsx": "^2.1.1",
605
- "lucide-react": "^1.21.0",
606
- "next": "^16.2.9",
603
+ "lucide-react": "^1.24.0",
604
+ "next": "^16.2.10",
607
605
  "react": "^19.2.7",
608
606
  "react-dom": "^19.2.7",
609
607
  "tailwind-merge": "^3.6.0"
@@ -611,14 +609,15 @@ export default withAui(nextConfig);
611
609
  "devDependencies": {
612
610
  "@assistant-ui/next": "workspace:*",
613
611
  "@assistant-ui/x-buildutils": "workspace:*",
614
- "@tailwindcss/postcss": "^4.3.1",
615
- "@types/node": "^26.0.0",
612
+ "@tailwindcss/postcss": "^4.3.2",
613
+ "@types/node": "^26.1.1",
616
614
  "@types/react": "^19.2.17",
617
615
  "@types/react-dom": "^19.2.3",
618
- "postcss": "^8.5.15",
619
- "tailwindcss": "^4.3.1",
616
+ "postcss": "^8.5.19",
617
+ "tailwindcss": "^4.3.2",
620
618
  "tw-animate-css": "^1.4.0",
621
- "typescript": "^6.0.3"
619
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
620
+ "typescript-7": "npm:typescript@^7.0.2"
622
621
  }
623
622
  }
624
623
 
@@ -663,7 +662,13 @@ See the [thread virtualization guide](https://assistant-ui.com/docs/guides/virtu
663
662
  "@/components/assistant-ui/*": [
664
663
  "../../packages/ui/src/components/assistant-ui/*"
665
664
  ],
666
- "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
665
+ "@/components/ui/*": [
666
+ "../../packages/ui/src/components/ui/base/*",
667
+ "../../packages/ui/src/components/ui/radix/*"
668
+ ],
669
+ "@/components/ui/radix/*": [
670
+ "../../packages/ui/src/components/ui/radix/*"
671
+ ],
667
672
  "@/lib/utils": ["../../packages/ui/src/lib/utils"],
668
673
  "@assistant-ui/ui/*": ["../../packages/ui/src/*"]
669
674
  }
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: Radix UI and Base UI
3
+ description: How the assistant-ui component registry serves Radix UI and Base UI flavored components for every shadcn style.
4
+ platforms: ["react"]
5
+ ---
6
+
7
+ shadcn/ui ships every component for two headless libraries, Radix UI and Base UI. `npx shadcn init` defaults new projects to Base UI styles as of July 2026. Style names that start with `base-`, such as `base-nova`, select the Base UI flavor; every other style name selects Radix.
8
+
9
+ ## Component registry
10
+
11
+ assistant-ui's component registry serves both flavors from the same host. Configure the style-aware URL in `components.json`:
12
+
13
+ ```json title="components.json"
14
+ {
15
+ "registries": {
16
+ "@assistant-ui": "https://r.assistant-ui.com/styles/{style}/{name}.json"
17
+ }
18
+ }
19
+ ```
20
+
21
+ The shadcn CLI fills `{style}` from your `components.json` `style` field. Styles whose name starts with `base-` receive Base UI flavored components; all other styles receive the Radix flavored ones. The plain `https://r.assistant-ui.com/{name}.json` form remains available as a Radix fallback.
22
+
23
+ ## How compatibility works
24
+
25
+ assistant-ui's headless primitives, the components exported from `@assistant-ui/react`, accept both composition conventions: Radix's `asChild` prop and Base UI's `render` prop. Most registry components only compose these primitives, so a single implementation renders correctly under either flavor and the registry has no need for a separate variant.
26
+
27
+ Open-state styling and panel-height animation do not force a variant either: the kit styles state through custom variants that match both libraries' data attributes, and animates collapsibles through keyframes that read both libraries' height variables, so components like `reasoning`, `tool-group`, and `tool-fallback` serve one source to both flavors.
28
+
29
+ Components that reach past composition into library-specific surfaces (raw primitive imports, trigger composition, provider wiring, popup recomposition) ship a dedicated Base UI variant instead. The following components currently have one: `tooltip-icon-button`, `attachment`, `context-display`, `message-timing`, `mcp-config`, `threadlist-sidebar`, `assistant-modal`, `select`, `tabs`, `accordion`, `badge`, `model-selector`, and `direction`.
30
+
31
+ ## Behavior notes
32
+
33
+ Under Base UI styles, the assistant modal composes the project's Base UI popover, so stacked layers (an attachment preview dialog, a tooltip, and the modal itself) close one layer per Escape key press, with focus restored to the element that opened the closed layer. Clicking outside the modal keeps it open, matching the Radix flavor's behavior.
34
+
35
+ ## FAQ
36
+
37
+ - **Do I need to change anything on an existing Radix project?** No. The plain `https://r.assistant-ui.com/{name}.json` URL keeps resolving to Radix flavored components, so an existing setup needs no changes.
38
+ - **What happens if I switch styles later?** Re-add the components you use through the shadcn CLI. The style-aware URL resolves the correct flavor for the new style, and no other migration step is required.
39
+ - **Does `@assistant-ui/react` behave differently under Base UI?** No. The headless `@assistant-ui/react` package works identically in both worlds; only the registry components under `components/assistant-ui` differ by flavor.
@@ -66,19 +66,23 @@ Use `--example` to create a project from one of the monorepo examples with full
66
66
 
67
67
  | Example | Description | Command |
68
68
  |---------|-------------|---------|
69
- | `with-ai-sdk-v6` | Vercel AI SDK v6 integration | `npx assistant-ui create my-app -e with-ai-sdk-v6` |
69
+ | `with-ai-sdk-v7` | Vercel AI SDK v7 integration | `npx assistant-ui create my-app -e with-ai-sdk-v7` |
70
70
  | `with-eve` | Eve agent integration | `npx assistant-ui create my-app -e with-eve` |
71
71
  | `with-artifacts` | HTML artifact rendering with live preview | `npx assistant-ui create my-app -e with-artifacts` |
72
72
  | `with-langgraph` | LangGraph agent with custom tools | `npx assistant-ui create my-app -e with-langgraph` |
73
+ | `with-google-adk` | Google ADK agent integration | `npx assistant-ui create my-app -e with-google-adk` |
73
74
  | `with-cloud` | Assistant Cloud persistence | `npx assistant-ui create my-app -e with-cloud` |
74
- | `with-ag-ui` | [AG-UI protocol](/docs/runtimes/ag-ui) integration | `npx assistant-ui create my-app -e with-ag-ui` |
75
+ | `with-ag-ui` | [AG-UI protocol](/docs/runtimes/ag-ui/overview) integration | `npx assistant-ui create my-app -e with-ag-ui` |
75
76
  | `with-assistant-transport` | Custom backend via Assistant Transport | `npx assistant-ui create my-app -e with-assistant-transport` |
76
77
  | `with-resumable-stream` | Resumable LLM stream that survives reload mid-response | `npx assistant-ui create my-app -e with-resumable-stream` |
77
78
  | `with-chain-of-thought` | Chain-of-thought reasoning, tool calls, and source citations | `npx assistant-ui create my-app -e with-chain-of-thought` |
78
79
  | `with-external-store` | External message store | `npx assistant-ui create my-app -e with-external-store` |
80
+ | `with-interactables` | AI-driven interactive UI components | `npx assistant-ui create my-app -e with-interactables` |
79
81
  | `with-custom-thread-list` | Custom thread list UI | `npx assistant-ui create my-app -e with-custom-thread-list` |
80
82
  | `with-react-hook-form` | React Hook Form integration | `npx assistant-ui create my-app -e with-react-hook-form` |
81
83
  | `with-ffmpeg` | FFmpeg video processing tool | `npx assistant-ui create my-app -e with-ffmpeg` |
84
+ | `with-elevenlabs-conversational` | Realtime voice with ElevenLabs | `npx assistant-ui create my-app -e with-elevenlabs-conversational` |
85
+ | `with-livekit` | Realtime voice with LiveKit | `npx assistant-ui create my-app -e with-livekit` |
82
86
  | `with-elevenlabs-scribe` | ElevenLabs voice transcription | `npx assistant-ui create my-app -e with-elevenlabs-scribe` |
83
87
  | `with-expo` | Expo / React Native | `npx assistant-ui create my-app -e with-expo` |
84
88
  | `with-react-ink` | Terminal UI chat | `npx assistant-ui create my-app -e with-react-ink` |
@@ -451,6 +455,18 @@ npx assistant-ui@latest update
451
455
 
452
456
  The CLI pulls components from our public registry at [r.assistant-ui.com](https://r.assistant-ui.com).
453
457
 
458
+ Configure the style-aware URL in `components.json` so `@assistant-ui/*` installs match your shadcn style:
459
+
460
+ ```json title="components.json"
461
+ {
462
+ "registries": {
463
+ "@assistant-ui": "https://r.assistant-ui.com/styles/{style}/{name}.json"
464
+ }
465
+ }
466
+ ```
467
+
468
+ The `{style}` placeholder is filled from your `components.json` `style` field. Styles whose name starts with `base-` resolve to Base UI flavored components; every other style resolves to Radix. Existing Radix projects can keep `https://r.assistant-ui.com/{name}.json` as a fallback.
469
+
454
470
  Each component includes:
455
471
  - Full TypeScript source code
456
472
  - All required dependencies
@@ -61,6 +61,8 @@ Create a `.env` file with your API key:
61
61
  OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
62
62
  ```
63
63
 
64
+ Developing locally with a ChatGPT Plus or Pro plan? You can skip the API key and run on your subscription instead; see [ChatGPT Subscription](/docs/guides/chatgpt-subscription).
65
+
64
66
  </Step>
65
67
  <Step>
66
68
 
@@ -77,6 +79,18 @@ npm run dev
77
79
 
78
80
  If you prefer not to use the CLI, you can install components manually.
79
81
 
82
+ Add the assistant-ui registry to your `components.json` so the shadcn CLI resolves components for your style. Styles whose name starts with `base-` receive Base UI flavored components; all other styles receive the Radix flavored ones. `npx shadcn init` defaults to Base UI styles (for example `base-nova`), so new projects need this style-aware URL for components that compile against that stack.
83
+
84
+ ```json title="components.json"
85
+ {
86
+ "registries": {
87
+ "@assistant-ui": "https://r.assistant-ui.com/styles/{style}/{name}.json"
88
+ }
89
+ }
90
+ ```
91
+
92
+ Existing Radix projects can keep the plain form `https://r.assistant-ui.com/{name}.json` as a fallback (for example `npx shadcn@latest add https://r.assistant-ui.com/thread.json`).
93
+
80
94
  <Steps>
81
95
  <Step>
82
96
 
@@ -431,7 +445,7 @@ export default function MyApp() {
431
445
  ```
432
446
 
433
447
  ```tsx title="/app/page.tsx" tab="AssistantModal"
434
- // run `npx shadcn@latest add https://r.assistant-ui.com/assistant-modal.json`
448
+ // run `npx shadcn@latest add @assistant-ui/assistant-modal`
435
449
 
436
450
  import { AssistantRuntimeProvider } from "@assistant-ui/react";
437
451
  import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/react-ai-sdk";
@@ -4,7 +4,7 @@ description: Use assistant-ui with right-to-left languages like Arabic, Hebrew,
4
4
  platforms: ["react"]
5
5
  ---
6
6
 
7
- Components shipped through `@assistant-ui/ui` (npm) and the shadcn registry (`npx shadcn@latest add https://r.assistant-ui.com/...`) use logical Tailwind classes (`ms-*`, `pe-*`, `text-start`, `end-*`, `border-s`, ...). They flip automatically under `dir="rtl"` and render byte-identically under `dir="ltr"` (the default) — there is nothing to opt out of.
7
+ Components shipped through `@assistant-ui/ui` (npm) and the shadcn registry (`npx shadcn@latest add @assistant-ui/<name>`) use logical Tailwind classes (`ms-*`, `pe-*`, `text-start`, `end-*`, `border-s`, ...). They flip automatically under `dir="rtl"` and render byte-identically under `dir="ltr"` (the default) — there is nothing to opt out of.
8
8
 
9
9
  If you scaffolded from one of our templates (e.g. `npx assistant-ui@latest create -t default`), the generated `components/` folder still uses physical classes (`ml-*`, `text-left`, ...). Run shadcn's built-in migration **once** to convert both the shadcn primitives and assistant-ui's wrappers:
10
10
 
@@ -24,9 +24,7 @@ After migrating, follow the setup below.
24
24
 
25
25
  ### 1. Install the `direction` component
26
26
 
27
- ```sh
28
- npx shadcn@latest add https://r.assistant-ui.com/direction.json
29
- ```
27
+ <InstallCommand shadcn={["direction"]} />
30
28
 
31
29
  This adds `components/ui/direction.tsx`, a thin re-export of Radix UI's `DirectionProvider` and `useDirection`. It ensures Radix popovers, dropdowns, and menus pick up the current direction.
32
30