@assistant-ui/mcp-docs-server 0.1.30 → 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 (208) hide show
  1. package/.docs/organized/code-examples/waterfall.md +1 -1
  2. package/.docs/organized/code-examples/with-a2a.md +2 -2
  3. package/.docs/organized/code-examples/with-ag-ui.md +3 -3
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +5 -5
  5. package/.docs/organized/code-examples/with-artifacts.md +5 -5
  6. package/.docs/organized/code-examples/with-assistant-transport.md +3 -3
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +79 -50
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +4 -4
  9. package/.docs/organized/code-examples/with-cloud.md +4 -4
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +56 -11
  11. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +7 -7
  12. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +7 -7
  13. package/.docs/organized/code-examples/with-expo.md +16 -16
  14. package/.docs/organized/code-examples/with-external-store.md +2 -2
  15. package/.docs/organized/code-examples/with-ffmpeg.md +5 -5
  16. package/.docs/organized/code-examples/with-generative-ui.md +5 -5
  17. package/.docs/organized/code-examples/with-google-adk.md +4 -4
  18. package/.docs/organized/code-examples/with-heat-graph.md +1 -1
  19. package/.docs/organized/code-examples/with-interactables.md +5 -5
  20. package/.docs/organized/code-examples/with-langchain.md +3 -3
  21. package/.docs/organized/code-examples/with-langgraph.md +3 -3
  22. package/.docs/organized/code-examples/with-livekit.md +8 -8
  23. package/.docs/organized/code-examples/with-opencode.md +99 -54
  24. package/.docs/organized/code-examples/with-parent-id-grouping.md +4 -4
  25. package/.docs/organized/code-examples/with-react-hook-form.md +5 -5
  26. package/.docs/organized/code-examples/with-react-ink.md +1 -1
  27. package/.docs/organized/code-examples/with-react-router.md +8 -8
  28. package/.docs/organized/code-examples/with-store.md +1 -1
  29. package/.docs/organized/code-examples/with-tanstack.md +5 -5
  30. package/.docs/organized/code-examples/with-tap-runtime.md +2 -2
  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 +1 -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/index.mdx +65 -0
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
  61. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
  62. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +5 -0
  63. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
  64. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +230 -2
  65. package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
  66. package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
  67. package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
  68. package/.docs/raw/docs/guides/branching.mdx +76 -0
  69. package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
  70. package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
  71. package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
  72. package/.docs/raw/docs/guides/editing.mdx +102 -0
  73. package/.docs/raw/docs/guides/index.mdx +103 -0
  74. package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
  75. package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
  76. package/.docs/raw/docs/{(docs)/guides → guides}/mentions.mdx +61 -86
  77. package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
  78. package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
  79. package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
  80. package/.docs/raw/docs/{(docs)/guides → guides}/slash-commands.mdx +103 -37
  81. package/.docs/raw/docs/guides/speech.mdx +156 -0
  82. package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
  83. package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
  84. package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
  85. package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
  86. package/.docs/raw/docs/ink/index.mdx +1 -3
  87. package/.docs/raw/docs/ink/migration.mdx +1 -3
  88. package/.docs/raw/docs/ink/primitives.mdx +37 -1
  89. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
  90. package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
  91. package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
  92. package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
  93. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
  94. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
  95. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
  96. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
  97. package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
  98. package/.docs/raw/docs/integrations/index.mdx +173 -0
  99. package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
  100. package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
  101. package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
  102. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
  103. package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
  104. package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
  105. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
  106. package/.docs/raw/docs/primitives/attachment.mdx +1 -0
  107. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
  108. package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
  109. package/.docs/raw/docs/primitives/composer.mdx +2 -1
  110. package/.docs/raw/docs/primitives/error.mdx +1 -0
  111. package/.docs/raw/docs/primitives/index.mdx +2 -1
  112. package/.docs/raw/docs/primitives/message.mdx +68 -5
  113. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
  114. package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
  115. package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
  116. package/.docs/raw/docs/primitives/thread.mdx +16 -13
  117. package/.docs/raw/docs/react-native/index.mdx +1 -3
  118. package/.docs/raw/docs/react-native/migration.mdx +1 -3
  119. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
  120. package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
  121. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
  122. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
  123. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
  124. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
  125. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
  126. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
  127. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
  128. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +330 -123
  129. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
  130. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
  131. package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
  132. package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
  133. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
  134. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
  135. package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
  136. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
  137. package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
  138. package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
  139. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
  140. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
  141. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
  142. package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
  143. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
  144. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
  145. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
  146. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
  147. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
  148. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
  149. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
  150. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
  151. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
  152. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
  153. package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
  154. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
  155. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +71 -203
  156. package/.docs/raw/docs/ui/accordion.mdx +1 -0
  157. package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
  158. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
  159. package/.docs/raw/docs/ui/attachment.mdx +1 -0
  160. package/.docs/raw/docs/ui/badge.mdx +1 -0
  161. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +1 -0
  162. package/.docs/raw/docs/ui/context-display.mdx +1 -0
  163. package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
  164. package/.docs/raw/docs/ui/directive-text.mdx +1 -0
  165. package/.docs/raw/docs/ui/file.mdx +1 -0
  166. package/.docs/raw/docs/ui/image.mdx +1 -0
  167. package/.docs/raw/docs/ui/markdown.mdx +2 -14
  168. package/.docs/raw/docs/ui/mermaid.mdx +1 -0
  169. package/.docs/raw/docs/ui/message-timing.mdx +3 -2
  170. package/.docs/raw/docs/ui/model-selector.mdx +1 -0
  171. package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
  172. package/.docs/raw/docs/ui/quote.mdx +1 -0
  173. package/.docs/raw/docs/ui/reasoning.mdx +66 -33
  174. package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
  175. package/.docs/raw/docs/ui/select.mdx +1 -0
  176. package/.docs/raw/docs/ui/sources.mdx +1 -0
  177. package/.docs/raw/docs/ui/streamdown.mdx +1 -0
  178. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
  179. package/.docs/raw/docs/ui/tabs.mdx +1 -0
  180. package/.docs/raw/docs/ui/thread-list.mdx +17 -0
  181. package/.docs/raw/docs/ui/thread.mdx +56 -1
  182. package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
  183. package/.docs/raw/docs/ui/tool-group.mdx +39 -11
  184. package/.docs/raw/docs/ui/voice.mdx +1 -0
  185. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
  186. package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
  187. package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
  188. package/package.json +3 -3
  189. package/src/tools/tests/path-traversal.test.ts +1 -1
  190. package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
  191. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
  192. package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
  193. package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
  194. package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
  195. package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
  196. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -314
  197. package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
  198. package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
  199. package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
  200. package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
  201. package/.docs/raw/docs/runtimes/langchain/comparison.mdx +0 -60
  202. package/.docs/raw/docs/runtimes/langchain/index.mdx +0 -210
  203. package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -699
  204. package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
  205. package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
  206. package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
  207. package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
  208. package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
@@ -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,26 +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 `MessagePrimitive.Parts` via the `components` prop. Using them together is the recommended default — `ReasoningGroup` wraps consecutive reasoning parts in a collapsible container for a smooth out-of-the-box UI.
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.
28
+
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.
27
32
 
28
33
  ```tsx title="/app/components/assistant-ui/thread.tsx"
29
34
  import { MessagePrimitive } from "@assistant-ui/react";
30
35
  import { MarkdownText } from "@/components/assistant-ui/markdown-text";
31
36
  import { ToolFallback } from "@/components/assistant-ui/tool-fallback";
32
- import { Reasoning, ReasoningGroup } from "@/components/assistant-ui/reasoning"; // [!code ++]
37
+ import {
38
+ Reasoning,
39
+ ReasoningContent,
40
+ ReasoningRoot,
41
+ ReasoningText,
42
+ ReasoningTrigger,
43
+ } from "@/components/assistant-ui/reasoning"; // [!code ++]
33
44
 
34
45
  const AssistantMessage: FC = () => {
35
46
  return (
36
47
  <MessagePrimitive.Root className="...">
37
48
  <div className="...">
38
- <MessagePrimitive.Parts
39
- components={{
40
- Text: MarkdownText,
41
- Reasoning, // [!code ++]
42
- ReasoningGroup, // [!code ++]
43
- tools: { Fallback: ToolFallback },
44
- }}
45
- />
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 ++]
46
79
  </div>
47
80
  <AssistantActionBar />
48
81
  <BranchPicker className="..." />
@@ -51,6 +84,8 @@ const AssistantMessage: FC = () => {
51
84
  };
52
85
  ```
53
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
+
54
89
  </Step>
55
90
  </Steps>
56
91
 
@@ -59,20 +94,20 @@ const AssistantMessage: FC = () => {
59
94
  The component consists of two parts:
60
95
 
61
96
  1. `Reasoning`: Renders individual reasoning message part content (with markdown support)
62
- 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
63
98
 
64
- Consecutive reasoning parts are automatically grouped together by `ReasoningGroup`. We recommend using both together as the default — you can drop `ReasoningGroup` or build your own layout with the composable API below if you need more flexibility.
99
+ Consecutive reasoning parts are grouped by `MessagePrimitive.GroupedParts`. Use the composable API below to control the grouped layout.
65
100
 
66
- > 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.
67
102
 
68
103
  ## Variants
69
104
 
70
- Use the `variant` prop on `Reasoning.Root` to change the visual style:
105
+ Use the `variant` prop on `ReasoningRoot` to change the visual style:
71
106
 
72
107
  ```tsx
73
- <Reasoning.Root variant="outline">...</Reasoning.Root>
74
- <Reasoning.Root variant="ghost">...</Reasoning.Root>
75
- <Reasoning.Root variant="muted">...</Reasoning.Root>
108
+ <ReasoningRoot variant="outline">...</ReasoningRoot>
109
+ <ReasoningRoot variant="ghost">...</ReasoningRoot>
110
+ <ReasoningRoot variant="muted">...</ReasoningRoot>
76
111
  ```
77
112
 
78
113
  | Variant | Description |
@@ -81,9 +116,9 @@ Use the `variant` prop on `Reasoning.Root` to change the visual style:
81
116
  | `ghost` | No additional styling |
82
117
  | `muted` | Muted background |
83
118
 
84
- ## ReasoningGroup
119
+ ## Legacy ReasoningGroup
85
120
 
86
- `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.
87
122
 
88
123
  <ReasoningGroupSample />
89
124
 
@@ -123,15 +158,14 @@ All sub-components are exported for custom layouts:
123
158
 
124
159
  | Component | Description |
125
160
  | --------------------- | ------------------------------------------ |
126
- | `Reasoning.Root` | Collapsible container with scroll lock |
127
- | `Reasoning.Trigger` | Button with icon, label, and shimmer |
128
- | `Reasoning.Content` | Animated collapsible content wrapper |
129
- | `Reasoning.Text` | Text wrapper with slide/fade animation |
130
- | `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 |
131
166
 
132
167
  ```tsx
133
168
  import {
134
- Reasoning,
135
169
  ReasoningRoot,
136
170
  ReasoningTrigger,
137
171
  ReasoningContent,
@@ -139,16 +173,15 @@ import {
139
173
  ReasoningFade,
140
174
  } from "@/components/assistant-ui/reasoning";
141
175
 
142
- // Compound component syntax
143
- <Reasoning.Root variant="muted">
144
- <Reasoning.Trigger active={isStreaming} />
145
- <Reasoning.Content>
146
- <Reasoning.Text>{children}</Reasoning.Text>
147
- </Reasoning.Content>
148
- </Reasoning.Root>
176
+ <ReasoningRoot variant="muted">
177
+ <ReasoningTrigger active={isStreaming} />
178
+ <ReasoningContent>
179
+ <ReasoningText>{children}</ReasoningText>
180
+ </ReasoningContent>
181
+ </ReasoningRoot>
149
182
  ```
150
183
 
151
184
  ## Related Components
152
185
 
153
186
  - [ToolGroup](/docs/ui/tool-group) - Similar grouping pattern for tool calls
154
- - [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";