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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/.docs/organized/code-examples/waterfall.md +15 -7
  2. package/.docs/organized/code-examples/with-a2a.md +9 -21
  3. package/.docs/organized/code-examples/with-ag-ui.md +11 -8
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +10 -10
  5. package/.docs/organized/code-examples/with-artifacts.md +12 -10
  6. package/.docs/organized/code-examples/with-assistant-transport.md +11 -12
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +83 -54
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +14 -11
  9. package/.docs/organized/code-examples/with-cloud.md +9 -10
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +61 -16
  11. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -12
  12. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +13 -13
  13. package/.docs/organized/code-examples/with-expo.md +25 -21
  14. package/.docs/organized/code-examples/with-external-store.md +8 -8
  15. package/.docs/organized/code-examples/with-ffmpeg.md +17 -12
  16. package/.docs/organized/code-examples/with-generative-ui.md +9 -9
  17. package/.docs/organized/code-examples/with-google-adk.md +8 -8
  18. package/.docs/organized/code-examples/with-heat-graph.md +5 -5
  19. package/.docs/organized/code-examples/with-interactables.md +10 -25
  20. package/.docs/organized/code-examples/with-langchain.md +437 -0
  21. package/.docs/organized/code-examples/with-langgraph.md +16 -16
  22. package/.docs/organized/code-examples/with-livekit.md +18 -13
  23. package/.docs/organized/code-examples/with-opencode.md +105 -62
  24. package/.docs/organized/code-examples/with-parent-id-grouping.md +10 -10
  25. package/.docs/organized/code-examples/with-react-hook-form.md +220 -148
  26. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  27. package/.docs/organized/code-examples/with-react-router.md +12 -12
  28. package/.docs/organized/code-examples/with-store.md +8 -5
  29. package/.docs/organized/code-examples/with-tanstack.md +10 -10
  30. package/.docs/organized/code-examples/with-tap-runtime.md +10 -6
  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 +80 -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/composer.mdx +149 -40
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +65 -0
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +2 -0
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
  61. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
  62. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
  63. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
  64. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +9 -0
  65. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
  66. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +231 -3
  67. package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
  68. package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
  69. package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
  70. package/.docs/raw/docs/guides/branching.mdx +76 -0
  71. package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
  72. package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
  73. package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
  74. package/.docs/raw/docs/guides/editing.mdx +102 -0
  75. package/.docs/raw/docs/guides/index.mdx +103 -0
  76. package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
  77. package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
  78. package/.docs/raw/docs/guides/mentions.mdx +520 -0
  79. package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
  80. package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
  81. package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
  82. package/.docs/raw/docs/guides/slash-commands.mdx +361 -0
  83. package/.docs/raw/docs/guides/speech.mdx +156 -0
  84. package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
  85. package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
  86. package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
  87. package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
  88. package/.docs/raw/docs/ink/index.mdx +1 -3
  89. package/.docs/raw/docs/ink/migration.mdx +1 -3
  90. package/.docs/raw/docs/ink/primitives.mdx +37 -1
  91. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
  92. package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
  93. package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
  94. package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
  95. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
  96. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
  97. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
  98. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
  99. package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
  100. package/.docs/raw/docs/integrations/index.mdx +173 -0
  101. package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
  102. package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
  103. package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
  104. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
  105. package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
  106. package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
  107. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
  108. package/.docs/raw/docs/primitives/attachment.mdx +1 -0
  109. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
  110. package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
  111. package/.docs/raw/docs/primitives/composer.mdx +96 -63
  112. package/.docs/raw/docs/primitives/error.mdx +1 -0
  113. package/.docs/raw/docs/primitives/index.mdx +2 -1
  114. package/.docs/raw/docs/primitives/message.mdx +68 -5
  115. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
  116. package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
  117. package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
  118. package/.docs/raw/docs/primitives/thread.mdx +16 -13
  119. package/.docs/raw/docs/react-native/index.mdx +1 -3
  120. package/.docs/raw/docs/react-native/migration.mdx +1 -3
  121. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
  122. package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
  123. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
  124. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
  125. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
  126. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
  127. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
  128. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
  129. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
  130. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +365 -101
  131. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
  132. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
  133. package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
  134. package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
  135. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
  136. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
  137. package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
  138. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
  139. package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
  140. package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
  141. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
  142. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
  143. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
  144. package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
  145. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
  146. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
  147. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
  148. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
  149. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
  150. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
  151. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
  152. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
  153. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
  154. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
  155. package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
  156. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
  157. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +74 -198
  158. package/.docs/raw/docs/ui/accordion.mdx +1 -0
  159. package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
  160. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
  161. package/.docs/raw/docs/ui/attachment.mdx +1 -0
  162. package/.docs/raw/docs/ui/badge.mdx +1 -0
  163. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +200 -0
  164. package/.docs/raw/docs/ui/context-display.mdx +1 -0
  165. package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
  166. package/.docs/raw/docs/ui/directive-text.mdx +114 -0
  167. package/.docs/raw/docs/ui/file.mdx +1 -0
  168. package/.docs/raw/docs/ui/image.mdx +1 -0
  169. package/.docs/raw/docs/ui/markdown.mdx +2 -14
  170. package/.docs/raw/docs/ui/mermaid.mdx +1 -0
  171. package/.docs/raw/docs/ui/message-timing.mdx +3 -2
  172. package/.docs/raw/docs/ui/model-selector.mdx +1 -0
  173. package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
  174. package/.docs/raw/docs/ui/quote.mdx +1 -0
  175. package/.docs/raw/docs/ui/reasoning.mdx +69 -32
  176. package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
  177. package/.docs/raw/docs/ui/select.mdx +1 -0
  178. package/.docs/raw/docs/ui/sources.mdx +1 -0
  179. package/.docs/raw/docs/ui/streamdown.mdx +1 -0
  180. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
  181. package/.docs/raw/docs/ui/tabs.mdx +1 -0
  182. package/.docs/raw/docs/ui/thread-list.mdx +17 -0
  183. package/.docs/raw/docs/ui/thread.mdx +56 -1
  184. package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
  185. package/.docs/raw/docs/ui/tool-group.mdx +39 -11
  186. package/.docs/raw/docs/ui/voice.mdx +1 -0
  187. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
  188. package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
  189. package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
  190. package/dist/utils/logger.js +1 -1
  191. package/dist/utils/logger.js.map +1 -1
  192. package/package.json +4 -4
  193. package/src/tools/tests/path-traversal.test.ts +1 -1
  194. package/src/utils/logger.ts +1 -1
  195. package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
  196. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
  197. package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
  198. package/.docs/raw/docs/(docs)/guides/mentions.mdx +0 -406
  199. package/.docs/raw/docs/(docs)/guides/slash-commands.mdx +0 -275
  200. package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
  201. package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
  202. package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
  203. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -268
  204. package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
  205. package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
  206. package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
  207. package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
  208. package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -607
  209. package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
  210. package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
  211. package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
  212. package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
  213. package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
  214. package/.docs/raw/docs/ui/mention.mdx +0 -168
@@ -472,6 +472,7 @@ export function ThreadList({
472
472
  <div className="flex h-full w-64 shrink-0 flex-col border-r bg-sidebar">
473
473
  <div className="p-3">
474
474
  <button
475
+ type="button"
475
476
  onClick={() => onSelect(null)}
476
477
  className="flex w-full items-center justify-center gap-2 rounded-lg border border-sidebar-border bg-sidebar px-4 py-2 font-medium text-sidebar-foreground text-sm transition-colors hover:bg-sidebar-accent"
477
478
  >
@@ -493,11 +494,12 @@ export function ThreadList({
493
494
  ) : (
494
495
  <div className="space-y-0.5">
495
496
  {threads.map((thread) => (
496
- <div
497
+ <button
498
+ type="button"
497
499
  key={thread.id}
498
500
  onClick={() => onSelect(thread.id)}
499
501
  className={cn(
500
- "group flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm transition-colors",
502
+ "group flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors",
501
503
  selectedId === thread.id
502
504
  ? "bg-sidebar-accent text-sidebar-accent-foreground"
503
505
  : "text-sidebar-foreground hover:bg-sidebar-accent/50",
@@ -507,6 +509,7 @@ export function ThreadList({
507
509
  {thread.title || "New conversation"}
508
510
  </span>
509
511
  <button
512
+ type="button"
510
513
  onClick={(e) => {
511
514
  e.stopPropagation();
512
515
  onDelete(thread.id);
@@ -516,7 +519,7 @@ export function ThreadList({
516
519
  >
517
520
  <Trash2 className="size-3.5 text-muted-foreground hover:text-destructive" />
518
521
  </button>
519
- </div>
522
+ </button>
520
523
  ))}
521
524
  </div>
522
525
  )}
@@ -565,27 +568,27 @@ export default nextConfig;
565
568
  "start": "next start"
566
569
  },
567
570
  "dependencies": {
568
- "@ai-sdk/openai": "^3.0.52",
571
+ "@ai-sdk/openai": "^3.0.61",
569
572
  "@assistant-ui/cloud-ai-sdk": "workspace:*",
570
- "ai": "^6.0.159",
573
+ "ai": "^6.0.175",
571
574
  "class-variance-authority": "^0.7.1",
572
575
  "clsx": "^2.1.1",
573
- "lucide-react": "^1.8.0",
574
- "next": "^16.2.3",
576
+ "lucide-react": "^1.14.0",
577
+ "next": "^16.2.4",
575
578
  "react": "^19.2.5",
576
579
  "react-dom": "^19.2.5",
577
580
  "tailwind-merge": "^3.5.0"
578
581
  },
579
582
  "devDependencies": {
580
583
  "@assistant-ui/x-buildutils": "workspace:*",
581
- "@tailwindcss/postcss": "^4.2.2",
584
+ "@tailwindcss/postcss": "^4.2.4",
582
585
  "@types/node": "^25.6.0",
583
586
  "@types/react": "^19.2.14",
584
587
  "@types/react-dom": "^19.2.3",
585
- "postcss": "^8.5.9",
586
- "tailwindcss": "^4.2.2",
588
+ "postcss": "^8.5.14",
589
+ "tailwindcss": "^4.2.4",
587
590
  "tw-animate-css": "^1.4.0",
588
- "typescript": "^6.0.2"
591
+ "typescript": "^6.0.3"
589
592
  }
590
593
  }
591
594
 
@@ -206,7 +206,7 @@ import { AssistantCloud, AssistantRuntimeProvider } from "@assistant-ui/react";
206
206
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
207
207
 
208
208
  const cloud = new AssistantCloud({
209
- baseUrl: process.env["NEXT_PUBLIC_ASSISTANT_BASE_URL"]!,
209
+ baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL!,
210
210
  anonymous: true,
211
211
  });
212
212
 
@@ -327,30 +327,30 @@ export default nextConfig;
327
327
  "start": "next start"
328
328
  },
329
329
  "dependencies": {
330
- "@ai-sdk/openai": "^3.0.52",
330
+ "@ai-sdk/openai": "^3.0.61",
331
331
  "@assistant-ui/react": "workspace:*",
332
332
  "@assistant-ui/react-ai-sdk": "workspace:*",
333
333
  "@assistant-ui/react-markdown": "workspace:*",
334
334
  "@assistant-ui/ui": "workspace:*",
335
- "ai": "^6.0.159",
335
+ "ai": "^6.0.175",
336
336
  "class-variance-authority": "^0.7.1",
337
337
  "clsx": "^2.1.1",
338
- "lucide-react": "^1.8.0",
339
- "next": "^16.2.3",
338
+ "lucide-react": "^1.14.0",
339
+ "next": "^16.2.4",
340
340
  "react": "^19.2.5",
341
341
  "react-dom": "^19.2.5",
342
342
  "tailwind-merge": "^3.5.0"
343
343
  },
344
344
  "devDependencies": {
345
345
  "@assistant-ui/x-buildutils": "workspace:*",
346
- "@tailwindcss/postcss": "^4.2.2",
346
+ "@tailwindcss/postcss": "^4.2.4",
347
347
  "@types/node": "^25.6.0",
348
348
  "@types/react": "^19.2.14",
349
349
  "@types/react-dom": "^19.2.3",
350
- "postcss": "^8.5.9",
351
- "tailwindcss": "^4.2.2",
350
+ "postcss": "^8.5.14",
351
+ "tailwindcss": "^4.2.4",
352
352
  "tw-animate-css": "^1.4.0",
353
- "typescript": "^6.0.2"
353
+ "typescript": "^6.0.3"
354
354
  }
355
355
  }
356
356
 
@@ -378,7 +378,6 @@ Create `.env.local`:
378
378
 
379
379
  ```
380
380
  OPENAI_API_KEY=sk-...
381
- JWT_SECRET=your-jwt-secret
382
381
  ASSISTANT_API_KEY=sk-aui-proj-...
383
382
  NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-xxxx.assistant-api.com
384
383
  ```
@@ -6,7 +6,7 @@
6
6
  import { openai } from "@ai-sdk/openai";
7
7
  import {
8
8
  streamText,
9
- UIMessage,
9
+ type UIMessage,
10
10
  convertToModelMessages,
11
11
  tool,
12
12
  stepCountIs,
@@ -215,7 +215,8 @@ import {
215
215
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
216
216
  import { createAssistantStream } from "assistant-stream";
217
217
 
218
- // In-memory storage for threads (simulating a database)
218
+ const PAGE_SIZE = 10;
219
+
219
220
  const threadsStore = new Map<
220
221
  string,
221
222
  {
@@ -223,16 +224,33 @@ const threadsStore = new Map<
223
224
  status: "regular" | "archived";
224
225
  title?: string;
225
226
  }
226
- >();
227
+ >(
228
+ Array.from({ length: 25 }, (_, i) => {
229
+ const id = `seed-${String(i).padStart(2, "0")}`;
230
+ return [
231
+ id,
232
+ {
233
+ remoteId: id,
234
+ status: "regular" as const,
235
+ title: `Seeded thread ${i + 1}`,
236
+ },
237
+ ] as const;
238
+ }),
239
+ );
227
240
 
228
241
  const threadListAdapter: RemoteThreadListAdapter = {
229
- async list() {
242
+ async list({ after }: { after?: string } = {}) {
243
+ const all = Array.from(threadsStore.values());
244
+ const start = after ? Number(after) : 0;
245
+ const page = all.slice(start, start + PAGE_SIZE);
246
+ const nextStart = start + page.length;
230
247
  return {
231
- threads: Array.from(threadsStore.values()).map((thread) => ({
248
+ threads: page.map((thread) => ({
232
249
  remoteId: thread.remoteId,
233
250
  status: thread.status,
234
251
  title: thread.title,
235
252
  })),
253
+ nextCursor: nextStart < all.length ? String(nextStart) : undefined,
236
254
  };
237
255
  },
238
256
 
@@ -323,8 +341,35 @@ export function MyRuntimeProvider({
323
341
  "use client";
324
342
 
325
343
  import { Thread } from "@/components/assistant-ui/thread";
326
- import { ThreadList } from "@/components/assistant-ui/thread-list";
327
- import { useAui, AuiProvider, Suggestions } from "@assistant-ui/react";
344
+ import {
345
+ AuiProvider,
346
+ Suggestions,
347
+ ThreadListItemPrimitive,
348
+ ThreadListPrimitive,
349
+ useAui,
350
+ } from "@assistant-ui/react";
351
+
352
+ function ThreadList() {
353
+ return (
354
+ <ThreadListPrimitive.Root className="flex flex-col gap-1 overflow-y-auto">
355
+ <ThreadListPrimitive.New className="flex h-9 items-center gap-2 rounded-lg border px-3 text-sm hover:bg-muted">
356
+ New Thread
357
+ </ThreadListPrimitive.New>
358
+ <ThreadListPrimitive.Items>
359
+ {() => (
360
+ <ThreadListItemPrimitive.Root className="flex h-9 items-center rounded-lg hover:bg-muted data-active:bg-muted">
361
+ <ThreadListItemPrimitive.Trigger className="flex-1 truncate px-3 text-start text-sm">
362
+ <ThreadListItemPrimitive.Title fallback="New Chat" />
363
+ </ThreadListItemPrimitive.Trigger>
364
+ </ThreadListItemPrimitive.Root>
365
+ )}
366
+ </ThreadListPrimitive.Items>
367
+ <ThreadListPrimitive.LoadMore className="mt-1 h-9 rounded-lg border px-3 text-sm hover:bg-muted disabled:opacity-50">
368
+ Load more
369
+ </ThreadListPrimitive.LoadMore>
370
+ </ThreadListPrimitive.Root>
371
+ );
372
+ }
328
373
 
329
374
  function ThreadWithSuggestions() {
330
375
  const aui = useAui({
@@ -414,32 +459,32 @@ export default nextConfig;
414
459
  "start": "next start"
415
460
  },
416
461
  "dependencies": {
417
- "@ai-sdk/openai": "^3.0.52",
462
+ "@ai-sdk/openai": "^3.0.61",
418
463
  "@assistant-ui/react": "workspace:*",
419
464
  "@assistant-ui/react-ai-sdk": "workspace:*",
420
465
  "@assistant-ui/react-markdown": "workspace:*",
421
466
  "@assistant-ui/ui": "workspace:*",
422
- "ai": "^6.0.159",
467
+ "ai": "^6.0.175",
423
468
  "assistant-stream": "workspace:*",
424
469
  "class-variance-authority": "^0.7.1",
425
470
  "clsx": "^2.1.1",
426
- "lucide-react": "^1.8.0",
427
- "next": "^16.2.3",
471
+ "lucide-react": "^1.14.0",
472
+ "next": "^16.2.4",
428
473
  "react": "^19.2.5",
429
474
  "react-dom": "^19.2.5",
430
475
  "tailwind-merge": "^3.5.0",
431
- "zod": "^4.3.6"
476
+ "zod": "^4.4.3"
432
477
  },
433
478
  "devDependencies": {
434
479
  "@assistant-ui/x-buildutils": "workspace:*",
435
- "@tailwindcss/postcss": "^4.2.2",
480
+ "@tailwindcss/postcss": "^4.2.4",
436
481
  "@types/node": "^25.6.0",
437
482
  "@types/react": "^19.2.14",
438
483
  "@types/react-dom": "^19.2.3",
439
- "postcss": "^8.5.9",
440
- "tailwindcss": "^4.2.2",
484
+ "postcss": "^8.5.14",
485
+ "tailwindcss": "^4.2.4",
441
486
  "tw-animate-css": "^1.4.0",
442
- "typescript": "^6.0.2"
487
+ "typescript": "^6.0.3"
443
488
  }
444
489
  }
445
490
 
@@ -4,7 +4,12 @@
4
4
 
5
5
  ```typescript
6
6
  import { openai } from "@ai-sdk/openai";
7
- import { streamText, UIMessage, convertToModelMessages, stepCountIs } from "ai";
7
+ import {
8
+ streamText,
9
+ type UIMessage,
10
+ convertToModelMessages,
11
+ stepCountIs,
12
+ } from "ai";
8
13
 
9
14
  export const maxDuration = 30;
10
15
 
@@ -433,26 +438,26 @@ export default nextConfig;
433
438
  "version": "0.0.0",
434
439
  "type": "module",
435
440
  "dependencies": {
436
- "@ai-sdk/openai": "^3.0.52",
437
- "@ai-sdk/react": "^3.0.161",
441
+ "@ai-sdk/openai": "^3.0.61",
442
+ "@ai-sdk/react": "^3.0.177",
438
443
  "@assistant-ui/react": "workspace:^",
439
444
  "@assistant-ui/react-ai-sdk": "workspace:*",
440
445
  "@assistant-ui/react-markdown": "workspace:^",
441
446
  "@assistant-ui/ui": "workspace:*",
442
- "@elevenlabs/client": "^1.2.0",
443
- "@tailwindcss/postcss": "^4.2.2",
444
- "ai": "^6.0.159",
447
+ "@elevenlabs/client": "^1.5.0",
448
+ "@tailwindcss/postcss": "^4.2.4",
449
+ "ai": "^6.0.175",
445
450
  "class-variance-authority": "^0.7.1",
446
451
  "clsx": "^2.1.1",
447
- "lucide-react": "^1.8.0",
452
+ "lucide-react": "^1.14.0",
448
453
  "motion": "^12.38.0",
449
- "next": "^16.2.3",
450
- "postcss": "^8.5.9",
454
+ "next": "^16.2.4",
455
+ "postcss": "^8.5.14",
451
456
  "react": "^19.2.5",
452
457
  "react-dom": "^19.2.5",
453
458
  "tailwind-merge": "^3.5.0",
454
- "tailwindcss": "^4.2.2",
455
- "zod": "^4.3.6"
459
+ "tailwindcss": "^4.2.4",
460
+ "zod": "^4.4.3"
456
461
  },
457
462
  "devDependencies": {
458
463
  "@assistant-ui/x-buildutils": "workspace:*",
@@ -460,7 +465,7 @@ export default nextConfig;
460
465
  "@types/react": "^19.2.14",
461
466
  "@types/react-dom": "^19.2.3",
462
467
  "tw-animate-css": "^1.4.0",
463
- "typescript": "^6.0.2"
468
+ "typescript": "^6.0.3"
464
469
  },
465
470
  "scripts": {
466
471
  "dev": "next dev",
@@ -6,7 +6,7 @@
6
6
  import { openai } from "@ai-sdk/openai";
7
7
  import {
8
8
  streamText,
9
- UIMessage,
9
+ type UIMessage,
10
10
  convertToModelMessages,
11
11
  tool,
12
12
  stepCountIs,
@@ -57,7 +57,7 @@ export async function POST() {
57
57
  {
58
58
  method: "POST",
59
59
  headers: {
60
- "xi-api-key": process.env["ELEVENLABS_API_KEY"]!,
60
+ "xi-api-key": process.env.ELEVENLABS_API_KEY!,
61
61
  },
62
62
  },
63
63
  );
@@ -562,26 +562,26 @@ export default nextConfig;
562
562
  "version": "0.0.0",
563
563
  "type": "module",
564
564
  "dependencies": {
565
- "@ai-sdk/openai": "^3.0.52",
566
- "@ai-sdk/react": "^3.0.161",
565
+ "@ai-sdk/openai": "^3.0.61",
566
+ "@ai-sdk/react": "^3.0.177",
567
567
  "@assistant-ui/react": "workspace:^",
568
568
  "@assistant-ui/react-ai-sdk": "workspace:*",
569
569
  "@assistant-ui/react-markdown": "workspace:^",
570
570
  "@assistant-ui/ui": "workspace:*",
571
- "@elevenlabs/client": "^1.2.0",
572
- "@tailwindcss/postcss": "^4.2.2",
573
- "ai": "^6.0.159",
571
+ "@elevenlabs/client": "^1.5.0",
572
+ "@tailwindcss/postcss": "^4.2.4",
573
+ "ai": "^6.0.175",
574
574
  "class-variance-authority": "^0.7.1",
575
575
  "clsx": "^2.1.1",
576
- "lucide-react": "^1.8.0",
576
+ "lucide-react": "^1.14.0",
577
577
  "motion": "^12.38.0",
578
- "next": "^16.2.3",
579
- "postcss": "^8.5.9",
578
+ "next": "^16.2.4",
579
+ "postcss": "^8.5.14",
580
580
  "react": "^19.2.5",
581
581
  "react-dom": "^19.2.5",
582
582
  "tailwind-merge": "^3.5.0",
583
- "tailwindcss": "^4.2.2",
584
- "zod": "^4.3.6"
583
+ "tailwindcss": "^4.2.4",
584
+ "zod": "^4.4.3"
585
585
  },
586
586
  "devDependencies": {
587
587
  "@assistant-ui/x-buildutils": "workspace:*",
@@ -589,7 +589,7 @@ export default nextConfig;
589
589
  "@types/react": "^19.2.14",
590
590
  "@types/react-dom": "^19.2.3",
591
591
  "tw-animate-css": "^1.4.0",
592
- "typescript": "^6.0.2"
592
+ "typescript": "^6.0.3"
593
593
  },
594
594
  "scripts": {
595
595
  "dev": "next dev",
@@ -1639,8 +1639,12 @@ const styles = StyleSheet.create({
1639
1639
  ## components/ui/icon-symbol.ios.tsx
1640
1640
 
1641
1641
  ```tsx
1642
- import { SymbolView, SymbolViewProps, SymbolWeight } from "expo-symbols";
1643
- import { StyleProp, ViewStyle } from "react-native";
1642
+ import {
1643
+ SymbolView,
1644
+ type SymbolViewProps,
1645
+ type SymbolWeight,
1646
+ } from "expo-symbols";
1647
+ import type { StyleProp, ViewStyle } from "react-native";
1644
1648
 
1645
1649
  export function IconSymbol({
1646
1650
  name,
@@ -1680,9 +1684,9 @@ export function IconSymbol({
1680
1684
  // Fallback for using MaterialIcons on Android and web.
1681
1685
 
1682
1686
  import MaterialIcons from "@expo/vector-icons/MaterialIcons";
1683
- import { SymbolWeight, SymbolViewProps } from "expo-symbols";
1684
- import { ComponentProps } from "react";
1685
- import { OpaqueColorValue, type StyleProp, type TextStyle } from "react-native";
1687
+ import type { SymbolWeight, SymbolViewProps } from "expo-symbols";
1688
+ import type { ComponentProps } from "react";
1689
+ import type { OpaqueColorValue, StyleProp, TextStyle } from "react-native";
1686
1690
 
1687
1691
  type IconMapping = Record<
1688
1692
  SymbolViewProps["name"],
@@ -1940,34 +1944,34 @@ module.exports = config;
1940
1944
  "export:web": "expo export --platform web && node scripts/flatten-assets.mjs"
1941
1945
  },
1942
1946
  "dependencies": {
1943
- "@ai-sdk/openai": "^3.0.52",
1944
- "@ai-sdk/react": "^3.0.161",
1947
+ "@ai-sdk/openai": "^3.0.61",
1948
+ "@ai-sdk/react": "^3.0.177",
1945
1949
  "@assistant-ui/react-ai-sdk": "workspace:*",
1946
1950
  "@assistant-ui/react-native": "workspace:*",
1947
1951
  "@expo/vector-icons": "^15.1.1",
1948
1952
  "@react-navigation/drawer": "7.9.4",
1949
1953
  "@react-navigation/native": "7.1.33",
1950
- "ai": "^6.0.159",
1951
- "expo": "~55.0.15",
1952
- "expo-constants": "~55.0.14",
1953
- "expo-font": "~55.0.6",
1954
- "expo-image-picker": "~55.0.18",
1955
- "expo-linking": "~55.0.13",
1956
- "expo-router": "~55.0.12",
1957
- "expo-server": "~55.0.7",
1958
- "expo-splash-screen": "~55.0.18",
1959
- "expo-status-bar": "~55.0.5",
1960
- "expo-system-ui": "~55.0.15",
1954
+ "ai": "^6.0.175",
1955
+ "expo": "~55.0.23",
1956
+ "expo-constants": "~55.0.16",
1957
+ "expo-font": "~55.0.7",
1958
+ "expo-image-picker": "~55.0.20",
1959
+ "expo-linking": "~55.0.15",
1960
+ "expo-router": "~55.0.14",
1961
+ "expo-server": "~55.0.9",
1962
+ "expo-splash-screen": "~55.0.20",
1963
+ "expo-status-bar": "~55.0.6",
1964
+ "expo-system-ui": "~55.0.17",
1961
1965
  "react": "19.2.0",
1962
1966
  "react-dom": "19.2.0",
1963
- "react-native": "0.83.4",
1967
+ "react-native": "0.83.6",
1964
1968
  "react-native-gesture-handler": "2.30.1",
1965
1969
  "react-native-reanimated": "4.2.1",
1966
1970
  "react-native-safe-area-context": "5.6.2",
1967
1971
  "react-native-screens": "4.23.0",
1968
1972
  "react-native-web": "~0.21.2",
1969
- "react-native-worklets": "0.7.2",
1970
- "zod": "^4.3.6"
1973
+ "react-native-worklets": "0.7.4",
1974
+ "zod": "^4.4.3"
1971
1975
  },
1972
1976
  "devDependencies": {
1973
1977
  "@types/react": "~19.2.14",
@@ -162,8 +162,8 @@ export default function RootLayout({
162
162
  ```tsx
163
163
  "use client";
164
164
 
165
- import { ThreadMessageLike } from "@assistant-ui/react";
166
- import { AppendMessage } from "@assistant-ui/react";
165
+ import type { ThreadMessageLike } from "@assistant-ui/react";
166
+ import type { AppendMessage } from "@assistant-ui/react";
167
167
  import {
168
168
  AssistantRuntimeProvider,
169
169
  useExternalStoreRuntime,
@@ -319,22 +319,22 @@ export default nextConfig;
319
319
  "@assistant-ui/ui": "workspace:*",
320
320
  "class-variance-authority": "^0.7.1",
321
321
  "clsx": "^2.1.1",
322
- "lucide-react": "^1.8.0",
323
- "next": "^16.2.3",
322
+ "lucide-react": "^1.14.0",
323
+ "next": "^16.2.4",
324
324
  "react": "^19.2.5",
325
325
  "react-dom": "^19.2.5",
326
326
  "tailwind-merge": "^3.5.0"
327
327
  },
328
328
  "devDependencies": {
329
329
  "@assistant-ui/x-buildutils": "workspace:*",
330
- "@tailwindcss/postcss": "^4.2.2",
330
+ "@tailwindcss/postcss": "^4.2.4",
331
331
  "@types/node": "^25.6.0",
332
332
  "@types/react": "^19.2.14",
333
333
  "@types/react-dom": "^19.2.3",
334
- "postcss": "^8.5.9",
335
- "tailwindcss": "^4.2.2",
334
+ "postcss": "^8.5.14",
335
+ "tailwindcss": "^4.2.4",
336
336
  "tw-animate-css": "^1.4.0",
337
- "typescript": "^6.0.2"
337
+ "typescript": "^6.0.3"
338
338
  }
339
339
  }
340
340
 
@@ -189,7 +189,7 @@ export default function RootLayout({
189
189
  "use client";
190
190
 
191
191
  import { AssistantRuntimeProvider } from "@assistant-ui/react";
192
- import { AttachmentAdapter } from "@assistant-ui/react";
192
+ import type { AttachmentAdapter } from "@assistant-ui/react";
193
193
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
194
194
  import { INTERNAL } from "@assistant-ui/react";
195
195
  import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
@@ -250,7 +250,7 @@ export function MyRuntimeProvider({
250
250
 
251
251
  ```tsx
252
252
  import dynamic from "next/dynamic";
253
- import { FC, PropsWithChildren } from "react";
253
+ import type { FC, PropsWithChildren } from "react";
254
254
 
255
255
  const NoSSRWrapper: FC<PropsWithChildren> = (props) => <>{props.children}</>;
256
256
 
@@ -276,7 +276,7 @@ import {
276
276
  import { z } from "zod";
277
277
  import { FFmpeg } from "@ffmpeg/ffmpeg";
278
278
  import { toBlobURL } from "@ffmpeg/util";
279
- import { FC, useCallback, useEffect, useRef, useState } from "react";
279
+ import { type FC, useCallback, useEffect, useRef, useState } from "react";
280
280
  import {
281
281
  CircleCheckIcon,
282
282
  DownloadIcon,
@@ -489,8 +489,10 @@ const FfmpegTool: FC<{ file: File }> = ({ file }) => {
489
489
  args: { fileName, mimeType },
490
490
  result,
491
491
  }) {
492
+ // biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
492
493
  const [blobUrl, setBlobUrl] = useState<string | null>(null);
493
494
 
495
+ // biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
494
496
  const readFile = useCallback(async () => {
495
497
  const ffmpeg = ffmpegRef.current;
496
498
  const data = (await ffmpeg.readFile(
@@ -499,6 +501,7 @@ const FfmpegTool: FC<{ file: File }> = ({ file }) => {
499
501
  return URL.createObjectURL(new Blob([data.buffer], { type: mimeType }));
500
502
  }, [fileName, mimeType]);
501
503
 
504
+ // biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
502
505
  useEffect(() => {
503
506
  if (!result?.success) return;
504
507
  let revoked = false;
@@ -551,6 +554,7 @@ const FfmpegTool: FC<{ file: File }> = ({ file }) => {
551
554
  return (
552
555
  <div className="mb-2 flex flex-col gap-3 rounded-lg border px-5 py-4">
553
556
  {blobUrl && isImage && (
557
+ // biome-ignore lint/performance/noImgElement: blob URL display
554
558
  <img
555
559
  src={blobUrl}
556
560
  alt={fileName}
@@ -570,6 +574,7 @@ const FfmpegTool: FC<{ file: File }> = ({ file }) => {
570
574
  </div>
571
575
  )}
572
576
  <button
577
+ type="button"
573
578
  onClick={handleDownload}
574
579
  className="flex w-fit items-center gap-2 rounded-md border bg-background px-4 py-2 text-sm hover:bg-accent"
575
580
  >
@@ -677,33 +682,33 @@ export default nextConfig;
677
682
  "start": "next start"
678
683
  },
679
684
  "dependencies": {
680
- "@ai-sdk/openai": "^3.0.52",
685
+ "@ai-sdk/openai": "^3.0.61",
681
686
  "@assistant-ui/react": "workspace:*",
682
687
  "@assistant-ui/react-ai-sdk": "workspace:*",
683
688
  "@assistant-ui/react-markdown": "workspace:*",
684
689
  "@assistant-ui/ui": "workspace:*",
685
690
  "@ffmpeg/ffmpeg": "^0.12.15",
686
691
  "@ffmpeg/util": "^0.12.2",
687
- "ai": "^6.0.159",
692
+ "ai": "^6.0.175",
688
693
  "class-variance-authority": "^0.7.1",
689
694
  "clsx": "^2.1.1",
690
- "lucide-react": "^1.8.0",
691
- "next": "^16.2.3",
695
+ "lucide-react": "^1.14.0",
696
+ "next": "^16.2.4",
692
697
  "react": "^19.2.5",
693
698
  "react-dom": "^19.2.5",
694
699
  "tailwind-merge": "^3.5.0",
695
- "zod": "^4.3.6"
700
+ "zod": "^4.4.3"
696
701
  },
697
702
  "devDependencies": {
698
703
  "@assistant-ui/x-buildutils": "workspace:*",
699
- "@tailwindcss/postcss": "^4.2.2",
704
+ "@tailwindcss/postcss": "^4.2.4",
700
705
  "@types/node": "^25.6.0",
701
706
  "@types/react": "^19.2.14",
702
707
  "@types/react-dom": "^19.2.3",
703
- "postcss": "^8.5.9",
704
- "tailwindcss": "^4.2.2",
708
+ "postcss": "^8.5.14",
709
+ "tailwindcss": "^4.2.4",
705
710
  "tw-animate-css": "^1.4.0",
706
- "typescript": "^6.0.2"
711
+ "typescript": "^6.0.3"
707
712
  }
708
713
  }
709
714
 
@@ -787,31 +787,31 @@ export default nextConfig;
787
787
  "start": "next start"
788
788
  },
789
789
  "dependencies": {
790
- "@ai-sdk/openai": "^3.0.52",
790
+ "@ai-sdk/openai": "^3.0.61",
791
791
  "@assistant-ui/react": "workspace:*",
792
792
  "@assistant-ui/react-ai-sdk": "workspace:*",
793
793
  "@assistant-ui/ui": "workspace:*",
794
- "ai": "^6.0.159",
794
+ "ai": "^6.0.175",
795
795
  "class-variance-authority": "^0.7.1",
796
796
  "clsx": "^2.1.1",
797
- "lucide-react": "^1.8.0",
798
- "next": "^16.2.3",
797
+ "lucide-react": "^1.14.0",
798
+ "next": "^16.2.4",
799
799
  "react": "^19.2.5",
800
800
  "react-dom": "^19.2.5",
801
801
  "recharts": "^3.8.1",
802
802
  "tailwind-merge": "^3.5.0",
803
- "zod": "^4.3.6"
803
+ "zod": "^4.4.3"
804
804
  },
805
805
  "devDependencies": {
806
806
  "@assistant-ui/x-buildutils": "workspace:*",
807
- "@tailwindcss/postcss": "^4.2.2",
807
+ "@tailwindcss/postcss": "^4.2.4",
808
808
  "@types/node": "^25.6.0",
809
809
  "@types/react": "^19.2.14",
810
810
  "@types/react-dom": "^19.2.3",
811
- "postcss": "^8.5.9",
812
- "tailwindcss": "^4.2.2",
811
+ "postcss": "^8.5.14",
812
+ "tailwindcss": "^4.2.4",
813
813
  "tw-animate-css": "^1.4.0",
814
- "typescript": "^6.0.2"
814
+ "typescript": "^6.0.3"
815
815
  }
816
816
  }
817
817