@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.
- package/.docs/organized/code-examples/waterfall.md +20 -22
- package/.docs/organized/code-examples/with-a2a.md +24 -24
- package/.docs/organized/code-examples/with-ag-ui.md +30 -25
- package/.docs/organized/code-examples/with-ai-sdk-v6.md +11 -9
- package/.docs/organized/code-examples/with-artifacts.md +49 -37
- package/.docs/organized/code-examples/with-assistant-transport.md +63 -51
- package/.docs/organized/code-examples/with-browser-extension.md +22 -10
- package/.docs/organized/code-examples/with-chain-of-thought.md +406 -87
- package/.docs/organized/code-examples/with-cloud-standalone.md +25 -24
- package/.docs/organized/code-examples/with-cloud.md +11 -9
- package/.docs/organized/code-examples/with-custom-thread-list.md +14 -12
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +23 -21
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +14 -13
- package/.docs/organized/code-examples/with-expo.md +44 -29
- package/.docs/organized/code-examples/with-external-store.md +9 -7
- package/.docs/organized/code-examples/with-ffmpeg.md +322 -285
- package/.docs/organized/code-examples/with-generative-ui.md +1066 -256
- package/.docs/organized/code-examples/with-google-adk.md +10 -8
- package/.docs/organized/code-examples/with-heat-graph.md +13 -11
- package/.docs/organized/code-examples/with-image-generation.md +19 -17
- package/.docs/organized/code-examples/with-interactables.md +317 -239
- package/.docs/organized/code-examples/with-langchain.md +14 -12
- package/.docs/organized/code-examples/with-langgraph.md +91 -83
- package/.docs/organized/code-examples/with-livekit.md +24 -22
- package/.docs/organized/code-examples/with-mcp.md +18 -12
- package/.docs/organized/code-examples/with-opencode.md +66 -66
- package/.docs/organized/code-examples/with-react-hook-form.md +19 -17
- package/.docs/organized/code-examples/with-react-ink.md +297 -102
- package/.docs/organized/code-examples/with-react-router.md +17 -15
- package/.docs/organized/code-examples/with-resumable-stream.md +15 -14
- package/.docs/organized/code-examples/with-store.md +78 -76
- package/.docs/organized/code-examples/with-tanstack.md +13 -14
- package/.docs/organized/code-examples/with-tap-runtime.md +26 -24
- package/.docs/raw/docs/(docs)/architecture.mdx +94 -42
- package/.docs/raw/docs/(docs)/cli.mdx +1 -2
- package/.docs/raw/docs/(docs)/installation.mdx +1 -1
- package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +5 -1
- package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +15 -15
- package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +14 -1
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +18 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +33 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +45 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +41 -41
- package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +19 -1
- package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +122 -122
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +43 -2
- package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +6 -0
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +4 -6
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +30 -0
- package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +20 -3
- package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +8 -8
- package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +52 -4
- package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +100 -10
- package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +7 -59
- package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -2
- package/.docs/raw/docs/{(docs)/copilots → copilots}/model-context.mdx +34 -26
- package/.docs/raw/docs/{(docs)/copilots → copilots}/motivation.mdx +32 -26
- package/.docs/raw/docs/guides/chain-of-thought.mdx +7 -9
- package/.docs/raw/docs/guides/context-api.mdx +2 -1
- package/.docs/raw/docs/guides/index.mdx +3 -12
- package/.docs/raw/docs/guides/mentions.mdx +4 -4
- package/.docs/raw/docs/guides/slash-commands.mdx +1 -1
- package/.docs/raw/docs/guides/suggestions.mdx +1 -1
- package/.docs/raw/docs/ink/adapters.mdx +23 -1
- package/.docs/raw/docs/ink/hooks.mdx +101 -85
- package/.docs/raw/docs/ink/migration.mdx +1 -1
- package/.docs/raw/docs/ink/primitives.mdx +2 -2
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +1 -1
- package/.docs/raw/docs/integrations/index.mdx +2 -2
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +17 -2
- package/.docs/raw/docs/migrations/toolkit-tools.mdx +232 -0
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +10 -16
- package/.docs/raw/docs/primitives/message.mdx +9 -10
- package/.docs/raw/docs/react-native/hooks.mdx +62 -79
- package/.docs/raw/docs/react-native/migration.mdx +1 -1
- package/.docs/raw/docs/react-native/primitives.mdx +2 -2
- package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +3 -0
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +41 -0
- package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +122 -1
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +46 -4
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +7 -1
- package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +54 -12
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +62 -4
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +30 -7
- package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +108 -38
- package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +2 -2
- package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +14 -1
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +64 -50
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +98 -86
- package/.docs/raw/docs/tools/backend.mdx +144 -0
- package/.docs/raw/docs/tools/defining-tools.mdx +538 -0
- package/.docs/raw/docs/tools/dynamic-tools.mdx +110 -0
- package/.docs/raw/docs/tools/generative-ui.mdx +214 -0
- package/.docs/raw/docs/tools/index.mdx +71 -0
- package/.docs/raw/docs/{guides → tools}/interactables.mdx +1 -1
- package/.docs/raw/docs/{integrations/tools → tools}/mcp.mdx +145 -50
- package/.docs/raw/docs/{guides → tools}/multi-agent.mdx +15 -17
- package/.docs/raw/docs/tools/tool-ui.mdx +967 -0
- package/.docs/raw/docs/{integrations/tools/react-mcp.mdx → tools/user-managed-mcp.mdx} +7 -7
- package/.docs/raw/docs/ui/directive-text.mdx +3 -3
- package/.docs/raw/docs/ui/mcp-config.mdx +4 -4
- package/.docs/raw/docs/ui/mermaid.mdx +16 -9
- package/.docs/raw/docs/ui/part-grouping.mdx +84 -50
- package/.docs/raw/docs/ui/reasoning.mdx +4 -5
- package/.docs/raw/docs/ui/tool-fallback.mdx +16 -0
- package/.docs/raw/docs/ui/tool-group.mdx +5 -6
- package/.docs/raw/docs/utilities/heat-graph.mdx +1 -1
- package/.docs/raw/docs/utilities/react-o11y.mdx +2 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/prepare-docs/code-examples.d.ts.map +1 -1
- package/dist/prepare-docs/code-examples.js.map +1 -1
- package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
- package/dist/prepare-docs/copy-raw.js.map +1 -1
- package/dist/prepare-docs/prepare.js.map +1 -1
- package/dist/stdio.js.map +1 -1
- package/dist/tools/docs.js.map +1 -1
- package/dist/tools/examples.js.map +1 -1
- package/dist/tools/tests/test-setup.js.map +1 -1
- package/dist/utils/mdx.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/package.json +5 -5
- package/.docs/organized/code-examples/with-parent-id-grouping.md +0 -596
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +0 -151
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +0 -230
- package/.docs/raw/docs/guides/generative-ui.mdx +0 -142
- package/.docs/raw/docs/guides/tool-ui.mdx +0 -858
- package/.docs/raw/docs/guides/tools.mdx +0 -736
- /package/.docs/raw/docs/{(docs)/copilots → copilots}/assistant-frame.mdx +0 -0
- /package/.docs/raw/docs/{(docs)/copilots → copilots}/make-assistant-visible.mdx +0 -0
- /package/.docs/raw/docs/{(docs)/copilots → copilots}/use-assistant-instructions.mdx +0 -0
- /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="
|
|
272
|
-
<code className="
|
|
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="
|
|
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.
|
|
339
|
-
"@langchain/react": "^1.0.
|
|
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.
|
|
343
|
-
"next": "^16.2.
|
|
344
|
-
"react": "^19.2.
|
|
345
|
-
"react-dom": "^19.2.
|
|
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.
|
|
352
|
-
"@types/react": "^19.2.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
487
|
+
export const PriceSnapshotToolUI: ToolCallMessagePartComponent<
|
|
468
488
|
PriceSnapshotToolArgs,
|
|
469
489
|
string
|
|
470
|
-
>({
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
<
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
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 {
|
|
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
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
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
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
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-
|
|
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
|
|
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
|
|
587
|
-
<p className="font-bold text-
|
|
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
|
|
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
|
|
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="
|
|
639
|
-
<p className="font-bold
|
|
640
|
-
<p className="
|
|
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="
|
|
648
|
+
<p className="text-muted-foreground text-sm font-medium">Quantity:</p>
|
|
643
649
|
<p className="text-sm">{quantity} shares</p>
|
|
644
|
-
<p className="
|
|
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
|
|
650
|
-
<p className="font-medium
|
|
651
|
-
<p className="font-bold
|
|
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.
|
|
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.
|
|
878
|
-
"next": "^16.2.
|
|
879
|
-
"react": "^19.2.
|
|
880
|
-
"react-dom": "^19.2.
|
|
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.
|
|
887
|
-
"@types/react": "^19.2.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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)
|
|
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
|
|
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.
|
|
557
|
-
"@ai-sdk/react": "^3.0.
|
|
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.
|
|
564
|
+
"ai": "^6.0.197",
|
|
564
565
|
"class-variance-authority": "^0.7.1",
|
|
565
566
|
"clsx": "^2.1.1",
|
|
566
|
-
"livekit-client": "^2.19.
|
|
567
|
-
"livekit-server-sdk": "^2.15.
|
|
568
|
-
"lucide-react": "^1.
|
|
569
|
-
"motion": "^12.
|
|
570
|
-
"next": "^16.2.
|
|
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.
|
|
573
|
-
"react-dom": "^19.2.
|
|
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.
|
|
581
|
-
"@types/react": "^19.2.
|
|
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="
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
395
|
-
"next": "^16.2.
|
|
396
|
-
"react": "^19.2.
|
|
397
|
-
"react-dom": "^19.2.
|
|
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.
|
|
407
|
-
"@types/react": "^19.2.
|
|
406
|
+
"@types/node": "^25.9.2",
|
|
407
|
+
"@types/react": "^19.2.17",
|
|
408
408
|
"@types/react-dom": "^19.2.3",
|
|
409
|
-
"concurrently": "^
|
|
409
|
+
"concurrently": "^10.0.3",
|
|
410
410
|
"postcss": "^8.5.15",
|
|
411
411
|
"tailwindcss": "^4.3.0",
|
|
412
|
-
"tsx": "^4.22.
|
|
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
|
},
|