@assistant-ui/mcp-docs-server 0.1.30 → 0.1.32

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 (341) hide show
  1. package/.docs/organized/code-examples/waterfall.md +8 -8
  2. package/.docs/organized/code-examples/with-a2a.md +10 -10
  3. package/.docs/organized/code-examples/with-ag-ui.md +12 -12
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +14 -14
  5. package/.docs/organized/code-examples/with-artifacts.md +14 -14
  6. package/.docs/organized/code-examples/with-assistant-transport.md +11 -11
  7. package/.docs/organized/code-examples/with-browser-extension.md +345 -0
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +129 -63
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +13 -13
  10. package/.docs/organized/code-examples/with-cloud.md +13 -13
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +65 -20
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +18 -17
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +18 -17
  14. package/.docs/organized/code-examples/with-expo.md +25 -25
  15. package/.docs/organized/code-examples/with-external-store.md +10 -10
  16. package/.docs/organized/code-examples/with-ffmpeg.md +14 -14
  17. package/.docs/organized/code-examples/with-generative-ui.md +211 -14
  18. package/.docs/organized/code-examples/with-google-adk.md +12 -12
  19. package/.docs/organized/code-examples/with-heat-graph.md +8 -8
  20. package/.docs/organized/code-examples/with-image-generation.md +454 -0
  21. package/.docs/organized/code-examples/with-interactables.md +14 -14
  22. package/.docs/organized/code-examples/with-langchain.md +12 -12
  23. package/.docs/organized/code-examples/with-langgraph.md +15 -12
  24. package/.docs/organized/code-examples/with-livekit.md +19 -18
  25. package/.docs/organized/code-examples/with-mcp.md +748 -0
  26. package/.docs/organized/code-examples/with-opencode.md +107 -62
  27. package/.docs/organized/code-examples/with-parent-id-grouping.md +12 -12
  28. package/.docs/organized/code-examples/with-react-hook-form.md +14 -14
  29. package/.docs/organized/code-examples/with-react-ink.md +4 -4
  30. package/.docs/organized/code-examples/with-react-router.md +16 -16
  31. package/.docs/organized/code-examples/with-resumable-stream.md +660 -0
  32. package/.docs/organized/code-examples/with-store.md +8 -8
  33. package/.docs/organized/code-examples/with-tanstack.md +14 -14
  34. package/.docs/organized/code-examples/with-tap-runtime.md +11 -10
  35. package/.docs/raw/docs/(docs)/cli.mdx +3 -1
  36. package/.docs/raw/docs/(docs)/copilots/assistant-frame.mdx +1 -0
  37. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +10 -3
  38. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +8 -3
  39. package/.docs/raw/docs/(docs)/copilots/make-assistant-visible.mdx +1 -0
  40. package/.docs/raw/docs/(docs)/copilots/model-context.mdx +1 -0
  41. package/.docs/raw/docs/(docs)/copilots/motivation.mdx +1 -0
  42. package/.docs/raw/docs/(docs)/copilots/use-assistant-instructions.mdx +1 -0
  43. package/.docs/raw/docs/(docs)/devtools.mdx +1 -0
  44. package/.docs/raw/docs/(docs)/index.mdx +3 -2
  45. package/.docs/raw/docs/(docs)/installation.mdx +2 -1
  46. package/.docs/raw/docs/(docs)/rtl.mdx +1 -0
  47. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +36 -0
  48. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +20 -0
  49. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +34 -0
  50. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +44 -0
  51. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +55 -0
  52. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +20 -0
  53. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +20 -0
  54. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +37 -8
  55. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +22 -0
  56. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +64 -0
  57. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +22 -0
  58. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +52 -0
  59. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +36 -0
  60. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +98 -0
  61. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +31 -0
  62. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +33 -0
  63. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +640 -0
  64. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +28 -0
  65. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +94 -0
  66. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +464 -0
  67. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +24 -0
  68. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +22 -0
  69. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +79 -0
  70. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +52 -0
  71. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +22 -0
  72. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +20 -0
  73. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +125 -125
  74. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +78 -221
  75. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +127 -242
  76. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +46 -20
  77. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +66 -87
  78. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +50 -58
  79. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +80 -48
  80. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +67 -0
  81. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +323 -461
  82. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +36 -43
  83. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +70 -0
  84. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +63 -245
  85. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +182 -554
  86. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +65 -0
  87. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +35 -22
  88. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +57 -140
  89. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +70 -161
  90. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +84 -108
  91. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +82 -86
  92. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +173 -314
  93. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +9 -21
  94. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +10 -21
  95. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +15 -70
  96. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +43 -0
  97. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +25 -28
  98. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +11 -63
  99. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +20 -0
  100. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +11 -48
  101. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +10 -42
  102. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +18 -30
  103. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +68 -0
  104. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +39 -0
  105. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +79 -0
  106. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +42 -0
  107. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +92 -0
  108. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +48 -0
  109. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +62 -0
  110. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +22 -0
  111. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +19 -0
  112. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +131 -0
  113. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +22 -0
  114. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +54 -0
  115. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +36 -0
  116. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +230 -2
  117. package/.docs/raw/docs/cloud/ai-sdk.mdx +222 -4
  118. package/.docs/raw/docs/cloud/index.mdx +2 -2
  119. package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
  120. package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +45 -40
  121. package/.docs/raw/docs/guides/branching.mdx +76 -0
  122. package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
  123. package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +54 -26
  124. package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +3 -1
  125. package/.docs/raw/docs/guides/editing.mdx +102 -0
  126. package/.docs/raw/docs/guides/generative-ui.mdx +142 -0
  127. package/.docs/raw/docs/guides/image-generation.mdx +74 -0
  128. package/.docs/raw/docs/guides/index.mdx +103 -0
  129. package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +51 -2
  130. package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +53 -10
  131. package/.docs/raw/docs/guides/mcp-apps.mdx +231 -0
  132. package/.docs/raw/docs/{(docs)/guides → guides}/mentions.mdx +63 -88
  133. package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +45 -6
  134. package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +66 -6
  135. package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +11 -18
  136. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +212 -0
  137. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +152 -0
  138. package/.docs/raw/docs/guides/resumable-streams.mdx +210 -0
  139. package/.docs/raw/docs/{(docs)/guides → guides}/slash-commands.mdx +104 -38
  140. package/.docs/raw/docs/guides/speech.mdx +156 -0
  141. package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +91 -69
  142. package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +110 -38
  143. package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +197 -40
  144. package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +41 -2
  145. package/.docs/raw/docs/ink/adapters.mdx +37 -1
  146. package/.docs/raw/docs/ink/custom-backend.mdx +59 -8
  147. package/.docs/raw/docs/ink/index.mdx +11 -14
  148. package/.docs/raw/docs/ink/migration.mdx +1 -3
  149. package/.docs/raw/docs/ink/primitives.mdx +386 -9
  150. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
  151. package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
  152. package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
  153. package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
  154. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
  155. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +282 -0
  156. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
  157. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
  158. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
  159. package/.docs/raw/docs/integrations/gateways/index.mdx +162 -0
  160. package/.docs/raw/docs/integrations/index.mdx +185 -0
  161. package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
  162. package/.docs/raw/docs/integrations/observability/langfuse.mdx +163 -0
  163. package/.docs/raw/docs/integrations/observability/langsmith.mdx +150 -0
  164. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
  165. package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
  166. package/.docs/raw/docs/integrations/tools/react-mcp.mdx +337 -0
  167. package/.docs/raw/docs/migrations/v0-14.mdx +297 -0
  168. package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
  169. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
  170. package/.docs/raw/docs/primitives/attachment.mdx +1 -0
  171. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
  172. package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
  173. package/.docs/raw/docs/primitives/composer.mdx +55 -1
  174. package/.docs/raw/docs/primitives/error.mdx +1 -0
  175. package/.docs/raw/docs/primitives/index.mdx +4 -3
  176. package/.docs/raw/docs/primitives/message.mdx +68 -5
  177. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
  178. package/.docs/raw/docs/primitives/suggestion.mdx +10 -0
  179. package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
  180. package/.docs/raw/docs/primitives/thread.mdx +16 -13
  181. package/.docs/raw/docs/react-native/hooks.mdx +2 -2
  182. package/.docs/raw/docs/react-native/index.mdx +5 -7
  183. package/.docs/raw/docs/react-native/migration.mdx +1 -3
  184. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
  185. package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
  186. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
  187. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
  188. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
  189. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +154 -0
  190. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
  191. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +73 -128
  192. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +70 -64
  193. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +337 -123
  194. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
  195. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
  196. package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
  197. package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
  198. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
  199. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +348 -0
  200. package/.docs/raw/docs/runtimes/custom/external-store.mdx +261 -1236
  201. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
  202. package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
  203. package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
  204. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
  205. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
  206. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
  207. package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
  208. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
  209. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
  210. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
  211. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
  212. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
  213. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
  214. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
  215. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
  216. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
  217. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
  218. package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
  219. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
  220. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +78 -203
  221. package/.docs/raw/docs/ui/accordion.mdx +1 -0
  222. package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
  223. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
  224. package/.docs/raw/docs/ui/attachment.mdx +1 -0
  225. package/.docs/raw/docs/ui/badge.mdx +1 -0
  226. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +12 -1
  227. package/.docs/raw/docs/ui/context-display.mdx +1 -0
  228. package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
  229. package/.docs/raw/docs/ui/directive-text.mdx +1 -0
  230. package/.docs/raw/docs/ui/file.mdx +1 -0
  231. package/.docs/raw/docs/ui/image.mdx +1 -0
  232. package/.docs/raw/docs/ui/markdown.mdx +2 -14
  233. package/.docs/raw/docs/ui/mcp-config.mdx +102 -0
  234. package/.docs/raw/docs/ui/mermaid.mdx +1 -0
  235. package/.docs/raw/docs/ui/message-timing.mdx +3 -2
  236. package/.docs/raw/docs/ui/model-selector.mdx +9 -8
  237. package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
  238. package/.docs/raw/docs/ui/quote.mdx +1 -0
  239. package/.docs/raw/docs/ui/reasoning.mdx +66 -33
  240. package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
  241. package/.docs/raw/docs/ui/select.mdx +1 -0
  242. package/.docs/raw/docs/ui/sources.mdx +18 -0
  243. package/.docs/raw/docs/ui/streamdown.mdx +35 -2
  244. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
  245. package/.docs/raw/docs/ui/tabs.mdx +1 -0
  246. package/.docs/raw/docs/ui/thread-list.mdx +19 -2
  247. package/.docs/raw/docs/ui/thread.mdx +58 -3
  248. package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
  249. package/.docs/raw/docs/ui/tool-group.mdx +39 -11
  250. package/.docs/raw/docs/ui/voice.mdx +1 -0
  251. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
  252. package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
  253. package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
  254. package/README.md +14 -72
  255. package/dist/constants.d.ts +12 -9
  256. package/dist/constants.d.ts.map +1 -1
  257. package/dist/constants.js +13 -9
  258. package/dist/constants.js.map +1 -1
  259. package/dist/index.d.ts +7 -3
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +25 -24
  262. package/dist/index.js.map +1 -1
  263. package/dist/prepare-docs/code-examples.d.ts +4 -1
  264. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  265. package/dist/prepare-docs/code-examples.js +109 -121
  266. package/dist/prepare-docs/code-examples.js.map +1 -1
  267. package/dist/prepare-docs/copy-raw.d.ts +4 -1
  268. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  269. package/dist/prepare-docs/copy-raw.js +45 -42
  270. package/dist/prepare-docs/copy-raw.js.map +1 -1
  271. package/dist/prepare-docs/prepare.d.ts +1 -2
  272. package/dist/prepare-docs/prepare.js +17 -17
  273. package/dist/prepare-docs/prepare.js.map +1 -1
  274. package/dist/stdio.d.ts +1 -3
  275. package/dist/stdio.js +6 -3
  276. package/dist/stdio.js.map +1 -1
  277. package/dist/tools/docs.d.ts +20 -15
  278. package/dist/tools/docs.d.ts.map +1 -1
  279. package/dist/tools/docs.js +140 -161
  280. package/dist/tools/docs.js.map +1 -1
  281. package/dist/tools/examples.d.ts +20 -15
  282. package/dist/tools/examples.d.ts.map +1 -1
  283. package/dist/tools/examples.js +74 -86
  284. package/dist/tools/examples.js.map +1 -1
  285. package/dist/tools/tests/test-setup.d.ts +5 -2
  286. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  287. package/dist/tools/tests/test-setup.js +21 -28
  288. package/dist/tools/tests/test-setup.js.map +1 -1
  289. package/dist/utils/logger.d.ts +8 -5
  290. package/dist/utils/logger.d.ts.map +1 -1
  291. package/dist/utils/logger.js +17 -17
  292. package/dist/utils/logger.js.map +1 -1
  293. package/dist/utils/mcp-format.d.ts +8 -5
  294. package/dist/utils/mcp-format.d.ts.map +1 -1
  295. package/dist/utils/mcp-format.js +9 -9
  296. package/dist/utils/mcp-format.js.map +1 -1
  297. package/dist/utils/mdx.d.ts +8 -6
  298. package/dist/utils/mdx.d.ts.map +1 -1
  299. package/dist/utils/mdx.js +22 -22
  300. package/dist/utils/mdx.js.map +1 -1
  301. package/dist/utils/paths.d.ts +9 -6
  302. package/dist/utils/paths.d.ts.map +1 -1
  303. package/dist/utils/paths.js +66 -76
  304. package/dist/utils/paths.js.map +1 -1
  305. package/dist/utils/security.d.ts +4 -1
  306. package/dist/utils/security.d.ts.map +1 -1
  307. package/dist/utils/security.js +19 -40
  308. package/dist/utils/security.js.map +1 -1
  309. package/package.json +6 -6
  310. package/src/tools/tests/path-traversal.test.ts +1 -1
  311. package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
  312. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
  313. package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
  314. package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
  315. package/.docs/raw/docs/(reference)/api-reference/context-providers/text-message-part-provider.mdx +0 -40
  316. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -260
  317. package/.docs/raw/docs/(reference)/api-reference/integrations/react-hook-form.mdx +0 -103
  318. package/.docs/raw/docs/(reference)/api-reference/integrations/vercel-ai-sdk.mdx +0 -254
  319. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +0 -159
  320. package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
  321. package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
  322. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -314
  323. package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
  324. package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
  325. package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
  326. package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
  327. package/.docs/raw/docs/runtimes/langchain/comparison.mdx +0 -60
  328. package/.docs/raw/docs/runtimes/langchain/index.mdx +0 -210
  329. package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -699
  330. package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
  331. package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
  332. package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
  333. package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
  334. package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
  335. package/dist/prepare-docs/prepare.d.ts.map +0 -1
  336. package/dist/stdio.d.ts.map +0 -1
  337. /package/.docs/raw/docs/{(reference)/migrations → migrations}/deprecation-policy.mdx +0 -0
  338. /package/.docs/raw/docs/{(reference) → migrations}/react-compatibility.mdx +0 -0
  339. /package/.docs/raw/docs/{(reference)/migrations → migrations}/react-langgraph-v0-7.mdx +0 -0
  340. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-11.mdx +0 -0
  341. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-12.mdx +0 -0
@@ -36,6 +36,9 @@ Create a new project in the [assistant-cloud dashboard](https://cloud.assistant-
36
36
 
37
37
  Add the following environment variables to your project:
38
38
 
39
+ <PlatformTabs>
40
+ <Tab value="React">
41
+
39
42
  ```bash title=".env.local"
40
43
  # Frontend API URL from your cloud project settings
41
44
  NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
@@ -44,6 +47,31 @@ NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
44
47
  ASSISTANT_API_KEY=your-api-key-here
45
48
  ```
46
49
 
50
+ </Tab>
51
+ <Tab value="React Native">
52
+
53
+ ```bash title=".env"
54
+ # Client API URL from your cloud project settings
55
+ EXPO_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
56
+
57
+ # API key for server-side operations; do not ship this in your app bundle
58
+ ASSISTANT_API_KEY=your-api-key-here
59
+ ```
60
+
61
+ </Tab>
62
+ <Tab value="React Ink">
63
+
64
+ ```bash title=".env"
65
+ # Client API URL from your cloud project settings
66
+ ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
67
+
68
+ # API key for server-side operations; do not ship this in your CLI bundle
69
+ ASSISTANT_API_KEY=your-api-key-here
70
+ ```
71
+
72
+ </Tab>
73
+ </PlatformTabs>
74
+
47
75
  </Step>
48
76
 
49
77
  <Step>
@@ -52,8 +80,24 @@ ASSISTANT_API_KEY=your-api-key-here
52
80
 
53
81
  Install the required packages:
54
82
 
83
+ <PlatformTabs>
84
+ <Tab value="React">
85
+
55
86
  <InstallCommand npm={["@assistant-ui/react", "@assistant-ui/react-langgraph"]} />
56
87
 
88
+ </Tab>
89
+ <Tab value="React Native">
90
+
91
+ <InstallCommand expo={["@assistant-ui/react-native", "@assistant-ui/react-langgraph", "assistant-cloud"]} />
92
+
93
+ </Tab>
94
+ <Tab value="React Ink">
95
+
96
+ <InstallCommand npm={["@assistant-ui/react-ink", "@assistant-ui/react-langgraph", "assistant-cloud", "ink", "react"]} />
97
+
98
+ </Tab>
99
+ </PlatformTabs>
100
+
57
101
  </Step>
58
102
 
59
103
  <Step>
@@ -62,6 +106,9 @@ Install the required packages:
62
106
 
63
107
  Create a runtime provider that integrates LangGraph with assistant-cloud. Choose between anonymous mode for demos/prototypes or authenticated mode for production:
64
108
 
109
+ <PlatformTabs>
110
+ <Tab value="React">
111
+
65
112
  <Tabs items={["Anonymous", "Authenticated (Clerk)"]}>
66
113
 
67
114
  <Tab value="Anonymous">
@@ -204,6 +251,135 @@ export function MyRuntimeProvider({
204
251
 
205
252
  </Tabs>
206
253
 
254
+ </Tab>
255
+ <Tab value="React Native">
256
+
257
+ ```tsx title="components/runtime-provider.tsx"
258
+ import { useMemo, type ReactNode } from "react";
259
+ import { AssistantRuntimeProvider } from "@assistant-ui/react-native";
260
+ import { AssistantCloud } from "assistant-cloud";
261
+ import {
262
+ type LangChainMessage,
263
+ useLangGraphRuntime,
264
+ } from "@assistant-ui/react-langgraph";
265
+ import { createThread, deleteThread, getThreadState, sendMessage } from "@/lib/chatApi";
266
+
267
+ async function getAssistantToken() {
268
+ // Return a user token from your auth provider.
269
+ return "...";
270
+ }
271
+
272
+ export function MyRuntimeProvider({ children }: { children: ReactNode }) {
273
+ const cloud = useMemo(
274
+ () =>
275
+ new AssistantCloud({
276
+ baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
277
+ authToken: getAssistantToken,
278
+ }),
279
+ [],
280
+ );
281
+
282
+ const runtime = useLangGraphRuntime({
283
+ cloud,
284
+ stream: async function* (messages, { initialize }) {
285
+ const { externalId } = await initialize();
286
+ if (!externalId) throw new Error("Thread not found");
287
+
288
+ return sendMessage({
289
+ threadId: externalId,
290
+ messages,
291
+ });
292
+ },
293
+ create: async () => {
294
+ const { thread_id } = await createThread();
295
+ return { externalId: thread_id };
296
+ },
297
+ load: async (externalId) => {
298
+ const state = await getThreadState(externalId);
299
+ return {
300
+ messages:
301
+ (state.values as { messages?: LangChainMessage[] }).messages ?? [],
302
+ };
303
+ },
304
+ delete: async (externalId) => {
305
+ await deleteThread(externalId);
306
+ },
307
+ });
308
+
309
+ return (
310
+ <AssistantRuntimeProvider runtime={runtime}>
311
+ {children}
312
+ </AssistantRuntimeProvider>
313
+ );
314
+ }
315
+ ```
316
+
317
+ </Tab>
318
+ <Tab value="React Ink">
319
+
320
+ ```tsx title="runtime-provider.tsx"
321
+ import { useMemo, type ReactNode } from "react";
322
+ import { AssistantRuntimeProvider } from "@assistant-ui/react-ink";
323
+ import { AssistantCloud } from "assistant-cloud";
324
+ import {
325
+ type LangChainMessage,
326
+ useLangGraphRuntime,
327
+ } from "@assistant-ui/react-langgraph";
328
+ import { createThread, deleteThread, getThreadState, sendMessage } from "./chat-api.js";
329
+
330
+ async function getAssistantToken() {
331
+ // Return a user token from your auth provider.
332
+ return "...";
333
+ }
334
+
335
+ export function MyRuntimeProvider({ children }: { children: ReactNode }) {
336
+ const cloud = useMemo(
337
+ () =>
338
+ new AssistantCloud({
339
+ baseUrl: process.env.ASSISTANT_BASE_URL!,
340
+ authToken: getAssistantToken,
341
+ }),
342
+ [],
343
+ );
344
+
345
+ const runtime = useLangGraphRuntime({
346
+ cloud,
347
+ stream: async function* (messages, { initialize }) {
348
+ const { externalId } = await initialize();
349
+ if (!externalId) throw new Error("Thread not found");
350
+
351
+ return sendMessage({
352
+ threadId: externalId,
353
+ messages,
354
+ });
355
+ },
356
+ create: async () => {
357
+ const { thread_id } = await createThread();
358
+ return { externalId: thread_id };
359
+ },
360
+ load: async (externalId) => {
361
+ const state = await getThreadState(externalId);
362
+ return {
363
+ messages:
364
+ (state.values as { messages?: LangChainMessage[] }).messages ?? [],
365
+ };
366
+ },
367
+ delete: async (externalId) => {
368
+ await deleteThread(externalId);
369
+ },
370
+ });
371
+
372
+ return (
373
+ <AssistantRuntimeProvider runtime={runtime}>
374
+ {children}
375
+ </AssistantRuntimeProvider>
376
+ );
377
+ }
378
+ ```
379
+
380
+ </Tab>
381
+ </PlatformTabs>
382
+
207
383
  <Callout type="info">
208
384
  The `useLangGraphRuntime` hook accepts `cloud`, `create`, `load`, and `delete` parameters for simplified thread management. The runtime handles the thread lifecycle internally.
209
385
 
@@ -220,6 +396,9 @@ export function MyRuntimeProvider({
220
396
 
221
397
  Install the thread list component:
222
398
 
399
+ <PlatformTabs>
400
+ <Tab value="React">
401
+
223
402
  <Tabs items={["assistant-ui", "shadcn (namespace)", "shadcn"]}>
224
403
  <Tab>
225
404
 
@@ -260,17 +439,110 @@ export default function ChatPage() {
260
439
  }
261
440
  ```
262
441
 
442
+ </Tab>
443
+ <Tab value="React Native">
444
+
445
+ Follow the [React Native setup](/docs/react-native) for `Thread`, then compose it with the native thread-list primitives:
446
+
447
+ ```tsx title="app/chat.tsx"
448
+ import { Text, View } from "react-native";
449
+ import {
450
+ ThreadListItemPrimitive,
451
+ ThreadListPrimitive,
452
+ } from "@assistant-ui/react-native";
453
+ import { Thread } from "@/components/assistant-ui/thread";
454
+
455
+ function ThreadList() {
456
+ return (
457
+ <ThreadListPrimitive.Root>
458
+ <ThreadListPrimitive.New>
459
+ <Text>New chat</Text>
460
+ </ThreadListPrimitive.New>
461
+ <ThreadListPrimitive.Items
462
+ renderItem={({ threadId }) => (
463
+ <ThreadListItemPrimitive.Root key={threadId}>
464
+ <ThreadListItemPrimitive.Trigger>
465
+ <ThreadListItemPrimitive.Title fallback="New conversation" />
466
+ </ThreadListItemPrimitive.Trigger>
467
+ </ThreadListItemPrimitive.Root>
468
+ )}
469
+ />
470
+ </ThreadListPrimitive.Root>
471
+ );
472
+ }
473
+
474
+ export default function ChatPage() {
475
+ return (
476
+ <MyRuntimeProvider>
477
+ <View style={{ flex: 1 }}>
478
+ <ThreadList />
479
+ <Thread />
480
+ </View>
481
+ </MyRuntimeProvider>
482
+ );
483
+ }
484
+ ```
485
+
486
+ </Tab>
487
+ <Tab value="React Ink">
488
+
489
+ Follow the [Ink setup](/docs/ink) for `Thread`, then compose it with the terminal thread-list primitives:
490
+
491
+ ```tsx title="chat.tsx"
492
+ import { Box, Text } from "ink";
493
+ import {
494
+ ThreadListItemPrimitive,
495
+ ThreadListPrimitive,
496
+ } from "@assistant-ui/react-ink";
497
+ import { Thread } from "./components/thread.js";
498
+
499
+ function ThreadList() {
500
+ return (
501
+ <ThreadListPrimitive.Root>
502
+ <ThreadListPrimitive.New>
503
+ <Text color="green">[New chat]</Text>
504
+ </ThreadListPrimitive.New>
505
+ <ThreadListPrimitive.Items
506
+ renderItem={({ threadId }) => (
507
+ <ThreadListItemPrimitive.Root key={threadId}>
508
+ <ThreadListItemPrimitive.Trigger>
509
+ <ThreadListItemPrimitive.Title fallback="New conversation" />
510
+ </ThreadListItemPrimitive.Trigger>
511
+ </ThreadListItemPrimitive.Root>
512
+ )}
513
+ />
514
+ </ThreadListPrimitive.Root>
515
+ );
516
+ }
517
+
518
+ export function ChatPage() {
519
+ return (
520
+ <MyRuntimeProvider>
521
+ <Box flexDirection="column">
522
+ <ThreadList />
523
+ <Thread />
524
+ </Box>
525
+ </MyRuntimeProvider>
526
+ );
527
+ }
528
+ ```
529
+
530
+ </Tab>
531
+ </PlatformTabs>
532
+
263
533
  </Step>
264
534
 
265
535
  </Steps>
266
536
 
267
537
  ## Authentication
268
538
 
269
- The examples above show two authentication modes:
539
+ The React runtime-provider tab shows two authentication modes:
270
540
 
271
- - **Anonymous**: Suitable for demos and prototypes. Creates a browser session-based user ID.
541
+ - **Anonymous**: Suitable for React demos and prototypes. Creates a browser session-based user ID.
272
542
  - **Authenticated**: For production use with user accounts. The authenticated example uses [Clerk](https://clerk.com/), but you can integrate any auth provider.
273
543
 
544
+ The React Native and React Ink tabs use explicit `authToken` callbacks, which is the recommended shape outside browser-session-based demos.
545
+
274
546
  For other authentication providers or custom implementations, see the [Cloud Authorization](/docs/cloud/authorization) guide.
275
547
 
276
548
  ## Next Steps
@@ -1,6 +1,7 @@
1
1
  ---
2
- title: Attachments
3
- description: Let users attach files, images, and documents to messages.
2
+ title: File Attachments
3
+ description: Let users attach images, PDFs, and other files to AI chat messages in React. Drag-drop, paste, and vision-model support, built into assistant-ui.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { AttachmentSample } from "@/components/docs/samples/attachment";
@@ -57,37 +58,7 @@ const runtime = useChatRuntime();
57
58
 
58
59
  ### Add UI Components
59
60
 
60
- Integrate attachment components into your chat interface:
61
-
62
- ```tsx title="/components/assistant-ui/thread.tsx"
63
- // In your Composer component
64
- import {
65
- ComposerAttachments,
66
- ComposerAddAttachment,
67
- } from "@/components/assistant-ui/attachment";
68
-
69
- const Composer = () => {
70
- return (
71
- <ComposerPrimitive.Root>
72
- <ComposerAttachments />
73
- <ComposerAddAttachment />
74
- <ComposerPrimitive.Input placeholder="Type a message..." />
75
- </ComposerPrimitive.Root>
76
- );
77
- };
78
-
79
- // In your UserMessage component
80
- import { UserMessageAttachments } from "@/components/assistant-ui/attachment";
81
-
82
- const UserMessage = () => {
83
- return (
84
- <MessagePrimitive.Root>
85
- <UserMessageAttachments />
86
- <MessagePrimitive.Parts />
87
- </MessagePrimitive.Root>
88
- );
89
- };
90
- ```
61
+ Integrate the attachment components into your chat interface. See [Attachment UI components](/docs/ui/attachment) for the full install and usage guide.
91
62
 
92
63
  </Step>
93
64
  </Steps>
@@ -143,11 +114,11 @@ const compositeAdapter = new CompositeAttachmentAdapter([
143
114
 
144
115
  ## Creating Custom Attachment Adapters
145
116
 
146
- Build your own adapters for specialized file handling. Below are complete examples for common use cases.
117
+ Build your own adapters for specialized file handling. Below are complete examples for common use cases. For `PendingAttachment` and `CompleteAttachment` type definitions, see [Attachment types](/docs/ui/attachment#attachment-types).
147
118
 
148
119
  ### Vision-Capable Image Adapter
149
120
 
150
- Send images to vision-capable LLMs like GPT-4V, Claude 3, or Gemini Pro Vision:
121
+ Send images to vision-capable LLMs like GPT-5.4, Claude Sonnet 4.6, or Gemini Pro Vision:
151
122
 
152
123
  ```tsx
153
124
  import {
@@ -305,7 +276,7 @@ const MyModelAdapter: ChatModelAdapter = {
305
276
  msg.role === "user" &&
306
277
  msg.content.some((part) => part.type === "image")
307
278
  ) {
308
- // Format for GPT-4V or similar vision models
279
+ // Format for GPT-5.4 or similar vision models
309
280
  return {
310
281
  role: "user",
311
282
  content: msg.content.map((part) => {
@@ -364,7 +335,7 @@ Provide real-time upload progress using async generators:
364
335
 
365
336
  ```tsx
366
337
  class UploadAttachmentAdapter implements AttachmentAdapter {
367
- accept = "*/*";
338
+ accept = "*";
368
339
 
369
340
  async *add({ file }: { file: File }) {
370
341
  const id = generateId();
@@ -391,8 +362,8 @@ class UploadAttachmentAdapter implements AttachmentAdapter {
391
362
  } as PendingAttachment;
392
363
  }
393
364
 
394
- // Return final pending state
395
- return {
365
+ // Yield final progress so the 100% state reaches the composer
366
+ yield {
396
367
  id,
397
368
  type: "file",
398
369
  name: file.name,
@@ -490,6 +461,40 @@ class ValidatedImageAdapter implements AttachmentAdapter {
490
461
  }
491
462
  ```
492
463
 
464
+ To surface failures in the UI, subscribe to `composer.attachmentAddError`. It fires whenever an add operation produces a failure, in either of two ways:
465
+
466
+ 1. `addAttachment()` rejects: no adapter is configured, the file type does not match `accept`, or the adapter's `add()` throws.
467
+ 2. `addAttachment()` resolves but the adapter returned (or, for async-iterator adapters, yielded) an attachment whose `status.reason === "error"`. The promise resolves successfully, yet the event still fires so the UI can react.
468
+
469
+ The event payload carries a `reason` discriminator and a human-readable `message`, so you can branch UI on the failure mode:
470
+
471
+ | `reason` | When It Fires |
472
+ | ---------------- | ------------------------------------------------------------------------------------------------------ |
473
+ | `no-adapter` | `addAttachment(File)` was called but no `AttachmentAdapter` is configured. |
474
+ | `not-accepted` | The file's content type (or filename extension) did not match `adapter.accept`. External `CreateAttachment` descriptors also trigger this when their `contentType` does not match `adapter.accept`. |
475
+ | `adapter-error` | The adapter's `add()` threw, or returned/yielded an attachment with `status.reason === "error"`. If the adapter produced any attachment before failing, the errored attachment is also visible in `composer.attachments`; if it threw before producing one, the event is the only signal. |
476
+
477
+ ```tsx
478
+ import { toast } from "sonner"; // or your toast library of choice
479
+ import { useAuiEvent } from "@assistant-ui/react";
480
+
481
+ function AttachmentErrorToast() {
482
+ useAuiEvent("composer.attachmentAddError", ({ reason, message, error }) => {
483
+ if (reason === "not-accepted") {
484
+ toast.error("This file type is not supported.");
485
+ } else if (reason === "no-adapter") {
486
+ toast.error("Attachments are not configured for this composer.");
487
+ } else {
488
+ if (error) console.error(error); // underlying Error, useful for logging
489
+ toast.error(message || "Attachment failed to upload.");
490
+ }
491
+ });
492
+ return null;
493
+ }
494
+ ```
495
+
496
+ `attachmentId` is included when the failure is associated with an attachment that was registered (typically `adapter-error` cases). It is `undefined` for `no-adapter` and `not-accepted` failures because those reject before any attachment is registered.
497
+
493
498
  ### External Source Attachments
494
499
 
495
500
  Add attachments from external sources (URLs, API data, CMS references) without needing a `File` object or an `AttachmentAdapter`:
@@ -513,7 +518,7 @@ await aui.composer().addAttachment({
513
518
  });
514
519
  ```
515
520
 
516
- External attachments are added as complete attachments directly — they skip the `AttachmentAdapter` entirely and can be removed without one.
521
+ External attachments are added as complete attachments directly. They bypass the `AttachmentAdapter`'s `add()` step (no upload), but `adapter.accept` is still enforced when an `AttachmentAdapter` is configured: a `CreateAttachment` whose `contentType` does not match `adapter.accept` is rejected and emits `composer.attachmentAddError`. If `contentType` is omitted, the descriptor's filename extension is matched against `adapter.accept` only when `accept` itself contains explicit extension entries (e.g. `.png,.pdf`); MIME-wildcard `accept` strings such as `image/*` always require a matching `contentType`. When no `AttachmentAdapter` is configured, external attachments are added without any content-type check, and they can be removed without an adapter.
517
522
 
518
523
  ### Multiple File Selection
519
524
 
@@ -0,0 +1,76 @@
1
+ ---
2
+ title: Message Branching
3
+ description: Edit messages or regenerate AI responses, then switch between alternative replies. Branching navigation built into assistant-ui's React chat UI.
4
+ platforms: ["react"]
5
+ ---
6
+
7
+ import { BranchingSample } from "@/components/docs/samples/branching";
8
+
9
+ Branching lets users navigate between alternative versions of a message. A new branch is created when:
10
+
11
+ - A user message is edited
12
+ - An assistant message is reloaded (reload creates a new branch on the same message)
13
+
14
+ Branches are automatically tracked by assistant-ui by observing changes to the `messages` array.
15
+
16
+ ## Shortest Working Pattern
17
+
18
+ <BranchingSample />
19
+
20
+ Place a branch picker inside your message component:
21
+
22
+ ```tsx
23
+ import { BranchPickerPrimitive } from "@assistant-ui/react";
24
+
25
+ const BranchPicker = () => (
26
+ <BranchPickerPrimitive.Root hideWhenSingleBranch>
27
+ <BranchPickerPrimitive.Previous />
28
+ <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />
29
+ <BranchPickerPrimitive.Next />
30
+ </BranchPickerPrimitive.Root>
31
+ );
32
+ ```
33
+
34
+ `BranchPickerPrimitive.Previous` and `.Next` automatically disable at branch boundaries and while a run is in flight (unless the runtime supports `switchBranchDuringRun`). For the full primitive API, see [BranchPickerPrimitive](/docs/primitives/branch-picker).
35
+
36
+ ## Triggering Reload
37
+
38
+ `ActionBarPrimitive.Reload` creates a new branch on an assistant message and re-runs from there:
39
+
40
+ ```tsx
41
+ import { ActionBarPrimitive, MessagePrimitive } from "@assistant-ui/react";
42
+
43
+ const AssistantMessage = () => (
44
+ <MessagePrimitive.Root>
45
+ <MessagePrimitive.Parts />
46
+ <ActionBarPrimitive.Root>
47
+ <ActionBarPrimitive.Reload />
48
+ </ActionBarPrimitive.Root>
49
+ </MessagePrimitive.Root>
50
+ );
51
+ ```
52
+
53
+ `Reload` is disabled while `thread.isRunning` or `thread.isDisabled` is true. See [ActionBarPrimitive](/docs/primitives/action-bar) for the full reference.
54
+
55
+ ## Programmatic Branch Navigation
56
+
57
+ For headless or keyboard-shortcut flows, navigate directly to a branch by id via `aui.message().switchToBranch`:
58
+
59
+ ```tsx
60
+ import { useAui } from "@assistant-ui/react";
61
+
62
+ const SwitchToBranch = ({ branchId }: { branchId: string }) => {
63
+ const aui = useAui();
64
+ return (
65
+ <button onClick={() => aui.message().switchToBranch({ branchId })}>
66
+ Go to branch
67
+ </button>
68
+ );
69
+ };
70
+ ```
71
+
72
+ This must be called inside a message context (e.g. nested within `MessagePrimitive.Root`).
73
+
74
+ ## Grouped Parts After Branching
75
+
76
+ Each branch is a distinct message version with its own content parts. `MessagePrimitive.GroupedParts` provides hierarchical adjacent grouping of those parts, useful when a message mixes tool calls and text across branches. See the [MessagePrimitive](/docs/primitives/message) reference for `GroupedParts` usage.