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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/README.md +16 -43
  2. package/dist/index.d.ts +2 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -91
  5. package/dist/index.js.map +1 -1
  6. package/dist/proxy.d.ts +9 -0
  7. package/dist/proxy.d.ts.map +1 -0
  8. package/dist/proxy.js +91 -0
  9. package/dist/proxy.js.map +1 -0
  10. package/package.json +8 -12
  11. package/src/index.ts +3 -115
  12. package/src/proxy.test.ts +385 -0
  13. package/src/proxy.ts +126 -0
  14. package/.docs/organized/code-examples/waterfall.md +0 -807
  15. package/.docs/organized/code-examples/with-a2a.md +0 -675
  16. package/.docs/organized/code-examples/with-ag-ui.md +0 -553
  17. package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -466
  18. package/.docs/organized/code-examples/with-artifacts.md +0 -815
  19. package/.docs/organized/code-examples/with-assistant-transport.md +0 -576
  20. package/.docs/organized/code-examples/with-browser-extension.md +0 -371
  21. package/.docs/organized/code-examples/with-chain-of-thought.md +0 -962
  22. package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
  23. package/.docs/organized/code-examples/with-cloud.md +0 -439
  24. package/.docs/organized/code-examples/with-custom-thread-list.md +0 -569
  25. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -527
  26. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -697
  27. package/.docs/organized/code-examples/with-eve.md +0 -405
  28. package/.docs/organized/code-examples/with-expo.md +0 -2246
  29. package/.docs/organized/code-examples/with-external-store.md +0 -421
  30. package/.docs/organized/code-examples/with-ffmpeg.md +0 -829
  31. package/.docs/organized/code-examples/with-generative-ui.md +0 -1810
  32. package/.docs/organized/code-examples/with-google-adk.md +0 -368
  33. package/.docs/organized/code-examples/with-heat-graph.md +0 -304
  34. package/.docs/organized/code-examples/with-image-generation.md +0 -463
  35. package/.docs/organized/code-examples/with-interactables.md +0 -733
  36. package/.docs/organized/code-examples/with-langchain.md +0 -446
  37. package/.docs/organized/code-examples/with-langgraph.md +0 -855
  38. package/.docs/organized/code-examples/with-livekit.md +0 -643
  39. package/.docs/organized/code-examples/with-mcp.md +0 -782
  40. package/.docs/organized/code-examples/with-nuxt.md +0 -2428
  41. package/.docs/organized/code-examples/with-opencode.md +0 -1974
  42. package/.docs/organized/code-examples/with-openui.md +0 -450
  43. package/.docs/organized/code-examples/with-pi.md +0 -2084
  44. package/.docs/organized/code-examples/with-react-hook-form.md +0 -727
  45. package/.docs/organized/code-examples/with-react-ink-web.md +0 -740
  46. package/.docs/organized/code-examples/with-react-ink.md +0 -473
  47. package/.docs/organized/code-examples/with-react-router.md +0 -936
  48. package/.docs/organized/code-examples/with-resumable-stream.md +0 -668
  49. package/.docs/organized/code-examples/with-store.md +0 -679
  50. package/.docs/organized/code-examples/with-svelte.md +0 -415
  51. package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
  52. package/.docs/organized/code-examples/with-tanstack.md +0 -812
  53. package/.docs/organized/code-examples/with-tap-runtime.md +0 -813
  54. package/.docs/organized/code-examples/with-virtualized-thread.md +0 -681
  55. package/.docs/organized/code-examples/with-vue.md +0 -408
  56. package/.docs/raw/docs/(getting-started)/architecture.mdx +0 -146
  57. package/.docs/raw/docs/(getting-started)/base-ui.mdx +0 -39
  58. package/.docs/raw/docs/(getting-started)/cli.mdx +0 -542
  59. package/.docs/raw/docs/(getting-started)/devtools.mdx +0 -79
  60. package/.docs/raw/docs/(getting-started)/index.mdx +0 -23
  61. package/.docs/raw/docs/(getting-started)/installation.mdx +0 -483
  62. package/.docs/raw/docs/(getting-started)/llm.mdx +0 -211
  63. package/.docs/raw/docs/(getting-started)/rtl.mdx +0 -78
  64. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
  65. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
  66. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
  67. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
  68. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
  69. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
  70. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -26
  71. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
  72. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
  73. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
  74. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
  75. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -57
  76. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
  77. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
  78. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
  79. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
  80. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
  81. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
  82. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
  83. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
  84. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
  85. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
  86. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
  87. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
  88. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
  89. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
  90. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
  91. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
  92. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
  93. package/.docs/raw/docs/(reference)/api-reference/integrations/ai-sdk.mdx +0 -200
  94. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
  95. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -118
  96. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
  97. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
  98. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
  99. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
  100. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
  101. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
  102. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
  103. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
  104. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
  105. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
  106. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
  107. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
  108. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
  109. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -637
  110. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
  111. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
  112. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
  113. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
  114. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
  115. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
  116. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
  117. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
  118. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
  119. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
  120. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
  121. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
  122. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
  123. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
  124. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
  125. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
  126. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
  127. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
  128. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
  129. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
  130. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
  131. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
  132. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
  133. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
  134. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
  135. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
  136. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
  137. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
  138. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
  139. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
  140. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
  141. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
  142. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
  143. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -152
  144. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
  145. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
  146. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
  147. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
  148. package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -604
  149. package/.docs/raw/docs/cloud/authorization.mdx +0 -252
  150. package/.docs/raw/docs/cloud/index.mdx +0 -46
  151. package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
  152. package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -411
  153. package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
  154. package/.docs/raw/docs/copilots/model-context.mdx +0 -156
  155. package/.docs/raw/docs/copilots/motivation.mdx +0 -202
  156. package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
  157. package/.docs/raw/docs/guides/attachments.mdx +0 -619
  158. package/.docs/raw/docs/guides/branching.mdx +0 -76
  159. package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
  160. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
  161. package/.docs/raw/docs/guides/context-api.mdx +0 -619
  162. package/.docs/raw/docs/guides/dictation.mdx +0 -298
  163. package/.docs/raw/docs/guides/editing.mdx +0 -102
  164. package/.docs/raw/docs/guides/electron.mdx +0 -369
  165. package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
  166. package/.docs/raw/docs/guides/image-generation.mdx +0 -74
  167. package/.docs/raw/docs/guides/index.mdx +0 -117
  168. package/.docs/raw/docs/guides/input-history.mdx +0 -55
  169. package/.docs/raw/docs/guides/latex.mdx +0 -158
  170. package/.docs/raw/docs/guides/mentions.mdx +0 -575
  171. package/.docs/raw/docs/guides/message-timing.mdx +0 -215
  172. package/.docs/raw/docs/guides/quoting.mdx +0 -169
  173. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
  174. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
  175. package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
  176. package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
  177. package/.docs/raw/docs/guides/speech.mdx +0 -172
  178. package/.docs/raw/docs/guides/suggestions.mdx +0 -384
  179. package/.docs/raw/docs/guides/virtualization.mdx +0 -133
  180. package/.docs/raw/docs/guides/voice.mdx +0 -310
  181. package/.docs/raw/docs/ink/adapters.mdx +0 -99
  182. package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
  183. package/.docs/raw/docs/ink/hooks.mdx +0 -469
  184. package/.docs/raw/docs/ink/index.mdx +0 -237
  185. package/.docs/raw/docs/ink/migration.mdx +0 -138
  186. package/.docs/raw/docs/ink/primitives.mdx +0 -1259
  187. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
  188. package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
  189. package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
  190. package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
  191. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
  192. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents.mdx +0 -283
  193. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
  194. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
  195. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
  196. package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
  197. package/.docs/raw/docs/integrations/index.mdx +0 -178
  198. package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
  199. package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
  200. package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
  201. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
  202. package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
  203. package/.docs/raw/docs/migrations/index.mdx +0 -50
  204. package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
  205. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
  206. package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
  207. package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
  208. package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
  209. package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
  210. package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
  211. package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
  212. package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
  213. package/.docs/raw/docs/primitives/attachment.mdx +0 -217
  214. package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
  215. package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
  216. package/.docs/raw/docs/primitives/composer.mdx +0 -659
  217. package/.docs/raw/docs/primitives/error.mdx +0 -142
  218. package/.docs/raw/docs/primitives/index.mdx +0 -99
  219. package/.docs/raw/docs/primitives/message.mdx +0 -618
  220. package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
  221. package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
  222. package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
  223. package/.docs/raw/docs/primitives/thread.mdx +0 -509
  224. package/.docs/raw/docs/react-native/adapters.mdx +0 -94
  225. package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
  226. package/.docs/raw/docs/react-native/hooks.mdx +0 -339
  227. package/.docs/raw/docs/react-native/index.mdx +0 -289
  228. package/.docs/raw/docs/react-native/migration.mdx +0 -142
  229. package/.docs/raw/docs/react-native/primitives.mdx +0 -976
  230. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
  231. package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
  232. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
  233. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
  234. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
  235. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
  236. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -267
  237. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
  238. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
  239. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
  240. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
  241. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -731
  242. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
  243. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
  244. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
  245. package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
  246. package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
  247. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
  248. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
  249. package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
  250. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
  251. package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
  252. package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
  253. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
  254. package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
  255. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
  256. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
  257. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
  258. package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
  259. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
  260. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
  261. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
  262. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
  263. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
  264. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
  265. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
  266. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
  267. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
  268. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
  269. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
  270. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
  271. package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
  272. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
  273. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
  274. package/.docs/raw/docs/tools/a2ui.mdx +0 -107
  275. package/.docs/raw/docs/tools/backend.mdx +0 -147
  276. package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
  277. package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
  278. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
  279. package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
  280. package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
  281. package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
  282. package/.docs/raw/docs/tools/index.mdx +0 -72
  283. package/.docs/raw/docs/tools/interactables.mdx +0 -1084
  284. package/.docs/raw/docs/tools/mcp-apps.mdx +0 -363
  285. package/.docs/raw/docs/tools/mcp.mdx +0 -466
  286. package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
  287. package/.docs/raw/docs/tools/openui.mdx +0 -175
  288. package/.docs/raw/docs/tools/tool-ui.mdx +0 -1020
  289. package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
  290. package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
  291. package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
  292. package/.docs/raw/docs/ui/attachment.mdx +0 -279
  293. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -247
  294. package/.docs/raw/docs/ui/context-display.mdx +0 -148
  295. package/.docs/raw/docs/ui/directive-text.mdx +0 -114
  296. package/.docs/raw/docs/ui/file.mdx +0 -159
  297. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
  298. package/.docs/raw/docs/ui/image.mdx +0 -102
  299. package/.docs/raw/docs/ui/markdown.mdx +0 -103
  300. package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
  301. package/.docs/raw/docs/ui/mermaid.mdx +0 -92
  302. package/.docs/raw/docs/ui/message-timing.mdx +0 -93
  303. package/.docs/raw/docs/ui/model-selector.mdx +0 -455
  304. package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
  305. package/.docs/raw/docs/ui/quote.mdx +0 -211
  306. package/.docs/raw/docs/ui/reasoning.mdx +0 -214
  307. package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
  308. package/.docs/raw/docs/ui/sources.mdx +0 -186
  309. package/.docs/raw/docs/ui/streamdown.mdx +0 -392
  310. package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
  311. package/.docs/raw/docs/ui/thread-list.mdx +0 -411
  312. package/.docs/raw/docs/ui/thread.mdx +0 -559
  313. package/.docs/raw/docs/ui/tool-fallback.mdx +0 -141
  314. package/.docs/raw/docs/ui/tool-group.mdx +0 -240
  315. package/.docs/raw/docs/ui/voice.mdx +0 -173
  316. package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
  317. package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
  318. package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
  319. package/dist/constants.d.ts +0 -14
  320. package/dist/constants.d.ts.map +0 -1
  321. package/dist/constants.js +0 -19
  322. package/dist/constants.js.map +0 -1
  323. package/dist/prepare-docs/code-examples.d.ts +0 -5
  324. package/dist/prepare-docs/code-examples.d.ts.map +0 -1
  325. package/dist/prepare-docs/code-examples.js +0 -117
  326. package/dist/prepare-docs/code-examples.js.map +0 -1
  327. package/dist/prepare-docs/copy-raw.d.ts +0 -5
  328. package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
  329. package/dist/prepare-docs/copy-raw.js +0 -49
  330. package/dist/prepare-docs/copy-raw.js.map +0 -1
  331. package/dist/prepare-docs/prepare.d.ts +0 -1
  332. package/dist/prepare-docs/prepare.js +0 -22
  333. package/dist/prepare-docs/prepare.js.map +0 -1
  334. package/dist/prompts/xulux-playground.d.ts +0 -12
  335. package/dist/prompts/xulux-playground.d.ts.map +0 -1
  336. package/dist/prompts/xulux-playground.js +0 -33
  337. package/dist/prompts/xulux-playground.js.map +0 -1
  338. package/dist/tools/docs.d.ts +0 -22
  339. package/dist/tools/docs.d.ts.map +0 -1
  340. package/dist/tools/docs.js +0 -177
  341. package/dist/tools/docs.js.map +0 -1
  342. package/dist/tools/examples.d.ts +0 -24
  343. package/dist/tools/examples.d.ts.map +0 -1
  344. package/dist/tools/examples.js +0 -87
  345. package/dist/tools/examples.js.map +0 -1
  346. package/dist/tools/resources.d.ts +0 -6
  347. package/dist/tools/resources.d.ts.map +0 -1
  348. package/dist/tools/resources.js +0 -75
  349. package/dist/tools/resources.js.map +0 -1
  350. package/dist/tools/search.d.ts +0 -24
  351. package/dist/tools/search.d.ts.map +0 -1
  352. package/dist/tools/search.js +0 -39
  353. package/dist/tools/search.js.map +0 -1
  354. package/dist/tools/tests/mcp-test-client.d.ts +0 -15
  355. package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
  356. package/dist/tools/tests/mcp-test-client.js +0 -68
  357. package/dist/tools/tests/mcp-test-client.js.map +0 -1
  358. package/dist/tools/tests/test-setup.d.ts +0 -7
  359. package/dist/tools/tests/test-setup.d.ts.map +0 -1
  360. package/dist/tools/tests/test-setup.js +0 -36
  361. package/dist/tools/tests/test-setup.js.map +0 -1
  362. package/dist/tools/xulux-templates.d.ts +0 -58
  363. package/dist/tools/xulux-templates.d.ts.map +0 -1
  364. package/dist/tools/xulux-templates.js +0 -84
  365. package/dist/tools/xulux-templates.js.map +0 -1
  366. package/dist/utils/cache.d.ts +0 -5
  367. package/dist/utils/cache.d.ts.map +0 -1
  368. package/dist/utils/cache.js +0 -18
  369. package/dist/utils/cache.js.map +0 -1
  370. package/dist/utils/logger.d.ts +0 -10
  371. package/dist/utils/logger.d.ts.map +0 -1
  372. package/dist/utils/logger.js +0 -20
  373. package/dist/utils/logger.js.map +0 -1
  374. package/dist/utils/mcp-format.d.ts +0 -11
  375. package/dist/utils/mcp-format.d.ts.map +0 -1
  376. package/dist/utils/mcp-format.js +0 -14
  377. package/dist/utils/mcp-format.js.map +0 -1
  378. package/dist/utils/mdx.d.ts +0 -12
  379. package/dist/utils/mdx.d.ts.map +0 -1
  380. package/dist/utils/mdx.js +0 -45
  381. package/dist/utils/mdx.js.map +0 -1
  382. package/dist/utils/paths.d.ts +0 -12
  383. package/dist/utils/paths.d.ts.map +0 -1
  384. package/dist/utils/paths.js +0 -93
  385. package/dist/utils/paths.js.map +0 -1
  386. package/dist/utils/search.d.ts +0 -10
  387. package/dist/utils/search.d.ts.map +0 -1
  388. package/dist/utils/search.js +0 -97
  389. package/dist/utils/search.js.map +0 -1
  390. package/dist/utils/security.d.ts +0 -5
  391. package/dist/utils/security.d.ts.map +0 -1
  392. package/dist/utils/security.js +0 -22
  393. package/dist/utils/security.js.map +0 -1
  394. package/dist/xulux/catalog-client.d.ts +0 -14
  395. package/dist/xulux/catalog-client.d.ts.map +0 -1
  396. package/dist/xulux/catalog-client.js +0 -112
  397. package/dist/xulux/catalog-client.js.map +0 -1
  398. package/dist/xulux/fallback-catalog.d.ts +0 -7
  399. package/dist/xulux/fallback-catalog.d.ts.map +0 -1
  400. package/dist/xulux/fallback-catalog.js +0 -47
  401. package/dist/xulux/fallback-catalog.js.map +0 -1
  402. package/dist/xulux/fetch-sandbox.d.ts +0 -5
  403. package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
  404. package/dist/xulux/fetch-sandbox.js +0 -40
  405. package/dist/xulux/fetch-sandbox.js.map +0 -1
  406. package/dist/xulux/template-service.d.ts +0 -84
  407. package/dist/xulux/template-service.d.ts.map +0 -1
  408. package/dist/xulux/template-service.js +0 -223
  409. package/dist/xulux/template-service.js.map +0 -1
  410. package/dist/xulux/types.d.ts +0 -55
  411. package/dist/xulux/types.d.ts.map +0 -1
  412. package/dist/xulux/types.js +0 -6
  413. package/dist/xulux/types.js.map +0 -1
  414. package/src/constants.ts +0 -24
  415. package/src/prepare-docs/code-examples.ts +0 -158
  416. package/src/prepare-docs/copy-raw.ts +0 -50
  417. package/src/prepare-docs/prepare.ts +0 -24
  418. package/src/prompts/xulux-playground.ts +0 -36
  419. package/src/tools/docs.ts +0 -255
  420. package/src/tools/examples.ts +0 -114
  421. package/src/tools/resources.ts +0 -111
  422. package/src/tools/search.ts +0 -46
  423. package/src/tools/tests/completions.test.ts +0 -60
  424. package/src/tools/tests/directory-size-cap.test.ts +0 -50
  425. package/src/tools/tests/docs.test.ts +0 -147
  426. package/src/tools/tests/examples.test.ts +0 -94
  427. package/src/tools/tests/integration.test.ts +0 -45
  428. package/src/tools/tests/json-parsing.test.ts +0 -23
  429. package/src/tools/tests/listings-cache.test.ts +0 -19
  430. package/src/tools/tests/mcp-protocol.test.ts +0 -216
  431. package/src/tools/tests/mcp-test-client.ts +0 -111
  432. package/src/tools/tests/path-traversal.test.ts +0 -84
  433. package/src/tools/tests/resources.test.ts +0 -133
  434. package/src/tools/tests/search.test.ts +0 -37
  435. package/src/tools/tests/test-setup.ts +0 -50
  436. package/src/tools/tests/xulux-templates.test.ts +0 -325
  437. package/src/tools/xulux-templates.ts +0 -141
  438. package/src/utils/cache.ts +0 -20
  439. package/src/utils/logger.ts +0 -20
  440. package/src/utils/mcp-format.ts +0 -14
  441. package/src/utils/mdx.ts +0 -59
  442. package/src/utils/paths.ts +0 -139
  443. package/src/utils/search.ts +0 -131
  444. package/src/utils/security.ts +0 -52
  445. package/src/utils/tests/cache.test.ts +0 -51
  446. package/src/utils/tests/mcp-format.test.ts +0 -22
  447. package/src/utils/tests/security.test.ts +0 -119
  448. package/src/xulux/catalog-client.ts +0 -150
  449. package/src/xulux/fallback-catalog.ts +0 -63
  450. package/src/xulux/fetch-sandbox.ts +0 -56
  451. package/src/xulux/template-service.ts +0 -406
  452. package/src/xulux/types.ts +0 -64
@@ -1,575 +0,0 @@
1
- ---
2
- title: Mentions in Chat
3
- description: Let users @-mention tools or custom items in the AI chat composer to guide the LLM. Mention picker built into assistant-ui's React composer.
4
- platforms: ["react"]
5
- ---
6
-
7
- Mentions let users type `@` in the composer to open a popover picker, select an item (e.g. a tool), and insert a directive into the message text. The LLM can then use the directive as a hint.
8
-
9
- ## How It Works
10
-
11
- ```mermaid
12
- flowchart LR
13
- type["User types @"] --> trigger["Trigger detected"] --> adapter["Adapter provides<br/>categories / items"] --> select["User selects item<br/>from popover"] --> insert["Directive inserted"] --> sent["Message sent with<br/>:tool[Label]{name=id} text"]
14
- ```
15
-
16
- The mention system has three layers:
17
-
18
- 1. **Trigger detection** — the composer input watches for a trigger character (`@` by default) and extracts the query
19
- 2. **Adapter** — provides the categories and items to display in the popover (e.g. registered tools)
20
- 3. **Formatter** — serializes a selected item into directive text (`:type[label]{name=id}`) and parses it back for rendering
21
-
22
- Under the hood, mentions are one kind of [trigger popover](/docs/guides/slash-commands#trigger-popover-architecture). A mention declares its behavior with a `<TriggerPopover.Directive>` sub-primitive, which writes the formatter-serialized directive into the composer on selection.
23
-
24
- ## Quick Start
25
-
26
- The fastest path is the pre-built [Mention UI components](/docs/ui/composer-trigger-popover), which wire everything together with two shadcn components — the popover picker and the message-side chip renderer:
27
-
28
- <InstallCommand shadcn={["composer-trigger-popover", "directive-text"]} />
29
-
30
- See the [Composer Trigger Popover](/docs/ui/composer-trigger-popover) and [Directive Text](/docs/ui/directive-text) guides for setup steps.
31
-
32
- The rest of this guide covers the underlying concepts and customization points.
33
-
34
- ## Trigger Adapter
35
-
36
- A `Unstable_TriggerAdapter` provides the data for the popover. All methods are **synchronous** — use external state management (React Query, SWR, local state) for async data, then expose loaded results through the adapter.
37
-
38
- ```ts
39
- import type { Unstable_TriggerAdapter } from "@assistant-ui/core";
40
-
41
- const myAdapter: Unstable_TriggerAdapter = {
42
- categories() {
43
- return [
44
- { id: "tools", label: "Tools" },
45
- { id: "users", label: "Users" },
46
- ];
47
- },
48
-
49
- categoryItems(categoryId) {
50
- if (categoryId === "tools") {
51
- return [
52
- { id: "search", type: "tool", label: "Search" },
53
- { id: "calculator", type: "tool", label: "Calculator" },
54
- ];
55
- }
56
- if (categoryId === "users") {
57
- return [
58
- { id: "alice", type: "user", label: "Alice" },
59
- { id: "bob", type: "user", label: "Bob" },
60
- ];
61
- }
62
- return [];
63
- },
64
-
65
- // Optional — global search across all categories
66
- search(query) {
67
- const lower = query.toLowerCase();
68
- const all = [
69
- ...this.categoryItems("tools"),
70
- ...this.categoryItems("users"),
71
- ];
72
- return all.filter(
73
- (item) =>
74
- item.label.toLowerCase().includes(lower) ||
75
- item.id.toLowerCase().includes(lower),
76
- );
77
- },
78
- };
79
- ```
80
-
81
- ### Async Mention Search
82
-
83
- The built-in `unstable_useLiveCompletionAdapter` wraps an async fetcher with debouncing, stale-request cancellation (results for an outdated query are dropped), and a single-entry cache. Its `search` returns the last results synchronously and schedules a debounced fetch when the query changes; when results arrive the returned `adapter` re-creates, which re-runs the popover lookup so the fresh items render. It also reports `isLoading`, which you pass to the popover to show a loading state.
84
-
85
- When the fetcher reads from an account- or workspace-specific source, pass that source ID as `cacheKey`. Changing the key clears cached results and cancels any pending result from the previous source.
86
-
87
- ```tsx
88
- import {
89
- unstable_useLiveCompletionAdapter,
90
- unstable_defaultDirectiveFormatter,
91
- } from "@assistant-ui/react";
92
- import { ComposerTriggerPopover } from "@/components/assistant-ui/composer-trigger-popover";
93
-
94
- function MentionPopover() {
95
- const mentions = unstable_useLiveCompletionAdapter({
96
- fetcher: async (query) => {
97
- const users = await fetchUsers(query);
98
- return users.map((u) => ({ id: u.id, type: "user", label: u.name }));
99
- },
100
- });
101
-
102
- return (
103
- <ComposerTriggerPopover
104
- char="@"
105
- adapter={mentions.adapter}
106
- isLoading={mentions.isLoading}
107
- directive={{ formatter: unstable_defaultDirectiveFormatter }}
108
- />
109
- );
110
- }
111
- ```
112
-
113
- The adapter interface is itself synchronous, so you can also wire async data by hand when you need a custom cache, no debounce, or an existing query client. Load results into React state (or a query cache) and read the current snapshot inside the adapter methods. The adapter re-creates on each render, so the popover always sees the latest results.
114
-
115
- **With React state and `useEffect`:**
116
-
117
- ```tsx
118
- import { useState, useEffect, useMemo } from "react";
119
- import type { Unstable_TriggerAdapter } from "@assistant-ui/core";
120
-
121
- function useUserMentionAdapter(query: string) {
122
- const [users, setUsers] = useState<{ id: string; name: string }[]>([]);
123
-
124
- useEffect(() => {
125
- if (!query) return;
126
- let cancelled = false;
127
- fetchUsers(query).then((results) => {
128
- if (!cancelled) setUsers(results);
129
- });
130
- return () => { cancelled = true; };
131
- }, [query]);
132
-
133
- const adapter: Unstable_TriggerAdapter = useMemo(() => ({
134
- categories: () => [],
135
- categoryItems: () => [],
136
- search: () =>
137
- users.map((u) => ({ id: u.id, type: "user", label: u.name })),
138
- }), [users]);
139
-
140
- return adapter;
141
- }
142
- ```
143
-
144
- `query` here is the text the user typed after `@`. You can read it from `unstable_useTriggerPopoverScopeContext` if you need it inside the component tree, or pass it as state from a controlled input.
145
-
146
- **With React Query:**
147
-
148
- ```tsx
149
- import { useQuery } from "@tanstack/react-query";
150
- import type { Unstable_TriggerAdapter } from "@assistant-ui/core";
151
-
152
- function useMentionAdapter(query: string): Unstable_TriggerAdapter {
153
- const { data = [] } = useQuery({
154
- queryKey: ["mention-search", query],
155
- queryFn: () => fetchUsers(query),
156
- enabled: query.length > 0,
157
- });
158
-
159
- return useMemo(() => ({
160
- categories: () => [],
161
- categoryItems: () => [],
162
- search: () =>
163
- data.map((u) => ({ id: u.id, type: "user", label: u.name })),
164
- }), [data]);
165
- }
166
- ```
167
-
168
- Pass the adapter to `TriggerPopover` and declare a `Directive` sub-primitive to bind the insertion behavior:
169
-
170
- ```tsx
171
- import { ComposerPrimitive } from "@assistant-ui/react";
172
- import { unstable_defaultDirectiveFormatter } from "@assistant-ui/react";
173
-
174
- <ComposerPrimitive.Unstable_TriggerPopoverRoot>
175
- <ComposerPrimitive.Root>
176
- <ComposerPrimitive.Input placeholder="Type @ to mention..." />
177
- <ComposerPrimitive.Unstable_TriggerPopover
178
- char="@"
179
- adapter={myAdapter}
180
- >
181
- <ComposerPrimitive.Unstable_TriggerPopover.Directive
182
- formatter={unstable_defaultDirectiveFormatter}
183
- />
184
- <ComposerPrimitive.Unstable_TriggerPopoverCategories>
185
- {(categories) =>
186
- categories.map((cat) => (
187
- <ComposerPrimitive.Unstable_TriggerPopoverCategoryItem
188
- key={cat.id}
189
- categoryId={cat.id}
190
- >
191
- {cat.label}
192
- </ComposerPrimitive.Unstable_TriggerPopoverCategoryItem>
193
- ))
194
- }
195
- </ComposerPrimitive.Unstable_TriggerPopoverCategories>
196
- <ComposerPrimitive.Unstable_TriggerPopoverItems>
197
- {(items) =>
198
- items.map((item) => (
199
- <ComposerPrimitive.Unstable_TriggerPopoverItem
200
- key={item.id}
201
- item={item}
202
- >
203
- {item.label}
204
- </ComposerPrimitive.Unstable_TriggerPopoverItem>
205
- ))
206
- }
207
- </ComposerPrimitive.Unstable_TriggerPopoverItems>
208
- </ComposerPrimitive.Unstable_TriggerPopover>
209
- </ComposerPrimitive.Root>
210
- </ComposerPrimitive.Unstable_TriggerPopoverRoot>
211
- ```
212
-
213
- Exactly one behavior sub-primitive (`Directive` or `Action`) is allowed per `TriggerPopover`. The parent reads the registered behavior and wires the selection machinery.
214
-
215
- ### Built-in Mention Adapter
216
-
217
- `unstable_useMentionAdapter` covers the common cases: mention registered tools, add your own items, mix tools with custom items, or show multi-category drill-down.
218
-
219
- **Tools from model context (default):**
220
-
221
- ```tsx
222
- import { unstable_useMentionAdapter } from "@assistant-ui/react";
223
-
224
- const mention = unstable_useMentionAdapter();
225
- // → { adapter, directive } — spread into <ComposerTriggerPopover {...mention} />
226
- // Default: single "Tools" category reading from toolkit registrations
227
- ```
228
-
229
- **Custom items only (no tools):**
230
-
231
- ```tsx
232
- const mention = unstable_useMentionAdapter({
233
- items: [
234
- { id: "alice", type: "user", label: "Alice", icon: "User" },
235
- { id: "bob", type: "user", label: "Bob", icon: "User" },
236
- ],
237
- });
238
- ```
239
-
240
- **Mix custom items with model-context tools (flat):**
241
-
242
- ```tsx
243
- const mention = unstable_useMentionAdapter({
244
- items: [{ id: "kb", type: "doc", label: "Knowledge Base", icon: "Book" }],
245
- includeModelContextTools: true,
246
- });
247
- ```
248
-
249
- **Multi-category drill-down:**
250
-
251
- ```tsx
252
- const mention = unstable_useMentionAdapter({
253
- categories: [
254
- {
255
- id: "users",
256
- label: "Users",
257
- items: [
258
- { id: "alice", type: "user", label: "Alice", icon: "User" },
259
- { id: "bob", type: "user", label: "Bob", icon: "User" },
260
- ],
261
- },
262
- {
263
- id: "files",
264
- label: "Files",
265
- items: [
266
- { id: "readme", type: "file", label: "README.md", icon: "FileText" },
267
- ],
268
- },
269
- ],
270
- // Tools auto-appended as their own category (default id "tools", label "Tools")
271
- includeModelContextTools: true,
272
- });
273
- ```
274
-
275
- **Tool formatting and category override:**
276
-
277
- ```tsx
278
- const mention = unstable_useMentionAdapter({
279
- categories: [{ id: "users", label: "Users", items: [...] }],
280
- includeModelContextTools: {
281
- category: { id: "integrations", label: "Integrations" },
282
- formatLabel: (name) =>
283
- name.replaceAll("_", " ").replace(/\b\w/g, (c) => c.toUpperCase()),
284
- icon: "Wrench",
285
- },
286
- });
287
- ```
288
-
289
- **Options summary:**
290
-
291
- | Option | Type | Behavior |
292
- | --- | --- | --- |
293
- | `items` | `Unstable_Mention[]` | Flat list (ignored when `categories` is set) |
294
- | `categories` | `{id, label, items}[]` | Drill-down groups |
295
- | `includeModelContextTools` | `boolean \| object` | Default: `true` iff neither `items` nor `categories` |
296
- | `formatter` | `Unstable_DirectiveFormatter` | Override directive serialization (default: `unstable_defaultDirectiveFormatter`) |
297
- | `onInserted` | `(item) => void` | Fires after the directive is inserted into the composer |
298
- | `iconMap` | `Record<string, IconComponent>` | Maps `metadata.icon` / category `id` strings to React components |
299
- | `fallbackIcon` | `IconComponent` | Fallback when no entry in `iconMap` matches |
300
-
301
- `icon` on each mention is a shortcut for `metadata.icon` that the picker UI resolves via `iconMap`. Dedup between custom items and model-context tools is by `id` — explicit items win.
302
-
303
- The hook returns `{ adapter, directive, iconMap?, fallbackIcon? }` — spread into `<ComposerTriggerPopover {...mention} />` for one-line wiring. Callers consuming the raw primitives instead destructure: `mention.adapter`, `mention.directive.formatter`, etc.
304
-
305
- ## Directive Format
306
-
307
- When a user selects a mention item, it is serialized into the composer text as a **directive**. The default format is:
308
-
309
- ```
310
- :type[label]{name=id}
311
- ```
312
-
313
- For example, selecting a tool named "get_weather" with label "Get Weather" produces:
314
-
315
- ```
316
- :tool[Get Weather]{name=get_weather}
317
- ```
318
-
319
- When `id` equals `label`, the `{name=…}` attribute is omitted for brevity:
320
-
321
- ```
322
- :tool[search]
323
- ```
324
-
325
- ### Custom Formatter
326
-
327
- Implement `Unstable_DirectiveFormatter` to use a different format:
328
-
329
- ```ts
330
- import type { Unstable_DirectiveFormatter } from "@assistant-ui/react";
331
-
332
- const slashFormatter: Unstable_DirectiveFormatter = {
333
- serialize(item) {
334
- return `/${item.id}`;
335
- },
336
-
337
- parse(text) {
338
- const segments = [];
339
- const re = /\/(\w+)/g;
340
- let lastIndex = 0;
341
- let match;
342
-
343
- while ((match = re.exec(text)) !== null) {
344
- if (match.index > lastIndex) {
345
- segments.push({ kind: "text" as const, text: text.slice(lastIndex, match.index) });
346
- }
347
- segments.push({
348
- kind: "mention" as const,
349
- type: "tool",
350
- label: match[1]!,
351
- id: match[1]!,
352
- });
353
- lastIndex = re.lastIndex;
354
- }
355
-
356
- if (lastIndex < text.length) {
357
- segments.push({ kind: "text" as const, text: text.slice(lastIndex) });
358
- }
359
-
360
- return segments;
361
- },
362
- };
363
- ```
364
-
365
- Pass it to the trigger's `Directive` sub-primitive and the message renderer:
366
-
367
- ```tsx
368
- // Composer
369
- <ComposerPrimitive.Unstable_TriggerPopover
370
- char="@"
371
- adapter={adapter}
372
- >
373
- <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={slashFormatter} />
374
- ...
375
- </ComposerPrimitive.Unstable_TriggerPopover>
376
-
377
- // User messages
378
- const SlashDirectiveText = createDirectiveText(slashFormatter);
379
- <MessagePrimitive.Parts components={{ Text: SlashDirectiveText }} />
380
- ```
381
-
382
- ## Textarea vs Lexical
383
-
384
- The mention system supports two input modes:
385
-
386
- | | Textarea (default) | Lexical |
387
- | --- | --- | --- |
388
- | **Input component** | `ComposerPrimitive.Input` | `LexicalComposerInput` |
389
- | **Mention display in composer** | Raw directive text (`:tool[Label]`) | Inline chips (atomic nodes) |
390
- | **Dependencies** | None | `@assistant-ui/react-lexical`, `lexical`, `@lexical/react` |
391
- | **Best for** | Simple setups, minimal bundle | Rich editing, polished UX |
392
-
393
- With **textarea**, selecting a mention inserts the directive string directly into the text. The user sees `:tool[Get Weather]{name=get_weather}` in the input.
394
-
395
- With **Lexical**, selected mentions appear as styled inline chips that behave as atomic units — they can be selected, deleted, and undone as a whole. The underlying text still uses the directive format.
396
-
397
- ```tsx
398
- import { LexicalComposerInput } from "@assistant-ui/react-lexical";
399
-
400
- <ComposerPrimitive.Unstable_TriggerPopoverRoot>
401
- <ComposerPrimitive.Root>
402
- <LexicalComposerInput placeholder="Type @ to mention..." />
403
- <ComposerPrimitive.Send />
404
- <ComposerPrimitive.Unstable_TriggerPopover
405
- char="@"
406
- adapter={adapter}
407
- >
408
- <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />
409
- ...
410
- </ComposerPrimitive.Unstable_TriggerPopover>
411
- </ComposerPrimitive.Root>
412
- </ComposerPrimitive.Unstable_TriggerPopoverRoot>
413
- ```
414
-
415
- `LexicalComposerInput` automatically discovers every `Directive` trigger registered under `TriggerPopoverRoot` and renders their selections as inline chips.
416
-
417
- ### Custom Lexical Plugins
418
-
419
- Children of `LexicalComposerInput` render inside the `LexicalComposer` context after the built-in plugins, so standard Lexical plugin components built on `useLexicalComposerContext` work for editor concerns the mention system does not cover, such as paste normalization or length limits. Custom plugins import Lexical APIs directly, so install `lexical` and `@lexical/react` as direct dependencies of your app. The example below registers an update listener that flags messages over a maximum length.
420
-
421
- ```tsx
422
- import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
423
- import { useEffect } from "react";
424
- import { $getRoot } from "lexical";
425
-
426
- function MaxLengthPlugin({ maxLength }: { maxLength: number }) {
427
- const [editor] = useLexicalComposerContext();
428
-
429
- useEffect(() => {
430
- return editor.registerUpdateListener(({ editorState }) => {
431
- editorState.read(() => {
432
- if ($getRoot().getTextContent().length > maxLength) {
433
- console.warn(`Message exceeds ${maxLength} characters`);
434
- }
435
- });
436
- });
437
- }, [editor, maxLength]);
438
-
439
- return null;
440
- }
441
-
442
- <LexicalComposerInput placeholder="Ask anything...">
443
- <MaxLengthPlugin maxLength={2000} />
444
- </LexicalComposerInput>
445
- ```
446
-
447
- ## Rendering Mentions in Messages
448
-
449
- Use `DirectiveText` as the `Text` component for user messages so directives render as inline chips instead of raw syntax. See the [Directive Text](/docs/ui/directive-text) guide for setup and customization.
450
-
451
- ## Processing Mentions on the Backend
452
-
453
- The message text arrives at your backend with directives inline. Parse them to extract mentioned items:
454
-
455
- ```ts
456
- // Default format: :type[label]{name=id}
457
- const DIRECTIVE_RE = /:([\w-]+)\[([^\]]+)\](?:\{name=([^}]+)\})?/g;
458
-
459
- function parseMentions(text: string) {
460
- const mentions = [];
461
- let match;
462
- while ((match = DIRECTIVE_RE.exec(text)) !== null) {
463
- mentions.push({
464
- type: match[1], // e.g. "tool"
465
- label: match[2], // e.g. "Get Weather"
466
- id: match[3] ?? match[2], // e.g. "get_weather"
467
- });
468
- }
469
- return mentions;
470
- }
471
-
472
- // Example:
473
- // parseMentions("Use :tool[Get Weather]{name=get_weather} to check")
474
- // → [{ type: "tool", label: "Get Weather", id: "get_weather" }]
475
- ```
476
-
477
- You can use the extracted mentions to:
478
- - Force-enable specific tools for the LLM call
479
- - Add context about mentioned users or documents to the system prompt
480
- - Log which tools users request most often
481
-
482
- ## Reading Mention State
483
-
484
- Use `unstable_useTriggerPopoverScopeContext` inside the `TriggerPopover` to programmatically access the popover state for that trigger:
485
-
486
- ```tsx
487
- import { unstable_useTriggerPopoverScopeContext } from "@assistant-ui/react";
488
-
489
- function MyPopoverContent() {
490
- const scope = unstable_useTriggerPopoverScopeContext();
491
-
492
- // scope.open — whether the popover is visible
493
- // scope.query — current search text after the trigger
494
- // scope.categories — filtered category list
495
- // scope.items — filtered item list
496
- // scope.highlightedIndex — keyboard-navigated index
497
- // scope.isSearchMode — true when global search is active
498
- // scope.selectItem(item) — programmatically select an item
499
- // scope.close() — close the popover
500
-
501
- return null;
502
- }
503
- ```
504
-
505
- This hook must be used inside a `ComposerPrimitive.Unstable_TriggerPopover`.
506
-
507
- To iterate every registered trigger (e.g. from a custom input implementation), use `unstable_useTriggerPopoverTriggers` inside `TriggerPopoverRoot`.
508
-
509
- ## Building a Custom Popover
510
-
511
- Use the trigger popover primitives to build a fully custom popover:
512
-
513
- ```tsx
514
- <ComposerPrimitive.Unstable_TriggerPopoverRoot>
515
- <ComposerPrimitive.Root>
516
- <ComposerPrimitive.Input />
517
-
518
- <ComposerPrimitive.Unstable_TriggerPopover
519
- char="@"
520
- adapter={adapter}
521
- className="popover"
522
- >
523
- <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />
524
-
525
- <ComposerPrimitive.Unstable_TriggerPopoverBack>
526
- ← Back
527
- </ComposerPrimitive.Unstable_TriggerPopoverBack>
528
-
529
- <ComposerPrimitive.Unstable_TriggerPopoverCategories>
530
- {(categories) =>
531
- categories.map((cat) => (
532
- <ComposerPrimitive.Unstable_TriggerPopoverCategoryItem
533
- key={cat.id}
534
- categoryId={cat.id}
535
- >
536
- {cat.label}
537
- </ComposerPrimitive.Unstable_TriggerPopoverCategoryItem>
538
- ))
539
- }
540
- </ComposerPrimitive.Unstable_TriggerPopoverCategories>
541
-
542
- <ComposerPrimitive.Unstable_TriggerPopoverItems>
543
- {(items) =>
544
- items.map((item) => (
545
- <ComposerPrimitive.Unstable_TriggerPopoverItem
546
- key={item.id}
547
- item={item}
548
- >
549
- {item.label}
550
- </ComposerPrimitive.Unstable_TriggerPopoverItem>
551
- ))
552
- }
553
- </ComposerPrimitive.Unstable_TriggerPopoverItems>
554
- </ComposerPrimitive.Unstable_TriggerPopover>
555
-
556
- <ComposerPrimitive.Send />
557
- </ComposerPrimitive.Root>
558
- </ComposerPrimitive.Unstable_TriggerPopoverRoot>
559
- ```
560
-
561
- ### Primitives Reference
562
-
563
- See the [Composer Primitives](/docs/primitives/composer) reference for the full list of trigger popover primitives and their props.
564
-
565
- ## Combining with Slash Commands
566
-
567
- Mentions and slash commands coexist on the same composer. See [Combining Slash Commands and Mentions](/docs/guides/slash-commands#combining-with-mentions) for the full pattern.
568
-
569
- ## Related
570
-
571
- - [ComposerTriggerPopover UI Component](/docs/ui/composer-trigger-popover) — pre-built shadcn component
572
- - [DirectiveText UI Component](/docs/ui/directive-text) — renders mention chips in user messages
573
- - [Slash Commands Guide](/docs/guides/slash-commands) — `/` command system built on the same architecture
574
- - [Tools Guide](/docs/tools/defining-tools) — register tools that appear in the mention picker
575
- - [Composer Primitives](/docs/primitives/composer) — underlying composer primitives