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

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 (134) hide show
  1. package/.docs/organized/code-examples/waterfall.md +20 -22
  2. package/.docs/organized/code-examples/with-a2a.md +24 -24
  3. package/.docs/organized/code-examples/with-ag-ui.md +30 -25
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +11 -9
  5. package/.docs/organized/code-examples/with-artifacts.md +49 -37
  6. package/.docs/organized/code-examples/with-assistant-transport.md +63 -51
  7. package/.docs/organized/code-examples/with-browser-extension.md +22 -10
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +406 -87
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +25 -24
  10. package/.docs/organized/code-examples/with-cloud.md +11 -9
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +14 -12
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +23 -21
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +14 -13
  14. package/.docs/organized/code-examples/with-expo.md +44 -29
  15. package/.docs/organized/code-examples/with-external-store.md +9 -7
  16. package/.docs/organized/code-examples/with-ffmpeg.md +322 -285
  17. package/.docs/organized/code-examples/with-generative-ui.md +1066 -256
  18. package/.docs/organized/code-examples/with-google-adk.md +10 -8
  19. package/.docs/organized/code-examples/with-heat-graph.md +13 -11
  20. package/.docs/organized/code-examples/with-image-generation.md +19 -17
  21. package/.docs/organized/code-examples/with-interactables.md +317 -239
  22. package/.docs/organized/code-examples/with-langchain.md +14 -12
  23. package/.docs/organized/code-examples/with-langgraph.md +91 -83
  24. package/.docs/organized/code-examples/with-livekit.md +24 -22
  25. package/.docs/organized/code-examples/with-mcp.md +18 -12
  26. package/.docs/organized/code-examples/with-opencode.md +66 -66
  27. package/.docs/organized/code-examples/with-react-hook-form.md +19 -17
  28. package/.docs/organized/code-examples/with-react-ink.md +297 -102
  29. package/.docs/organized/code-examples/with-react-router.md +17 -15
  30. package/.docs/organized/code-examples/with-resumable-stream.md +15 -14
  31. package/.docs/organized/code-examples/with-store.md +78 -76
  32. package/.docs/organized/code-examples/with-tanstack.md +13 -14
  33. package/.docs/organized/code-examples/with-tap-runtime.md +26 -24
  34. package/.docs/raw/docs/(docs)/architecture.mdx +94 -42
  35. package/.docs/raw/docs/(docs)/cli.mdx +1 -2
  36. package/.docs/raw/docs/(docs)/installation.mdx +1 -1
  37. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +5 -1
  38. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +15 -15
  39. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +14 -1
  40. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +18 -0
  41. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +33 -0
  42. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +45 -0
  43. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +41 -41
  44. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +19 -1
  45. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +122 -122
  46. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +43 -2
  47. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +6 -0
  48. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +4 -6
  49. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +30 -0
  50. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +20 -3
  51. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +8 -8
  52. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +52 -4
  53. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +100 -10
  54. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +7 -59
  55. package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -2
  56. package/.docs/raw/docs/{(docs)/copilots → copilots}/model-context.mdx +34 -26
  57. package/.docs/raw/docs/{(docs)/copilots → copilots}/motivation.mdx +32 -26
  58. package/.docs/raw/docs/guides/chain-of-thought.mdx +7 -9
  59. package/.docs/raw/docs/guides/context-api.mdx +2 -1
  60. package/.docs/raw/docs/guides/index.mdx +3 -12
  61. package/.docs/raw/docs/guides/mentions.mdx +4 -4
  62. package/.docs/raw/docs/guides/slash-commands.mdx +1 -1
  63. package/.docs/raw/docs/guides/suggestions.mdx +1 -1
  64. package/.docs/raw/docs/ink/adapters.mdx +23 -1
  65. package/.docs/raw/docs/ink/hooks.mdx +101 -85
  66. package/.docs/raw/docs/ink/migration.mdx +1 -1
  67. package/.docs/raw/docs/ink/primitives.mdx +2 -2
  68. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +1 -1
  69. package/.docs/raw/docs/integrations/index.mdx +2 -2
  70. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +17 -2
  71. package/.docs/raw/docs/migrations/toolkit-tools.mdx +232 -0
  72. package/.docs/raw/docs/primitives/chain-of-thought.mdx +10 -16
  73. package/.docs/raw/docs/primitives/message.mdx +9 -10
  74. package/.docs/raw/docs/react-native/hooks.mdx +62 -79
  75. package/.docs/raw/docs/react-native/migration.mdx +1 -1
  76. package/.docs/raw/docs/react-native/primitives.mdx +2 -2
  77. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +3 -0
  78. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +41 -0
  79. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +122 -1
  80. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +46 -4
  81. package/.docs/raw/docs/runtimes/concepts/threads.mdx +7 -1
  82. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +54 -12
  83. package/.docs/raw/docs/runtimes/custom/external-store.mdx +62 -4
  84. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +30 -7
  85. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +108 -38
  86. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +2 -2
  87. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +14 -1
  88. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +64 -50
  89. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +98 -86
  90. package/.docs/raw/docs/tools/backend.mdx +144 -0
  91. package/.docs/raw/docs/tools/defining-tools.mdx +538 -0
  92. package/.docs/raw/docs/tools/dynamic-tools.mdx +110 -0
  93. package/.docs/raw/docs/tools/generative-ui.mdx +214 -0
  94. package/.docs/raw/docs/tools/index.mdx +71 -0
  95. package/.docs/raw/docs/{guides → tools}/interactables.mdx +1 -1
  96. package/.docs/raw/docs/{integrations/tools → tools}/mcp.mdx +145 -50
  97. package/.docs/raw/docs/{guides → tools}/multi-agent.mdx +15 -17
  98. package/.docs/raw/docs/tools/tool-ui.mdx +967 -0
  99. package/.docs/raw/docs/{integrations/tools/react-mcp.mdx → tools/user-managed-mcp.mdx} +7 -7
  100. package/.docs/raw/docs/ui/directive-text.mdx +3 -3
  101. package/.docs/raw/docs/ui/mcp-config.mdx +4 -4
  102. package/.docs/raw/docs/ui/mermaid.mdx +16 -9
  103. package/.docs/raw/docs/ui/part-grouping.mdx +84 -50
  104. package/.docs/raw/docs/ui/reasoning.mdx +4 -5
  105. package/.docs/raw/docs/ui/tool-fallback.mdx +16 -0
  106. package/.docs/raw/docs/ui/tool-group.mdx +5 -6
  107. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -1
  108. package/.docs/raw/docs/utilities/react-o11y.mdx +2 -2
  109. package/dist/constants.js.map +1 -1
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js.map +1 -1
  112. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  113. package/dist/prepare-docs/code-examples.js.map +1 -1
  114. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  115. package/dist/prepare-docs/copy-raw.js.map +1 -1
  116. package/dist/prepare-docs/prepare.js.map +1 -1
  117. package/dist/stdio.js.map +1 -1
  118. package/dist/tools/docs.js.map +1 -1
  119. package/dist/tools/examples.js.map +1 -1
  120. package/dist/tools/tests/test-setup.js.map +1 -1
  121. package/dist/utils/mdx.js.map +1 -1
  122. package/dist/utils/paths.d.ts.map +1 -1
  123. package/dist/utils/paths.js.map +1 -1
  124. package/package.json +5 -5
  125. package/.docs/organized/code-examples/with-parent-id-grouping.md +0 -596
  126. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +0 -151
  127. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +0 -230
  128. package/.docs/raw/docs/guides/generative-ui.mdx +0 -142
  129. package/.docs/raw/docs/guides/tool-ui.mdx +0 -858
  130. package/.docs/raw/docs/guides/tools.mdx +0 -736
  131. /package/.docs/raw/docs/{(docs)/copilots → copilots}/assistant-frame.mdx +0 -0
  132. /package/.docs/raw/docs/{(docs)/copilots → copilots}/make-assistant-visible.mdx +0 -0
  133. /package/.docs/raw/docs/{(docs)/copilots → copilots}/use-assistant-instructions.mdx +0 -0
  134. /package/.docs/raw/docs/{guides → tools}/mcp-apps.mdx +0 -0
@@ -268,15 +268,15 @@ export function TodosPanel() {
268
268
  return (
269
269
  <div className="text-muted-foreground text-sm">
270
270
  Todos from the agent will appear here. This panel reads{" "}
271
- <code className="rounded bg-muted px-1">state.todos</code> via{" "}
272
- <code className="rounded bg-muted px-1">useLangChainState</code>.
271
+ <code className="bg-muted rounded px-1">state.todos</code> via{" "}
272
+ <code className="bg-muted rounded px-1">useLangChainState</code>.
273
273
  </div>
274
274
  );
275
275
  }
276
276
 
277
277
  return (
278
278
  <div className="space-y-2">
279
- <h2 className="font-semibold text-muted-foreground text-sm uppercase tracking-wide">
279
+ <h2 className="text-muted-foreground text-sm font-semibold tracking-wide uppercase">
280
280
  Agent todos
281
281
  </h2>
282
282
  <ul className="space-y-1">
@@ -307,13 +307,14 @@ export function TodosPanel() {
307
307
  ## next.config.ts
308
308
 
309
309
  ```typescript
310
+ import { withAui } from "@assistant-ui/next";
310
311
  import type { NextConfig } from "next";
311
312
 
312
313
  const nextConfig: NextConfig = {
313
314
  transpilePackages: ["@assistant-ui/react", "@assistant-ui/react-langchain"],
314
315
  };
315
316
 
316
- export default nextConfig;
317
+ export default withAui(nextConfig);
317
318
 
318
319
  ```
319
320
 
@@ -335,21 +336,22 @@ export default nextConfig;
335
336
  "@assistant-ui/react-langchain": "workspace:*",
336
337
  "@assistant-ui/react-markdown": "workspace:*",
337
338
  "@assistant-ui/ui": "workspace:*",
338
- "@langchain/langgraph-sdk": "^1.9.4",
339
- "@langchain/react": "^1.0.4",
339
+ "@langchain/langgraph-sdk": "^1.9.18",
340
+ "@langchain/react": "^1.0.18",
340
341
  "class-variance-authority": "^0.7.1",
341
342
  "clsx": "^2.1.1",
342
- "lucide-react": "^1.16.0",
343
- "next": "^16.2.6",
344
- "react": "^19.2.6",
345
- "react-dom": "^19.2.6",
343
+ "lucide-react": "^1.17.0",
344
+ "next": "^16.2.7",
345
+ "react": "^19.2.7",
346
+ "react-dom": "^19.2.7",
346
347
  "tailwind-merge": "^3.6.0"
347
348
  },
348
349
  "devDependencies": {
350
+ "@assistant-ui/next": "workspace:*",
349
351
  "@assistant-ui/x-buildutils": "workspace:*",
350
352
  "@tailwindcss/postcss": "^4.3.0",
351
- "@types/node": "^25.9.1",
352
- "@types/react": "^19.2.15",
353
+ "@types/node": "^25.9.2",
354
+ "@types/react": "^19.2.17",
353
355
  "@types/react-dom": "^19.2.3",
354
356
  "postcss": "^8.5.15",
355
357
  "tailwindcss": "^4.3.0",
@@ -306,13 +306,13 @@ export function MyRuntimeProvider({
306
306
  "use client";
307
307
 
308
308
  import { Thread } from "@/components/assistant-ui/thread";
309
- import { PriceSnapshotTool } from "@/components/tools/price-snapshot/PriceSnapshotTool";
310
- import { PurchaseStockTool } from "@/components/tools/purchase-stock/PurchaseStockTool";
311
309
  import { ThreadList } from "@/components/assistant-ui/thread-list";
312
- import { useAui, AuiProvider, Suggestions } from "@assistant-ui/react";
310
+ import { useAui, AuiProvider, Suggestions, Tools } from "@assistant-ui/react";
311
+ import toolkit from "./toolkit";
313
312
 
314
313
  function ThreadWithSuggestions() {
315
314
  const aui = useAui({
315
+ tools: Tools({ toolkit }),
316
316
  suggestions: Suggestions([
317
317
  {
318
318
  title: "Check stock price",
@@ -341,8 +341,6 @@ export default function Home() {
341
341
  </div>
342
342
  <div className="flex-grow">
343
343
  <ThreadWithSuggestions />
344
- <PriceSnapshotTool />
345
- <PurchaseStockTool />
346
344
  </div>
347
345
  </div>
348
346
  );
@@ -350,6 +348,28 @@ export default function Home() {
350
348
 
351
349
  ```
352
350
 
351
+ ## app/toolkit.tsx
352
+
353
+ ```tsx
354
+ "use generative";
355
+
356
+ import { defineToolkit, externalTool } from "@assistant-ui/react";
357
+ import { PriceSnapshotToolUI } from "@/components/tools/price-snapshot/PriceSnapshotTool";
358
+ import { PurchaseStockToolUI } from "@/components/tools/purchase-stock/PurchaseStockTool";
359
+
360
+ export default defineToolkit({
361
+ price_snapshot: {
362
+ execute: externalTool(),
363
+ render: PriceSnapshotToolUI,
364
+ },
365
+ purchase_stock: {
366
+ execute: externalTool(),
367
+ render: PurchaseStockToolUI,
368
+ },
369
+ });
370
+
371
+ ```
372
+
353
373
  ## components.json
354
374
 
355
375
  ```json
@@ -414,17 +434,17 @@ export function PriceSnapshot({
414
434
  return (
415
435
  <Card className="mx-auto w-full max-w-md">
416
436
  <CardHeader>
417
- <CardTitle className="font-bold text-2xl">{ticker}</CardTitle>
437
+ <CardTitle className="text-2xl font-bold">{ticker}</CardTitle>
418
438
  </CardHeader>
419
439
  <CardContent>
420
440
  <div className="grid grid-cols-2 gap-4">
421
441
  <div className="col-span-2">
422
- <p className="font-semibold text-3xl">${price?.toFixed(2)}</p>
442
+ <p className="text-3xl font-semibold">${price?.toFixed(2)}</p>
423
443
  </div>
424
444
  <div>
425
445
  <p className="text-muted-foreground text-sm">Day Change</p>
426
446
  <p
427
- className={`flex items-center font-medium text-lg ${changeColor}`}
447
+ className={`flex items-center text-lg font-medium ${changeColor}`}
428
448
  >
429
449
  <ArrowIcon className="mr-1 h-4 w-4" />$
430
450
  {Math.abs(day_change)?.toFixed(2)} (
@@ -433,7 +453,7 @@ export function PriceSnapshot({
433
453
  </div>
434
454
  <div>
435
455
  <p className="text-muted-foreground text-sm">Last Updated</p>
436
- <p className="font-medium text-lg">
456
+ <p className="text-lg font-medium">
437
457
  {new Date(time).toLocaleTimeString()}
438
458
  </p>
439
459
  </div>
@@ -451,7 +471,7 @@ export function PriceSnapshot({
451
471
  "use client";
452
472
 
453
473
  import { PriceSnapshot } from "./price-snapshot";
454
- import { makeAssistantToolUI } from "@assistant-ui/react";
474
+ import type { ToolCallMessagePartComponent } from "@assistant-ui/react";
455
475
 
456
476
  type PriceSnapshotToolArgs = {
457
477
  ticker: string;
@@ -464,26 +484,23 @@ type PriceSnapshotToolResult = {
464
484
  time: string;
465
485
  };
466
486
  };
467
- export const PriceSnapshotTool = makeAssistantToolUI<
487
+ export const PriceSnapshotToolUI: ToolCallMessagePartComponent<
468
488
  PriceSnapshotToolArgs,
469
489
  string
470
- >({
471
- toolName: "price_snapshot",
472
- render: function PriceSnapshotUI({ args, argsText, result }) {
473
- const resultObj = result
474
- ? (JSON.parse(result) as PriceSnapshotToolResult)
475
- : undefined;
476
-
477
- return (
478
- <div className="mb-4 flex flex-col items-center gap-2">
479
- <pre className="whitespace-pre-wrap">price_snapshot({argsText})</pre>
480
- {resultObj && (
481
- <PriceSnapshot ticker={args.ticker} {...resultObj.snapshot} />
482
- )}
483
- </div>
484
- );
485
- },
486
- });
490
+ > = function PriceSnapshotUI({ args, argsText, result }) {
491
+ const resultObj = result
492
+ ? (JSON.parse(result) as PriceSnapshotToolResult)
493
+ : undefined;
494
+
495
+ return (
496
+ <div className="mb-4 flex flex-col items-center gap-2">
497
+ <pre className="whitespace-pre-wrap">price_snapshot({argsText})</pre>
498
+ {resultObj && (
499
+ <PriceSnapshot ticker={args.ticker} {...resultObj.snapshot} />
500
+ )}
501
+ </div>
502
+ );
503
+ };
487
504
 
488
505
  ```
489
506
 
@@ -494,7 +511,7 @@ export const PriceSnapshotTool = makeAssistantToolUI<
494
511
 
495
512
  import { TransactionConfirmationPending } from "./transaction-confirmation-pending";
496
513
  import { TransactionConfirmationFinal } from "./transaction-confirmation-final";
497
- import { makeAssistantToolUI } from "@assistant-ui/react";
514
+ import type { ToolCallMessagePartComponent } from "@assistant-ui/react";
498
515
 
499
516
  type PurchaseStockArgs = {
500
517
  ticker: string;
@@ -503,39 +520,28 @@ type PurchaseStockArgs = {
503
520
  maxPurchasePrice: number;
504
521
  };
505
522
 
506
- export const PurchaseStockTool = makeAssistantToolUI<PurchaseStockArgs, string>(
507
- {
508
- toolName: "purchase_stock",
509
- render: function PurchaseStockUI({
510
- args,
511
- argsText,
512
- result,
513
- status,
514
- addResult,
515
- }) {
516
- const resultObj = result
517
- ? (JSON.parse(result) as { transactionId: string })
518
- : undefined;
519
-
520
- const handleConfirm = async () => {
521
- addResult(JSON.stringify({ confirmed: true }));
522
- };
523
+ export const PurchaseStockToolUI: ToolCallMessagePartComponent<
524
+ PurchaseStockArgs,
525
+ string
526
+ > = function PurchaseStockUI({ args, argsText, result, status, addResult }) {
527
+ const resultObj = result
528
+ ? (JSON.parse(result) as { transactionId: string })
529
+ : undefined;
523
530
 
524
- return (
525
- <div className="mb-4 flex flex-col items-center gap-2">
526
- <pre className="whitespace-pre-wrap">purchase_stock({argsText})</pre>
527
- {!resultObj && status.type !== "running" && (
528
- <TransactionConfirmationPending
529
- {...args}
530
- onConfirm={handleConfirm}
531
- />
532
- )}
533
- {resultObj && <TransactionConfirmationFinal {...args} />}
534
- </div>
535
- );
536
- },
537
- },
538
- );
531
+ const handleConfirm = async () => {
532
+ addResult(JSON.stringify({ confirmed: true }));
533
+ };
534
+
535
+ return (
536
+ <div className="mb-4 flex flex-col items-center gap-2">
537
+ <pre className="whitespace-pre-wrap">purchase_stock({argsText})</pre>
538
+ {!resultObj && status.type !== "running" && (
539
+ <TransactionConfirmationPending {...args} onConfirm={handleConfirm} />
540
+ )}
541
+ {resultObj && <TransactionConfirmationFinal {...args} />}
542
+ </div>
543
+ );
544
+ };
539
545
 
540
546
  ```
541
547
 
@@ -562,13 +568,13 @@ export function TransactionConfirmationFinal(props: TransactionConfirmation) {
562
568
  <Card className="mx-auto w-full max-w-md">
563
569
  <CardHeader className="text-center">
564
570
  <CheckCircle className="mx-auto mb-4 h-16 w-16 text-green-500" />
565
- <CardTitle className="font-bold text-2xl text-green-700">
571
+ <CardTitle className="text-2xl font-bold text-green-700">
566
572
  Transaction Confirmed
567
573
  </CardTitle>
568
574
  </CardHeader>
569
575
  <CardContent className="space-y-4">
570
576
  <div className="rounded-md border border-green-200 bg-green-50 p-4">
571
- <h3 className="mb-2 font-semibold text-green-800 text-lg">
577
+ <h3 className="mb-2 text-lg font-semibold text-green-800">
572
578
  Purchase Summary
573
579
  </h3>
574
580
  <div className="grid grid-cols-2 gap-2 text-sm">
@@ -583,12 +589,12 @@ export function TransactionConfirmationFinal(props: TransactionConfirmation) {
583
589
  </div>
584
590
  </div>
585
591
  <div className="rounded-md border border-green-300 bg-green-100 p-4">
586
- <p className="font-semibold text-green-800 text-lg">Total Cost:</p>
587
- <p className="font-bold text-2xl text-green-900">
592
+ <p className="text-lg font-semibold text-green-800">Total Cost:</p>
593
+ <p className="text-2xl font-bold text-green-900">
588
594
  ${(quantity * maxPurchasePrice)?.toFixed(2)}
589
595
  </p>
590
596
  </div>
591
- <p className="text-center text-green-600 text-sm">
597
+ <p className="text-center text-sm text-green-600">
592
598
  Your purchase of {quantity} shares of {companyName} ({ticker}) has
593
599
  been successfully processed.
594
600
  </p>
@@ -629,26 +635,26 @@ export function TransactionConfirmationPending(props: TransactionConfirmation) {
629
635
  return (
630
636
  <Card className="mx-auto w-full max-w-md">
631
637
  <CardHeader>
632
- <CardTitle className="font-bold text-2xl">
638
+ <CardTitle className="text-2xl font-bold">
633
639
  Confirm Transaction
634
640
  </CardTitle>
635
641
  </CardHeader>
636
642
  <CardContent className="space-y-4">
637
643
  <div className="grid grid-cols-2 gap-2">
638
- <p className="font-medium text-muted-foreground text-sm">Ticker:</p>
639
- <p className="font-bold text-sm">{ticker}</p>
640
- <p className="font-medium text-muted-foreground text-sm">Company:</p>
644
+ <p className="text-muted-foreground text-sm font-medium">Ticker:</p>
645
+ <p className="text-sm font-bold">{ticker}</p>
646
+ <p className="text-muted-foreground text-sm font-medium">Company:</p>
641
647
  <p className="text-sm">{companyName}</p>
642
- <p className="font-medium text-muted-foreground text-sm">Quantity:</p>
648
+ <p className="text-muted-foreground text-sm font-medium">Quantity:</p>
643
649
  <p className="text-sm">{quantity} shares</p>
644
- <p className="font-medium text-muted-foreground text-sm">
650
+ <p className="text-muted-foreground text-sm font-medium">
645
651
  Max Purchase Price:
646
652
  </p>
647
653
  <p className="text-sm">${maxPurchasePrice?.toFixed(2)}</p>
648
654
  </div>
649
- <div className="rounded-md bg-muted p-3">
650
- <p className="font-medium text-sm">Total Maximum Cost:</p>
651
- <p className="font-bold text-lg">
655
+ <div className="bg-muted rounded-md p-3">
656
+ <p className="text-sm font-medium">Total Maximum Cost:</p>
657
+ <p className="text-lg font-bold">
652
658
  ${(quantity * maxPurchasePrice)?.toFixed(2)}
653
659
  </p>
654
660
  </div>
@@ -836,6 +842,7 @@ export const sendMessage = (params: {
836
842
  ## next.config.ts
837
843
 
838
844
  ```typescript
845
+ import { withAui } from "@assistant-ui/next";
839
846
  import type { NextConfig } from "next";
840
847
 
841
848
  const nextConfig: NextConfig = {
@@ -849,7 +856,7 @@ const nextConfig: NextConfig = {
849
856
  },
850
857
  };
851
858
 
852
- export default nextConfig;
859
+ export default withAui(nextConfig);
853
860
 
854
861
  ```
855
862
 
@@ -871,20 +878,21 @@ export default nextConfig;
871
878
  "@assistant-ui/react-langgraph": "workspace:*",
872
879
  "@assistant-ui/react-markdown": "workspace:*",
873
880
  "@assistant-ui/ui": "workspace:*",
874
- "@langchain/langgraph-sdk": "^1.9.4",
881
+ "@langchain/langgraph-sdk": "^1.9.18",
875
882
  "class-variance-authority": "^0.7.1",
876
883
  "clsx": "^2.1.1",
877
- "lucide-react": "^1.16.0",
878
- "next": "^16.2.6",
879
- "react": "^19.2.6",
880
- "react-dom": "^19.2.6",
884
+ "lucide-react": "^1.17.0",
885
+ "next": "^16.2.7",
886
+ "react": "^19.2.7",
887
+ "react-dom": "^19.2.7",
881
888
  "tailwind-merge": "^3.6.0"
882
889
  },
883
890
  "devDependencies": {
891
+ "@assistant-ui/next": "workspace:*",
884
892
  "@assistant-ui/x-buildutils": "workspace:*",
885
893
  "@tailwindcss/postcss": "^4.3.0",
886
- "@types/node": "^25.9.1",
887
- "@types/react": "^19.2.15",
894
+ "@types/node": "^25.9.2",
895
+ "@types/react": "^19.2.17",
888
896
  "@types/react-dom": "^19.2.3",
889
897
  "postcss": "^8.5.15",
890
898
  "tailwindcss": "^4.3.0",
@@ -219,7 +219,7 @@ import type { FC } from "react";
219
219
  export const VoiceThread: FC = () => {
220
220
  return (
221
221
  <ThreadPrimitive.Root
222
- className="aui-root aui-thread-root flex h-full flex-col bg-background"
222
+ className="aui-root aui-thread-root bg-background flex h-full flex-col"
223
223
  style={{ ["--thread-max-width" as string]: "44rem" }}
224
224
  >
225
225
  <ThreadPrimitive.Viewport className="aui-thread-viewport relative flex flex-1 flex-col overflow-y-scroll scroll-smooth px-4 pt-4">
@@ -231,7 +231,7 @@ export const VoiceThread: FC = () => {
231
231
  {() => <ThreadMessage />}
232
232
  </ThreadPrimitive.Messages>
233
233
 
234
- <ThreadPrimitive.ViewportFooter className="sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col items-center bg-background pt-4 pb-6">
234
+ <ThreadPrimitive.ViewportFooter className="bg-background sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col items-center pt-4 pb-6">
235
235
  <ThreadScrollToBottom />
236
236
  <VoiceControlCenter />
237
237
  </ThreadPrimitive.ViewportFooter>
@@ -243,7 +243,7 @@ export const VoiceThread: FC = () => {
243
243
  const VoiceWelcome: FC = () => {
244
244
  return (
245
245
  <div className="aui-thread-welcome-root mx-auto my-auto flex w-full max-w-(--thread-max-width) grow flex-col items-center justify-center gap-2">
246
- <p className="fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200">
246
+ <p className="fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-semibold duration-200">
247
247
  Voice Conversation
248
248
  </p>
249
249
  <p className="fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground delay-75 duration-200">
@@ -259,7 +259,7 @@ const ThreadScrollToBottom: FC = () => {
259
259
  <TooltipIconButton
260
260
  tooltip="Scroll to bottom"
261
261
  variant="outline"
262
- className="absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:border-border dark:bg-background dark:hover:bg-accent"
262
+ className="dark:border-border dark:bg-background dark:hover:bg-accent absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible"
263
263
  >
264
264
  <ArrowDownIcon />
265
265
  </TooltipIconButton>
@@ -310,7 +310,7 @@ const VoiceWaveform: FC = () => {
310
310
  return (
311
311
  <span
312
312
  key={i}
313
- className="aui-voice-waveform-bar h-full w-[3px] origin-center rounded-full bg-foreground/50 transition-transform duration-100"
313
+ className="aui-voice-waveform-bar bg-foreground/50 h-full w-[3px] origin-center rounded-full transition-transform duration-100"
314
314
  style={{ transform: `scaleY(${scale})` }}
315
315
  />
316
316
  );
@@ -328,10 +328,10 @@ const ThreadMessage: FC = () => {
328
328
  const AssistantMessage: FC = () => {
329
329
  return (
330
330
  <MessagePrimitive.Root
331
- className="aui-assistant-message-root fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150"
331
+ className="aui-assistant-message-root fade-in slide-in-from-bottom-1 animate-in relative mx-auto w-full max-w-(--thread-max-width) py-3 duration-150"
332
332
  data-role="assistant"
333
333
  >
334
- <div className="aui-assistant-message-content wrap-break-word px-2 text-foreground leading-relaxed">
334
+ <div className="aui-assistant-message-content text-foreground px-2 leading-relaxed wrap-break-word">
335
335
  <MessagePrimitive.Parts>
336
336
  {({ part }) => {
337
337
  if (part.type === "text") return <MarkdownText />;
@@ -346,10 +346,10 @@ const AssistantMessage: FC = () => {
346
346
  const UserMessage: FC = () => {
347
347
  return (
348
348
  <MessagePrimitive.Root
349
- className="aui-user-message-root fade-in slide-in-from-bottom-1 mx-auto flex w-full max-w-(--thread-max-width) animate-in justify-end px-2 py-3 duration-150"
349
+ className="aui-user-message-root fade-in slide-in-from-bottom-1 animate-in mx-auto flex w-full max-w-(--thread-max-width) justify-end px-2 py-3 duration-150"
350
350
  data-role="user"
351
351
  >
352
- <div className="aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground">
352
+ <div className="aui-user-message-content bg-muted text-foreground rounded-2xl px-4 py-2.5 wrap-break-word">
353
353
  <MessagePrimitive.Parts />
354
354
  </div>
355
355
  </MessagePrimitive.Root>
@@ -535,12 +535,13 @@ export class LiveKitVoiceAdapter implements RealtimeVoiceAdapter {
535
535
  ## next.config.js
536
536
 
537
537
  ```javascript
538
+ import { withAui } from "@assistant-ui/next";
538
539
  /** @type {import('next').NextConfig} */
539
540
  const nextConfig = {
540
541
  transpilePackages: ["@assistant-ui/react", "@assistant-ui/react-ai-sdk"],
541
542
  };
542
543
 
543
- export default nextConfig;
544
+ export default withAui(nextConfig);
544
545
 
545
546
  ```
546
547
 
@@ -553,32 +554,33 @@ export default nextConfig;
553
554
  "version": "0.0.0",
554
555
  "type": "module",
555
556
  "dependencies": {
556
- "@ai-sdk/openai": "^3.0.64",
557
- "@ai-sdk/react": "^3.0.190",
557
+ "@ai-sdk/openai": "^3.0.68",
558
+ "@ai-sdk/react": "^3.0.199",
558
559
  "@assistant-ui/react": "workspace:^",
559
560
  "@assistant-ui/react-ai-sdk": "workspace:*",
560
561
  "@assistant-ui/react-markdown": "workspace:^",
561
562
  "@assistant-ui/ui": "workspace:*",
562
563
  "@tailwindcss/postcss": "^4.3.0",
563
- "ai": "^6.0.188",
564
+ "ai": "^6.0.197",
564
565
  "class-variance-authority": "^0.7.1",
565
566
  "clsx": "^2.1.1",
566
- "livekit-client": "^2.19.0",
567
- "livekit-server-sdk": "^2.15.3",
568
- "lucide-react": "^1.16.0",
569
- "motion": "^12.39.0",
570
- "next": "^16.2.6",
567
+ "livekit-client": "^2.19.1",
568
+ "livekit-server-sdk": "^2.15.4",
569
+ "lucide-react": "^1.17.0",
570
+ "motion": "^12.40.0",
571
+ "next": "^16.2.7",
571
572
  "postcss": "^8.5.15",
572
- "react": "^19.2.6",
573
- "react-dom": "^19.2.6",
573
+ "react": "^19.2.7",
574
+ "react-dom": "^19.2.7",
574
575
  "tailwind-merge": "^3.6.0",
575
576
  "tailwindcss": "^4.3.0",
576
577
  "zod": "^4.4.3"
577
578
  },
578
579
  "devDependencies": {
580
+ "@assistant-ui/next": "workspace:*",
579
581
  "@assistant-ui/x-buildutils": "workspace:*",
580
- "@types/node": "^25.9.1",
581
- "@types/react": "^19.2.15",
582
+ "@types/node": "^25.9.2",
583
+ "@types/react": "^19.2.17",
582
584
  "@types/react-dom": "^19.2.3",
583
585
  "tw-animate-css": "^1.4.0",
584
586
  "typescript": "^6.0.3"
@@ -163,7 +163,7 @@ export const metadata = {
163
163
  export default function RootLayout({ children }: { children: ReactNode }) {
164
164
  return (
165
165
  <html lang="en" className="h-full">
166
- <body className="min-h-full bg-background text-foreground antialiased">
166
+ <body className="bg-background text-foreground min-h-full antialiased">
167
167
  {children}
168
168
  </body>
169
169
  </html>
@@ -227,7 +227,7 @@ export default function Home() {
227
227
  <main className="grid h-dvh grid-rows-[auto_1fr]">
228
228
  <header className="flex items-center justify-between gap-3 border-b px-4 py-3">
229
229
  <div className="flex flex-col">
230
- <h1 className="font-semibold text-base tracking-tight">
230
+ <h1 className="text-base font-semibold tracking-tight">
231
231
  react-mcp
232
232
  </h1>
233
233
  <p className="text-muted-foreground text-xs">
@@ -376,7 +376,7 @@ export default nextConfig;
376
376
  "start:server": "tsx server/server.ts"
377
377
  },
378
378
  "dependencies": {
379
- "@ai-sdk/openai": "^3.0.64",
379
+ "@ai-sdk/openai": "^3.0.68",
380
380
  "@assistant-ui/react": "workspace:*",
381
381
  "@assistant-ui/react-ai-sdk": "workspace:*",
382
382
  "@assistant-ui/react-markdown": "workspace:*",
@@ -385,16 +385,16 @@ export default nextConfig;
385
385
  "@assistant-ui/tap": "workspace:*",
386
386
  "@assistant-ui/ui": "workspace:*",
387
387
  "@modelcontextprotocol/sdk": "^1.29.0",
388
- "ai": "^6.0.188",
388
+ "ai": "^6.0.197",
389
389
  "assistant-stream": "workspace:*",
390
390
  "class-variance-authority": "^0.7.1",
391
391
  "clsx": "^2.1.1",
392
392
  "cors": "^2.8.6",
393
393
  "express": "^5.2.1",
394
- "lucide-react": "^1.16.0",
395
- "next": "^16.2.6",
396
- "react": "^19.2.6",
397
- "react-dom": "^19.2.6",
394
+ "lucide-react": "^1.17.0",
395
+ "next": "^16.2.7",
396
+ "react": "^19.2.7",
397
+ "react-dom": "^19.2.7",
398
398
  "tailwind-merge": "^3.6.0",
399
399
  "zod": "^4.4.3"
400
400
  },
@@ -403,13 +403,13 @@ export default nextConfig;
403
403
  "@tailwindcss/postcss": "^4.3.0",
404
404
  "@types/cors": "^2.8.19",
405
405
  "@types/express": "^5.0.6",
406
- "@types/node": "^25.9.1",
407
- "@types/react": "^19.2.15",
406
+ "@types/node": "^25.9.2",
407
+ "@types/react": "^19.2.17",
408
408
  "@types/react-dom": "^19.2.3",
409
- "concurrently": "^9.2.1",
409
+ "concurrently": "^10.0.3",
410
410
  "postcss": "^8.5.15",
411
411
  "tailwindcss": "^4.3.0",
412
- "tsx": "^4.22.3",
412
+ "tsx": "^4.22.4",
413
413
  "tw-animate-css": "^1.4.0",
414
414
  "typescript": "^6.0.3"
415
415
  }
@@ -731,6 +731,12 @@ main().catch((err) => {
731
731
  "incremental": true,
732
732
  "types": ["node"],
733
733
  "paths": {
734
+ "@/components/assistant-ui/*": [
735
+ "../../packages/ui/src/components/assistant-ui/*"
736
+ ],
737
+ "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
738
+ "@/lib/utils": ["../../packages/ui/src/lib/utils"],
739
+ "@assistant-ui/ui/*": ["../../packages/ui/src/*"],
734
740
  "@/*": ["./app/*"]
735
741
  }
736
742
  },