@assistant-ui/mcp-docs-server 0.1.16 → 0.1.18

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 (95) hide show
  1. package/.docs/organized/code-examples/with-ag-ui.md +149 -155
  2. package/.docs/organized/code-examples/with-ai-sdk-v5.md +98 -103
  3. package/.docs/organized/code-examples/with-assistant-transport.md +134 -222
  4. package/.docs/organized/code-examples/with-cloud.md +127 -134
  5. package/.docs/organized/code-examples/with-custom-thread-list.md +28 -48
  6. package/.docs/organized/code-examples/with-external-store.md +149 -154
  7. package/.docs/organized/code-examples/with-ffmpeg.md +132 -142
  8. package/.docs/organized/code-examples/with-langgraph.md +234 -228
  9. package/.docs/organized/code-examples/with-parent-id-grouping.md +149 -154
  10. package/.docs/organized/code-examples/with-react-hook-form.md +149 -155
  11. package/.docs/organized/code-examples/{store-example.md → with-store.md} +181 -157
  12. package/.docs/organized/code-examples/with-tanstack.md +31 -45
  13. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +36 -0
  14. package/.docs/raw/docs/runtimes/custom/local.mdx +31 -8
  15. package/.docs/raw/docs/ui/Scrollbar.mdx +0 -6
  16. package/dist/constants.d.ts +10 -0
  17. package/dist/constants.d.ts.map +1 -0
  18. package/dist/constants.js +14 -0
  19. package/dist/constants.js.map +1 -0
  20. package/dist/index.d.ts +4 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +33 -1
  23. package/dist/index.js.map +1 -0
  24. package/dist/prepare-docs/code-examples.d.ts +2 -0
  25. package/dist/prepare-docs/code-examples.d.ts.map +1 -0
  26. package/dist/prepare-docs/code-examples.js +129 -0
  27. package/dist/prepare-docs/code-examples.js.map +1 -0
  28. package/dist/prepare-docs/copy-raw.d.ts +2 -0
  29. package/dist/prepare-docs/copy-raw.d.ts.map +1 -0
  30. package/dist/prepare-docs/copy-raw.js +50 -0
  31. package/dist/prepare-docs/copy-raw.js.map +1 -0
  32. package/dist/prepare-docs/prepare.d.ts +2 -0
  33. package/dist/prepare-docs/prepare.d.ts.map +1 -0
  34. package/dist/prepare-docs/prepare.js +18 -195
  35. package/dist/prepare-docs/prepare.js.map +1 -0
  36. package/dist/stdio.d.ts +3 -0
  37. package/dist/stdio.d.ts.map +1 -0
  38. package/dist/stdio.js +4 -5
  39. package/dist/stdio.js.map +1 -0
  40. package/dist/tools/docs.d.ts +23 -0
  41. package/dist/tools/docs.d.ts.map +1 -0
  42. package/dist/tools/docs.js +168 -0
  43. package/dist/tools/docs.js.map +1 -0
  44. package/dist/tools/examples.d.ts +23 -0
  45. package/dist/tools/examples.d.ts.map +1 -0
  46. package/dist/tools/examples.js +95 -0
  47. package/dist/tools/examples.js.map +1 -0
  48. package/dist/tools/tests/test-setup.d.ts +4 -0
  49. package/dist/tools/tests/test-setup.d.ts.map +1 -0
  50. package/dist/tools/tests/test-setup.js +36 -0
  51. package/dist/tools/tests/test-setup.js.map +1 -0
  52. package/dist/utils/logger.d.ts +7 -0
  53. package/dist/utils/logger.d.ts.map +1 -0
  54. package/dist/utils/logger.js +20 -0
  55. package/dist/utils/logger.js.map +1 -0
  56. package/dist/utils/mcp-format.d.ts +7 -0
  57. package/dist/utils/mcp-format.d.ts.map +1 -0
  58. package/dist/utils/mcp-format.js +11 -0
  59. package/dist/utils/mcp-format.js.map +1 -0
  60. package/dist/utils/mdx.d.ts +9 -0
  61. package/dist/utils/mdx.d.ts.map +1 -0
  62. package/dist/utils/mdx.js +27 -0
  63. package/dist/utils/mdx.js.map +1 -0
  64. package/dist/utils/paths.d.ts +8 -0
  65. package/dist/utils/paths.d.ts.map +1 -0
  66. package/dist/utils/paths.js +84 -0
  67. package/dist/utils/paths.js.map +1 -0
  68. package/dist/utils/security.d.ts +2 -0
  69. package/dist/utils/security.d.ts.map +1 -0
  70. package/dist/utils/security.js +43 -0
  71. package/dist/utils/security.js.map +1 -0
  72. package/package.json +37 -19
  73. package/src/constants.ts +22 -0
  74. package/src/index.ts +51 -0
  75. package/src/prepare-docs/code-examples.ts +158 -0
  76. package/src/prepare-docs/copy-raw.ts +55 -0
  77. package/src/prepare-docs/prepare.ts +24 -0
  78. package/src/stdio.ts +7 -0
  79. package/src/tools/docs.ts +207 -0
  80. package/src/tools/examples.ts +107 -0
  81. package/src/tools/tests/docs.test.ts +122 -0
  82. package/src/tools/tests/examples.test.ts +94 -0
  83. package/src/tools/tests/integration.test.ts +46 -0
  84. package/src/tools/tests/json-parsing.test.ts +23 -0
  85. package/src/tools/tests/mcp-protocol.test.ts +133 -0
  86. package/src/tools/tests/path-traversal.test.ts +81 -0
  87. package/src/tools/tests/test-setup.ts +40 -0
  88. package/src/utils/logger.ts +20 -0
  89. package/src/utils/mcp-format.ts +12 -0
  90. package/src/utils/mdx.ts +39 -0
  91. package/src/utils/paths.ts +114 -0
  92. package/src/utils/security.ts +52 -0
  93. package/src/utils/tests/security.test.ts +119 -0
  94. package/dist/chunk-M2RKUM66.js +0 -38
  95. package/dist/chunk-NVNFQ5ZO.js +0 -423
@@ -36,43 +36,41 @@ export async function POST(req: Request) {
36
36
  @custom-variant dark (&:is(.dark *));
37
37
 
38
38
  @theme inline {
39
- --color-background: var(--background);
40
- --color-foreground: var(--foreground);
41
- --font-sans: var(--font-geist-sans);
42
- --font-mono: var(--font-geist-mono);
43
- --color-sidebar-ring: var(--sidebar-ring);
44
- --color-sidebar-border: var(--sidebar-border);
45
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
46
- --color-sidebar-accent: var(--sidebar-accent);
47
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
48
- --color-sidebar-primary: var(--sidebar-primary);
49
- --color-sidebar-foreground: var(--sidebar-foreground);
50
- --color-sidebar: var(--sidebar);
51
- --color-chart-5: var(--chart-5);
52
- --color-chart-4: var(--chart-4);
53
- --color-chart-3: var(--chart-3);
54
- --color-chart-2: var(--chart-2);
55
- --color-chart-1: var(--chart-1);
56
- --color-ring: var(--ring);
57
- --color-input: var(--input);
58
- --color-border: var(--border);
59
- --color-destructive: var(--destructive);
60
- --color-accent-foreground: var(--accent-foreground);
61
- --color-accent: var(--accent);
62
- --color-muted-foreground: var(--muted-foreground);
63
- --color-muted: var(--muted);
64
- --color-secondary-foreground: var(--secondary-foreground);
65
- --color-secondary: var(--secondary);
66
- --color-primary-foreground: var(--primary-foreground);
67
- --color-primary: var(--primary);
68
- --color-popover-foreground: var(--popover-foreground);
69
- --color-popover: var(--popover);
70
- --color-card-foreground: var(--card-foreground);
71
- --color-card: var(--card);
72
39
  --radius-sm: calc(var(--radius) - 4px);
73
40
  --radius-md: calc(var(--radius) - 2px);
74
41
  --radius-lg: var(--radius);
75
42
  --radius-xl: calc(var(--radius) + 4px);
43
+ --color-background: var(--background);
44
+ --color-foreground: var(--foreground);
45
+ --color-card: var(--card);
46
+ --color-card-foreground: var(--card-foreground);
47
+ --color-popover: var(--popover);
48
+ --color-popover-foreground: var(--popover-foreground);
49
+ --color-primary: var(--primary);
50
+ --color-primary-foreground: var(--primary-foreground);
51
+ --color-secondary: var(--secondary);
52
+ --color-secondary-foreground: var(--secondary-foreground);
53
+ --color-muted: var(--muted);
54
+ --color-muted-foreground: var(--muted-foreground);
55
+ --color-accent: var(--accent);
56
+ --color-accent-foreground: var(--accent-foreground);
57
+ --color-destructive: var(--destructive);
58
+ --color-border: var(--border);
59
+ --color-input: var(--input);
60
+ --color-ring: var(--ring);
61
+ --color-chart-1: var(--chart-1);
62
+ --color-chart-2: var(--chart-2);
63
+ --color-chart-3: var(--chart-3);
64
+ --color-chart-4: var(--chart-4);
65
+ --color-chart-5: var(--chart-5);
66
+ --color-sidebar: var(--sidebar);
67
+ --color-sidebar-foreground: var(--sidebar-foreground);
68
+ --color-sidebar-primary: var(--sidebar-primary);
69
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
70
+ --color-sidebar-accent: var(--sidebar-accent);
71
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
72
+ --color-sidebar-border: var(--sidebar-border);
73
+ --color-sidebar-ring: var(--sidebar-ring);
76
74
  }
77
75
 
78
76
  :root {
@@ -256,7 +254,7 @@ export default function Home() {
256
254
  "rsc": true,
257
255
  "tsx": true,
258
256
  "tailwind": {
259
- "config": "tailwind.config.ts",
257
+ "config": "",
260
258
  "css": "app/globals.css",
261
259
  "baseColor": "zinc",
262
260
  "cssVariables": true,
@@ -910,7 +908,7 @@ const ThreadScrollToBottom: FC = () => {
910
908
  <TooltipIconButton
911
909
  tooltip="Scroll to bottom"
912
910
  variant="outline"
913
- className="aui-thread-scroll-to-bottom -top-12 absolute z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
911
+ className="aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
914
912
  >
915
913
  <ArrowDownIcon />
916
914
  </TooltipIconButton>
@@ -1074,7 +1072,7 @@ const AssistantActionBar: FC = () => {
1074
1072
  hideWhenRunning
1075
1073
  autohide="not-last"
1076
1074
  autohideFloat="single-branch"
1077
- className="aui-assistant-action-bar-root -ml-1 col-start-3 row-start-2 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
1075
+ className="aui-assistant-action-bar-root col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
1078
1076
  >
1079
1077
  <ActionBarPrimitive.Copy asChild>
1080
1078
  <TooltipIconButton tooltip="Copy">
@@ -1112,12 +1110,12 @@ const UserMessage: FC = () => {
1112
1110
  <div className="aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground">
1113
1111
  <MessagePrimitive.Parts />
1114
1112
  </div>
1115
- <div className="aui-user-action-bar-wrapper -translate-x-full -translate-y-1/2 absolute top-1/2 left-0 pr-2">
1113
+ <div className="aui-user-action-bar-wrapper absolute top-1/2 left-0 -translate-x-full -translate-y-1/2 pr-2">
1116
1114
  <UserActionBar />
1117
1115
  </div>
1118
1116
  </div>
1119
1117
 
1120
- <BranchPicker className="aui-user-branch-picker -mr-1 col-span-full col-start-1 row-start-3 justify-end" />
1118
+ <BranchPicker className="aui-user-branch-picker col-span-full col-start-1 row-start-3 -mr-1 justify-end" />
1121
1119
  </MessagePrimitive.Root>
1122
1120
  );
1123
1121
  };
@@ -1169,7 +1167,7 @@ const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
1169
1167
  <BranchPickerPrimitive.Root
1170
1168
  hideWhenSingleBranch
1171
1169
  className={cn(
1172
- "aui-branch-picker-root -ml-2 mr-2 inline-flex items-center text-muted-foreground text-xs",
1170
+ "aui-branch-picker-root mr-2 -ml-2 inline-flex items-center text-muted-foreground text-xs",
1173
1171
  className,
1174
1172
  )}
1175
1173
  {...rest}
@@ -1350,47 +1348,50 @@ import * as AvatarPrimitive from "@radix-ui/react-avatar";
1350
1348
 
1351
1349
  import { cn } from "@/lib/utils";
1352
1350
 
1353
- const Avatar = React.forwardRef<
1354
- React.ElementRef<typeof AvatarPrimitive.Root>,
1355
- React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
1356
- >(({ className, ...props }, ref) => (
1357
- <AvatarPrimitive.Root
1358
- ref={ref}
1359
- className={cn(
1360
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
1361
- className,
1362
- )}
1363
- {...props}
1364
- />
1365
- ));
1366
- Avatar.displayName = AvatarPrimitive.Root.displayName;
1367
-
1368
- const AvatarImage = React.forwardRef<
1369
- React.ElementRef<typeof AvatarPrimitive.Image>,
1370
- React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
1371
- >(({ className, ...props }, ref) => (
1372
- <AvatarPrimitive.Image
1373
- ref={ref}
1374
- className={cn("aspect-square h-full w-full", className)}
1375
- {...props}
1376
- />
1377
- ));
1378
- AvatarImage.displayName = AvatarPrimitive.Image.displayName;
1379
-
1380
- const AvatarFallback = React.forwardRef<
1381
- React.ElementRef<typeof AvatarPrimitive.Fallback>,
1382
- React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
1383
- >(({ className, ...props }, ref) => (
1384
- <AvatarPrimitive.Fallback
1385
- ref={ref}
1386
- className={cn(
1387
- "flex h-full w-full items-center justify-center rounded-full bg-muted",
1388
- className,
1389
- )}
1390
- {...props}
1391
- />
1392
- ));
1393
- AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
1351
+ function Avatar({
1352
+ className,
1353
+ ...props
1354
+ }: React.ComponentProps<typeof AvatarPrimitive.Root>) {
1355
+ return (
1356
+ <AvatarPrimitive.Root
1357
+ data-slot="avatar"
1358
+ className={cn(
1359
+ "relative flex size-8 shrink-0 overflow-hidden rounded-full",
1360
+ className,
1361
+ )}
1362
+ {...props}
1363
+ />
1364
+ );
1365
+ }
1366
+
1367
+ function AvatarImage({
1368
+ className,
1369
+ ...props
1370
+ }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
1371
+ return (
1372
+ <AvatarPrimitive.Image
1373
+ data-slot="avatar-image"
1374
+ className={cn("aspect-square size-full", className)}
1375
+ {...props}
1376
+ />
1377
+ );
1378
+ }
1379
+
1380
+ function AvatarFallback({
1381
+ className,
1382
+ ...props
1383
+ }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
1384
+ return (
1385
+ <AvatarPrimitive.Fallback
1386
+ data-slot="avatar-fallback"
1387
+ className={cn(
1388
+ "flex size-full items-center justify-center rounded-full bg-muted",
1389
+ className,
1390
+ )}
1391
+ {...props}
1392
+ />
1393
+ );
1394
+ }
1394
1395
 
1395
1396
  export { Avatar, AvatarImage, AvatarFallback };
1396
1397
 
@@ -1410,14 +1411,13 @@ const buttonVariants = cva(
1410
1411
  {
1411
1412
  variants: {
1412
1413
  variant: {
1413
- default:
1414
- "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
1414
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
1415
1415
  destructive:
1416
- "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
1416
+ "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
1417
1417
  outline:
1418
1418
  "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
1419
1419
  secondary:
1420
- "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
1420
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
1421
1421
  ghost:
1422
1422
  "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
1423
1423
  link: "text-primary underline-offset-4 hover:underline",
@@ -1427,6 +1427,8 @@ const buttonVariants = cva(
1427
1427
  sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
1428
1428
  lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
1429
1429
  icon: "size-9",
1430
+ "icon-sm": "size-8",
1431
+ "icon-lg": "size-10",
1430
1432
  },
1431
1433
  },
1432
1434
  defaultVariants: {
@@ -1438,8 +1440,8 @@ const buttonVariants = cva(
1438
1440
 
1439
1441
  function Button({
1440
1442
  className,
1441
- variant,
1442
- size,
1443
+ variant = "default",
1444
+ size = "default",
1443
1445
  asChild = false,
1444
1446
  ...props
1445
1447
  }: React.ComponentProps<"button"> &
@@ -1451,6 +1453,8 @@ function Button({
1451
1453
  return (
1452
1454
  <Comp
1453
1455
  data-slot="button"
1456
+ data-variant={variant}
1457
+ data-size={size}
1454
1458
  className={cn(buttonVariants({ variant, size, className }))}
1455
1459
  {...props}
1456
1460
  />
@@ -1504,7 +1508,7 @@ function DialogOverlay({
1504
1508
  <DialogPrimitive.Overlay
1505
1509
  data-slot="dialog-overlay"
1506
1510
  className={cn(
1507
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 data-[state=closed]:animate-out data-[state=open]:animate-in",
1511
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in",
1508
1512
  className,
1509
1513
  )}
1510
1514
  {...props}
@@ -1515,24 +1519,32 @@ function DialogOverlay({
1515
1519
  function DialogContent({
1516
1520
  className,
1517
1521
  children,
1522
+ showCloseButton = true,
1518
1523
  ...props
1519
- }: React.ComponentProps<typeof DialogPrimitive.Content>) {
1524
+ }: React.ComponentProps<typeof DialogPrimitive.Content> & {
1525
+ showCloseButton?: boolean;
1526
+ }) {
1520
1527
  return (
1521
1528
  <DialogPortal data-slot="dialog-portal">
1522
1529
  <DialogOverlay />
1523
1530
  <DialogPrimitive.Content
1524
1531
  data-slot="dialog-content"
1525
1532
  className={cn(
1526
- "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg",
1533
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg",
1527
1534
  className,
1528
1535
  )}
1529
1536
  {...props}
1530
1537
  >
1531
1538
  {children}
1532
- <DialogPrimitive.Close className="absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0">
1533
- <XIcon />
1534
- <span className="sr-only">Close</span>
1535
- </DialogPrimitive.Close>
1539
+ {showCloseButton && (
1540
+ <DialogPrimitive.Close
1541
+ data-slot="dialog-close"
1542
+ className="absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0"
1543
+ >
1544
+ <XIcon />
1545
+ <span className="sr-only">Close</span>
1546
+ </DialogPrimitive.Close>
1547
+ )}
1536
1548
  </DialogPrimitive.Content>
1537
1549
  </DialogPortal>
1538
1550
  );
@@ -1672,13 +1684,13 @@ function TooltipContent({
1672
1684
  data-slot="tooltip-content"
1673
1685
  sideOffset={sideOffset}
1674
1686
  className={cn(
1675
- "fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-[--radix-tooltip-content-transform-origin] animate-in text-balance rounded-md bg-primary px-3 py-1.5 text-primary-foreground text-xs data-[state=closed]:animate-out",
1687
+ "fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in text-balance rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=closed]:animate-out",
1676
1688
  className,
1677
1689
  )}
1678
1690
  {...props}
1679
1691
  >
1680
1692
  {children}
1681
- <TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary" />
1693
+ <TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" />
1682
1694
  </TooltipPrimitive.Content>
1683
1695
  </TooltipPrimitive.Portal>
1684
1696
  );
@@ -1718,15 +1730,16 @@ export default nextConfig;
1718
1730
  ```json
1719
1731
  {
1720
1732
  "name": "with-cloud",
1721
- "version": "0.1.0",
1733
+ "version": "0.0.0",
1722
1734
  "private": true,
1735
+ "type": "module",
1723
1736
  "scripts": {
1724
- "dev": "next dev --turbo",
1737
+ "dev": "next dev",
1725
1738
  "build": "next build",
1726
1739
  "start": "next start"
1727
1740
  },
1728
1741
  "dependencies": {
1729
- "@ai-sdk/openai": "^2.0.77",
1742
+ "@ai-sdk/openai": "^2.0.88",
1730
1743
  "@assistant-ui/react": "workspace:*",
1731
1744
  "@assistant-ui/react-ai-sdk": "workspace:*",
1732
1745
  "@assistant-ui/react-markdown": "workspace:*",
@@ -1734,29 +1747,27 @@ export default nextConfig;
1734
1747
  "@radix-ui/react-dialog": "^1.1.15",
1735
1748
  "@radix-ui/react-slot": "^1.2.4",
1736
1749
  "@radix-ui/react-tooltip": "^1.2.8",
1737
- "ai": "^5.0.107",
1750
+ "ai": "^5.0.116",
1738
1751
  "class-variance-authority": "^0.7.1",
1739
1752
  "clsx": "^2.1.1",
1740
- "jsonwebtoken": "^9.0.3",
1741
- "lucide-react": "^0.556.0",
1742
- "nanoid": "5.1.6",
1743
- "next": "16.0.7",
1744
- "react": "19.2.1",
1745
- "react-dom": "19.2.1",
1753
+ "lucide-react": "^0.562.0",
1754
+ "next": "16.1.0",
1755
+ "react": "19.2.3",
1756
+ "react-dom": "19.2.3",
1746
1757
  "remark-gfm": "^4.0.1",
1747
1758
  "tailwind-merge": "^3.4.0",
1748
- "tw-animate-css": "^1.4.0",
1749
1759
  "zustand": "^5.0.9"
1750
1760
  },
1751
1761
  "devDependencies": {
1752
1762
  "@assistant-ui/x-buildutils": "workspace:*",
1753
- "@types/jsonwebtoken": "^9.0.10",
1754
- "@types/node": "^24",
1755
- "@types/react": "^19",
1756
- "@types/react-dom": "^19",
1757
- "postcss": "^8",
1758
- "tailwindcss": "^4.1.17",
1759
- "typescript": "^5"
1763
+ "@tailwindcss/postcss": "^4.1.18",
1764
+ "@types/node": "^25.0.3",
1765
+ "@types/react": "^19.2.7",
1766
+ "@types/react-dom": "^19.2.3",
1767
+ "postcss": "^8.5.6",
1768
+ "tailwindcss": "^4.1.18",
1769
+ "tw-animate-css": "^1.4.0",
1770
+ "typescript": "^5.9.3"
1760
1771
  }
1761
1772
  }
1762
1773
 
@@ -1766,29 +1777,11 @@ export default nextConfig;
1766
1777
 
1767
1778
  ```json
1768
1779
  {
1769
- "extends": "@assistant-ui/x-buildutils/ts/base",
1780
+ "extends": "@assistant-ui/x-buildutils/ts/next",
1770
1781
  "compilerOptions": {
1771
- "target": "ES6",
1772
- "module": "ESNext",
1773
- "incremental": true,
1774
- "plugins": [
1775
- {
1776
- "name": "next"
1777
- }
1778
- ],
1779
- "allowJs": true,
1780
- "strictNullChecks": true,
1781
- "jsx": "preserve",
1782
- "paths": {
1783
- "@/*": ["./*"],
1784
- "@assistant-ui/*": ["../../packages/*/src"],
1785
- "@assistant-ui/react/*": ["../../packages/react/src/*"],
1786
- "@assistant-ui/tap/*": ["../../packages/tap/src/*"],
1787
- "assistant-stream": ["../../packages/assistant-stream/src"],
1788
- "assistant-stream/*": ["../../packages/assistant-stream/src/*"]
1789
- }
1782
+ "paths": { "@/*": ["./*"] }
1790
1783
  },
1791
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1784
+ "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1792
1785
  "exclude": ["node_modules"]
1793
1786
  }
1794
1787
 
@@ -968,7 +968,7 @@ const ThreadScrollToBottom: FC = () => {
968
968
  <TooltipIconButton
969
969
  tooltip="Scroll to bottom"
970
970
  variant="outline"
971
- className="aui-thread-scroll-to-bottom -top-12 absolute z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
971
+ className="aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
972
972
  >
973
973
  <ArrowDownIcon />
974
974
  </TooltipIconButton>
@@ -1132,7 +1132,7 @@ const AssistantActionBar: FC = () => {
1132
1132
  hideWhenRunning
1133
1133
  autohide="not-last"
1134
1134
  autohideFloat="single-branch"
1135
- className="aui-assistant-action-bar-root -ml-1 col-start-3 row-start-2 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
1135
+ className="aui-assistant-action-bar-root col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
1136
1136
  >
1137
1137
  <ActionBarPrimitive.Copy asChild>
1138
1138
  <TooltipIconButton tooltip="Copy">
@@ -1170,12 +1170,12 @@ const UserMessage: FC = () => {
1170
1170
  <div className="aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground">
1171
1171
  <MessagePrimitive.Parts />
1172
1172
  </div>
1173
- <div className="aui-user-action-bar-wrapper -translate-x-full -translate-y-1/2 absolute top-1/2 left-0 pr-2">
1173
+ <div className="aui-user-action-bar-wrapper absolute top-1/2 left-0 -translate-x-full -translate-y-1/2 pr-2">
1174
1174
  <UserActionBar />
1175
1175
  </div>
1176
1176
  </div>
1177
1177
 
1178
- <BranchPicker className="aui-user-branch-picker -mr-1 col-span-full col-start-1 row-start-3 justify-end" />
1178
+ <BranchPicker className="aui-user-branch-picker col-span-full col-start-1 row-start-3 -mr-1 justify-end" />
1179
1179
  </MessagePrimitive.Root>
1180
1180
  );
1181
1181
  };
@@ -1227,7 +1227,7 @@ const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
1227
1227
  <BranchPickerPrimitive.Root
1228
1228
  hideWhenSingleBranch
1229
1229
  className={cn(
1230
- "aui-branch-picker-root -ml-2 mr-2 inline-flex items-center text-muted-foreground text-xs",
1230
+ "aui-branch-picker-root mr-2 -ml-2 inline-flex items-center text-muted-foreground text-xs",
1231
1231
  className,
1232
1232
  )}
1233
1233
  {...rest}
@@ -1773,49 +1773,47 @@ export default nextConfig;
1773
1773
 
1774
1774
  ```json
1775
1775
  {
1776
- "name": "example-with-custom-thread-list",
1777
- "private": true,
1776
+ "name": "with-custom-thread-list",
1778
1777
  "version": "0.0.0",
1778
+ "private": true,
1779
1779
  "type": "module",
1780
+ "scripts": {
1781
+ "dev": "next dev",
1782
+ "build": "next build",
1783
+ "start": "next start"
1784
+ },
1780
1785
  "dependencies": {
1781
- "@ai-sdk/openai": "^2.0.77",
1782
- "@ai-sdk/react": "^2.0.107",
1783
- "@assistant-ui/react": "workspace:^",
1786
+ "@ai-sdk/openai": "^2.0.88",
1787
+ "@assistant-ui/react": "workspace:*",
1784
1788
  "@assistant-ui/react-ai-sdk": "workspace:*",
1785
- "@assistant-ui/react-markdown": "workspace:^",
1789
+ "@assistant-ui/react-markdown": "workspace:*",
1786
1790
  "@radix-ui/react-avatar": "^1.1.11",
1787
1791
  "@radix-ui/react-dialog": "^1.1.15",
1788
1792
  "@radix-ui/react-slot": "^1.2.4",
1789
1793
  "@radix-ui/react-tooltip": "^1.2.8",
1790
- "@tailwindcss/postcss": "^4.1.17",
1791
- "ai": "^5.0.107",
1794
+ "ai": "^5.0.116",
1792
1795
  "assistant-stream": "workspace:*",
1793
1796
  "class-variance-authority": "^0.7.1",
1794
1797
  "clsx": "^2.1.1",
1795
- "lucide-react": "^0.556.0",
1796
- "next": "16.0.7",
1797
- "postcss": "^8.5.6",
1798
- "react": "19.2.1",
1799
- "react-dom": "19.2.1",
1798
+ "lucide-react": "^0.562.0",
1799
+ "next": "16.1.0",
1800
+ "react": "19.2.3",
1801
+ "react-dom": "19.2.3",
1800
1802
  "remark-gfm": "^4.0.1",
1801
1803
  "tailwind-merge": "^3.4.0",
1802
- "tailwindcss": "^4.1.17",
1803
- "zod": "^4.1.13",
1804
+ "zod": "^4.2.1",
1804
1805
  "zustand": "^5.0.9"
1805
1806
  },
1806
1807
  "devDependencies": {
1807
1808
  "@assistant-ui/x-buildutils": "workspace:*",
1808
- "@types/node": "^24.10.1",
1809
+ "@tailwindcss/postcss": "^4.1.18",
1810
+ "@types/node": "^25.0.3",
1809
1811
  "@types/react": "^19.2.7",
1810
1812
  "@types/react-dom": "^19.2.3",
1813
+ "postcss": "^8.5.6",
1814
+ "tailwindcss": "^4.1.18",
1811
1815
  "tw-animate-css": "^1.4.0",
1812
1816
  "typescript": "^5.9.3"
1813
- },
1814
- "scripts": {
1815
- "dev": "next dev",
1816
- "build": "next build",
1817
- "start": "next start",
1818
- "lint": "eslint ."
1819
1817
  }
1820
1818
  }
1821
1819
 
@@ -1825,29 +1823,11 @@ export default nextConfig;
1825
1823
 
1826
1824
  ```json
1827
1825
  {
1828
- "extends": "@assistant-ui/x-buildutils/ts/base",
1826
+ "extends": "@assistant-ui/x-buildutils/ts/next",
1829
1827
  "compilerOptions": {
1830
- "target": "ES6",
1831
- "module": "ESNext",
1832
- "incremental": true,
1833
- "plugins": [
1834
- {
1835
- "name": "next"
1836
- }
1837
- ],
1838
- "allowJs": true,
1839
- "strictNullChecks": true,
1840
- "jsx": "preserve",
1841
- "paths": {
1842
- "@/*": ["./*"],
1843
- "@assistant-ui/*": ["../../packages/*/src"],
1844
- "@assistant-ui/react/*": ["../../packages/react/src/*"],
1845
- "@assistant-ui/tap/*": ["../../packages/tap/src/*"],
1846
- "assistant-stream": ["../../packages/assistant-stream/src"],
1847
- "assistant-stream/*": ["../../packages/assistant-stream/src/*"]
1848
- }
1828
+ "paths": { "@/*": ["./*"] }
1849
1829
  },
1850
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1830
+ "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1851
1831
  "exclude": ["node_modules"]
1852
1832
  }
1853
1833