@assistant-ui/mcp-docs-server 0.1.38 → 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 (207) 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 +27 -24
  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 +15 -8
  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 +25 -12
  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 +16 -10
  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 +17 -1
  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 +3 -1
  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 +10 -4
  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/observability/helicone.mdx +1 -1
  79. package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
  80. package/.docs/raw/docs/integrations/observability/langsmith.mdx +1 -1
  81. package/.docs/raw/docs/migrations/index.mdx +50 -0
  82. package/.docs/raw/docs/migrations/toolkit-tools.mdx +4 -2
  83. package/.docs/raw/docs/primitives/chain-of-thought.mdx +6 -1
  84. package/.docs/raw/docs/primitives/composer.mdx +16 -0
  85. package/.docs/raw/docs/primitives/selection-toolbar.mdx +25 -0
  86. package/.docs/raw/docs/react-native/primitives.mdx +23 -0
  87. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +124 -0
  88. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +10 -1
  89. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +13 -4
  90. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +11 -11
  91. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +5 -5
  92. package/.docs/raw/docs/runtimes/ai-sdk/{v6.mdx → v6-legacy.mdx} +8 -6
  93. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +717 -0
  94. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +1 -1
  95. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +1 -1
  96. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +10 -19
  97. package/.docs/raw/docs/runtimes/custom/external-store.mdx +1 -1
  98. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +2 -0
  99. package/.docs/raw/docs/runtimes/eve/overview.mdx +1 -1
  100. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +181 -0
  101. package/.docs/raw/docs/tools/backend.mdx +6 -3
  102. package/.docs/raw/docs/tools/defining-tools.mdx +7 -1
  103. package/.docs/raw/docs/tools/generative-ui.mdx +60 -2
  104. package/.docs/raw/docs/tools/mcp-apps.mdx +29 -11
  105. package/.docs/raw/docs/tools/mcp.mdx +100 -3
  106. package/.docs/raw/docs/tools/tool-ui.mdx +6 -4
  107. package/.docs/raw/docs/tools/user-managed-mcp.mdx +26 -3
  108. package/.docs/raw/docs/ui/accordion.mdx +16 -10
  109. package/.docs/raw/docs/ui/assistant-modal.mdx +8 -4
  110. package/.docs/raw/docs/ui/attachment.mdx +5 -1
  111. package/.docs/raw/docs/ui/badge.mdx +23 -12
  112. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +2 -2
  113. package/.docs/raw/docs/ui/model-selector.mdx +32 -2
  114. package/.docs/raw/docs/ui/select.mdx +22 -14
  115. package/.docs/raw/docs/ui/sources.mdx +1 -1
  116. package/.docs/raw/docs/ui/tabs.mdx +25 -14
  117. package/.docs/raw/docs/utilities/heat-graph.mdx +2 -2
  118. package/dist/constants.d.ts.map +1 -1
  119. package/dist/index.d.ts +0 -1
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +39 -0
  122. package/dist/index.js.map +1 -1
  123. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  124. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  125. package/dist/prompts/xulux-playground.d.ts +12 -0
  126. package/dist/prompts/xulux-playground.d.ts.map +1 -0
  127. package/dist/prompts/xulux-playground.js +33 -0
  128. package/dist/prompts/xulux-playground.js.map +1 -0
  129. package/dist/tools/docs.d.ts +2 -4
  130. package/dist/tools/docs.d.ts.map +1 -1
  131. package/dist/tools/docs.js +24 -8
  132. package/dist/tools/docs.js.map +1 -1
  133. package/dist/tools/examples.d.ts +2 -4
  134. package/dist/tools/examples.d.ts.map +1 -1
  135. package/dist/tools/examples.js +9 -6
  136. package/dist/tools/examples.js.map +1 -1
  137. package/dist/tools/resources.d.ts +0 -1
  138. package/dist/tools/resources.d.ts.map +1 -1
  139. package/dist/tools/search.d.ts +2 -5
  140. package/dist/tools/search.d.ts.map +1 -1
  141. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  142. package/dist/tools/tests/test-setup.js +5 -1
  143. package/dist/tools/tests/test-setup.js.map +1 -1
  144. package/dist/tools/xulux-templates.d.ts +72 -0
  145. package/dist/tools/xulux-templates.d.ts.map +1 -0
  146. package/dist/tools/xulux-templates.js +82 -0
  147. package/dist/tools/xulux-templates.js.map +1 -0
  148. package/dist/utils/cache.d.ts +5 -0
  149. package/dist/utils/cache.d.ts.map +1 -0
  150. package/dist/utils/cache.js +18 -0
  151. package/dist/utils/cache.js.map +1 -0
  152. package/dist/utils/logger.d.ts.map +1 -1
  153. package/dist/utils/mcp-format.d.ts +1 -0
  154. package/dist/utils/mcp-format.d.ts.map +1 -1
  155. package/dist/utils/mcp-format.js +7 -4
  156. package/dist/utils/mcp-format.js.map +1 -1
  157. package/dist/utils/mdx.d.ts.map +1 -1
  158. package/dist/utils/paths.d.ts +1 -1
  159. package/dist/utils/paths.d.ts.map +1 -1
  160. package/dist/utils/paths.js +3 -1
  161. package/dist/utils/paths.js.map +1 -1
  162. package/dist/utils/search.d.ts.map +1 -1
  163. package/dist/utils/security.d.ts.map +1 -1
  164. package/dist/xulux/catalog-client.d.ts +14 -0
  165. package/dist/xulux/catalog-client.d.ts.map +1 -0
  166. package/dist/xulux/catalog-client.js +67 -0
  167. package/dist/xulux/catalog-client.js.map +1 -0
  168. package/dist/xulux/fallback-catalog.d.ts +7 -0
  169. package/dist/xulux/fallback-catalog.d.ts.map +1 -0
  170. package/dist/xulux/fallback-catalog.js +47 -0
  171. package/dist/xulux/fallback-catalog.js.map +1 -0
  172. package/dist/xulux/fetch-sandbox.d.ts +5 -0
  173. package/dist/xulux/fetch-sandbox.d.ts.map +1 -0
  174. package/dist/xulux/fetch-sandbox.js +40 -0
  175. package/dist/xulux/fetch-sandbox.js.map +1 -0
  176. package/dist/xulux/template-service.d.ts +84 -0
  177. package/dist/xulux/template-service.d.ts.map +1 -0
  178. package/dist/xulux/template-service.js +223 -0
  179. package/dist/xulux/template-service.js.map +1 -0
  180. package/dist/xulux/types.d.ts +55 -0
  181. package/dist/xulux/types.d.ts.map +1 -0
  182. package/dist/xulux/types.js +6 -0
  183. package/dist/xulux/types.js.map +1 -0
  184. package/package.json +5 -5
  185. package/src/index.ts +53 -0
  186. package/src/prompts/xulux-playground.ts +36 -0
  187. package/src/tools/docs.ts +25 -3
  188. package/src/tools/examples.ts +15 -10
  189. package/src/tools/tests/docs.test.ts +20 -0
  190. package/src/tools/tests/examples.test.ts +5 -5
  191. package/src/tools/tests/listings-cache.test.ts +19 -0
  192. package/src/tools/tests/mcp-protocol.test.ts +81 -1
  193. package/src/tools/tests/test-setup.ts +8 -0
  194. package/src/tools/tests/xulux-templates.test.ts +262 -0
  195. package/src/tools/xulux-templates.ts +141 -0
  196. package/src/utils/cache.ts +20 -0
  197. package/src/utils/mcp-format.ts +8 -6
  198. package/src/utils/paths.ts +4 -1
  199. package/src/utils/tests/cache.test.ts +51 -0
  200. package/src/utils/tests/mcp-format.test.ts +22 -0
  201. package/src/utils/tests/security.test.ts +1 -1
  202. package/src/xulux/catalog-client.ts +105 -0
  203. package/src/xulux/fallback-catalog.ts +63 -0
  204. package/src/xulux/fetch-sandbox.ts +56 -0
  205. package/src/xulux/template-service.ts +406 -0
  206. package/src/xulux/types.ts +60 -0
  207. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +0 -464
@@ -9,7 +9,7 @@ import { VercelIcon } from "@/components/icons/vercel";
9
9
  [Mastra](https://mastra.ai/) is an open-source TypeScript agent framework. It provides primitives for AI applications: agents with memory and tool calling, deterministic LLM workflows, RAG, model routing, workflow graphs, and automated evals.
10
10
 
11
11
  <Callout type="info">
12
- This is an integration guide, not a runtime adapter. assistant-ui does not ship a `@assistant-ui/react-mastra` package. You wire up Mastra through the standard [AI SDK runtime](/docs/runtimes/ai-sdk/v6) by routing your API endpoint through Mastra's agent stream.
12
+ This is an integration guide, not a runtime adapter. assistant-ui does not ship a `@assistant-ui/react-mastra` package. You wire up Mastra through the standard [AI SDK runtime](/docs/runtimes/ai-sdk/v7) by routing your API endpoint through Mastra's agent stream.
13
13
  </Callout>
14
14
 
15
15
  ## Pick a pattern
@@ -19,7 +19,7 @@ This is an integration guide, not a runtime adapter. assistant-ui does not ship
19
19
  | [Full-stack](/docs/integrations/frameworks/mastra/full-stack) | One Next.js app: API routes call Mastra in-process. Simpler deployment, single repo. |
20
20
  | [Separate server](/docs/integrations/frameworks/mastra/separate-server) | Mastra runs as its own service; the Next.js frontend hits its API. Independent scaling, clearer separation of concerns. |
21
21
 
22
- Both use the same client-side `useChatRuntime` from [`@assistant-ui/react-ai-sdk`](/docs/runtimes/ai-sdk/v6). The only difference is where the Mastra agent lives.
22
+ Both use the same client-side `useChatRuntime` from [`@assistant-ui/react-ai-sdk`](/docs/runtimes/ai-sdk/v7). The only difference is where the Mastra agent lives.
23
23
 
24
24
  ## Architecture
25
25
 
@@ -52,6 +52,6 @@ Shared adapters (attachments, speech, feedback, history) work the same way descr
52
52
  icon={<VercelIcon width={20} height={20} />}
53
53
  title="AI SDK runtime"
54
54
  description="The runtime that handles the client side of this integration."
55
- href="/docs/runtimes/ai-sdk/v6"
55
+ href="/docs/runtimes/ai-sdk/v7"
56
56
  />
57
57
  </Cards>
@@ -196,6 +196,6 @@ Open `http://localhost:3000`, send a message, and confirm:
196
196
  icon={<VercelIcon width={20} height={20} />}
197
197
  title="AI SDK runtime"
198
198
  description="The runtime that handles the client side of this integration."
199
- href="/docs/runtimes/ai-sdk/v6"
199
+ href="/docs/runtimes/ai-sdk/v7"
200
200
  />
201
201
  </Cards>
@@ -8,7 +8,7 @@ import { VercelIcon } from "@/components/icons/vercel";
8
8
 
9
9
  LLM gateways sit between your route handler and the upstream provider. They give you a single endpoint that fronts many providers, plus features like multi-provider fallback, prompt caching, and BYOK (bring-your-own-key) flows. Most are OpenAI API-compatible, so the integration is a `baseURL` swap on `createOpenAI` from `@ai-sdk/openai`.
10
10
 
11
- For pure observability (proxy that logs every call) see [Helicone](/docs/integrations/observability/helicone). The gateways here overlap in spirit but are positioned around routing rather than logging.
11
+ For pure observability (proxy that logs every call) see [Helicone](/docs/integrations/observability/helicone). The gateways here overlap in spirit but are positioned around routing rather than logging. For local personal projects there is also a keyless option in the same `baseURL`-swap shape: a local OAuth proxy billed to your ChatGPT subscription; see [ChatGPT Subscription](/docs/guides/chatgpt-subscription).
12
12
 
13
13
  ## Compare
14
14
 
@@ -157,6 +157,6 @@ When to pick: self-host requirement, BYOK metering for end-users, or unified bil
157
157
  icon={<VercelIcon width={20} height={20} />}
158
158
  title="AI SDK runtime"
159
159
  description="The runtime that ferries gateway responses to the chat UI."
160
- href="/docs/runtimes/ai-sdk/v6"
160
+ href="/docs/runtimes/ai-sdk/v7"
161
161
  />
162
162
  </Cards>
@@ -124,6 +124,6 @@ If nothing appears, check the request in your network tab. The host should be `o
124
124
  icon={<VercelIcon width={20} height={20} />}
125
125
  title="AI SDK runtime"
126
126
  description="The most common pairing: AI SDK route handler proxied through Helicone."
127
- href="/docs/runtimes/ai-sdk/v6"
127
+ href="/docs/runtimes/ai-sdk/v7"
128
128
  />
129
129
  </Cards>
@@ -156,6 +156,6 @@ If nothing appears, check the server logs for OTel errors and confirm `LANGFUSE_
156
156
  icon={<VercelIcon width={20} height={20} />}
157
157
  title="AI SDK runtime"
158
158
  description="The runtime that emits the telemetry Langfuse consumes."
159
- href="/docs/runtimes/ai-sdk/v6"
159
+ href="/docs/runtimes/ai-sdk/v7"
160
160
  />
161
161
  </Cards>
@@ -146,6 +146,6 @@ Send a message. The trace should appear in your LangSmith project within seconds
146
146
  icon={<VercelIcon width={20} height={20} />}
147
147
  title="AI SDK runtime"
148
148
  description="The runtime that ferries traces from the route to the chat UI."
149
- href="/docs/runtimes/ai-sdk/v6"
149
+ href="/docs/runtimes/ai-sdk/v7"
150
150
  />
151
151
  </Cards>
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: Migration Guides
3
+ description: Upgrade assistant-ui versions and migrate deprecated APIs and integrations.
4
+ ---
5
+
6
+ Use these guides when upgrading assistant-ui or moving from APIs that have been deprecated or replaced.
7
+
8
+ ## Version upgrades
9
+
10
+ <Cards>
11
+ <Card title="Migration to v0.14" href="/docs/migrations/v0-14">
12
+ Replace APIs removed after v0.11 and v0.12, and migrate primitive
13
+ `components` props to children render functions.
14
+ </Card>
15
+ <Card title="Migration to v0.12" href="/docs/migrations/v0-12">
16
+ Move from individual context hooks to the unified state API.
17
+ </Card>
18
+ <Card title="Migration to v0.11" href="/docs/migrations/v0-11">
19
+ Update code affected by the `ContentPart` to `MessagePart` rename.
20
+ </Card>
21
+ </Cards>
22
+
23
+ ## APIs and integrations
24
+
25
+ <Cards>
26
+ <Card title="Migrating Tools to Toolkits" href="/docs/migrations/toolkit-tools">
27
+ Move legacy tool and tool UI registrations to the toolkit API.
28
+ </Card>
29
+ <Card
30
+ title="Migrating to react-langgraph v0.7"
31
+ href="/docs/migrations/react-langgraph-v0-7"
32
+ >
33
+ Upgrade to the simplified LangGraph integration API.
34
+ </Card>
35
+ <Card
36
+ title="Using old React versions"
37
+ href="/docs/migrations/react-compatibility"
38
+ >
39
+ Review compatibility notes for React 18 and React 19.
40
+ </Card>
41
+ </Cards>
42
+
43
+ ## Stability
44
+
45
+ <Cards>
46
+ <Card title="Deprecation Policy" href="/docs/migrations/deprecation-policy">
47
+ Review stability guarantees and deprecation timelines for assistant-ui
48
+ features.
49
+ </Card>
50
+ </Cards>
@@ -32,7 +32,7 @@ const WeatherTool = makeAssistantTool({
32
32
  });
33
33
 
34
34
  export function App() {
35
- const runtime = useChatRuntime({ api: "/api/chat" });
35
+ const runtime = useChatRuntime();
36
36
 
37
37
  return (
38
38
  <AssistantRuntimeProvider runtime={runtime}>
@@ -80,7 +80,7 @@ import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
80
80
  import toolkit from "./toolkit";
81
81
 
82
82
  export function App() {
83
- const runtime = useChatRuntime({ api: "/api/chat" });
83
+ const runtime = useChatRuntime();
84
84
  const aui = useAui({
85
85
  tools: Tools({ toolkit }),
86
86
  });
@@ -93,6 +93,8 @@ export function App() {
93
93
  }
94
94
  ```
95
95
 
96
+ `useChatRuntime()` targets `/api/chat` by default. To point at a different endpoint or customize requests, see [Custom transport](/docs/runtimes/ai-sdk/v7#custom-transport).
97
+
96
98
  ## Mechanical Steps
97
99
 
98
100
  1. Create a `Toolkit` object.
@@ -5,6 +5,8 @@ platforms: ["react"]
5
5
  ---
6
6
 
7
7
  import { ChainOfThoughtPrimitiveSample } from "@/components/docs/samples/chain-of-thought-primitive";
8
+ import { ChainOfThoughtPrimitiveSample as ChainOfThoughtPrimitiveSampleRadix } from "@/components/docs/samples/chain-of-thought-primitive.radix";
9
+ import { Flavored } from "@/components/docs/contexts/flavor.server";
8
10
  import {
9
11
  ChainOfThoughtPrimitive as ChainOfThoughtPrimitiveDocs,
10
12
  MessagePrimitive as MessagePrimitiveDocs,
@@ -18,7 +20,10 @@ For new grouped reasoning/tool-call UI, use `MessagePrimitive.GroupedParts`. `Ch
18
20
 
19
21
  <Tabs items={["Preview", "Code"]}>
20
22
  <Tab>
21
- <ChainOfThoughtPrimitiveSample />
23
+ <Flavored
24
+ base={<ChainOfThoughtPrimitiveSample />}
25
+ radix={<ChainOfThoughtPrimitiveSampleRadix />}
26
+ />
22
27
  </Tab>
23
28
  <Tab>
24
29
  ```tsx
@@ -165,6 +165,22 @@ Form container for message composition. Renders a `<form>` element unless `asChi
165
165
  </ComposerPrimitive.Root>
166
166
  ```
167
167
 
168
+ #### Compact Mode
169
+
170
+ Pass `compact` to opt into compact detection. While the input holds at most a single line of text and the composer has no attachments, quote, queued messages, or active dictation, the root renders a `data-compact` attribute. The prop only exposes this attribute for styling — it does not change the layout by itself. Target it with CSS to collapse the composer into a single row:
171
+
172
+ ```tsx
173
+ <ComposerPrimitive.Root
174
+ compact
175
+ className="group/composer flex flex-col data-[compact]:flex-row data-[compact]:items-center"
176
+ >
177
+ <ComposerPrimitive.Input placeholder="Ask anything..." />
178
+ <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
179
+ </ComposerPrimitive.Root>
180
+ ```
181
+
182
+ Once the text wraps onto a second line, the composer expands and stays expanded until the input is cleared, so the layout doesn't oscillate at the wrap boundary.
183
+
168
184
  ### Input
169
185
 
170
186
  Text input with keyboard shortcuts. Renders a `<textarea>` element unless `asChild` is set.
@@ -63,6 +63,31 @@ The toolbar only appears when the selection is entirely within a single message.
63
63
 
64
64
  `Root` returns `null` when there is no valid selection (collapsed selection, empty text, or no single-message match).
65
65
 
66
+ ### Quote Regions
67
+
68
+ By default, any selected text inside a message can be quoted. For rich messages with tool cards, attachments, or custom controls, add `data-aui-quote-selectable` to the element that contains the message text. Once a message has a quote-selectable region, selections must stay inside the same marked region for the toolbar to appear.
69
+
70
+ ```tsx
71
+ <MessagePrimitive.Root>
72
+ <div data-aui-quote-selectable="">
73
+ <MessagePrimitive.Parts />
74
+ </div>
75
+ <ToolCard />
76
+ </MessagePrimitive.Root>
77
+ ```
78
+
79
+ Set `data-aui-quote-selectable="false"` to exclude an element instead: on the message root it disables quoting for the entire message, and inside a quotable region it carves that subtree out. The nearest marker wins, and any value other than `"false"` (including empty) marks a quotable region.
80
+
81
+ Apps know the message role at render time, so a role gate is a conditional attribute:
82
+
83
+ ```tsx
84
+ const UserMessage = () => (
85
+ <MessagePrimitive.Root data-aui-quote-selectable="false">
86
+ <MessagePrimitive.Parts />
87
+ </MessagePrimitive.Root>
88
+ );
89
+ ```
90
+
66
91
  ### Quote Action
67
92
 
68
93
  The `Quote` button does two things on click:
@@ -362,6 +362,29 @@ Renders message content parts using render-prop functions instead of the compone
362
362
  | `renderFile` | `(props: { part, index }) => ReactElement` | Renderer for file parts |
363
363
  | `renderData` | `(props: { part, index }) => ReactElement` | Fallback renderer for data parts not handled by registered data UIs |
364
364
 
365
+ #### Rendering Markdown
366
+
367
+ `MessagePrimitive.Content` renders text parts with React Native's `<Text>` by default, so markdown syntax is displayed as plain text. To render markdown, install a React Native markdown renderer and pass it through `renderText`:
368
+
369
+ <InstallCommand npm={["react-native-markdown-display"]} />
370
+
371
+ ```tsx
372
+ import Markdown from "react-native-markdown-display";
373
+ import { MessagePrimitive } from "@assistant-ui/react-native";
374
+
375
+ const AssistantMessage = () => {
376
+ return (
377
+ <MessagePrimitive.Root>
378
+ <MessagePrimitive.Content
379
+ renderText={({ part }) => (
380
+ <Markdown>{part.text}</Markdown>
381
+ )}
382
+ />
383
+ </MessagePrimitive.Root>
384
+ );
385
+ };
386
+ ```
387
+
365
388
  ### MessagePrimitive.Parts
366
389
 
367
390
  Renders message content parts via a `components` prop. Tool call and data parts automatically render registered toolkit renderers and data UIs (via `useAssistantDataUI`), falling back to components provided here. A default `Text` component using React Native's `<Text>` is provided out of the box.
@@ -0,0 +1,124 @@
1
+ ---
2
+ title: Agent state
3
+ description: Read and optimistically update agent-owned state with useAgUiState and useAgUiSetState over AG-UI.
4
+ ---
5
+
6
+ `useAgUiState` mirrors the state your AG-UI agent owns. It updates live while the agent runs. `useAgUiSetState` lets you apply optimistic local updates that are sent with the next run.
7
+
8
+ ## Basic usage
9
+
10
+ ```tsx
11
+ import { useAgUiState, useAgUiSetState } from "@assistant-ui/react-ag-ui";
12
+ import { useAuiState } from "@assistant-ui/react";
13
+
14
+ type ResearchState = {
15
+ topic: string;
16
+ sources: string[];
17
+ };
18
+
19
+ const state = useAgUiState<ResearchState>();
20
+ // state: ResearchState | undefined (latest agent state; updates live while the agent runs)
21
+
22
+ const setState = useAgUiSetState<ResearchState>();
23
+ // setState(next | (prev) => next) (optimistic local update; sent with the NEXT run)
24
+
25
+ const isRunning = useAuiState((s) => s.thread.isRunning);
26
+ // isRunning: boolean (whether the thread is currently running)
27
+ ```
28
+
29
+ ## Example
30
+
31
+ Render agent state beside the chat and push an optimistic update from a control in your UI:
32
+
33
+ ```tsx
34
+ "use client";
35
+
36
+ import { useAgUiState, useAgUiSetState } from "@assistant-ui/react-ag-ui";
37
+ import { useAuiState } from "@assistant-ui/react";
38
+ import { Thread } from "@/components/assistant-ui/thread";
39
+
40
+ type ResearchState = {
41
+ topic: string;
42
+ sources: string[];
43
+ };
44
+
45
+ export function ResearchAssistant() {
46
+ const state = useAgUiState<ResearchState>();
47
+ const setState = useAgUiSetState<ResearchState>();
48
+ const isRunning = useAuiState((s) => s.thread.isRunning);
49
+
50
+ return (
51
+ <div className="flex h-full">
52
+ <aside className="w-72 border-r p-4">
53
+ <h2>Research state</h2>
54
+ {state ? (
55
+ <ul>
56
+ <li>Topic: {state.topic}</li>
57
+ <li>Sources: {state.sources.join(", ") || "none"}</li>
58
+ </ul>
59
+ ) : (
60
+ <p>No agent state yet.</p>
61
+ )}
62
+ <button
63
+ type="button"
64
+ disabled={isRunning}
65
+ onClick={() =>
66
+ setState((prev) => ({
67
+ topic: prev?.topic ?? "market analysis",
68
+ sources: [...(prev?.sources ?? []), "sec-filings"],
69
+ }))
70
+ }
71
+ >
72
+ Prefer SEC filings
73
+ </button>
74
+ {isRunning && <p>Agent is running…</p>}
75
+ </aside>
76
+ <main className="flex-1">
77
+ <Thread />
78
+ </main>
79
+ </div>
80
+ );
81
+ }
82
+ ```
83
+
84
+ The panel re-renders as `STATE_SNAPSHOT` and `STATE_DELTA` events arrive. The button updates the local snapshot immediately; that value is included as the `state` field of the next run input.
85
+
86
+ ## How state is synced
87
+
88
+ The AG-UI protocol delivers agent state on the wire:
89
+
90
+ - `STATE_SNAPSHOT` replaces the full client-side snapshot.
91
+ - `STATE_DELTA` applies a JSON Patch to the current snapshot.
92
+
93
+ The runtime applies both client-side, so `useAgUiState` always reflects the latest merged snapshot. Calling the setter from `useAgUiSetState` updates that same local snapshot. On the next run, the runtime automatically includes it as the `state` field of the run input.
94
+
95
+ This works with any AG-UI agent (Mastra, Pydantic AI, CrewAI, LangGraph via AG-UI adapters, and other AG-UI-compliant servers).
96
+
97
+ ## Write-back timing
98
+
99
+ `useAgUiSetState` is optimistic and local first. The value reaches the agent only when the next run starts. It is not a live channel into a run that is already in progress. Use it to stage preferences, filters, or other agent-owned fields that the next turn should see.
100
+
101
+ ## Relationship to other state
102
+
103
+ Keep the three state layers distinct:
104
+
105
+ - **Your app state** stays yours (React state, URL, a store). assistant-ui does not own it.
106
+ - **`useAuiState`** reads assistant-ui's client state (messages, composer, thread status).
107
+ - **`useAgUiState` / `useAgUiSetState`** mirror state the **agent** owns, synced over the AG-UI wire via snapshots and deltas.
108
+
109
+ Use `useAgUiState` and `useAgUiSetState` for fields your agent maintains as shared state on the protocol. Use `useAuiState` for UI that depends on the chat thread itself. Use your own state for everything else.
110
+
111
+ ## Next
112
+
113
+ <Cards>
114
+ <Card
115
+ title="Runtime options"
116
+ description="useAgUiRuntime options, adapters, supported events."
117
+ href="/docs/runtimes/ag-ui/runtime-options"
118
+ />
119
+ <Card
120
+ title="Quickstart"
121
+ description="Minimal HttpAgent + useAgUiRuntime setup."
122
+ href="/docs/runtimes/ag-ui/quickstart"
123
+ />
124
+ </Cards>
@@ -14,6 +14,7 @@ Reference for the runtime's API surface. Start with [quickstart](/docs/runtimes/
14
14
  | `agent` | `HttpAgent` | An AG-UI client agent (from `@ag-ui/client`). Required. |
15
15
  | `logger` | `Partial<Logger>` | Optional logger overrides. The runtime logs event-parser warnings and run lifecycle events. |
16
16
  | `showThinking` | `boolean` | Whether to render `THINKING_*` and `REASONING_*` events as visible reasoning. Defaults to `true`. |
17
+ | `autoCancelPendingToolCalls` | `boolean` | Cancel unresolved client-side tool calls automatically when the user sends, edits, or reloads a message. Defaults to `true`. See [below](#auto-cancelling-pending-tool-calls). |
17
18
  | `onError` | `(e: Error) => void` | Error callback fired on `RUN_ERROR` events and protocol errors. |
18
19
  | `onCancel` | `() => void` | Cancellation callback fired when the user cancels a run. |
19
20
  | `adapters` | `UseAgUiRuntimeAdapters` | Standard adapter slots (see below). |
@@ -137,7 +138,9 @@ await runtime.unstable_submitInterruptResponses(
137
138
 
138
139
  ### Steering away from an interrupt
139
140
 
140
- When the user ignores the interrupt UI and just sends a new message, use the `useAgUiSteerAway` hook. Every open interrupt defaults to `status: "cancelled"`, the new message is appended, and the run resumes with `resume: ResumeEntry[]` on the wire. With no pending interrupts it behaves like a normal append.
141
+ When the user ignores the interrupt UI and just sends a new message, use the `useAgUiSteerAway` hook. Every open interrupt defaults to `status: "cancelled"`, the new message is appended, and the run resumes with `resume: ResumeEntry[]` on the wire.
142
+
143
+ The same hook also steers away from pending client-side tool calls. When the head assistant message is in `requires-action` with `reason: "tool-calls"` (frontend tools awaiting a result) and the user sends a new message, every unresolved tool call is cancelled with an error result, the message is completed, and a single fresh run starts with those cancellations in its history. Passing `responses` in this case throws, since responses only address interrupts. With nothing pending, `steerAway` behaves like a normal append.
141
144
 
142
145
  ```tsx
143
146
  const steerAway = useAgUiSteerAway();
@@ -154,6 +157,12 @@ await steerAway("continue without the file", [
154
157
  ]);
155
158
  ```
156
159
 
160
+ ### Auto-cancelling pending tool calls
161
+
162
+ By default the runtime does the tool-call half of this automatically: when client-side tool calls are still unresolved and the user sends a new message, edits an earlier one, or reloads, every unresolved tool call receives the same cancellation error result, the assistant message is completed, and the run proceeds with those cancellations in its history. Set `autoCancelPendingToolCalls: false` to opt out, in which case pending tool calls stay unresolved on a plain send and [steering away](#steering-away-from-an-interrupt) remains the explicit way to cancel them.
163
+
164
+ Pending interrupts are never auto-cancelled: sending while an interrupt is open still throws, and the interrupt must be answered with `useAgUiSubmitInterruptResponses` or discarded with `useAgUiSteerAway`.
165
+
157
166
  ## Supported events
158
167
 
159
168
  The runtime parses the AG-UI event stream and maps each event type to assistant-ui state.
@@ -11,16 +11,19 @@ import { VercelIcon } from "@/components/icons/vercel";
11
11
 
12
12
  | AI SDK | Runtime package | Docs |
13
13
  | --- | --- | --- |
14
- | `ai@^6` + `@ai-sdk/react@^3` | `@assistant-ui/react-ai-sdk` (latest) | [v6 (current)](/docs/runtimes/ai-sdk/v6) |
14
+ | `ai@^7` + `@ai-sdk/react@^4` | `@assistant-ui/react-ai-sdk` (latest) | [v7 (current)](/docs/runtimes/ai-sdk/v7) |
15
+ | `ai@^6` + `@ai-sdk/react@^3` | `@assistant-ui/react-ai-sdk@1.x` | [v6 (legacy)](/docs/runtimes/ai-sdk/v6-legacy) |
15
16
  | `ai@^5` + `@ai-sdk/react@^2` | `@assistant-ui/react-ai-sdk@0.x` | [v5 (legacy)](/docs/runtimes/ai-sdk/v5-legacy) |
16
17
  | `ai@^4` | `@assistant-ui/react-data-stream` | [v4 (legacy)](/docs/runtimes/ai-sdk/v4-legacy) |
17
18
 
18
- New projects should target v6. v5 and v4 are documented for projects that have not migrated yet; both have known compatibility gaps and receive no new features.
19
+ New projects should target v7. v6, v5, and v4 are documented for projects that have not migrated yet; all have known compatibility gaps and receive no new features.
19
20
 
20
21
  ## Architecture
21
22
 
22
23
  `@assistant-ui/react-ai-sdk` is layered on `ExternalStoreRuntime` (see [architecture](/docs/runtimes/concepts/architecture)). Features that ship as runtime adapters work the same way they do everywhere else; see [adapters](/docs/runtimes/concepts/adapters).
23
24
 
25
+ For reload-safe streaming (persist an in-flight response so the client can reconnect), see [Resumable Streams](/docs/guides/resumable-streams).
26
+
24
27
  ## Choosing useChatRuntime vs useAISDKRuntime
25
28
 
26
29
  Both ship in the same package.
@@ -33,9 +36,15 @@ Both ship in the same package.
33
36
  <Cards>
34
37
  <Card
35
38
  icon={<VercelIcon width={20} height={20} />}
36
- title="v6 (current)"
39
+ title="v7 (current)"
37
40
  description="Quickstart, frontend tools, attachments, quotes, history, multi-step, useAISDKRuntime."
38
- href="/docs/runtimes/ai-sdk/v6"
41
+ href="/docs/runtimes/ai-sdk/v7"
42
+ />
43
+ <Card
44
+ icon={<VercelIcon width={20} height={20} />}
45
+ title="v6 (legacy)"
46
+ description="Reference for projects still on AI SDK v6."
47
+ href="/docs/runtimes/ai-sdk/v6-legacy"
39
48
  />
40
49
  <Card
41
50
  icon={<VercelIcon width={20} height={20} />}
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  title: AI SDK v4 (legacy)
3
- description: Reference for projects still on AI SDK v4. New projects should use v6.
3
+ description: Reference for projects still on AI SDK v4. New projects should use v7.
4
4
  ---
5
5
 
6
6
  import { VercelIcon } from "@/components/icons/vercel";
7
7
 
8
8
  <Callout type="warn">
9
- AI SDK v4 is a legacy version. New projects should use [AI SDK v6](/docs/runtimes/ai-sdk/v6). v4 integrations use the older `@assistant-ui/react-data-stream` package, not `@assistant-ui/react-ai-sdk`.
9
+ AI SDK v4 is a legacy version. New projects should use [AI SDK v7](/docs/runtimes/ai-sdk/v7). v4 integrations use the older `@assistant-ui/react-data-stream` package, not `@assistant-ui/react-ai-sdk`.
10
10
  </Callout>
11
11
 
12
12
  ## Why legacy
@@ -53,10 +53,7 @@ import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
53
53
  import { Thread } from "@/components/assistant-ui/thread";
54
54
 
55
55
  export default function Home() {
56
- const runtime = useDataStreamRuntime({
57
- api: "/api/chat",
58
- protocol: "data-stream",
59
- });
56
+ const runtime = useDataStreamRuntime({ api: "/api/chat" });
60
57
  return (
61
58
  <AssistantRuntimeProvider runtime={runtime}>
62
59
  <div className="h-full">
@@ -67,7 +64,10 @@ export default function Home() {
67
64
  }
68
65
  ```
69
66
 
70
- AI SDK v4's `toDataStreamResponse()` emits the data stream wire format, so `protocol: "data-stream"` is required to pair with it; the default `protocol: "ui-message-stream"` expects the SSE format introduced in AI SDK v6.
67
+ AI SDK v4's `toDataStreamResponse()` emits the data stream wire format with the
68
+ `x-vercel-ai-data-stream: v1` response header, so `useDataStreamRuntime`
69
+ detects it automatically. If a custom proxy strips or hides that header, pass
70
+ `protocol: "data-stream"` explicitly.
71
71
 
72
72
  </Step>
73
73
  </Steps>
@@ -85,12 +85,12 @@ AI SDK v4's `toDataStreamResponse()` emits the data stream wire format, so `prot
85
85
  | Tool schema | `parameters: z.object({...})` | `inputSchema: zodSchema(z.object({...}))` |
86
86
  | Message type | (untyped) | `UIMessage` |
87
87
 
88
- ## Migration to v6
88
+ ## Migration to v7
89
89
 
90
90
  When you are ready to upgrade:
91
91
 
92
92
  1. Swap `@assistant-ui/react-data-stream` for `@assistant-ui/react-ai-sdk`.
93
- 2. Update your backend to AI SDK v6's `streamText` (see [v6 docs](/docs/runtimes/ai-sdk/v6)).
93
+ 2. Update your backend to the current AI SDK's `streamText` (see [v7 docs](/docs/runtimes/ai-sdk/v7)).
94
94
  3. Switch the runtime hook from `useDataStreamRuntime` to `useChatRuntime`.
95
95
 
96
96
  AI SDK provides codemods at [ai-sdk.dev/docs/migration-guides](https://ai-sdk.dev/docs/migration-guides) that handle the package-side rewrites.
@@ -104,9 +104,9 @@ An older release line of `@assistant-ui/react-ai-sdk` (0.1.10) supported AI SDK
104
104
  <Cards>
105
105
  <Card
106
106
  icon={<VercelIcon width={20} height={20} />}
107
- title="AI SDK v6"
107
+ title="AI SDK v7"
108
108
  description="Current integration; what new projects should target."
109
- href="/docs/runtimes/ai-sdk/v6"
109
+ href="/docs/runtimes/ai-sdk/v7"
110
110
  />
111
111
  <Card
112
112
  title="Data Stream Protocol"
@@ -1,19 +1,19 @@
1
1
  ---
2
2
  title: AI SDK v5 (legacy)
3
- description: Reference for projects still on AI SDK v5. New projects should use v6.
3
+ description: Reference for projects still on AI SDK v5. New projects should use v7.
4
4
  ---
5
5
 
6
6
  import { VercelIcon } from "@/components/icons/vercel";
7
7
 
8
8
  <Callout type="warn">
9
- AI SDK v5 is a legacy version. New projects should use [AI SDK v6](/docs/runtimes/ai-sdk/v6). v5 users stay on `@assistant-ui/react-ai-sdk@0.x`; the latest line targets v6+.
9
+ AI SDK v5 is a legacy version. New projects should use [AI SDK v7](/docs/runtimes/ai-sdk/v7). v5 users stay on `@assistant-ui/react-ai-sdk@0.x`; the latest line targets v7+.
10
10
  </Callout>
11
11
 
12
12
  ## Why legacy
13
13
 
14
14
  AI SDK v6 introduced major API changes: async `convertToModelMessages`, a new tool schema, and `toUIMessageStreamResponse()`. v5 still works but no longer receives new features in `@assistant-ui/react-ai-sdk`. Pinning to `@0.x` keeps you on the v5-compatible surface.
15
15
 
16
- This page is reference for existing v5 projects. Plan to migrate to v6 when feasible.
16
+ This page is reference for existing v5 projects. Plan to migrate to v7 when feasible.
17
17
 
18
18
  ## Setup
19
19
 
@@ -122,9 +122,9 @@ AI SDK provides codemods at [ai-sdk.dev/docs/migration-guides/migration-guide-6-
122
122
  <Cards>
123
123
  <Card
124
124
  icon={<VercelIcon width={20} height={20} />}
125
- title="AI SDK v6"
125
+ title="AI SDK v7"
126
126
  description="Current integration; what new projects should target."
127
- href="/docs/runtimes/ai-sdk/v6"
127
+ href="/docs/runtimes/ai-sdk/v7"
128
128
  />
129
129
  <Card
130
130
  icon={<VercelIcon width={20} height={20} />}
@@ -1,9 +1,13 @@
1
1
  ---
2
- title: AI SDK v6
3
- description: Integrate Vercel AI SDK v6 with assistant-ui for streaming chat.
2
+ title: AI SDK v6 (legacy)
3
+ description: Reference for projects still on AI SDK v6. New projects should use v7.
4
4
  ---
5
5
 
6
- Current-version integration. Requires `ai@^6` and `@ai-sdk/react@^3`. For older versions see the [overview](/docs/runtimes/ai-sdk/overview).
6
+ <Callout type="warn">
7
+ AI SDK v6 is a legacy version. New projects should use [AI SDK v7](/docs/runtimes/ai-sdk/v7). v6 users stay on `@assistant-ui/react-ai-sdk@1.x`; the latest line targets v7+.
8
+ </Callout>
9
+
10
+ Requires `ai@^6` and `@ai-sdk/react@^3`. For other versions see the [overview](/docs/runtimes/ai-sdk/overview).
7
11
 
8
12
  ## Quickstart
9
13
 
@@ -332,7 +336,6 @@ import { Thread } from "@/components/assistant-ui/thread";
332
336
 
333
337
  export default function Page() {
334
338
  const chat = useChat({
335
- api: "/api/chat",
336
339
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
337
340
  });
338
341
  const runtime = useAISDKRuntime(chat);
@@ -391,7 +394,6 @@ const toolkit = defineToolkit({
391
394
 
392
395
  export default function Page() {
393
396
  const chat = useChat({
394
- api: "/api/chat",
395
397
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
396
398
  });
397
399
  const runtime = useAISDKRuntime(chat);
@@ -610,7 +612,7 @@ const runtime = useAISDKRuntime(chat);
610
612
 
611
613
  ## Example
612
614
 
613
- [`examples/with-ai-sdk-v6`](https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-ai-sdk-v6) shows a complete reference implementation.
615
+ The maintained example targets v7: [`examples/with-ai-sdk-v7`](https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-ai-sdk-v7). The last v6 revision of that example lives in the repository history alongside the `@assistant-ui/react-ai-sdk` 1.x releases.
614
616
 
615
617
  For responses that should survive a page reload mid-stream, see [Resumable streams](/docs/guides/resumable-streams), which wraps the same v6 byte stream in `assistant-stream/resumable`.
616
618