@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.
Files changed (167) hide show
  1. package/.docs/organized/code-examples/waterfall.md +2 -2
  2. package/.docs/organized/code-examples/with-a2a.md +4 -3
  3. package/.docs/organized/code-examples/with-ag-ui.md +5 -4
  4. package/.docs/organized/code-examples/with-ai-sdk-v7.md +12 -11
  5. package/.docs/organized/code-examples/with-artifacts.md +10 -9
  6. package/.docs/organized/code-examples/with-assistant-transport.md +4 -3
  7. package/.docs/organized/code-examples/with-browser-extension.md +3 -3
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +14 -12
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +5 -5
  10. package/.docs/organized/code-examples/with-cloud.md +9 -8
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +8 -7
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +12 -11
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +12 -11
  14. package/.docs/organized/code-examples/with-eve.md +5 -4
  15. package/.docs/organized/code-examples/with-expo.md +214 -31
  16. package/.docs/organized/code-examples/with-external-store.md +4 -3
  17. package/.docs/organized/code-examples/with-ffmpeg.md +9 -8
  18. package/.docs/organized/code-examples/with-generative-ui.md +13 -15
  19. package/.docs/organized/code-examples/with-google-adk.md +4 -3
  20. package/.docs/organized/code-examples/with-heat-graph.md +2 -2
  21. package/.docs/organized/code-examples/with-image-generation.md +7 -6
  22. package/.docs/organized/code-examples/with-interactables.md +9 -8
  23. package/.docs/organized/code-examples/with-langchain.md +6 -5
  24. package/.docs/organized/code-examples/with-langgraph.md +6 -5
  25. package/.docs/organized/code-examples/with-livekit.md +13 -12
  26. package/.docs/organized/code-examples/with-mcp.md +11 -9
  27. package/.docs/organized/code-examples/with-nuxt.md +502 -502
  28. package/.docs/organized/code-examples/with-opencode.md +3 -3
  29. package/.docs/organized/code-examples/with-openui.md +14 -13
  30. package/.docs/organized/code-examples/with-pi.md +5 -4
  31. package/.docs/organized/code-examples/with-react-hook-form.md +13 -10
  32. package/.docs/organized/code-examples/with-react-ink-web.md +64 -14
  33. package/.docs/organized/code-examples/with-react-ink.md +3 -2
  34. package/.docs/organized/code-examples/with-react-router.md +6 -5
  35. package/.docs/organized/code-examples/with-resumable-stream.md +10 -9
  36. package/.docs/organized/code-examples/with-store.md +2 -2
  37. package/.docs/organized/code-examples/with-svelte.md +3 -3
  38. package/.docs/organized/code-examples/with-sveltekit.md +9 -9
  39. package/.docs/organized/code-examples/with-tanstack.md +8 -7
  40. package/.docs/organized/code-examples/with-tap-runtime.md +4 -3
  41. package/.docs/organized/code-examples/with-virtualized-thread.md +5 -4
  42. package/.docs/organized/code-examples/with-vue.md +2 -2
  43. package/.docs/raw/docs/{(docs) → (getting-started)}/devtools.mdx +1 -1
  44. package/.docs/raw/docs/{(docs) → (getting-started)}/index.mdx +4 -2
  45. package/.docs/raw/docs/{(docs) → (getting-started)}/installation.mdx +24 -24
  46. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +6 -0
  47. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +1 -1
  48. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +6 -1
  49. package/.docs/raw/docs/(reference)/api-reference/integrations/{react-ai-sdk.mdx → ai-sdk.mdx} +19 -19
  50. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +22 -1
  51. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +3 -3
  52. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +2 -2
  53. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +20 -2
  54. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +1 -1
  55. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +1 -1
  56. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +3 -0
  57. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +10 -10
  58. package/.docs/raw/docs/cloud/ai-sdk.mdx +2 -0
  59. package/.docs/raw/docs/copilots/assistant-frame.mdx +19 -8
  60. package/.docs/raw/docs/guides/attachments.mdx +2 -2
  61. package/.docs/raw/docs/guides/branching.mdx +1 -1
  62. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +1 -1
  63. package/.docs/raw/docs/guides/dictation.mdx +1 -1
  64. package/.docs/raw/docs/guides/electron.mdx +1 -1
  65. package/.docs/raw/docs/guides/latex.mdx +1 -1
  66. package/.docs/raw/docs/guides/message-timing.mdx +11 -5
  67. package/.docs/raw/docs/guides/quoting.mdx +1 -1
  68. package/.docs/raw/docs/guides/resumable-streams.mdx +3 -3
  69. package/.docs/raw/docs/guides/speech.mdx +1 -1
  70. package/.docs/raw/docs/guides/suggestions.mdx +2 -2
  71. package/.docs/raw/docs/guides/voice.mdx +1 -1
  72. package/.docs/raw/docs/ink/hooks.mdx +1 -1
  73. package/.docs/raw/docs/ink/index.mdx +3 -2
  74. package/.docs/raw/docs/ink/migration.mdx +1 -1
  75. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +3 -3
  76. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +3 -3
  77. package/.docs/raw/docs/integrations/frameworks/{cloudflare-agents/overview.mdx → cloudflare-agents.mdx} +4 -3
  78. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +1 -1
  79. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  80. package/.docs/raw/docs/integrations/index.mdx +2 -2
  81. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +3 -3
  82. package/.docs/raw/docs/migrations/toolkit-tools.mdx +2 -2
  83. package/.docs/raw/docs/primitives/action-bar.mdx +1 -1
  84. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -1
  85. package/.docs/raw/docs/primitives/attachment.mdx +1 -1
  86. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -1
  87. package/.docs/raw/docs/primitives/chain-of-thought.mdx +3 -3
  88. package/.docs/raw/docs/primitives/composer.mdx +1 -1
  89. package/.docs/raw/docs/primitives/error.mdx +1 -1
  90. package/.docs/raw/docs/primitives/message.mdx +1 -1
  91. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -1
  92. package/.docs/raw/docs/primitives/suggestion.mdx +1 -1
  93. package/.docs/raw/docs/primitives/thread-list.mdx +1 -1
  94. package/.docs/raw/docs/primitives/thread.mdx +1 -1
  95. package/.docs/raw/docs/react-native/adapters.mdx +1 -1
  96. package/.docs/raw/docs/react-native/index.mdx +2 -2
  97. package/.docs/raw/docs/react-native/migration.mdx +2 -2
  98. package/.docs/raw/docs/react-native/primitives.mdx +142 -5
  99. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +13 -1
  100. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +3 -3
  101. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +4 -4
  102. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +31 -16
  103. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +3 -3
  104. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +3 -3
  105. package/.docs/raw/docs/runtimes/concepts/threads.mdx +5 -5
  106. package/.docs/raw/docs/runtimes/langchain.mdx +1 -1
  107. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +1 -1
  108. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +1 -1
  109. package/.docs/raw/docs/tools/backend.mdx +4 -4
  110. package/.docs/raw/docs/tools/defining-tools.mdx +2 -2
  111. package/.docs/raw/docs/tools/generative-ui.mdx +2 -2
  112. package/.docs/raw/docs/tools/interactables.mdx +3 -3
  113. package/.docs/raw/docs/tools/mcp-apps.mdx +18 -1
  114. package/.docs/raw/docs/tools/mcp.mdx +2 -2
  115. package/.docs/raw/docs/tools/openui.mdx +2 -2
  116. package/.docs/raw/docs/tools/tool-ui.mdx +17 -5
  117. package/.docs/raw/docs/tools/user-managed-mcp.mdx +2 -2
  118. package/.docs/raw/docs/ui/assistant-modal.mdx +3 -3
  119. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -1
  120. package/.docs/raw/docs/ui/attachment.mdx +30 -10
  121. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +36 -1
  122. package/.docs/raw/docs/ui/context-display.mdx +1 -1
  123. package/.docs/raw/docs/ui/directive-text.mdx +1 -1
  124. package/.docs/raw/docs/ui/file.mdx +1 -1
  125. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +1 -1
  126. package/.docs/raw/docs/ui/image.mdx +1 -1
  127. package/.docs/raw/docs/ui/markdown.mdx +40 -1
  128. package/.docs/raw/docs/ui/mermaid.mdx +1 -1
  129. package/.docs/raw/docs/ui/message-timing.mdx +1 -1
  130. package/.docs/raw/docs/ui/model-selector.mdx +4 -4
  131. package/.docs/raw/docs/ui/part-grouping.mdx +1 -1
  132. package/.docs/raw/docs/ui/quote.mdx +3 -3
  133. package/.docs/raw/docs/ui/reasoning.mdx +31 -3
  134. package/.docs/raw/docs/ui/scrollbar.mdx +1 -1
  135. package/.docs/raw/docs/ui/sources.mdx +10 -1
  136. package/.docs/raw/docs/ui/streamdown.mdx +2 -2
  137. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -1
  138. package/.docs/raw/docs/ui/thread-list.mdx +40 -1
  139. package/.docs/raw/docs/ui/thread.mdx +49 -2
  140. package/.docs/raw/docs/ui/tool-fallback.mdx +23 -9
  141. package/.docs/raw/docs/ui/tool-group.mdx +1 -1
  142. package/.docs/raw/docs/ui/voice.mdx +1 -1
  143. package/.docs/raw/docs/utilities/react-o11y.mdx +2 -2
  144. package/dist/xulux/catalog-client.d.ts.map +1 -1
  145. package/dist/xulux/catalog-client.js +51 -6
  146. package/dist/xulux/catalog-client.js.map +1 -1
  147. package/dist/xulux/types.d.ts +7 -7
  148. package/dist/xulux/types.d.ts.map +1 -1
  149. package/dist/xulux/types.js.map +1 -1
  150. package/package.json +3 -3
  151. package/src/tools/tests/docs.test.ts +10 -7
  152. package/src/tools/tests/path-traversal.test.ts +5 -2
  153. package/src/tools/tests/xulux-templates.test.ts +63 -0
  154. package/src/xulux/catalog-client.ts +68 -23
  155. package/src/xulux/types.ts +17 -13
  156. package/.docs/raw/docs/ui/accordion.mdx +0 -266
  157. package/.docs/raw/docs/ui/badge.mdx +0 -150
  158. package/.docs/raw/docs/ui/diff-viewer.mdx +0 -280
  159. package/.docs/raw/docs/ui/dot-matrix.mdx +0 -133
  160. package/.docs/raw/docs/ui/number-roll.mdx +0 -154
  161. package/.docs/raw/docs/ui/select.mdx +0 -254
  162. package/.docs/raw/docs/ui/tabs.mdx +0 -271
  163. /package/.docs/raw/docs/{(docs) → (getting-started)}/architecture.mdx +0 -0
  164. /package/.docs/raw/docs/{(docs) → (getting-started)}/base-ui.mdx +0 -0
  165. /package/.docs/raw/docs/{(docs) → (getting-started)}/cli.mdx +0 -0
  166. /package/.docs/raw/docs/{(docs) → (getting-started)}/llm.mdx +0 -0
  167. /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(registry);
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", // optional for increased security
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(catalogRegistry);
166
+ AssistantFrameProvider.addModelContextProvider(
167
+ catalogRegistry,
168
+ "https://parent-app.com",
169
+ );
164
170
  const unsubscribe2 =
165
- AssistantFrameProvider.addModelContextProvider(analyticsRegistry);
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 can specify allowed origins for security:
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", // Optional origin restriction
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? // Optional origin restriction
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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 (`useAgUiThreadRuntime`)
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 { useAgUiThreadRuntime } from "@assistant-ui/react-ag-ui";
183
-
184
- const runtime = useAgUiThreadRuntime({ runtimeUrl: "..." });
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/react-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.
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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 `@assistant-ui/cloud` |
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
- <ThreadPrimitive.Empty>
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
- </ThreadPrimitive.Empty>
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/react-ai-sdk` works with React Ink. Your runtime setup transfers directly.
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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 Integration
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 (react-ai-sdk)<br/>(thread state · tool calls · attachments<br/>speech · dictation · feedback adapters)"]
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/react-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.
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 Integration
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/react-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
+ 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/react-ai-sdk";
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/react-ai-sdk`](/docs/runtimes/ai-sdk/v7). The only difference is where the Mastra agent lives.
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/react-ai-sdk";
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/react-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.
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/overview"
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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/react-ai-sdk";
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 "@assistant-ui/cloud";
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/react-ai-sdk"]} />
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/react-ai-sdk";
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