@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.
- package/.docs/organized/code-examples/waterfall.md +15 -7
- package/.docs/organized/code-examples/with-a2a.md +9 -21
- package/.docs/organized/code-examples/with-ag-ui.md +11 -8
- package/.docs/organized/code-examples/with-ai-sdk-v6.md +10 -10
- package/.docs/organized/code-examples/with-artifacts.md +12 -10
- package/.docs/organized/code-examples/with-assistant-transport.md +11 -12
- package/.docs/organized/code-examples/with-chain-of-thought.md +83 -54
- package/.docs/organized/code-examples/with-cloud-standalone.md +14 -11
- package/.docs/organized/code-examples/with-cloud.md +9 -10
- package/.docs/organized/code-examples/with-custom-thread-list.md +61 -16
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -12
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +13 -13
- package/.docs/organized/code-examples/with-expo.md +25 -21
- package/.docs/organized/code-examples/with-external-store.md +8 -8
- package/.docs/organized/code-examples/with-ffmpeg.md +17 -12
- package/.docs/organized/code-examples/with-generative-ui.md +9 -9
- package/.docs/organized/code-examples/with-google-adk.md +8 -8
- package/.docs/organized/code-examples/with-heat-graph.md +5 -5
- package/.docs/organized/code-examples/with-interactables.md +10 -25
- package/.docs/organized/code-examples/with-langchain.md +437 -0
- package/.docs/organized/code-examples/with-langgraph.md +16 -16
- package/.docs/organized/code-examples/with-livekit.md +18 -13
- package/.docs/organized/code-examples/with-opencode.md +105 -62
- package/.docs/organized/code-examples/with-parent-id-grouping.md +10 -10
- package/.docs/organized/code-examples/with-react-hook-form.md +220 -148
- package/.docs/organized/code-examples/with-react-ink.md +2 -2
- package/.docs/organized/code-examples/with-react-router.md +12 -12
- package/.docs/organized/code-examples/with-store.md +8 -5
- package/.docs/organized/code-examples/with-tanstack.md +10 -10
- package/.docs/organized/code-examples/with-tap-runtime.md +10 -6
- package/.docs/raw/docs/(docs)/cli.mdx +2 -1
- package/.docs/raw/docs/(docs)/copilots/assistant-frame.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +10 -3
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +8 -3
- package/.docs/raw/docs/(docs)/copilots/make-assistant-visible.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/model-context.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/motivation.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/use-assistant-instructions.mdx +1 -0
- package/.docs/raw/docs/(docs)/devtools.mdx +1 -0
- package/.docs/raw/docs/(docs)/index.mdx +1 -0
- package/.docs/raw/docs/(docs)/installation.mdx +1 -0
- package/.docs/raw/docs/(docs)/rtl.mdx +80 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +34 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +41 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +26 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +34 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +31 -0
- package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +20 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +26 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +72 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +41 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +48 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +30 -0
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +23 -0
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +21 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +7 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +149 -40
- package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +65 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +2 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
- package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +9 -0
- package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +231 -3
- package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
- package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
- package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
- package/.docs/raw/docs/guides/branching.mdx +76 -0
- package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
- package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
- package/.docs/raw/docs/guides/editing.mdx +102 -0
- package/.docs/raw/docs/guides/index.mdx +103 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
- package/.docs/raw/docs/guides/mentions.mdx +520 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
- package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
- package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
- package/.docs/raw/docs/guides/slash-commands.mdx +361 -0
- package/.docs/raw/docs/guides/speech.mdx +156 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
- package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
- package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
- package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
- package/.docs/raw/docs/ink/index.mdx +1 -3
- package/.docs/raw/docs/ink/migration.mdx +1 -3
- package/.docs/raw/docs/ink/primitives.mdx +37 -1
- package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
- package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
- package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
- package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
- package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
- package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
- package/.docs/raw/docs/integrations/index.mdx +173 -0
- package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
- package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
- package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
- package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
- package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
- package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
- package/.docs/raw/docs/primitives/attachment.mdx +1 -0
- package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
- package/.docs/raw/docs/primitives/composer.mdx +96 -63
- package/.docs/raw/docs/primitives/error.mdx +1 -0
- package/.docs/raw/docs/primitives/index.mdx +2 -1
- package/.docs/raw/docs/primitives/message.mdx +68 -5
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
- package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
- package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
- package/.docs/raw/docs/primitives/thread.mdx +16 -13
- package/.docs/raw/docs/react-native/index.mdx +1 -3
- package/.docs/raw/docs/react-native/migration.mdx +1 -3
- package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
- package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
- package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
- package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
- package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
- package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +365 -101
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
- package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
- package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
- package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
- package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
- package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
- package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
- package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
- package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
- package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
- package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
- package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
- package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
- package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
- package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
- package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
- package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
- package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
- package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
- package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +74 -198
- package/.docs/raw/docs/ui/accordion.mdx +1 -0
- package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
- package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
- package/.docs/raw/docs/ui/attachment.mdx +1 -0
- package/.docs/raw/docs/ui/badge.mdx +1 -0
- package/.docs/raw/docs/ui/composer-trigger-popover.mdx +200 -0
- package/.docs/raw/docs/ui/context-display.mdx +1 -0
- package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
- package/.docs/raw/docs/ui/directive-text.mdx +114 -0
- package/.docs/raw/docs/ui/file.mdx +1 -0
- package/.docs/raw/docs/ui/image.mdx +1 -0
- package/.docs/raw/docs/ui/markdown.mdx +2 -14
- package/.docs/raw/docs/ui/mermaid.mdx +1 -0
- package/.docs/raw/docs/ui/message-timing.mdx +3 -2
- package/.docs/raw/docs/ui/model-selector.mdx +1 -0
- package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
- package/.docs/raw/docs/ui/quote.mdx +1 -0
- package/.docs/raw/docs/ui/reasoning.mdx +69 -32
- package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
- package/.docs/raw/docs/ui/select.mdx +1 -0
- package/.docs/raw/docs/ui/sources.mdx +1 -0
- package/.docs/raw/docs/ui/streamdown.mdx +1 -0
- package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
- package/.docs/raw/docs/ui/tabs.mdx +1 -0
- package/.docs/raw/docs/ui/thread-list.mdx +17 -0
- package/.docs/raw/docs/ui/thread.mdx +56 -1
- package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
- package/.docs/raw/docs/ui/tool-group.mdx +39 -11
- package/.docs/raw/docs/ui/voice.mdx +1 -0
- package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
- package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
- package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +4 -4
- package/src/tools/tests/path-traversal.test.ts +1 -1
- package/src/utils/logger.ts +1 -1
- package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
- package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
- package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
- package/.docs/raw/docs/(docs)/guides/mentions.mdx +0 -406
- package/.docs/raw/docs/(docs)/guides/slash-commands.mdx +0 -275
- package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
- package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
- package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
- package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -268
- package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
- package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
- package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
- package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
- package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -607
- package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
- package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
- package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
- package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
- package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
- package/.docs/raw/docs/ui/mention.mdx +0 -168
|
@@ -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
|
-
|
|
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
|
-
|
|
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 {
|
|
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.
|
|
37
|
-
{(
|
|
38
|
-
if (part.type === "reasoning") return
|
|
39
|
-
return null;
|
|
40
|
-
}}
|
|
41
|
-
|
|
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. `
|
|
97
|
+
2. Composable group pieces (`ReasoningRoot`, `ReasoningTrigger`, `ReasoningContent`, `ReasoningText`): Wrap grouped reasoning children in a collapsible container
|
|
59
98
|
|
|
60
|
-
Consecutive reasoning parts are
|
|
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, `
|
|
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 `
|
|
105
|
+
Use the `variant` prop on `ReasoningRoot` to change the visual style:
|
|
67
106
|
|
|
68
107
|
```tsx
|
|
69
|
-
<
|
|
70
|
-
<
|
|
71
|
-
<
|
|
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`
|
|
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
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
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
|
-
|
|
139
|
-
<
|
|
140
|
-
<
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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) -
|
|
187
|
+
- [PartGrouping](/docs/ui/part-grouping) - Advanced grouping options for message parts
|
|
@@ -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";
|
|
@@ -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";
|
|
@@ -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:
|
|
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: 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
|
|
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
|
-
|
|
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"
|
|
34
|
-
import {
|
|
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.
|
|
40
|
-
{(
|
|
41
|
-
if (part.type === "tool-call") return
|
|
46
|
+
<MessagePrimitive.GroupedParts
|
|
47
|
+
groupBy={(part) => {
|
|
48
|
+
if (part.type === "tool-call") return ["group-tool"];
|
|
42
49
|
return null;
|
|
43
50
|
}}
|
|
44
|
-
|
|
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 (
|
|
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"
|