@assistant-ui/mcp-docs-server 0.2.3 → 0.3.1

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 (452) 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 +91 -0
  9. package/dist/proxy.js.map +1 -0
  10. package/package.json +8 -12
  11. package/src/index.ts +3 -115
  12. package/src/proxy.test.ts +385 -0
  13. package/src/proxy.ts +126 -0
  14. package/.docs/organized/code-examples/waterfall.md +0 -807
  15. package/.docs/organized/code-examples/with-a2a.md +0 -675
  16. package/.docs/organized/code-examples/with-ag-ui.md +0 -553
  17. package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -466
  18. package/.docs/organized/code-examples/with-artifacts.md +0 -815
  19. package/.docs/organized/code-examples/with-assistant-transport.md +0 -576
  20. package/.docs/organized/code-examples/with-browser-extension.md +0 -371
  21. package/.docs/organized/code-examples/with-chain-of-thought.md +0 -962
  22. package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
  23. package/.docs/organized/code-examples/with-cloud.md +0 -439
  24. package/.docs/organized/code-examples/with-custom-thread-list.md +0 -569
  25. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -527
  26. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -697
  27. package/.docs/organized/code-examples/with-eve.md +0 -405
  28. package/.docs/organized/code-examples/with-expo.md +0 -2246
  29. package/.docs/organized/code-examples/with-external-store.md +0 -421
  30. package/.docs/organized/code-examples/with-ffmpeg.md +0 -829
  31. package/.docs/organized/code-examples/with-generative-ui.md +0 -1810
  32. package/.docs/organized/code-examples/with-google-adk.md +0 -368
  33. package/.docs/organized/code-examples/with-heat-graph.md +0 -304
  34. package/.docs/organized/code-examples/with-image-generation.md +0 -463
  35. package/.docs/organized/code-examples/with-interactables.md +0 -733
  36. package/.docs/organized/code-examples/with-langchain.md +0 -446
  37. package/.docs/organized/code-examples/with-langgraph.md +0 -855
  38. package/.docs/organized/code-examples/with-livekit.md +0 -643
  39. package/.docs/organized/code-examples/with-mcp.md +0 -782
  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 -450
  43. package/.docs/organized/code-examples/with-pi.md +0 -2084
  44. package/.docs/organized/code-examples/with-react-hook-form.md +0 -727
  45. package/.docs/organized/code-examples/with-react-ink-web.md +0 -740
  46. package/.docs/organized/code-examples/with-react-ink.md +0 -473
  47. package/.docs/organized/code-examples/with-react-router.md +0 -936
  48. package/.docs/organized/code-examples/with-resumable-stream.md +0 -668
  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 -812
  53. package/.docs/organized/code-examples/with-tap-runtime.md +0 -813
  54. package/.docs/organized/code-examples/with-virtualized-thread.md +0 -681
  55. package/.docs/organized/code-examples/with-vue.md +0 -408
  56. package/.docs/raw/docs/(getting-started)/architecture.mdx +0 -146
  57. package/.docs/raw/docs/(getting-started)/base-ui.mdx +0 -39
  58. package/.docs/raw/docs/(getting-started)/cli.mdx +0 -542
  59. package/.docs/raw/docs/(getting-started)/devtools.mdx +0 -79
  60. package/.docs/raw/docs/(getting-started)/index.mdx +0 -23
  61. package/.docs/raw/docs/(getting-started)/installation.mdx +0 -483
  62. package/.docs/raw/docs/(getting-started)/llm.mdx +0 -211
  63. package/.docs/raw/docs/(getting-started)/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 -26
  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 -57
  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/ai-sdk.mdx +0 -200
  94. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
  95. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -118
  96. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
  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 -637
  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 -152
  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 -604
  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 -411
  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 -215
  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 -237
  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.mdx +0 -283
  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 -976
  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 -267
  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 -731
  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 -363
  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 -1020
  289. package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
  290. package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
  291. package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
  292. package/.docs/raw/docs/ui/attachment.mdx +0 -279
  293. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -247
  294. package/.docs/raw/docs/ui/context-display.mdx +0 -148
  295. package/.docs/raw/docs/ui/directive-text.mdx +0 -114
  296. package/.docs/raw/docs/ui/file.mdx +0 -159
  297. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
  298. package/.docs/raw/docs/ui/image.mdx +0 -102
  299. package/.docs/raw/docs/ui/markdown.mdx +0 -103
  300. package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
  301. package/.docs/raw/docs/ui/mermaid.mdx +0 -92
  302. package/.docs/raw/docs/ui/message-timing.mdx +0 -93
  303. package/.docs/raw/docs/ui/model-selector.mdx +0 -455
  304. package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
  305. package/.docs/raw/docs/ui/quote.mdx +0 -211
  306. package/.docs/raw/docs/ui/reasoning.mdx +0 -214
  307. package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
  308. package/.docs/raw/docs/ui/sources.mdx +0 -186
  309. package/.docs/raw/docs/ui/streamdown.mdx +0 -392
  310. package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
  311. package/.docs/raw/docs/ui/thread-list.mdx +0 -411
  312. package/.docs/raw/docs/ui/thread.mdx +0 -559
  313. package/.docs/raw/docs/ui/tool-fallback.mdx +0 -141
  314. package/.docs/raw/docs/ui/tool-group.mdx +0 -240
  315. package/.docs/raw/docs/ui/voice.mdx +0 -173
  316. package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
  317. package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
  318. package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
  319. package/dist/constants.d.ts +0 -14
  320. package/dist/constants.d.ts.map +0 -1
  321. package/dist/constants.js +0 -19
  322. package/dist/constants.js.map +0 -1
  323. package/dist/prepare-docs/code-examples.d.ts +0 -5
  324. package/dist/prepare-docs/code-examples.d.ts.map +0 -1
  325. package/dist/prepare-docs/code-examples.js +0 -117
  326. package/dist/prepare-docs/code-examples.js.map +0 -1
  327. package/dist/prepare-docs/copy-raw.d.ts +0 -5
  328. package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
  329. package/dist/prepare-docs/copy-raw.js +0 -49
  330. package/dist/prepare-docs/copy-raw.js.map +0 -1
  331. package/dist/prepare-docs/prepare.d.ts +0 -1
  332. package/dist/prepare-docs/prepare.js +0 -22
  333. package/dist/prepare-docs/prepare.js.map +0 -1
  334. package/dist/prompts/xulux-playground.d.ts +0 -12
  335. package/dist/prompts/xulux-playground.d.ts.map +0 -1
  336. package/dist/prompts/xulux-playground.js +0 -33
  337. package/dist/prompts/xulux-playground.js.map +0 -1
  338. package/dist/tools/docs.d.ts +0 -22
  339. package/dist/tools/docs.d.ts.map +0 -1
  340. package/dist/tools/docs.js +0 -177
  341. package/dist/tools/docs.js.map +0 -1
  342. package/dist/tools/examples.d.ts +0 -24
  343. package/dist/tools/examples.d.ts.map +0 -1
  344. package/dist/tools/examples.js +0 -87
  345. package/dist/tools/examples.js.map +0 -1
  346. package/dist/tools/resources.d.ts +0 -6
  347. package/dist/tools/resources.d.ts.map +0 -1
  348. package/dist/tools/resources.js +0 -75
  349. package/dist/tools/resources.js.map +0 -1
  350. package/dist/tools/search.d.ts +0 -24
  351. package/dist/tools/search.d.ts.map +0 -1
  352. package/dist/tools/search.js +0 -39
  353. package/dist/tools/search.js.map +0 -1
  354. package/dist/tools/tests/mcp-test-client.d.ts +0 -15
  355. package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
  356. package/dist/tools/tests/mcp-test-client.js +0 -68
  357. package/dist/tools/tests/mcp-test-client.js.map +0 -1
  358. package/dist/tools/tests/test-setup.d.ts +0 -7
  359. package/dist/tools/tests/test-setup.d.ts.map +0 -1
  360. package/dist/tools/tests/test-setup.js +0 -36
  361. package/dist/tools/tests/test-setup.js.map +0 -1
  362. package/dist/tools/xulux-templates.d.ts +0 -58
  363. package/dist/tools/xulux-templates.d.ts.map +0 -1
  364. package/dist/tools/xulux-templates.js +0 -84
  365. package/dist/tools/xulux-templates.js.map +0 -1
  366. package/dist/utils/cache.d.ts +0 -5
  367. package/dist/utils/cache.d.ts.map +0 -1
  368. package/dist/utils/cache.js +0 -18
  369. package/dist/utils/cache.js.map +0 -1
  370. package/dist/utils/logger.d.ts +0 -10
  371. package/dist/utils/logger.d.ts.map +0 -1
  372. package/dist/utils/logger.js +0 -20
  373. package/dist/utils/logger.js.map +0 -1
  374. package/dist/utils/mcp-format.d.ts +0 -11
  375. package/dist/utils/mcp-format.d.ts.map +0 -1
  376. package/dist/utils/mcp-format.js +0 -14
  377. package/dist/utils/mcp-format.js.map +0 -1
  378. package/dist/utils/mdx.d.ts +0 -12
  379. package/dist/utils/mdx.d.ts.map +0 -1
  380. package/dist/utils/mdx.js +0 -45
  381. package/dist/utils/mdx.js.map +0 -1
  382. package/dist/utils/paths.d.ts +0 -12
  383. package/dist/utils/paths.d.ts.map +0 -1
  384. package/dist/utils/paths.js +0 -93
  385. package/dist/utils/paths.js.map +0 -1
  386. package/dist/utils/search.d.ts +0 -10
  387. package/dist/utils/search.d.ts.map +0 -1
  388. package/dist/utils/search.js +0 -97
  389. package/dist/utils/search.js.map +0 -1
  390. package/dist/utils/security.d.ts +0 -5
  391. package/dist/utils/security.d.ts.map +0 -1
  392. package/dist/utils/security.js +0 -22
  393. package/dist/utils/security.js.map +0 -1
  394. package/dist/xulux/catalog-client.d.ts +0 -14
  395. package/dist/xulux/catalog-client.d.ts.map +0 -1
  396. package/dist/xulux/catalog-client.js +0 -112
  397. package/dist/xulux/catalog-client.js.map +0 -1
  398. package/dist/xulux/fallback-catalog.d.ts +0 -7
  399. package/dist/xulux/fallback-catalog.d.ts.map +0 -1
  400. package/dist/xulux/fallback-catalog.js +0 -47
  401. package/dist/xulux/fallback-catalog.js.map +0 -1
  402. package/dist/xulux/fetch-sandbox.d.ts +0 -5
  403. package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
  404. package/dist/xulux/fetch-sandbox.js +0 -40
  405. package/dist/xulux/fetch-sandbox.js.map +0 -1
  406. package/dist/xulux/template-service.d.ts +0 -84
  407. package/dist/xulux/template-service.d.ts.map +0 -1
  408. package/dist/xulux/template-service.js +0 -223
  409. package/dist/xulux/template-service.js.map +0 -1
  410. package/dist/xulux/types.d.ts +0 -55
  411. package/dist/xulux/types.d.ts.map +0 -1
  412. package/dist/xulux/types.js +0 -6
  413. package/dist/xulux/types.js.map +0 -1
  414. package/src/constants.ts +0 -24
  415. package/src/prepare-docs/code-examples.ts +0 -158
  416. package/src/prepare-docs/copy-raw.ts +0 -50
  417. package/src/prepare-docs/prepare.ts +0 -24
  418. package/src/prompts/xulux-playground.ts +0 -36
  419. package/src/tools/docs.ts +0 -255
  420. package/src/tools/examples.ts +0 -114
  421. package/src/tools/resources.ts +0 -111
  422. package/src/tools/search.ts +0 -46
  423. package/src/tools/tests/completions.test.ts +0 -60
  424. package/src/tools/tests/directory-size-cap.test.ts +0 -50
  425. package/src/tools/tests/docs.test.ts +0 -147
  426. package/src/tools/tests/examples.test.ts +0 -94
  427. package/src/tools/tests/integration.test.ts +0 -45
  428. package/src/tools/tests/json-parsing.test.ts +0 -23
  429. package/src/tools/tests/listings-cache.test.ts +0 -19
  430. package/src/tools/tests/mcp-protocol.test.ts +0 -216
  431. package/src/tools/tests/mcp-test-client.ts +0 -111
  432. package/src/tools/tests/path-traversal.test.ts +0 -84
  433. package/src/tools/tests/resources.test.ts +0 -133
  434. package/src/tools/tests/search.test.ts +0 -37
  435. package/src/tools/tests/test-setup.ts +0 -50
  436. package/src/tools/tests/xulux-templates.test.ts +0 -325
  437. package/src/tools/xulux-templates.ts +0 -141
  438. package/src/utils/cache.ts +0 -20
  439. package/src/utils/logger.ts +0 -20
  440. package/src/utils/mcp-format.ts +0 -14
  441. package/src/utils/mdx.ts +0 -59
  442. package/src/utils/paths.ts +0 -139
  443. package/src/utils/search.ts +0 -131
  444. package/src/utils/security.ts +0 -52
  445. package/src/utils/tests/cache.test.ts +0 -51
  446. package/src/utils/tests/mcp-format.test.ts +0 -22
  447. package/src/utils/tests/security.test.ts +0 -119
  448. package/src/xulux/catalog-client.ts +0 -150
  449. package/src/xulux/fallback-catalog.ts +0 -63
  450. package/src/xulux/fetch-sandbox.ts +0 -56
  451. package/src/xulux/template-service.ts +0 -406
  452. package/src/xulux/types.ts +0 -64
@@ -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/pages/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)