@assistant-ui/mcp-docs-server 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/README.md +16 -43
  2. package/dist/index.d.ts +2 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -91
  5. package/dist/index.js.map +1 -1
  6. package/dist/proxy.d.ts +9 -0
  7. package/dist/proxy.d.ts.map +1 -0
  8. package/dist/proxy.js +76 -0
  9. package/dist/proxy.js.map +1 -0
  10. package/package.json +9 -13
  11. package/src/index.ts +3 -115
  12. package/src/proxy.test.ts +250 -0
  13. package/src/proxy.ts +111 -0
  14. package/.docs/organized/code-examples/waterfall.md +0 -807
  15. package/.docs/organized/code-examples/with-a2a.md +0 -674
  16. package/.docs/organized/code-examples/with-ag-ui.md +0 -552
  17. package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -465
  18. package/.docs/organized/code-examples/with-artifacts.md +0 -814
  19. package/.docs/organized/code-examples/with-assistant-transport.md +0 -575
  20. package/.docs/organized/code-examples/with-browser-extension.md +0 -371
  21. package/.docs/organized/code-examples/with-chain-of-thought.md +0 -960
  22. package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
  23. package/.docs/organized/code-examples/with-cloud.md +0 -438
  24. package/.docs/organized/code-examples/with-custom-thread-list.md +0 -568
  25. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -526
  26. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -696
  27. package/.docs/organized/code-examples/with-eve.md +0 -404
  28. package/.docs/organized/code-examples/with-expo.md +0 -2063
  29. package/.docs/organized/code-examples/with-external-store.md +0 -420
  30. package/.docs/organized/code-examples/with-ffmpeg.md +0 -828
  31. package/.docs/organized/code-examples/with-generative-ui.md +0 -1812
  32. package/.docs/organized/code-examples/with-google-adk.md +0 -367
  33. package/.docs/organized/code-examples/with-heat-graph.md +0 -304
  34. package/.docs/organized/code-examples/with-image-generation.md +0 -462
  35. package/.docs/organized/code-examples/with-interactables.md +0 -732
  36. package/.docs/organized/code-examples/with-langchain.md +0 -445
  37. package/.docs/organized/code-examples/with-langgraph.md +0 -854
  38. package/.docs/organized/code-examples/with-livekit.md +0 -642
  39. package/.docs/organized/code-examples/with-mcp.md +0 -780
  40. package/.docs/organized/code-examples/with-nuxt.md +0 -2428
  41. package/.docs/organized/code-examples/with-opencode.md +0 -1974
  42. package/.docs/organized/code-examples/with-openui.md +0 -449
  43. package/.docs/organized/code-examples/with-pi.md +0 -2083
  44. package/.docs/organized/code-examples/with-react-hook-form.md +0 -724
  45. package/.docs/organized/code-examples/with-react-ink-web.md +0 -690
  46. package/.docs/organized/code-examples/with-react-ink.md +0 -472
  47. package/.docs/organized/code-examples/with-react-router.md +0 -935
  48. package/.docs/organized/code-examples/with-resumable-stream.md +0 -667
  49. package/.docs/organized/code-examples/with-store.md +0 -679
  50. package/.docs/organized/code-examples/with-svelte.md +0 -415
  51. package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
  52. package/.docs/organized/code-examples/with-tanstack.md +0 -811
  53. package/.docs/organized/code-examples/with-tap-runtime.md +0 -812
  54. package/.docs/organized/code-examples/with-virtualized-thread.md +0 -680
  55. package/.docs/organized/code-examples/with-vue.md +0 -408
  56. package/.docs/raw/docs/(docs)/architecture.mdx +0 -146
  57. package/.docs/raw/docs/(docs)/base-ui.mdx +0 -39
  58. package/.docs/raw/docs/(docs)/cli.mdx +0 -542
  59. package/.docs/raw/docs/(docs)/devtools.mdx +0 -79
  60. package/.docs/raw/docs/(docs)/index.mdx +0 -21
  61. package/.docs/raw/docs/(docs)/installation.mdx +0 -483
  62. package/.docs/raw/docs/(docs)/llm.mdx +0 -211
  63. package/.docs/raw/docs/(docs)/rtl.mdx +0 -78
  64. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
  65. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
  66. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
  67. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
  68. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
  69. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
  70. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -20
  71. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
  72. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
  73. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
  74. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
  75. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -52
  76. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
  77. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
  78. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
  79. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
  80. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
  81. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
  82. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
  83. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
  84. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
  85. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
  86. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
  87. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
  88. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
  89. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
  90. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
  91. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
  92. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
  93. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
  94. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -97
  95. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
  96. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +0 -200
  97. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
  98. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
  99. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
  100. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
  101. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
  102. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
  103. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
  104. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
  105. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
  106. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
  107. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
  108. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
  109. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -619
  110. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
  111. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
  112. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
  113. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
  114. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
  115. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
  116. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
  117. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
  118. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
  119. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
  120. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
  121. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
  122. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
  123. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
  124. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
  125. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
  126. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
  127. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
  128. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
  129. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
  130. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
  131. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
  132. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
  133. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
  134. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
  135. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
  136. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
  137. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
  138. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
  139. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
  140. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
  141. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
  142. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
  143. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -149
  144. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
  145. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
  146. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
  147. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
  148. package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -602
  149. package/.docs/raw/docs/cloud/authorization.mdx +0 -252
  150. package/.docs/raw/docs/cloud/index.mdx +0 -46
  151. package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
  152. package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -400
  153. package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
  154. package/.docs/raw/docs/copilots/model-context.mdx +0 -156
  155. package/.docs/raw/docs/copilots/motivation.mdx +0 -202
  156. package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
  157. package/.docs/raw/docs/guides/attachments.mdx +0 -619
  158. package/.docs/raw/docs/guides/branching.mdx +0 -76
  159. package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
  160. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
  161. package/.docs/raw/docs/guides/context-api.mdx +0 -619
  162. package/.docs/raw/docs/guides/dictation.mdx +0 -298
  163. package/.docs/raw/docs/guides/editing.mdx +0 -102
  164. package/.docs/raw/docs/guides/electron.mdx +0 -369
  165. package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
  166. package/.docs/raw/docs/guides/image-generation.mdx +0 -74
  167. package/.docs/raw/docs/guides/index.mdx +0 -117
  168. package/.docs/raw/docs/guides/input-history.mdx +0 -55
  169. package/.docs/raw/docs/guides/latex.mdx +0 -158
  170. package/.docs/raw/docs/guides/mentions.mdx +0 -575
  171. package/.docs/raw/docs/guides/message-timing.mdx +0 -209
  172. package/.docs/raw/docs/guides/quoting.mdx +0 -169
  173. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
  174. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
  175. package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
  176. package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
  177. package/.docs/raw/docs/guides/speech.mdx +0 -172
  178. package/.docs/raw/docs/guides/suggestions.mdx +0 -384
  179. package/.docs/raw/docs/guides/virtualization.mdx +0 -133
  180. package/.docs/raw/docs/guides/voice.mdx +0 -310
  181. package/.docs/raw/docs/ink/adapters.mdx +0 -99
  182. package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
  183. package/.docs/raw/docs/ink/hooks.mdx +0 -469
  184. package/.docs/raw/docs/ink/index.mdx +0 -236
  185. package/.docs/raw/docs/ink/migration.mdx +0 -138
  186. package/.docs/raw/docs/ink/primitives.mdx +0 -1259
  187. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
  188. package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
  189. package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
  190. package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
  191. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
  192. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +0 -282
  193. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
  194. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
  195. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
  196. package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
  197. package/.docs/raw/docs/integrations/index.mdx +0 -178
  198. package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
  199. package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
  200. package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
  201. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
  202. package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
  203. package/.docs/raw/docs/migrations/index.mdx +0 -50
  204. package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
  205. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
  206. package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
  207. package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
  208. package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
  209. package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
  210. package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
  211. package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
  212. package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
  213. package/.docs/raw/docs/primitives/attachment.mdx +0 -217
  214. package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
  215. package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
  216. package/.docs/raw/docs/primitives/composer.mdx +0 -659
  217. package/.docs/raw/docs/primitives/error.mdx +0 -142
  218. package/.docs/raw/docs/primitives/index.mdx +0 -99
  219. package/.docs/raw/docs/primitives/message.mdx +0 -618
  220. package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
  221. package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
  222. package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
  223. package/.docs/raw/docs/primitives/thread.mdx +0 -509
  224. package/.docs/raw/docs/react-native/adapters.mdx +0 -94
  225. package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
  226. package/.docs/raw/docs/react-native/hooks.mdx +0 -339
  227. package/.docs/raw/docs/react-native/index.mdx +0 -289
  228. package/.docs/raw/docs/react-native/migration.mdx +0 -142
  229. package/.docs/raw/docs/react-native/primitives.mdx +0 -839
  230. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
  231. package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
  232. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
  233. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
  234. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
  235. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
  236. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -255
  237. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
  238. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
  239. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
  240. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
  241. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -716
  242. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
  243. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
  244. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
  245. package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
  246. package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
  247. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
  248. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
  249. package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
  250. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
  251. package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
  252. package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
  253. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
  254. package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
  255. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
  256. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
  257. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
  258. package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
  259. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
  260. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
  261. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
  262. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
  263. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
  264. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
  265. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
  266. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
  267. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
  268. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
  269. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
  270. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
  271. package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
  272. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
  273. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
  274. package/.docs/raw/docs/tools/a2ui.mdx +0 -107
  275. package/.docs/raw/docs/tools/backend.mdx +0 -147
  276. package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
  277. package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
  278. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
  279. package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
  280. package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
  281. package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
  282. package/.docs/raw/docs/tools/index.mdx +0 -72
  283. package/.docs/raw/docs/tools/interactables.mdx +0 -1084
  284. package/.docs/raw/docs/tools/mcp-apps.mdx +0 -346
  285. package/.docs/raw/docs/tools/mcp.mdx +0 -466
  286. package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
  287. package/.docs/raw/docs/tools/openui.mdx +0 -175
  288. package/.docs/raw/docs/tools/tool-ui.mdx +0 -1008
  289. package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
  290. package/.docs/raw/docs/ui/accordion.mdx +0 -266
  291. package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
  292. package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
  293. package/.docs/raw/docs/ui/attachment.mdx +0 -259
  294. package/.docs/raw/docs/ui/badge.mdx +0 -150
  295. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -212
  296. package/.docs/raw/docs/ui/context-display.mdx +0 -148
  297. package/.docs/raw/docs/ui/diff-viewer.mdx +0 -280
  298. package/.docs/raw/docs/ui/directive-text.mdx +0 -114
  299. package/.docs/raw/docs/ui/dot-matrix.mdx +0 -133
  300. package/.docs/raw/docs/ui/file.mdx +0 -159
  301. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
  302. package/.docs/raw/docs/ui/image.mdx +0 -102
  303. package/.docs/raw/docs/ui/markdown.mdx +0 -64
  304. package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
  305. package/.docs/raw/docs/ui/mermaid.mdx +0 -92
  306. package/.docs/raw/docs/ui/message-timing.mdx +0 -93
  307. package/.docs/raw/docs/ui/model-selector.mdx +0 -455
  308. package/.docs/raw/docs/ui/number-roll.mdx +0 -154
  309. package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
  310. package/.docs/raw/docs/ui/quote.mdx +0 -211
  311. package/.docs/raw/docs/ui/reasoning.mdx +0 -186
  312. package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
  313. package/.docs/raw/docs/ui/select.mdx +0 -254
  314. package/.docs/raw/docs/ui/sources.mdx +0 -177
  315. package/.docs/raw/docs/ui/streamdown.mdx +0 -392
  316. package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
  317. package/.docs/raw/docs/ui/tabs.mdx +0 -271
  318. package/.docs/raw/docs/ui/thread-list.mdx +0 -372
  319. package/.docs/raw/docs/ui/thread.mdx +0 -512
  320. package/.docs/raw/docs/ui/tool-fallback.mdx +0 -127
  321. package/.docs/raw/docs/ui/tool-group.mdx +0 -240
  322. package/.docs/raw/docs/ui/voice.mdx +0 -173
  323. package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
  324. package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
  325. package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
  326. package/dist/constants.d.ts +0 -14
  327. package/dist/constants.d.ts.map +0 -1
  328. package/dist/constants.js +0 -19
  329. package/dist/constants.js.map +0 -1
  330. package/dist/prepare-docs/code-examples.d.ts +0 -5
  331. package/dist/prepare-docs/code-examples.d.ts.map +0 -1
  332. package/dist/prepare-docs/code-examples.js +0 -117
  333. package/dist/prepare-docs/code-examples.js.map +0 -1
  334. package/dist/prepare-docs/copy-raw.d.ts +0 -5
  335. package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
  336. package/dist/prepare-docs/copy-raw.js +0 -49
  337. package/dist/prepare-docs/copy-raw.js.map +0 -1
  338. package/dist/prepare-docs/prepare.d.ts +0 -1
  339. package/dist/prepare-docs/prepare.js +0 -22
  340. package/dist/prepare-docs/prepare.js.map +0 -1
  341. package/dist/prompts/xulux-playground.d.ts +0 -12
  342. package/dist/prompts/xulux-playground.d.ts.map +0 -1
  343. package/dist/prompts/xulux-playground.js +0 -33
  344. package/dist/prompts/xulux-playground.js.map +0 -1
  345. package/dist/tools/docs.d.ts +0 -22
  346. package/dist/tools/docs.d.ts.map +0 -1
  347. package/dist/tools/docs.js +0 -177
  348. package/dist/tools/docs.js.map +0 -1
  349. package/dist/tools/examples.d.ts +0 -24
  350. package/dist/tools/examples.d.ts.map +0 -1
  351. package/dist/tools/examples.js +0 -87
  352. package/dist/tools/examples.js.map +0 -1
  353. package/dist/tools/resources.d.ts +0 -6
  354. package/dist/tools/resources.d.ts.map +0 -1
  355. package/dist/tools/resources.js +0 -75
  356. package/dist/tools/resources.js.map +0 -1
  357. package/dist/tools/search.d.ts +0 -24
  358. package/dist/tools/search.d.ts.map +0 -1
  359. package/dist/tools/search.js +0 -39
  360. package/dist/tools/search.js.map +0 -1
  361. package/dist/tools/tests/mcp-test-client.d.ts +0 -15
  362. package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
  363. package/dist/tools/tests/mcp-test-client.js +0 -68
  364. package/dist/tools/tests/mcp-test-client.js.map +0 -1
  365. package/dist/tools/tests/test-setup.d.ts +0 -7
  366. package/dist/tools/tests/test-setup.d.ts.map +0 -1
  367. package/dist/tools/tests/test-setup.js +0 -36
  368. package/dist/tools/tests/test-setup.js.map +0 -1
  369. package/dist/tools/xulux-templates.d.ts +0 -58
  370. package/dist/tools/xulux-templates.d.ts.map +0 -1
  371. package/dist/tools/xulux-templates.js +0 -84
  372. package/dist/tools/xulux-templates.js.map +0 -1
  373. package/dist/utils/cache.d.ts +0 -5
  374. package/dist/utils/cache.d.ts.map +0 -1
  375. package/dist/utils/cache.js +0 -18
  376. package/dist/utils/cache.js.map +0 -1
  377. package/dist/utils/logger.d.ts +0 -10
  378. package/dist/utils/logger.d.ts.map +0 -1
  379. package/dist/utils/logger.js +0 -20
  380. package/dist/utils/logger.js.map +0 -1
  381. package/dist/utils/mcp-format.d.ts +0 -11
  382. package/dist/utils/mcp-format.d.ts.map +0 -1
  383. package/dist/utils/mcp-format.js +0 -14
  384. package/dist/utils/mcp-format.js.map +0 -1
  385. package/dist/utils/mdx.d.ts +0 -12
  386. package/dist/utils/mdx.d.ts.map +0 -1
  387. package/dist/utils/mdx.js +0 -45
  388. package/dist/utils/mdx.js.map +0 -1
  389. package/dist/utils/paths.d.ts +0 -12
  390. package/dist/utils/paths.d.ts.map +0 -1
  391. package/dist/utils/paths.js +0 -93
  392. package/dist/utils/paths.js.map +0 -1
  393. package/dist/utils/search.d.ts +0 -10
  394. package/dist/utils/search.d.ts.map +0 -1
  395. package/dist/utils/search.js +0 -97
  396. package/dist/utils/search.js.map +0 -1
  397. package/dist/utils/security.d.ts +0 -5
  398. package/dist/utils/security.d.ts.map +0 -1
  399. package/dist/utils/security.js +0 -22
  400. package/dist/utils/security.js.map +0 -1
  401. package/dist/xulux/catalog-client.d.ts +0 -14
  402. package/dist/xulux/catalog-client.d.ts.map +0 -1
  403. package/dist/xulux/catalog-client.js +0 -67
  404. package/dist/xulux/catalog-client.js.map +0 -1
  405. package/dist/xulux/fallback-catalog.d.ts +0 -7
  406. package/dist/xulux/fallback-catalog.d.ts.map +0 -1
  407. package/dist/xulux/fallback-catalog.js +0 -47
  408. package/dist/xulux/fallback-catalog.js.map +0 -1
  409. package/dist/xulux/fetch-sandbox.d.ts +0 -5
  410. package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
  411. package/dist/xulux/fetch-sandbox.js +0 -40
  412. package/dist/xulux/fetch-sandbox.js.map +0 -1
  413. package/dist/xulux/template-service.d.ts +0 -84
  414. package/dist/xulux/template-service.d.ts.map +0 -1
  415. package/dist/xulux/template-service.js +0 -223
  416. package/dist/xulux/template-service.js.map +0 -1
  417. package/dist/xulux/types.d.ts +0 -55
  418. package/dist/xulux/types.d.ts.map +0 -1
  419. package/dist/xulux/types.js +0 -6
  420. package/dist/xulux/types.js.map +0 -1
  421. package/src/constants.ts +0 -24
  422. package/src/prepare-docs/code-examples.ts +0 -158
  423. package/src/prepare-docs/copy-raw.ts +0 -50
  424. package/src/prepare-docs/prepare.ts +0 -24
  425. package/src/prompts/xulux-playground.ts +0 -36
  426. package/src/tools/docs.ts +0 -255
  427. package/src/tools/examples.ts +0 -114
  428. package/src/tools/resources.ts +0 -111
  429. package/src/tools/search.ts +0 -46
  430. package/src/tools/tests/completions.test.ts +0 -60
  431. package/src/tools/tests/directory-size-cap.test.ts +0 -50
  432. package/src/tools/tests/docs.test.ts +0 -144
  433. package/src/tools/tests/examples.test.ts +0 -94
  434. package/src/tools/tests/integration.test.ts +0 -45
  435. package/src/tools/tests/json-parsing.test.ts +0 -23
  436. package/src/tools/tests/listings-cache.test.ts +0 -19
  437. package/src/tools/tests/mcp-protocol.test.ts +0 -216
  438. package/src/tools/tests/mcp-test-client.ts +0 -111
  439. package/src/tools/tests/path-traversal.test.ts +0 -81
  440. package/src/tools/tests/resources.test.ts +0 -133
  441. package/src/tools/tests/search.test.ts +0 -37
  442. package/src/tools/tests/test-setup.ts +0 -50
  443. package/src/tools/tests/xulux-templates.test.ts +0 -262
  444. package/src/tools/xulux-templates.ts +0 -141
  445. package/src/utils/cache.ts +0 -20
  446. package/src/utils/logger.ts +0 -20
  447. package/src/utils/mcp-format.ts +0 -14
  448. package/src/utils/mdx.ts +0 -59
  449. package/src/utils/paths.ts +0 -139
  450. package/src/utils/search.ts +0 -131
  451. package/src/utils/security.ts +0 -52
  452. package/src/utils/tests/cache.test.ts +0 -51
  453. package/src/utils/tests/mcp-format.test.ts +0 -22
  454. package/src/utils/tests/security.test.ts +0 -119
  455. package/src/xulux/catalog-client.ts +0 -105
  456. package/src/xulux/fallback-catalog.ts +0 -63
  457. package/src/xulux/fetch-sandbox.ts +0 -56
  458. package/src/xulux/template-service.ts +0 -406
  459. package/src/xulux/types.ts +0 -60
@@ -1,763 +0,0 @@
1
- ---
2
- title: Assistant Transport
3
- description: Stream agent state to the frontend and handle user commands for custom agents.
4
- platforms: ["react"]
5
- ---
6
-
7
- `AssistantTransport` is a state-streaming protocol layered on `ExternalStoreRuntime` (see [architecture](/docs/runtimes/concepts/architecture)). Instead of streaming message parts, your backend streams snapshots of its full agent state and the runtime converts them into UI messages.
8
-
9
- Three things make this useful:
10
-
11
- - **State streaming** — efficient updates to your agent state (any JSON object).
12
- - **UI integration** — your agent's native state becomes assistant-ui messages.
13
- - **Command handling** — user actions (messages, tool results, custom commands) flow back to the agent.
14
-
15
- ## When to use it
16
-
17
- Pick `AssistantTransport` when:
18
-
19
- - Your backend does not have a streaming protocol yet and you want one.
20
- - Your agent has internal state worth surfacing in the UI directly.
21
- - You are building a custom agent framework or one without a streaming protocol (e.g. open-source LangGraph).
22
- - You need bidirectional commands beyond simple message turns.
23
-
24
- If you only need message streaming, [DataStream](/docs/runtimes/custom/data-stream) is simpler.
25
-
26
- ## Mental model
27
-
28
- <Flow.Root
29
- llm={`graph LR
30
- Frontend -->|Commands| Agent[Agent server]
31
- Agent -->|State snapshots| Frontend`}
32
- >
33
- <Flow.Row>
34
- <Flow.Node>Frontend</Flow.Node>
35
- <Flow.Arrow label="Commands" reverseLabel="State snapshots" length={150} />
36
- <Flow.Node>Agent server</Flow.Node>
37
- </Flow.Row>
38
- </Flow.Root>
39
-
40
- The frontend receives state snapshots and converts them to React components. The UI is a stateless view on top of the agent state.
41
-
42
- The agent server receives commands from the frontend. When a user interacts with the UI (sends a message, clicks a button), the frontend queues a command and sends it. `AssistantTransport` defines `add-message` and `add-tool-result`; you can define more.
43
-
44
- ### Command lifecycle
45
-
46
- <Flow.Root
47
- llm={`graph LR
48
- queued -->|sent to backend| in_transit
49
- in_transit -->|backend processes| applied`}
50
- >
51
- <Flow.Row>
52
- <Flow.Node>queued</Flow.Node>
53
- <Flow.Arrow label="sent to backend" length={120} />
54
- <Flow.Node>in_transit</Flow.Node>
55
- <Flow.Arrow label="backend processes" length={132} />
56
- <Flow.Node>applied</Flow.Node>
57
- </Flow.Row>
58
- </Flow.Root>
59
-
60
- The runtime alternates between **idle** (no active backend request) and **sending** (request in flight). When a new command is created while idle, it is sent immediately; otherwise it is queued until the current request completes.
61
-
62
- <Flow.Root
63
- llm={`graph LR
64
- idle -->|new command| sending
65
- sending -->|request completes| check{check queue}
66
- check -->|queue has commands| sending
67
- check -->|queue empty| idle`}
68
- >
69
- <Flow.Canvas
70
- edges={[
71
- {
72
- from: "check",
73
- to: "sending",
74
- route: "loop-bottom",
75
- label: "queue has commands",
76
- laneOffset: 28,
77
- },
78
- {
79
- from: "check",
80
- to: "idle",
81
- route: "loop-bottom",
82
- label: "queue empty",
83
- laneOffset: 60,
84
- },
85
- ]}
86
- >
87
- <Flow.Row>
88
- <Flow.Node flowId="idle">idle</Flow.Node>
89
- <Flow.Arrow label="new command" length={108} />
90
- <Flow.Node flowId="sending">sending</Flow.Node>
91
- <Flow.Arrow label="request completes" length={132} />
92
- <Flow.Node flowId="check" variant="decision">check queue</Flow.Node>
93
- </Flow.Row>
94
- <div className="h-20" aria-hidden />
95
- </Flow.Canvas>
96
- </Flow.Root>
97
-
98
- To implement this you build two pieces:
99
-
100
- 1. **Backend endpoint** that accepts commands and returns a stream of state snapshots.
101
- 2. **Frontend state converter** that maps state snapshots to assistant-ui's data format.
102
-
103
- ## Building a backend endpoint
104
-
105
- The endpoint receives POST requests with this payload:
106
-
107
- ```ts
108
- {
109
- state: T, // previous state the frontend has
110
- commands: AssistantTransportCommand[],
111
- system?: string,
112
- tools?: Record<string, ToolJSONSchema>, // tool definitions keyed by name
113
- threadId: string | null, // null for new threads
114
- parentId?: string | null, // present when editing or branching
115
- callSettings?: { maxTokens, temperature, topP, presencePenalty, frequencyPenalty, seed },
116
- config?: { apiKey, baseUrl, modelName },
117
- }
118
- ```
119
-
120
- <Callout type="warn">
121
- The previous wire shape spread `callSettings` and `config` fields at the top level (e.g. `body.modelName`). Both formats are sent for compatibility, but the top-level fields are deprecated. Read from the nested objects.
122
- </Callout>
123
-
124
- The endpoint returns a stream of state snapshots using the [`assistant-stream`](https://www.npmjs.com/package/assistant-stream) library ([PyPI](https://pypi.org/project/assistant-stream/)).
125
-
126
- ### Handling commands
127
-
128
- ```python
129
- for command in request.commands:
130
- if command.type == "add-message":
131
- # Handle adding a user message
132
- elif command.type == "add-tool-result":
133
- # Handle tool execution result
134
- elif command.type == "my-custom-command":
135
- # Handle your custom command
136
- ```
137
-
138
- ### Streaming updates
139
-
140
- Mutate `controller.state` inside your run callback:
141
-
142
- ```python
143
- from assistant_stream import RunController, create_run
144
- from assistant_stream.serialization import DataStreamResponse
145
-
146
- @app.post("/assistant")
147
- async def chat_endpoint(request: ChatRequest):
148
- async def run_callback(controller: RunController):
149
- controller.state["message"] = "Hello" # emits "set" at ["message"]
150
- controller.state["message"] += " World" # emits "append-text"
151
-
152
- stream = create_run(run_callback, state=request.state)
153
- return DataStreamResponse(stream)
154
- ```
155
-
156
- State changes are automatically streamed using the operations described in [streaming protocol](#streaming-protocol).
157
-
158
- ### Cancellation
159
-
160
- `create_run` exposes `controller.is_cancelled` and `controller.cancelled_event`. If the response stream closes early (user cancel, client disconnect), these are set so your loop can exit cleanly. `create_run` gives callbacks a ~50ms cooperative shutdown window before forced cancellation. Put critical cleanup in `finally` blocks.
161
-
162
- ```python
163
- async def run_callback(controller: RunController):
164
- while not controller.is_cancelled:
165
- await asyncio.sleep(0.05)
166
- ```
167
-
168
- ```python
169
- async def run_callback(controller: RunController):
170
- await controller.cancelled_event.wait()
171
- # cancellation-aware shutdown
172
- ```
173
-
174
- ### Backend reference implementation
175
-
176
- <Tabs items={["Custom agent", "LangGraph"]}>
177
- <Tab value="Custom agent">
178
-
179
- ```python
180
- from assistant_stream.serialization import DataStreamResponse
181
- from assistant_stream import RunController, create_run
182
-
183
- @app.post("/assistant")
184
- async def chat_endpoint(request: ChatRequest):
185
- async def run_callback(controller: RunController):
186
- if controller.state is None:
187
- controller.state = {"messages": []}
188
-
189
- for command in request.commands:
190
- if command.type == "add-message":
191
- controller.state["messages"].append(command.message)
192
-
193
- async for message in your_agent.stream():
194
- controller.state["messages"].append(message)
195
-
196
- stream = create_run(run_callback, state=request.state)
197
- return DataStreamResponse(stream)
198
- ```
199
-
200
- </Tab>
201
- <Tab value="LangGraph">
202
-
203
- ```python
204
- from assistant_stream.serialization import DataStreamResponse
205
- from assistant_stream import RunController, create_run
206
- from assistant_stream.modules.langgraph import append_langgraph_event
207
-
208
- @app.post("/assistant")
209
- async def chat_endpoint(request: ChatRequest):
210
- async def run_callback(controller: RunController):
211
- if controller.state is None:
212
- controller.state = {"messages": []}
213
-
214
- input_messages = []
215
- for command in request.commands:
216
- if command.type == "add-message":
217
- text_parts = [
218
- p.text for p in command.message.parts
219
- if p.type == "text" and p.text
220
- ]
221
- if text_parts:
222
- input_messages.append(HumanMessage(content=" ".join(text_parts)))
223
-
224
- async for namespace, event_type, chunk in graph.astream(
225
- {"messages": input_messages},
226
- stream_mode=["messages", "updates"],
227
- subgraphs=True,
228
- ):
229
- append_langgraph_event(controller.state, namespace, event_type, chunk)
230
-
231
- stream = create_run(run_callback, state=request.state)
232
- return DataStreamResponse(stream)
233
- ```
234
-
235
- </Tab>
236
- </Tabs>
237
-
238
- Full LangGraph example: [`python/assistant-transport-backend-langgraph`](https://github.com/assistant-ui/assistant-ui/tree/main/python/assistant-transport-backend-langgraph).
239
-
240
- ## Streaming protocol
241
-
242
- assistant-stream replicates an arbitrary JSON object via two operations.
243
-
244
- ### Operations
245
-
246
- These two operations cover all complex state mutations: `set` for value updates and structure, `append-text` for efficient streaming of text content.
247
-
248
- #### `set`
249
-
250
- ```json
251
- // Operation
252
- { "type": "set", "path": ["status"], "value": "completed" }
253
-
254
- // Before
255
- { "status": "pending" }
256
-
257
- // After
258
- { "status": "completed" }
259
- ```
260
-
261
- #### `append-text`
262
-
263
- ```json
264
- // Operation
265
- { "type": "append-text", "path": ["message"], "value": " World" }
266
-
267
- // Before
268
- { "message": "Hello" }
269
-
270
- // After
271
- { "message": "Hello World" }
272
- ```
273
-
274
- ### Wire format
275
-
276
- <Callout type="warn">
277
- The wire format will migrate to Server-Sent Events (SSE) in a future release.
278
- </Callout>
279
-
280
- Inspired by [AI SDK's data stream protocol](https://sdk.vercel.ai/docs/ai-sdk-ui/stream-protocol).
281
-
282
- **state update:**
283
-
284
- ```
285
- aui-state:[{"type":"set","path":["status"],"value":"completed"}]
286
- ```
287
-
288
- **error:**
289
-
290
- ```
291
- 3:"error message"
292
- ```
293
-
294
- ## Building a frontend
295
-
296
- `useAssistantTransportRuntime` accepts:
297
-
298
- ```ts
299
- {
300
- initialState: T,
301
- api: string,
302
- resumeApi?: string,
303
- resumeStateApi?: string,
304
- protocol?: "data-stream" | "assistant-transport",
305
- converter: (state: T, connectionMetadata: ConnectionMetadata) => AssistantTransportState,
306
- headers?: Record<string, string> | Headers | (() => Promise<Record<string, string> | Headers>),
307
- body?: object | (() => Promise<object | undefined>),
308
- prepareSendCommandsRequest?: (body: SendCommandsRequestBody) => Record<string, unknown> | Promise<Record<string, unknown>>,
309
- capabilities?: { edit?: boolean },
310
- adapters?: { attachments?: AttachmentAdapter; history?: ThreadHistoryAdapter },
311
- onResponse?: (response: Response) => void | Promise<void>,
312
- onFinish?: () => void,
313
- onError?: (error: Error, params: { commands: AssistantTransportCommand[]; updateState: (updater: (state: T) => T) => void }) => void | Promise<void>,
314
- onCancel?: (params: { commands: AssistantTransportCommand[]; updateState: (updater: (state: T) => T) => void; error?: Error }) => void
315
- }
316
- ```
317
-
318
- ### State converter
319
-
320
- The state converter transforms your agent state into assistant-ui's message format:
321
-
322
- ```ts
323
- (
324
- state: T,
325
- connectionMetadata: {
326
- pendingCommands: Command[], // commands not yet sent
327
- isSending: boolean, // a request is in flight
328
- toolStatuses: Record<string, ToolExecutionStatus>,
329
- },
330
- ) => {
331
- messages: ThreadMessage[],
332
- isRunning: boolean,
333
- state?: ReadonlyJSONValue,
334
- };
335
- ```
336
-
337
- ### Converting messages
338
-
339
- `unstable_createMessageConverter` transforms agent messages to assistant-ui's format:
340
-
341
- <Tabs items={["Example", "LangChain"]}>
342
- <Tab value="Example">
343
-
344
- ```ts
345
- import { unstable_createMessageConverter as createMessageConverter } from "@assistant-ui/react";
346
-
347
- type YourMessage = {
348
- id: string;
349
- role: "user" | "assistant";
350
- content: string;
351
- timestamp: number;
352
- };
353
-
354
- const messageConverter = createMessageConverter((message: YourMessage) => ({
355
- role: message.role,
356
- content: [{ type: "text", text: message.content }],
357
- }));
358
-
359
- const converter = (state: YourAgentState) => ({
360
- messages: messageConverter.toThreadMessages(state.messages),
361
- isRunning: false,
362
- });
363
- ```
364
-
365
- </Tab>
366
- <Tab value="LangChain">
367
-
368
- ```ts
369
- import { unstable_createMessageConverter as createMessageConverter } from "@assistant-ui/react";
370
- import { convertLangChainMessages } from "@assistant-ui/react-langgraph";
371
-
372
- const messageConverter = createMessageConverter(convertLangChainMessages);
373
-
374
- const converter = (state: YourAgentState) => ({
375
- messages: messageConverter.toThreadMessages(state.messages),
376
- isRunning: false,
377
- });
378
- ```
379
-
380
- </Tab>
381
- </Tabs>
382
-
383
- Retrieve the original message format anywhere via `messageConverter.toOriginalMessage(threadMessage)` or `toOriginalMessages(threadMessage)`.
384
-
385
- ### Optimistic updates from commands
386
-
387
- The converter also receives `connectionMetadata.pendingCommands`. Use it to show optimistic UI before the backend responds:
388
-
389
- ```ts
390
- const converter = (state: State, connectionMetadata: ConnectionMetadata) => {
391
- const optimisticMessages = connectionMetadata.pendingCommands
392
- .filter((c) => c.type === "add-message")
393
- .map((c) => c.message);
394
-
395
- return {
396
- messages: [...state.messages, ...optimisticMessages],
397
- isRunning: connectionMetadata.isSending || false,
398
- };
399
- };
400
- ```
401
-
402
- ## Errors and cancellations
403
-
404
- `onError` and `onCancel` receive `updateState` so you can mutate state on the client without making a server request:
405
-
406
- ```ts
407
- const runtime = useAssistantTransportRuntime({
408
- // ... other options
409
- onError: (error, { commands, updateState }) => {
410
- updateState((s) => ({ ...s, lastError: error.message }));
411
- },
412
- onCancel: ({ commands, updateState }) => {
413
- updateState((s) => ({ ...s, status: "cancelled" }));
414
- },
415
- });
416
- ```
417
-
418
- `onError` receives commands that were in transit. `onCancel` receives both in-transit and queued commands when the user cancels directly; when called after an error, it only receives queued commands (in-transit commands are passed to `onError`).
419
-
420
- ## Custom headers and body
421
-
422
- ```ts
423
- const runtime = useAssistantTransportRuntime({
424
- // ...
425
- headers: { Authorization: "Bearer token", "X-Custom-Header": "value" },
426
- body: { customField: "value" },
427
- });
428
- ```
429
-
430
- Evaluate per-request:
431
-
432
- ```ts
433
- const runtime = useAssistantTransportRuntime({
434
- // ...
435
- headers: async () => ({
436
- Authorization: `Bearer ${await getAccessToken()}`,
437
- "X-Request-ID": crypto.randomUUID(),
438
- }),
439
- body: async () => ({
440
- customField: "value",
441
- requestId: crypto.randomUUID(),
442
- timestamp: Date.now(),
443
- }),
444
- });
445
- ```
446
-
447
- ### Transforming the request body
448
-
449
- `prepareSendCommandsRequest` lets you transform the entire body before send:
450
-
451
- ```ts
452
- const runtime = useAssistantTransportRuntime({
453
- // ...
454
- prepareSendCommandsRequest: (body) => ({
455
- ...body,
456
- trackingId: crypto.randomUUID(),
457
- commands: body.commands.map((cmd) =>
458
- cmd.type === "add-message"
459
- ? { ...cmd, trackingId: crypto.randomUUID() }
460
- : cmd,
461
- ),
462
- }),
463
- });
464
- ```
465
-
466
- ## Editing messages
467
-
468
- Editing is disabled by default. Enable it:
469
-
470
- ```ts
471
- const runtime = useAssistantTransportRuntime({
472
- // ...
473
- capabilities: { edit: true },
474
- });
475
- ```
476
-
477
- `add-message` commands always include `parentId` and `sourceId`:
478
-
479
- ```ts
480
- {
481
- type: "add-message",
482
- message: { role: "user", parts: [...] },
483
- parentId: "msg-3", // insert after this message
484
- sourceId: "msg-4", // ID of the message being replaced (null for new)
485
- }
486
- ```
487
-
488
- ### Backend handling
489
-
490
- When the backend receives `add-message` with a `parentId`:
491
-
492
- 1. Truncate all messages after the parent.
493
- 2. Append the new message.
494
- 3. Stream the updated state back.
495
-
496
- ```python
497
- for command in request.commands:
498
- if command.type == "add-message":
499
- if hasattr(command, "parentId") and command.parentId is not None:
500
- parent_idx = next(
501
- i for i, m in enumerate(messages) if m.id == command.parentId
502
- )
503
- messages = messages[:parent_idx + 1]
504
- messages.append(command.message)
505
- ```
506
-
507
- ## Resuming from a sync server
508
-
509
- <Callout type="info">
510
- The sync server is currently part of the enterprise plan; contact us for details.
511
- </Callout>
512
-
513
- When a user refreshes the page or reconnects, the backend may still be generating. `resumeRun` reconnects to an active stream.
514
-
515
- ```ts
516
- const runtime = useAssistantTransportRuntime({
517
- // ...
518
- api: "http://localhost:8010/assistant",
519
- resumeApi: "http://localhost:8010/resume",
520
- });
521
- ```
522
-
523
- Setting `resumeStateApi` additionally hydrates resumed runs from the server-retained starting state. It requires a sync server that serves the initial-state route; do not configure it against a server without one, since a failing preflight fails the resume closed:
524
-
525
- ```tsx
526
- const runtime = useAssistantTransportRuntime({
527
- // ...
528
- resumeStateApi: "http://localhost:8010/initial-state",
529
- });
530
- ```
531
-
532
- Before resuming, the runtime posts `{ threadId }` to `resumeStateApi`. The endpoint must return the state that started the active run together with its identity:
533
-
534
- ```json
535
- { "runId": "8b3a...", "state": { "messages": [] } }
536
- ```
537
-
538
- The runtime replaces its local base with this snapshot and includes `runId` in the resume request; the request carries no `state`, since the server replays from the snapshot it retained. A sync server should reject the resume when that ID no longer identifies the same run, preventing replay operations from being applied to a drifted or replaced base state. When no run is active, the endpoint responds `204 No Content` and the runtime skips the resume without raising an error. On a resume, `runId` takes precedence over fields supplied through `body` and survives `prepareSendCommandsRequest`; any `state` either of them supplies is stripped.
539
-
540
- ```tsx
541
- import { useAui } from "@assistant-ui/react";
542
- import { useEffect, useRef } from "react";
543
-
544
- function useResumeOnMount(threadId: string) {
545
- const aui = useAui();
546
- const checkedRef = useRef(false);
547
-
548
- useEffect(() => {
549
- if (checkedRef.current) return;
550
- checkedRef.current = true;
551
-
552
- (async () => {
553
- const status = await fetch(`/api/sync-server/status/${threadId}`).then((r) =>
554
- r.json(),
555
- );
556
- if (status.isRunning) {
557
- const parentId = aui.thread.getState().messages.at(-1)?.id ?? null;
558
- aui.thread.resumeRun({ parentId });
559
- }
560
- })();
561
- }, [aui, threadId]);
562
- }
563
- ```
564
-
565
- For `AssistantTransport`, do not pass a `stream` parameter; the runtime uses the configured `resumeApi`.
566
-
567
- ## Accessing runtime state
568
-
569
- `useAssistantTransportState` reads the current agent state from any component:
570
-
571
- ```ts
572
- import { useAssistantTransportState } from "@assistant-ui/react";
573
-
574
- function MyComponent() {
575
- const state = useAssistantTransportState();
576
- return <div>{JSON.stringify(state)}</div>;
577
- }
578
-
579
- function MessageCount() {
580
- const messages = useAssistantTransportState((state) => state.messages);
581
- return <div>Message count: {messages.length}</div>;
582
- }
583
- ```
584
-
585
- ### Type safety
586
-
587
- Augment the module to type your agent state:
588
-
589
- ```ts title="assistant.config.ts"
590
- import "@assistant-ui/react";
591
-
592
- declare module "@assistant-ui/react" {
593
- namespace Assistant {
594
- interface ExternalState {
595
- myState: {
596
- messages: Message[];
597
- customField: string;
598
- };
599
- }
600
- }
601
- }
602
- ```
603
-
604
- Place this file anywhere in your project; TypeScript picks it up via module resolution. `useAssistantTransportState` becomes fully typed.
605
-
606
- ### Accessing the original message
607
-
608
- If you used `createMessageConverter`, retrieve the original message from any assistant-ui state:
609
-
610
- ```ts
611
- import { useAuiState } from "@assistant-ui/react";
612
-
613
- function MyMessageComponent() {
614
- const message = useAuiState((s) => s.message);
615
- const original = messageConverter.toOriginalMessage(message);
616
- return <div>{original.yourCustomField}</div>;
617
- }
618
- ```
619
-
620
- `toOriginalMessages` returns all source messages when a `ThreadMessage` was created from multiple sources.
621
-
622
- ## Frontend reference implementation
623
-
624
- ```tsx
625
- "use client";
626
-
627
- import {
628
- AssistantRuntimeProvider,
629
- AssistantTransportConnectionMetadata,
630
- useAssistantTransportRuntime,
631
- } from "@assistant-ui/react";
632
-
633
- type State = { messages: Message[] };
634
-
635
- const converter = (
636
- state: State,
637
- connectionMetadata: AssistantTransportConnectionMetadata,
638
- ) => {
639
- const optimistic = connectionMetadata.pendingCommands
640
- .filter((c) => c.type === "add-message")
641
- .map((c) => c.message);
642
-
643
- return {
644
- messages: [...state.messages, ...optimistic],
645
- isRunning: connectionMetadata.isSending || false,
646
- };
647
- };
648
-
649
- export function MyRuntimeProvider({ children }) {
650
- const runtime = useAssistantTransportRuntime({
651
- initialState: { messages: [] },
652
- api: "http://localhost:8010/assistant",
653
- converter,
654
- headers: async () => ({ Authorization: "Bearer token" }),
655
- body: { "custom-field": "custom-value" },
656
- onError: (error, { commands, updateState }) => {
657
- updateState((s) => ({ ...s, lastError: error.message }));
658
- },
659
- onCancel: ({ commands, updateState }) => {
660
- updateState((s) => ({ ...s, status: "cancelled" }));
661
- },
662
- });
663
-
664
- return (
665
- <AssistantRuntimeProvider runtime={runtime}>
666
- {children}
667
- </AssistantRuntimeProvider>
668
- );
669
- }
670
- ```
671
-
672
- Full example: [`examples/with-assistant-transport`](https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-assistant-transport). A LangChain variant lives in the same examples directory.
673
-
674
- ## Custom commands
675
-
676
- ### Define
677
-
678
- ```ts title="assistant.config.ts"
679
- import "@assistant-ui/react";
680
-
681
- declare module "@assistant-ui/react" {
682
- namespace Assistant {
683
- interface Commands {
684
- myCustomCommand: {
685
- type: "my-custom-command";
686
- data: string;
687
- };
688
- }
689
- }
690
- }
691
- ```
692
-
693
- ### Issue
694
-
695
- ```ts
696
- import { useAssistantTransportSendCommand } from "@assistant-ui/react";
697
-
698
- function MyComponent() {
699
- const sendCommand = useAssistantTransportSendCommand();
700
- return (
701
- <button
702
- onClick={() => sendCommand({ type: "my-custom-command", data: "hello" })}
703
- >
704
- Send
705
- </button>
706
- );
707
- }
708
- ```
709
-
710
- ### Handle on the backend
711
-
712
- ```python
713
- for command in request.commands:
714
- if command.type == "my-custom-command":
715
- data = command.data
716
- ```
717
-
718
- ### Optimistic updates
719
-
720
- ```ts
721
- const converter = (state: State, connectionMetadata: ConnectionMetadata) => {
722
- const customCommands = connectionMetadata.pendingCommands.filter(
723
- (c) => c.type === "my-custom-command",
724
- );
725
- return {
726
- messages: state.messages,
727
- state: { ...state, customData: customCommands.map((c) => c.data) },
728
- isRunning: connectionMetadata.isSending || false,
729
- };
730
- };
731
- ```
732
-
733
- Custom commands follow the same lifecycle as built-in ones; check for them in `onError` and `onCancel` if needed.
734
-
735
- ## Adapter support
736
-
737
- | Adapter | Supported via |
738
- | --- | --- |
739
- | Attachments | `adapters.attachments` |
740
- | History | `adapters.history` |
741
- | threadList | Via [thread list adapter](/docs/runtimes/concepts/threads) |
742
-
743
- Speech, dictation, feedback, and suggestions are not currently exposed by `AssistantTransport`. Drop down to `ExternalStoreRuntime` if you need them.
744
-
745
- ## Related
746
-
747
- <Cards>
748
- <Card
749
- title="ExternalStoreRuntime"
750
- description="The core runtime AssistantTransport is built on."
751
- href="/docs/runtimes/custom/external-store"
752
- />
753
- <Card
754
- title="Data Stream"
755
- description="Message-streaming protocol on top of LocalRuntime."
756
- href="/docs/runtimes/custom/data-stream"
757
- />
758
- <Card
759
- title="Adapters"
760
- description="Attachments, history, and the rest of the shared adapter contracts."
761
- href="/docs/runtimes/concepts/adapters"
762
- />
763
- </Cards>