@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
@@ -82,10 +82,10 @@ export default function Home() {
82
82
  <div className="min-h-screen bg-linear-to-br from-gray-50 to-gray-100 p-8 dark:from-gray-900 dark:to-gray-800">
83
83
  <div className="mx-auto max-w-4xl">
84
84
  <div className="mb-8">
85
- <h1 className="mb-2 font-bold text-4xl text-gray-900 dark:text-white">
85
+ <h1 className="mb-2 text-4xl font-bold text-gray-900 dark:text-white">
86
86
  @assistant-ui/store Example
87
87
  </h1>
88
- <p className="text-gray-600 text-lg dark:text-gray-400">
88
+ <p className="text-lg text-gray-600 dark:text-gray-400">
89
89
  Demonstrating tap-based state management with scopes, lists, and
90
90
  providers
91
91
  </p>
@@ -134,15 +134,15 @@ const Foo = () => {
134
134
  <div className="rounded-lg border border-gray-200 bg-white p-6 shadow-md transition-shadow hover:shadow-lg dark:border-gray-700 dark:bg-gray-800">
135
135
  <div className="space-y-3">
136
136
  <div className="flex items-center gap-2">
137
- <span className="font-semibold text-gray-500 text-sm dark:text-gray-400">
137
+ <span className="text-sm font-semibold text-gray-500 dark:text-gray-400">
138
138
  ID:
139
139
  </span>
140
- <span className="font-mono text-gray-900 text-sm dark:text-white">
140
+ <span className="font-mono text-sm text-gray-900 dark:text-white">
141
141
  {fooId}
142
142
  </span>
143
143
  </div>
144
144
  <div className="flex items-center gap-2">
145
- <span className="font-semibold text-gray-500 text-sm dark:text-gray-400">
145
+ <span className="text-sm font-semibold text-gray-500 dark:text-gray-400">
146
146
  Value:
147
147
  </span>
148
148
  <span className="text-gray-900 dark:text-white">{fooBar}</span>
@@ -151,14 +151,14 @@ const Foo = () => {
151
151
  <button
152
152
  type="button"
153
153
  onClick={handleUpdate}
154
- className="flex-1 rounded-md bg-blue-600 px-4 py-2 font-medium text-white transition-colors hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"
154
+ className="flex-1 rounded-md bg-blue-600 px-4 py-2 font-medium text-white transition-colors hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 focus:outline-none dark:focus:ring-offset-gray-800"
155
155
  >
156
156
  Update
157
157
  </button>
158
158
  <button
159
159
  type="button"
160
160
  onClick={() => aui.foo().remove()}
161
- className="rounded-md bg-red-600 px-4 py-2 font-medium text-white transition-colors hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"
161
+ className="rounded-md bg-red-600 px-4 py-2 font-medium text-white transition-colors hover:bg-red-700 focus:ring-2 focus:ring-red-500 focus:ring-offset-2 focus:outline-none dark:focus:ring-offset-gray-800"
162
162
  >
163
163
  Delete
164
164
  </button>
@@ -183,7 +183,7 @@ const AddFooButton = () => {
183
183
  <button
184
184
  type="button"
185
185
  onClick={() => aui.fooList().addFoo()}
186
- className="rounded-md bg-green-600 px-4 py-2 font-medium text-white transition-colors hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"
186
+ className="rounded-md bg-green-600 px-4 py-2 font-medium text-white transition-colors hover:bg-green-700 focus:ring-2 focus:ring-green-500 focus:ring-offset-2 focus:outline-none dark:focus:ring-offset-gray-800"
187
187
  >
188
188
  Add New
189
189
  </button>
@@ -224,7 +224,7 @@ const EventLog = () => {
224
224
  </h3>
225
225
  <div className="max-h-48 space-y-2 overflow-y-auto">
226
226
  {logs.length === 0 ? (
227
- <p className="text-gray-500 text-sm dark:text-gray-400">
227
+ <p className="text-sm text-gray-500 dark:text-gray-400">
228
228
  No events yet. Try updating or deleting a foo.
229
229
  </p>
230
230
  ) : (
@@ -266,12 +266,12 @@ export const ExampleApp = () => {
266
266
  <div className="space-y-6">
267
267
  <div className="rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
268
268
  <div className="flex items-center justify-between">
269
- <h2 className="font-semibold text-gray-900 text-xl dark:text-white">
269
+ <h2 className="text-xl font-semibold text-gray-900 dark:text-white">
270
270
  Foo List <FooListLength />
271
271
  </h2>
272
272
  <AddFooButton />
273
273
  </div>
274
- <p className="mt-1 text-gray-600 text-sm dark:text-gray-400">
274
+ <p className="mt-1 text-sm text-gray-600 dark:text-gray-400">
275
275
  Each item is rendered in its own FooProvider with scoped access
276
276
  </p>
277
277
  </div>
@@ -339,80 +339,80 @@ declare module "@assistant-ui/store" {
339
339
 
340
340
  import "./foo-scope";
341
341
 
342
- import { type ReactNode, useMemo } from "react";
343
- import { resource, tapMemo, tapState } from "@assistant-ui/tap";
342
+ import { type ReactNode, useMemo, useState } from "react";
343
+ import { resource } from "@assistant-ui/tap";
344
344
  import {
345
345
  useAui,
346
346
  useAuiState,
347
347
  AuiProvider,
348
- tapClientList,
348
+ useClientList,
349
349
  Derived,
350
- tapAssistantEmit,
350
+ useAssistantEmit,
351
351
  RenderChildrenWithAccessor,
352
352
  type ClientOutput,
353
353
  } from "@assistant-ui/store";
354
354
 
355
355
  type FooData = { id: string; bar: string };
356
356
 
357
- export const FooItemResource = resource(
358
- ({
359
- getInitialData,
360
- remove,
361
- }: tapClientList.ResourceProps<FooData>): ClientOutput<"foo"> => {
362
- const emit = tapAssistantEmit();
357
+ export const FooItemResource = resource(function FooItemResource({
358
+ getInitialData,
359
+ remove,
360
+ }: useClientList.ResourceProps<FooData>): ClientOutput<"foo"> {
361
+ const emit = useAssistantEmit();
363
362
 
364
- const [state, setState] = tapState<FooData>(getInitialData);
363
+ const [state, setState] = useState<FooData>(getInitialData);
365
364
 
366
- const updateBar = (newBar: string) => {
367
- setState({ ...state, bar: newBar });
368
- emit("foo.updated", { id: state.id, newValue: newBar });
369
- };
365
+ const updateBar = (newBar: string) => {
366
+ setState({ ...state, bar: newBar });
367
+ emit("foo.updated", { id: state.id, newValue: newBar });
368
+ };
370
369
 
371
- const handleRemove = () => {
372
- emit("foo.removed", { id: state.id });
373
- remove();
374
- };
370
+ const handleRemove = () => {
371
+ emit("foo.removed", { id: state.id });
372
+ remove();
373
+ };
375
374
 
376
- return {
377
- getState: () => state,
378
- updateBar,
379
- remove: handleRemove,
380
- };
381
- },
382
- );
375
+ return {
376
+ getState: () => state,
377
+ updateBar,
378
+ remove: handleRemove,
379
+ };
380
+ });
383
381
 
384
382
  let counter = 3;
385
- export const FooListResource = resource(
386
- ({ initialValues }: { initialValues: boolean }): ClientOutput<"fooList"> => {
387
- const emit = tapAssistantEmit();
388
-
389
- const foos = tapClientList({
390
- initialValues: initialValues
391
- ? [
392
- { id: "foo-1", bar: "First Foo" },
393
- { id: "foo-2", bar: "Second Foo" },
394
- { id: "foo-3", bar: "Third Foo" },
395
- ]
396
- : [],
397
- getKey: (foo) => foo.id,
398
- resource: FooItemResource,
399
- });
383
+ export const FooListResource = resource(function FooListResource({
384
+ initialValues,
385
+ }: {
386
+ initialValues: boolean;
387
+ }): ClientOutput<"fooList"> {
388
+ const emit = useAssistantEmit();
389
+
390
+ const foos = useClientList({
391
+ initialValues: initialValues
392
+ ? [
393
+ { id: "foo-1", bar: "First Foo" },
394
+ { id: "foo-2", bar: "Second Foo" },
395
+ { id: "foo-3", bar: "Third Foo" },
396
+ ]
397
+ : [],
398
+ getKey: (foo) => foo.id,
399
+ resource: FooItemResource,
400
+ });
400
401
 
401
- const addFoo = () => {
402
- const id = `foo-${++counter}`;
403
- foos.add({ id: id, bar: `New Foo` });
404
- emit("fooList.added", { id: id });
405
- };
402
+ const addFoo = () => {
403
+ const id = `foo-${++counter}`;
404
+ foos.add({ id: id, bar: `New Foo` });
405
+ emit("fooList.added", { id: id });
406
+ };
406
407
 
407
- const state = tapMemo(() => ({ foos: foos.state }), [foos.state]);
408
+ const state = useMemo(() => ({ foos: foos.state }), [foos.state]);
408
409
 
409
- return {
410
- getState: () => state,
411
- foo: foos.get,
412
- addFoo,
413
- };
414
- },
415
- );
410
+ return {
411
+ getState: () => state,
412
+ foo: foos.get,
413
+ addFoo,
414
+ };
415
+ });
416
416
 
417
417
  const FooProvider = ({
418
418
  index,
@@ -465,13 +465,14 @@ export const FooList = ({
465
465
  ## next.config.ts
466
466
 
467
467
  ```typescript
468
+ import { withAui } from "@assistant-ui/next";
468
469
  import type { NextConfig } from "next";
469
470
 
470
471
  const nextConfig: NextConfig = {
471
472
  /* config options here */
472
473
  };
473
474
 
474
- export default nextConfig;
475
+ export default withAui(nextConfig);
475
476
 
476
477
  ```
477
478
 
@@ -491,15 +492,16 @@ export default nextConfig;
491
492
  "dependencies": {
492
493
  "@assistant-ui/store": "workspace:*",
493
494
  "@assistant-ui/tap": "workspace:*",
494
- "next": "^16.2.6",
495
- "react": "^19.2.6",
496
- "react-dom": "^19.2.6"
495
+ "next": "^16.2.7",
496
+ "react": "^19.2.7",
497
+ "react-dom": "^19.2.7"
497
498
  },
498
499
  "devDependencies": {
500
+ "@assistant-ui/next": "workspace:*",
499
501
  "@assistant-ui/x-buildutils": "workspace:*",
500
502
  "@tailwindcss/postcss": "^4.3.0",
501
- "@types/node": "^25.9.1",
502
- "@types/react": "^19.2.15",
503
+ "@types/node": "^25.9.2",
504
+ "@types/react": "^19.2.17",
503
505
  "@types/react-dom": "^19.2.3",
504
506
  "postcss": "^8.5.15",
505
507
  "tailwindcss": "^4.3.0",
@@ -520,8 +522,8 @@ This is a Next.js application demonstrating the `@assistant-ui/store` package.
520
522
  ## Features Demonstrated
521
523
 
522
524
  - **Client Registry**: Module augmentation for type-safe client definitions
523
- - **tapClientList**: Managing lists with index and key lookup
524
- - **tapAssistantEmit**: Emitting and subscribing to scoped events
525
+ - **useClientList**: Managing lists with index and key lookup
526
+ - **useAssistantEmit**: Emitting and subscribing to scoped events
525
527
  - **Derived**: Creating derived client scopes from parent resources
526
528
  - **Provider Pattern**: Scoped access to list items via FooProvider
527
529
  - **Component Composition**: Render props pattern with components prop
@@ -585,10 +587,10 @@ declare module "@assistant-ui/store" {
585
587
 
586
588
  ```typescript
587
589
  const FooListResource = resource(
588
- ({ initialValues }): ClientOutput<"fooList"> => {
589
- const emit = tapAssistantEmit();
590
+ function FooListResource({ initialValues }): ClientOutput<"fooList"> {
591
+ const emit = useAssistantEmit();
590
592
 
591
- const foos = tapClientList({
593
+ const foos = useClientList({
592
594
  initialValues: initialValues ? [/* ... */] : [],
593
595
  getKey: (foo) => foo.id,
594
596
  resource: FooItemResource,
@@ -65,15 +65,15 @@
65
65
  "@assistant-ui/react": "workspace:*",
66
66
  "@assistant-ui/react-markdown": "workspace:*",
67
67
  "@tailwindcss/vite": "^4.3.0",
68
- "@tanstack/react-router": "^1.170.6",
69
- "@tanstack/react-start": "^1.168.9",
68
+ "@tanstack/react-router": "^1.170.15",
69
+ "@tanstack/react-start": "^1.168.25",
70
70
  "class-variance-authority": "^0.7.1",
71
71
  "clsx": "^2.1.1",
72
- "lucide-react": "^1.16.0",
72
+ "lucide-react": "^1.17.0",
73
73
  "nitro": "^3.0.260311-beta",
74
- "openai": "^6.38.0",
75
- "react": "^19.2.6",
76
- "react-dom": "^19.2.6",
74
+ "openai": "^6.42.0",
75
+ "react": "^19.2.7",
76
+ "react-dom": "^19.2.7",
77
77
  "remark-gfm": "^4.0.1",
78
78
  "tailwind-merge": "^3.6.0",
79
79
  "tailwindcss": "^4.3.0",
@@ -81,12 +81,12 @@
81
81
  },
82
82
  "devDependencies": {
83
83
  "@assistant-ui/x-buildutils": "workspace:*",
84
- "@types/node": "^25.9.1",
85
- "@types/react": "^19.2.15",
84
+ "@types/node": "^25.9.2",
85
+ "@types/react": "^19.2.17",
86
86
  "@types/react-dom": "^19.2.3",
87
87
  "@vitejs/plugin-react": "^6.0.2",
88
88
  "typescript": "^6.0.3",
89
- "vite": "^8.0.14"
89
+ "vite": "^8.0.16"
90
90
  }
91
91
  }
92
92
 
@@ -303,7 +303,6 @@ export const Route = createRootRoute({
303
303
  function RootDocument({ children }: { children: React.ReactNode }) {
304
304
  return (
305
305
  <html lang="en">
306
- {/* biome-ignore lint/style/noHeadElement: TanStack Start uses standard HTML head */}
307
306
  <head>
308
307
  <HeadContent />
309
308
  </head>
@@ -556,15 +555,16 @@ export const chatStream = createServerFn({ method: "POST" })
556
555
  }
557
556
  body {
558
557
  @apply bg-background text-foreground m-0;
559
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
558
+ font-family:
559
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
560
560
  "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
561
561
  sans-serif;
562
562
  -webkit-font-smoothing: antialiased;
563
563
  -moz-osx-font-smoothing: grayscale;
564
564
  }
565
565
  code {
566
- font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
567
- monospace;
566
+ font-family:
567
+ source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
568
568
  }
569
569
  }
570
570
 
@@ -737,7 +737,6 @@ export const chatStream = createServerFn({ method: "POST" })
737
737
  {
738
738
  "extends": "@assistant-ui/x-buildutils/ts/base",
739
739
  "compilerOptions": {
740
- "types": ["vite/client"],
741
740
  "paths": {
742
741
  "@/*": ["./src/*"],
743
742
  "@/components/assistant-ui/*": [
@@ -363,7 +363,7 @@ export function MyRuntimeProvider({ children }: { children: React.ReactNode }) {
363
363
  {children}
364
364
 
365
365
  {/* Control panel */}
366
- <div className="border-t bg-card p-4">
366
+ <div className="bg-card border-t p-4">
367
367
  <div className="mx-auto flex max-w-2xl flex-col gap-2">
368
368
  <div className="flex items-center gap-2">
369
369
  <span className="text-muted-foreground text-sm">Controls:</span>
@@ -379,7 +379,7 @@ export function MyRuntimeProvider({ children }: { children: React.ReactNode }) {
379
379
  },
380
380
  ]);
381
381
  }}
382
- className="rounded-md bg-primary px-3 py-1 font-medium text-primary-foreground text-sm hover:bg-primary/90"
382
+ className="bg-primary text-primary-foreground hover:bg-primary/90 rounded-md px-3 py-1 text-sm font-medium"
383
383
  >
384
384
  Add User Message
385
385
  </button>
@@ -397,21 +397,21 @@ export function MyRuntimeProvider({ children }: { children: React.ReactNode }) {
397
397
  },
398
398
  ]);
399
399
  }}
400
- className="rounded-md bg-secondary px-3 py-1 font-medium text-secondary-foreground text-sm hover:bg-secondary/80"
400
+ className="bg-secondary text-secondary-foreground hover:bg-secondary/80 rounded-md px-3 py-1 text-sm font-medium"
401
401
  >
402
402
  Add Assistant Message
403
403
  </button>
404
404
  <button
405
405
  type="button"
406
406
  onClick={() => setIsRunning(!isRunning)}
407
- className="rounded-md bg-accent px-3 py-1 font-medium text-accent-foreground text-sm hover:bg-accent/80"
407
+ className="bg-accent text-accent-foreground hover:bg-accent/80 rounded-md px-3 py-1 text-sm font-medium"
408
408
  >
409
409
  {isRunning ? "Stop" : "Start"} Running
410
410
  </button>
411
411
  <button
412
412
  type="button"
413
413
  onClick={() => updateCurrentThreadMessages(() => [])}
414
- className="rounded-md bg-destructive px-3 py-1 font-medium text-sm text-white hover:bg-destructive/90"
414
+ className="bg-destructive hover:bg-destructive/90 rounded-md px-3 py-1 text-sm font-medium text-white"
415
415
  >
416
416
  Clear
417
417
  </button>
@@ -431,9 +431,9 @@ export function MyRuntimeProvider({ children }: { children: React.ReactNode }) {
431
431
 
432
432
  function ThreadListSidebar() {
433
433
  return (
434
- <ThreadListPrimitive.Root className="flex w-64 flex-col border-r bg-muted/30">
434
+ <ThreadListPrimitive.Root className="bg-muted/30 flex w-64 flex-col border-r">
435
435
  <div className="border-b p-4">
436
- <h2 className="font-semibold text-lg">Threads</h2>
436
+ <h2 className="text-lg font-semibold">Threads</h2>
437
437
  </div>
438
438
 
439
439
  <div className="flex-1 overflow-y-auto p-2">
@@ -443,7 +443,7 @@ function ThreadListSidebar() {
443
443
  </div>
444
444
 
445
445
  <div className="border-t p-2">
446
- <ThreadListPrimitive.New className="w-full rounded-md bg-primary px-3 py-2 font-medium text-primary-foreground text-sm hover:bg-primary/90">
446
+ <ThreadListPrimitive.New className="bg-primary text-primary-foreground hover:bg-primary/90 w-full rounded-md px-3 py-2 text-sm font-medium">
447
447
  + New Thread
448
448
  </ThreadListPrimitive.New>
449
449
  </div>
@@ -453,7 +453,7 @@ function ThreadListSidebar() {
453
453
 
454
454
  function ThreadListItem() {
455
455
  return (
456
- <ThreadListItemPrimitive.Root className="mb-1 w-full rounded-md p-3 text-left transition-colors hover:bg-muted data-active:bg-primary data-active:text-primary-foreground">
456
+ <ThreadListItemPrimitive.Root className="hover:bg-muted data-active:bg-primary data-active:text-primary-foreground mb-1 w-full rounded-md p-3 text-left transition-colors">
457
457
  <ThreadListItemPrimitive.Trigger className="w-full text-left">
458
458
  <div className="font-medium">
459
459
  <ThreadListItemPrimitive.Title fallback="New Thread" />
@@ -486,8 +486,8 @@ export default function Home() {
486
486
 
487
487
  return (
488
488
  <div className="flex h-full flex-col">
489
- <header className="border-b bg-card px-6 py-4">
490
- <h1 className="font-bold text-2xl">Tap-Native Runtime Example</h1>
489
+ <header className="bg-card border-b px-6 py-4">
490
+ <h1 className="text-2xl font-bold">Tap-Native Runtime Example</h1>
491
491
  <p className="text-muted-foreground text-sm">
492
492
  Built with ExternalThread and InMemoryThreadList
493
493
  </p>
@@ -497,7 +497,7 @@ export default function Home() {
497
497
  {isEmpty ? (
498
498
  <div className="flex h-full items-center justify-center">
499
499
  <div className="text-center">
500
- <h2 className="mb-2 font-semibold text-xl">No messages yet</h2>
500
+ <h2 className="mb-2 text-xl font-semibold">No messages yet</h2>
501
501
  <p className="text-muted-foreground text-sm">
502
502
  Use the controls below to add messages
503
503
  </p>
@@ -507,14 +507,14 @@ export default function Home() {
507
507
  <>
508
508
  <Thread />
509
509
  <div className="mx-auto mt-4 max-w-2xl space-y-2">
510
- <div className="rounded-lg border bg-card p-4">
511
- <h3 className="mb-2 font-semibold text-sm">
510
+ <div className="bg-card rounded-lg border p-4">
511
+ <h3 className="mb-2 text-sm font-semibold">
512
512
  About This Example
513
513
  </h3>
514
- <ul className="space-y-1 text-muted-foreground text-sm">
514
+ <ul className="text-muted-foreground space-y-1 text-sm">
515
515
  <li>
516
516
  • Uses{" "}
517
- <code className="rounded bg-muted px-1">
517
+ <code className="bg-muted rounded px-1">
518
518
  ExternalThread
519
519
  </code>{" "}
520
520
  to display messages
@@ -525,7 +525,7 @@ export default function Home() {
525
525
  </ul>
526
526
  </div>
527
527
 
528
- <div className="text-center text-muted-foreground text-xs">
528
+ <div className="text-muted-foreground text-center text-xs">
529
529
  This is a minimal implementation. Features like editing,
530
530
  branching, and attachments can be added.
531
531
  </div>
@@ -572,13 +572,14 @@ export default function Home() {
572
572
  ## next.config.ts
573
573
 
574
574
  ```typescript
575
+ import { withAui } from "@assistant-ui/next";
575
576
  import type { NextConfig } from "next";
576
577
 
577
578
  const nextConfig: NextConfig = {
578
579
  /* config options here */
579
580
  };
580
581
 
581
- export default nextConfig;
582
+ export default withAui(nextConfig);
582
583
 
583
584
  ```
584
585
 
@@ -601,17 +602,18 @@ export default nextConfig;
601
602
  "@assistant-ui/ui": "workspace:*",
602
603
  "class-variance-authority": "^0.7.1",
603
604
  "clsx": "^2.1.1",
604
- "lucide-react": "^1.16.0",
605
- "next": "^16.2.6",
606
- "react": "^19.2.6",
607
- "react-dom": "^19.2.6",
605
+ "lucide-react": "^1.17.0",
606
+ "next": "^16.2.7",
607
+ "react": "^19.2.7",
608
+ "react-dom": "^19.2.7",
608
609
  "tailwind-merge": "^3.6.0"
609
610
  },
610
611
  "devDependencies": {
612
+ "@assistant-ui/next": "workspace:*",
611
613
  "@assistant-ui/x-buildutils": "workspace:*",
612
614
  "@tailwindcss/postcss": "^4.3.0",
613
- "@types/node": "^25.9.1",
614
- "@types/react": "^19.2.15",
615
+ "@types/node": "^25.9.2",
616
+ "@types/react": "^19.2.17",
615
617
  "@types/react-dom": "^19.2.3",
616
618
  "postcss": "^8.5.15",
617
619
  "tailwindcss": "^4.3.0",