@assistant-ui/mcp-docs-server 0.1.39 → 0.2.1

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 (185) hide show
  1. package/.docs/organized/code-examples/waterfall.md +17 -18
  2. package/.docs/organized/code-examples/with-a2a.md +20 -15
  3. package/.docs/organized/code-examples/with-ag-ui.md +19 -17
  4. package/.docs/organized/code-examples/with-ai-sdk-v7.md +17 -16
  5. package/.docs/organized/code-examples/with-artifacts.md +471 -145
  6. package/.docs/organized/code-examples/with-assistant-transport.md +23 -31
  7. package/.docs/organized/code-examples/with-browser-extension.md +21 -14
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +22 -20
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +13 -14
  10. package/.docs/organized/code-examples/with-cloud.md +22 -17
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +17 -16
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -17
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +21 -19
  14. package/.docs/organized/code-examples/with-eve.md +70 -16
  15. package/.docs/organized/code-examples/with-expo.md +32 -51
  16. package/.docs/organized/code-examples/with-external-store.md +20 -15
  17. package/.docs/organized/code-examples/with-ffmpeg.md +24 -18
  18. package/.docs/organized/code-examples/with-generative-ui.md +20 -21
  19. package/.docs/organized/code-examples/with-google-adk.md +21 -16
  20. package/.docs/organized/code-examples/with-heat-graph.md +10 -11
  21. package/.docs/organized/code-examples/with-image-generation.md +13 -14
  22. package/.docs/organized/code-examples/with-interactables.md +17 -16
  23. package/.docs/organized/code-examples/with-langchain.md +13 -14
  24. package/.docs/organized/code-examples/with-langgraph.md +23 -17
  25. package/.docs/organized/code-examples/with-livekit.md +17 -17
  26. package/.docs/organized/code-examples/with-mcp.md +36 -32
  27. package/.docs/organized/code-examples/with-nuxt.md +2492 -0
  28. package/.docs/organized/code-examples/with-opencode.md +27 -21
  29. package/.docs/organized/code-examples/with-pi.md +69 -67
  30. package/.docs/organized/code-examples/with-react-hook-form.md +18 -17
  31. package/.docs/organized/code-examples/with-react-ink-web.md +10 -11
  32. package/.docs/organized/code-examples/with-react-ink.md +7 -7
  33. package/.docs/organized/code-examples/with-react-router.md +23 -17
  34. package/.docs/organized/code-examples/with-resumable-stream.md +15 -16
  35. package/.docs/organized/code-examples/with-store.md +31 -20
  36. package/.docs/organized/code-examples/with-tanstack.md +22 -16
  37. package/.docs/organized/code-examples/with-tap-runtime.md +19 -19
  38. package/.docs/organized/code-examples/with-virtualized-thread.md +12 -13
  39. package/.docs/organized/code-examples/with-vue.md +408 -0
  40. package/.docs/raw/docs/(docs)/cli.mdx +3 -1
  41. package/.docs/raw/docs/(docs)/devtools.mdx +7 -2
  42. package/.docs/raw/docs/(docs)/index.mdx +9 -76
  43. package/.docs/raw/docs/(docs)/installation.mdx +4 -18
  44. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +24 -4
  45. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +40 -0
  46. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +3 -0
  47. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +19 -420
  48. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +4 -1
  49. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +8 -0
  50. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +21 -0
  51. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +1 -9
  52. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +1 -18
  53. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +24 -1
  54. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +1 -1
  55. package/.docs/raw/docs/cloud/ai-sdk.mdx +2 -2
  56. package/.docs/raw/docs/cloud/langgraph.mdx +1 -1
  57. package/.docs/raw/docs/copilots/model-context.mdx +5 -4
  58. package/.docs/raw/docs/copilots/motivation.mdx +5 -5
  59. package/.docs/raw/docs/guides/attachments.mdx +3 -3
  60. package/.docs/raw/docs/guides/branching.mdx +2 -2
  61. package/.docs/raw/docs/guides/chain-of-thought.mdx +1 -1
  62. package/.docs/raw/docs/guides/context-api.mdx +89 -111
  63. package/.docs/raw/docs/guides/editing.mdx +5 -5
  64. package/.docs/raw/docs/guides/electron.mdx +369 -0
  65. package/.docs/raw/docs/guides/index.mdx +10 -0
  66. package/.docs/raw/docs/guides/quoting.mdx +3 -3
  67. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +2 -2
  68. package/.docs/raw/docs/guides/resumable-streams.mdx +74 -3
  69. package/.docs/raw/docs/guides/suggestions.mdx +9 -9
  70. package/.docs/raw/docs/ink/hooks.mdx +12 -7
  71. package/.docs/raw/docs/ink/primitives.mdx +18 -10
  72. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +16 -0
  73. package/.docs/raw/docs/integrations/auth/better-auth.mdx +3 -3
  74. package/.docs/raw/docs/integrations/auth/clerk.mdx +3 -3
  75. package/.docs/raw/docs/integrations/auth/next-auth.mdx +4 -4
  76. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +1 -1
  77. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +2 -2
  78. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  79. package/.docs/raw/docs/integrations/gateways/index.mdx +2 -2
  80. package/.docs/raw/docs/integrations/observability/helicone.mdx +2 -2
  81. package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
  82. package/.docs/raw/docs/integrations/observability/langsmith.mdx +3 -3
  83. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +36 -9
  84. package/.docs/raw/docs/migrations/toolkit-tools.mdx +15 -13
  85. package/.docs/raw/docs/migrations/v0-15.mdx +236 -0
  86. package/.docs/raw/docs/primitives/attachment.mdx +2 -2
  87. package/.docs/raw/docs/primitives/composer.mdx +3 -3
  88. package/.docs/raw/docs/primitives/message.mdx +33 -1
  89. package/.docs/raw/docs/primitives/suggestion.mdx +1 -1
  90. package/.docs/raw/docs/primitives/thread-list.mdx +2 -2
  91. package/.docs/raw/docs/react-native/hooks.mdx +17 -7
  92. package/.docs/raw/docs/react-native/index.mdx +3 -3
  93. package/.docs/raw/docs/react-native/primitives.mdx +41 -7
  94. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +3 -3
  95. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +5 -5
  96. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +5 -5
  97. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +13 -14
  98. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +11 -12
  99. package/.docs/raw/docs/runtimes/concepts/threads.mdx +50 -11
  100. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +20 -2
  101. package/.docs/raw/docs/runtimes/custom/external-store.mdx +31 -2
  102. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +39 -12
  103. package/.docs/raw/docs/runtimes/eve/overview.mdx +51 -0
  104. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +51 -2
  105. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +9 -12
  106. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  107. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +1 -1
  108. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +1 -1
  109. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +7 -7
  110. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +4 -4
  111. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +4 -1
  112. package/.docs/raw/docs/runtimes/opencode/overview.mdx +10 -0
  113. package/.docs/raw/docs/tools/a2ui.mdx +107 -0
  114. package/.docs/raw/docs/tools/backend.mdx +2 -2
  115. package/.docs/raw/docs/tools/defining-tools.mdx +9 -7
  116. package/.docs/raw/docs/tools/dynamic-tools.mdx +6 -4
  117. package/.docs/raw/docs/tools/interactables-legacy.mdx +28 -15
  118. package/.docs/raw/docs/tools/interactables.mdx +27 -16
  119. package/.docs/raw/docs/tools/mcp-apps.mdx +96 -8
  120. package/.docs/raw/docs/tools/mcp.mdx +9 -7
  121. package/.docs/raw/docs/tools/tool-ui.mdx +26 -22
  122. package/.docs/raw/docs/tools/user-managed-mcp.mdx +64 -14
  123. package/.docs/raw/docs/ui/file.mdx +6 -1
  124. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +2 -0
  125. package/.docs/raw/docs/ui/mcp-config.mdx +8 -3
  126. package/.docs/raw/docs/ui/model-selector.mdx +9 -9
  127. package/.docs/raw/docs/ui/part-grouping.mdx +1 -5
  128. package/.docs/raw/docs/ui/reasoning.mdx +1 -1
  129. package/.docs/raw/docs/ui/thread.mdx +24 -5
  130. package/.docs/raw/docs/utilities/react-o11y.mdx +7 -9
  131. package/dist/constants.js +2 -2
  132. package/dist/constants.js.map +1 -1
  133. package/dist/index.d.ts +1 -1
  134. package/dist/index.js +2 -2
  135. package/dist/index.js.map +1 -1
  136. package/dist/prepare-docs/code-examples.js.map +1 -1
  137. package/dist/prepare-docs/prepare.d.ts +1 -1
  138. package/dist/prepare-docs/prepare.js.map +1 -1
  139. package/dist/stdio.d.ts +1 -1
  140. package/dist/tools/docs.d.ts +6 -10
  141. package/dist/tools/docs.d.ts.map +1 -1
  142. package/dist/tools/docs.js +6 -4
  143. package/dist/tools/docs.js.map +1 -1
  144. package/dist/tools/examples.d.ts +4 -8
  145. package/dist/tools/examples.d.ts.map +1 -1
  146. package/dist/tools/examples.js +4 -3
  147. package/dist/tools/examples.js.map +1 -1
  148. package/dist/tools/resources.d.ts +1 -1
  149. package/dist/tools/resources.d.ts.map +1 -1
  150. package/dist/tools/resources.js +3 -2
  151. package/dist/tools/resources.js.map +1 -1
  152. package/dist/tools/search.d.ts +4 -10
  153. package/dist/tools/search.d.ts.map +1 -1
  154. package/dist/tools/search.js +2 -2
  155. package/dist/tools/search.js.map +1 -1
  156. package/dist/tools/tests/mcp-test-client.d.ts +15 -0
  157. package/dist/tools/tests/mcp-test-client.d.ts.map +1 -0
  158. package/dist/tools/tests/mcp-test-client.js +68 -0
  159. package/dist/tools/tests/mcp-test-client.js.map +1 -0
  160. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  161. package/dist/tools/tests/test-setup.js +2 -1
  162. package/dist/tools/tests/test-setup.js.map +1 -1
  163. package/dist/tools/xulux-templates.d.ts +9 -23
  164. package/dist/tools/xulux-templates.d.ts.map +1 -1
  165. package/dist/tools/xulux-templates.js +8 -6
  166. package/dist/tools/xulux-templates.js.map +1 -1
  167. package/dist/utils/logger.d.ts.map +1 -1
  168. package/dist/utils/mdx.js +2 -1
  169. package/dist/utils/mdx.js.map +1 -1
  170. package/dist/utils/security.js.map +1 -1
  171. package/dist/xulux/catalog-client.js +1 -1
  172. package/dist/xulux/catalog-client.js.map +1 -1
  173. package/package.json +6 -5
  174. package/src/index.ts +2 -2
  175. package/src/tools/docs.ts +2 -2
  176. package/src/tools/examples.ts +2 -2
  177. package/src/tools/resources.ts +1 -4
  178. package/src/tools/search.ts +2 -2
  179. package/src/tools/tests/completions.test.ts +40 -26
  180. package/src/tools/tests/docs.test.ts +2 -2
  181. package/src/tools/tests/integration.test.ts +3 -4
  182. package/src/tools/tests/mcp-protocol.test.ts +160 -175
  183. package/src/tools/tests/mcp-test-client.ts +111 -0
  184. package/src/tools/tests/resources.test.ts +97 -66
  185. package/src/tools/xulux-templates.ts +4 -4
@@ -179,16 +179,17 @@ export default function RootLayout({
179
179
  "use client";
180
180
 
181
181
  import { Thread } from "@/components/assistant-ui/thread";
182
+ import { EveAuthorization } from "@/components/eve-authorization";
182
183
  import {
183
184
  AssistantRuntimeProvider,
185
+ AuiConfig,
184
186
  Suggestions,
185
- useAui,
186
187
  } from "@assistant-ui/react";
187
188
  import { useEveAgentRuntime } from "@assistant-ui/eve";
188
189
 
189
190
  export default function Home() {
190
191
  const runtime = useEveAgentRuntime();
191
- const aui = useAui({
192
+ const config = AuiConfig({
192
193
  suggestions: Suggestions([
193
194
  {
194
195
  title: "Explain Eve",
@@ -206,7 +207,8 @@ export default function Home() {
206
207
  });
207
208
 
208
209
  return (
209
- <AssistantRuntimeProvider runtime={runtime} aui={aui}>
210
+ <AssistantRuntimeProvider runtime={runtime} config={config}>
211
+ <EveAuthorization />
210
212
  <div className="h-full">
211
213
  <Thread />
212
214
  </div>
@@ -246,6 +248,59 @@ export default function Home() {
246
248
 
247
249
  ```
248
250
 
251
+ ## components/eve-authorization.tsx
252
+
253
+ ```tsx
254
+ "use client";
255
+
256
+ import type { EveAuthorizationData } from "@assistant-ui/eve";
257
+ import { makeAssistantDataUI } from "@assistant-ui/react";
258
+
259
+ export const EveAuthorization = makeAssistantDataUI<EveAuthorizationData>({
260
+ name: "authorization",
261
+ render: ({ data }) => {
262
+ const label = data.displayName ?? data.name;
263
+
264
+ if (data.state !== "required") {
265
+ // Eve inherits `description` from the pending part, so a settled
266
+ // authorization still reads as a sign-in prompt.
267
+ const suffix = data.reason ? ` (${data.reason})` : "";
268
+ return (
269
+ <div className="text-muted-foreground my-2 text-sm">
270
+ {data.outcome === "authorized"
271
+ ? `${label} connected.`
272
+ : `${label} authorization ${data.outcome ?? "completed"}${suffix}.`}
273
+ </div>
274
+ );
275
+ }
276
+
277
+ return (
278
+ <div className="my-2 flex flex-col items-start gap-2 rounded-lg border p-4">
279
+ <p className="text-sm">
280
+ {data.instructions ?? `Sign in to ${label} to continue.`}
281
+ </p>
282
+ {data.userCode && (
283
+ <code className="bg-muted rounded px-2 py-1 font-mono text-sm">
284
+ {data.userCode}
285
+ </code>
286
+ )}
287
+ {data.url && (
288
+ <a
289
+ className="text-sm underline"
290
+ href={data.url}
291
+ target="_blank"
292
+ rel="noreferrer"
293
+ >
294
+ Continue to sign in
295
+ </a>
296
+ )}
297
+ </div>
298
+ );
299
+ },
300
+ });
301
+
302
+ ```
303
+
249
304
  ## next.config.ts
250
305
 
251
306
  ```typescript
@@ -281,25 +336,24 @@ export default withEve(withAui(nextConfig));
281
336
  "@assistant-ui/ui": "workspace:*",
282
337
  "class-variance-authority": "^0.7.1",
283
338
  "clsx": "^2.1.1",
284
- "eve": "^0.24.3",
285
- "lucide-react": "^1.24.0",
286
- "next": "^16.2.10",
287
- "react": "^19.2.7",
288
- "react-dom": "^19.2.7",
339
+ "eve": "^0.27.6",
340
+ "lucide-react": "^1.29.0",
341
+ "next": "^16.3.0",
342
+ "react": "^19.2.8",
343
+ "react-dom": "^19.2.8",
289
344
  "tailwind-merge": "^3.6.0"
290
345
  },
291
346
  "devDependencies": {
292
347
  "@assistant-ui/next": "workspace:*",
293
348
  "@assistant-ui/x-buildutils": "workspace:*",
294
- "@tailwindcss/postcss": "^4.3.2",
295
- "@types/node": "^26.1.1",
296
- "@types/react": "^19.2.17",
297
- "@types/react-dom": "^19.2.3",
298
- "postcss": "^8.5.19",
299
- "tailwindcss": "^4.3.2",
349
+ "@tailwindcss/postcss": "^4.3.3",
350
+ "@types/node": "^26.1.2",
351
+ "@types/react": "^19.2.18",
352
+ "@types/react-dom": "^19.2.4",
353
+ "postcss": "^8.5.26",
354
+ "tailwindcss": "^4.3.3",
300
355
  "tw-animate-css": "^1.4.0",
301
- "typescript": "npm:@typescript/typescript6@^6.0.2",
302
- "typescript-7": "npm:typescript@^7.0.2"
356
+ "typescript": "^7.0.2"
303
357
  }
304
358
  }
305
359
 
@@ -97,6 +97,7 @@ import { GestureHandlerRootView } from "react-native-gesture-handler";
97
97
 
98
98
  import {
99
99
  AssistantRuntimeProvider,
100
+ AuiConfig,
100
101
  useAui,
101
102
  Tools,
102
103
  } from "@assistant-ui/react-native";
@@ -117,7 +118,7 @@ function NewChatButton() {
117
118
  hitSlop={8}
118
119
  onPress={() => {
119
120
  haptics.selection();
120
- aui.threads().switchToNewThread();
121
+ aui.threads.switchToNewThread();
121
122
  }}
122
123
  style={{ marginRight: 16 }}
123
124
  >
@@ -170,7 +171,7 @@ export default function RootLayout() {
170
171
  Platform.OS === "ios" ? {} : MaterialIcons.font,
171
172
  );
172
173
  const runtime = useAppRuntime();
173
- const aui = useAui({
174
+ const config = AuiConfig({
174
175
  tools: Tools({ toolkit }),
175
176
  });
176
177
 
@@ -178,7 +179,7 @@ export default function RootLayout() {
178
179
 
179
180
  return (
180
181
  <GestureHandlerRootView style={{ flex: 1 }}>
181
- <AssistantRuntimeProvider runtime={runtime} aui={aui}>
182
+ <AssistantRuntimeProvider runtime={runtime} config={config}>
182
183
  <DrawerLayout />
183
184
  </AssistantRuntimeProvider>
184
185
  </GestureHandlerRootView>
@@ -362,7 +363,7 @@ function AttachButton() {
362
363
  for (const asset of result.assets) {
363
364
  // iOS may report HEIC, which OpenAI rejects; normalize to JPEG.
364
365
  const dataUrl = `data:image/jpeg;base64,${asset.base64}`;
365
- await aui.composer().addAttachment({
366
+ await aui.composer.addAttachment({
366
367
  name: asset.fileName ?? "image.jpg",
367
368
  contentType: "image/jpeg",
368
369
  type: "image",
@@ -853,14 +854,12 @@ const styles = StyleSheet.create({
853
854
  ## components/assistant-ui/thread.tsx
854
855
 
855
856
  ```tsx
856
- import { useRef } from "react";
857
857
  import {
858
858
  View,
859
859
  Text,
860
860
  StyleSheet,
861
861
  KeyboardAvoidingView,
862
862
  Platform,
863
- type FlatList,
864
863
  } from "react-native";
865
864
  import { useSafeAreaInsets } from "react-native-safe-area-context";
866
865
  import { MessageBubble } from "./message";
@@ -915,37 +914,19 @@ function EmptyState() {
915
914
  }
916
915
 
917
916
  function ChatMessages() {
918
- const listRef = useRef<FlatList>(null);
919
- const nearBottom = useRef(true);
920
-
921
917
  return (
922
918
  <>
923
919
  <ThreadPrimitive.Empty>
924
920
  <EmptyState />
925
921
  </ThreadPrimitive.Empty>
926
922
  <ThreadPrimitive.If empty={false}>
927
- <ThreadPrimitive.Messages
928
- // Messages isn't a forwardRef component, but it spreads extra props
929
- // onto its FlatList, so React 19 still forwards this ref to the list.
930
- {...({ ref: listRef } as object)}
923
+ <ThreadPrimitive.MessagesFlatList
931
924
  style={styles.flex}
932
925
  contentContainerStyle={styles.messageList}
933
926
  showsVerticalScrollIndicator={false}
934
- scrollEventThrottle={32}
935
- onScroll={(e) => {
936
- const { contentOffset, contentSize, layoutMeasurement } =
937
- e.nativeEvent;
938
- nearBottom.current =
939
- contentOffset.y + layoutMeasurement.height >=
940
- contentSize.height - 48;
941
- }}
942
- onContentSizeChange={() => {
943
- if (nearBottom.current)
944
- listRef.current?.scrollToEnd({ animated: true });
945
- }}
946
927
  >
947
928
  {() => <MessageBubble />}
948
- </ThreadPrimitive.Messages>
929
+ </ThreadPrimitive.MessagesFlatList>
949
930
  </ThreadPrimitive.If>
950
931
  </>
951
932
  );
@@ -1470,7 +1451,7 @@ export function ThreadListDrawer({ navigation }: DrawerContentComponentProps) {
1470
1451
  <Pressable
1471
1452
  onPressIn={haptics.selection}
1472
1453
  onPress={() => {
1473
- aui.threads().switchToNewThread();
1454
+ aui.threads.switchToNewThread();
1474
1455
  navigation.closeDrawer();
1475
1456
  }}
1476
1457
  style={({ pressed }) => [
@@ -1567,7 +1548,7 @@ export function ThreadListItem({ onSelect }: { onSelect: () => void }) {
1567
1548
  <Pressable
1568
1549
  onPressIn={haptics.selection}
1569
1550
  onPress={() => {
1570
- aui.threadListItem().switchTo();
1551
+ aui.threadListItem.switchTo();
1571
1552
  onSelect();
1572
1553
  }}
1573
1554
  style={({ pressed }) => [
@@ -1955,43 +1936,43 @@ module.exports = withAui(config);
1955
1936
  "export:web": "expo export --platform web && node scripts/flatten-assets.mjs"
1956
1937
  },
1957
1938
  "dependencies": {
1958
- "@ai-sdk/openai": "^4.0.14",
1959
- "@ai-sdk/react": "^4.0.30",
1939
+ "@ai-sdk/openai": "^4.0.34",
1940
+ "@ai-sdk/react": "^4.0.59",
1960
1941
  "@assistant-ui/react-ai-sdk": "workspace:*",
1961
1942
  "@assistant-ui/react-native": "workspace:*",
1962
1943
  "@expo/vector-icons": "^15.1.1",
1963
1944
  "@react-navigation/drawer": "7.9.4",
1964
1945
  "@react-navigation/native": "7.1.33",
1965
- "ai": "^7.0.28",
1966
- "expo": "~57.0.4",
1967
- "expo-clipboard": "~57.0.0",
1968
- "expo-constants": "~57.0.3",
1969
- "expo-font": "~57.0.0",
1970
- "expo-haptics": "~57.0.0",
1971
- "expo-image": "~57.0.0",
1972
- "expo-image-picker": "~57.0.2",
1973
- "expo-linking": "~57.0.2",
1974
- "expo-router": "~57.0.4",
1975
- "expo-server": "~57.0.0",
1976
- "expo-splash-screen": "~57.0.2",
1977
- "expo-status-bar": "~57.0.0",
1978
- "expo-symbols": "^57.0.0",
1979
- "expo-system-ui": "~57.0.0",
1946
+ "ai": "^7.0.56",
1947
+ "expo": "~57.0.11",
1948
+ "expo-clipboard": "~57.0.1",
1949
+ "expo-constants": "~57.0.9",
1950
+ "expo-font": "~57.0.1",
1951
+ "expo-haptics": "~57.0.1",
1952
+ "expo-image": "~57.0.2",
1953
+ "expo-image-picker": "~57.0.8",
1954
+ "expo-linking": "~57.0.5",
1955
+ "expo-router": "~57.0.11",
1956
+ "expo-server": "~57.0.1",
1957
+ "expo-splash-screen": "~57.0.5",
1958
+ "expo-status-bar": "~57.0.1",
1959
+ "expo-symbols": "^57.0.2",
1960
+ "expo-system-ui": "~57.0.2",
1980
1961
  "react": "19.2.3",
1981
1962
  "react-dom": "19.2.3",
1982
- "react-native": "0.86.0",
1983
- "react-native-gesture-handler": "~3.0.2",
1984
- "react-native-reanimated": "4.5.0",
1963
+ "react-native": "0.86.2",
1964
+ "react-native-gesture-handler": "~2.32.0",
1965
+ "react-native-reanimated": "4.5.1",
1985
1966
  "react-native-safe-area-context": "~5.7.0",
1986
- "react-native-screens": "4.25.2",
1967
+ "react-native-screens": "4.26.2",
1987
1968
  "react-native-web": "~0.21.2",
1988
- "react-native-worklets": "0.10.0",
1969
+ "react-native-worklets": "0.10.1",
1989
1970
  "zod": "^4.4.3"
1990
1971
  },
1991
1972
  "devDependencies": {
1992
1973
  "@assistant-ui/metro": "workspace:*",
1993
1974
  "@babel/core": "^7.29.7",
1994
- "@types/react": "~19.2.17",
1975
+ "@types/react": "~19.2.18",
1995
1976
  "typescript": "npm:@typescript/typescript6@^6.0.2",
1996
1977
  "typescript-7": "npm:typescript@~7.0.2"
1997
1978
  },
@@ -223,10 +223,16 @@ export function MyRuntimeProvider({
223
223
  "use client";
224
224
 
225
225
  import { Thread } from "@/components/assistant-ui/thread";
226
- import { useAui, AuiProvider, Suggestions } from "@assistant-ui/react";
226
+ import {
227
+ useAui,
228
+ AuiProvider,
229
+ AuiConfig,
230
+ Suggestions,
231
+ } from "@assistant-ui/react";
227
232
 
228
233
  function ThreadWithSuggestions() {
229
- const aui = useAui({
234
+ const aui = useAui();
235
+ const config = AuiConfig({
230
236
  suggestions: Suggestions([
231
237
  {
232
238
  title: "Send a test message",
@@ -241,7 +247,7 @@ function ThreadWithSuggestions() {
241
247
  ]),
242
248
  });
243
249
  return (
244
- <AuiProvider value={aui}>
250
+ <AuiProvider extends={aui} config={config}>
245
251
  <Thread />
246
252
  </AuiProvider>
247
253
  );
@@ -318,24 +324,23 @@ export default withAui(nextConfig);
318
324
  "@assistant-ui/ui": "workspace:*",
319
325
  "class-variance-authority": "^0.7.1",
320
326
  "clsx": "^2.1.1",
321
- "lucide-react": "^1.24.0",
322
- "next": "^16.2.10",
323
- "react": "^19.2.7",
324
- "react-dom": "^19.2.7",
327
+ "lucide-react": "^1.29.0",
328
+ "next": "^16.3.0",
329
+ "react": "^19.2.8",
330
+ "react-dom": "^19.2.8",
325
331
  "tailwind-merge": "^3.6.0"
326
332
  },
327
333
  "devDependencies": {
328
334
  "@assistant-ui/next": "workspace:*",
329
335
  "@assistant-ui/x-buildutils": "workspace:*",
330
- "@tailwindcss/postcss": "^4.3.2",
331
- "@types/node": "^26.1.1",
332
- "@types/react": "^19.2.17",
333
- "@types/react-dom": "^19.2.3",
334
- "postcss": "^8.5.19",
335
- "tailwindcss": "^4.3.2",
336
+ "@tailwindcss/postcss": "^4.3.3",
337
+ "@types/node": "^26.1.2",
338
+ "@types/react": "^19.2.18",
339
+ "@types/react-dom": "^19.2.4",
340
+ "postcss": "^8.5.26",
341
+ "tailwindcss": "^4.3.3",
336
342
  "tw-animate-css": "^1.4.0",
337
- "typescript": "npm:@typescript/typescript6@^6.0.2",
338
- "typescript-7": "npm:typescript@^7.0.2"
343
+ "typescript": "^7.0.2"
339
344
  }
340
345
  }
341
346
 
@@ -267,6 +267,7 @@ import {
267
267
  useAui,
268
268
  useAuiState,
269
269
  AuiProvider,
270
+ AuiConfig,
270
271
  Suggestions,
271
272
  Tools,
272
273
  } from "@assistant-ui/react";
@@ -316,11 +317,16 @@ const FfmpegToolsProvider: FC<{ file: File; children: ReactNode }> = ({
316
317
 
317
318
  const toolkit = useFfmpegToolkit(file, ffmpegRef);
318
319
 
319
- const aui = useAui({
320
+ const aui = useAui();
321
+ const config = AuiConfig({
320
322
  tools: Tools({ toolkit }),
321
323
  });
322
324
 
323
- return <AuiProvider value={aui}>{children}</AuiProvider>;
325
+ return (
326
+ <AuiProvider extends={aui} config={config}>
327
+ {children}
328
+ </AuiProvider>
329
+ );
324
330
  };
325
331
 
326
332
  export default function Home() {
@@ -332,7 +338,8 @@ export default function Home() {
332
338
  setLastFile(lastAttachment.file!);
333
339
  }, [attachments]);
334
340
 
335
- const aui = useAui({
341
+ const aui = useAui();
342
+ const config = AuiConfig({
336
343
  suggestions: Suggestions([
337
344
  {
338
345
  title: "Convert video to GIF",
@@ -349,7 +356,7 @@ export default function Home() {
349
356
 
350
357
  return (
351
358
  <div className="flex h-full flex-col">
352
- <AuiProvider value={aui}>
359
+ <AuiProvider extends={aui} config={config}>
353
360
  {lastFile ? (
354
361
  <FfmpegToolsProvider file={lastFile}>
355
362
  <Thread />
@@ -713,35 +720,34 @@ export default withAui(nextConfig);
713
720
  "start": "next start"
714
721
  },
715
722
  "dependencies": {
716
- "@ai-sdk/openai": "^4.0.14",
723
+ "@ai-sdk/openai": "^4.0.34",
717
724
  "@assistant-ui/react": "workspace:*",
718
725
  "@assistant-ui/react-ai-sdk": "workspace:*",
719
726
  "@assistant-ui/react-markdown": "workspace:*",
720
727
  "@assistant-ui/ui": "workspace:*",
721
728
  "@ffmpeg/ffmpeg": "^0.12.15",
722
729
  "@ffmpeg/util": "^0.12.2",
723
- "ai": "^7.0.28",
730
+ "ai": "^7.0.56",
724
731
  "class-variance-authority": "^0.7.1",
725
732
  "clsx": "^2.1.1",
726
- "lucide-react": "^1.24.0",
727
- "next": "^16.2.10",
728
- "react": "^19.2.7",
729
- "react-dom": "^19.2.7",
733
+ "lucide-react": "^1.29.0",
734
+ "next": "^16.3.0",
735
+ "react": "^19.2.8",
736
+ "react-dom": "^19.2.8",
730
737
  "tailwind-merge": "^3.6.0",
731
738
  "zod": "^4.4.3"
732
739
  },
733
740
  "devDependencies": {
734
741
  "@assistant-ui/next": "workspace:*",
735
742
  "@assistant-ui/x-buildutils": "workspace:*",
736
- "@tailwindcss/postcss": "^4.3.2",
737
- "@types/node": "^26.1.1",
738
- "@types/react": "^19.2.17",
739
- "@types/react-dom": "^19.2.3",
740
- "postcss": "^8.5.19",
741
- "tailwindcss": "^4.3.2",
743
+ "@tailwindcss/postcss": "^4.3.3",
744
+ "@types/node": "^26.1.2",
745
+ "@types/react": "^19.2.18",
746
+ "@types/react-dom": "^19.2.4",
747
+ "postcss": "^8.5.26",
748
+ "tailwindcss": "^4.3.3",
742
749
  "tw-animate-css": "^1.4.0",
743
- "typescript": "npm:@typescript/typescript6@^6.0.2",
744
- "typescript-7": "npm:typescript@^7.0.2"
750
+ "typescript": "^7.0.2"
745
751
  }
746
752
  }
747
753
 
@@ -253,9 +253,9 @@ import {
253
253
  } from "@/components/assistant-ui/thread";
254
254
  import {
255
255
  AssistantRuntimeProvider,
256
+ AuiConfig,
256
257
  Suggestions,
257
258
  useAssistantInstructions,
258
- useAui,
259
259
  } from "@assistant-ui/react";
260
260
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
261
261
  import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
@@ -289,7 +289,7 @@ export default function GuiChatPage() {
289
289
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
290
290
  });
291
291
 
292
- const aui = useAui({
292
+ const config = AuiConfig({
293
293
  suggestions: Suggestions([
294
294
  {
295
295
  title: "Welcome card",
@@ -307,7 +307,7 @@ export default function GuiChatPage() {
307
307
  });
308
308
 
309
309
  return (
310
- <AssistantRuntimeProvider aui={aui} runtime={runtime}>
310
+ <AssistantRuntimeProvider config={config} runtime={runtime}>
311
311
  <GuiChatInstructions />
312
312
  <div className="flex h-full flex-col">
313
313
  <ExampleNav />
@@ -355,9 +355,9 @@ export default function RootLayout({
355
355
  import { Thread } from "@/components/assistant-ui/thread";
356
356
  import {
357
357
  AssistantRuntimeProvider,
358
+ AuiConfig,
358
359
  Suggestions,
359
360
  Tools,
360
- useAui,
361
361
  } from "@assistant-ui/react";
362
362
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
363
363
  import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
@@ -369,7 +369,7 @@ export default function Home() {
369
369
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
370
370
  });
371
371
 
372
- const aui = useAui({
372
+ const config = AuiConfig({
373
373
  tools: Tools({ toolkit }),
374
374
  suggestions: Suggestions([
375
375
  {
@@ -398,7 +398,7 @@ export default function Home() {
398
398
  });
399
399
 
400
400
  return (
401
- <AssistantRuntimeProvider aui={aui} runtime={runtime}>
401
+ <AssistantRuntimeProvider config={config} runtime={runtime}>
402
402
  <div className="flex h-full flex-col">
403
403
  <ExampleNav />
404
404
  <main className="min-h-0 flex-1">
@@ -1500,33 +1500,32 @@ export default withAui(nextConfig);
1500
1500
  "test": "vitest run"
1501
1501
  },
1502
1502
  "dependencies": {
1503
- "@ai-sdk/openai": "^4.0.14",
1503
+ "@ai-sdk/openai": "^4.0.34",
1504
1504
  "@assistant-ui/react": "workspace:*",
1505
1505
  "@assistant-ui/react-ai-sdk": "workspace:*",
1506
1506
  "@assistant-ui/ui": "workspace:*",
1507
- "ai": "^7.0.28",
1507
+ "ai": "^7.0.56",
1508
1508
  "class-variance-authority": "^0.7.1",
1509
1509
  "clsx": "^2.1.1",
1510
- "lucide-react": "^1.24.0",
1511
- "next": "^16.2.10",
1512
- "react": "^19.2.7",
1513
- "react-dom": "^19.2.7",
1514
- "recharts": "^3.9.2",
1510
+ "lucide-react": "^1.29.0",
1511
+ "next": "^16.3.0",
1512
+ "react": "^19.2.8",
1513
+ "react-dom": "^19.2.8",
1514
+ "recharts": "^3.10.1",
1515
1515
  "tailwind-merge": "^3.6.0",
1516
1516
  "zod": "^4.4.3"
1517
1517
  },
1518
1518
  "devDependencies": {
1519
1519
  "@assistant-ui/next": "workspace:*",
1520
1520
  "@assistant-ui/x-buildutils": "workspace:*",
1521
- "@tailwindcss/postcss": "^4.3.2",
1522
- "@types/node": "^26.1.1",
1523
- "@types/react": "^19.2.17",
1524
- "@types/react-dom": "^19.2.3",
1525
- "postcss": "^8.5.19",
1526
- "tailwindcss": "^4.3.2",
1521
+ "@tailwindcss/postcss": "^4.3.3",
1522
+ "@types/node": "^26.1.2",
1523
+ "@types/react": "^19.2.18",
1524
+ "@types/react-dom": "^19.2.4",
1525
+ "postcss": "^8.5.26",
1526
+ "tailwindcss": "^4.3.3",
1527
1527
  "tw-animate-css": "^1.4.0",
1528
- "typescript": "npm:@typescript/typescript6@^6.0.2",
1529
- "typescript-7": "npm:typescript@^7.0.2",
1528
+ "typescript": "^7.0.2",
1530
1529
  "vitest": "^4.1.10"
1531
1530
  }
1532
1531
  }
@@ -240,10 +240,16 @@ export function MyRuntimeProvider({ children }: { children: React.ReactNode }) {
240
240
  "use client";
241
241
 
242
242
  import { Thread } from "@/components/assistant-ui/thread";
243
- import { useAui, AuiProvider, Suggestions } from "@assistant-ui/react";
243
+ import {
244
+ useAui,
245
+ AuiProvider,
246
+ AuiConfig,
247
+ Suggestions,
248
+ } from "@assistant-ui/react";
244
249
 
245
250
  function ThreadWithSuggestions() {
246
- const aui = useAui({
251
+ const aui = useAui();
252
+ const config = AuiConfig({
247
253
  suggestions: Suggestions([
248
254
  {
249
255
  title: "What can you do",
@@ -258,7 +264,7 @@ function ThreadWithSuggestions() {
258
264
  ]),
259
265
  });
260
266
  return (
261
- <AuiProvider value={aui}>
267
+ <AuiProvider extends={aui} config={config}>
262
268
  <Thread />
263
269
  </AuiProvider>
264
270
  );
@@ -305,28 +311,27 @@ export default withAui(nextConfig);
305
311
  "@assistant-ui/react-google-adk": "workspace:*",
306
312
  "@assistant-ui/react-markdown": "workspace:*",
307
313
  "@assistant-ui/ui": "workspace:*",
308
- "@google/adk": "^1.3.0",
314
+ "@google/adk": "^1.6.0",
309
315
  "class-variance-authority": "^0.7.1",
310
316
  "clsx": "^2.1.1",
311
- "lucide-react": "^1.24.0",
312
- "next": "^16.2.10",
313
- "react": "^19.2.7",
314
- "react-dom": "^19.2.7",
317
+ "lucide-react": "^1.29.0",
318
+ "next": "^16.3.0",
319
+ "react": "^19.2.8",
320
+ "react-dom": "^19.2.8",
315
321
  "tailwind-merge": "^3.6.0",
316
322
  "zod": "^4.4.3"
317
323
  },
318
324
  "devDependencies": {
319
325
  "@assistant-ui/next": "workspace:*",
320
326
  "@assistant-ui/x-buildutils": "workspace:*",
321
- "@tailwindcss/postcss": "^4.3.2",
322
- "@types/node": "^26.1.1",
323
- "@types/react": "^19.2.17",
324
- "@types/react-dom": "^19.2.3",
325
- "postcss": "^8.5.19",
326
- "tailwindcss": "^4.3.2",
327
+ "@tailwindcss/postcss": "^4.3.3",
328
+ "@types/node": "^26.1.2",
329
+ "@types/react": "^19.2.18",
330
+ "@types/react-dom": "^19.2.4",
331
+ "postcss": "^8.5.26",
332
+ "tailwindcss": "^4.3.3",
327
333
  "tw-animate-css": "^1.4.0",
328
- "typescript": "npm:@typescript/typescript6@^6.0.2",
329
- "typescript-7": "npm:typescript@^7.0.2"
334
+ "typescript": "^7.0.2"
330
335
  }
331
336
  }
332
337
 
@@ -269,21 +269,20 @@ export default withAui(nextConfig);
269
269
  },
270
270
  "dependencies": {
271
271
  "heat-graph": "workspace:*",
272
- "next": "^16.2.10",
273
- "react": "^19.2.7",
274
- "react-dom": "^19.2.7"
272
+ "next": "^16.3.0",
273
+ "react": "^19.2.8",
274
+ "react-dom": "^19.2.8"
275
275
  },
276
276
  "devDependencies": {
277
277
  "@assistant-ui/next": "workspace:*",
278
278
  "@assistant-ui/x-buildutils": "workspace:*",
279
- "@tailwindcss/postcss": "^4.3.2",
280
- "@types/node": "^26.1.1",
281
- "@types/react": "^19.2.17",
282
- "@types/react-dom": "^19.2.3",
283
- "postcss": "^8.5.19",
284
- "tailwindcss": "^4.3.2",
285
- "typescript": "npm:@typescript/typescript6@^6.0.2",
286
- "typescript-7": "npm:typescript@^7.0.2"
279
+ "@tailwindcss/postcss": "^4.3.3",
280
+ "@types/node": "^26.1.2",
281
+ "@types/react": "^19.2.18",
282
+ "@types/react-dom": "^19.2.4",
283
+ "postcss": "^8.5.26",
284
+ "tailwindcss": "^4.3.3",
285
+ "typescript": "^7.0.2"
287
286
  }
288
287
  }
289
288