@assistant-ui/mcp-docs-server 0.1.31 → 0.1.33

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 (281) hide show
  1. package/.docs/organized/code-examples/waterfall.md +23 -25
  2. package/.docs/organized/code-examples/with-a2a.md +28 -28
  3. package/.docs/organized/code-examples/with-ag-ui.md +35 -30
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +16 -14
  5. package/.docs/organized/code-examples/with-artifacts.md +44 -38
  6. package/.docs/organized/code-examples/with-assistant-transport.md +68 -56
  7. package/.docs/organized/code-examples/with-browser-extension.md +357 -0
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +425 -90
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +30 -29
  10. package/.docs/organized/code-examples/with-cloud.md +16 -14
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +19 -17
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +29 -26
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +20 -18
  14. package/.docs/organized/code-examples/with-expo.md +37 -31
  15. package/.docs/organized/code-examples/with-external-store.md +13 -11
  16. package/.docs/organized/code-examples/with-ffmpeg.md +327 -290
  17. package/.docs/organized/code-examples/with-generative-ui.md +1195 -194
  18. package/.docs/organized/code-examples/with-google-adk.md +13 -11
  19. package/.docs/organized/code-examples/with-heat-graph.md +16 -14
  20. package/.docs/organized/code-examples/with-image-generation.md +456 -0
  21. package/.docs/organized/code-examples/with-interactables.md +322 -244
  22. package/.docs/organized/code-examples/with-langchain.md +18 -16
  23. package/.docs/organized/code-examples/with-langgraph.md +95 -88
  24. package/.docs/organized/code-examples/with-livekit.md +30 -27
  25. package/.docs/organized/code-examples/with-mcp.md +754 -0
  26. package/.docs/organized/code-examples/with-opencode.md +70 -70
  27. package/.docs/organized/code-examples/with-react-hook-form.md +24 -22
  28. package/.docs/organized/code-examples/with-react-ink.md +4 -4
  29. package/.docs/organized/code-examples/with-react-router.md +20 -18
  30. package/.docs/organized/code-examples/with-resumable-stream.md +661 -0
  31. package/.docs/organized/code-examples/with-store.md +22 -20
  32. package/.docs/organized/code-examples/with-tanstack.md +18 -19
  33. package/.docs/organized/code-examples/with-tap-runtime.md +31 -28
  34. package/.docs/raw/docs/(docs)/architecture.mdx +43 -2
  35. package/.docs/raw/docs/(docs)/cli.mdx +2 -2
  36. package/.docs/raw/docs/(docs)/copilots/model-context.mdx +34 -26
  37. package/.docs/raw/docs/(docs)/copilots/motivation.mdx +32 -26
  38. package/.docs/raw/docs/(docs)/index.mdx +2 -2
  39. package/.docs/raw/docs/(docs)/installation.mdx +2 -2
  40. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +26 -24
  41. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +20 -0
  42. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +20 -12
  43. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +44 -0
  44. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +41 -16
  45. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +12 -23
  46. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +20 -0
  47. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +37 -8
  48. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +11 -9
  49. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +64 -0
  50. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +22 -0
  51. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +52 -0
  52. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +46 -0
  53. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +18 -0
  54. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +33 -0
  55. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +45 -0
  56. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +98 -0
  57. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +18 -13
  58. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +31 -52
  59. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +640 -0
  60. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +15 -28
  61. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +64 -18
  62. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +434 -0
  63. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +24 -0
  64. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +11 -12
  65. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +109 -0
  66. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +58 -0
  67. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +22 -0
  68. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +20 -0
  69. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +109 -132
  70. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +78 -221
  71. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +127 -242
  72. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +39 -20
  73. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +66 -87
  74. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +50 -58
  75. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +80 -48
  76. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +67 -0
  77. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +323 -461
  78. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +36 -43
  79. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +29 -24
  80. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +63 -245
  81. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +202 -588
  82. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +65 -0
  83. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +35 -22
  84. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +57 -140
  85. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +70 -161
  86. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +84 -108
  87. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +77 -96
  88. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +173 -349
  89. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +9 -21
  90. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +10 -21
  91. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +15 -70
  92. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +18 -13
  93. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +25 -28
  94. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +11 -63
  95. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +20 -0
  96. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +11 -48
  97. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +10 -47
  98. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +18 -30
  99. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +85 -0
  100. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +39 -0
  101. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +127 -0
  102. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +42 -0
  103. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +91 -0
  104. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +48 -0
  105. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +62 -0
  106. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +22 -0
  107. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +19 -0
  108. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +143 -0
  109. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +22 -0
  110. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +54 -0
  111. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +36 -0
  112. package/.docs/raw/docs/cloud/ai-sdk.mdx +1 -3
  113. package/.docs/raw/docs/cloud/index.mdx +2 -2
  114. package/.docs/raw/docs/guides/attachments.mdx +4 -4
  115. package/.docs/raw/docs/guides/branching.mdx +1 -1
  116. package/.docs/raw/docs/guides/chain-of-thought.mdx +12 -14
  117. package/.docs/raw/docs/guides/context-api.mdx +6 -5
  118. package/.docs/raw/docs/guides/dictation.mdx +2 -2
  119. package/.docs/raw/docs/guides/editing.mdx +1 -1
  120. package/.docs/raw/docs/guides/image-generation.mdx +74 -0
  121. package/.docs/raw/docs/guides/index.mdx +5 -14
  122. package/.docs/raw/docs/guides/latex.mdx +2 -2
  123. package/.docs/raw/docs/guides/mentions.mdx +6 -6
  124. package/.docs/raw/docs/guides/message-timing.mdx +38 -5
  125. package/.docs/raw/docs/guides/quoting.mdx +1 -1
  126. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +212 -0
  127. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +152 -0
  128. package/.docs/raw/docs/guides/resumable-streams.mdx +210 -0
  129. package/.docs/raw/docs/guides/slash-commands.mdx +2 -2
  130. package/.docs/raw/docs/guides/speech.mdx +2 -2
  131. package/.docs/raw/docs/guides/suggestions.mdx +89 -5
  132. package/.docs/raw/docs/guides/voice.mdx +2 -2
  133. package/.docs/raw/docs/ink/adapters.mdx +37 -1
  134. package/.docs/raw/docs/ink/custom-backend.mdx +59 -8
  135. package/.docs/raw/docs/ink/hooks.mdx +98 -85
  136. package/.docs/raw/docs/ink/index.mdx +10 -11
  137. package/.docs/raw/docs/ink/migration.mdx +1 -1
  138. package/.docs/raw/docs/ink/primitives.mdx +350 -9
  139. package/.docs/raw/docs/integrations/auth/better-auth.mdx +1 -1
  140. package/.docs/raw/docs/integrations/auth/clerk.mdx +1 -1
  141. package/.docs/raw/docs/integrations/auth/next-auth.mdx +1 -1
  142. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +3 -3
  143. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +282 -0
  144. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +2 -2
  145. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  146. package/.docs/raw/docs/integrations/gateways/index.mdx +9 -4
  147. package/.docs/raw/docs/integrations/index.mdx +17 -5
  148. package/.docs/raw/docs/integrations/observability/langfuse.mdx +8 -1
  149. package/.docs/raw/docs/integrations/observability/langsmith.mdx +8 -4
  150. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +17 -2
  151. package/.docs/raw/docs/migrations/toolkit-tools.mdx +226 -0
  152. package/.docs/raw/docs/primitives/chain-of-thought.mdx +10 -16
  153. package/.docs/raw/docs/primitives/composer.mdx +53 -0
  154. package/.docs/raw/docs/primitives/index.mdx +2 -2
  155. package/.docs/raw/docs/primitives/message.mdx +9 -10
  156. package/.docs/raw/docs/primitives/suggestion.mdx +9 -0
  157. package/.docs/raw/docs/react-native/hooks.mdx +57 -82
  158. package/.docs/raw/docs/react-native/index.mdx +4 -4
  159. package/.docs/raw/docs/react-native/migration.mdx +1 -1
  160. package/.docs/raw/docs/react-native/primitives.mdx +2 -2
  161. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +7 -4
  162. package/.docs/raw/docs/runtimes/a2a/overview.mdx +2 -2
  163. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +2 -2
  164. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +32 -1
  165. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +2 -2
  166. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +7 -2
  167. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +1 -1
  168. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +129 -1
  169. package/.docs/raw/docs/runtimes/concepts/threads.mdx +7 -1
  170. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +27 -2
  171. package/.docs/raw/docs/runtimes/custom/external-store.mdx +9 -1
  172. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +18 -7
  173. package/.docs/raw/docs/runtimes/custom/overview.mdx +2 -2
  174. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +108 -38
  175. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +2 -2
  176. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  177. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +2 -2
  178. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +2 -2
  179. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +1 -1
  180. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +64 -50
  181. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +98 -86
  182. package/.docs/raw/docs/runtimes/opencode/overview.mdx +2 -2
  183. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +1 -1
  184. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +12 -5
  185. package/.docs/raw/docs/tools/backend.mdx +136 -0
  186. package/.docs/raw/docs/tools/defining-tools.mdx +413 -0
  187. package/.docs/raw/docs/tools/dynamic-tools.mdx +110 -0
  188. package/.docs/raw/docs/tools/generative-ui.mdx +214 -0
  189. package/.docs/raw/docs/tools/index.mdx +76 -0
  190. package/.docs/raw/docs/{guides → tools}/interactables.mdx +3 -3
  191. package/.docs/raw/docs/tools/mcp-apps.mdx +231 -0
  192. package/.docs/raw/docs/{integrations/tools → tools}/mcp.mdx +77 -50
  193. package/.docs/raw/docs/{guides → tools}/multi-agent.mdx +19 -21
  194. package/.docs/raw/docs/tools/tool-ui.mdx +967 -0
  195. package/.docs/raw/docs/tools/user-managed-mcp.mdx +337 -0
  196. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +11 -1
  197. package/.docs/raw/docs/ui/directive-text.mdx +3 -3
  198. package/.docs/raw/docs/ui/mcp-config.mdx +102 -0
  199. package/.docs/raw/docs/ui/model-selector.mdx +8 -8
  200. package/.docs/raw/docs/ui/part-grouping.mdx +84 -50
  201. package/.docs/raw/docs/ui/reasoning.mdx +4 -5
  202. package/.docs/raw/docs/ui/sources.mdx +17 -0
  203. package/.docs/raw/docs/ui/streamdown.mdx +34 -2
  204. package/.docs/raw/docs/ui/thread-list.mdx +2 -2
  205. package/.docs/raw/docs/ui/thread.mdx +2 -2
  206. package/.docs/raw/docs/ui/tool-group.mdx +5 -6
  207. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -1
  208. package/README.md +14 -72
  209. package/dist/constants.d.ts +12 -9
  210. package/dist/constants.d.ts.map +1 -1
  211. package/dist/constants.js +13 -9
  212. package/dist/constants.js.map +1 -1
  213. package/dist/index.d.ts +7 -3
  214. package/dist/index.d.ts.map +1 -1
  215. package/dist/index.js +25 -24
  216. package/dist/index.js.map +1 -1
  217. package/dist/prepare-docs/code-examples.d.ts +4 -1
  218. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  219. package/dist/prepare-docs/code-examples.js +109 -121
  220. package/dist/prepare-docs/code-examples.js.map +1 -1
  221. package/dist/prepare-docs/copy-raw.d.ts +4 -1
  222. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  223. package/dist/prepare-docs/copy-raw.js +45 -42
  224. package/dist/prepare-docs/copy-raw.js.map +1 -1
  225. package/dist/prepare-docs/prepare.d.ts +1 -2
  226. package/dist/prepare-docs/prepare.js +17 -17
  227. package/dist/prepare-docs/prepare.js.map +1 -1
  228. package/dist/stdio.d.ts +1 -3
  229. package/dist/stdio.js +6 -3
  230. package/dist/stdio.js.map +1 -1
  231. package/dist/tools/docs.d.ts +20 -15
  232. package/dist/tools/docs.d.ts.map +1 -1
  233. package/dist/tools/docs.js +140 -161
  234. package/dist/tools/docs.js.map +1 -1
  235. package/dist/tools/examples.d.ts +20 -15
  236. package/dist/tools/examples.d.ts.map +1 -1
  237. package/dist/tools/examples.js +74 -86
  238. package/dist/tools/examples.js.map +1 -1
  239. package/dist/tools/tests/test-setup.d.ts +5 -2
  240. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  241. package/dist/tools/tests/test-setup.js +21 -28
  242. package/dist/tools/tests/test-setup.js.map +1 -1
  243. package/dist/utils/logger.d.ts +8 -5
  244. package/dist/utils/logger.d.ts.map +1 -1
  245. package/dist/utils/logger.js +17 -17
  246. package/dist/utils/logger.js.map +1 -1
  247. package/dist/utils/mcp-format.d.ts +8 -5
  248. package/dist/utils/mcp-format.d.ts.map +1 -1
  249. package/dist/utils/mcp-format.js +9 -9
  250. package/dist/utils/mcp-format.js.map +1 -1
  251. package/dist/utils/mdx.d.ts +8 -6
  252. package/dist/utils/mdx.d.ts.map +1 -1
  253. package/dist/utils/mdx.js +22 -22
  254. package/dist/utils/mdx.js.map +1 -1
  255. package/dist/utils/paths.d.ts +9 -6
  256. package/dist/utils/paths.d.ts.map +1 -1
  257. package/dist/utils/paths.js +66 -76
  258. package/dist/utils/paths.js.map +1 -1
  259. package/dist/utils/security.d.ts +4 -1
  260. package/dist/utils/security.d.ts.map +1 -1
  261. package/dist/utils/security.js +19 -40
  262. package/dist/utils/security.js.map +1 -1
  263. package/package.json +5 -5
  264. package/.docs/organized/code-examples/with-parent-id-grouping.md +0 -596
  265. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +0 -151
  266. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +0 -230
  267. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +0 -41
  268. package/.docs/raw/docs/(reference)/api-reference/context-providers/text-message-part-provider.mdx +0 -40
  269. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -260
  270. package/.docs/raw/docs/(reference)/api-reference/integrations/react-hook-form.mdx +0 -103
  271. package/.docs/raw/docs/(reference)/api-reference/integrations/vercel-ai-sdk.mdx +0 -254
  272. package/.docs/raw/docs/guides/tool-ui.mdx +0 -858
  273. package/.docs/raw/docs/guides/tools.mdx +0 -675
  274. package/dist/prepare-docs/prepare.d.ts.map +0 -1
  275. package/dist/stdio.d.ts.map +0 -1
  276. /package/.docs/raw/docs/{(reference)/migrations → migrations}/deprecation-policy.mdx +0 -0
  277. /package/.docs/raw/docs/{(reference) → migrations}/react-compatibility.mdx +0 -0
  278. /package/.docs/raw/docs/{(reference)/migrations → migrations}/react-langgraph-v0-7.mdx +0 -0
  279. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-11.mdx +0 -0
  280. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-12.mdx +0 -0
  281. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-14.mdx +0 -0
@@ -277,12 +277,13 @@ export default function Home() {
277
277
  ## next.config.js
278
278
 
279
279
  ```javascript
280
+ import { withAui } from "@assistant-ui/next";
280
281
  /** @type {import('next').NextConfig} */
281
282
  const nextConfig = {
282
283
  transpilePackages: ["@assistant-ui/react", "@assistant-ui/react-google-adk"],
283
284
  };
284
285
 
285
- export default nextConfig;
286
+ export default withAui(nextConfig);
286
287
 
287
288
  ```
288
289
 
@@ -307,21 +308,22 @@ export default nextConfig;
307
308
  "@google/adk": "^1.1.0",
308
309
  "class-variance-authority": "^0.7.1",
309
310
  "clsx": "^2.1.1",
310
- "lucide-react": "^1.14.0",
311
- "next": "^16.2.4",
312
- "react": "^19.2.5",
313
- "react-dom": "^19.2.5",
314
- "tailwind-merge": "^3.5.0",
311
+ "lucide-react": "^1.17.0",
312
+ "next": "^16.2.6",
313
+ "react": "^19.2.6",
314
+ "react-dom": "^19.2.6",
315
+ "tailwind-merge": "^3.6.0",
315
316
  "zod": "^4.4.3"
316
317
  },
317
318
  "devDependencies": {
319
+ "@assistant-ui/next": "workspace:*",
318
320
  "@assistant-ui/x-buildutils": "workspace:*",
319
- "@tailwindcss/postcss": "^4.2.4",
320
- "@types/node": "^25.6.0",
321
- "@types/react": "^19.2.14",
321
+ "@tailwindcss/postcss": "^4.3.0",
322
+ "@types/node": "^25.9.1",
323
+ "@types/react": "^19.2.15",
322
324
  "@types/react-dom": "^19.2.3",
323
- "postcss": "^8.5.14",
324
- "tailwindcss": "^4.2.4",
325
+ "postcss": "^8.5.15",
326
+ "tailwindcss": "^4.3.0",
325
327
  "tw-animate-css": "^1.4.0",
326
328
  "typescript": "^6.0.3"
327
329
  }
@@ -77,7 +77,7 @@ export default function Home() {
77
77
  return (
78
78
  <div className="min-h-screen bg-white p-8">
79
79
  <div className="mx-auto max-w-4xl">
80
- <h1 className="mb-6 font-bold text-3xl text-gray-900">
80
+ <h1 className="mb-6 text-3xl font-bold text-gray-900">
81
81
  Activity Graph
82
82
  </h1>
83
83
  <div className="rounded-xl border border-gray-200 bg-white p-6">
@@ -124,7 +124,7 @@ function MonthLabels() {
124
124
  <HeatGraph.MonthLabels>
125
125
  {({ label, totalWeeks }) => (
126
126
  <span
127
- className="absolute text-gray-500 text-xs"
127
+ className="absolute text-xs text-gray-500"
128
128
  style={{ left: `${(label.column / totalWeeks) * 100}%` }}
129
129
  >
130
130
  {HeatGraph.MONTH_SHORT[label.month]}
@@ -140,7 +140,7 @@ function DayLabels() {
140
140
  <div className="flex w-8 shrink-0 flex-col justify-between py-[2px]">
141
141
  <HeatGraph.DayLabels>
142
142
  {({ label }) => (
143
- <span className="flex h-[13px] items-center text-gray-500 text-xs">
143
+ <span className="flex h-[13px] items-center text-xs text-gray-500">
144
144
  {label.row % 2 === 0 ? HeatGraph.DAY_SHORT[label.dayOfWeek] : ""}
145
145
  </span>
146
146
  )}
@@ -159,7 +159,7 @@ function CellGrid() {
159
159
 
160
160
  function CellTooltip() {
161
161
  return (
162
- <HeatGraph.Tooltip className="pointer-events-none whitespace-nowrap rounded-md bg-gray-900 px-3 py-1.5 text-white text-xs shadow-lg">
162
+ <HeatGraph.Tooltip className="pointer-events-none rounded-md bg-gray-900 px-3 py-1.5 text-xs whitespace-nowrap text-white shadow-lg">
163
163
  {({ cell }) => (
164
164
  <>
165
165
  <strong>{cell.count} contributions</strong> on{" "}
@@ -176,7 +176,7 @@ function CellTooltip() {
176
176
 
177
177
  function GraphLegend() {
178
178
  return (
179
- <div className="ml-auto flex items-center gap-1 text-gray-500 text-xs">
179
+ <div className="ml-auto flex items-center gap-1 text-xs text-gray-500">
180
180
  <span>Less</span>
181
181
  <HeatGraph.Legend>
182
182
  {() => (
@@ -245,13 +245,14 @@ export function generateSampleData(
245
245
  ## next.config.ts
246
246
 
247
247
  ```typescript
248
+ import { withAui } from "@assistant-ui/next";
248
249
  import type { NextConfig } from "next";
249
250
 
250
251
  const nextConfig: NextConfig = {
251
252
  /* config options here */
252
253
  };
253
254
 
254
- export default nextConfig;
255
+ export default withAui(nextConfig);
255
256
 
256
257
  ```
257
258
 
@@ -270,18 +271,19 @@ export default nextConfig;
270
271
  },
271
272
  "dependencies": {
272
273
  "heat-graph": "workspace:*",
273
- "next": "^16.2.4",
274
- "react": "^19.2.5",
275
- "react-dom": "^19.2.5"
274
+ "next": "^16.2.6",
275
+ "react": "^19.2.6",
276
+ "react-dom": "^19.2.6"
276
277
  },
277
278
  "devDependencies": {
279
+ "@assistant-ui/next": "workspace:*",
278
280
  "@assistant-ui/x-buildutils": "workspace:*",
279
- "@tailwindcss/postcss": "^4.2.4",
280
- "@types/node": "^25.6.0",
281
- "@types/react": "^19.2.14",
281
+ "@tailwindcss/postcss": "^4.3.0",
282
+ "@types/node": "^25.9.1",
283
+ "@types/react": "^19.2.15",
282
284
  "@types/react-dom": "^19.2.3",
283
- "postcss": "^8.5.14",
284
- "tailwindcss": "^4.2.4",
285
+ "postcss": "^8.5.15",
286
+ "tailwindcss": "^4.3.0",
285
287
  "typescript": "^6.0.3"
286
288
  }
287
289
  }
@@ -0,0 +1,456 @@
1
+ # Example: with-image-generation
2
+
3
+ ## app/api/image/route.ts
4
+
5
+ ```typescript
6
+ import { openai } from "@ai-sdk/openai";
7
+ import { generateImage } from "ai";
8
+
9
+ export const maxDuration = 60;
10
+
11
+ // 1x1 transparent PNG, returned as a stand-in when no OPENAI_API_KEY is set so
12
+ // the example runs without credentials.
13
+ const MOCK_IMAGE =
14
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==";
15
+
16
+ export async function POST(req: Request) {
17
+ const { prompt, size, seed } = (await req.json()) as {
18
+ prompt?: string;
19
+ size?: `${number}x${number}`;
20
+ seed?: number;
21
+ };
22
+ if (!prompt) {
23
+ return Response.json({ error: "Missing prompt" }, { status: 400 });
24
+ }
25
+
26
+ if (!process.env.OPENAI_API_KEY) {
27
+ await new Promise((r) => setTimeout(r, 400));
28
+ return Response.json({
29
+ image: MOCK_IMAGE,
30
+ mimeType: "image/png",
31
+ metadata: { revisedPrompt: `${prompt} (mock)` },
32
+ });
33
+ }
34
+
35
+ const result = await generateImage({
36
+ model: openai.image("gpt-image-1"),
37
+ prompt,
38
+ ...(size && { size }),
39
+ ...(seed !== undefined && { seed }),
40
+ });
41
+ const openaiMeta = (
42
+ result.providerMetadata as
43
+ | Record<string, Record<string, unknown>>
44
+ | undefined
45
+ )?.openai;
46
+ const revisedPrompt = openaiMeta?.revisedPrompt;
47
+ return Response.json({
48
+ image: `data:${result.image.mediaType};base64,${result.image.base64}`,
49
+ mimeType: result.image.mediaType,
50
+ metadata: {
51
+ ...(typeof revisedPrompt === "string" && { revisedPrompt }),
52
+ },
53
+ });
54
+ }
55
+
56
+ ```
57
+
58
+ ## app/globals.css
59
+
60
+ ```css
61
+ @import "tailwindcss";
62
+ @import "tw-animate-css";
63
+
64
+ @source "../../../packages/ui/src";
65
+
66
+ @custom-variant dark (&:is(.dark *));
67
+
68
+ @theme inline {
69
+ --radius-sm: calc(var(--radius) - 4px);
70
+ --radius-md: calc(var(--radius) - 2px);
71
+ --radius-lg: var(--radius);
72
+ --radius-xl: calc(var(--radius) + 4px);
73
+ --color-background: var(--background);
74
+ --color-foreground: var(--foreground);
75
+ --color-card: var(--card);
76
+ --color-card-foreground: var(--card-foreground);
77
+ --color-popover: var(--popover);
78
+ --color-popover-foreground: var(--popover-foreground);
79
+ --color-primary: var(--primary);
80
+ --color-primary-foreground: var(--primary-foreground);
81
+ --color-secondary: var(--secondary);
82
+ --color-secondary-foreground: var(--secondary-foreground);
83
+ --color-muted: var(--muted);
84
+ --color-muted-foreground: var(--muted-foreground);
85
+ --color-accent: var(--accent);
86
+ --color-accent-foreground: var(--accent-foreground);
87
+ --color-destructive: var(--destructive);
88
+ --color-border: var(--border);
89
+ --color-input: var(--input);
90
+ --color-ring: var(--ring);
91
+ --color-chart-1: var(--chart-1);
92
+ --color-chart-2: var(--chart-2);
93
+ --color-chart-3: var(--chart-3);
94
+ --color-chart-4: var(--chart-4);
95
+ --color-chart-5: var(--chart-5);
96
+ --color-sidebar: var(--sidebar);
97
+ --color-sidebar-foreground: var(--sidebar-foreground);
98
+ --color-sidebar-primary: var(--sidebar-primary);
99
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
100
+ --color-sidebar-accent: var(--sidebar-accent);
101
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
102
+ --color-sidebar-border: var(--sidebar-border);
103
+ --color-sidebar-ring: var(--sidebar-ring);
104
+ }
105
+
106
+ :root {
107
+ --radius: 0.625rem;
108
+ --background: oklch(1 0 0);
109
+ --foreground: oklch(0.141 0.005 285.823);
110
+ --card: oklch(1 0 0);
111
+ --card-foreground: oklch(0.141 0.005 285.823);
112
+ --popover: oklch(1 0 0);
113
+ --popover-foreground: oklch(0.141 0.005 285.823);
114
+ --primary: oklch(0.21 0.006 285.885);
115
+ --primary-foreground: oklch(0.985 0 0);
116
+ --secondary: oklch(0.967 0.001 286.375);
117
+ --secondary-foreground: oklch(0.21 0.006 285.885);
118
+ --muted: oklch(0.967 0.001 286.375);
119
+ --muted-foreground: oklch(0.552 0.016 285.938);
120
+ --accent: oklch(0.967 0.001 286.375);
121
+ --accent-foreground: oklch(0.21 0.006 285.885);
122
+ --destructive: oklch(0.577 0.245 27.325);
123
+ --border: oklch(0.92 0.004 286.32);
124
+ --input: oklch(0.92 0.004 286.32);
125
+ --ring: oklch(0.705 0.015 286.067);
126
+ --chart-1: oklch(0.646 0.222 41.116);
127
+ --chart-2: oklch(0.6 0.118 184.704);
128
+ --chart-3: oklch(0.398 0.07 227.392);
129
+ --chart-4: oklch(0.828 0.189 84.429);
130
+ --chart-5: oklch(0.769 0.188 70.08);
131
+ --sidebar: oklch(0.985 0 0);
132
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
133
+ --sidebar-primary: oklch(0.21 0.006 285.885);
134
+ --sidebar-primary-foreground: oklch(0.985 0 0);
135
+ --sidebar-accent: oklch(0.967 0.001 286.375);
136
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
137
+ --sidebar-border: oklch(0.92 0.004 286.32);
138
+ --sidebar-ring: oklch(0.705 0.015 286.067);
139
+ }
140
+
141
+ .dark {
142
+ --background: oklch(0.141 0.005 285.823);
143
+ --foreground: oklch(0.985 0 0);
144
+ --card: oklch(0.21 0.006 285.885);
145
+ --card-foreground: oklch(0.985 0 0);
146
+ --popover: oklch(0.21 0.006 285.885);
147
+ --popover-foreground: oklch(0.985 0 0);
148
+ --primary: oklch(0.92 0.004 286.32);
149
+ --primary-foreground: oklch(0.21 0.006 285.885);
150
+ --secondary: oklch(0.274 0.006 286.033);
151
+ --secondary-foreground: oklch(0.985 0 0);
152
+ --muted: oklch(0.274 0.006 286.033);
153
+ --muted-foreground: oklch(0.705 0.015 286.067);
154
+ --accent: oklch(0.274 0.006 286.033);
155
+ --accent-foreground: oklch(0.985 0 0);
156
+ --destructive: oklch(0.704 0.191 22.216);
157
+ --border: oklch(1 0 0 / 10%);
158
+ --input: oklch(1 0 0 / 15%);
159
+ --ring: oklch(0.552 0.016 285.938);
160
+ --chart-1: oklch(0.488 0.243 264.376);
161
+ --chart-2: oklch(0.696 0.17 162.48);
162
+ --chart-3: oklch(0.769 0.188 70.08);
163
+ --chart-4: oklch(0.627 0.265 303.9);
164
+ --chart-5: oklch(0.645 0.246 16.439);
165
+ --sidebar: oklch(0.21 0.006 285.885);
166
+ --sidebar-foreground: oklch(0.985 0 0);
167
+ --sidebar-primary: oklch(0.488 0.243 264.376);
168
+ --sidebar-primary-foreground: oklch(0.985 0 0);
169
+ --sidebar-accent: oklch(0.274 0.006 286.033);
170
+ --sidebar-accent-foreground: oklch(0.985 0 0);
171
+ --sidebar-border: oklch(1 0 0 / 10%);
172
+ --sidebar-ring: oklch(0.552 0.016 285.938);
173
+ }
174
+
175
+ @layer base {
176
+ * {
177
+ @apply border-border outline-ring/50;
178
+ }
179
+ body {
180
+ @apply bg-background text-foreground;
181
+ }
182
+ }
183
+
184
+ ```
185
+
186
+ ## app/layout.tsx
187
+
188
+ ```tsx
189
+ import type { Metadata } from "next";
190
+ import "./globals.css";
191
+
192
+ export const metadata: Metadata = {
193
+ title: "Image Generation Example",
194
+ description: "Example using @assistant-ui/react image generation primitives",
195
+ };
196
+
197
+ export default function RootLayout({
198
+ children,
199
+ }: Readonly<{ children: React.ReactNode }>) {
200
+ return (
201
+ <html lang="en">
202
+ <body className="bg-background text-foreground h-dvh">{children}</body>
203
+ </html>
204
+ );
205
+ }
206
+
207
+ ```
208
+
209
+ ## app/page.tsx
210
+
211
+ ```tsx
212
+ "use client";
213
+
214
+ import { useCallback, useState } from "react";
215
+ import type { ImageMessagePart, MessagePartStatus } from "@assistant-ui/react";
216
+ import { Image } from "@/components/assistant-ui/image";
217
+
218
+ type ImageView = ImageMessagePart & { status: MessagePartStatus };
219
+
220
+ export default function Home() {
221
+ const [prompt, setPrompt] = useState("A golden retriever wearing a top hat");
222
+ const [activePrompt, setActivePrompt] = useState("");
223
+ const [view, setView] = useState<ImageView | null>(null);
224
+ const [revisedPrompt, setRevisedPrompt] = useState<string | null>(null);
225
+ const [isGenerating, setIsGenerating] = useState(false);
226
+ const [error, setError] = useState<string | null>(null);
227
+
228
+ const generate = useCallback(async (p: string) => {
229
+ setIsGenerating(true);
230
+ setActivePrompt(p);
231
+ setError(null);
232
+ setRevisedPrompt(null);
233
+ setView({ type: "image", image: "", status: { type: "running" } });
234
+ try {
235
+ const res = await fetch("/api/image", {
236
+ method: "POST",
237
+ headers: { "content-type": "application/json" },
238
+ body: JSON.stringify({ prompt: p }),
239
+ });
240
+ if (!res.ok) throw new Error(await res.text());
241
+ const result = (await res.json()) as {
242
+ image: string;
243
+ metadata?: { revisedPrompt?: string };
244
+ };
245
+ setView({
246
+ type: "image",
247
+ image: result.image,
248
+ status: { type: "complete" },
249
+ });
250
+ if (typeof result.metadata?.revisedPrompt === "string") {
251
+ setRevisedPrompt(result.metadata.revisedPrompt);
252
+ }
253
+ } catch (e) {
254
+ setError(e instanceof Error ? e.message : String(e));
255
+ setView({
256
+ type: "image",
257
+ image: "",
258
+ status: { type: "incomplete", reason: "error" },
259
+ });
260
+ } finally {
261
+ setIsGenerating(false);
262
+ }
263
+ }, []);
264
+
265
+ return (
266
+ <main className="mx-auto flex h-full max-w-xl flex-col gap-4 p-6">
267
+ <header>
268
+ <h1 className="text-xl font-semibold">Image Generation</h1>
269
+ <p className="text-muted-foreground text-sm">
270
+ Calls a server route that runs <code>ai.generateImage</code> and
271
+ renders the result with the <code>@assistant-ui/ui</code> Image
272
+ component.
273
+ </p>
274
+ </header>
275
+
276
+ <form
277
+ onSubmit={(e) => {
278
+ e.preventDefault();
279
+ void generate(prompt);
280
+ }}
281
+ className="flex gap-2"
282
+ >
283
+ <input
284
+ value={prompt}
285
+ onChange={(e) => setPrompt(e.target.value)}
286
+ placeholder="Describe an image…"
287
+ className="flex-1 rounded border px-3 py-2"
288
+ />
289
+ <button
290
+ type="submit"
291
+ disabled={isGenerating || !prompt.trim()}
292
+ className="bg-primary text-primary-foreground rounded px-3 py-2 disabled:opacity-50"
293
+ >
294
+ {isGenerating ? "Generating…" : "Generate"}
295
+ </button>
296
+ </form>
297
+
298
+ {error && (
299
+ <p className="text-destructive text-sm" role="alert">
300
+ {error}
301
+ </p>
302
+ )}
303
+
304
+ {view && (
305
+ <div className="space-y-2">
306
+ <Image {...view} />
307
+ {revisedPrompt && (
308
+ <p className="text-muted-foreground text-xs">
309
+ <strong>Revised prompt:</strong> {revisedPrompt}
310
+ </p>
311
+ )}
312
+ {view.status.type === "complete" && view.image && (
313
+ <Image.Actions
314
+ part={view}
315
+ onRegenerate={() => generate(activePrompt)}
316
+ />
317
+ )}
318
+ </div>
319
+ )}
320
+ </main>
321
+ );
322
+ }
323
+
324
+ ```
325
+
326
+ ## components.json
327
+
328
+ ```json
329
+ {
330
+ "$schema": "https://ui.shadcn.com/schema.json",
331
+ "style": "new-york",
332
+ "rsc": true,
333
+ "tsx": true,
334
+ "tailwind": {
335
+ "config": "",
336
+ "css": "app/globals.css",
337
+ "baseColor": "zinc",
338
+ "cssVariables": true,
339
+ "prefix": ""
340
+ },
341
+ "aliases": {
342
+ "components": "@/components",
343
+ "utils": "@/lib/utils",
344
+ "ui": "@/components/ui",
345
+ "lib": "@/lib",
346
+ "hooks": "@/hooks"
347
+ },
348
+ "iconLibrary": "lucide",
349
+ "registries": {
350
+ "@assistant-ui": "https://r.assistant-ui.com/{name}.json"
351
+ }
352
+ }
353
+
354
+ ```
355
+
356
+ ## next.config.js
357
+
358
+ ```javascript
359
+ import { withAui } from "@assistant-ui/next";
360
+ /** @type {import('next').NextConfig} */
361
+ const nextConfig = {
362
+ transpilePackages: ["@assistant-ui/react", "@assistant-ui/react-ai-sdk"],
363
+ };
364
+
365
+ export default withAui(nextConfig);
366
+
367
+ ```
368
+
369
+ ## package.json
370
+
371
+ ```json
372
+ {
373
+ "name": "with-image-generation",
374
+ "version": "0.0.0",
375
+ "private": true,
376
+ "type": "module",
377
+ "scripts": {
378
+ "dev": "next dev",
379
+ "build": "next build",
380
+ "start": "next start"
381
+ },
382
+ "dependencies": {
383
+ "@ai-sdk/openai": "^3.0.67",
384
+ "@assistant-ui/react": "workspace:*",
385
+ "@assistant-ui/ui": "workspace:*",
386
+ "ai": "^6.0.193",
387
+ "class-variance-authority": "^0.7.1",
388
+ "clsx": "^2.1.1",
389
+ "lucide-react": "^1.17.0",
390
+ "next": "^16.2.6",
391
+ "react": "^19.2.6",
392
+ "react-dom": "^19.2.6",
393
+ "tailwind-merge": "^3.6.0"
394
+ },
395
+ "devDependencies": {
396
+ "@assistant-ui/next": "workspace:*",
397
+ "@assistant-ui/x-buildutils": "workspace:*",
398
+ "@tailwindcss/postcss": "^4.3.0",
399
+ "@types/node": "^25.9.1",
400
+ "@types/react": "^19.2.15",
401
+ "@types/react-dom": "^19.2.3",
402
+ "postcss": "^8.5.15",
403
+ "tailwindcss": "^4.3.0",
404
+ "tw-animate-css": "^1.4.0",
405
+ "typescript": "^6.0.3"
406
+ }
407
+ }
408
+
409
+ ```
410
+
411
+ ## README.md
412
+
413
+ ```markdown
414
+ # with-image-generation
415
+
416
+ Minimal Next.js example that generates an image through a server route and renders it with the `@assistant-ui/ui` `Image` component (loading, content-filter, zoom, and download / copy / regenerate actions). It runs without credentials by falling back to a mock image when `OPENAI_API_KEY` is unset.
417
+
418
+ ## Run locally
419
+
420
+ ```bash
421
+ export OPENAI_API_KEY=sk-...
422
+ pnpm --filter with-image-generation dev
423
+ ```
424
+
425
+ Then open `http://localhost:3000`.
426
+
427
+ ## How it works
428
+
429
+ - `app/api/image/route.ts` exposes a server endpoint that calls AI SDK's `generateImage` with `openai.image("gpt-image-1")` and returns an `ImageMessagePart`-shaped payload. Without `OPENAI_API_KEY` it returns a mock image so the example still runs.
430
+ - `app/page.tsx` POSTs the prompt to that endpoint, stores the result as an `ImageMessagePart`, and renders it with the `@assistant-ui/ui` `Image` component.
431
+ - `Image.Actions` provides download and copy buttons plus a regenerate button wired through its `onRegenerate` callback.
432
+
433
+ ```
434
+
435
+ ## tsconfig.json
436
+
437
+ ```json
438
+ {
439
+ "extends": "@assistant-ui/x-buildutils/ts/next",
440
+ "compilerOptions": {
441
+ "paths": {
442
+ "@/*": ["./*"],
443
+ "@/components/assistant-ui/*": [
444
+ "../../packages/ui/src/components/assistant-ui/*"
445
+ ],
446
+ "@/components/ui/*": ["../../packages/ui/src/components/ui/*"],
447
+ "@/lib/utils": ["../../packages/ui/src/lib/utils"],
448
+ "@assistant-ui/ui/*": ["../../packages/ui/src/*"]
449
+ }
450
+ },
451
+ "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
452
+ "exclude": ["node_modules"]
453
+ }
454
+
455
+ ```
456
+