@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,92 +0,0 @@
1
- ---
2
- title: "Mermaid Diagrams"
3
- description: Render Mermaid diagrams in chat messages with streaming support.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { MermaidSample } from "@/components/pages/docs/samples/mermaid";
8
-
9
- <MermaidSample />
10
-
11
- ## Getting Started
12
-
13
- <Steps>
14
- <Step>
15
-
16
- ### Add `mermaid-diagram` component
17
-
18
- <InstallCommand shadcn={["mermaid-diagram"]} />
19
-
20
- This will install the required dependencies and add the component to your project.
21
-
22
- </Step>
23
- <Step>
24
-
25
- ### Add it to `componentsByLanguage` in `markdown-text.tsx`
26
-
27
- ```tsx title="/components/assistant-ui/markdown-text.tsx"
28
- import { MermaidDiagram } from "@/components/assistant-ui/mermaid-diagram"; // [!code ++]
29
-
30
- const MarkdownTextImpl = () => {
31
- return (
32
- <MarkdownTextPrimitive
33
- remarkPlugins={[remarkGfm]}
34
- className="aui-md"
35
- components={defaultComponents}
36
- componentsByLanguage={{ // [!code ++]
37
- mermaid: { // [!code ++]
38
- SyntaxHighlighter: MermaidDiagram // [!code ++]
39
- }, // [!code ++]
40
- }} // [!code ++]
41
- />
42
- );
43
- };
44
-
45
- export const MarkdownText = memo(MarkdownTextImpl);
46
- ```
47
-
48
- </Step>
49
- </Steps>
50
-
51
- ## Configuration
52
-
53
- Configure rendering options in `mermaid-diagram.tsx`:
54
-
55
- ```tsx title="/components/assistant-ui/mermaid-diagram.tsx"
56
- renderMermaidSVG(code, {
57
- bg: "var(--background)",
58
- fg: "var(--foreground)",
59
- muted: "var(--muted-foreground)",
60
- border: "var(--border)",
61
- accent: "var(--foreground)",
62
- transparent: true,
63
- });
64
- ```
65
-
66
- The palette follows your theme's background, foreground, and shadcn color tokens, so diagrams match light and dark mode automatically.
67
-
68
- ## Streaming Performance
69
-
70
- The `MermaidDiagram` component is optimized for streaming scenarios:
71
-
72
- - **Skeleton while streaming**: Shows a placeholder skeleton until the response finishes streaming, then renders the diagram synchronously
73
- - **Raw source fallback**: Invalid or unsupported diagrams fall back to displaying the raw source
74
-
75
-
76
- ## Supported Diagram Types
77
-
78
- The component renders these diagram types:
79
-
80
- - Flowcharts and decision trees
81
- - Sequence diagrams
82
- - Class diagrams
83
- - State diagrams
84
- - Entity relationship diagrams
85
- - XY charts (bar, line, combined)
86
-
87
- Other mermaid diagram types fall back to displaying the raw source. See the [Mermaid documentation](https://mermaid.js.org/) for syntax reference.
88
-
89
- ## Related Components
90
-
91
- - [Markdown](/docs/ui/markdown) - Rich text rendering where mermaid is integrated
92
- - [Syntax Highlighting](/docs/ui/syntax-highlighting) - Code highlighting for other languages
@@ -1,93 +0,0 @@
1
- ---
2
- title: Message Timing
3
- description: Display streaming performance stats — TTFT, total time, tok/s, and chunk count — as a badge with hover popover.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { MessageTimingSample } from "@/components/pages/docs/samples/message-timing";
8
-
9
- <MessageTimingSample />
10
-
11
- <Callout type="warn">
12
- This component is experimental. The API and displayed metrics may change in future versions. When used with the Vercel AI SDK, token counts and tok/s are **estimated** client-side and may be inaccurate — see [Accuracy](#accuracy) below.
13
- </Callout>
14
-
15
- ## Getting Started
16
-
17
- <Steps>
18
- <Step>
19
-
20
- ### Add `message-timing`
21
-
22
- <InstallCommand shadcn={["message-timing"]} />
23
-
24
- This adds a `/components/assistant-ui/message-timing.tsx` file to your project.
25
-
26
- </Step>
27
- <Step>
28
-
29
- ### Use in your application
30
-
31
- Place `MessageTiming` inside `ActionBarPrimitive.Root` in your `thread.tsx`. It will inherit the action bar's auto-hide behaviour and only renders after the stream completes.
32
-
33
- ```tsx title="/components/assistant-ui/thread.tsx" {2,12}
34
- import { ActionBarPrimitive } from "@assistant-ui/react";
35
- import { MessageTiming } from "@/components/assistant-ui/message-timing";
36
-
37
- const AssistantActionBar: FC = () => {
38
- return (
39
- <ActionBarPrimitive.Root
40
- hideWhenRunning
41
- autohide="not-last"
42
- >
43
- <ActionBarPrimitive.Copy />
44
- <ActionBarPrimitive.Reload />
45
- <MessageTiming />
46
- </ActionBarPrimitive.Root>
47
- );
48
- };
49
- ```
50
-
51
- </Step>
52
- </Steps>
53
-
54
- ## What It Shows
55
-
56
- The badge displays `totalStreamTime` inline and reveals a popover on hover with the full breakdown:
57
-
58
- | Metric | Description |
59
- |--------|-------------|
60
- | **First token** | Time from request start to first text chunk (TTFT) |
61
- | **Total** | Total wall-clock time from start to stream end |
62
- | **Speed** | Output tokens per second (hidden for very short messages) |
63
- | **Chunks** | Number of stream chunks received |
64
-
65
- ## Accuracy
66
-
67
- Timing accuracy depends on how your backend is connected.
68
-
69
- ### Data Stream (accurate)
70
-
71
- When using the [Data Stream](/docs/runtimes/custom/data-stream) protocol on the backend (via `assistant-stream`), token counts come directly from the model's usage data sent in `step-finish` chunks. The `tokensPerSecond` metric is exact whenever your backend reports `outputTokens`.
72
-
73
- ### Vercel AI SDK (estimated)
74
-
75
- When using the AI SDK integration (`useChatRuntime`), token counts are **estimated** client-side using a 4 characters per token approximation. This can overcount significantly for short messages.
76
-
77
- ## API Reference
78
-
79
- ### `MessageTiming` component
80
-
81
- | Prop | Type | Default | Description |
82
- |------|------|---------|-------------|
83
- | `className` | `string` | — | Additional class names on the root element |
84
- | `side` | `"top" \| "right" \| "bottom" \| "left"` | `"right"` | Side of the tooltip relative to the badge |
85
-
86
- Renders `null` until `totalStreamTime` is available (i.e., while streaming or for user messages).
87
-
88
- For the underlying `useMessageTiming()` hook, field definitions, and runtime-specific setup (LocalRuntime, ExternalStore, etc.), see the [Message Timing guide](/docs/guides/message-timing).
89
-
90
- ## Related
91
-
92
- - [Message Timing guide](/docs/guides/message-timing) — `useMessageTiming()` hook, runtime support table, and custom timing UI
93
- - [Thread](/docs/ui/thread) — The action bar context that `MessageTiming` is typically placed inside
@@ -1,455 +0,0 @@
1
- ---
2
- title: Model Selector
3
- description: Composable model picker with reasoning effort levels, search, and runtime integration.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { ModelSelectorSample } from "@/components/pages/docs/samples/model-selector";
8
- import * as ModelSelectorRadixSamples from "@/components/pages/docs/samples/model-selector.radix";
9
- import { Flavored, FlavorSwitcher } from "@/components/pages/docs/contexts/flavor.server";
10
-
11
- A picker that lets users switch between AI models and choose a reasoning effort (thinking) level. It is built on Popover + Command, so search, provider grouping, and filtering compose in without being built in. The default export integrates with assistant-ui's `ModelContext` system, so the selection reaches your backend on every request with no extra wiring.
12
-
13
- <FlavorSwitcher />
14
-
15
- <Flavored radix={<ModelSelectorRadixSamples.ModelSelectorSample />} base={<ModelSelectorSample />} />
16
-
17
- ## Getting Started
18
-
19
- <Steps>
20
- <Step>
21
-
22
- ### Add `model-selector`
23
-
24
- <InstallCommand shadcn={["model-selector"]} />
25
-
26
- </Step>
27
- <Step>
28
-
29
- ### Use in your application
30
-
31
- Place the `ModelSelector` inside your thread component, typically in the composer area. Each model needs an `id` and a display `name`; everything else is optional:
32
-
33
- ```tsx title="/components/assistant-ui/thread.tsx" {1,6-15}
34
- import { ModelSelector } from "@/components/assistant-ui/model-selector";
35
-
36
- const ComposerAction: FC = () => {
37
- return (
38
- <div className="flex items-center gap-1">
39
- <ModelSelector
40
- models={[
41
- { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", description: "Fast and efficient" },
42
- { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", description: "Balanced performance" },
43
- { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", description: "Most capable", efforts: true },
44
- ]}
45
- defaultValue="gpt-5.6-luna"
46
- defaultEffort="medium"
47
- size="sm"
48
- />
49
- </div>
50
- );
51
- };
52
- ```
53
-
54
- </Step>
55
- <Step>
56
-
57
- ### Read the selection in your API route
58
-
59
- The selected model's `id` arrives as `config.modelName`, and the effort level as `config.reasoningEffort`:
60
-
61
- ```tsx title="app/api/chat/route.ts" {2,5-11}
62
- export async function POST(req: Request) {
63
- const { messages, config } = await req.json();
64
-
65
- const result = streamText({
66
- model: openai(config?.modelName ?? "gpt-5.6-luna"),
67
- providerOptions: {
68
- openai:
69
- config?.reasoningEffort !== undefined
70
- ? { reasoningEffort: config.reasoningEffort }
71
- : {},
72
- },
73
- messages: await convertToModelMessages(messages),
74
- });
75
-
76
- return result.toUIMessageStreamResponse();
77
- }
78
- ```
79
-
80
- `config.reasoningEffort` is only present when the selected model supports the chosen level, so the route only forwards it when it exists. See [How It Works](#how-it-works).
81
-
82
- </Step>
83
- </Steps>
84
-
85
- ## Reasoning Efforts
86
-
87
- A model that declares `efforts` shows a "Thinking" row at the bottom of the popover. `efforts: true` enables the default Low / Medium / High levels; pass a list of `{ id, name }` objects to define your own:
88
-
89
- ```tsx
90
- {
91
- id: "gpt-5.6-sol",
92
- name: "GPT-5.6 Sol",
93
- efforts: [
94
- { id: "minimal", name: "Minimal" },
95
- { id: "high", name: "High" },
96
- ],
97
- }
98
- ```
99
-
100
- Omit `efforts` for models without configurable reasoning. The row is hidden while such a model is selected.
101
-
102
- ### Sticky Selection
103
-
104
- The effort selection survives model switches. Switching to a model that doesn't support the current level omits `reasoningEffort` from the request instead of resetting the user's choice, and the level applies again when the user switches back. The exported `resolveModelEffort` helper applies the same rule if you build your own runtime integration around `ModelSelector.Root`; see [`resolveModelEffort`](#resolvemodeleffort).
105
-
106
- ### Custom Effort UI
107
-
108
- `ModelSelector.Effort` lays the levels out as horizontal segments, which overflows the popover width once a model has more than a few. For those cases, or for a different layout such as a slider or a sub-dropdown, build your own control with the `useModelSelectorEfforts` hook. It exposes the selected model's levels and the active selection:
109
-
110
- ```tsx
111
- import { useModelSelectorEfforts } from "@/components/assistant-ui/model-selector";
112
- import {
113
- DropdownMenu,
114
- DropdownMenuContent,
115
- DropdownMenuRadioGroup,
116
- DropdownMenuRadioItem,
117
- DropdownMenuTrigger,
118
- } from "@/components/ui/dropdown-menu";
119
-
120
- function EffortDropdown() {
121
- const { efforts, effort, setEffort } = useModelSelectorEfforts();
122
- if (!efforts?.length) return null;
123
-
124
- return (
125
- <div className="flex items-center justify-between gap-3 border-t px-3 py-2">
126
- <span className="text-muted-foreground text-xs">Thinking</span>
127
- <DropdownMenu>
128
- <DropdownMenuTrigger className="text-xs">
129
- {efforts.find((e) => e.id === effort)?.name ?? "Select"}
130
- </DropdownMenuTrigger>
131
- <DropdownMenuContent align="end">
132
- <DropdownMenuRadioGroup value={effort} onValueChange={setEffort}>
133
- {efforts.map((option) => (
134
- <DropdownMenuRadioItem key={option.id} value={option.id}>
135
- {option.name}
136
- </DropdownMenuRadioItem>
137
- ))}
138
- </DropdownMenuRadioGroup>
139
- </DropdownMenuContent>
140
- </DropdownMenu>
141
- </div>
142
- );
143
- }
144
- ```
145
-
146
- Render it inside `ModelSelector.Content` in place of `ModelSelector.Effort`. The same hook supports any shape that reads the levels and writes the selection.
147
-
148
- ## Provider Logos
149
-
150
- Each model's `icon` accepts any `ReactNode` and renders in the trigger and the dropdown items. The optional `logos` registry item ships `OpenAILogo`, `ClaudeLogo`, and `GeminiLogo` marks to plug in:
151
-
152
- <InstallCommand shadcn={["logos"]} />
153
-
154
- ```tsx
155
- import { ClaudeLogo, GeminiLogo, OpenAILogo } from "@/components/assistant-ui/logos";
156
-
157
- <ModelSelector
158
- models={[
159
- { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", icon: <OpenAILogo /> },
160
- { id: "claude-opus-4.5", name: "Claude Opus 4.5", icon: <ClaudeLogo /> },
161
- { id: "gemini-3-pro", name: "Gemini 3 Pro", icon: <GeminiLogo /> },
162
- ]}
163
- />;
164
- ```
165
-
166
- Icons are opt-in per model — omit `icon` and the entry renders text-only.
167
-
168
- ## Search
169
-
170
- Search is opt-in. Pass `searchable` to the default component:
171
-
172
- ```tsx
173
- <ModelSelector models={models} searchable />
174
- ```
175
-
176
- The same prop works on `ModelSelector.Content` when it renders its default children. Or compose `ModelSelector.Search` into a custom layout. Matching runs against each model's `id`, `name`, and `keywords`; add the provider name to `keywords` so typing "openai" finds its models.
177
-
178
- ## Composition
179
-
180
- All parts are exported individually. The default popover content is `List` + `Effort`; replace it to add search, provider groups, or anything else:
181
-
182
- ```tsx
183
- import {
184
- ModelSelectorRoot,
185
- ModelSelectorTrigger,
186
- ModelSelectorContent,
187
- ModelSelectorSearch,
188
- ModelSelectorList,
189
- ModelSelectorEmpty,
190
- ModelSelectorGroup,
191
- ModelSelectorItem,
192
- ModelSelectorEffort,
193
- } from "@/components/assistant-ui/model-selector";
194
-
195
- <ModelSelectorRoot
196
- models={models}
197
- value={modelId}
198
- onValueChange={setModelId}
199
- effort={effort}
200
- onEffortChange={setEffort}
201
- >
202
- <ModelSelectorTrigger variant="outline" />
203
- <ModelSelectorContent>
204
- <ModelSelectorSearch placeholder="Search models..." />
205
- <ModelSelectorList>
206
- <ModelSelectorEmpty />
207
- <ModelSelectorGroup heading="OpenAI">
208
- {openaiModels.map((model) => (
209
- <ModelSelectorItem key={model.id} model={model} />
210
- ))}
211
- </ModelSelectorGroup>
212
- <ModelSelectorGroup heading="Anthropic">
213
- {anthropicModels.map((model) => (
214
- <ModelSelectorItem key={model.id} model={model} />
215
- ))}
216
- </ModelSelectorGroup>
217
- </ModelSelectorList>
218
- <ModelSelectorEffort label="Thinking" />
219
- </ModelSelectorContent>
220
- </ModelSelectorRoot>
221
- ```
222
-
223
- | Component | Description |
224
- |-----------|-------------|
225
- | `ModelSelector` | Default export with runtime integration |
226
- | `ModelSelector.Root` | Presentational root (no runtime, controlled state) |
227
- | `ModelSelector.Trigger` | CVA-styled trigger showing the current selection |
228
- | `ModelSelector.Value` | Selected model name, icon, and active effort |
229
- | `ModelSelector.Content` | Popover content wrapping a Command |
230
- | `ModelSelector.Search` | Search input that filters the list |
231
- | `ModelSelector.FocusAnchor` | Visually hidden input that anchors keyboard navigation when there is no search box |
232
- | `ModelSelector.List` | List of model items (renders all models by default) |
233
- | `ModelSelector.Empty` | Empty state shown when search has no matches |
234
- | `ModelSelector.Group` | Labeled group of items (e.g. by provider) |
235
- | `ModelSelector.Separator` | Divider between groups or items |
236
- | `ModelSelector.Item` | Individual model option |
237
- | `ModelSelector.Effort` | Thinking level row for the selected model |
238
-
239
- `ModelSelector.List` is a Command list, so filtering and keyboard navigation work across groups automatically. Custom sorting is plain code: order the models before rendering items.
240
-
241
- Keyboard navigation needs a focused input to drive it. When content is unfiltered (`searchable={false}` on `ModelSelector.Content`, or the default children), `ModelSelector.Content` renders a visually hidden `ModelSelector.FocusAnchor` automatically, so custom layouts without a search box stay keyboard-operable. In a custom layout that renders neither `ModelSelector.Search` nor `searchable={false}`, place `ModelSelector.FocusAnchor` yourself to keep the list reachable from the keyboard.
242
-
243
- <Callout type="warn">
244
- `ModelSelector.Content` wraps a Command whose root keydown handler claims
245
- <Kbd>Enter</Kbd> to select the highlighted model and the arrow keys to move
246
- through the list. Interactive elements composed inside it (filter chips,
247
- custom effort controls) should stop propagation for the keys they handle in
248
- their own `onKeyDown` so the focused control responds instead.
249
- `ModelSelector.Effort` does this for <Kbd>Home</Kbd> / <Kbd>End</Kbd> (which
250
- cmdk would otherwise use to jump to the first / last model), lets its
251
- radiogroup own <Kbd>ArrowLeft</Kbd> / <Kbd>ArrowRight</Kbd>, and hands
252
- <Kbd>ArrowUp</Kbd> / <Kbd>ArrowDown</Kbd> back to the model list by
253
- refocusing cmdk's input, so the highlight only moves while a following
254
- <Kbd>Enter</Kbd> can act on it.
255
- </Callout>
256
-
257
- ## Variants
258
-
259
- Use the `variant` prop to change the trigger's visual style.
260
-
261
- ```tsx
262
- <ModelSelector variant="outline" /> // Border (default)
263
- <ModelSelector variant="ghost" /> // No background
264
- <ModelSelector variant="muted" /> // Solid background
265
- ```
266
-
267
- | Variant | Description |
268
- | --------- | ---------------------------------------------- |
269
- | `outline` | Border with transparent background (default) |
270
- | `ghost` | No background, subtle hover |
271
- | `muted` | Solid secondary background |
272
-
273
- ## Sizes
274
-
275
- Use the `size` prop to control the trigger dimensions.
276
-
277
- ```tsx
278
- <ModelSelector size="sm" /> // Compact (h-8, text-xs)
279
- <ModelSelector size="default" /> // Standard (h-9)
280
- <ModelSelector size="lg" /> // Large (h-10)
281
- ```
282
-
283
- ## Keyboard Navigation
284
-
285
- The picker is fully operable from the keyboard, including when search is disabled.
286
-
287
- | Key | Action |
288
- | --- | --- |
289
- | <Kbd>ArrowDown</Kbd> / <Kbd>ArrowUp</Kbd> | Open the popover from the focused trigger; move between models once open, returning focus to the list from the Thinking row |
290
- | <Kbd>Enter</Kbd> | Select the highlighted model and close |
291
- | <Kbd>Escape</Kbd> | Close the popover and return focus to the trigger |
292
- | <Kbd>Tab</Kbd> | Move from the model list to the Thinking row |
293
- | <Kbd>ArrowLeft</Kbd> / <Kbd>ArrowRight</Kbd> | Move between reasoning effort levels (Thinking row) |
294
- | <Kbd>Home</Kbd> / <Kbd>End</Kbd> | Jump to the first / last model (list) or effort level (Thinking row) |
295
-
296
- When `searchable` is set, typing filters the list; otherwise the keys above drive selection directly.
297
-
298
- ## Accessibility
299
-
300
- The picker implements the WAI-ARIA combobox pattern over Popover + Command.
301
-
302
- - The trigger is `role="combobox"` with `aria-haspopup="listbox"`; the popover primitive manages `aria-expanded` and `aria-controls`.
303
- - The model list is a Command (cmdk) listbox: each item is `role="option"` with `aria-selected`, and the active item is tracked with `aria-activedescendant`.
304
- - Keyboard navigation works without a visible search box: `ModelSelector.Content` renders a visually hidden input (`ModelSelector.FocusAnchor`) that anchors cmdk's focus so the list stays reachable. Pass `searchable` to surface a real search input instead.
305
- - The Thinking row (`ModelSelector.Effort`) is a `role="radiogroup"` of `role="radio"` toggles with roving tabindex, so it is a single tab stop and <Kbd>ArrowLeft</Kbd> / <Kbd>ArrowRight</Kbd> move focus and select in one step. <Kbd>ArrowUp</Kbd> / <Kbd>ArrowDown</Kbd> return focus to the model list.
306
-
307
- ## How It Works
308
-
309
- The default `ModelSelector` export registers the selection with assistant-ui's `ModelContext` system:
310
-
311
- 1. The component calls `aui.modelContext.register()` with `config.modelName`, plus `config.reasoningEffort` when the selected model supports the chosen level
312
- 2. The `AssistantChatTransport` includes `config` in the request body of every chat request
313
- 3. Your API route reads `config.modelName` and `config.reasoningEffort`
314
-
315
- This works out of the box with `@assistant-ui/ai-sdk`. `ModelSelector.Root` performs no registration; it is purely presentational, with controlled and uncontrolled props for the value, effort, and open state.
316
-
317
- ## API Reference
318
-
319
- ### ModelSelector
320
-
321
- <ParametersTable
322
- type="ModelSelectorProps"
323
- parameters={[
324
- {
325
- name: "models",
326
- type: "ModelOption[]",
327
- required: true,
328
- description: "Array of available models to display.",
329
- },
330
- {
331
- name: "defaultValue",
332
- type: "string",
333
- description: "Initial model ID for uncontrolled usage. Defaults to the first model, captured on first render; if models loads asynchronously, control the value instead.",
334
- },
335
- {
336
- name: "value",
337
- type: "string",
338
- description: "Controlled selected model ID.",
339
- },
340
- {
341
- name: "onValueChange",
342
- type: "(value: string) => void",
343
- description: "Callback when selected model changes.",
344
- },
345
- {
346
- name: "defaultEffort",
347
- type: "string",
348
- description: "Initial effort level ID for uncontrolled usage.",
349
- },
350
- {
351
- name: "effort",
352
- type: "string",
353
- description: "Controlled effort level ID.",
354
- },
355
- {
356
- name: "onEffortChange",
357
- type: "(effort: string) => void",
358
- description: "Callback when effort level changes.",
359
- },
360
- {
361
- name: "searchable",
362
- type: "boolean",
363
- default: "false",
364
- description: "Render a search input above the model list.",
365
- },
366
- {
367
- name: "variant",
368
- type: '"outline" | "ghost" | "muted"',
369
- default: '"outline"',
370
- description: "Visual style of the trigger button.",
371
- },
372
- {
373
- name: "size",
374
- type: '"sm" | "default" | "lg"',
375
- default: '"default"',
376
- description: "Size of the trigger button.",
377
- },
378
- {
379
- name: "align",
380
- type: '"start" | "center" | "end"',
381
- default: '"start"',
382
- description: "Alignment of the dropdown relative to the trigger.",
383
- },
384
- {
385
- name: "contentClassName",
386
- type: "string",
387
- description: "Additional class name for the dropdown content.",
388
- },
389
- ]}
390
- />
391
-
392
- ### ModelOption
393
-
394
- <ParametersTable
395
- type="ModelOption"
396
- parameters={[
397
- {
398
- name: "id",
399
- type: "string",
400
- required: true,
401
- description: "Unique identifier sent to the backend as modelName.",
402
- },
403
- {
404
- name: "name",
405
- type: "string",
406
- required: true,
407
- description: "Display name shown in trigger and dropdown.",
408
- },
409
- {
410
- name: "description",
411
- type: "string",
412
- description: "Optional subtitle shown below the model name.",
413
- },
414
- {
415
- name: "icon",
416
- type: "React.ReactNode",
417
- description: "Optional icon displayed before the model name.",
418
- },
419
- {
420
- name: "disabled",
421
- type: "boolean",
422
- description: "Disable selection of this model.",
423
- },
424
- {
425
- name: "keywords",
426
- type: "string[]",
427
- description: "Extra search terms matched by ModelSelector.Search (e.g. the provider name).",
428
- },
429
- {
430
- name: "efforts",
431
- type: "boolean | ModelSelectorEffortOption[]",
432
- description: "Reasoning effort levels. true enables the default Low/Medium/High; pass a custom { id, name } list to override. Omit for models without configurable reasoning.",
433
- },
434
- ]}
435
- />
436
-
437
- ### `useModelSelectorEfforts`
438
-
439
- ```tsx
440
- const { efforts, effort, setEffort } = useModelSelectorEfforts();
441
- ```
442
-
443
- The selected model's effort levels and the active selection, for building a [custom effort UI](#custom-effort-ui) inside `ModelSelector.Content`. `efforts` is `undefined` for models without configurable reasoning.
444
-
445
- ### `resolveModelEffort`
446
-
447
- ```tsx
448
- resolveModelEffort(models, modelId, effort); // => string | undefined
449
- ```
450
-
451
- Returns the effort ID when the given model supports it, otherwise `undefined`. This is the [sticky selection](#sticky-selection) rule the default component applies before registering the selection.
452
-
453
- ## Related
454
-
455
- - [Model Context](/docs/copilots/model-context): How registered context (instructions, tools, config) reaches your backend