@assistant-ui/mcp-docs-server 0.1.38 → 0.2.0

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 (258) hide show
  1. package/.docs/organized/code-examples/waterfall.md +11 -12
  2. package/.docs/organized/code-examples/with-a2a.md +18 -13
  3. package/.docs/organized/code-examples/with-ag-ui.md +19 -14
  4. package/.docs/organized/code-examples/{with-ai-sdk-v6.md → with-ai-sdk-v7.md} +34 -23
  5. package/.docs/organized/code-examples/with-artifacts.md +473 -141
  6. package/.docs/organized/code-examples/with-assistant-transport.md +17 -10
  7. package/.docs/organized/code-examples/with-browser-extension.md +17 -10
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +21 -14
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +12 -11
  10. package/.docs/organized/code-examples/with-cloud.md +20 -15
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +19 -12
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +22 -15
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +22 -15
  14. package/.docs/organized/code-examples/with-eve.md +18 -11
  15. package/.docs/organized/code-examples/with-expo.md +35 -52
  16. package/.docs/organized/code-examples/with-external-store.md +18 -13
  17. package/.docs/organized/code-examples/with-ffmpeg.md +20 -15
  18. package/.docs/organized/code-examples/with-generative-ui.md +22 -17
  19. package/.docs/organized/code-examples/with-google-adk.md +18 -11
  20. package/.docs/organized/code-examples/with-heat-graph.md +10 -11
  21. package/.docs/organized/code-examples/with-image-generation.md +19 -12
  22. package/.docs/organized/code-examples/with-interactables.md +21 -17
  23. package/.docs/organized/code-examples/with-langchain.md +19 -12
  24. package/.docs/organized/code-examples/with-langgraph.md +19 -12
  25. package/.docs/organized/code-examples/with-livekit.md +23 -16
  26. package/.docs/organized/code-examples/with-mcp.md +46 -28
  27. package/.docs/organized/code-examples/with-opencode.md +25 -23
  28. package/.docs/organized/code-examples/with-pi.md +54 -19
  29. package/.docs/organized/code-examples/with-react-hook-form.md +21 -16
  30. package/.docs/organized/code-examples/with-react-ink-web.md +9 -9
  31. package/.docs/organized/code-examples/with-react-ink.md +4 -4
  32. package/.docs/organized/code-examples/with-react-router.md +22 -17
  33. package/.docs/organized/code-examples/with-resumable-stream.md +21 -14
  34. package/.docs/organized/code-examples/with-store.md +10 -11
  35. package/.docs/organized/code-examples/with-tanstack.md +19 -13
  36. package/.docs/organized/code-examples/with-tap-runtime.md +18 -13
  37. package/.docs/organized/code-examples/with-virtualized-thread.md +19 -14
  38. package/.docs/raw/docs/(docs)/base-ui.mdx +39 -0
  39. package/.docs/raw/docs/(docs)/cli.mdx +19 -1
  40. package/.docs/raw/docs/(docs)/devtools.mdx +7 -2
  41. package/.docs/raw/docs/(docs)/installation.mdx +15 -1
  42. package/.docs/raw/docs/(docs)/rtl.mdx +2 -4
  43. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +40 -0
  44. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +56 -0
  45. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +86 -0
  46. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +22 -1
  47. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +42 -0
  48. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +53 -2
  49. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +81 -0
  50. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +86 -0
  51. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +62 -0
  52. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +19 -420
  53. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +4 -1
  54. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +4 -1
  55. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +25 -2
  56. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +37 -0
  57. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +1 -9
  58. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +1 -0
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +14 -31
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +1 -0
  61. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +3 -0
  62. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +2 -0
  63. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -2
  64. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +12 -9
  65. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +4 -0
  66. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +7 -1
  67. package/.docs/raw/docs/cloud/langgraph.mdx +4 -2
  68. package/.docs/raw/docs/copilots/model-context.mdx +1 -1
  69. package/.docs/raw/docs/copilots/motivation.mdx +1 -1
  70. package/.docs/raw/docs/guides/attachments.mdx +3 -3
  71. package/.docs/raw/docs/guides/branching.mdx +2 -2
  72. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +108 -0
  73. package/.docs/raw/docs/guides/context-api.mdx +89 -111
  74. package/.docs/raw/docs/guides/dictation.mdx +185 -257
  75. package/.docs/raw/docs/guides/editing.mdx +5 -5
  76. package/.docs/raw/docs/guides/electron.mdx +369 -0
  77. package/.docs/raw/docs/guides/index.mdx +20 -0
  78. package/.docs/raw/docs/guides/mentions.mdx +31 -3
  79. package/.docs/raw/docs/guides/quoting.mdx +3 -3
  80. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +2 -2
  81. package/.docs/raw/docs/guides/resumable-streams.mdx +12 -1
  82. package/.docs/raw/docs/guides/speech.mdx +47 -29
  83. package/.docs/raw/docs/guides/suggestions.mdx +70 -1
  84. package/.docs/raw/docs/guides/voice.mdx +197 -267
  85. package/.docs/raw/docs/ink/hooks.mdx +3 -3
  86. package/.docs/raw/docs/ink/primitives.mdx +49 -8
  87. package/.docs/raw/docs/integrations/auth/better-auth.mdx +2 -2
  88. package/.docs/raw/docs/integrations/auth/clerk.mdx +2 -2
  89. package/.docs/raw/docs/integrations/auth/next-auth.mdx +3 -3
  90. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +10 -4
  91. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +3 -3
  92. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +1 -1
  93. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +3 -3
  94. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  95. package/.docs/raw/docs/integrations/gateways/index.mdx +2 -2
  96. package/.docs/raw/docs/integrations/observability/helicone.mdx +1 -1
  97. package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
  98. package/.docs/raw/docs/integrations/observability/langsmith.mdx +2 -2
  99. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +36 -9
  100. package/.docs/raw/docs/migrations/index.mdx +50 -0
  101. package/.docs/raw/docs/migrations/toolkit-tools.mdx +4 -2
  102. package/.docs/raw/docs/migrations/v0-15.mdx +156 -0
  103. package/.docs/raw/docs/primitives/chain-of-thought.mdx +6 -1
  104. package/.docs/raw/docs/primitives/composer.mdx +17 -1
  105. package/.docs/raw/docs/primitives/selection-toolbar.mdx +25 -0
  106. package/.docs/raw/docs/primitives/thread-list.mdx +2 -2
  107. package/.docs/raw/docs/react-native/hooks.mdx +3 -3
  108. package/.docs/raw/docs/react-native/index.mdx +2 -2
  109. package/.docs/raw/docs/react-native/primitives.mdx +62 -5
  110. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +124 -0
  111. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +10 -1
  112. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +14 -5
  113. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +15 -15
  114. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +8 -8
  115. package/.docs/raw/docs/runtimes/ai-sdk/{v6.mdx → v6-legacy.mdx} +11 -9
  116. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +717 -0
  117. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +1 -1
  118. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +1 -1
  119. package/.docs/raw/docs/runtimes/concepts/threads.mdx +10 -10
  120. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +2 -2
  121. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +10 -19
  122. package/.docs/raw/docs/runtimes/custom/external-store.mdx +2 -2
  123. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +5 -3
  124. package/.docs/raw/docs/runtimes/eve/overview.mdx +1 -1
  125. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  126. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +181 -0
  127. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +1 -1
  128. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +3 -1
  129. package/.docs/raw/docs/tools/a2ui.mdx +107 -0
  130. package/.docs/raw/docs/tools/backend.mdx +6 -3
  131. package/.docs/raw/docs/tools/defining-tools.mdx +7 -1
  132. package/.docs/raw/docs/tools/generative-ui.mdx +60 -2
  133. package/.docs/raw/docs/tools/interactables-legacy.mdx +4 -4
  134. package/.docs/raw/docs/tools/interactables.mdx +3 -3
  135. package/.docs/raw/docs/tools/mcp-apps.mdx +90 -13
  136. package/.docs/raw/docs/tools/mcp.mdx +100 -3
  137. package/.docs/raw/docs/tools/tool-ui.mdx +6 -4
  138. package/.docs/raw/docs/tools/user-managed-mcp.mdx +77 -9
  139. package/.docs/raw/docs/ui/accordion.mdx +16 -10
  140. package/.docs/raw/docs/ui/assistant-modal.mdx +8 -4
  141. package/.docs/raw/docs/ui/attachment.mdx +5 -1
  142. package/.docs/raw/docs/ui/badge.mdx +23 -12
  143. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +4 -2
  144. package/.docs/raw/docs/ui/model-selector.mdx +33 -3
  145. package/.docs/raw/docs/ui/part-grouping.mdx +0 -4
  146. package/.docs/raw/docs/ui/reasoning.mdx +1 -1
  147. package/.docs/raw/docs/ui/select.mdx +22 -14
  148. package/.docs/raw/docs/ui/sources.mdx +1 -1
  149. package/.docs/raw/docs/ui/tabs.mdx +25 -14
  150. package/.docs/raw/docs/utilities/heat-graph.mdx +2 -2
  151. package/dist/constants.d.ts.map +1 -1
  152. package/dist/index.d.ts +1 -2
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +41 -2
  155. package/dist/index.js.map +1 -1
  156. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  157. package/dist/prepare-docs/code-examples.js.map +1 -1
  158. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  159. package/dist/prepare-docs/prepare.d.ts +1 -1
  160. package/dist/prompts/xulux-playground.d.ts +12 -0
  161. package/dist/prompts/xulux-playground.d.ts.map +1 -0
  162. package/dist/prompts/xulux-playground.js +33 -0
  163. package/dist/prompts/xulux-playground.js.map +1 -0
  164. package/dist/stdio.d.ts +1 -1
  165. package/dist/tools/docs.d.ts +8 -14
  166. package/dist/tools/docs.d.ts.map +1 -1
  167. package/dist/tools/docs.js +26 -10
  168. package/dist/tools/docs.js.map +1 -1
  169. package/dist/tools/examples.d.ts +6 -12
  170. package/dist/tools/examples.d.ts.map +1 -1
  171. package/dist/tools/examples.js +11 -8
  172. package/dist/tools/examples.js.map +1 -1
  173. package/dist/tools/resources.d.ts +1 -2
  174. package/dist/tools/resources.d.ts.map +1 -1
  175. package/dist/tools/resources.js +1 -1
  176. package/dist/tools/resources.js.map +1 -1
  177. package/dist/tools/search.d.ts +6 -15
  178. package/dist/tools/search.d.ts.map +1 -1
  179. package/dist/tools/search.js +2 -2
  180. package/dist/tools/search.js.map +1 -1
  181. package/dist/tools/tests/mcp-test-client.d.ts +15 -0
  182. package/dist/tools/tests/mcp-test-client.d.ts.map +1 -0
  183. package/dist/tools/tests/mcp-test-client.js +68 -0
  184. package/dist/tools/tests/mcp-test-client.js.map +1 -0
  185. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  186. package/dist/tools/tests/test-setup.js +5 -1
  187. package/dist/tools/tests/test-setup.js.map +1 -1
  188. package/dist/tools/xulux-templates.d.ts +58 -0
  189. package/dist/tools/xulux-templates.d.ts.map +1 -0
  190. package/dist/tools/xulux-templates.js +82 -0
  191. package/dist/tools/xulux-templates.js.map +1 -0
  192. package/dist/utils/cache.d.ts +5 -0
  193. package/dist/utils/cache.d.ts.map +1 -0
  194. package/dist/utils/cache.js +18 -0
  195. package/dist/utils/cache.js.map +1 -0
  196. package/dist/utils/logger.d.ts.map +1 -1
  197. package/dist/utils/mcp-format.d.ts +1 -0
  198. package/dist/utils/mcp-format.d.ts.map +1 -1
  199. package/dist/utils/mcp-format.js +7 -4
  200. package/dist/utils/mcp-format.js.map +1 -1
  201. package/dist/utils/mdx.d.ts.map +1 -1
  202. package/dist/utils/paths.d.ts +1 -1
  203. package/dist/utils/paths.d.ts.map +1 -1
  204. package/dist/utils/paths.js +3 -1
  205. package/dist/utils/paths.js.map +1 -1
  206. package/dist/utils/search.d.ts.map +1 -1
  207. package/dist/utils/security.d.ts.map +1 -1
  208. package/dist/utils/security.js.map +1 -1
  209. package/dist/xulux/catalog-client.d.ts +14 -0
  210. package/dist/xulux/catalog-client.d.ts.map +1 -0
  211. package/dist/xulux/catalog-client.js +67 -0
  212. package/dist/xulux/catalog-client.js.map +1 -0
  213. package/dist/xulux/fallback-catalog.d.ts +7 -0
  214. package/dist/xulux/fallback-catalog.d.ts.map +1 -0
  215. package/dist/xulux/fallback-catalog.js +47 -0
  216. package/dist/xulux/fallback-catalog.js.map +1 -0
  217. package/dist/xulux/fetch-sandbox.d.ts +5 -0
  218. package/dist/xulux/fetch-sandbox.d.ts.map +1 -0
  219. package/dist/xulux/fetch-sandbox.js +40 -0
  220. package/dist/xulux/fetch-sandbox.js.map +1 -0
  221. package/dist/xulux/template-service.d.ts +84 -0
  222. package/dist/xulux/template-service.d.ts.map +1 -0
  223. package/dist/xulux/template-service.js +223 -0
  224. package/dist/xulux/template-service.js.map +1 -0
  225. package/dist/xulux/types.d.ts +55 -0
  226. package/dist/xulux/types.d.ts.map +1 -0
  227. package/dist/xulux/types.js +6 -0
  228. package/dist/xulux/types.js.map +1 -0
  229. package/package.json +7 -6
  230. package/src/index.ts +55 -2
  231. package/src/prompts/xulux-playground.ts +36 -0
  232. package/src/tools/docs.ts +27 -5
  233. package/src/tools/examples.ts +17 -12
  234. package/src/tools/resources.ts +1 -4
  235. package/src/tools/search.ts +2 -2
  236. package/src/tools/tests/completions.test.ts +40 -26
  237. package/src/tools/tests/docs.test.ts +20 -0
  238. package/src/tools/tests/examples.test.ts +5 -5
  239. package/src/tools/tests/integration.test.ts +3 -4
  240. package/src/tools/tests/listings-cache.test.ts +19 -0
  241. package/src/tools/tests/mcp-protocol.test.ts +173 -108
  242. package/src/tools/tests/mcp-test-client.ts +111 -0
  243. package/src/tools/tests/resources.test.ts +97 -66
  244. package/src/tools/tests/test-setup.ts +8 -0
  245. package/src/tools/tests/xulux-templates.test.ts +262 -0
  246. package/src/tools/xulux-templates.ts +141 -0
  247. package/src/utils/cache.ts +20 -0
  248. package/src/utils/mcp-format.ts +8 -6
  249. package/src/utils/paths.ts +4 -1
  250. package/src/utils/tests/cache.test.ts +51 -0
  251. package/src/utils/tests/mcp-format.test.ts +22 -0
  252. package/src/utils/tests/security.test.ts +1 -1
  253. package/src/xulux/catalog-client.ts +105 -0
  254. package/src/xulux/fallback-catalog.ts +63 -0
  255. package/src/xulux/fetch-sandbox.ts +56 -0
  256. package/src/xulux/template-service.ts +406 -0
  257. package/src/xulux/types.ts +60 -0
  258. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +0 -464
@@ -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.209",
561
- "ink": "^7.1.0",
559
+ "ai": "^7.0.37",
560
+ "ink": "^7.1.1",
562
561
  "ink-web": "^0.2.0",
563
- "next": "^16.2.9",
564
- "react": "^19.2.7",
565
- "react-dom": "^19.2.7",
562
+ "next": "^16.2.11",
563
+ "react": "^19.2.8",
564
+ "react-dom": "^19.2.8",
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
 
@@ -16,14 +16,14 @@
16
16
  "dependencies": {
17
17
  "@assistant-ui/react-ink": "workspace:*",
18
18
  "@assistant-ui/react-ink-markdown": "workspace:*",
19
- "ink": "^7.1.0",
20
- "react": "^19.2.7"
19
+ "ink": "^7.1.1",
20
+ "react": "^19.2.8"
21
21
  },
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.3.0",
777
+ "@react-router/serve": "^8.3.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.44",
782
- "lucide-react": "^1.21.0",
783
- "openai": "^6.44.0",
784
- "react": "^19.2.7",
785
- "react-dom": "^19.2.7",
786
- "react-router": "^8.0.1",
781
+ "isbot": "^5.2.1",
782
+ "lucide-react": "^1.26.0",
783
+ "openai": "^6.49.0",
784
+ "react": "^19.2.8",
785
+ "react-dom": "^19.2.8",
786
+ "react-router": "^8.3.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.3.0",
792
+ "@tailwindcss/vite": "^4.3.3",
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.3",
797
797
  "tw-animate-css": "^1.4.0",
798
- "typescript": "^6.0.3",
799
- "vite": "^8.1.0",
798
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
799
+ "typescript-7": "npm:typescript@^7.0.2",
800
+ "vite": "^8.1.5",
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.74",
518
- "@ai-sdk/react": "^3.0.211",
517
+ "@ai-sdk/openai": "^4.0.20",
518
+ "@ai-sdk/react": "^4.0.40",
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.209",
525
+ "ai": "^7.0.37",
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",
531
- "react": "^19.2.7",
532
- "react-dom": "^19.2.7",
533
- "redis": "^6.0.0",
529
+ "lucide-react": "^1.26.0",
530
+ "next": "^16.2.11",
531
+ "react": "^19.2.8",
532
+ "react-dom": "^19.2.8",
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.3",
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.23",
545
+ "tailwindcss": "^4.3.3",
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",
500
- "react": "^19.2.7",
501
- "react-dom": "^19.2.7"
497
+ "next": "^16.2.11",
498
+ "react": "^19.2.8",
499
+ "react-dom": "^19.2.8"
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.3",
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.23",
509
+ "tailwindcss": "^4.3.3",
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.3",
68
+ "@tanstack/react-router": "^1.170.18",
69
+ "@tanstack/react-start": "^1.168.32",
70
70
  "class-variance-authority": "^0.7.1",
71
71
  "clsx": "^2.1.1",
72
- "lucide-react": "^1.21.0",
72
+ "lucide-react": "^1.26.0",
73
73
  "nitro": "^3.0.260311-beta",
74
- "openai": "^6.44.0",
75
- "react": "^19.2.7",
76
- "react-dom": "^19.2.7",
74
+ "openai": "^6.49.0",
75
+ "react": "^19.2.8",
76
+ "react-dom": "^19.2.8",
77
77
  "remark-gfm": "^4.0.1",
78
78
  "tailwind-merge": "^3.6.0",
79
- "tailwindcss": "^4.3.1",
79
+ "tailwindcss": "^4.3.3",
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.3",
88
- "typescript": "^6.0.3",
89
- "vite": "^8.1.0"
87
+ "@vitejs/plugin-react": "^6.0.4",
88
+ "typescript": "^7.0.2",
89
+ "vite": "^8.1.5"
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,23 +600,24 @@ 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",
607
- "react": "^19.2.7",
608
- "react-dom": "^19.2.7",
603
+ "lucide-react": "^1.26.0",
604
+ "next": "^16.2.11",
605
+ "react": "^19.2.8",
606
+ "react-dom": "^19.2.8",
609
607
  "tailwind-merge": "^3.6.0"
610
608
  },
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.3",
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.23",
617
+ "tailwindcss": "^4.3.3",
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,26 +597,27 @@ 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.8",
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",
607
- "react": "^19.2.7",
608
- "react-dom": "^19.2.7",
603
+ "lucide-react": "^1.26.0",
604
+ "next": "^16.2.11",
605
+ "react": "^19.2.8",
606
+ "react-dom": "^19.2.8",
609
607
  "tailwind-merge": "^3.6.0"
610
608
  },
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.3",
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.23",
617
+ "tailwindcss": "^4.3.3",
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
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` |
@@ -352,6 +356,7 @@ npx assistant-ui@latest info
352
356
  ```
353
357
 
354
358
  This command collects and prints:
359
+ - The running `assistant-ui` CLI version
355
360
  - OS, Node.js version, package manager, and framework
356
361
  - All installed `@assistant-ui/*` and `assistant-*` package versions
357
362
  - Key ecosystem dependency versions (React, Next.js, AI SDK, etc.)
@@ -361,6 +366,7 @@ This command collects and prints:
361
366
 
362
367
  ```
363
368
  Environment:
369
+ assistant-ui CLI: 0.0.106
364
370
  OS: macOS 15.3 (arm64)
365
371
  Node.js: v22.14.0
366
372
  Package Manager: pnpm 10.32.1
@@ -451,6 +457,18 @@ npx assistant-ui@latest update
451
457
 
452
458
  The CLI pulls components from our public registry at [r.assistant-ui.com](https://r.assistant-ui.com).
453
459
 
460
+ Configure the style-aware URL in `components.json` so `@assistant-ui/*` installs match your shadcn style:
461
+
462
+ ```json title="components.json"
463
+ {
464
+ "registries": {
465
+ "@assistant-ui": "https://r.assistant-ui.com/styles/{style}/{name}.json"
466
+ }
467
+ }
468
+ ```
469
+
470
+ 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.
471
+
454
472
  Each component includes:
455
473
  - Full TypeScript source code
456
474
  - All required dependencies
@@ -4,10 +4,13 @@ description: Inspect runtime state, context, and events in the browser.
4
4
  platforms: ["react"]
5
5
  ---
6
6
 
7
+ import { DevToolsSample, DevToolsModalSample } from "@/components/docs/samples/devtools";
7
8
 
8
9
  The assistant-ui DevTools allows you to debug the assistant-ui state and context, and events without resorting to `console.log`. It's an easy way to see how data flows to the assistant-ui's runtime layer.
9
10
 
10
- ![Screenshot of the DevTools UI showing logs and state panels](../../../../../.github/assets/devtoolsui.png)
11
+ Try it below — the chat on top is a live assistant-ui app, and the panel underneath is the real DevTools inspecting it. Send a message, trigger a tool call, and switch between the Thread, Context, and Activity tabs.
12
+
13
+ <DevToolsSample />
11
14
 
12
15
  ## Setup
13
16
 
@@ -45,7 +48,9 @@ export function AssistantApp() {
45
48
 
46
49
  That's it! In development builds you should now see the DevTools launcher in the lower-right corner of your site. The panel renders inline in an isolated shadow root, and the whole component is stripped from production builds.
47
50
 
48
- ![DevTools floating launcher anchored in the lower-right corner of a page](../../../../../.github/assets/devtoolsmodal.png)
51
+ Try it here — click the launcher in the lower-right corner of the frame, then use "Run a demo turn" to watch events stream into the open panel. In your app the window opens over a dimmed, click-to-close backdrop; the demo omits it so the app stays usable while the panel is open:
52
+
53
+ <DevToolsModalSample />
49
54
 
50
55
  </Step>
51
56
  </Steps>
@@ -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