@assistant-ui/mcp-docs-server 0.1.34 → 0.1.36

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 (127) hide show
  1. package/.docs/organized/code-examples/waterfall.md +4 -4
  2. package/.docs/organized/code-examples/with-a2a.md +5 -5
  3. package/.docs/organized/code-examples/with-ag-ui.md +6 -6
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +7 -7
  5. package/.docs/organized/code-examples/with-artifacts.md +7 -7
  6. package/.docs/organized/code-examples/with-assistant-transport.md +73 -57
  7. package/.docs/organized/code-examples/with-browser-extension.md +7 -7
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +44 -93
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +7 -7
  10. package/.docs/organized/code-examples/with-cloud.md +7 -7
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +7 -7
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +9 -9
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +9 -9
  14. package/.docs/organized/code-examples/with-eve.md +343 -0
  15. package/.docs/organized/code-examples/with-expo.md +943 -940
  16. package/.docs/organized/code-examples/with-external-store.md +5 -5
  17. package/.docs/organized/code-examples/with-ffmpeg.md +8 -11
  18. package/.docs/organized/code-examples/with-generative-ui.md +33 -309
  19. package/.docs/organized/code-examples/with-google-adk.md +5 -5
  20. package/.docs/organized/code-examples/with-heat-graph.md +4 -4
  21. package/.docs/organized/code-examples/with-image-generation.md +7 -7
  22. package/.docs/organized/code-examples/with-interactables.md +169 -341
  23. package/.docs/organized/code-examples/with-langchain.md +7 -7
  24. package/.docs/organized/code-examples/with-langgraph.md +23 -160
  25. package/.docs/organized/code-examples/with-livekit.md +10 -10
  26. package/.docs/organized/code-examples/with-mcp.md +7 -7
  27. package/.docs/organized/code-examples/with-opencode.md +106 -580
  28. package/.docs/organized/code-examples/with-pi.md +2046 -0
  29. package/.docs/organized/code-examples/with-react-hook-form.md +16 -9
  30. package/.docs/organized/code-examples/with-react-ink-web.md +691 -0
  31. package/.docs/organized/code-examples/with-react-ink.md +29 -17
  32. package/.docs/organized/code-examples/with-react-router.md +12 -12
  33. package/.docs/organized/code-examples/with-resumable-stream.md +8 -8
  34. package/.docs/organized/code-examples/with-store.md +14 -10
  35. package/.docs/organized/code-examples/with-tanstack.md +21 -7
  36. package/.docs/organized/code-examples/with-tap-runtime.md +5 -5
  37. package/.docs/organized/code-examples/with-virtualized-thread.md +676 -0
  38. package/.docs/raw/docs/(docs)/architecture.mdx +13 -12
  39. package/.docs/raw/docs/(docs)/cli.mdx +4 -2
  40. package/.docs/raw/docs/(docs)/devtools.mdx +25 -2
  41. package/.docs/raw/docs/(docs)/index.mdx +5 -2
  42. package/.docs/raw/docs/(docs)/installation.mdx +5 -2
  43. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +16 -16
  44. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +73 -42
  45. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +3 -20
  46. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +234 -123
  47. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +51 -0
  48. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +4 -1
  49. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +70 -38
  50. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +1 -1
  51. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +30 -0
  52. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +7 -0
  53. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +26 -0
  54. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +15 -0
  55. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +103 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +16 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +56 -0
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +12 -0
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +12 -0
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +14 -0
  61. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +57 -1
  62. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +6 -0
  63. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +55 -0
  64. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +151 -0
  65. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +17 -38
  66. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +22 -0
  67. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +20 -27
  68. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +40 -25
  69. package/.docs/raw/docs/guides/chain-of-thought.mdx +1 -1
  70. package/.docs/raw/docs/guides/headless-composer-input.mdx +113 -0
  71. package/.docs/raw/docs/guides/index.mdx +3 -0
  72. package/.docs/raw/docs/guides/input-history.mdx +55 -0
  73. package/.docs/raw/docs/guides/latex.mdx +28 -22
  74. package/.docs/raw/docs/guides/mentions.mdx +32 -7
  75. package/.docs/raw/docs/guides/slash-commands.mdx +3 -6
  76. package/.docs/raw/docs/guides/speech.mdx +5 -7
  77. package/.docs/raw/docs/guides/virtualization.mdx +133 -0
  78. package/.docs/raw/docs/guides/voice.mdx +3 -2
  79. package/.docs/raw/docs/ink/hooks.mdx +2 -2
  80. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +4 -12
  81. package/.docs/raw/docs/integrations/auth/better-auth.mdx +7 -10
  82. package/.docs/raw/docs/integrations/auth/clerk.mdx +3 -9
  83. package/.docs/raw/docs/integrations/auth/next-auth.mdx +3 -8
  84. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +8 -5
  85. package/.docs/raw/docs/integrations/index.mdx +5 -12
  86. package/.docs/raw/docs/integrations/observability/helicone.mdx +3 -4
  87. package/.docs/raw/docs/integrations/observability/langfuse.mdx +3 -5
  88. package/.docs/raw/docs/integrations/observability/langsmith.mdx +3 -2
  89. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +4 -3
  90. package/.docs/raw/docs/primitives/composer.mdx +8 -0
  91. package/.docs/raw/docs/primitives/thread.mdx +24 -0
  92. package/.docs/raw/docs/react-native/hooks.mdx +1 -1
  93. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +22 -3
  94. package/.docs/raw/docs/runtimes/concepts/stability.mdx +1 -1
  95. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +1 -1
  96. package/.docs/raw/docs/runtimes/custom/external-store.mdx +54 -0
  97. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +108 -4
  98. package/.docs/raw/docs/runtimes/eve/overview.mdx +100 -0
  99. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +143 -0
  100. package/.docs/raw/docs/runtimes/langchain.mdx +386 -18
  101. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +1 -1
  102. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +1 -1
  103. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +12 -6
  104. package/.docs/raw/docs/tools/defining-tools.mdx +4 -0
  105. package/.docs/raw/docs/tools/interactables-legacy.mdx +410 -0
  106. package/.docs/raw/docs/tools/interactables.mdx +892 -223
  107. package/.docs/raw/docs/tools/mcp.mdx +4 -4
  108. package/.docs/raw/docs/tools/multi-agent.mdx +5 -0
  109. package/.docs/raw/docs/tools/tool-ui.mdx +37 -1
  110. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +2 -0
  111. package/.docs/raw/docs/ui/dot-matrix.mdx +133 -0
  112. package/.docs/raw/docs/ui/file.mdx +1 -1
  113. package/.docs/raw/docs/ui/model-selector.mdx +219 -52
  114. package/.docs/raw/docs/ui/number-roll.mdx +154 -0
  115. package/.docs/raw/docs/ui/part-grouping.mdx +38 -0
  116. package/.docs/raw/docs/ui/reasoning.mdx +3 -3
  117. package/.docs/raw/docs/ui/streamdown.mdx +2 -0
  118. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -1
  119. package/.docs/raw/docs/ui/thread.mdx +52 -0
  120. package/.docs/raw/docs/ui/tool-fallback.mdx +2 -2
  121. package/.docs/raw/docs/utilities/react-o11y.mdx +92 -6
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +18 -2
  124. package/dist/index.js.map +1 -1
  125. package/package.json +4 -4
  126. package/src/index.ts +14 -6
  127. package/src/tools/tests/mcp-protocol.test.ts +9 -0
@@ -320,8 +320,8 @@ export default withAui(nextConfig);
320
320
  "@assistant-ui/ui": "workspace:*",
321
321
  "class-variance-authority": "^0.7.1",
322
322
  "clsx": "^2.1.1",
323
- "lucide-react": "^1.17.0",
324
- "next": "^16.2.7",
323
+ "lucide-react": "^1.21.0",
324
+ "next": "^16.2.9",
325
325
  "react": "^19.2.7",
326
326
  "react-dom": "^19.2.7",
327
327
  "tailwind-merge": "^3.6.0"
@@ -329,12 +329,12 @@ export default withAui(nextConfig);
329
329
  "devDependencies": {
330
330
  "@assistant-ui/next": "workspace:*",
331
331
  "@assistant-ui/x-buildutils": "workspace:*",
332
- "@tailwindcss/postcss": "^4.3.0",
333
- "@types/node": "^25.9.2",
332
+ "@tailwindcss/postcss": "^4.3.1",
333
+ "@types/node": "^26.0.0",
334
334
  "@types/react": "^19.2.17",
335
335
  "@types/react-dom": "^19.2.3",
336
336
  "postcss": "^8.5.15",
337
- "tailwindcss": "^4.3.0",
337
+ "tailwindcss": "^4.3.1",
338
338
  "tw-animate-css": "^1.4.0",
339
339
  "typescript": "^6.0.3"
340
340
  }
@@ -188,14 +188,11 @@ export default function RootLayout({
188
188
  ```tsx
189
189
  "use client";
190
190
 
191
- import { AssistantRuntimeProvider } from "@assistant-ui/react";
191
+ import { AssistantRuntimeProvider, generateId } from "@assistant-ui/react";
192
192
  import type { AttachmentAdapter } from "@assistant-ui/react";
193
193
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
194
- import { INTERNAL } from "@assistant-ui/react";
195
194
  import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
196
195
 
197
- const { generateId } = INTERNAL;
198
-
199
196
  const attachmentAdapter: AttachmentAdapter = {
200
197
  accept: "image/*,video/*,audio/*",
201
198
  async add({ file }) {
@@ -718,18 +715,18 @@ export default withAui(nextConfig);
718
715
  "start": "next start"
719
716
  },
720
717
  "dependencies": {
721
- "@ai-sdk/openai": "^3.0.68",
718
+ "@ai-sdk/openai": "^3.0.73",
722
719
  "@assistant-ui/react": "workspace:*",
723
720
  "@assistant-ui/react-ai-sdk": "workspace:*",
724
721
  "@assistant-ui/react-markdown": "workspace:*",
725
722
  "@assistant-ui/ui": "workspace:*",
726
723
  "@ffmpeg/ffmpeg": "^0.12.15",
727
724
  "@ffmpeg/util": "^0.12.2",
728
- "ai": "^6.0.197",
725
+ "ai": "^6.0.208",
729
726
  "class-variance-authority": "^0.7.1",
730
727
  "clsx": "^2.1.1",
731
- "lucide-react": "^1.17.0",
732
- "next": "^16.2.7",
728
+ "lucide-react": "^1.21.0",
729
+ "next": "^16.2.9",
733
730
  "react": "^19.2.7",
734
731
  "react-dom": "^19.2.7",
735
732
  "tailwind-merge": "^3.6.0",
@@ -738,12 +735,12 @@ export default withAui(nextConfig);
738
735
  "devDependencies": {
739
736
  "@assistant-ui/next": "workspace:*",
740
737
  "@assistant-ui/x-buildutils": "workspace:*",
741
- "@tailwindcss/postcss": "^4.3.0",
742
- "@types/node": "^25.9.2",
738
+ "@tailwindcss/postcss": "^4.3.1",
739
+ "@types/node": "^26.0.0",
743
740
  "@types/react": "^19.2.17",
744
741
  "@types/react-dom": "^19.2.3",
745
742
  "postcss": "^8.5.15",
746
- "tailwindcss": "^4.3.0",
743
+ "tailwindcss": "^4.3.1",
747
744
  "tw-animate-css": "^1.4.0",
748
745
  "typescript": "^6.0.3"
749
746
  }
@@ -246,7 +246,11 @@ export async function POST(req: Request) {
246
246
  "use client";
247
247
 
248
248
  import { ExampleNav } from "@/components/example-nav";
249
- import { GuiThread } from "@/components/gui-thread";
249
+ import { AssistantMessageGui } from "@/components/assistant-message-gui";
250
+ import {
251
+ Thread,
252
+ type ThreadComponents,
253
+ } from "@/components/assistant-ui/thread";
250
254
  import {
251
255
  AssistantRuntimeProvider,
252
256
  Suggestions,
@@ -262,6 +266,24 @@ const GuiChatInstructions = () => {
262
266
  return null;
263
267
  };
264
268
 
269
+ const GuiWelcome = () => {
270
+ return (
271
+ <div className="aui-thread-welcome-root mb-6 flex flex-col items-center gap-1 px-4 text-center">
272
+ <h1 className="aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-semibold duration-200">
273
+ Compose UI from a spec
274
+ </h1>
275
+ <p className="aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-xl delay-75 duration-200">
276
+ Ask the agent to call render_gui with Card, Button, and Stack.
277
+ </p>
278
+ </div>
279
+ );
280
+ };
281
+
282
+ const THREAD_COMPONENTS: ThreadComponents = {
283
+ AssistantMessage: AssistantMessageGui,
284
+ Welcome: GuiWelcome,
285
+ };
286
+
265
287
  export default function GuiChatPage() {
266
288
  const runtime = useChatRuntime({
267
289
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
@@ -290,7 +312,7 @@ export default function GuiChatPage() {
290
312
  <div className="flex h-full flex-col">
291
313
  <ExampleNav />
292
314
  <main className="min-h-0 flex-1">
293
- <GuiThread />
315
+ <Thread components={THREAD_COMPONENTS} />
294
316
  </main>
295
317
  </div>
296
318
  </AssistantRuntimeProvider>
@@ -713,7 +735,7 @@ export const AssistantMessageGui: FC<AssistantMessageGuiProps> = ({
713
735
  case "group-reasoning": {
714
736
  const running = part.status.type === "running";
715
737
  return (
716
- <ReasoningRoot defaultOpen={running}>
738
+ <ReasoningRoot streaming={running}>
717
739
  <ReasoningTrigger active={running} />
718
740
  <ReasoningContent aria-busy={running}>
719
741
  <ReasoningText>{children}</ReasoningText>
@@ -1143,304 +1165,6 @@ export function ExampleNav() {
1143
1165
 
1144
1166
  ```
1145
1167
 
1146
- ## components/gui-thread.tsx
1147
-
1148
- ```tsx
1149
- import {
1150
- ComposerAddAttachment,
1151
- ComposerAttachments,
1152
- UserMessageAttachments,
1153
- } from "@/components/assistant-ui/attachment";
1154
- import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button";
1155
- import { Button } from "@/components/ui/button";
1156
- import { cn } from "@/lib/utils";
1157
- import {
1158
- ActionBarPrimitive,
1159
- AuiIf,
1160
- BranchPickerPrimitive,
1161
- ComposerPrimitive,
1162
- MessagePrimitive,
1163
- SuggestionPrimitive,
1164
- ThreadPrimitive,
1165
- useAuiState,
1166
- } from "@assistant-ui/react";
1167
- import {
1168
- ArrowDownIcon,
1169
- ArrowUpIcon,
1170
- ChevronLeftIcon,
1171
- ChevronRightIcon,
1172
- PencilIcon,
1173
- SquareIcon,
1174
- } from "lucide-react";
1175
- import type { FC } from "react";
1176
- import { AssistantMessageGui } from "@/components/assistant-message-gui";
1177
-
1178
- /** Thread fork: swaps the assistant message renderer for the generative-ui bridge. */
1179
- export const GuiThread: FC = () => {
1180
- return (
1181
- <ThreadPrimitive.Root
1182
- className="aui-root aui-thread-root bg-background @container flex h-full flex-col"
1183
- style={{
1184
- ["--thread-max-width" as string]: "44rem",
1185
- ["--composer-radius" as string]: "24px",
1186
- ["--composer-padding" as string]: "10px",
1187
- }}
1188
- >
1189
- <ThreadPrimitive.Viewport
1190
- turnAnchor="top"
1191
- data-slot="aui_thread-viewport"
1192
- className="relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth"
1193
- >
1194
- <div className="mx-auto flex w-full max-w-(--thread-max-width) flex-1 flex-col px-4 pt-4">
1195
- <AuiIf condition={(s) => s.thread.isEmpty}>
1196
- <ThreadWelcome />
1197
- </AuiIf>
1198
-
1199
- <div
1200
- data-slot="aui_message-group"
1201
- className="mb-10 flex flex-col gap-y-8 empty:hidden"
1202
- >
1203
- <ThreadPrimitive.Messages>
1204
- {() => <ThreadMessage />}
1205
- </ThreadPrimitive.Messages>
1206
- </div>
1207
-
1208
- <ThreadPrimitive.ViewportFooter className="aui-thread-viewport-footer bg-background sticky bottom-0 mt-auto flex flex-col gap-4 overflow-visible rounded-t-(--composer-radius) pb-4 md:pb-6">
1209
- <ThreadScrollToBottom />
1210
- <Composer />
1211
- </ThreadPrimitive.ViewportFooter>
1212
- </div>
1213
- </ThreadPrimitive.Viewport>
1214
- </ThreadPrimitive.Root>
1215
- );
1216
- };
1217
-
1218
- const ThreadMessage: FC = () => {
1219
- const role = useAuiState((s) => s.message.role);
1220
- const isEditing = useAuiState((s) => s.message.composer.isEditing);
1221
-
1222
- if (isEditing) return <EditComposer />;
1223
- if (role === "user") return <UserMessage />;
1224
- return <AssistantMessageGui />;
1225
- };
1226
-
1227
- const ThreadScrollToBottom: FC = () => {
1228
- return (
1229
- <ThreadPrimitive.ScrollToBottom asChild>
1230
- <TooltipIconButton
1231
- tooltip="Scroll to bottom"
1232
- variant="outline"
1233
- className="aui-thread-scroll-to-bottom dark:border-border dark:bg-background dark:hover:bg-accent absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible"
1234
- >
1235
- <ArrowDownIcon />
1236
- </TooltipIconButton>
1237
- </ThreadPrimitive.ScrollToBottom>
1238
- );
1239
- };
1240
-
1241
- const ThreadWelcome: FC = () => {
1242
- return (
1243
- <div className="aui-thread-welcome-root my-auto flex grow flex-col">
1244
- <div className="aui-thread-welcome-center flex w-full grow flex-col items-center justify-center">
1245
- <div className="aui-thread-welcome-message flex size-full flex-col justify-center px-4">
1246
- <h1 className="aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-semibold duration-200">
1247
- Compose UI from a spec
1248
- </h1>
1249
- <p className="aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-xl delay-75 duration-200">
1250
- Ask the agent to call render_gui with Card, Button, and Stack.
1251
- </p>
1252
- </div>
1253
- </div>
1254
- <ThreadSuggestions />
1255
- </div>
1256
- );
1257
- };
1258
-
1259
- const ThreadSuggestions: FC = () => {
1260
- return (
1261
- <div className="aui-thread-welcome-suggestions grid w-full gap-2 pb-4 @md:grid-cols-2">
1262
- <ThreadPrimitive.Suggestions>
1263
- {() => <ThreadSuggestionItem />}
1264
- </ThreadPrimitive.Suggestions>
1265
- </div>
1266
- );
1267
- };
1268
-
1269
- const ThreadSuggestionItem: FC = () => {
1270
- return (
1271
- <div className="aui-thread-welcome-suggestion-display fade-in slide-in-from-bottom-2 animate-in fill-mode-both duration-200 nth-[n+3]:hidden @md:nth-[n+3]:block">
1272
- <SuggestionPrimitive.Trigger send asChild>
1273
- <Button
1274
- variant="ghost"
1275
- className="aui-thread-welcome-suggestion bg-background hover:bg-muted h-auto w-full flex-wrap items-start justify-start gap-1 rounded-3xl border px-4 py-3 text-start text-sm transition-colors @md:flex-col"
1276
- >
1277
- <SuggestionPrimitive.Title className="aui-thread-welcome-suggestion-text-1 font-medium" />
1278
- <SuggestionPrimitive.Description className="aui-thread-welcome-suggestion-text-2 text-muted-foreground empty:hidden" />
1279
- </Button>
1280
- </SuggestionPrimitive.Trigger>
1281
- </div>
1282
- );
1283
- };
1284
-
1285
- const Composer: FC = () => {
1286
- return (
1287
- <ComposerPrimitive.Root className="aui-composer-root relative flex w-full flex-col">
1288
- <ComposerPrimitive.AttachmentDropzone asChild>
1289
- <div
1290
- data-slot="aui_composer-shell"
1291
- className="bg-background focus-within:border-ring/75 focus-within:ring-ring/20 data-[dragging=true]:border-ring data-[dragging=true]:bg-accent/50 flex w-full flex-col gap-2 rounded-(--composer-radius) border p-(--composer-padding) transition-shadow focus-within:ring-2 data-[dragging=true]:border-dashed"
1292
- >
1293
- <ComposerAttachments />
1294
- <ComposerPrimitive.Input
1295
- placeholder="Send a message..."
1296
- className="aui-composer-input placeholder:text-muted-foreground/80 max-h-32 min-h-10 w-full resize-none bg-transparent px-1.75 py-1 text-sm outline-none"
1297
- rows={1}
1298
- autoFocus
1299
- aria-label="Message input"
1300
- />
1301
- <ComposerAction />
1302
- </div>
1303
- </ComposerPrimitive.AttachmentDropzone>
1304
- </ComposerPrimitive.Root>
1305
- );
1306
- };
1307
-
1308
- const ComposerAction: FC = () => {
1309
- return (
1310
- <div className="aui-composer-action-wrapper relative flex items-center justify-between">
1311
- <ComposerAddAttachment />
1312
- <AuiIf condition={(s) => !s.thread.isRunning}>
1313
- <ComposerPrimitive.Send asChild>
1314
- <TooltipIconButton
1315
- tooltip="Send message"
1316
- side="bottom"
1317
- type="button"
1318
- variant="default"
1319
- size="icon"
1320
- className="aui-composer-send size-8 rounded-full"
1321
- aria-label="Send message"
1322
- >
1323
- <ArrowUpIcon className="aui-composer-send-icon size-4" />
1324
- </TooltipIconButton>
1325
- </ComposerPrimitive.Send>
1326
- </AuiIf>
1327
- <AuiIf condition={(s) => s.thread.isRunning}>
1328
- <ComposerPrimitive.Cancel asChild>
1329
- <Button
1330
- type="button"
1331
- variant="default"
1332
- size="icon"
1333
- className="aui-composer-cancel size-8 rounded-full"
1334
- aria-label="Stop generating"
1335
- >
1336
- <SquareIcon className="aui-composer-cancel-icon size-3 fill-current" />
1337
- </Button>
1338
- </ComposerPrimitive.Cancel>
1339
- </AuiIf>
1340
- </div>
1341
- );
1342
- };
1343
-
1344
- const UserMessage: FC = () => {
1345
- return (
1346
- <MessagePrimitive.Root
1347
- data-slot="aui_user-message-root"
1348
- className="fade-in slide-in-from-bottom-1 animate-in grid auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 duration-150 [contain-intrinsic-size:auto_60px] [content-visibility:auto] [&:where(>*)]:col-start-2"
1349
- data-role="user"
1350
- >
1351
- <UserMessageAttachments />
1352
-
1353
- <div className="aui-user-message-content-wrapper relative col-start-2 min-w-0">
1354
- <div className="aui-user-message-content peer bg-muted text-foreground rounded-2xl px-4 py-2.5 wrap-break-word empty:hidden">
1355
- <MessagePrimitive.Parts />
1356
- </div>
1357
- <div className="aui-user-action-bar-wrapper absolute start-0 top-1/2 -translate-x-full -translate-y-1/2 pe-2 peer-empty:hidden rtl:translate-x-full">
1358
- <UserActionBar />
1359
- </div>
1360
- </div>
1361
-
1362
- <BranchPicker
1363
- data-slot="aui_user-branch-picker"
1364
- className="col-span-full col-start-1 row-start-3 -me-1 justify-end"
1365
- />
1366
- </MessagePrimitive.Root>
1367
- );
1368
- };
1369
-
1370
- const UserActionBar: FC = () => {
1371
- return (
1372
- <ActionBarPrimitive.Root
1373
- hideWhenRunning
1374
- autohide="not-last"
1375
- className="aui-user-action-bar-root flex flex-col items-end"
1376
- >
1377
- <ActionBarPrimitive.Edit asChild>
1378
- <TooltipIconButton tooltip="Edit" className="aui-user-action-edit p-4">
1379
- <PencilIcon />
1380
- </TooltipIconButton>
1381
- </ActionBarPrimitive.Edit>
1382
- </ActionBarPrimitive.Root>
1383
- );
1384
- };
1385
-
1386
- const EditComposer: FC = () => {
1387
- return (
1388
- <MessagePrimitive.Root
1389
- data-slot="aui_edit-composer-wrapper"
1390
- className="flex flex-col px-2"
1391
- >
1392
- <ComposerPrimitive.Root className="aui-edit-composer-root bg-muted ms-auto flex w-full max-w-[85%] flex-col rounded-2xl">
1393
- <ComposerPrimitive.Input
1394
- className="aui-edit-composer-input text-foreground min-h-14 w-full resize-none bg-transparent p-4 text-sm outline-none"
1395
- autoFocus
1396
- />
1397
- <div className="aui-edit-composer-footer mx-3 mb-3 flex items-center gap-2 self-end">
1398
- <ComposerPrimitive.Cancel asChild>
1399
- <Button variant="ghost" size="sm">
1400
- Cancel
1401
- </Button>
1402
- </ComposerPrimitive.Cancel>
1403
- <ComposerPrimitive.Send asChild>
1404
- <Button size="sm">Update</Button>
1405
- </ComposerPrimitive.Send>
1406
- </div>
1407
- </ComposerPrimitive.Root>
1408
- </MessagePrimitive.Root>
1409
- );
1410
- };
1411
-
1412
- const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
1413
- className,
1414
- ...rest
1415
- }) => {
1416
- return (
1417
- <BranchPickerPrimitive.Root
1418
- hideWhenSingleBranch
1419
- className={cn(
1420
- "aui-branch-picker-root text-muted-foreground -ms-2 me-2 inline-flex items-center text-xs",
1421
- className,
1422
- )}
1423
- {...rest}
1424
- >
1425
- <BranchPickerPrimitive.Previous asChild>
1426
- <TooltipIconButton tooltip="Previous">
1427
- <ChevronLeftIcon />
1428
- </TooltipIconButton>
1429
- </BranchPickerPrimitive.Previous>
1430
- <span className="aui-branch-picker-state font-medium">
1431
- <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />
1432
- </span>
1433
- <BranchPickerPrimitive.Next asChild>
1434
- <TooltipIconButton tooltip="Next">
1435
- <ChevronRightIcon />
1436
- </TooltipIconButton>
1437
- </BranchPickerPrimitive.Next>
1438
- </BranchPickerPrimitive.Root>
1439
- );
1440
- };
1441
-
1442
- ```
1443
-
1444
1168
  ## components/gui/index.tsx
1445
1169
 
1446
1170
  ```tsx
@@ -1778,15 +1502,15 @@ export default withAui(nextConfig);
1778
1502
  "test": "vitest run"
1779
1503
  },
1780
1504
  "dependencies": {
1781
- "@ai-sdk/openai": "^3.0.68",
1505
+ "@ai-sdk/openai": "^3.0.73",
1782
1506
  "@assistant-ui/react": "workspace:*",
1783
1507
  "@assistant-ui/react-ai-sdk": "workspace:*",
1784
1508
  "@assistant-ui/ui": "workspace:*",
1785
- "ai": "^6.0.197",
1509
+ "ai": "^6.0.208",
1786
1510
  "class-variance-authority": "^0.7.1",
1787
1511
  "clsx": "^2.1.1",
1788
- "lucide-react": "^1.17.0",
1789
- "next": "^16.2.7",
1512
+ "lucide-react": "^1.21.0",
1513
+ "next": "^16.2.9",
1790
1514
  "react": "^19.2.7",
1791
1515
  "react-dom": "^19.2.7",
1792
1516
  "recharts": "^3.8.1",
@@ -1796,15 +1520,15 @@ export default withAui(nextConfig);
1796
1520
  "devDependencies": {
1797
1521
  "@assistant-ui/next": "workspace:*",
1798
1522
  "@assistant-ui/x-buildutils": "workspace:*",
1799
- "@tailwindcss/postcss": "^4.3.0",
1800
- "@types/node": "^25.9.2",
1523
+ "@tailwindcss/postcss": "^4.3.1",
1524
+ "@types/node": "^26.0.0",
1801
1525
  "@types/react": "^19.2.17",
1802
1526
  "@types/react-dom": "^19.2.3",
1803
1527
  "postcss": "^8.5.15",
1804
- "tailwindcss": "^4.3.0",
1528
+ "tailwindcss": "^4.3.1",
1805
1529
  "tw-animate-css": "^1.4.0",
1806
1530
  "typescript": "^6.0.3",
1807
- "vitest": "^4.1.8"
1531
+ "vitest": "^4.1.9"
1808
1532
  }
1809
1533
  }
1810
1534
 
@@ -308,8 +308,8 @@ export default withAui(nextConfig);
308
308
  "@google/adk": "^1.2.0",
309
309
  "class-variance-authority": "^0.7.1",
310
310
  "clsx": "^2.1.1",
311
- "lucide-react": "^1.17.0",
312
- "next": "^16.2.7",
311
+ "lucide-react": "^1.21.0",
312
+ "next": "^16.2.9",
313
313
  "react": "^19.2.7",
314
314
  "react-dom": "^19.2.7",
315
315
  "tailwind-merge": "^3.6.0",
@@ -318,12 +318,12 @@ export default withAui(nextConfig);
318
318
  "devDependencies": {
319
319
  "@assistant-ui/next": "workspace:*",
320
320
  "@assistant-ui/x-buildutils": "workspace:*",
321
- "@tailwindcss/postcss": "^4.3.0",
322
- "@types/node": "^25.9.2",
321
+ "@tailwindcss/postcss": "^4.3.1",
322
+ "@types/node": "^26.0.0",
323
323
  "@types/react": "^19.2.17",
324
324
  "@types/react-dom": "^19.2.3",
325
325
  "postcss": "^8.5.15",
326
- "tailwindcss": "^4.3.0",
326
+ "tailwindcss": "^4.3.1",
327
327
  "tw-animate-css": "^1.4.0",
328
328
  "typescript": "^6.0.3"
329
329
  }
@@ -271,19 +271,19 @@ export default withAui(nextConfig);
271
271
  },
272
272
  "dependencies": {
273
273
  "heat-graph": "workspace:*",
274
- "next": "^16.2.7",
274
+ "next": "^16.2.9",
275
275
  "react": "^19.2.7",
276
276
  "react-dom": "^19.2.7"
277
277
  },
278
278
  "devDependencies": {
279
279
  "@assistant-ui/next": "workspace:*",
280
280
  "@assistant-ui/x-buildutils": "workspace:*",
281
- "@tailwindcss/postcss": "^4.3.0",
282
- "@types/node": "^25.9.2",
281
+ "@tailwindcss/postcss": "^4.3.1",
282
+ "@types/node": "^26.0.0",
283
283
  "@types/react": "^19.2.17",
284
284
  "@types/react-dom": "^19.2.3",
285
285
  "postcss": "^8.5.15",
286
- "tailwindcss": "^4.3.0",
286
+ "tailwindcss": "^4.3.1",
287
287
  "typescript": "^6.0.3"
288
288
  }
289
289
  }
@@ -380,14 +380,14 @@ export default withAui(nextConfig);
380
380
  "start": "next start"
381
381
  },
382
382
  "dependencies": {
383
- "@ai-sdk/openai": "^3.0.68",
383
+ "@ai-sdk/openai": "^3.0.73",
384
384
  "@assistant-ui/react": "workspace:*",
385
385
  "@assistant-ui/ui": "workspace:*",
386
- "ai": "^6.0.197",
386
+ "ai": "^6.0.208",
387
387
  "class-variance-authority": "^0.7.1",
388
388
  "clsx": "^2.1.1",
389
- "lucide-react": "^1.17.0",
390
- "next": "^16.2.7",
389
+ "lucide-react": "^1.21.0",
390
+ "next": "^16.2.9",
391
391
  "react": "^19.2.7",
392
392
  "react-dom": "^19.2.7",
393
393
  "tailwind-merge": "^3.6.0"
@@ -395,12 +395,12 @@ export default withAui(nextConfig);
395
395
  "devDependencies": {
396
396
  "@assistant-ui/next": "workspace:*",
397
397
  "@assistant-ui/x-buildutils": "workspace:*",
398
- "@tailwindcss/postcss": "^4.3.0",
399
- "@types/node": "^25.9.2",
398
+ "@tailwindcss/postcss": "^4.3.1",
399
+ "@types/node": "^26.0.0",
400
400
  "@types/react": "^19.2.17",
401
401
  "@types/react-dom": "^19.2.3",
402
402
  "postcss": "^8.5.15",
403
- "tailwindcss": "^4.3.0",
403
+ "tailwindcss": "^4.3.1",
404
404
  "tw-animate-css": "^1.4.0",
405
405
  "typescript": "^6.0.3"
406
406
  }