@assistant-ui/mcp-docs-server 0.1.36 → 0.1.39

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 (246) hide show
  1. package/.docs/organized/code-examples/waterfall.md +8 -9
  2. package/.docs/organized/code-examples/with-a2a.md +16 -11
  3. package/.docs/organized/code-examples/with-ag-ui.md +16 -11
  4. package/.docs/organized/code-examples/{with-ai-sdk-v6.md → with-ai-sdk-v7.md} +32 -21
  5. package/.docs/organized/code-examples/with-artifacts.md +17 -10
  6. package/.docs/organized/code-examples/with-assistant-transport.md +15 -8
  7. package/.docs/organized/code-examples/with-browser-extension.md +15 -8
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +17 -10
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +10 -9
  10. package/.docs/organized/code-examples/with-cloud.md +18 -13
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +17 -10
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +20 -13
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +20 -13
  14. package/.docs/organized/code-examples/with-eve.md +16 -9
  15. package/.docs/organized/code-examples/with-expo.md +26 -23
  16. package/.docs/organized/code-examples/with-external-store.md +16 -11
  17. package/.docs/organized/code-examples/with-ffmpeg.md +18 -13
  18. package/.docs/organized/code-examples/with-generative-ui.md +20 -15
  19. package/.docs/organized/code-examples/with-google-adk.md +16 -9
  20. package/.docs/organized/code-examples/with-heat-graph.md +8 -9
  21. package/.docs/organized/code-examples/with-image-generation.md +17 -10
  22. package/.docs/organized/code-examples/with-interactables.md +19 -15
  23. package/.docs/organized/code-examples/with-langchain.md +17 -10
  24. package/.docs/organized/code-examples/with-langgraph.md +17 -10
  25. package/.docs/organized/code-examples/with-livekit.md +21 -14
  26. package/.docs/organized/code-examples/with-mcp.md +40 -18
  27. package/.docs/organized/code-examples/with-opencode.md +22 -17
  28. package/.docs/organized/code-examples/with-pi.md +47 -12
  29. package/.docs/organized/code-examples/with-react-hook-form.md +19 -14
  30. package/.docs/organized/code-examples/with-react-ink-web.md +6 -6
  31. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  32. package/.docs/organized/code-examples/with-react-router.md +20 -15
  33. package/.docs/organized/code-examples/with-resumable-stream.md +19 -12
  34. package/.docs/organized/code-examples/with-store.md +8 -9
  35. package/.docs/organized/code-examples/with-tanstack.md +17 -11
  36. package/.docs/organized/code-examples/with-tap-runtime.md +16 -11
  37. package/.docs/organized/code-examples/with-virtualized-thread.md +17 -12
  38. package/.docs/raw/docs/(docs)/base-ui.mdx +39 -0
  39. package/.docs/raw/docs/(docs)/cli.mdx +18 -2
  40. package/.docs/raw/docs/(docs)/installation.mdx +15 -1
  41. package/.docs/raw/docs/(docs)/rtl.mdx +2 -4
  42. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +56 -0
  43. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +86 -0
  44. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +19 -1
  45. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +42 -0
  46. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +53 -2
  47. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +81 -0
  48. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +86 -0
  49. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +62 -0
  50. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +4 -1
  51. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +4 -2
  52. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +37 -0
  53. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +1 -0
  54. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +29 -29
  55. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +1 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +3 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +2 -0
  58. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -2
  59. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +12 -9
  60. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +4 -0
  61. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +7 -1
  62. package/.docs/raw/docs/cloud/langgraph.mdx +4 -2
  63. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +108 -0
  64. package/.docs/raw/docs/guides/dictation.mdx +185 -257
  65. package/.docs/raw/docs/guides/index.mdx +10 -0
  66. package/.docs/raw/docs/guides/mentions.mdx +31 -3
  67. package/.docs/raw/docs/guides/resumable-streams.mdx +12 -1
  68. package/.docs/raw/docs/guides/speech.mdx +47 -29
  69. package/.docs/raw/docs/guides/suggestions.mdx +70 -1
  70. package/.docs/raw/docs/guides/voice.mdx +197 -267
  71. package/.docs/raw/docs/ink/primitives.mdx +35 -1
  72. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +13 -7
  73. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +3 -3
  74. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +1 -1
  75. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +3 -3
  76. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  77. package/.docs/raw/docs/integrations/gateways/index.mdx +2 -2
  78. package/.docs/raw/docs/integrations/index.mdx +1 -1
  79. package/.docs/raw/docs/integrations/observability/helicone.mdx +1 -1
  80. package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
  81. package/.docs/raw/docs/integrations/observability/langsmith.mdx +3 -3
  82. package/.docs/raw/docs/migrations/index.mdx +50 -0
  83. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +2 -2
  84. package/.docs/raw/docs/migrations/toolkit-tools.mdx +4 -2
  85. package/.docs/raw/docs/primitives/chain-of-thought.mdx +6 -1
  86. package/.docs/raw/docs/primitives/composer.mdx +16 -0
  87. package/.docs/raw/docs/primitives/selection-toolbar.mdx +25 -0
  88. package/.docs/raw/docs/primitives/thread-list.mdx +30 -6
  89. package/.docs/raw/docs/react-native/primitives.mdx +23 -0
  90. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +1 -1
  91. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +124 -0
  92. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +1 -1
  93. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +13 -2
  94. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +13 -4
  95. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +11 -11
  96. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +5 -5
  97. package/.docs/raw/docs/runtimes/ai-sdk/{v6.mdx → v6-legacy.mdx} +8 -6
  98. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +717 -0
  99. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +1 -1
  100. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +1 -1
  101. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +10 -19
  102. package/.docs/raw/docs/runtimes/custom/external-store.mdx +1 -1
  103. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +2 -0
  104. package/.docs/raw/docs/runtimes/eve/overview.mdx +1 -1
  105. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +1 -1
  106. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  107. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +181 -0
  108. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +1 -1
  109. package/.docs/raw/docs/tools/backend.mdx +6 -3
  110. package/.docs/raw/docs/tools/defining-tools.mdx +12 -1
  111. package/.docs/raw/docs/tools/generative-ui.mdx +95 -0
  112. package/.docs/raw/docs/tools/mcp-apps.mdx +37 -10
  113. package/.docs/raw/docs/tools/mcp.mdx +105 -3
  114. package/.docs/raw/docs/tools/tool-ui.mdx +6 -4
  115. package/.docs/raw/docs/tools/user-managed-mcp.mdx +41 -4
  116. package/.docs/raw/docs/ui/accordion.mdx +16 -10
  117. package/.docs/raw/docs/ui/assistant-modal.mdx +8 -4
  118. package/.docs/raw/docs/ui/attachment.mdx +5 -1
  119. package/.docs/raw/docs/ui/badge.mdx +23 -12
  120. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +80 -0
  121. package/.docs/raw/docs/ui/model-selector.mdx +69 -6
  122. package/.docs/raw/docs/ui/select.mdx +22 -14
  123. package/.docs/raw/docs/ui/sources.mdx +1 -1
  124. package/.docs/raw/docs/ui/tabs.mdx +25 -14
  125. package/.docs/raw/docs/utilities/heat-graph.mdx +2 -2
  126. package/README.md +1 -1
  127. package/dist/constants.d.ts +2 -1
  128. package/dist/constants.d.ts.map +1 -1
  129. package/dist/constants.js +2 -1
  130. package/dist/constants.js.map +1 -1
  131. package/dist/index.d.ts +0 -1
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +51 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  136. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  137. package/dist/prepare-docs/copy-raw.js +0 -4
  138. package/dist/prepare-docs/copy-raw.js.map +1 -1
  139. package/dist/prompts/xulux-playground.d.ts +12 -0
  140. package/dist/prompts/xulux-playground.d.ts.map +1 -0
  141. package/dist/prompts/xulux-playground.js +33 -0
  142. package/dist/prompts/xulux-playground.js.map +1 -0
  143. package/dist/tools/docs.d.ts +2 -4
  144. package/dist/tools/docs.d.ts.map +1 -1
  145. package/dist/tools/docs.js +38 -10
  146. package/dist/tools/docs.js.map +1 -1
  147. package/dist/tools/examples.d.ts +5 -5
  148. package/dist/tools/examples.d.ts.map +1 -1
  149. package/dist/tools/examples.js +10 -7
  150. package/dist/tools/examples.js.map +1 -1
  151. package/dist/tools/resources.d.ts +6 -0
  152. package/dist/tools/resources.d.ts.map +1 -0
  153. package/dist/tools/resources.js +74 -0
  154. package/dist/tools/resources.js.map +1 -0
  155. package/dist/tools/search.d.ts +30 -0
  156. package/dist/tools/search.d.ts.map +1 -0
  157. package/dist/tools/search.js +39 -0
  158. package/dist/tools/search.js.map +1 -0
  159. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  160. package/dist/tools/tests/test-setup.js +7 -1
  161. package/dist/tools/tests/test-setup.js.map +1 -1
  162. package/dist/tools/xulux-templates.d.ts +72 -0
  163. package/dist/tools/xulux-templates.d.ts.map +1 -0
  164. package/dist/tools/xulux-templates.js +82 -0
  165. package/dist/tools/xulux-templates.js.map +1 -0
  166. package/dist/utils/cache.d.ts +5 -0
  167. package/dist/utils/cache.d.ts.map +1 -0
  168. package/dist/utils/cache.js +18 -0
  169. package/dist/utils/cache.js.map +1 -0
  170. package/dist/utils/logger.d.ts.map +1 -1
  171. package/dist/utils/mcp-format.d.ts +1 -0
  172. package/dist/utils/mcp-format.d.ts.map +1 -1
  173. package/dist/utils/mcp-format.js +7 -4
  174. package/dist/utils/mcp-format.js.map +1 -1
  175. package/dist/utils/mdx.d.ts +2 -1
  176. package/dist/utils/mdx.d.ts.map +1 -1
  177. package/dist/utils/mdx.js +19 -2
  178. package/dist/utils/mdx.js.map +1 -1
  179. package/dist/utils/paths.d.ts +2 -1
  180. package/dist/utils/paths.d.ts.map +1 -1
  181. package/dist/utils/paths.js +20 -1
  182. package/dist/utils/paths.js.map +1 -1
  183. package/dist/utils/search.d.ts +10 -0
  184. package/dist/utils/search.d.ts.map +1 -0
  185. package/dist/utils/search.js +97 -0
  186. package/dist/utils/search.js.map +1 -0
  187. package/dist/utils/security.d.ts.map +1 -1
  188. package/dist/xulux/catalog-client.d.ts +14 -0
  189. package/dist/xulux/catalog-client.d.ts.map +1 -0
  190. package/dist/xulux/catalog-client.js +67 -0
  191. package/dist/xulux/catalog-client.js.map +1 -0
  192. package/dist/xulux/fallback-catalog.d.ts +7 -0
  193. package/dist/xulux/fallback-catalog.d.ts.map +1 -0
  194. package/dist/xulux/fallback-catalog.js +47 -0
  195. package/dist/xulux/fallback-catalog.js.map +1 -0
  196. package/dist/xulux/fetch-sandbox.d.ts +5 -0
  197. package/dist/xulux/fetch-sandbox.d.ts.map +1 -0
  198. package/dist/xulux/fetch-sandbox.js +40 -0
  199. package/dist/xulux/fetch-sandbox.js.map +1 -0
  200. package/dist/xulux/template-service.d.ts +84 -0
  201. package/dist/xulux/template-service.d.ts.map +1 -0
  202. package/dist/xulux/template-service.js +223 -0
  203. package/dist/xulux/template-service.js.map +1 -0
  204. package/dist/xulux/types.d.ts +55 -0
  205. package/dist/xulux/types.d.ts.map +1 -0
  206. package/dist/xulux/types.js +6 -0
  207. package/dist/xulux/types.js.map +1 -0
  208. package/package.json +5 -5
  209. package/src/constants.ts +2 -0
  210. package/src/index.ts +67 -0
  211. package/src/prepare-docs/copy-raw.ts +0 -5
  212. package/src/prompts/xulux-playground.ts +36 -0
  213. package/src/tools/docs.ts +52 -4
  214. package/src/tools/examples.ts +18 -11
  215. package/src/tools/resources.ts +114 -0
  216. package/src/tools/search.ts +46 -0
  217. package/src/tools/tests/completions.test.ts +46 -0
  218. package/src/tools/tests/directory-size-cap.test.ts +50 -0
  219. package/src/tools/tests/docs.test.ts +20 -0
  220. package/src/tools/tests/examples.test.ts +5 -5
  221. package/src/tools/tests/listings-cache.test.ts +19 -0
  222. package/src/tools/tests/mcp-protocol.test.ts +92 -1
  223. package/src/tools/tests/resources.test.ts +102 -0
  224. package/src/tools/tests/search.test.ts +37 -0
  225. package/src/tools/tests/test-setup.ts +10 -0
  226. package/src/tools/tests/xulux-templates.test.ts +262 -0
  227. package/src/tools/xulux-templates.ts +141 -0
  228. package/src/utils/cache.ts +20 -0
  229. package/src/utils/mcp-format.ts +8 -6
  230. package/src/utils/mdx.ts +21 -1
  231. package/src/utils/paths.ts +25 -0
  232. package/src/utils/search.ts +131 -0
  233. package/src/utils/tests/cache.test.ts +51 -0
  234. package/src/utils/tests/mcp-format.test.ts +22 -0
  235. package/src/utils/tests/security.test.ts +1 -1
  236. package/src/xulux/catalog-client.ts +105 -0
  237. package/src/xulux/fallback-catalog.ts +63 -0
  238. package/src/xulux/fetch-sandbox.ts +56 -0
  239. package/src/xulux/template-service.ts +406 -0
  240. package/src/xulux/types.ts +60 -0
  241. package/.docs/raw/blog/2024-07-29-hello/index.mdx +0 -64
  242. package/.docs/raw/blog/2024-09-11/index.mdx +0 -10
  243. package/.docs/raw/blog/2024-12-15/index.mdx +0 -10
  244. package/.docs/raw/blog/2025-01-31-changelog/index.mdx +0 -127
  245. package/.docs/raw/blog/2026-03-launch-week/index.mdx +0 -258
  246. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +0 -464
@@ -3,10 +3,12 @@ title: AuiIf
3
3
  description: Conditional rendering primitive for showing React UI from assistant-ui thread, message, composer, and runtime state.
4
4
  ---
5
5
 
6
- {/* api-reference:skip-auto-generation */}
6
+ import { AuiIf } from "@/generated/typeDocs";
7
7
 
8
- {/* api-manual:start */}
8
+ {/* AUTO-GENERATED PAGE by scripts/generate-api-reference.mts */}
9
+ {/* Do not edit manually. */}
9
10
 
11
+ {/* api-manual:start */}
10
12
  ## Anatomy
11
13
 
12
14
  ```tsx
@@ -21,26 +23,6 @@ import { AuiIf } from "@assistant-ui/react";
21
23
 
22
24
  `AuiIf` is a generic conditional rendering component that provides access to the full assistant state. It replaces the deprecated `ThreadPrimitive.If`, `MessagePrimitive.If`, and `ComposerPrimitive.If` components with a single, flexible API.
23
25
 
24
- ## API Reference
25
-
26
- <ParametersTable
27
- type="AuiIfProps"
28
- parameters={[
29
- {
30
- name: "condition",
31
- type: "(state: AssistantState) => boolean",
32
- required: true,
33
- description:
34
- "A function that receives the assistant state and returns whether to render children.",
35
- },
36
- {
37
- name: "children",
38
- type: "ReactNode",
39
- description: "Content to render when the condition returns true.",
40
- },
41
- ]}
42
- />
43
-
44
26
  ## AssistantState
45
27
 
46
28
  The condition function receives an `AssistantState` object with the following properties:
@@ -210,16 +192,34 @@ const isThreadEmpty: AuiIf.Condition = (s) => s.thread.isEmpty;
210
192
  | `<MessagePrimitive.If speaking>` | `<AuiIf condition={(s) => s.message.speech != null}>` |
211
193
  | `<MessagePrimitive.If last>` | `<AuiIf condition={(s) => s.message.isLast}>` |
212
194
  | `<ComposerPrimitive.If editing>` | `<AuiIf condition={(s) => s.composer.isEditing}>` |
195
+ {/* api-manual:end */}
213
196
 
214
- ## AssistantIf
197
+ {/* api-reference:start */}
198
+ {/* AUTO-GENERATED by scripts/generate-api-reference.mts */}
199
+ {/* Do not edit this block manually. */}
215
200
 
216
- <Callout type="warn">
217
- <strong>Deprecated:</strong> Use `AuiIf` instead. This alias was removed in
218
- v0.13.
219
- </Callout>
201
+ ## API Reference
202
+
203
+ ### AuiIf
204
+
205
+ Conditionally renders children based on a slice of assistant state.
206
+
207
+ A thin wrapper around [useAuiState](/docs/api-reference/hooks/state#useauistate) that renders its children
208
+ when `condition` returns `true` and unmounts them when it returns
209
+ `false`. Keeps render logic declarative without mounting unused
210
+ subtrees.
220
211
 
221
212
  ```tsx
222
- import { AssistantIf } from "@assistant-ui/react";
213
+ <AuiIf condition={(s) => s.thread.isRunning}>
214
+ <CancelButton />
215
+ </AuiIf>
223
216
  ```
224
217
 
225
- {/* api-manual:end */}
218
+ ```tsx
219
+ <AuiIf condition={(s) => s.thread.messages.length === 0}>
220
+ <EmptyState />
221
+ </AuiIf>
222
+ ```
223
+
224
+ <ParametersTable {...AuiIf} />
225
+ {/* api-reference:end */}
@@ -3,6 +3,7 @@ title: Composition
3
3
  description: How to compose primitives with custom components using asChild.
4
4
  ---
5
5
 
6
+ {/* api-reference:skip-auto-generation */}
6
7
 
7
8
  `assistant-ui` primitives are composable. This means that all props are forwarded, classes are merged, and event handlers are chained.
8
9
 
@@ -37,6 +37,9 @@ Primitives are the low-level React components behind assistant-ui interfaces. Th
37
37
  <Card title={"ComposerPrimitive"} href={"/docs/api-reference/primitives/composer"}>
38
38
  {"Composable input primitives for assistant-ui prompts, send controls, cancellation, attachments, and composer state."}
39
39
  </Card>
40
+ <Card title={"Composition"} href={"/docs/api-reference/primitives/composition"}>
41
+ {"How to compose primitives with custom components using asChild."}
42
+ </Card>
40
43
  <Card title={"ErrorPrimitive"} href={"/docs/api-reference/primitives/error"}>
41
44
  {"Error primitives for rendering assistant-ui runtime, thread, and message failures inside custom chat interfaces."}
42
45
  </Card>
@@ -32,6 +32,8 @@ Place this component inside `ThreadPrimitive.Root`:
32
32
  <FloatingSelectionToolbar />
33
33
  </ThreadPrimitive.Root>
34
34
  ```
35
+
36
+ To prevent tool cards or other message UI from being quoted, wrap the message text in `data-aui-quote-selectable`. If a message contains that marker, the toolbar only appears for selections inside the same marked region. Set the attribute to `"false"` to exclude an element instead; on the message root it disables quoting for the whole message.
35
37
  {/* api-manual:end */}
36
38
 
37
39
  {/* api-reference:start */}
@@ -3,8 +3,6 @@ title: Tool Status
3
3
  description: Read tool arguments, execution status, and result state inside assistant-ui tool UI components.
4
4
  ---
5
5
 
6
-
7
-
8
6
  {/* AUTO-GENERATED PAGE by scripts/generate-api-reference.mts */}
9
7
  {/* Do not edit manually. */}
10
8
 
@@ -27,18 +27,18 @@ optional model-output conversion.
27
27
 
28
28
  This helper keeps reusable tool definitions type-checked and convenient to
29
29
  export for a [Toolkit](/docs/api-reference/tools/toolkits#toolkit) registered with [Tools](/docs/api-reference/tools/toolkits#tools).
30
- Inference from parameter schemas is currently limited, so provide generic
31
- arguments when you need precise args or result types.
30
+ When `parameters` is a Standard Schema (for example Zod v4), its input type
31
+ is inferred for `execute`, `streamCall`, and model-output callbacks. Plain
32
+ JSON Schema objects do not carry TypeScript input types, so provide generic
33
+ arguments or annotate callbacks when you need precise args for JSON Schema.
32
34
 
33
35
  ```ts
34
- const getWeather = tool<{ city: string }, string>({
36
+ import { z } from "zod";
37
+
38
+ const getWeather = tool({
35
39
  type: "frontend",
36
40
  description: "Get the weather for a city.",
37
- parameters: {
38
- type: "object",
39
- properties: { city: { type: "string" } },
40
- required: ["city"],
41
- },
41
+ parameters: z.object({ city: z.string() }),
42
42
  execute: async ({ city }) => `Sunny in ${city}`,
43
43
  });
44
44
  ```
@@ -84,7 +84,10 @@ type Toolkit = Record<string, ToolDefinition<any, any>>;
84
84
 
85
85
  ### defineMcpToolkit
86
86
 
87
- Defines MCP server tools as a spreadable toolkit fragment.
87
+ Defines MCP server tools as a spreadable toolkit fragment. Pass a raw
88
+ `McpServerConfig` for always-on servers, or `{ server, disabled, tools }`
89
+ when a server should stay configured but not expose all tools for the current
90
+ request.
88
91
 
89
92
  <ParametersTable {...defineMcpToolkit} />
90
93
 
@@ -63,6 +63,10 @@ Takes the current part state and a `smooth` argument: `false` disables,
63
63
  the reveal. Returns the part state with `text` replaced by the revealed
64
64
  prefix and `status` reporting `running` until the reveal catches up.
65
65
 
66
+ The reveal auto-disables under `prefers-reduced-motion: reduce`,
67
+ committing the full text immediately; this takes precedence over an
68
+ explicit `smooth={true}`.
69
+
66
70
  ```tsx
67
71
  const { text, status } = useSmooth(useMessagePartText(), {
68
72
  drainMs: 500,
@@ -340,7 +340,7 @@ export function Chat() {
340
340
  name: "history",
341
341
  type: "ThreadHistoryAdapter",
342
342
  description:
343
- "Adapter for loading and saving thread history. Used to restore previous messages when switching threads. The adapter must implement `withFormat` when used with AI SDK — see [Persisting Chat History](/docs/runtimes/ai-sdk/v6#persisting-chat-history).",
343
+ "Adapter for loading and saving thread history. Used to restore previous messages when switching threads. The adapter must implement `withFormat` when used with AI SDK — see [Persisting Chat History](/docs/runtimes/ai-sdk/v7#persisting-chat-history).",
344
344
  },
345
345
  ],
346
346
  },
@@ -358,6 +358,12 @@ export function Chat() {
358
358
  description:
359
359
  "Custom transport implementation. Defaults to AssistantChatTransport which sends requests to '/api/chat'.",
360
360
  },
361
+ {
362
+ name: "onResumeError",
363
+ type: "(error: unknown) => void",
364
+ description:
365
+ "Optional callback when useChatRuntime finds a pending resumable stream id but the automatic reconnect fails. Use it for a toast, telemetry, or retry UI; the stale stream id is still cleared.",
366
+ },
361
367
  ]}
362
368
  />
363
369
 
@@ -410,9 +410,11 @@ npx assistant-ui@latest add thread-list
410
410
  <Tab>
411
411
 
412
412
  ```sh
413
- npx shadcn@latest add https://r.assistant-ui.com/thread-list.json
413
+ npx shadcn@latest add @assistant-ui/thread-list
414
414
  ```
415
415
 
416
+ The `@assistant-ui` namespace resolves through the registry entry configured in [Manual Setup](/docs/installation#manual-setup).
417
+
416
418
  </Tab>
417
419
  <Tab>
418
420
 
@@ -547,6 +549,6 @@ For other authentication providers or custom implementations, see the [Cloud Aut
547
549
 
548
550
  ## Next Steps
549
551
 
550
- - Learn about [LangGraph runtime setup](/docs/runtimes/langgraph) for your application
552
+ - Learn about [LangGraph runtime setup](/docs/runtimes/langgraph/overview) for your application
551
553
  - Explore [ThreadListRuntime](/docs/api-reference/runtimes/thread-list-runtime) for advanced thread management
552
554
  - Check out the [LangGraph example](https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-langgraph) on GitHub
@@ -0,0 +1,108 @@
1
+ ---
2
+ title: ChatGPT Subscription
3
+ description: Run your assistant-ui app on your ChatGPT Plus or Pro subscription via Codex OAuth. Local development without an OpenAI API key.
4
+ platforms: ["react"]
5
+ ---
6
+
7
+ If you have a ChatGPT Plus or Pro subscription, you can run your assistant-ui app against it locally instead of paying per token with an API key. OpenAI's Codex CLI authenticates via OAuth and caches tokens on your machine; requests made with those tokens hit the Responses API endpoint at `chatgpt.com` and bill to your plan. The same mechanism powers Codex itself and a growing set of local agents.
8
+
9
+ This is a personal-use setup for apps running on your own machine. For anything deployed or shared, use an API key.
10
+
11
+ ## Log in with Codex
12
+
13
+ Authenticate once with the Codex CLI. The login flow runs OAuth in your browser and writes access and refresh tokens to `~/.codex/auth.json`:
14
+
15
+ ```sh
16
+ npx @openai/codex login
17
+ ```
18
+
19
+ Everything below reads that file; no environment variables or API keys are involved.
20
+
21
+ ## AI SDK route
22
+
23
+ The community AI SDK provider [`openai-oauth-provider`](https://github.com/EvanZhouDev/openai-oauth) picks up `~/.codex/auth.json` automatically, refreshes tokens as needed, and supports streaming, tool calls, and reasoning traces.
24
+
25
+ ```sh
26
+ npm install openai-oauth-provider
27
+ ```
28
+
29
+ In your chat route, swap `@ai-sdk/openai` for the OAuth provider. Starting from the default assistant-ui template route, only the model changes; `frontendTools` and the UI message stream response work as before:
30
+
31
+ ```ts title="/app/api/chat/route.ts" {10}
32
+ import { createOpenAIOAuth } from "openai-oauth-provider";
33
+ import { frontendTools } from "@assistant-ui/react-ai-sdk";
34
+ import {
35
+ type JSONSchema7,
36
+ streamText,
37
+ convertToModelMessages,
38
+ type UIMessage,
39
+ } from "ai";
40
+
41
+ const openai = createOpenAIOAuth();
42
+
43
+ export async function POST(req: Request) {
44
+ const {
45
+ messages,
46
+ system,
47
+ tools,
48
+ }: {
49
+ messages: UIMessage[];
50
+ system?: string;
51
+ tools?: Record<string, { description?: string; parameters: JSONSchema7 }>;
52
+ } = await req.json();
53
+
54
+ const result = streamText({
55
+ model: openai("gpt-5.3-codex"),
56
+ messages: await convertToModelMessages(messages),
57
+ system,
58
+ tools: {
59
+ ...frontendTools(tools ?? {}),
60
+ },
61
+ });
62
+
63
+ return result.toUIMessageStreamResponse({
64
+ sendReasoning: true,
65
+ });
66
+ }
67
+ ```
68
+
69
+ The provider discovers which models your plan includes (for example `gpt-5.4` and `gpt-5.3-codex`) from your ChatGPT account.
70
+
71
+ ## Eve agents
72
+
73
+ Eve's `defineAgent` accepts a provider-authored AI SDK `LanguageModel`, so the same provider drops into an eve agent config:
74
+
75
+ ```ts title="agent/agent.ts"
76
+ import { defineAgent } from "eve";
77
+ import { createOpenAIOAuth } from "openai-oauth-provider";
78
+
79
+ export default defineAgent({
80
+ model: createOpenAIOAuth()("gpt-5.3-codex"),
81
+ });
82
+ ```
83
+
84
+ ## OpenAI-compatible proxy
85
+
86
+ For stacks that take an OpenAI base URL rather than an AI SDK model, the same project publishes a sibling package, `openai-oauth`, whose CLI runs a local proxy:
87
+
88
+ ```sh
89
+ npx openai-oauth
90
+ # OpenAI-compatible endpoint ready at http://127.0.0.1:10531/v1
91
+ ```
92
+
93
+ Point any OpenAI-compatible client at that URL. No real API key is involved, but most clients require one at construction, so pass a placeholder:
94
+
95
+ ```ts
96
+ import { OpenAI } from "openai";
97
+
98
+ const openai = new OpenAI({
99
+ baseURL: "http://127.0.0.1:10531/v1",
100
+ apiKey: "unused",
101
+ });
102
+ ```
103
+
104
+ The proxy binds to `127.0.0.1` by default; keep it that way, since any caller that can reach the endpoint bills your subscription.
105
+
106
+ <Callout type="warn">
107
+ Your OAuth tokens live in `~/.codex/auth.json`, so this only works where that file exists. A deployed instance would bill every visitor to your subscription. `openai-oauth-provider` is an unofficial community package, available models depend on your ChatGPT plan, and OpenAI sanctions this auth flow for Codex tooling, so treat it as personal use.
108
+ </Callout>