@assistant-ui/mcp-docs-server 0.2.2 → 0.3.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 (459) hide show
  1. package/README.md +16 -43
  2. package/dist/index.d.ts +2 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -91
  5. package/dist/index.js.map +1 -1
  6. package/dist/proxy.d.ts +9 -0
  7. package/dist/proxy.d.ts.map +1 -0
  8. package/dist/proxy.js +76 -0
  9. package/dist/proxy.js.map +1 -0
  10. package/package.json +9 -13
  11. package/src/index.ts +3 -115
  12. package/src/proxy.test.ts +250 -0
  13. package/src/proxy.ts +111 -0
  14. package/.docs/organized/code-examples/waterfall.md +0 -807
  15. package/.docs/organized/code-examples/with-a2a.md +0 -674
  16. package/.docs/organized/code-examples/with-ag-ui.md +0 -552
  17. package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -465
  18. package/.docs/organized/code-examples/with-artifacts.md +0 -814
  19. package/.docs/organized/code-examples/with-assistant-transport.md +0 -575
  20. package/.docs/organized/code-examples/with-browser-extension.md +0 -371
  21. package/.docs/organized/code-examples/with-chain-of-thought.md +0 -960
  22. package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
  23. package/.docs/organized/code-examples/with-cloud.md +0 -438
  24. package/.docs/organized/code-examples/with-custom-thread-list.md +0 -568
  25. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -526
  26. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -696
  27. package/.docs/organized/code-examples/with-eve.md +0 -404
  28. package/.docs/organized/code-examples/with-expo.md +0 -2063
  29. package/.docs/organized/code-examples/with-external-store.md +0 -420
  30. package/.docs/organized/code-examples/with-ffmpeg.md +0 -828
  31. package/.docs/organized/code-examples/with-generative-ui.md +0 -1812
  32. package/.docs/organized/code-examples/with-google-adk.md +0 -367
  33. package/.docs/organized/code-examples/with-heat-graph.md +0 -304
  34. package/.docs/organized/code-examples/with-image-generation.md +0 -462
  35. package/.docs/organized/code-examples/with-interactables.md +0 -732
  36. package/.docs/organized/code-examples/with-langchain.md +0 -445
  37. package/.docs/organized/code-examples/with-langgraph.md +0 -854
  38. package/.docs/organized/code-examples/with-livekit.md +0 -642
  39. package/.docs/organized/code-examples/with-mcp.md +0 -780
  40. package/.docs/organized/code-examples/with-nuxt.md +0 -2428
  41. package/.docs/organized/code-examples/with-opencode.md +0 -1974
  42. package/.docs/organized/code-examples/with-openui.md +0 -449
  43. package/.docs/organized/code-examples/with-pi.md +0 -2083
  44. package/.docs/organized/code-examples/with-react-hook-form.md +0 -724
  45. package/.docs/organized/code-examples/with-react-ink-web.md +0 -690
  46. package/.docs/organized/code-examples/with-react-ink.md +0 -472
  47. package/.docs/organized/code-examples/with-react-router.md +0 -935
  48. package/.docs/organized/code-examples/with-resumable-stream.md +0 -667
  49. package/.docs/organized/code-examples/with-store.md +0 -679
  50. package/.docs/organized/code-examples/with-svelte.md +0 -415
  51. package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
  52. package/.docs/organized/code-examples/with-tanstack.md +0 -811
  53. package/.docs/organized/code-examples/with-tap-runtime.md +0 -812
  54. package/.docs/organized/code-examples/with-virtualized-thread.md +0 -680
  55. package/.docs/organized/code-examples/with-vue.md +0 -408
  56. package/.docs/raw/docs/(docs)/architecture.mdx +0 -146
  57. package/.docs/raw/docs/(docs)/base-ui.mdx +0 -39
  58. package/.docs/raw/docs/(docs)/cli.mdx +0 -542
  59. package/.docs/raw/docs/(docs)/devtools.mdx +0 -79
  60. package/.docs/raw/docs/(docs)/index.mdx +0 -21
  61. package/.docs/raw/docs/(docs)/installation.mdx +0 -483
  62. package/.docs/raw/docs/(docs)/llm.mdx +0 -211
  63. package/.docs/raw/docs/(docs)/rtl.mdx +0 -78
  64. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
  65. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
  66. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
  67. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
  68. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
  69. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
  70. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -20
  71. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
  72. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
  73. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
  74. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
  75. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -52
  76. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
  77. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
  78. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
  79. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
  80. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
  81. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
  82. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
  83. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
  84. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
  85. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
  86. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
  87. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
  88. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
  89. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
  90. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
  91. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
  92. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
  93. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
  94. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -97
  95. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
  96. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +0 -200
  97. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
  98. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
  99. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
  100. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
  101. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
  102. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
  103. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
  104. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
  105. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
  106. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
  107. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
  108. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
  109. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -619
  110. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
  111. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
  112. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
  113. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
  114. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
  115. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
  116. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
  117. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
  118. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
  119. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
  120. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
  121. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
  122. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
  123. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
  124. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
  125. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
  126. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
  127. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
  128. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
  129. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
  130. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
  131. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
  132. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
  133. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
  134. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
  135. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
  136. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
  137. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
  138. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
  139. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
  140. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
  141. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
  142. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
  143. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -149
  144. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
  145. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
  146. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
  147. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
  148. package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -602
  149. package/.docs/raw/docs/cloud/authorization.mdx +0 -252
  150. package/.docs/raw/docs/cloud/index.mdx +0 -46
  151. package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
  152. package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -400
  153. package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
  154. package/.docs/raw/docs/copilots/model-context.mdx +0 -156
  155. package/.docs/raw/docs/copilots/motivation.mdx +0 -202
  156. package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
  157. package/.docs/raw/docs/guides/attachments.mdx +0 -619
  158. package/.docs/raw/docs/guides/branching.mdx +0 -76
  159. package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
  160. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
  161. package/.docs/raw/docs/guides/context-api.mdx +0 -619
  162. package/.docs/raw/docs/guides/dictation.mdx +0 -298
  163. package/.docs/raw/docs/guides/editing.mdx +0 -102
  164. package/.docs/raw/docs/guides/electron.mdx +0 -369
  165. package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
  166. package/.docs/raw/docs/guides/image-generation.mdx +0 -74
  167. package/.docs/raw/docs/guides/index.mdx +0 -117
  168. package/.docs/raw/docs/guides/input-history.mdx +0 -55
  169. package/.docs/raw/docs/guides/latex.mdx +0 -158
  170. package/.docs/raw/docs/guides/mentions.mdx +0 -575
  171. package/.docs/raw/docs/guides/message-timing.mdx +0 -209
  172. package/.docs/raw/docs/guides/quoting.mdx +0 -169
  173. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
  174. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
  175. package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
  176. package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
  177. package/.docs/raw/docs/guides/speech.mdx +0 -172
  178. package/.docs/raw/docs/guides/suggestions.mdx +0 -384
  179. package/.docs/raw/docs/guides/virtualization.mdx +0 -133
  180. package/.docs/raw/docs/guides/voice.mdx +0 -310
  181. package/.docs/raw/docs/ink/adapters.mdx +0 -99
  182. package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
  183. package/.docs/raw/docs/ink/hooks.mdx +0 -469
  184. package/.docs/raw/docs/ink/index.mdx +0 -236
  185. package/.docs/raw/docs/ink/migration.mdx +0 -138
  186. package/.docs/raw/docs/ink/primitives.mdx +0 -1259
  187. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
  188. package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
  189. package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
  190. package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
  191. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
  192. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +0 -282
  193. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
  194. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
  195. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
  196. package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
  197. package/.docs/raw/docs/integrations/index.mdx +0 -178
  198. package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
  199. package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
  200. package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
  201. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
  202. package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
  203. package/.docs/raw/docs/migrations/index.mdx +0 -50
  204. package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
  205. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
  206. package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
  207. package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
  208. package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
  209. package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
  210. package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
  211. package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
  212. package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
  213. package/.docs/raw/docs/primitives/attachment.mdx +0 -217
  214. package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
  215. package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
  216. package/.docs/raw/docs/primitives/composer.mdx +0 -659
  217. package/.docs/raw/docs/primitives/error.mdx +0 -142
  218. package/.docs/raw/docs/primitives/index.mdx +0 -99
  219. package/.docs/raw/docs/primitives/message.mdx +0 -618
  220. package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
  221. package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
  222. package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
  223. package/.docs/raw/docs/primitives/thread.mdx +0 -509
  224. package/.docs/raw/docs/react-native/adapters.mdx +0 -94
  225. package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
  226. package/.docs/raw/docs/react-native/hooks.mdx +0 -339
  227. package/.docs/raw/docs/react-native/index.mdx +0 -289
  228. package/.docs/raw/docs/react-native/migration.mdx +0 -142
  229. package/.docs/raw/docs/react-native/primitives.mdx +0 -839
  230. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
  231. package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
  232. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
  233. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
  234. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
  235. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
  236. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -255
  237. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
  238. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
  239. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
  240. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
  241. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -716
  242. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
  243. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
  244. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
  245. package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
  246. package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
  247. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
  248. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
  249. package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
  250. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
  251. package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
  252. package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
  253. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
  254. package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
  255. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
  256. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
  257. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
  258. package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
  259. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
  260. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
  261. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
  262. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
  263. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
  264. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
  265. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
  266. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
  267. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
  268. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
  269. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
  270. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
  271. package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
  272. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
  273. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
  274. package/.docs/raw/docs/tools/a2ui.mdx +0 -107
  275. package/.docs/raw/docs/tools/backend.mdx +0 -147
  276. package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
  277. package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
  278. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
  279. package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
  280. package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
  281. package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
  282. package/.docs/raw/docs/tools/index.mdx +0 -72
  283. package/.docs/raw/docs/tools/interactables.mdx +0 -1084
  284. package/.docs/raw/docs/tools/mcp-apps.mdx +0 -346
  285. package/.docs/raw/docs/tools/mcp.mdx +0 -466
  286. package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
  287. package/.docs/raw/docs/tools/openui.mdx +0 -175
  288. package/.docs/raw/docs/tools/tool-ui.mdx +0 -1008
  289. package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
  290. package/.docs/raw/docs/ui/accordion.mdx +0 -266
  291. package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
  292. package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
  293. package/.docs/raw/docs/ui/attachment.mdx +0 -259
  294. package/.docs/raw/docs/ui/badge.mdx +0 -150
  295. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -212
  296. package/.docs/raw/docs/ui/context-display.mdx +0 -148
  297. package/.docs/raw/docs/ui/diff-viewer.mdx +0 -280
  298. package/.docs/raw/docs/ui/directive-text.mdx +0 -114
  299. package/.docs/raw/docs/ui/dot-matrix.mdx +0 -133
  300. package/.docs/raw/docs/ui/file.mdx +0 -159
  301. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
  302. package/.docs/raw/docs/ui/image.mdx +0 -102
  303. package/.docs/raw/docs/ui/markdown.mdx +0 -64
  304. package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
  305. package/.docs/raw/docs/ui/mermaid.mdx +0 -92
  306. package/.docs/raw/docs/ui/message-timing.mdx +0 -93
  307. package/.docs/raw/docs/ui/model-selector.mdx +0 -455
  308. package/.docs/raw/docs/ui/number-roll.mdx +0 -154
  309. package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
  310. package/.docs/raw/docs/ui/quote.mdx +0 -211
  311. package/.docs/raw/docs/ui/reasoning.mdx +0 -186
  312. package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
  313. package/.docs/raw/docs/ui/select.mdx +0 -254
  314. package/.docs/raw/docs/ui/sources.mdx +0 -177
  315. package/.docs/raw/docs/ui/streamdown.mdx +0 -392
  316. package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
  317. package/.docs/raw/docs/ui/tabs.mdx +0 -271
  318. package/.docs/raw/docs/ui/thread-list.mdx +0 -372
  319. package/.docs/raw/docs/ui/thread.mdx +0 -512
  320. package/.docs/raw/docs/ui/tool-fallback.mdx +0 -127
  321. package/.docs/raw/docs/ui/tool-group.mdx +0 -240
  322. package/.docs/raw/docs/ui/voice.mdx +0 -173
  323. package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
  324. package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
  325. package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
  326. package/dist/constants.d.ts +0 -14
  327. package/dist/constants.d.ts.map +0 -1
  328. package/dist/constants.js +0 -19
  329. package/dist/constants.js.map +0 -1
  330. package/dist/prepare-docs/code-examples.d.ts +0 -5
  331. package/dist/prepare-docs/code-examples.d.ts.map +0 -1
  332. package/dist/prepare-docs/code-examples.js +0 -117
  333. package/dist/prepare-docs/code-examples.js.map +0 -1
  334. package/dist/prepare-docs/copy-raw.d.ts +0 -5
  335. package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
  336. package/dist/prepare-docs/copy-raw.js +0 -49
  337. package/dist/prepare-docs/copy-raw.js.map +0 -1
  338. package/dist/prepare-docs/prepare.d.ts +0 -1
  339. package/dist/prepare-docs/prepare.js +0 -22
  340. package/dist/prepare-docs/prepare.js.map +0 -1
  341. package/dist/prompts/xulux-playground.d.ts +0 -12
  342. package/dist/prompts/xulux-playground.d.ts.map +0 -1
  343. package/dist/prompts/xulux-playground.js +0 -33
  344. package/dist/prompts/xulux-playground.js.map +0 -1
  345. package/dist/tools/docs.d.ts +0 -22
  346. package/dist/tools/docs.d.ts.map +0 -1
  347. package/dist/tools/docs.js +0 -177
  348. package/dist/tools/docs.js.map +0 -1
  349. package/dist/tools/examples.d.ts +0 -24
  350. package/dist/tools/examples.d.ts.map +0 -1
  351. package/dist/tools/examples.js +0 -87
  352. package/dist/tools/examples.js.map +0 -1
  353. package/dist/tools/resources.d.ts +0 -6
  354. package/dist/tools/resources.d.ts.map +0 -1
  355. package/dist/tools/resources.js +0 -75
  356. package/dist/tools/resources.js.map +0 -1
  357. package/dist/tools/search.d.ts +0 -24
  358. package/dist/tools/search.d.ts.map +0 -1
  359. package/dist/tools/search.js +0 -39
  360. package/dist/tools/search.js.map +0 -1
  361. package/dist/tools/tests/mcp-test-client.d.ts +0 -15
  362. package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
  363. package/dist/tools/tests/mcp-test-client.js +0 -68
  364. package/dist/tools/tests/mcp-test-client.js.map +0 -1
  365. package/dist/tools/tests/test-setup.d.ts +0 -7
  366. package/dist/tools/tests/test-setup.d.ts.map +0 -1
  367. package/dist/tools/tests/test-setup.js +0 -36
  368. package/dist/tools/tests/test-setup.js.map +0 -1
  369. package/dist/tools/xulux-templates.d.ts +0 -58
  370. package/dist/tools/xulux-templates.d.ts.map +0 -1
  371. package/dist/tools/xulux-templates.js +0 -84
  372. package/dist/tools/xulux-templates.js.map +0 -1
  373. package/dist/utils/cache.d.ts +0 -5
  374. package/dist/utils/cache.d.ts.map +0 -1
  375. package/dist/utils/cache.js +0 -18
  376. package/dist/utils/cache.js.map +0 -1
  377. package/dist/utils/logger.d.ts +0 -10
  378. package/dist/utils/logger.d.ts.map +0 -1
  379. package/dist/utils/logger.js +0 -20
  380. package/dist/utils/logger.js.map +0 -1
  381. package/dist/utils/mcp-format.d.ts +0 -11
  382. package/dist/utils/mcp-format.d.ts.map +0 -1
  383. package/dist/utils/mcp-format.js +0 -14
  384. package/dist/utils/mcp-format.js.map +0 -1
  385. package/dist/utils/mdx.d.ts +0 -12
  386. package/dist/utils/mdx.d.ts.map +0 -1
  387. package/dist/utils/mdx.js +0 -45
  388. package/dist/utils/mdx.js.map +0 -1
  389. package/dist/utils/paths.d.ts +0 -12
  390. package/dist/utils/paths.d.ts.map +0 -1
  391. package/dist/utils/paths.js +0 -93
  392. package/dist/utils/paths.js.map +0 -1
  393. package/dist/utils/search.d.ts +0 -10
  394. package/dist/utils/search.d.ts.map +0 -1
  395. package/dist/utils/search.js +0 -97
  396. package/dist/utils/search.js.map +0 -1
  397. package/dist/utils/security.d.ts +0 -5
  398. package/dist/utils/security.d.ts.map +0 -1
  399. package/dist/utils/security.js +0 -22
  400. package/dist/utils/security.js.map +0 -1
  401. package/dist/xulux/catalog-client.d.ts +0 -14
  402. package/dist/xulux/catalog-client.d.ts.map +0 -1
  403. package/dist/xulux/catalog-client.js +0 -67
  404. package/dist/xulux/catalog-client.js.map +0 -1
  405. package/dist/xulux/fallback-catalog.d.ts +0 -7
  406. package/dist/xulux/fallback-catalog.d.ts.map +0 -1
  407. package/dist/xulux/fallback-catalog.js +0 -47
  408. package/dist/xulux/fallback-catalog.js.map +0 -1
  409. package/dist/xulux/fetch-sandbox.d.ts +0 -5
  410. package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
  411. package/dist/xulux/fetch-sandbox.js +0 -40
  412. package/dist/xulux/fetch-sandbox.js.map +0 -1
  413. package/dist/xulux/template-service.d.ts +0 -84
  414. package/dist/xulux/template-service.d.ts.map +0 -1
  415. package/dist/xulux/template-service.js +0 -223
  416. package/dist/xulux/template-service.js.map +0 -1
  417. package/dist/xulux/types.d.ts +0 -55
  418. package/dist/xulux/types.d.ts.map +0 -1
  419. package/dist/xulux/types.js +0 -6
  420. package/dist/xulux/types.js.map +0 -1
  421. package/src/constants.ts +0 -24
  422. package/src/prepare-docs/code-examples.ts +0 -158
  423. package/src/prepare-docs/copy-raw.ts +0 -50
  424. package/src/prepare-docs/prepare.ts +0 -24
  425. package/src/prompts/xulux-playground.ts +0 -36
  426. package/src/tools/docs.ts +0 -255
  427. package/src/tools/examples.ts +0 -114
  428. package/src/tools/resources.ts +0 -111
  429. package/src/tools/search.ts +0 -46
  430. package/src/tools/tests/completions.test.ts +0 -60
  431. package/src/tools/tests/directory-size-cap.test.ts +0 -50
  432. package/src/tools/tests/docs.test.ts +0 -144
  433. package/src/tools/tests/examples.test.ts +0 -94
  434. package/src/tools/tests/integration.test.ts +0 -45
  435. package/src/tools/tests/json-parsing.test.ts +0 -23
  436. package/src/tools/tests/listings-cache.test.ts +0 -19
  437. package/src/tools/tests/mcp-protocol.test.ts +0 -216
  438. package/src/tools/tests/mcp-test-client.ts +0 -111
  439. package/src/tools/tests/path-traversal.test.ts +0 -81
  440. package/src/tools/tests/resources.test.ts +0 -133
  441. package/src/tools/tests/search.test.ts +0 -37
  442. package/src/tools/tests/test-setup.ts +0 -50
  443. package/src/tools/tests/xulux-templates.test.ts +0 -262
  444. package/src/tools/xulux-templates.ts +0 -141
  445. package/src/utils/cache.ts +0 -20
  446. package/src/utils/logger.ts +0 -20
  447. package/src/utils/mcp-format.ts +0 -14
  448. package/src/utils/mdx.ts +0 -59
  449. package/src/utils/paths.ts +0 -139
  450. package/src/utils/search.ts +0 -131
  451. package/src/utils/security.ts +0 -52
  452. package/src/utils/tests/cache.test.ts +0 -51
  453. package/src/utils/tests/mcp-format.test.ts +0 -22
  454. package/src/utils/tests/security.test.ts +0 -119
  455. package/src/xulux/catalog-client.ts +0 -105
  456. package/src/xulux/fallback-catalog.ts +0 -63
  457. package/src/xulux/fetch-sandbox.ts +0 -56
  458. package/src/xulux/template-service.ts +0 -406
  459. package/src/xulux/types.ts +0 -60
@@ -1,618 +0,0 @@
1
- ---
2
- title: Message
3
- description: Build custom message rendering with content parts, attachments, and hover state.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { MessagePrimitiveSample } from "@/components/docs/samples/message-primitive";
8
- import { MessagePrimitive as MessagePrimitiveDocs } from "@/generated/primitiveDocs";
9
-
10
- The Message primitive handles individual message rendering: content parts, attachments, quotes, hover state, and error display. It's the building block inside each message bubble, resolving text, images, tool calls, and more through a parts pipeline.
11
-
12
- <Tabs items={["Preview", "Code"]}>
13
- <Tab>
14
- <MessagePrimitiveSample />
15
- </Tab>
16
- <Tab>
17
- ```tsx
18
- import {
19
- MessagePrimitive,
20
- MessagePartPrimitive,
21
- } from "@assistant-ui/react";
22
-
23
- function UserMessage() {
24
- return (
25
- <MessagePrimitive.Root className="flex justify-end">
26
- <div className="max-w-[80%] rounded-2xl bg-primary px-4 py-2.5 text-sm text-primary-foreground">
27
- <MessagePrimitive.Parts>
28
- {({ part }) => {
29
- if (part.type === "text") return <UserText />;
30
- return null;
31
- }}
32
- </MessagePrimitive.Parts>
33
- </div>
34
- </MessagePrimitive.Root>
35
- );
36
- }
37
-
38
- function AssistantMessage() {
39
- return (
40
- <MessagePrimitive.Root className="flex justify-start gap-3">
41
- <div className="flex size-8 items-center justify-center rounded-full bg-primary/10 text-xs font-medium text-primary">
42
- AI
43
- </div>
44
- <div className="max-w-[80%] rounded-2xl bg-muted px-4 py-2.5 text-sm">
45
- <MessagePrimitive.Parts>
46
- {({ part }) => {
47
- if (part.type === "text") return <AssistantText />;
48
- return part.toolUI ?? null;
49
- }}
50
- </MessagePrimitive.Parts>
51
- </div>
52
- </MessagePrimitive.Root>
53
- );
54
- }
55
-
56
- function UserText() {
57
- return (
58
- <p>
59
- <MessagePartPrimitive.Text />
60
- </p>
61
- );
62
- }
63
-
64
- function AssistantText() {
65
- return (
66
- <p className="leading-relaxed">
67
- <MessagePartPrimitive.Text />
68
- </p>
69
- );
70
- }
71
- ```
72
- </Tab>
73
- </Tabs>
74
-
75
- ## Quick Start
76
-
77
- A minimal message with parts rendering:
78
-
79
- ```tsx
80
- import { MessagePrimitive } from "@assistant-ui/react";
81
-
82
- <MessagePrimitive.Root>
83
- <MessagePrimitive.Parts />
84
- </MessagePrimitive.Root>
85
- ```
86
-
87
- `Root` renders a `<div>` that provides message context and tracks hover state. `Parts` iterates over the message's content parts and renders each one. Without custom components, parts render with sensible defaults: `Text` renders a `<p>` with `white-space: pre-line` and a streaming indicator, `Image` renders via `MessagePartPrimitive.Image`, and tool calls render nothing unless a tool UI is registered globally or inline. Reasoning, source, file, and audio parts render nothing by default.
88
-
89
- <Callout type="info">
90
- Runtime setup: primitives require runtime context. Wrap your UI in `AssistantRuntimeProvider` with a runtime (for example `useLocalRuntime(...)`). See [Pick a Runtime](/docs/runtimes/pick-a-runtime).
91
- </Callout>
92
-
93
- ## Core Concepts
94
-
95
- ### Parts Pipeline
96
-
97
- `MessagePrimitive.Parts` now prefers a children render function. It gives you the current enriched part state directly, so you can branch inline and return exactly the UI you want:
98
-
99
- ```tsx
100
- <MessagePrimitive.Parts>
101
- {({ part }) => {
102
- if (part.type === "text") return <MyTextRenderer />;
103
- if (part.type === "image") return <MyImageRenderer />;
104
- if (part.type === "tool-call")
105
- return part.toolUI ?? <GenericToolUI {...part} />;
106
- return null;
107
- }}
108
- </MessagePrimitive.Parts>
109
- ```
110
-
111
- <Callout type="info">
112
- For most new code, prefer `MessagePrimitive.Parts` with a `children` render function. When you need adjacent grouping, use `MessagePrimitive.GroupedParts`.
113
- </Callout>
114
-
115
- ### Part Types
116
-
117
- A message part is one of three kinds, and which kind a new capability belongs to is decided by the list below rather than case by case.
118
-
119
- | Kind | Parts | Grows by |
120
- |------|-------|----------|
121
- | Modality | `text`, `image`, `file` | Never. `file` carries every non-image binary modality through its `mimeType`. |
122
- | Provider channel | `reasoning`, `source`, `tool-call`, `generative-ui` | Never. These mirror channels a model already emits. |
123
- | Extensibility | `data` | Freely, through `name`. This is the growth path for anything app-level. |
124
-
125
- `file` is the media carrier. Audio, video, PDFs and everything else are `{ type: "file", mimeType: "audio/mpeg" }` rather than part types of their own, so one renderer and one converter branch handle them all. The payload can be inline base64 or a URL; `sourceType` additionally allows an opaque storage id, which the LangChain-family runtimes honor and other adapters ignore.
126
-
127
- Anything that is not a modality the model consumes or a channel it emits is a `data` part, routed by `name`:
128
-
129
- ```tsx
130
- <MessagePrimitive.Parts
131
- components={{
132
- data: {
133
- by_name: { citation: MyCitation },
134
- Fallback: MyDataFallback,
135
- },
136
- }}
137
- />
138
- ```
139
-
140
- <Callout type="warn">
141
- `Unstable_AudioMessagePart` and the `Unstable_Audio` slot are deprecated. The audio part cannot carry a filename, has no way to declare how its payload goes on the wire (no `sourceType`, so no storage id), and exists only on user messages, so a model that returns audio has no way to express it. Send audio as a `file` part with an `audio/*` mime type instead, and give it a filename.
142
-
143
- Adapter coverage for the file path is still uneven, so check your adapter's converter before relying on file parts. Known so far: `react-pi` and the assistant-transport runtime have no file part on their user-content surface at all, so one is dropped; `react-data-stream` carries the payload but not the filename. Existing audio parts keep working; they will not gain fields.
144
- </Callout>
145
-
146
- ### Tool Resolution
147
-
148
- Tool call parts resolve in this order:
149
-
150
- 1. **`tools.Override`**: if provided inline through the deprecated `components` prop, handles **all** tool calls
151
- 2. **Globally registered tools**: tools registered via `Tools({ toolkit })`
152
- 3. **`tools.by_name[toolName]`**: per-`MessagePrimitive.Parts` inline overrides from the deprecated `components` prop
153
- 4. **`tools.Fallback`**: catch-all for unmatched tool calls from the deprecated `components` prop
154
- 5. **`part.toolUI`**: the resolved tool UI exposed directly in the children render function
155
-
156
- In the children API, tool and data parts expose resolved UI helpers directly:
157
-
158
- ```tsx
159
- <MessagePrimitive.Parts>
160
- {({ part }) => {
161
- if (part.type === "tool-call")
162
- return part.toolUI ?? <ToolFallback {...part} />;
163
-
164
- if (part.type === "data")
165
- return part.dataRendererUI ?? null;
166
-
167
- return null;
168
- }}
169
- </MessagePrimitive.Parts>
170
- ```
171
-
172
- Returning `null` still allows registered tool UIs and data renderer UIs to render automatically. Return `<></>` if you want to suppress them entirely.
173
-
174
- ### Components Prop (Deprecated)
175
-
176
- `components` is deprecated. This section only documents it so older code is still understandable:
177
-
178
- - `ToolGroup` wraps consecutive tool-call parts
179
- - `ReasoningGroup` wraps consecutive reasoning parts
180
- - `components.ChainOfThought` takes over all reasoning and tool-call rendering (mutually exclusive with `ToolGroup`, `ReasoningGroup`, `tools`, and `Reasoning`). This legacy path is deprecated; use `MessagePrimitive.GroupedParts` for grouped Chain of Thought in new code.
181
- - `data.by_name` and `data.Fallback` let you route custom data part types
182
- - `Quote` renders quoted message references from metadata
183
- - `Empty` is available for edge rendering paths
184
- - `Unstable_Audio` is deprecated; render `audio/*` from the `File` slot instead
185
-
186
- ```tsx
187
- <MessagePrimitive.Parts
188
- components={{
189
- Text: () => (
190
- <p className="whitespace-pre-wrap">
191
- <MessagePartPrimitive.Text />
192
- </p>
193
- ),
194
- Image: () => <MessagePartPrimitive.Image className="max-w-sm rounded-xl" />,
195
- File: () => <div className="rounded-md border px-2 py-1 text-xs">File part</div>,
196
- tools: {
197
- by_name: {
198
- get_weather: () => <div>Weather tool</div>,
199
- },
200
- Fallback: ({ toolName }) => <div>Unknown tool: {toolName}</div>,
201
- },
202
- data: {
203
- by_name: {
204
- "my-event": ({ data }) => <pre>{JSON.stringify(data, null, 2)}</pre>,
205
- },
206
- Fallback: ({ name }) => <div>Unknown data event: {name}</div>,
207
- },
208
- ToolGroup: ({ children }) => (
209
- <div className="space-y-2 rounded-lg border p-2">{children}</div>
210
- ),
211
- ReasoningGroup: ({ children }) => (
212
- <details className="rounded-lg border p-2">
213
- <summary>Reasoning</summary>
214
- {children}
215
- </details>
216
- ),
217
- Empty: () => <span className="text-muted-foreground">...</span>,
218
- Unstable_Audio: () => null,
219
- }}
220
- />
221
- ```
222
-
223
- For new code, use the `children` render function or `GroupedParts` instead.
224
-
225
- ### Hover State
226
-
227
- `MessagePrimitive.Root` automatically tracks mouse enter/leave events. This hover state is consumed by `ActionBarPrimitive` to implement auto-hide behavior, with no extra wiring needed.
228
-
229
- ### MessagePartPrimitive
230
-
231
- Inside your custom part components, use these sub-primitives to access the actual content:
232
-
233
- - **`MessagePartPrimitive.Text`**: renders the text content of a text part
234
- - **`MessagePartPrimitive.Image`**: renders the image of an image part
235
- - **`MessagePartPrimitive.InProgress`**: renders only while the part is still streaming
236
-
237
- ```tsx
238
- function MyText() {
239
- return (
240
- <p className="whitespace-pre-wrap">
241
- <MessagePartPrimitive.Text />
242
- <MessagePartPrimitive.InProgress>
243
- <span className="animate-pulse">▊</span>
244
- </MessagePartPrimitive.InProgress>
245
- </p>
246
- );
247
- }
248
- ```
249
-
250
- ## Parts
251
-
252
- ### Root
253
-
254
- Container for a single message. Renders a `<div>` element unless `asChild` is set.
255
-
256
- ```tsx
257
- <MessagePrimitive.Root className="flex flex-col gap-2">
258
- <MessagePrimitive.Quote>
259
- {({ text }) => <blockquote className="mb-2 border-l pl-3 italic">{text}</blockquote>}
260
- </MessagePrimitive.Quote>
261
- <MessagePrimitive.Parts />
262
- </MessagePrimitive.Root>
263
- ```
264
-
265
- ### Parts
266
-
267
- Renders each content part with type-based component resolution.
268
-
269
- ```tsx
270
- <MessagePrimitive.Parts>
271
- {({ part }) => {
272
- if (part.type === "text") return <MyTextRenderer />;
273
- if (part.type === "image") return <MyImageRenderer />;
274
- if (part.type === "tool-call")
275
- return part.toolUI ?? <GenericToolUI {...part} />;
276
- return null;
277
- }}
278
- </MessagePrimitive.Parts>
279
- ```
280
-
281
- <PrimitivesTypeTable type="MessagePrimitivePartsProps" parameters={MessagePrimitiveDocs.Parts.props} />
282
-
283
- ### GroupedParts
284
-
285
- Groups adjacent message parts into a nested tree. Use `groupBy` to map each part to a group-key path, then switch on `part.type` in the render function. Group cases render `children`; leaf cases render their own UI. Prefer the `groupPartByType` helper for the common `part.type → path` case.
286
-
287
- ```tsx
288
- import { MessagePrimitive, groupPartByType } from "@assistant-ui/react";
289
-
290
- <MessagePrimitive.GroupedParts
291
- groupBy={groupPartByType({
292
- reasoning: ["group-chainOfThought", "group-reasoning"],
293
- "tool-call": ["group-chainOfThought", "group-tool"],
294
- })}
295
- >
296
- {({ part, children }) => {
297
- switch (part.type) {
298
- case "group-chainOfThought":
299
- return <div>{children}</div>;
300
- case "group-reasoning":
301
- return <ReasoningRoot>{children}</ReasoningRoot>;
302
- case "group-tool":
303
- return <ToolGroupRoot>{children}</ToolGroupRoot>;
304
- case "text":
305
- return <MarkdownText />;
306
- case "reasoning":
307
- return <Reasoning {...part} />;
308
- case "tool-call":
309
- return part.toolUI ?? <ToolFallback {...part} />;
310
- case "data":
311
- return part.dataRendererUI;
312
- default:
313
- return null;
314
- }
315
- }}
316
- </MessagePrimitive.GroupedParts>
317
- ```
318
-
319
- <PrimitivesTypeTable type="MessagePrimitiveGroupedPartsProps" parameters={MessagePrimitiveDocs.GroupedParts.props} />
320
-
321
- ### Content
322
-
323
- Legacy alias for `Parts`.
324
-
325
- ```tsx
326
- <MessagePrimitive.Content>
327
- {({ part }) => {
328
- if (part.type === "text") return <MyTextRenderer />;
329
- return null;
330
- }}
331
- </MessagePrimitive.Content>
332
- ```
333
-
334
- ### PartByIndex
335
-
336
- Renders a single part at a specific index.
337
-
338
- ```tsx
339
- <MessagePrimitive.PartByIndex
340
- index={0}
341
- components={{ Text: MyTextRenderer }}
342
- />
343
- ```
344
-
345
- ### Attachments
346
-
347
- Renders all user message attachments.
348
-
349
- ```tsx
350
- <MessagePrimitive.Attachments>
351
- {({ attachment }) => {
352
- if (attachment.type === "image") {
353
- const imageSrc = attachment.content?.find((part) => part.type === "image")?.image;
354
- if (!imageSrc) return null;
355
- return <img src={imageSrc} alt={attachment.name} className="max-w-xs rounded-lg" />;
356
- }
357
-
358
- if (attachment.type === "document") {
359
- return (
360
- <div className="rounded-lg border p-2 text-sm">
361
- {attachment.name}
362
- </div>
363
- );
364
- }
365
-
366
- return null;
367
- }}
368
- </MessagePrimitive.Attachments>
369
- ```
370
-
371
- <PrimitivesTypeTable type="MessagePrimitiveAttachmentsProps" parameters={MessagePrimitiveDocs.Attachments.props} />
372
-
373
- ### AttachmentByIndex
374
-
375
- Renders a single attachment at the specified index within the current message.
376
-
377
- ```tsx
378
- <MessagePrimitive.AttachmentByIndex
379
- index={0}
380
- components={{ Attachment: MyAttachment }}
381
- />
382
- ```
383
-
384
- <PrimitivesTypeTable type="MessagePrimitiveAttachmentByIndexProps" parameters={MessagePrimitiveDocs.AttachmentByIndex.props} />
385
-
386
- ### Error
387
-
388
- Renders children only when the message has an error.
389
-
390
- ```tsx
391
- <MessagePrimitive.Error>
392
- <ErrorPrimitive.Root className="mt-2 rounded-md border border-destructive/20 bg-destructive/5 p-3">
393
- <ErrorPrimitive.Message />
394
- </ErrorPrimitive.Root>
395
- </MessagePrimitive.Error>
396
- ```
397
-
398
- ### Quote
399
-
400
- Renders quote metadata when the current message includes a quote. Place it above `MessagePrimitive.Parts`.
401
-
402
- ```tsx
403
- <MessagePrimitive.Quote>
404
- {({ text, messageId }) => (
405
- <blockquote className="mb-2 border-l pl-3 italic" data-message-id={messageId}>
406
- {text}
407
- </blockquote>
408
- )}
409
- </MessagePrimitive.Quote>
410
- ```
411
-
412
- ### Unstable_PartsGrouped
413
-
414
- Groups parts by a custom grouping function *(unstable; use `GroupedParts` for adjacent grouping)*.
415
-
416
- ```tsx
417
- <MessagePrimitive.Unstable_PartsGrouped
418
- groupingFunction={myGroupFn}
419
- components={{ Text: MyText, Group: MyGroupWrapper }}
420
- />
421
- ```
422
-
423
- <PrimitivesTypeTable type="MessagePrimitiveUnstablePartsGroupedProps" parameters={MessagePrimitiveDocs.Unstable_PartsGrouped.props} />
424
-
425
- ### Unstable_PartsGroupedByParentId
426
-
427
- Groups parts by parent ID *(unstable, deprecated; use `Unstable_PartsGrouped`)*.
428
-
429
- ```tsx
430
- <MessagePrimitive.Unstable_PartsGroupedByParentId
431
- components={{ Text: MyText, Group: MyGroupWrapper }}
432
- />
433
- ```
434
-
435
- ### If (deprecated)
436
-
437
- <Callout type="warn">
438
- Deprecated. Use [`AuiIf`](/docs/api-reference/primitives/assistant-if) instead.
439
- </Callout>
440
-
441
- ```tsx
442
- // Before (deprecated)
443
- <MessagePrimitive.If user>...</MessagePrimitive.If>
444
- <MessagePrimitive.If assistant>...</MessagePrimitive.If>
445
-
446
- // After
447
- <AuiIf condition={(s) => s.message.role === "user"}>...</AuiIf>
448
- <AuiIf condition={(s) => s.message.role === "assistant"}>...</AuiIf>
449
- ```
450
-
451
- ## Patterns
452
-
453
- ### Custom Text Rendering
454
-
455
- ```tsx
456
- function MarkdownText() {
457
- return (
458
- <div className="prose prose-sm">
459
- <MessagePartPrimitive.Text />
460
- </div>
461
- );
462
- }
463
-
464
- <MessagePrimitive.Parts>
465
- {({ part }) => {
466
- if (part.type === "text") return <MarkdownText />;
467
- return null;
468
- }}
469
- </MessagePrimitive.Parts>
470
- ```
471
-
472
- ### Tool UI with by_name
473
-
474
- ```tsx
475
- <MessagePrimitive.Parts
476
- components={{
477
- Text: MyText,
478
- tools: {
479
- by_name: {
480
- get_weather: ({ result }) => (
481
- <div className="rounded-lg border p-3">
482
- <p className="font-medium">Weather</p>
483
- <p>{result?.temperature}°F, {result?.condition}</p>
484
- </div>
485
- ),
486
- },
487
- Fallback: ({ toolName, status }) => (
488
- <div className="text-muted-foreground text-sm">
489
- {status.type === "running" ? `Running ${toolName}...` : `${toolName} completed`}
490
- </div>
491
- ),
492
- },
493
- }}
494
- />
495
- ```
496
-
497
- ### Error Display
498
-
499
- ```tsx
500
- <MessagePrimitive.Root>
501
- <MessagePrimitive.Parts />
502
- <MessagePrimitive.Error>
503
- <div className="mt-2 rounded-md bg-destructive/10 p-2 text-sm text-destructive">
504
- Something went wrong. Please try again.
505
- </div>
506
- </MessagePrimitive.Error>
507
- </MessagePrimitive.Root>
508
- ```
509
-
510
- ### Error Display with ErrorPrimitive
511
-
512
- For more control over error rendering, `ErrorPrimitive` provides a dedicated component that auto-reads the error string from the message status:
513
-
514
- ```tsx
515
- import { ErrorPrimitive, MessagePrimitive } from "@assistant-ui/react";
516
-
517
- <MessagePrimitive.Root>
518
- <MessagePrimitive.Parts />
519
- <ErrorPrimitive.Root className="mt-2 rounded-md bg-destructive/10 p-2 text-sm text-destructive" role="alert">
520
- <ErrorPrimitive.Message />
521
- </ErrorPrimitive.Root>
522
- </MessagePrimitive.Root>
523
- ```
524
-
525
- `ErrorPrimitive.Root` renders a `<div>` container with `role="alert"` and `ErrorPrimitive.Message` renders a `<span>` that displays the error text. `Root` always renders. Only `Message` conditionally returns `null` when there is no error. Wrap in `<MessagePrimitive.Error>` if you want the entire block to be conditional. See the [ErrorPrimitive API Reference](/docs/api-reference/primitives/error) for full details.
526
-
527
- ### Render After Stream Completes
528
-
529
- To render content only once the assistant message has finished streaming (a follow-up card, a feedback prompt, a generated component that should not flicker through partial states), gate it with [`AuiIf`](/docs/api-reference/primitives/assistant-if) on `s.message.status`:
530
-
531
- ```tsx
532
- import { MessagePrimitive, AuiIf } from "@assistant-ui/react";
533
-
534
- <MessagePrimitive.Root>
535
- <MessagePrimitive.Parts />
536
-
537
- <AuiIf
538
- condition={(s) =>
539
- s.message.role === "assistant" &&
540
- s.message.status?.type === "complete"
541
- }
542
- >
543
- <FollowUpCard />
544
- </AuiIf>
545
- </MessagePrimitive.Root>;
546
- ```
547
-
548
- `s.message.status` is a discriminated union of `running | requires-action | complete | incomplete`, defined only on assistant messages. The `role === "assistant"` guard keeps the predicate type-safe. For tool-call-driven generative UI that defers rendering inside the part itself, see [Deferred Rendering](/docs/tools/tool-ui#deferred-rendering) in the Generative UI guide.
549
-
550
- ### Legacy and Unstable APIs
551
-
552
- - `MessagePrimitive.Unstable_PartsGrouped` and `MessagePrimitive.Unstable_PartsGroupedByParentId` are unstable APIs for non-adjacent custom grouping.
553
- - `Unstable_PartsGroupedByParentId` is deprecated in favor of `Unstable_PartsGrouped`.
554
-
555
- ### Role-Based Styling
556
-
557
- `MessagePrimitive.Root` sets `data-message-id` automatically but does not set a `data-role` attribute. Style by role in your message components:
558
-
559
- ```tsx
560
- // In your ThreadPrimitive.Messages children render function:
561
- function UserMessage() {
562
- return (
563
- <MessagePrimitive.Root data-role="user" className="flex justify-end">
564
- <MessagePrimitive.Parts />
565
- </MessagePrimitive.Root>
566
- );
567
- }
568
-
569
- function AssistantMessage() {
570
- return (
571
- <MessagePrimitive.Root data-role="assistant" className="flex justify-start">
572
- <MessagePrimitive.Parts />
573
- </MessagePrimitive.Root>
574
- );
575
- }
576
- ```
577
-
578
- ### Attachments
579
-
580
- ```tsx
581
- <MessagePrimitive.Root>
582
- <MessagePrimitive.Attachments>
583
- {({ attachment }) => {
584
- if (attachment.type === "image") {
585
- const imageSrc = attachment.content?.find((part) => part.type === "image")?.image;
586
- if (!imageSrc) return null;
587
- return <img src={imageSrc} alt={attachment.name} className="max-w-xs rounded-lg" />;
588
- }
589
-
590
- if (attachment.type === "document") {
591
- return (
592
- <div className="flex items-center gap-2 rounded-lg border p-2 text-sm">
593
- 📄 {attachment.name}
594
- </div>
595
- );
596
- }
597
-
598
- return null;
599
- }}
600
- </MessagePrimitive.Attachments>
601
- <MessagePrimitive.Parts />
602
- </MessagePrimitive.Root>
603
- ```
604
-
605
- ## Relationship to Components
606
-
607
- The shadcn [Thread](/docs/ui/thread) component renders user and assistant messages built from these primitives. The pre-built `AssistantMessage` and `UserMessage` components handle text rendering, tool UIs, error display, and action bars, all using `MessagePrimitive` under the hood.
608
-
609
- Messages are commonly paired with [ActionBar](/docs/primitives/action-bar) for copy/reload/edit actions and [BranchPicker](/docs/primitives/branch-picker) for navigating between alternative responses.
610
-
611
- ## API Reference
612
-
613
- For full prop details on every part, see the [MessagePrimitive API Reference](/docs/api-reference/primitives/message).
614
-
615
- Related:
616
- - [MessagePartPrimitive API Reference](/docs/api-reference/primitives/message-part)
617
- - [ActionBarPrimitive API Reference](/docs/api-reference/primitives/action-bar)
618
- - [BranchPickerPrimitive API Reference](/docs/api-reference/primitives/branch-picker)