@assistant-ui/mcp-docs-server 0.1.29 → 0.1.31

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 (214) hide show
  1. package/.docs/organized/code-examples/waterfall.md +15 -7
  2. package/.docs/organized/code-examples/with-a2a.md +9 -21
  3. package/.docs/organized/code-examples/with-ag-ui.md +11 -8
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +10 -10
  5. package/.docs/organized/code-examples/with-artifacts.md +12 -10
  6. package/.docs/organized/code-examples/with-assistant-transport.md +11 -12
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +83 -54
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +14 -11
  9. package/.docs/organized/code-examples/with-cloud.md +9 -10
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +61 -16
  11. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -12
  12. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +13 -13
  13. package/.docs/organized/code-examples/with-expo.md +25 -21
  14. package/.docs/organized/code-examples/with-external-store.md +8 -8
  15. package/.docs/organized/code-examples/with-ffmpeg.md +17 -12
  16. package/.docs/organized/code-examples/with-generative-ui.md +9 -9
  17. package/.docs/organized/code-examples/with-google-adk.md +8 -8
  18. package/.docs/organized/code-examples/with-heat-graph.md +5 -5
  19. package/.docs/organized/code-examples/with-interactables.md +10 -25
  20. package/.docs/organized/code-examples/with-langchain.md +437 -0
  21. package/.docs/organized/code-examples/with-langgraph.md +16 -16
  22. package/.docs/organized/code-examples/with-livekit.md +18 -13
  23. package/.docs/organized/code-examples/with-opencode.md +105 -62
  24. package/.docs/organized/code-examples/with-parent-id-grouping.md +10 -10
  25. package/.docs/organized/code-examples/with-react-hook-form.md +220 -148
  26. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  27. package/.docs/organized/code-examples/with-react-router.md +12 -12
  28. package/.docs/organized/code-examples/with-store.md +8 -5
  29. package/.docs/organized/code-examples/with-tanstack.md +10 -10
  30. package/.docs/organized/code-examples/with-tap-runtime.md +10 -6
  31. package/.docs/raw/docs/(docs)/cli.mdx +2 -1
  32. package/.docs/raw/docs/(docs)/copilots/assistant-frame.mdx +1 -0
  33. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +10 -3
  34. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +8 -3
  35. package/.docs/raw/docs/(docs)/copilots/make-assistant-visible.mdx +1 -0
  36. package/.docs/raw/docs/(docs)/copilots/model-context.mdx +1 -0
  37. package/.docs/raw/docs/(docs)/copilots/motivation.mdx +1 -0
  38. package/.docs/raw/docs/(docs)/copilots/use-assistant-instructions.mdx +1 -0
  39. package/.docs/raw/docs/(docs)/devtools.mdx +1 -0
  40. package/.docs/raw/docs/(docs)/index.mdx +1 -0
  41. package/.docs/raw/docs/(docs)/installation.mdx +1 -0
  42. package/.docs/raw/docs/(docs)/rtl.mdx +80 -0
  43. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +34 -0
  44. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +41 -0
  45. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +26 -0
  46. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +34 -0
  47. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +31 -0
  48. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +20 -0
  49. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +26 -0
  50. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +72 -0
  51. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +41 -0
  52. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +48 -0
  53. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +30 -0
  54. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +23 -0
  55. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +21 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +7 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +149 -40
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +65 -0
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +2 -0
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
  61. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
  62. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
  63. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
  64. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +9 -0
  65. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
  66. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +231 -3
  67. package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
  68. package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
  69. package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
  70. package/.docs/raw/docs/guides/branching.mdx +76 -0
  71. package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
  72. package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
  73. package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
  74. package/.docs/raw/docs/guides/editing.mdx +102 -0
  75. package/.docs/raw/docs/guides/index.mdx +103 -0
  76. package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
  77. package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
  78. package/.docs/raw/docs/guides/mentions.mdx +520 -0
  79. package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
  80. package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
  81. package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
  82. package/.docs/raw/docs/guides/slash-commands.mdx +361 -0
  83. package/.docs/raw/docs/guides/speech.mdx +156 -0
  84. package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
  85. package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
  86. package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
  87. package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
  88. package/.docs/raw/docs/ink/index.mdx +1 -3
  89. package/.docs/raw/docs/ink/migration.mdx +1 -3
  90. package/.docs/raw/docs/ink/primitives.mdx +37 -1
  91. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
  92. package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
  93. package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
  94. package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
  95. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
  96. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
  97. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
  98. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
  99. package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
  100. package/.docs/raw/docs/integrations/index.mdx +173 -0
  101. package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
  102. package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
  103. package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
  104. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
  105. package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
  106. package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
  107. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
  108. package/.docs/raw/docs/primitives/attachment.mdx +1 -0
  109. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
  110. package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
  111. package/.docs/raw/docs/primitives/composer.mdx +96 -63
  112. package/.docs/raw/docs/primitives/error.mdx +1 -0
  113. package/.docs/raw/docs/primitives/index.mdx +2 -1
  114. package/.docs/raw/docs/primitives/message.mdx +68 -5
  115. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
  116. package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
  117. package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
  118. package/.docs/raw/docs/primitives/thread.mdx +16 -13
  119. package/.docs/raw/docs/react-native/index.mdx +1 -3
  120. package/.docs/raw/docs/react-native/migration.mdx +1 -3
  121. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
  122. package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
  123. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
  124. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
  125. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
  126. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
  127. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
  128. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
  129. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
  130. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +365 -101
  131. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
  132. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
  133. package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
  134. package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
  135. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
  136. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
  137. package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
  138. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
  139. package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
  140. package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
  141. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
  142. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
  143. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
  144. package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
  145. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
  146. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
  147. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
  148. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
  149. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
  150. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
  151. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
  152. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
  153. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
  154. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
  155. package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
  156. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
  157. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +74 -198
  158. package/.docs/raw/docs/ui/accordion.mdx +1 -0
  159. package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
  160. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
  161. package/.docs/raw/docs/ui/attachment.mdx +1 -0
  162. package/.docs/raw/docs/ui/badge.mdx +1 -0
  163. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +200 -0
  164. package/.docs/raw/docs/ui/context-display.mdx +1 -0
  165. package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
  166. package/.docs/raw/docs/ui/directive-text.mdx +114 -0
  167. package/.docs/raw/docs/ui/file.mdx +1 -0
  168. package/.docs/raw/docs/ui/image.mdx +1 -0
  169. package/.docs/raw/docs/ui/markdown.mdx +2 -14
  170. package/.docs/raw/docs/ui/mermaid.mdx +1 -0
  171. package/.docs/raw/docs/ui/message-timing.mdx +3 -2
  172. package/.docs/raw/docs/ui/model-selector.mdx +1 -0
  173. package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
  174. package/.docs/raw/docs/ui/quote.mdx +1 -0
  175. package/.docs/raw/docs/ui/reasoning.mdx +69 -32
  176. package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
  177. package/.docs/raw/docs/ui/select.mdx +1 -0
  178. package/.docs/raw/docs/ui/sources.mdx +1 -0
  179. package/.docs/raw/docs/ui/streamdown.mdx +1 -0
  180. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
  181. package/.docs/raw/docs/ui/tabs.mdx +1 -0
  182. package/.docs/raw/docs/ui/thread-list.mdx +17 -0
  183. package/.docs/raw/docs/ui/thread.mdx +56 -1
  184. package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
  185. package/.docs/raw/docs/ui/tool-group.mdx +39 -11
  186. package/.docs/raw/docs/ui/voice.mdx +1 -0
  187. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
  188. package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
  189. package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
  190. package/dist/utils/logger.js +1 -1
  191. package/dist/utils/logger.js.map +1 -1
  192. package/package.json +4 -4
  193. package/src/tools/tests/path-traversal.test.ts +1 -1
  194. package/src/utils/logger.ts +1 -1
  195. package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
  196. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
  197. package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
  198. package/.docs/raw/docs/(docs)/guides/mentions.mdx +0 -406
  199. package/.docs/raw/docs/(docs)/guides/slash-commands.mdx +0 -275
  200. package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
  201. package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
  202. package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
  203. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -268
  204. package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
  205. package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
  206. package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
  207. package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
  208. package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -607
  209. package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
  210. package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
  211. package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
  212. package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
  213. package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
  214. package/.docs/raw/docs/ui/mention.mdx +0 -168
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Quote
3
3
  description: Let users select and quote text from messages with a floating toolbar, composer preview, and inline quote display.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { QuoteSample } from "@/components/docs/samples/quote";
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Reasoning
3
3
  description: Collapsible UI for displaying AI reasoning and thinking messages.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { ReasoningSample, ReasoningGroupSample } from "@/components/docs/samples/reasoning";
@@ -23,22 +24,58 @@ This adds a `/components/assistant-ui/reasoning.tsx` file to your project.
23
24
 
24
25
  ### Use in your application
25
26
 
26
- Pass the `Reasoning` and `ReasoningGroup` components to the `MessagePrimitive.Parts` component:
27
+ Previously, reasoning parts were rendered via `components.Reasoning` and grouped via `components.ReasoningGroup` on `MessagePrimitive.Parts`. Both are deprecated; `MessagePrimitive.GroupedParts` is the supported replacement, and the highlighted lines below show the new pieces.
27
28
 
28
- ```tsx title="/app/components/assistant-ui/thread.tsx" {2,10-11}
29
+ Render reasoning parts through `MessagePrimitive.GroupedParts`. Group consecutive reasoning parts with `"group-reasoning"`, then compose `ReasoningRoot`, `ReasoningTrigger`, `ReasoningContent`, and `ReasoningText` around the grouped children.
30
+
31
+ While reasoning is streaming, `part.status.type === "running"`. Pass that to `defaultOpen` so the accordion auto-opens during streaming and lets the user collapse it once the model moves on.
32
+
33
+ ```tsx title="/app/components/assistant-ui/thread.tsx"
29
34
  import { MessagePrimitive } from "@assistant-ui/react";
30
- import { Reasoning } from "@/components/assistant-ui/reasoning";
35
+ import { MarkdownText } from "@/components/assistant-ui/markdown-text";
36
+ import { ToolFallback } from "@/components/assistant-ui/tool-fallback";
37
+ import {
38
+ Reasoning,
39
+ ReasoningContent,
40
+ ReasoningRoot,
41
+ ReasoningText,
42
+ ReasoningTrigger,
43
+ } from "@/components/assistant-ui/reasoning"; // [!code ++]
31
44
 
32
45
  const AssistantMessage: FC = () => {
33
46
  return (
34
47
  <MessagePrimitive.Root className="...">
35
48
  <div className="...">
36
- <MessagePrimitive.Parts>
37
- {({ part }) => {
38
- if (part.type === "reasoning") return <Reasoning {...part} />;
39
- return null;
40
- }}
41
- </MessagePrimitive.Parts>
49
+ <MessagePrimitive.GroupedParts // [!code ++]
50
+ groupBy={(part) => { // [!code ++]
51
+ if (part.type === "reasoning") return ["group-reasoning"]; // [!code ++]
52
+ return null; // [!code ++]
53
+ }} // [!code ++]
54
+ > // [!code ++]
55
+ {({ part, children }) => { // [!code ++]
56
+ switch (part.type) { // [!code ++]
57
+ case "group-reasoning": { // [!code ++]
58
+ const running = part.status.type === "running"; // [!code ++]
59
+ return ( // [!code ++]
60
+ <ReasoningRoot defaultOpen={running}> // [!code ++]
61
+ <ReasoningTrigger active={running} /> // [!code ++]
62
+ <ReasoningContent aria-busy={running}> // [!code ++]
63
+ <ReasoningText>{children}</ReasoningText> // [!code ++]
64
+ </ReasoningContent> // [!code ++]
65
+ </ReasoningRoot> // [!code ++]
66
+ ); // [!code ++]
67
+ } // [!code ++]
68
+ case "text": // [!code ++]
69
+ return <MarkdownText />; // [!code ++]
70
+ case "reasoning": // [!code ++]
71
+ return <Reasoning {...part} />; // [!code ++]
72
+ case "tool-call": // [!code ++]
73
+ return part.toolUI ?? <ToolFallback {...part} />; // [!code ++]
74
+ default: // [!code ++]
75
+ return null; // [!code ++]
76
+ } // [!code ++]
77
+ }} // [!code ++]
78
+ </MessagePrimitive.GroupedParts> // [!code ++]
42
79
  </div>
43
80
  <AssistantActionBar />
44
81
  <BranchPicker className="..." />
@@ -47,6 +84,8 @@ const AssistantMessage: FC = () => {
47
84
  };
48
85
  ```
49
86
 
87
+ `GroupedParts` calls your render function for both group nodes and leaf parts. The `case "group-reasoning"` branch renders the collapsible shell and must render `{children}`; that is where the individual reasoning parts get placed. The `case "reasoning"` branch renders each individual reasoning part inside that shell and must not render `children`. Removing either case breaks rendering.
88
+
50
89
  </Step>
51
90
  </Steps>
52
91
 
@@ -55,20 +94,20 @@ const AssistantMessage: FC = () => {
55
94
  The component consists of two parts:
56
95
 
57
96
  1. `Reasoning`: Renders individual reasoning message part content (with markdown support)
58
- 2. `ReasoningGroup`: Wraps consecutive reasoning parts in a collapsible container
97
+ 2. Composable group pieces (`ReasoningRoot`, `ReasoningTrigger`, `ReasoningContent`, `ReasoningText`): Wrap grouped reasoning children in a collapsible container
59
98
 
60
- Consecutive reasoning parts are automatically grouped together by the `ReasoningGroup` component.
99
+ Consecutive reasoning parts are grouped by `MessagePrimitive.GroupedParts`. Use the composable API below to control the grouped layout.
61
100
 
62
- > When using the composable API, `Reasoning.Text` is a plain container. Add `<MarkdownText />` for markdown rendering.
101
+ > When using the composable API, `ReasoningText` is a plain container. Add `<MarkdownText />` for markdown rendering.
63
102
 
64
103
  ## Variants
65
104
 
66
- Use the `variant` prop on `Reasoning.Root` to change the visual style:
105
+ Use the `variant` prop on `ReasoningRoot` to change the visual style:
67
106
 
68
107
  ```tsx
69
- <Reasoning.Root variant="outline">...</Reasoning.Root>
70
- <Reasoning.Root variant="ghost">...</Reasoning.Root>
71
- <Reasoning.Root variant="muted">...</Reasoning.Root>
108
+ <ReasoningRoot variant="outline">...</ReasoningRoot>
109
+ <ReasoningRoot variant="ghost">...</ReasoningRoot>
110
+ <ReasoningRoot variant="muted">...</ReasoningRoot>
72
111
  ```
73
112
 
74
113
  | Variant | Description |
@@ -77,9 +116,9 @@ Use the `variant` prop on `Reasoning.Root` to change the visual style:
77
116
  | `ghost` | No additional styling |
78
117
  | `muted` | Muted background |
79
118
 
80
- ## ReasoningGroup
119
+ ## Legacy ReasoningGroup
81
120
 
82
- `ReasoningGroup` wraps consecutive reasoning parts in a collapsible container. It auto-expands during streaming.
121
+ `ReasoningGroup` is kept for existing code that still uses the deprecated `components.ReasoningGroup` prop on `MessagePrimitive.Parts`. New code should use `MessagePrimitive.GroupedParts` and compose the root/trigger/content pieces directly.
83
122
 
84
123
  <ReasoningGroupSample />
85
124
 
@@ -119,15 +158,14 @@ All sub-components are exported for custom layouts:
119
158
 
120
159
  | Component | Description |
121
160
  | --------------------- | ------------------------------------------ |
122
- | `Reasoning.Root` | Collapsible container with scroll lock |
123
- | `Reasoning.Trigger` | Button with icon, label, and shimmer |
124
- | `Reasoning.Content` | Animated collapsible content wrapper |
125
- | `Reasoning.Text` | Text wrapper with slide/fade animation |
126
- | `Reasoning.Fade` | Gradient fade overlay at bottom |
161
+ | `ReasoningRoot` | Collapsible container with scroll lock |
162
+ | `ReasoningTrigger` | Button with icon, label, and shimmer |
163
+ | `ReasoningContent` | Animated collapsible content wrapper |
164
+ | `ReasoningText` | Text wrapper with slide/fade animation |
165
+ | `ReasoningFade` | Gradient fade overlay at bottom |
127
166
 
128
167
  ```tsx
129
168
  import {
130
- Reasoning,
131
169
  ReasoningRoot,
132
170
  ReasoningTrigger,
133
171
  ReasoningContent,
@@ -135,16 +173,15 @@ import {
135
173
  ReasoningFade,
136
174
  } from "@/components/assistant-ui/reasoning";
137
175
 
138
- // Compound component syntax
139
- <Reasoning.Root variant="muted">
140
- <Reasoning.Trigger active={isStreaming} />
141
- <Reasoning.Content>
142
- <Reasoning.Text>{children}</Reasoning.Text>
143
- </Reasoning.Content>
144
- </Reasoning.Root>
176
+ <ReasoningRoot variant="muted">
177
+ <ReasoningTrigger active={isStreaming} />
178
+ <ReasoningContent>
179
+ <ReasoningText>{children}</ReasoningText>
180
+ </ReasoningContent>
181
+ </ReasoningRoot>
145
182
  ```
146
183
 
147
184
  ## Related Components
148
185
 
149
186
  - [ToolGroup](/docs/ui/tool-group) - Similar grouping pattern for tool calls
150
- - [PartGrouping](/docs/ui/part-grouping) - Experimental API for grouping message parts
187
+ - [PartGrouping](/docs/ui/part-grouping) - Advanced grouping options for message parts
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Custom Scrollbar
3
3
  description: Replace the default scrollbar with a custom Radix UI scroll area.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { ScrollbarSample } from "@/components/docs/samples/scrollbar";
@@ -4,6 +4,7 @@ description: A dropdown select component with composable sub-components.
4
4
  links:
5
5
  - label: Radix UI Select
6
6
  url: https://www.radix-ui.com/primitives/docs/components/select
7
+ platforms: ["react"]
7
8
  ---
8
9
 
9
10
  import { PreviewCode } from "@/components/docs/preview-code.server";
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Sources
3
3
  description: Display URL sources with favicon, title, and external link.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { SourcesSample } from "@/components/docs/samples/sources";
@@ -4,6 +4,7 @@ description: Alternative markdown renderer with built-in syntax highlighting, ma
4
4
  links:
5
5
  - label: Streamdown
6
6
  url: https://github.com/vercel/streamdown
7
+ platforms: ["react"]
7
8
  ---
8
9
 
9
10
  import { PackageManagerTabs } from "@/components/docs/fumadocs/install/package-manager-tabs";
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Syntax Highlighting
3
3
  description: Code block syntax highlighting with react-shiki or react-syntax-highlighter.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { SyntaxHighlightingSample } from "@/components/docs/samples/syntax-highlighting";
@@ -4,6 +4,7 @@ description: A multi-variant tabs component for organizing content into switchab
4
4
  links:
5
5
  - label: Radix UI Tabs
6
6
  url: https://www.radix-ui.com/primitives/docs/components/tabs
7
+ platforms: ["react"]
7
8
  ---
8
9
 
9
10
  import { PreviewCode } from "@/components/docs/preview-code.server";
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: ThreadList
3
3
  description: Switch between conversations. Supports sidebar or dropdown layouts.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { ThreadListSample } from "@/components/docs/samples/threadlist";
@@ -171,6 +172,22 @@ A button to create a new thread.
171
172
  ]}
172
173
  />
173
174
 
175
+ ### ThreadListPrimitive.LoadMore
176
+
177
+ A button that appends the next page of threads. See the [LoadMore primitive reference](/docs/primitives/thread-list#loadmore) for usage and [Threads concepts](/docs/runtimes/concepts/threads#paginating-the-thread-list) for the adapter contract.
178
+
179
+ <ParametersTable
180
+ type="ThreadListPrimitiveLoadMoreProps"
181
+ parameters={[
182
+ {
183
+ name: "asChild",
184
+ type: "boolean",
185
+ default: "false",
186
+ description: "Merge props with child element instead of rendering a wrapper button.",
187
+ },
188
+ ]}
189
+ />
190
+
174
191
  ### ThreadListItemPrimitive.Root
175
192
 
176
193
  Container for a single thread item. Automatically sets `data-active` and `aria-current` when this is the current thread.
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Thread
3
3
  description: The main chat container with messages, composer, and auto-scroll.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { ThreadSample } from "@/components/docs/samples/thread";
@@ -175,10 +176,64 @@ The scrollable area containing all messages. Automatically scrolls to the bottom
175
176
  {
176
177
  name: "autoScroll",
177
178
  type: "boolean",
178
- default: "true",
179
+ default: 'true (false when turnAnchor is "top")',
179
180
  description:
180
181
  "Whether to automatically scroll to the bottom when new messages are added while the viewport was previously scrolled to the bottom.",
181
182
  },
183
+ {
184
+ name: "turnAnchor",
185
+ type: '"top" | "bottom"',
186
+ default: '"bottom"',
187
+ description:
188
+ 'Controls scroll anchoring behavior for new messages. "top" anchors new user messages at the top of the viewport.',
189
+ },
190
+ {
191
+ name: "topAnchorMessageClamp",
192
+ type: '{ tallerThan?: string; visibleHeight?: string }',
193
+ default: '{ tallerThan: "10em", visibleHeight: "6em" }',
194
+ description:
195
+ 'Clamps tall user messages when turnAnchor is "top". Messages up to `tallerThan` stay fully visible; taller messages show only `visibleHeight` of their bottom edge above the assistant response.',
196
+ children: [
197
+ {
198
+ type: '{ tallerThan?: string; visibleHeight?: string }',
199
+ parameters: [
200
+ {
201
+ name: "tallerThan",
202
+ type: "string",
203
+ default: '"10em"',
204
+ description: "Clamp messages taller than this CSS length.",
205
+ },
206
+ {
207
+ name: "visibleHeight",
208
+ type: "string",
209
+ default: '"6em"',
210
+ description:
211
+ "Visible portion of a clamped message's bottom edge.",
212
+ },
213
+ ],
214
+ },
215
+ ],
216
+ },
217
+ {
218
+ name: "scrollToBottomOnRunStart",
219
+ type: "boolean",
220
+ default: "true",
221
+ description: "Whether to scroll to bottom when a new run starts.",
222
+ },
223
+ {
224
+ name: "scrollToBottomOnInitialize",
225
+ type: "boolean",
226
+ default: "true",
227
+ description:
228
+ "Whether to scroll to bottom when thread history is first loaded.",
229
+ },
230
+ {
231
+ name: "scrollToBottomOnThreadSwitch",
232
+ type: "boolean",
233
+ default: "true",
234
+ description:
235
+ "Whether to scroll to bottom when switching to a different thread.",
236
+ },
182
237
  {
183
238
  name: "className",
184
239
  type: "string",
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: ToolFallback
3
3
  description: Default UI component for tools without dedicated custom renderers.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import {
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: ToolGroup
3
3
  description: Wrapper for consecutive tool calls with collapsible and styled options.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import {
@@ -17,31 +18,56 @@ A wrapper component that groups consecutive tool calls together, displaying them
17
18
  <Steps>
18
19
  <Step>
19
20
 
20
- ### Add `tool-group`
21
+ ### Add `tool-group` and `tool-fallback`
21
22
 
22
- <InstallCommand shadcn={["tool-group"]} />
23
+ <InstallCommand shadcn={["tool-group", "tool-fallback"]} />
23
24
 
24
- This adds a `/components/assistant-ui/tool-group.tsx` file to your project, which you can adjust as needed.
25
+ This adds `/components/assistant-ui/tool-group.tsx` and `/components/assistant-ui/tool-fallback.tsx` files to your project, which you can adjust as needed.
25
26
 
26
27
  </Step>
27
28
  <Step>
28
29
 
29
30
  ### Use it in your application
30
31
 
31
- Pass the `ToolGroup` component to the `MessagePrimitive.Parts` component
32
+ Use `MessagePrimitive.GroupedParts` and return `"group-tool"` for tool-call parts. The group case wraps `children`; the tool-call leaf renders the resolved tool UI or your fallback.
32
33
 
33
- ```tsx title="/components/assistant-ui/thread.tsx" {1,8}
34
- import { ToolGroup } from "@/components/assistant-ui/tool-group";
34
+ ```tsx title="/components/assistant-ui/thread.tsx"
35
+ import { MessagePrimitive } from "@assistant-ui/react";
36
+ import { ToolFallback } from "@/components/assistant-ui/tool-fallback";
37
+ import {
38
+ ToolGroupContent,
39
+ ToolGroupRoot,
40
+ ToolGroupTrigger,
41
+ } from "@/components/assistant-ui/tool-group";
35
42
 
36
43
  const AssistantMessage = () => {
37
44
  return (
38
45
  <MessagePrimitive.Root>
39
- <MessagePrimitive.Parts>
40
- {({ part }) => {
41
- if (part.type === "tool-call") return <ToolGroup {...part} />;
46
+ <MessagePrimitive.GroupedParts
47
+ groupBy={(part) => {
48
+ if (part.type === "tool-call") return ["group-tool"];
42
49
  return null;
43
50
  }}
44
- </MessagePrimitive.Parts>
51
+ >
52
+ {({ part, children }) => {
53
+ switch (part.type) {
54
+ case "group-tool":
55
+ return (
56
+ <ToolGroupRoot>
57
+ <ToolGroupTrigger
58
+ count={part.indices.length}
59
+ active={part.status.type === "running"}
60
+ />
61
+ <ToolGroupContent>{children}</ToolGroupContent>
62
+ </ToolGroupRoot>
63
+ );
64
+ case "tool-call":
65
+ return part.toolUI ?? <ToolFallback {...part} />;
66
+ default:
67
+ return null;
68
+ }
69
+ }}
70
+ </MessagePrimitive.GroupedParts>
45
71
  </MessagePrimitive.Root>
46
72
  );
47
73
  };
@@ -181,7 +207,9 @@ import {
181
207
  ]}
182
208
  />
183
209
 
184
- ### ToolGroup (Default Export)
210
+ ### ToolGroup (Legacy Wrapper)
211
+
212
+ `ToolGroup` is kept for existing code that still uses the deprecated `components.ToolGroup` prop on `MessagePrimitive.Parts`. Prefer composing `ToolGroupRoot`, `ToolGroupTrigger`, and `ToolGroupContent` inside `MessagePrimitive.GroupedParts`.
185
213
 
186
214
  <ParametersTable
187
215
  type="ToolGroupProps"
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Voice
3
3
  description: Realtime voice session controls with connect, mute, and status indicator.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { VoiceSample, VoiceVariantsSample, VoiceStatesSample } from "@/components/docs/samples/voice";
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: heat-graph
3
3
  description: Headless, composable activity heatmap components for React.
4
+ platforms: ["react"]
4
5
  ---
5
6
 
6
7
  import { HeatGraphDemo } from "@/app/heat-graph/heat-graph-demo";