@assistant-ui/mcp-docs-server 0.2.2 → 0.2.3
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 +2 -2
- package/.docs/organized/code-examples/with-a2a.md +4 -3
- package/.docs/organized/code-examples/with-ag-ui.md +5 -4
- package/.docs/organized/code-examples/with-ai-sdk-v7.md +12 -11
- package/.docs/organized/code-examples/with-artifacts.md +10 -9
- package/.docs/organized/code-examples/with-assistant-transport.md +4 -3
- package/.docs/organized/code-examples/with-browser-extension.md +3 -3
- package/.docs/organized/code-examples/with-chain-of-thought.md +14 -12
- package/.docs/organized/code-examples/with-cloud-standalone.md +5 -5
- package/.docs/organized/code-examples/with-cloud.md +9 -8
- package/.docs/organized/code-examples/with-custom-thread-list.md +8 -7
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +12 -11
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +12 -11
- package/.docs/organized/code-examples/with-eve.md +5 -4
- package/.docs/organized/code-examples/with-expo.md +214 -31
- package/.docs/organized/code-examples/with-external-store.md +4 -3
- package/.docs/organized/code-examples/with-ffmpeg.md +9 -8
- package/.docs/organized/code-examples/with-generative-ui.md +13 -15
- package/.docs/organized/code-examples/with-google-adk.md +4 -3
- package/.docs/organized/code-examples/with-heat-graph.md +2 -2
- package/.docs/organized/code-examples/with-image-generation.md +7 -6
- package/.docs/organized/code-examples/with-interactables.md +9 -8
- package/.docs/organized/code-examples/with-langchain.md +6 -5
- package/.docs/organized/code-examples/with-langgraph.md +6 -5
- package/.docs/organized/code-examples/with-livekit.md +13 -12
- package/.docs/organized/code-examples/with-mcp.md +11 -9
- package/.docs/organized/code-examples/with-nuxt.md +502 -502
- package/.docs/organized/code-examples/with-opencode.md +3 -3
- package/.docs/organized/code-examples/with-openui.md +14 -13
- package/.docs/organized/code-examples/with-pi.md +5 -4
- package/.docs/organized/code-examples/with-react-hook-form.md +13 -10
- package/.docs/organized/code-examples/with-react-ink-web.md +64 -14
- package/.docs/organized/code-examples/with-react-ink.md +3 -2
- package/.docs/organized/code-examples/with-react-router.md +6 -5
- package/.docs/organized/code-examples/with-resumable-stream.md +10 -9
- package/.docs/organized/code-examples/with-store.md +2 -2
- package/.docs/organized/code-examples/with-svelte.md +3 -3
- package/.docs/organized/code-examples/with-sveltekit.md +9 -9
- package/.docs/organized/code-examples/with-tanstack.md +8 -7
- package/.docs/organized/code-examples/with-tap-runtime.md +4 -3
- package/.docs/organized/code-examples/with-virtualized-thread.md +5 -4
- package/.docs/organized/code-examples/with-vue.md +2 -2
- package/.docs/raw/docs/{(docs) → (getting-started)}/devtools.mdx +1 -1
- package/.docs/raw/docs/{(docs) → (getting-started)}/index.mdx +4 -2
- package/.docs/raw/docs/{(docs) → (getting-started)}/installation.mdx +24 -24
- package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +6 -0
- package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +1 -1
- package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +6 -1
- package/.docs/raw/docs/(reference)/api-reference/integrations/{react-ai-sdk.mdx → ai-sdk.mdx} +19 -19
- package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +22 -1
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +3 -3
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +2 -2
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +20 -2
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +1 -1
- package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +1 -1
- package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +3 -0
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +10 -10
- package/.docs/raw/docs/cloud/ai-sdk.mdx +2 -0
- package/.docs/raw/docs/copilots/assistant-frame.mdx +19 -8
- package/.docs/raw/docs/guides/attachments.mdx +2 -2
- package/.docs/raw/docs/guides/branching.mdx +1 -1
- package/.docs/raw/docs/guides/chatgpt-subscription.mdx +1 -1
- package/.docs/raw/docs/guides/dictation.mdx +1 -1
- package/.docs/raw/docs/guides/electron.mdx +1 -1
- package/.docs/raw/docs/guides/latex.mdx +1 -1
- package/.docs/raw/docs/guides/message-timing.mdx +11 -5
- package/.docs/raw/docs/guides/quoting.mdx +1 -1
- package/.docs/raw/docs/guides/resumable-streams.mdx +3 -3
- package/.docs/raw/docs/guides/speech.mdx +1 -1
- package/.docs/raw/docs/guides/suggestions.mdx +2 -2
- package/.docs/raw/docs/guides/voice.mdx +1 -1
- package/.docs/raw/docs/ink/hooks.mdx +1 -1
- package/.docs/raw/docs/ink/index.mdx +3 -2
- package/.docs/raw/docs/ink/migration.mdx +1 -1
- package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +3 -3
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +3 -3
- package/.docs/raw/docs/integrations/frameworks/{cloudflare-agents/overview.mdx → cloudflare-agents.mdx} +4 -3
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +1 -1
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
- package/.docs/raw/docs/integrations/index.mdx +2 -2
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +3 -3
- package/.docs/raw/docs/migrations/toolkit-tools.mdx +2 -2
- package/.docs/raw/docs/primitives/action-bar.mdx +1 -1
- package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -1
- package/.docs/raw/docs/primitives/attachment.mdx +1 -1
- package/.docs/raw/docs/primitives/branch-picker.mdx +1 -1
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +3 -3
- package/.docs/raw/docs/primitives/composer.mdx +1 -1
- package/.docs/raw/docs/primitives/error.mdx +1 -1
- package/.docs/raw/docs/primitives/message.mdx +1 -1
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -1
- package/.docs/raw/docs/primitives/suggestion.mdx +1 -1
- package/.docs/raw/docs/primitives/thread-list.mdx +1 -1
- package/.docs/raw/docs/primitives/thread.mdx +1 -1
- package/.docs/raw/docs/react-native/adapters.mdx +1 -1
- package/.docs/raw/docs/react-native/index.mdx +2 -2
- package/.docs/raw/docs/react-native/migration.mdx +2 -2
- package/.docs/raw/docs/react-native/primitives.mdx +142 -5
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +13 -1
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +3 -3
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +4 -4
- package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +31 -16
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +3 -3
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +3 -3
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +5 -5
- package/.docs/raw/docs/runtimes/langchain.mdx +1 -1
- package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +1 -1
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +1 -1
- package/.docs/raw/docs/tools/backend.mdx +4 -4
- package/.docs/raw/docs/tools/defining-tools.mdx +2 -2
- package/.docs/raw/docs/tools/generative-ui.mdx +2 -2
- package/.docs/raw/docs/tools/interactables.mdx +3 -3
- package/.docs/raw/docs/tools/mcp-apps.mdx +18 -1
- package/.docs/raw/docs/tools/mcp.mdx +2 -2
- package/.docs/raw/docs/tools/openui.mdx +2 -2
- package/.docs/raw/docs/tools/tool-ui.mdx +17 -5
- package/.docs/raw/docs/tools/user-managed-mcp.mdx +2 -2
- package/.docs/raw/docs/ui/assistant-modal.mdx +3 -3
- package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -1
- package/.docs/raw/docs/ui/attachment.mdx +30 -10
- package/.docs/raw/docs/ui/composer-trigger-popover.mdx +36 -1
- package/.docs/raw/docs/ui/context-display.mdx +1 -1
- package/.docs/raw/docs/ui/directive-text.mdx +1 -1
- package/.docs/raw/docs/ui/file.mdx +1 -1
- package/.docs/raw/docs/ui/follow-up-suggestions.mdx +1 -1
- package/.docs/raw/docs/ui/image.mdx +1 -1
- package/.docs/raw/docs/ui/markdown.mdx +40 -1
- package/.docs/raw/docs/ui/mermaid.mdx +1 -1
- package/.docs/raw/docs/ui/message-timing.mdx +1 -1
- package/.docs/raw/docs/ui/model-selector.mdx +4 -4
- package/.docs/raw/docs/ui/part-grouping.mdx +1 -1
- package/.docs/raw/docs/ui/quote.mdx +3 -3
- package/.docs/raw/docs/ui/reasoning.mdx +31 -3
- package/.docs/raw/docs/ui/scrollbar.mdx +1 -1
- package/.docs/raw/docs/ui/sources.mdx +10 -1
- package/.docs/raw/docs/ui/streamdown.mdx +2 -2
- package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -1
- package/.docs/raw/docs/ui/thread-list.mdx +40 -1
- package/.docs/raw/docs/ui/thread.mdx +49 -2
- package/.docs/raw/docs/ui/tool-fallback.mdx +23 -9
- package/.docs/raw/docs/ui/tool-group.mdx +1 -1
- package/.docs/raw/docs/ui/voice.mdx +1 -1
- package/.docs/raw/docs/utilities/react-o11y.mdx +2 -2
- package/dist/xulux/catalog-client.d.ts.map +1 -1
- package/dist/xulux/catalog-client.js +51 -6
- package/dist/xulux/catalog-client.js.map +1 -1
- package/dist/xulux/types.d.ts +7 -7
- package/dist/xulux/types.d.ts.map +1 -1
- package/dist/xulux/types.js.map +1 -1
- package/package.json +3 -3
- package/src/tools/tests/docs.test.ts +10 -7
- package/src/tools/tests/path-traversal.test.ts +5 -2
- package/src/tools/tests/xulux-templates.test.ts +63 -0
- package/src/xulux/catalog-client.ts +68 -23
- package/src/xulux/types.ts +17 -13
- package/.docs/raw/docs/ui/accordion.mdx +0 -266
- package/.docs/raw/docs/ui/badge.mdx +0 -150
- package/.docs/raw/docs/ui/diff-viewer.mdx +0 -280
- package/.docs/raw/docs/ui/dot-matrix.mdx +0 -133
- package/.docs/raw/docs/ui/number-roll.mdx +0 -154
- package/.docs/raw/docs/ui/select.mdx +0 -254
- package/.docs/raw/docs/ui/tabs.mdx +0 -271
- /package/.docs/raw/docs/{(docs) → (getting-started)}/architecture.mdx +0 -0
- /package/.docs/raw/docs/{(docs) → (getting-started)}/base-ui.mdx +0 -0
- /package/.docs/raw/docs/{(docs) → (getting-started)}/cli.mdx +0 -0
- /package/.docs/raw/docs/{(docs) → (getting-started)}/llm.mdx +0 -0
- /package/.docs/raw/docs/{(docs) → (getting-started)}/rtl.mdx +0 -0
|
@@ -29,7 +29,10 @@ import { z } from "zod";
|
|
|
29
29
|
const registry = new ModelContextRegistry();
|
|
30
30
|
|
|
31
31
|
// Expose the registry to the parent window
|
|
32
|
-
AssistantFrameProvider.addModelContextProvider(
|
|
32
|
+
AssistantFrameProvider.addModelContextProvider(
|
|
33
|
+
registry,
|
|
34
|
+
"https://parent-app.com",
|
|
35
|
+
);
|
|
33
36
|
|
|
34
37
|
// Add tools that will be available to the parent assistant
|
|
35
38
|
registry.addTool({
|
|
@@ -70,7 +73,7 @@ function ParentComponent() {
|
|
|
70
73
|
// Connect to the iframe's model context
|
|
71
74
|
useAssistantFrameHost({
|
|
72
75
|
iframeRef,
|
|
73
|
-
targetOrigin: "https://trusted-iframe-domain.com",
|
|
76
|
+
targetOrigin: "https://trusted-iframe-domain.com",
|
|
74
77
|
});
|
|
75
78
|
|
|
76
79
|
return (
|
|
@@ -160,9 +163,15 @@ analyticsRegistry.addTool({
|
|
|
160
163
|
|
|
161
164
|
// Register both providers
|
|
162
165
|
const unsubscribe1 =
|
|
163
|
-
AssistantFrameProvider.addModelContextProvider(
|
|
166
|
+
AssistantFrameProvider.addModelContextProvider(
|
|
167
|
+
catalogRegistry,
|
|
168
|
+
"https://parent-app.com",
|
|
169
|
+
);
|
|
164
170
|
const unsubscribe2 =
|
|
165
|
-
AssistantFrameProvider.addModelContextProvider(
|
|
171
|
+
AssistantFrameProvider.addModelContextProvider(
|
|
172
|
+
analyticsRegistry,
|
|
173
|
+
"https://parent-app.com",
|
|
174
|
+
);
|
|
166
175
|
|
|
167
176
|
// Later, unsubscribe if needed
|
|
168
177
|
unsubscribe1();
|
|
@@ -173,7 +182,7 @@ unsubscribe2();
|
|
|
173
182
|
|
|
174
183
|
#### Origin Validation
|
|
175
184
|
|
|
176
|
-
Both the provider and host
|
|
185
|
+
Both the provider and host validate message origins. They default to the current page's origin, so cross-origin frames must specify the exact trusted origin on both sides:
|
|
177
186
|
|
|
178
187
|
```tsx
|
|
179
188
|
// In iframe - only accept messages from specific parent
|
|
@@ -222,10 +231,12 @@ Registers a model context provider to share with parent windows.
|
|
|
222
231
|
```tsx
|
|
223
232
|
const unsubscribe = AssistantFrameProvider.addModelContextProvider(
|
|
224
233
|
registry,
|
|
225
|
-
"https://parent-domain.com",
|
|
234
|
+
"https://parent-domain.com",
|
|
226
235
|
);
|
|
227
236
|
```
|
|
228
237
|
|
|
238
|
+
When `targetOrigin` is omitted, the provider only communicates with `window.location.origin`. All providers in a frame share one origin policy. Registering an explicit origin tightens an existing wildcard policy, while registering two different explicit origins throws an error. Unsubscribing drops that registration's requirement. The wildcard value `*` is available as an explicit opt-in, but it should not be used for contexts that expose tools or sensitive instructions.
|
|
239
|
+
|
|
229
240
|
##### `dispose()`
|
|
230
241
|
|
|
231
242
|
Cleans up all resources and removes all providers.
|
|
@@ -243,7 +254,7 @@ Class that connects to an iframe's model context providers.
|
|
|
243
254
|
```tsx
|
|
244
255
|
const host = new AssistantFrameHost(
|
|
245
256
|
iframeWindow,
|
|
246
|
-
targetOrigin
|
|
257
|
+
targetOrigin?, // Defaults to window.location.origin
|
|
247
258
|
);
|
|
248
259
|
```
|
|
249
260
|
|
|
@@ -283,7 +294,7 @@ React hook that manages the lifecycle of an AssistantFrameHost.
|
|
|
283
294
|
```tsx
|
|
284
295
|
useAssistantFrameHost({
|
|
285
296
|
iframeRef: RefObject<HTMLIFrameElement>,
|
|
286
|
-
targetOrigin?: string,
|
|
297
|
+
targetOrigin?: string, // Defaults to window.location.origin
|
|
287
298
|
});
|
|
288
299
|
```
|
|
289
300
|
|
|
@@ -4,7 +4,7 @@ description: Let users attach images, PDFs, and other files to AI chat messages
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { AttachmentSample } from "@/components/docs/samples/attachment";
|
|
7
|
+
import { AttachmentSample } from "@/components/pages/docs/samples/attachment";
|
|
8
8
|
|
|
9
9
|
Enable users to attach files to their messages, enhancing conversations with images, documents, and other content.
|
|
10
10
|
|
|
@@ -44,7 +44,7 @@ This adds `/components/assistant-ui/attachment.tsx` to your project.
|
|
|
44
44
|
For `useChatRuntime`, attachments work automatically without additional configuration:
|
|
45
45
|
|
|
46
46
|
```tsx title="/app/MyRuntimeProvider.tsx"
|
|
47
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
47
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
48
48
|
|
|
49
49
|
const runtime = useChatRuntime();
|
|
50
50
|
```
|
|
@@ -4,7 +4,7 @@ description: Edit messages or regenerate AI responses, then switch between alter
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { BranchingSample } from "@/components/docs/samples/branching";
|
|
7
|
+
import { BranchingSample } from "@/components/pages/docs/samples/branching";
|
|
8
8
|
|
|
9
9
|
Branching lets users navigate between alternative versions of a message. A new branch is created when:
|
|
10
10
|
|
|
@@ -30,7 +30,7 @@ In your chat route, swap `@ai-sdk/openai` for the OAuth provider. Starting from
|
|
|
30
30
|
|
|
31
31
|
```ts title="/app/api/chat/route.ts" {10}
|
|
32
32
|
import { createOpenAIOAuth } from "openai-oauth-provider";
|
|
33
|
-
import { frontendTools } from "@assistant-ui/
|
|
33
|
+
import { frontendTools } from "@assistant-ui/ai-sdk";
|
|
34
34
|
import {
|
|
35
35
|
type JSONSchema7,
|
|
36
36
|
streamText,
|
|
@@ -4,7 +4,7 @@ description: Add voice dictation to your AI chat composer with the Web Speech AP
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { DictationSample } from "@/components/docs/samples/dictation";
|
|
7
|
+
import { DictationSample } from "@/components/pages/docs/samples/dictation";
|
|
8
8
|
|
|
9
9
|
assistant-ui supports speech-to-text (dictation) via the `DictationAdapter` interface. Users speak into the microphone and transcribed text lands in the composer, either as interim preview or as committed final text.
|
|
10
10
|
|
|
@@ -38,7 +38,7 @@ import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
|
38
38
|
import {
|
|
39
39
|
AssistantChatTransport,
|
|
40
40
|
useChatRuntime,
|
|
41
|
-
} from "@assistant-ui/
|
|
41
|
+
} from "@assistant-ui/ai-sdk";
|
|
42
42
|
|
|
43
43
|
const transport = new AssistantChatTransport({
|
|
44
44
|
api: "https://api.example.com/chat",
|
|
@@ -4,7 +4,7 @@ description: Render LaTeX math expressions in AI chat messages with KaTeX — dr
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { PackageManagerTabs } from "@/components/docs/fumadocs/install/package-manager-tabs";
|
|
7
|
+
import { PackageManagerTabs } from "@/components/pages/docs/fumadocs/install/package-manager-tabs";
|
|
8
8
|
|
|
9
9
|
Render LaTeX mathematical expressions in chat messages using KaTeX.
|
|
10
10
|
|
|
@@ -100,7 +100,7 @@ Timing is tracked automatically on the client side by observing streaming state
|
|
|
100
100
|
</Callout>
|
|
101
101
|
|
|
102
102
|
```tsx
|
|
103
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
103
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
104
104
|
|
|
105
105
|
const runtime = useChatRuntime();
|
|
106
106
|
// useMessageTiming() works out of the box
|
|
@@ -174,14 +174,20 @@ const runtime = useLangGraphRuntime({ stream: myStream });
|
|
|
174
174
|
// useMessageTiming() works out of the box
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
-
### AG-UI (`
|
|
177
|
+
### AG-UI (`useAgUiRuntime`)
|
|
178
178
|
|
|
179
179
|
Timing is tracked automatically on the client side by the AG-UI run aggregator. Each emitted message includes timing metadata computed from stream chunk observations.
|
|
180
180
|
|
|
181
181
|
```tsx
|
|
182
|
-
import {
|
|
183
|
-
|
|
184
|
-
|
|
182
|
+
import { useMemo } from "react";
|
|
183
|
+
import { useAgUiRuntime } from "@assistant-ui/react-ag-ui";
|
|
184
|
+
import { HttpAgent } from "@ag-ui/client";
|
|
185
|
+
|
|
186
|
+
const agent = useMemo(
|
|
187
|
+
() => new HttpAgent({ url: "http://localhost:8000/agent" }),
|
|
188
|
+
[],
|
|
189
|
+
);
|
|
190
|
+
const runtime = useAgUiRuntime({ agent });
|
|
185
191
|
// useMessageTiming() works out of the box
|
|
186
192
|
```
|
|
187
193
|
|
|
@@ -4,7 +4,7 @@ description: Let users select text from AI messages and quote it back into the c
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { QuoteComposerSample } from "@/components/docs/samples/quote-composer";
|
|
7
|
+
import { QuoteComposerSample } from "@/components/pages/docs/samples/quote-composer";
|
|
8
8
|
|
|
9
9
|
<QuoteComposerSample />
|
|
10
10
|
|
|
@@ -84,7 +84,7 @@ The context exposes two more verbs: `ctx.status(streamId)` returns `"streaming"
|
|
|
84
84
|
|
|
85
85
|
## Client side: native integration
|
|
86
86
|
|
|
87
|
-
`@assistant-ui/
|
|
87
|
+
`@assistant-ui/ai-sdk` ships a `resumable` option on `AssistantChatTransport`. It captures the stream id from the response header, redirects `chat.resumeStream()` reconnects to your resume route, and clears the stored id when the response finishes naturally. Pair it with `useChatRuntime`, which fires `chat.resumeStream()` whenever its resumable storage reports a pending id, including ids discovered after mount.
|
|
88
88
|
|
|
89
89
|
```tsx title="/app/page.tsx"
|
|
90
90
|
"use client";
|
|
@@ -94,7 +94,7 @@ import {
|
|
|
94
94
|
AssistantChatTransport,
|
|
95
95
|
createResumableSessionStorage,
|
|
96
96
|
useChatRuntime,
|
|
97
|
-
} from "@assistant-ui/
|
|
97
|
+
} from "@assistant-ui/ai-sdk";
|
|
98
98
|
import { useMemo } from "react";
|
|
99
99
|
import { Thread } from "@/components/assistant-ui/thread";
|
|
100
100
|
|
|
@@ -153,7 +153,7 @@ import {
|
|
|
153
153
|
AssistantChatTransport,
|
|
154
154
|
createResumableSessionStorage,
|
|
155
155
|
useChatRuntime,
|
|
156
|
-
} from "@assistant-ui/
|
|
156
|
+
} from "@assistant-ui/ai-sdk";
|
|
157
157
|
import { useMemo } from "react";
|
|
158
158
|
import { Thread } from "@/components/assistant-ui/thread";
|
|
159
159
|
import { ThreadList } from "@/components/assistant-ui/thread-list";
|
|
@@ -4,7 +4,7 @@ description: Read AI chat messages aloud with the Web Speech API or a custom TTS
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { SpeechSample } from "@/components/docs/samples/speech";
|
|
7
|
+
import { SpeechSample } from "@/components/pages/docs/samples/speech";
|
|
8
8
|
|
|
9
9
|
assistant-ui supports text-to-speech via the `SpeechSynthesisAdapter` interface. When a speech adapter is configured, users can trigger playback for any assistant message.
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ Configure suggestions using the `Suggestions()` API in your runtime provider:
|
|
|
16
16
|
|
|
17
17
|
```tsx
|
|
18
18
|
import { AuiConfig, Tools, Suggestions } from "@assistant-ui/react";
|
|
19
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
19
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
20
20
|
|
|
21
21
|
function MyRuntimeProvider({ children }: { children: React.ReactNode }) {
|
|
22
22
|
const runtime = useChatRuntime();
|
|
@@ -218,7 +218,7 @@ They also accept the same `suggestion` adapter as the local runtime under `adapt
|
|
|
218
218
|
|
|
219
219
|
```tsx
|
|
220
220
|
import { createSuggestionAdapter } from "@assistant-ui/react";
|
|
221
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
221
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
222
222
|
|
|
223
223
|
const runtime = useChatRuntime({
|
|
224
224
|
adapters: {
|
|
@@ -4,7 +4,7 @@ description: Build bidirectional voice conversations with AI in React. Realtime
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { VoiceSample } from "@/components/docs/samples/voice";
|
|
7
|
+
import { VoiceSample } from "@/components/pages/docs/samples/voice";
|
|
8
8
|
|
|
9
9
|
assistant-ui supports realtime bidirectional voice through the `RealtimeVoiceAdapter` interface. Users speak into their microphone, the agent answers with audio, and transcripts appear in the thread while the session runs.
|
|
10
10
|
|
|
@@ -129,7 +129,7 @@ const runtime = useLocalRuntime(chatModel, {
|
|
|
129
129
|
| `adapters.dictation` | `DictationAdapter` | Adapter for speech-to-text input |
|
|
130
130
|
| `adapters.feedback` | `FeedbackAdapter` | Adapter for message feedback (thumbs up/down) |
|
|
131
131
|
| `adapters.suggestion` | `SuggestionAdapter` | Adapter for suggested prompts |
|
|
132
|
-
| `cloud` | `AssistantCloud` | Cloud instance for thread persistence via
|
|
132
|
+
| `cloud` | `AssistantCloud` | Cloud instance for thread persistence via `assistant-cloud` |
|
|
133
133
|
| `unstable_humanToolNames` | `string[]` | Tool names that pause the run until a result is added via `addResult` |
|
|
134
134
|
|
|
135
135
|
### useRemoteThreadListRuntime
|
|
@@ -127,6 +127,7 @@ Use primitives to compose your terminal chat interface:
|
|
|
127
127
|
```tsx title="components/thread.tsx"
|
|
128
128
|
import { Box, Text } from "ink";
|
|
129
129
|
import {
|
|
130
|
+
AuiIf,
|
|
130
131
|
ThreadPrimitive,
|
|
131
132
|
ComposerPrimitive,
|
|
132
133
|
LoadingPrimitive,
|
|
@@ -170,11 +171,11 @@ const StatusIndicator = () => (
|
|
|
170
171
|
export const Thread = () => {
|
|
171
172
|
return (
|
|
172
173
|
<ThreadPrimitive.Root>
|
|
173
|
-
<
|
|
174
|
+
<AuiIf condition={(s) => s.thread.isEmpty}>
|
|
174
175
|
<Box marginBottom={1}>
|
|
175
176
|
<Text dimColor>No messages yet. Start typing below!</Text>
|
|
176
177
|
</Box>
|
|
177
|
-
</
|
|
178
|
+
</AuiIf>
|
|
178
179
|
|
|
179
180
|
<ThreadPrimitive.Messages>
|
|
180
181
|
{() => <Message />}
|
|
@@ -8,7 +8,7 @@ If you already have an assistant-ui web app, most of your code transfers directl
|
|
|
8
8
|
## What stays the same
|
|
9
9
|
|
|
10
10
|
- **Runtime setup** — `useLocalRuntime`, `ChatModelAdapter`, and all runtime options work identically.
|
|
11
|
-
- **AI SDK integration** — `@assistant-ui/
|
|
11
|
+
- **AI SDK integration** — `@assistant-ui/ai-sdk` works with React Ink. Your runtime setup transfers directly.
|
|
12
12
|
- **Tool definitions** — `Tools({ toolkit })` and toolkit renderers use the same API.
|
|
13
13
|
- **State hooks** — `useAuiState`, `useAui`, and selector patterns are the same.
|
|
14
14
|
- **Backend code** — Your API routes, streaming endpoints, and server-side logic need zero changes.
|
|
@@ -340,7 +340,7 @@ The shape of `content` matches the AI SDK part types. Use `image` for images and
|
|
|
340
340
|
"use client";
|
|
341
341
|
|
|
342
342
|
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
343
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
343
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
344
344
|
import { attachmentAdapter } from "./attachment-adapter";
|
|
345
345
|
|
|
346
346
|
export function MyProvider({ children }: { children: React.ReactNode }) {
|
|
@@ -363,7 +363,7 @@ import { AssistantRuntimeProvider } from "@assistant-ui/react-native";
|
|
|
363
363
|
import {
|
|
364
364
|
AssistantChatTransport,
|
|
365
365
|
useChatRuntime,
|
|
366
|
-
} from "@assistant-ui/
|
|
366
|
+
} from "@assistant-ui/ai-sdk";
|
|
367
367
|
import { attachmentAdapter } from "./attachment-adapter";
|
|
368
368
|
|
|
369
369
|
export function MyProvider({ children }: { children: React.ReactNode }) {
|
|
@@ -387,7 +387,7 @@ import { AssistantRuntimeProvider } from "@assistant-ui/react-ink";
|
|
|
387
387
|
import {
|
|
388
388
|
AssistantChatTransport,
|
|
389
389
|
useChatRuntime,
|
|
390
|
-
} from "@assistant-ui/
|
|
390
|
+
} from "@assistant-ui/ai-sdk";
|
|
391
391
|
import { attachmentAdapter } from "./attachment-adapter";
|
|
392
392
|
|
|
393
393
|
export function MyProvider({ children }: { children: React.ReactNode }) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Vercel AI SDK
|
|
2
|
+
title: Vercel AI SDK
|
|
3
3
|
description: Wire the Vercel AI SDK into a React chat UI with assistant-ui — useChat, streaming, tools, attachments, multi-step agents, and persistence covered end-to-end.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -16,14 +16,14 @@ If you arrived here looking to wire up your first chat: jump to [AI SDK v7 quick
|
|
|
16
16
|
```mermaid
|
|
17
17
|
flowchart LR
|
|
18
18
|
client["client"]
|
|
19
|
-
runtime["useChatRuntime (
|
|
19
|
+
runtime["useChatRuntime (ai-sdk)<br/>(thread state · tool calls · attachments<br/>speech · dictation · feedback adapters)"]
|
|
20
20
|
api["/api/chat<br/>(streamText)"]
|
|
21
21
|
provider["provider"]
|
|
22
22
|
|
|
23
23
|
client --> runtime --> api --> provider
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
`@assistant-ui/
|
|
26
|
+
`@assistant-ui/ai-sdk` wraps the AI SDK's `useChat` hook and exposes it as an assistant-ui runtime. The runtime owns conversation state on the client; your `/api/chat` route returns a UI message stream from `streamText`. Everything else (tools, attachments, observability, gateways, custom persistence) layers on top of this base.
|
|
27
27
|
|
|
28
28
|
## Pick a version
|
|
29
29
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Cloudflare Agents
|
|
2
|
+
title: Cloudflare Agents
|
|
3
3
|
description: Wire Cloudflare's stateful agent framework into a React chat UI with assistant-ui via the standard AI SDK runtime. WebSocket transport, server-side persistence, tool calling, all preserved.
|
|
4
|
+
platforms: ["react"]
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
import { CloudflareIcon } from "@/components/icons/cloudflare";
|
|
@@ -16,7 +17,7 @@ This is an integration guide, not a runtime adapter. assistant-ui does not ship
|
|
|
16
17
|
|
|
17
18
|
Cloudflare Agents handles the server half: a Durable Object subclasses `AIChatAgent` from `@cloudflare/ai-chat`, owns the message history, and streams responses back over a WebSocket. `@cloudflare/ai-chat/react`'s `useAgentChat` hook wraps that WebSocket and exposes the same `messages`, `sendMessage`, `regenerate`, `status`, `stop`, `setMessages`, `addToolOutput` surface that the AI SDK's `useChat` does, plus a few Cloudflare-specific extras (`clearHistory`, `isServerStreaming`, `isToolContinuation`).
|
|
18
19
|
|
|
19
|
-
assistant-ui handles the client half. `useAISDKRuntime` from [`@assistant-ui/
|
|
20
|
+
assistant-ui handles the client half. `useAISDKRuntime` from [`@assistant-ui/ai-sdk`](/docs/runtimes/ai-sdk/v7) reads exactly those AI SDK methods off whatever you pass in, so feeding it `useAgentChat`'s return value yields a fully-featured runtime: streaming, tool calling, edit, reload, history import and export, attachments, suggestions.
|
|
20
21
|
|
|
21
22
|
Shared adapters (attachments, speech, feedback, history) work the same way as described in [adapters](/docs/runtimes/concepts/adapters). Multi-thread support needs a [custom thread list](/docs/runtimes/concepts/threads) wired around `useAISDKRuntime`; [AssistantCloud](/docs/cloud) integrates via `useChatRuntime` (which constructs its own `useChat` internally) and is not compatible with the `useAgentChat` wiring shown here.
|
|
22
23
|
|
|
@@ -198,7 +199,7 @@ In the frontend project:
|
|
|
198
199
|
import { useAgent } from "agents/react";
|
|
199
200
|
import { useAgentChat } from "@cloudflare/ai-chat/react";
|
|
200
201
|
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
201
|
-
import { useAISDKRuntime } from "@assistant-ui/
|
|
202
|
+
import { useAISDKRuntime } from "@assistant-ui/ai-sdk";
|
|
202
203
|
import { Thread } from "@/components/assistant-ui/thread";
|
|
203
204
|
|
|
204
205
|
export const Assistant = () => {
|
|
@@ -19,7 +19,7 @@ This is an integration guide, not a runtime adapter. assistant-ui does not ship
|
|
|
19
19
|
| [Full-stack](/docs/integrations/frameworks/mastra/full-stack) | One Next.js app: API routes call Mastra in-process. Simpler deployment, single repo. |
|
|
20
20
|
| [Separate server](/docs/integrations/frameworks/mastra/separate-server) | Mastra runs as its own service; the Next.js frontend hits its API. Independent scaling, clearer separation of concerns. |
|
|
21
21
|
|
|
22
|
-
Both use the same client-side `useChatRuntime` from [`@assistant-ui/
|
|
22
|
+
Both use the same client-side `useChatRuntime` from [`@assistant-ui/ai-sdk`](/docs/runtimes/ai-sdk/v7). The only difference is where the Mastra agent lives.
|
|
23
23
|
|
|
24
24
|
## Architecture
|
|
25
25
|
|
|
@@ -129,7 +129,7 @@ Open the file containing `useChatRuntime` (typically `app/assistant.tsx`) and pa
|
|
|
129
129
|
"use client";
|
|
130
130
|
|
|
131
131
|
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
132
|
-
import { AssistantChatTransport, useChatRuntime } from "@assistant-ui/
|
|
132
|
+
import { AssistantChatTransport, useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
133
133
|
import { Thread } from "@/components/assistant-ui/thread";
|
|
134
134
|
|
|
135
135
|
export const Assistant = () => {
|
|
@@ -11,7 +11,7 @@ import { LangChainIcon } from "@/components/icons/langchain";
|
|
|
11
11
|
import { McpIcon } from "@/components/icons/mcp";
|
|
12
12
|
import { VercelIcon } from "@/components/icons/vercel";
|
|
13
13
|
|
|
14
|
-
Integrations are wiring guides for using third-party services with assistant-ui, plus canonical recipes for the adapter slots (persistence, attachments). They are distinct from [runtimes](/docs/runtimes/pick-a-runtime), which are the React adapter packages (`@assistant-ui/
|
|
14
|
+
Integrations are wiring guides for using third-party services with assistant-ui, plus canonical recipes for the adapter slots (persistence, attachments). They are distinct from [runtimes](/docs/runtimes/pick-a-runtime), which are the React adapter packages (`@assistant-ui/ai-sdk`, `@assistant-ui/react-langgraph`, etc.) that connect the UI to a backend. An integration assumes you already have a working runtime and adds something on top.
|
|
15
15
|
|
|
16
16
|
## Where integrations slot in
|
|
17
17
|
|
|
@@ -40,7 +40,7 @@ Framework integrations that pair with assistant-ui at the API-route layer.
|
|
|
40
40
|
icon={<CloudflareIcon width={20} height={20} />}
|
|
41
41
|
title="Cloudflare Agents"
|
|
42
42
|
description="Stateful Durable Object agents. Wired through the AI SDK runtime with WebSocket streaming."
|
|
43
|
-
href="/docs/integrations/frameworks/cloudflare-agents
|
|
43
|
+
href="/docs/integrations/frameworks/cloudflare-agents"
|
|
44
44
|
/>
|
|
45
45
|
<Card
|
|
46
46
|
icon={<MastraIcon width={20} height={20} />}
|
|
@@ -650,7 +650,7 @@ import {
|
|
|
650
650
|
AssistantRuntimeProvider,
|
|
651
651
|
useRemoteThreadListRuntime,
|
|
652
652
|
} from "@assistant-ui/react";
|
|
653
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
653
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
654
654
|
import { threadListAdapter } from "./thread-adapter";
|
|
655
655
|
|
|
656
656
|
export function MyProvider({ children }: { children: React.ReactNode }) {
|
|
@@ -677,7 +677,7 @@ import {
|
|
|
677
677
|
import {
|
|
678
678
|
AssistantChatTransport,
|
|
679
679
|
useChatRuntime,
|
|
680
|
-
} from "@assistant-ui/
|
|
680
|
+
} from "@assistant-ui/ai-sdk";
|
|
681
681
|
import { threadListAdapter } from "./thread-adapter";
|
|
682
682
|
|
|
683
683
|
export function MyProvider({ children }: { children: React.ReactNode }) {
|
|
@@ -707,7 +707,7 @@ import {
|
|
|
707
707
|
import {
|
|
708
708
|
AssistantChatTransport,
|
|
709
709
|
useChatRuntime,
|
|
710
|
-
} from "@assistant-ui/
|
|
710
|
+
} from "@assistant-ui/ai-sdk";
|
|
711
711
|
import { threadListAdapter } from "./thread-adapter";
|
|
712
712
|
|
|
713
713
|
export function MyProvider({ children }: { children: React.ReactNode }) {
|
|
@@ -16,7 +16,7 @@ Use a toolkit registered with `Tools({ toolkit })` instead. Toolkits keep the mo
|
|
|
16
16
|
|
|
17
17
|
```tsx
|
|
18
18
|
import { AssistantRuntimeProvider, makeAssistantTool } from "@assistant-ui/react";
|
|
19
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
19
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
20
20
|
import { z } from "zod";
|
|
21
21
|
|
|
22
22
|
const WeatherTool = makeAssistantTool({
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
AuiConfig,
|
|
77
77
|
Tools,
|
|
78
78
|
} from "@assistant-ui/react";
|
|
79
|
-
import { useChatRuntime } from "@assistant-ui/
|
|
79
|
+
import { useChatRuntime } from "@assistant-ui/ai-sdk";
|
|
80
80
|
import toolkit from "./toolkit";
|
|
81
81
|
|
|
82
82
|
export function App() {
|
|
@@ -4,7 +4,7 @@ description: Build message action buttons with auto-hide, copy state, and intell
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { ActionBarPrimitiveSample } from "@/components/docs/samples/action-bar-primitive";
|
|
7
|
+
import { ActionBarPrimitiveSample } from "@/components/pages/docs/samples/action-bar-primitive";
|
|
8
8
|
import { ActionBarPrimitive as ActionBarPrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The ActionBar primitive provides message actions: copy, reload, edit, feedback, speech, and export. It handles intelligent visibility with auto-hide on hover, automatic disabling based on message state, and floating behavior. You compose the buttons; the primitive handles action state and availability.
|
|
@@ -4,7 +4,7 @@ description: A floating chat popover with a fixed-position trigger button that o
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { AssistantModalSample } from "@/components/docs/samples/assistant-modal";
|
|
7
|
+
import { AssistantModalSample } from "@/components/pages/docs/samples/assistant-modal";
|
|
8
8
|
import { AssistantModalPrimitive as AssistantModalPrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The AssistantModal primitive is a floating chat popover built on [Radix Popover](https://www.radix-ui.com/primitives/docs/components/popover). A trigger button opens a chat panel, which is a common floating assistant launcher pattern. You control the trigger, content, positioning, and animations.
|
|
@@ -4,7 +4,7 @@ description: File and image attachment rendering for the composer and messages.
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { AttachmentSample } from "@/components/docs/samples/attachment";
|
|
7
|
+
import { AttachmentSample } from "@/components/pages/docs/samples/attachment";
|
|
8
8
|
|
|
9
9
|
The Attachment primitive renders file and image attachments. It appears in two places: inside the composer for pending uploads (with a remove button), and inside messages for sent attachments (read-only). You provide the layout and styling.
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ description: Navigate between message branches, which are alternative responses
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { BranchPickerPrimitiveSample } from "@/components/docs/samples/branch-picker-primitive";
|
|
7
|
+
import { BranchPickerPrimitiveSample } from "@/components/pages/docs/samples/branch-picker-primitive";
|
|
8
8
|
import { BranchPickerPrimitive as BranchPickerPrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The BranchPicker primitive lets users navigate between message branches, which are alternative responses generated by editing a message or regenerating a reply. It's used alongside ActionBar inside message components.
|
|
@@ -4,9 +4,9 @@ description: Collapsible accordion for grouping reasoning steps and tool calls.
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { ChainOfThoughtPrimitiveSample } from "@/components/docs/samples/chain-of-thought-primitive";
|
|
8
|
-
import { ChainOfThoughtPrimitiveSample as ChainOfThoughtPrimitiveSampleRadix } from "@/components/docs/samples/chain-of-thought-primitive.radix";
|
|
9
|
-
import { Flavored } from "@/components/docs/contexts/flavor.server";
|
|
7
|
+
import { ChainOfThoughtPrimitiveSample } from "@/components/pages/docs/samples/chain-of-thought-primitive";
|
|
8
|
+
import { ChainOfThoughtPrimitiveSample as ChainOfThoughtPrimitiveSampleRadix } from "@/components/pages/docs/samples/chain-of-thought-primitive.radix";
|
|
9
|
+
import { Flavored } from "@/components/pages/docs/contexts/flavor.server";
|
|
10
10
|
import {
|
|
11
11
|
ChainOfThoughtPrimitive as ChainOfThoughtPrimitiveDocs,
|
|
12
12
|
MessagePrimitive as MessagePrimitiveDocs,
|
|
@@ -4,7 +4,7 @@ description: Build custom message input UIs with full control over layout and be
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { ComposerPrimitiveSample } from "@/components/docs/samples/composer-primitive";
|
|
7
|
+
import { ComposerPrimitiveSample } from "@/components/pages/docs/samples/composer-primitive";
|
|
8
8
|
import { ComposerPrimitive as ComposerPrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The Composer primitive is the interface for composing new messages or editing existing ones. It handles submit behavior, keyboard shortcuts, focus management, attachment state, and streaming status. You provide the UI.
|
|
@@ -4,7 +4,7 @@ description: Accessible error display for messages with automatic error text ext
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { ErrorPrimitiveSample } from "@/components/docs/samples/error-primitive";
|
|
7
|
+
import { ErrorPrimitiveSample } from "@/components/pages/docs/samples/error-primitive";
|
|
8
8
|
|
|
9
9
|
The Error primitive renders error states on messages using an accessible `role="alert"` container with automatic error text extraction. `Root` always renders its container; `Message` only renders when the message has an error. Wrap in `MessagePrimitive.Error` if you need the entire block to be conditional.
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ description: Build custom message rendering with content parts, attachments, and
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { MessagePrimitiveSample } from "@/components/docs/samples/message-primitive";
|
|
7
|
+
import { MessagePrimitiveSample } from "@/components/pages/docs/samples/message-primitive";
|
|
8
8
|
import { MessagePrimitive as MessagePrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The Message primitive handles individual message rendering: content parts, attachments, quotes, hover state, and error display. It's the building block inside each message bubble, resolving text, images, tool calls, and more through a parts pipeline.
|
|
@@ -4,7 +4,7 @@ description: A floating toolbar that appears when text is selected within a mess
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { SelectionToolbarPrimitiveSample } from "@/components/docs/samples/selection-toolbar-primitive";
|
|
7
|
+
import { SelectionToolbarPrimitiveSample } from "@/components/pages/docs/samples/selection-toolbar-primitive";
|
|
8
8
|
|
|
9
9
|
The SelectionToolbar primitive is a floating toolbar that appears when the user selects text within a message. It lets users quote selected text into the composer. Styling and action layout are fully customizable.
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ description: Suggested prompts that users can click to quickly send or populate
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { SuggestionPrimitiveSample } from "@/components/docs/samples/suggestion-primitive";
|
|
7
|
+
import { SuggestionPrimitiveSample } from "@/components/pages/docs/samples/suggestion-primitive";
|
|
8
8
|
import { SuggestionPrimitive as SuggestionPrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The Suggestion primitive renders suggested prompts as clickable pills that send a message or populate the composer. Use it for welcome screen suggestions, follow-up prompts, or quick actions. You provide the layout and styling.
|
|
@@ -4,7 +4,7 @@ description: Multi-thread management for listing, creating, switching, archiving
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { ThreadListPrimitiveSample } from "@/components/docs/samples/thread-list-primitive";
|
|
7
|
+
import { ThreadListPrimitiveSample } from "@/components/pages/docs/samples/thread-list-primitive";
|
|
8
8
|
import { ThreadListPrimitive as ThreadListPrimitiveDocs, ThreadListItemPrimitive as ThreadListItemPrimitiveDocs, ThreadListItemMorePrimitive as ThreadListItemMorePrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The ThreadList primitive manages multiple conversations by listing threads, creating new ones, switching between them, and archiving or deleting old ones. It's composed from three primitive namespaces: `ThreadListPrimitive`, `ThreadListItemPrimitive`, and `ThreadListItemMorePrimitive`.
|
|
@@ -4,7 +4,7 @@ description: Build custom scrollable message containers with auto-scroll, empty
|
|
|
4
4
|
platforms: ["react"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { ThreadPrimitiveSample } from "@/components/docs/samples/thread-primitive";
|
|
7
|
+
import { ThreadPrimitiveSample } from "@/components/pages/docs/samples/thread-primitive";
|
|
8
8
|
import { ThreadPrimitive as ThreadPrimitiveDocs } from "@/generated/primitiveDocs";
|
|
9
9
|
|
|
10
10
|
The Thread primitive is the scrollable message container, and the backbone of any chat interface. It handles viewport management, auto-scrolling, empty states, message rendering, and suggestions. You provide the layout and styling.
|
|
@@ -15,7 +15,7 @@ The simplest way to add persistence. Pass a `cloud` option to `useLocalRuntime`:
|
|
|
15
15
|
|
|
16
16
|
```tsx
|
|
17
17
|
import { useLocalRuntime } from "@assistant-ui/react-native";
|
|
18
|
-
import { AssistantCloud } from "
|
|
18
|
+
import { AssistantCloud } from "assistant-cloud";
|
|
19
19
|
|
|
20
20
|
const cloud = new AssistantCloud({
|
|
21
21
|
baseUrl: "https://backend.assistant-ui.com",
|
|
@@ -49,7 +49,7 @@ If you prefer to add assistant-ui to an existing Expo project, follow these step
|
|
|
49
49
|
|
|
50
50
|
### Install dependencies
|
|
51
51
|
|
|
52
|
-
<InstallCommand expo={["@assistant-ui/react-native", "@assistant-ui/
|
|
52
|
+
<InstallCommand expo={["@assistant-ui/react-native", "@assistant-ui/ai-sdk"]} />
|
|
53
53
|
|
|
54
54
|
</Step>
|
|
55
55
|
<Step>
|
|
@@ -120,7 +120,7 @@ export async function POST(req: Request) {
|
|
|
120
120
|
### Set up the runtime
|
|
121
121
|
|
|
122
122
|
```tsx title="hooks/use-app-runtime.ts"
|
|
123
|
-
import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/
|
|
123
|
+
import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/ai-sdk";
|
|
124
124
|
|
|
125
125
|
const API_URL = process.env.EXPO_PUBLIC_API_URL ?? "http://localhost:3000";
|
|
126
126
|
|