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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/.docs/organized/code-examples/waterfall.md +1 -1
  2. package/.docs/organized/code-examples/with-a2a.md +2 -2
  3. package/.docs/organized/code-examples/with-ag-ui.md +3 -3
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +5 -5
  5. package/.docs/organized/code-examples/with-artifacts.md +5 -5
  6. package/.docs/organized/code-examples/with-assistant-transport.md +3 -3
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +79 -50
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +4 -4
  9. package/.docs/organized/code-examples/with-cloud.md +4 -4
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +56 -11
  11. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +7 -7
  12. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +7 -7
  13. package/.docs/organized/code-examples/with-expo.md +16 -16
  14. package/.docs/organized/code-examples/with-external-store.md +2 -2
  15. package/.docs/organized/code-examples/with-ffmpeg.md +5 -5
  16. package/.docs/organized/code-examples/with-generative-ui.md +5 -5
  17. package/.docs/organized/code-examples/with-google-adk.md +4 -4
  18. package/.docs/organized/code-examples/with-heat-graph.md +1 -1
  19. package/.docs/organized/code-examples/with-interactables.md +5 -5
  20. package/.docs/organized/code-examples/with-langchain.md +3 -3
  21. package/.docs/organized/code-examples/with-langgraph.md +3 -3
  22. package/.docs/organized/code-examples/with-livekit.md +8 -8
  23. package/.docs/organized/code-examples/with-opencode.md +99 -54
  24. package/.docs/organized/code-examples/with-parent-id-grouping.md +4 -4
  25. package/.docs/organized/code-examples/with-react-hook-form.md +5 -5
  26. package/.docs/organized/code-examples/with-react-ink.md +1 -1
  27. package/.docs/organized/code-examples/with-react-router.md +8 -8
  28. package/.docs/organized/code-examples/with-store.md +1 -1
  29. package/.docs/organized/code-examples/with-tanstack.md +5 -5
  30. package/.docs/organized/code-examples/with-tap-runtime.md +2 -2
  31. package/.docs/raw/docs/(docs)/cli.mdx +2 -1
  32. package/.docs/raw/docs/(docs)/copilots/assistant-frame.mdx +1 -0
  33. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +10 -3
  34. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +8 -3
  35. package/.docs/raw/docs/(docs)/copilots/make-assistant-visible.mdx +1 -0
  36. package/.docs/raw/docs/(docs)/copilots/model-context.mdx +1 -0
  37. package/.docs/raw/docs/(docs)/copilots/motivation.mdx +1 -0
  38. package/.docs/raw/docs/(docs)/copilots/use-assistant-instructions.mdx +1 -0
  39. package/.docs/raw/docs/(docs)/devtools.mdx +1 -0
  40. package/.docs/raw/docs/(docs)/index.mdx +1 -0
  41. package/.docs/raw/docs/(docs)/installation.mdx +1 -0
  42. package/.docs/raw/docs/(docs)/rtl.mdx +1 -0
  43. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +34 -0
  44. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +41 -0
  45. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +26 -0
  46. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +34 -0
  47. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +31 -0
  48. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +20 -0
  49. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +26 -0
  50. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +72 -0
  51. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +41 -0
  52. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +48 -0
  53. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +30 -0
  54. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +23 -0
  55. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +21 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +7 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +65 -0
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
  61. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
  62. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +5 -0
  63. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
  64. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +230 -2
  65. package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
  66. package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
  67. package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
  68. package/.docs/raw/docs/guides/branching.mdx +76 -0
  69. package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
  70. package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
  71. package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
  72. package/.docs/raw/docs/guides/editing.mdx +102 -0
  73. package/.docs/raw/docs/guides/index.mdx +103 -0
  74. package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
  75. package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
  76. package/.docs/raw/docs/{(docs)/guides → guides}/mentions.mdx +61 -86
  77. package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
  78. package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
  79. package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
  80. package/.docs/raw/docs/{(docs)/guides → guides}/slash-commands.mdx +103 -37
  81. package/.docs/raw/docs/guides/speech.mdx +156 -0
  82. package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
  83. package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
  84. package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
  85. package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
  86. package/.docs/raw/docs/ink/index.mdx +1 -3
  87. package/.docs/raw/docs/ink/migration.mdx +1 -3
  88. package/.docs/raw/docs/ink/primitives.mdx +37 -1
  89. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
  90. package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
  91. package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
  92. package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
  93. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
  94. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
  95. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
  96. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
  97. package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
  98. package/.docs/raw/docs/integrations/index.mdx +173 -0
  99. package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
  100. package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
  101. package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
  102. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
  103. package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
  104. package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
  105. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
  106. package/.docs/raw/docs/primitives/attachment.mdx +1 -0
  107. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
  108. package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
  109. package/.docs/raw/docs/primitives/composer.mdx +2 -1
  110. package/.docs/raw/docs/primitives/error.mdx +1 -0
  111. package/.docs/raw/docs/primitives/index.mdx +2 -1
  112. package/.docs/raw/docs/primitives/message.mdx +68 -5
  113. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
  114. package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
  115. package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
  116. package/.docs/raw/docs/primitives/thread.mdx +16 -13
  117. package/.docs/raw/docs/react-native/index.mdx +1 -3
  118. package/.docs/raw/docs/react-native/migration.mdx +1 -3
  119. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
  120. package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
  121. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
  122. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
  123. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
  124. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
  125. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
  126. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
  127. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
  128. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +330 -123
  129. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
  130. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
  131. package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
  132. package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
  133. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
  134. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
  135. package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
  136. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
  137. package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
  138. package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
  139. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
  140. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
  141. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
  142. package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
  143. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
  144. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
  145. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
  146. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
  147. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
  148. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
  149. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
  150. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
  151. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
  152. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
  153. package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
  154. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
  155. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +71 -203
  156. package/.docs/raw/docs/ui/accordion.mdx +1 -0
  157. package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
  158. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
  159. package/.docs/raw/docs/ui/attachment.mdx +1 -0
  160. package/.docs/raw/docs/ui/badge.mdx +1 -0
  161. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +1 -0
  162. package/.docs/raw/docs/ui/context-display.mdx +1 -0
  163. package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
  164. package/.docs/raw/docs/ui/directive-text.mdx +1 -0
  165. package/.docs/raw/docs/ui/file.mdx +1 -0
  166. package/.docs/raw/docs/ui/image.mdx +1 -0
  167. package/.docs/raw/docs/ui/markdown.mdx +2 -14
  168. package/.docs/raw/docs/ui/mermaid.mdx +1 -0
  169. package/.docs/raw/docs/ui/message-timing.mdx +3 -2
  170. package/.docs/raw/docs/ui/model-selector.mdx +1 -0
  171. package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
  172. package/.docs/raw/docs/ui/quote.mdx +1 -0
  173. package/.docs/raw/docs/ui/reasoning.mdx +66 -33
  174. package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
  175. package/.docs/raw/docs/ui/select.mdx +1 -0
  176. package/.docs/raw/docs/ui/sources.mdx +1 -0
  177. package/.docs/raw/docs/ui/streamdown.mdx +1 -0
  178. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
  179. package/.docs/raw/docs/ui/tabs.mdx +1 -0
  180. package/.docs/raw/docs/ui/thread-list.mdx +17 -0
  181. package/.docs/raw/docs/ui/thread.mdx +56 -1
  182. package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
  183. package/.docs/raw/docs/ui/tool-group.mdx +39 -11
  184. package/.docs/raw/docs/ui/voice.mdx +1 -0
  185. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
  186. package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
  187. package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
  188. package/package.json +3 -3
  189. package/src/tools/tests/path-traversal.test.ts +1 -1
  190. package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
  191. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
  192. package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
  193. package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
  194. package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
  195. package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
  196. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -314
  197. package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
  198. package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
  199. package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
  200. package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
  201. package/.docs/raw/docs/runtimes/langchain/comparison.mdx +0 -60
  202. package/.docs/raw/docs/runtimes/langchain/index.mdx +0 -210
  203. package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -699
  204. package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
  205. package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
  206. package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
  207. package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
  208. package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
@@ -55,6 +55,9 @@ Create a new project in the [assistant-cloud dashboard](https://cloud.assistant-
55
55
 
56
56
  Add the following environment variables to your project:
57
57
 
58
+ <PlatformTabs>
59
+ <Tab value="React">
60
+
58
61
  ```bash title=".env.local"
59
62
  # Frontend API URL from your cloud project settings
60
63
  NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
@@ -63,6 +66,31 @@ NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
63
66
  ASSISTANT_API_KEY=your-api-key-here
64
67
  ```
65
68
 
69
+ </Tab>
70
+ <Tab value="React Native">
71
+
72
+ ```bash title=".env"
73
+ # Client API URL from your cloud project settings
74
+ EXPO_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
75
+
76
+ # API key for server-side operations; do not ship this in your app bundle
77
+ ASSISTANT_API_KEY=your-api-key-here
78
+ ```
79
+
80
+ </Tab>
81
+ <Tab value="React Ink">
82
+
83
+ ```bash title=".env"
84
+ # Client API URL from your cloud project settings
85
+ ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
86
+
87
+ # API key for server-side operations; do not ship this in your CLI bundle
88
+ ASSISTANT_API_KEY=your-api-key-here
89
+ ```
90
+
91
+ </Tab>
92
+ </PlatformTabs>
93
+
66
94
  </Step>
67
95
 
68
96
  <Step>
@@ -71,8 +99,24 @@ ASSISTANT_API_KEY=your-api-key-here
71
99
 
72
100
  Install the required packages:
73
101
 
102
+ <PlatformTabs>
103
+ <Tab value="React">
104
+
74
105
  <InstallCommand npm={["@assistant-ui/react", "@assistant-ui/react-ai-sdk"]} />
75
106
 
107
+ </Tab>
108
+ <Tab value="React Native">
109
+
110
+ <InstallCommand expo={["@assistant-ui/react-native", "@assistant-ui/react-ai-sdk", "assistant-cloud"]} />
111
+
112
+ </Tab>
113
+ <Tab value="React Ink">
114
+
115
+ <InstallCommand npm={["@assistant-ui/react-ink", "@assistant-ui/react-ai-sdk", "assistant-cloud", "ink", "react"]} />
116
+
117
+ </Tab>
118
+ </PlatformTabs>
119
+
76
120
  </Step>
77
121
 
78
122
  <Step>
@@ -81,6 +125,9 @@ Install the required packages:
81
125
 
82
126
  Create a client-side AssistantCloud instance and integrate it with your AI SDK runtime:
83
127
 
128
+ <PlatformTabs>
129
+ <Tab value="React">
130
+
84
131
  ```tsx title="app/chat/page.tsx"
85
132
  "use client";
86
133
 
@@ -115,6 +162,133 @@ export default function ChatPage() {
115
162
  }
116
163
  ```
117
164
 
165
+ </Tab>
166
+ <Tab value="React Native">
167
+
168
+ ```tsx title="app/chat.tsx"
169
+ import { useMemo } from "react";
170
+ import { Text, View } from "react-native";
171
+ import {
172
+ AssistantRuntimeProvider,
173
+ ThreadListItemPrimitive,
174
+ ThreadListPrimitive,
175
+ } from "@assistant-ui/react-native";
176
+ import { AssistantCloud } from "assistant-cloud";
177
+ import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
178
+ import { Thread } from "@/components/assistant-ui/thread";
179
+
180
+ async function getAssistantToken() {
181
+ // Return a user token from your auth provider.
182
+ return "...";
183
+ }
184
+
185
+ function ThreadList() {
186
+ return (
187
+ <ThreadListPrimitive.Root>
188
+ <ThreadListPrimitive.New>
189
+ <Text>New chat</Text>
190
+ </ThreadListPrimitive.New>
191
+ <ThreadListPrimitive.Items
192
+ renderItem={({ threadId }) => (
193
+ <ThreadListItemPrimitive.Root key={threadId}>
194
+ <ThreadListItemPrimitive.Trigger>
195
+ <ThreadListItemPrimitive.Title fallback="New conversation" />
196
+ </ThreadListItemPrimitive.Trigger>
197
+ </ThreadListItemPrimitive.Root>
198
+ )}
199
+ />
200
+ </ThreadListPrimitive.Root>
201
+ );
202
+ }
203
+
204
+ export default function ChatScreen() {
205
+ const cloud = useMemo(
206
+ () =>
207
+ new AssistantCloud({
208
+ baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
209
+ authToken: getAssistantToken,
210
+ }),
211
+ [],
212
+ );
213
+
214
+ const runtime = useChatRuntime({ cloud });
215
+
216
+ return (
217
+ <AssistantRuntimeProvider runtime={runtime}>
218
+ <View style={{ flex: 1 }}>
219
+ <ThreadList />
220
+ <Thread />
221
+ </View>
222
+ </AssistantRuntimeProvider>
223
+ );
224
+ }
225
+ ```
226
+
227
+ </Tab>
228
+ <Tab value="React Ink">
229
+
230
+ ```tsx title="chat.tsx"
231
+ import { useMemo } from "react";
232
+ import { Box, Text } from "ink";
233
+ import {
234
+ AssistantRuntimeProvider,
235
+ ThreadListItemPrimitive,
236
+ ThreadListPrimitive,
237
+ } from "@assistant-ui/react-ink";
238
+ import { AssistantCloud } from "assistant-cloud";
239
+ import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
240
+ import { Thread } from "./components/thread.js";
241
+
242
+ async function getAssistantToken() {
243
+ // Return a user token from your auth provider.
244
+ return "...";
245
+ }
246
+
247
+ function ThreadList() {
248
+ return (
249
+ <ThreadListPrimitive.Root>
250
+ <ThreadListPrimitive.New>
251
+ <Text color="green">[New chat]</Text>
252
+ </ThreadListPrimitive.New>
253
+ <ThreadListPrimitive.Items
254
+ renderItem={({ threadId }) => (
255
+ <ThreadListItemPrimitive.Root key={threadId}>
256
+ <ThreadListItemPrimitive.Trigger>
257
+ <ThreadListItemPrimitive.Title fallback="New conversation" />
258
+ </ThreadListItemPrimitive.Trigger>
259
+ </ThreadListItemPrimitive.Root>
260
+ )}
261
+ />
262
+ </ThreadListPrimitive.Root>
263
+ );
264
+ }
265
+
266
+ export function Chat() {
267
+ const cloud = useMemo(
268
+ () =>
269
+ new AssistantCloud({
270
+ baseUrl: process.env.ASSISTANT_BASE_URL!,
271
+ authToken: getAssistantToken,
272
+ }),
273
+ [],
274
+ );
275
+
276
+ const runtime = useChatRuntime({ cloud });
277
+
278
+ return (
279
+ <AssistantRuntimeProvider runtime={runtime}>
280
+ <Box flexDirection="column">
281
+ <ThreadList />
282
+ <Thread />
283
+ </Box>
284
+ </AssistantRuntimeProvider>
285
+ );
286
+ }
287
+ ```
288
+
289
+ </Tab>
290
+ </PlatformTabs>
291
+
118
292
  </Step>
119
293
 
120
294
  </Steps>
@@ -213,7 +387,7 @@ export async function POST(req: Request) {
213
387
  const { messages } = await req.json();
214
388
 
215
389
  const result = streamText({
216
- model: openai("gpt-4o-mini"),
390
+ model: openai("gpt-5.4-mini"),
217
391
  messages,
218
392
  });
219
393
 
@@ -264,7 +438,10 @@ See the [AI SDK Telemetry guide](/docs/cloud/ai-sdk#sub-agent-model-tracking) fo
264
438
 
265
439
  ## Authentication
266
440
 
267
- The example above uses anonymous mode (browser session-based user ID) via the env var. For production apps with user accounts, pass an explicit cloud instance:
441
+ The React example above uses anonymous mode for quick demos. For production apps with user accounts, pass an explicit cloud instance with a token from your auth provider:
442
+
443
+ <PlatformTabs>
444
+ <Tab value="React">
268
445
 
269
446
  ```tsx
270
447
  import { useMemo } from "react";
@@ -285,6 +462,57 @@ function Chat() {
285
462
  }
286
463
  ```
287
464
 
465
+ </Tab>
466
+ <Tab value="React Native">
467
+
468
+ ```tsx
469
+ import { useMemo } from "react";
470
+ import { AssistantCloud } from "assistant-cloud";
471
+ import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
472
+
473
+ async function getAssistantToken() {
474
+ // Return a user token from your native auth provider.
475
+ return "...";
476
+ }
477
+
478
+ function Chat() {
479
+ const cloud = useMemo(() => new AssistantCloud({
480
+ baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
481
+ authToken: getAssistantToken,
482
+ }), []);
483
+
484
+ const runtime = useChatRuntime({ cloud });
485
+ // ...
486
+ }
487
+ ```
488
+
489
+ </Tab>
490
+ <Tab value="React Ink">
491
+
492
+ ```tsx
493
+ import { useMemo } from "react";
494
+ import { AssistantCloud } from "assistant-cloud";
495
+ import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
496
+
497
+ async function getAssistantToken() {
498
+ // Return a user token from your CLI auth flow.
499
+ return "...";
500
+ }
501
+
502
+ function Chat() {
503
+ const cloud = useMemo(() => new AssistantCloud({
504
+ baseUrl: process.env.ASSISTANT_BASE_URL!,
505
+ authToken: getAssistantToken,
506
+ }), []);
507
+
508
+ const runtime = useChatRuntime({ cloud });
509
+ // ...
510
+ }
511
+ ```
512
+
513
+ </Tab>
514
+ </PlatformTabs>
515
+
288
516
  See the [Cloud Authorization](/docs/cloud/authorization) guide for other auth providers.
289
517
 
290
518
 
@@ -39,24 +39,63 @@ Create a new project in the [assistant-cloud dashboard](https://cloud.assistant-
39
39
 
40
40
  ### Configure Environment Variables
41
41
 
42
+ <PlatformTabs>
43
+ <Tab value="React">
44
+
42
45
  ```bash title=".env.local"
43
46
  NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
44
47
  ```
45
48
 
49
+ </Tab>
50
+ <Tab value="React Native">
51
+
52
+ ```bash title=".env"
53
+ EXPO_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
54
+ ```
55
+
56
+ </Tab>
57
+ <Tab value="React Ink">
58
+
59
+ ```bash title=".env"
60
+ ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
61
+ ```
62
+
63
+ </Tab>
64
+ </PlatformTabs>
65
+
46
66
  </Step>
47
67
 
48
68
  <Step>
49
69
 
50
70
  ### Install Dependencies
51
71
 
72
+ <PlatformTabs>
73
+ <Tab value="React">
74
+
52
75
  <InstallCommand npm={["@assistant-ui/cloud-ai-sdk", "@ai-sdk/react", "ai"]} />
53
76
 
77
+ </Tab>
78
+ <Tab value="React Native">
79
+
80
+ <InstallCommand expo={["@assistant-ui/cloud-ai-sdk", "@ai-sdk/react", "ai", "assistant-cloud"]} />
81
+
82
+ </Tab>
83
+ <Tab value="React Ink">
84
+
85
+ <InstallCommand npm={["@assistant-ui/cloud-ai-sdk", "@ai-sdk/react", "ai", "assistant-cloud", "ink", "react"]} />
86
+
87
+ </Tab>
88
+ </PlatformTabs>
89
+
54
90
  </Step>
55
91
 
56
92
  <Step>
57
93
 
58
94
  ### Integrate
59
95
 
96
+ <PlatformTabs>
97
+ <Tab value="React">
98
+
60
99
  ```tsx title="app/page.tsx"
61
100
  "use client";
62
101
 
@@ -106,6 +145,131 @@ export default function Chat() {
106
145
  }
107
146
  ```
108
147
 
148
+ </Tab>
149
+ <Tab value="React Native">
150
+
151
+ ```tsx title="app/index.tsx"
152
+ import { useMemo, useState } from "react";
153
+ import { Pressable, Text, TextInput, View } from "react-native";
154
+ import { AssistantCloud } from "assistant-cloud";
155
+ import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
156
+
157
+ async function getAssistantToken() {
158
+ // Return a user token from your auth provider.
159
+ return "...";
160
+ }
161
+
162
+ export default function Chat() {
163
+ const cloud = useMemo(
164
+ () =>
165
+ new AssistantCloud({
166
+ baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
167
+ authToken: getAssistantToken,
168
+ }),
169
+ [],
170
+ );
171
+ const { messages, sendMessage, threads } = useCloudChat({ cloud });
172
+
173
+ const [input, setInput] = useState("");
174
+ const handleSubmit = () => {
175
+ if (!input.trim()) return;
176
+ sendMessage({ text: input });
177
+ setInput("");
178
+ };
179
+
180
+ return (
181
+ <View>
182
+ <View>
183
+ {threads.threads.map((t) => (
184
+ <Pressable key={t.id} onPress={() => threads.selectThread(t.id)}>
185
+ <Text>{t.title || "New conversation"}</Text>
186
+ </Pressable>
187
+ ))}
188
+ <Pressable onPress={() => threads.selectThread(null)}>
189
+ <Text>New chat</Text>
190
+ </Pressable>
191
+ </View>
192
+
193
+ <View>
194
+ {messages.map((m) => (
195
+ <Text key={m.id}>
196
+ {m.parts.map((p) => p.type === "text" && p.text)}
197
+ </Text>
198
+ ))}
199
+ </View>
200
+
201
+ <TextInput value={input} onChangeText={setInput} />
202
+ <Pressable onPress={handleSubmit}>
203
+ <Text>Send</Text>
204
+ </Pressable>
205
+ </View>
206
+ );
207
+ }
208
+ ```
209
+
210
+ </Tab>
211
+ <Tab value="React Ink">
212
+
213
+ ```tsx title="app.tsx"
214
+ import { useMemo, useState } from "react";
215
+ import { Box, Text, useInput } from "ink";
216
+ import { AssistantCloud } from "assistant-cloud";
217
+ import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
218
+
219
+ async function getAssistantToken() {
220
+ // Return a user token from your auth provider.
221
+ return "...";
222
+ }
223
+
224
+ export function Chat() {
225
+ const cloud = useMemo(
226
+ () =>
227
+ new AssistantCloud({
228
+ baseUrl: process.env.ASSISTANT_BASE_URL!,
229
+ authToken: getAssistantToken,
230
+ }),
231
+ [],
232
+ );
233
+ const { messages, sendMessage, threads } = useCloudChat({ cloud });
234
+
235
+ const [input, setInput] = useState("");
236
+ const handleSubmit = () => {
237
+ if (!input.trim()) return;
238
+ sendMessage({ text: input });
239
+ setInput("");
240
+ };
241
+
242
+ useInput((value, key) => {
243
+ if (key.return) handleSubmit();
244
+ else if (key.tab) threads.selectThread(null);
245
+ else if (key.backspace || key.delete) setInput((text) => text.slice(0, -1));
246
+ else if (value) setInput((text) => text + value);
247
+ });
248
+
249
+ return (
250
+ <Box flexDirection="column">
251
+ <Text bold>Threads</Text>
252
+ {threads.threads.map((t) => (
253
+ <Text key={t.id}>{t.title || "New conversation"}</Text>
254
+ ))}
255
+ <Text dimColor>Press tab for a new chat.</Text>
256
+
257
+ {messages.map((m) => (
258
+ <Text key={m.id}>
259
+ {m.parts.map((p) => p.type === "text" && p.text)}
260
+ </Text>
261
+ ))}
262
+
263
+ <Text>{"> "}{input}</Text>
264
+ <Text dimColor>Press enter to send.</Text>
265
+ </Box>
266
+ );
267
+ }
268
+ ```
269
+
270
+ </Tab>
271
+ </PlatformTabs>
272
+
109
273
  </Step>
110
274
 
111
275
  </Steps>
@@ -229,7 +393,7 @@ export async function POST(req: Request) {
229
393
  const { messages } = await req.json();
230
394
 
231
395
  const result = streamText({
232
- model: openai("gpt-4o-mini"),
396
+ model: openai("gpt-5.4-mini"),
233
397
  messages,
234
398
  });
235
399
 
@@ -297,7 +461,7 @@ export async function POST(req: Request) {
297
461
  const samplingCalls: Record<string, SamplingCallData[]> = {};
298
462
 
299
463
  const result = streamText({
300
- model: openai("gpt-4o"),
464
+ model: openai("gpt-5.4-mini"),
301
465
  messages,
302
466
  tools: {
303
467
  delegate_to_gemini: tool({
@@ -356,7 +520,10 @@ export async function POST(req: Request) {
356
520
 
357
521
  ## Authentication
358
522
 
359
- The example above uses anonymous mode (browser session-based user ID) via the env var. For production apps with user accounts, pass an explicit cloud instance:
523
+ The React example above uses anonymous mode for quick demos. For production apps with user accounts, pass an explicit cloud instance with a token from your auth provider:
524
+
525
+ <PlatformTabs>
526
+ <Tab value="React">
360
527
 
361
528
  ```tsx
362
529
  import { useMemo } from "react";
@@ -377,6 +544,57 @@ function Chat() {
377
544
  }
378
545
  ```
379
546
 
547
+ </Tab>
548
+ <Tab value="React Native">
549
+
550
+ ```tsx
551
+ import { useMemo } from "react";
552
+ import { AssistantCloud } from "assistant-cloud";
553
+ import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
554
+
555
+ async function getAssistantToken() {
556
+ // Return a user token from your native auth provider.
557
+ return "...";
558
+ }
559
+
560
+ function Chat() {
561
+ const cloud = useMemo(() => new AssistantCloud({
562
+ baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
563
+ authToken: getAssistantToken,
564
+ }), []);
565
+
566
+ const { messages, sendMessage, threads } = useCloudChat({ cloud });
567
+ // ...
568
+ }
569
+ ```
570
+
571
+ </Tab>
572
+ <Tab value="React Ink">
573
+
574
+ ```tsx
575
+ import { useMemo } from "react";
576
+ import { AssistantCloud } from "assistant-cloud";
577
+ import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
578
+
579
+ async function getAssistantToken() {
580
+ // Return a user token from your CLI auth flow.
581
+ return "...";
582
+ }
583
+
584
+ function Chat() {
585
+ const cloud = useMemo(() => new AssistantCloud({
586
+ baseUrl: process.env.ASSISTANT_BASE_URL!,
587
+ authToken: getAssistantToken,
588
+ }), []);
589
+
590
+ const { messages, sendMessage, threads } = useCloudChat({ cloud });
591
+ // ...
592
+ }
593
+ ```
594
+
595
+ </Tab>
596
+ </PlatformTabs>
597
+
380
598
  See the [Cloud Authorization](/docs/cloud/authorization) guide for other auth providers.
381
599
 
382
600
  ## Next Steps