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

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 (247) hide show
  1. package/.docs/organized/code-examples/waterfall.md +8 -8
  2. package/.docs/organized/code-examples/with-a2a.md +10 -10
  3. package/.docs/organized/code-examples/with-ag-ui.md +11 -11
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +13 -13
  5. package/.docs/organized/code-examples/with-artifacts.md +13 -13
  6. package/.docs/organized/code-examples/with-assistant-transport.md +10 -10
  7. package/.docs/organized/code-examples/with-browser-extension.md +345 -0
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +54 -17
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +13 -13
  10. package/.docs/organized/code-examples/with-cloud.md +13 -13
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +13 -13
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -16
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +17 -16
  14. package/.docs/organized/code-examples/with-expo.md +24 -24
  15. package/.docs/organized/code-examples/with-external-store.md +10 -10
  16. package/.docs/organized/code-examples/with-ffmpeg.md +13 -13
  17. package/.docs/organized/code-examples/with-generative-ui.md +210 -13
  18. package/.docs/organized/code-examples/with-google-adk.md +10 -10
  19. package/.docs/organized/code-examples/with-heat-graph.md +8 -8
  20. package/.docs/organized/code-examples/with-image-generation.md +454 -0
  21. package/.docs/organized/code-examples/with-interactables.md +13 -13
  22. package/.docs/organized/code-examples/with-langchain.md +12 -12
  23. package/.docs/organized/code-examples/with-langgraph.md +15 -12
  24. package/.docs/organized/code-examples/with-livekit.md +18 -17
  25. package/.docs/organized/code-examples/with-mcp.md +748 -0
  26. package/.docs/organized/code-examples/with-opencode.md +11 -11
  27. package/.docs/organized/code-examples/with-parent-id-grouping.md +11 -11
  28. package/.docs/organized/code-examples/with-react-hook-form.md +14 -14
  29. package/.docs/organized/code-examples/with-react-ink.md +4 -4
  30. package/.docs/organized/code-examples/with-react-router.md +15 -15
  31. package/.docs/organized/code-examples/with-resumable-stream.md +660 -0
  32. package/.docs/organized/code-examples/with-store.md +8 -8
  33. package/.docs/organized/code-examples/with-tanstack.md +14 -14
  34. package/.docs/organized/code-examples/with-tap-runtime.md +11 -10
  35. package/.docs/raw/docs/(docs)/cli.mdx +1 -0
  36. package/.docs/raw/docs/(docs)/index.mdx +2 -2
  37. package/.docs/raw/docs/(docs)/installation.mdx +1 -1
  38. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +26 -24
  39. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +20 -0
  40. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +20 -12
  41. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +44 -0
  42. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +37 -16
  43. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +12 -23
  44. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +20 -0
  45. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +37 -8
  46. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +11 -9
  47. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +64 -0
  48. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +22 -0
  49. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +52 -0
  50. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +36 -0
  51. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +98 -0
  52. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +18 -13
  53. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +18 -57
  54. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +640 -0
  55. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +15 -28
  56. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +64 -18
  57. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +434 -0
  58. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +24 -0
  59. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +11 -12
  60. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +79 -0
  61. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +52 -0
  62. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +22 -0
  63. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +20 -0
  64. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +110 -131
  65. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +78 -221
  66. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +127 -242
  67. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +39 -20
  68. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +66 -87
  69. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +50 -58
  70. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +80 -48
  71. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +67 -0
  72. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +323 -461
  73. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +36 -43
  74. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +29 -24
  75. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +63 -245
  76. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +175 -591
  77. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +65 -0
  78. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +35 -22
  79. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +57 -140
  80. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +70 -161
  81. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +84 -108
  82. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +77 -96
  83. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +173 -349
  84. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +9 -21
  85. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +10 -21
  86. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +15 -70
  87. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +18 -13
  88. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +25 -28
  89. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +11 -63
  90. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +20 -0
  91. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +11 -48
  92. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +10 -47
  93. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +18 -30
  94. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +68 -0
  95. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +39 -0
  96. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +79 -0
  97. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +42 -0
  98. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +92 -0
  99. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +48 -0
  100. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +62 -0
  101. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +22 -0
  102. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +19 -0
  103. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +131 -0
  104. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +22 -0
  105. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +54 -0
  106. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +36 -0
  107. package/.docs/raw/docs/cloud/ai-sdk.mdx +1 -1
  108. package/.docs/raw/docs/cloud/index.mdx +2 -2
  109. package/.docs/raw/docs/guides/attachments.mdx +4 -4
  110. package/.docs/raw/docs/guides/branching.mdx +1 -1
  111. package/.docs/raw/docs/guides/chain-of-thought.mdx +5 -5
  112. package/.docs/raw/docs/guides/context-api.mdx +4 -4
  113. package/.docs/raw/docs/guides/dictation.mdx +2 -2
  114. package/.docs/raw/docs/guides/editing.mdx +1 -1
  115. package/.docs/raw/docs/guides/generative-ui.mdx +142 -0
  116. package/.docs/raw/docs/guides/image-generation.mdx +74 -0
  117. package/.docs/raw/docs/guides/index.mdx +2 -2
  118. package/.docs/raw/docs/guides/interactables.mdx +2 -2
  119. package/.docs/raw/docs/guides/latex.mdx +2 -2
  120. package/.docs/raw/docs/guides/mcp-apps.mdx +231 -0
  121. package/.docs/raw/docs/guides/mentions.mdx +2 -2
  122. package/.docs/raw/docs/guides/message-timing.mdx +38 -5
  123. package/.docs/raw/docs/guides/multi-agent.mdx +2 -2
  124. package/.docs/raw/docs/guides/quoting.mdx +1 -1
  125. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +212 -0
  126. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +152 -0
  127. package/.docs/raw/docs/guides/resumable-streams.mdx +210 -0
  128. package/.docs/raw/docs/guides/slash-commands.mdx +1 -1
  129. package/.docs/raw/docs/guides/speech.mdx +2 -2
  130. package/.docs/raw/docs/guides/suggestions.mdx +88 -4
  131. package/.docs/raw/docs/guides/tool-ui.mdx +2 -2
  132. package/.docs/raw/docs/guides/tools.mdx +66 -5
  133. package/.docs/raw/docs/guides/voice.mdx +2 -2
  134. package/.docs/raw/docs/ink/adapters.mdx +37 -1
  135. package/.docs/raw/docs/ink/custom-backend.mdx +59 -8
  136. package/.docs/raw/docs/ink/index.mdx +10 -11
  137. package/.docs/raw/docs/ink/primitives.mdx +349 -8
  138. package/.docs/raw/docs/integrations/auth/better-auth.mdx +1 -1
  139. package/.docs/raw/docs/integrations/auth/clerk.mdx +1 -1
  140. package/.docs/raw/docs/integrations/auth/next-auth.mdx +1 -1
  141. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +2 -2
  142. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +282 -0
  143. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +2 -2
  144. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  145. package/.docs/raw/docs/integrations/gateways/index.mdx +9 -4
  146. package/.docs/raw/docs/integrations/index.mdx +15 -3
  147. package/.docs/raw/docs/integrations/observability/langfuse.mdx +8 -1
  148. package/.docs/raw/docs/integrations/observability/langsmith.mdx +8 -4
  149. package/.docs/raw/docs/integrations/tools/react-mcp.mdx +337 -0
  150. package/.docs/raw/docs/primitives/composer.mdx +53 -0
  151. package/.docs/raw/docs/primitives/index.mdx +2 -2
  152. package/.docs/raw/docs/primitives/suggestion.mdx +9 -0
  153. package/.docs/raw/docs/react-native/hooks.mdx +2 -2
  154. package/.docs/raw/docs/react-native/index.mdx +4 -4
  155. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +4 -4
  156. package/.docs/raw/docs/runtimes/a2a/overview.mdx +2 -2
  157. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +2 -2
  158. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +32 -1
  159. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +2 -2
  160. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +7 -2
  161. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +1 -1
  162. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +7 -0
  163. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +27 -2
  164. package/.docs/raw/docs/runtimes/custom/external-store.mdx +9 -1
  165. package/.docs/raw/docs/runtimes/custom/overview.mdx +2 -2
  166. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +2 -2
  167. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  168. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +2 -2
  169. package/.docs/raw/docs/runtimes/opencode/overview.mdx +2 -2
  170. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +1 -1
  171. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +12 -5
  172. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +11 -1
  173. package/.docs/raw/docs/ui/mcp-config.mdx +102 -0
  174. package/.docs/raw/docs/ui/model-selector.mdx +8 -8
  175. package/.docs/raw/docs/ui/sources.mdx +17 -0
  176. package/.docs/raw/docs/ui/streamdown.mdx +34 -2
  177. package/.docs/raw/docs/ui/thread-list.mdx +2 -2
  178. package/.docs/raw/docs/ui/thread.mdx +2 -2
  179. package/README.md +14 -72
  180. package/dist/constants.d.ts +12 -9
  181. package/dist/constants.d.ts.map +1 -1
  182. package/dist/constants.js +13 -9
  183. package/dist/constants.js.map +1 -1
  184. package/dist/index.d.ts +7 -3
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +25 -24
  187. package/dist/index.js.map +1 -1
  188. package/dist/prepare-docs/code-examples.d.ts +4 -1
  189. package/dist/prepare-docs/code-examples.d.ts.map +1 -1
  190. package/dist/prepare-docs/code-examples.js +109 -121
  191. package/dist/prepare-docs/code-examples.js.map +1 -1
  192. package/dist/prepare-docs/copy-raw.d.ts +4 -1
  193. package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
  194. package/dist/prepare-docs/copy-raw.js +45 -42
  195. package/dist/prepare-docs/copy-raw.js.map +1 -1
  196. package/dist/prepare-docs/prepare.d.ts +1 -2
  197. package/dist/prepare-docs/prepare.js +17 -17
  198. package/dist/prepare-docs/prepare.js.map +1 -1
  199. package/dist/stdio.d.ts +1 -3
  200. package/dist/stdio.js +6 -3
  201. package/dist/stdio.js.map +1 -1
  202. package/dist/tools/docs.d.ts +20 -15
  203. package/dist/tools/docs.d.ts.map +1 -1
  204. package/dist/tools/docs.js +140 -161
  205. package/dist/tools/docs.js.map +1 -1
  206. package/dist/tools/examples.d.ts +20 -15
  207. package/dist/tools/examples.d.ts.map +1 -1
  208. package/dist/tools/examples.js +74 -86
  209. package/dist/tools/examples.js.map +1 -1
  210. package/dist/tools/tests/test-setup.d.ts +5 -2
  211. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  212. package/dist/tools/tests/test-setup.js +21 -28
  213. package/dist/tools/tests/test-setup.js.map +1 -1
  214. package/dist/utils/logger.d.ts +8 -5
  215. package/dist/utils/logger.d.ts.map +1 -1
  216. package/dist/utils/logger.js +17 -17
  217. package/dist/utils/logger.js.map +1 -1
  218. package/dist/utils/mcp-format.d.ts +8 -5
  219. package/dist/utils/mcp-format.d.ts.map +1 -1
  220. package/dist/utils/mcp-format.js +9 -9
  221. package/dist/utils/mcp-format.js.map +1 -1
  222. package/dist/utils/mdx.d.ts +8 -6
  223. package/dist/utils/mdx.d.ts.map +1 -1
  224. package/dist/utils/mdx.js +22 -22
  225. package/dist/utils/mdx.js.map +1 -1
  226. package/dist/utils/paths.d.ts +9 -6
  227. package/dist/utils/paths.d.ts.map +1 -1
  228. package/dist/utils/paths.js +66 -76
  229. package/dist/utils/paths.js.map +1 -1
  230. package/dist/utils/security.d.ts +4 -1
  231. package/dist/utils/security.d.ts.map +1 -1
  232. package/dist/utils/security.js +19 -40
  233. package/dist/utils/security.js.map +1 -1
  234. package/package.json +5 -5
  235. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +0 -41
  236. package/.docs/raw/docs/(reference)/api-reference/context-providers/text-message-part-provider.mdx +0 -40
  237. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -260
  238. package/.docs/raw/docs/(reference)/api-reference/integrations/react-hook-form.mdx +0 -103
  239. package/.docs/raw/docs/(reference)/api-reference/integrations/vercel-ai-sdk.mdx +0 -254
  240. package/dist/prepare-docs/prepare.d.ts.map +0 -1
  241. package/dist/stdio.d.ts.map +0 -1
  242. /package/.docs/raw/docs/{(reference)/migrations → migrations}/deprecation-policy.mdx +0 -0
  243. /package/.docs/raw/docs/{(reference) → migrations}/react-compatibility.mdx +0 -0
  244. /package/.docs/raw/docs/{(reference)/migrations → migrations}/react-langgraph-v0-7.mdx +0 -0
  245. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-11.mdx +0 -0
  246. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-12.mdx +0 -0
  247. /package/.docs/raw/docs/{(reference)/migrations → migrations}/v0-14.mdx +0 -0
@@ -159,6 +159,69 @@ Renders a suggestion button. Uses Ink `Box` + `Text`.
159
159
  | `send` | `boolean` | When true, automatically sends the message |
160
160
  | `clearComposer` | `boolean` | When true (default), replaces composer text; when false, appends |
161
161
 
162
+ ## Loading
163
+
164
+ ```tsx
165
+ import { LoadingPrimitive } from "@assistant-ui/react-ink";
166
+ ```
167
+
168
+ Composable loading UI for active runs. `LoadingPrimitive.Root` only renders
169
+ while the current thread is running, so it pairs naturally with status rows in
170
+ terminal chat layouts.
171
+
172
+ ```tsx
173
+ <LoadingPrimitive.Root gap={1}>
174
+ <LoadingPrimitive.Spinner variant="bar" />
175
+ <LoadingPrimitive.Text>Analyzing codebase...</LoadingPrimitive.Text>
176
+ <LoadingPrimitive.ElapsedTime />
177
+ </LoadingPrimitive.Root>
178
+ ```
179
+
180
+ This renders a compact status line such as `[=== ] Analyzing codebase... (3s)`
181
+ while the assistant is streaming.
182
+
183
+ ### Root
184
+
185
+ Runtime-aware `Box` container that renders children only while
186
+ `s.thread.isRunning` is true.
187
+
188
+ | Prop | Type | Description |
189
+ |------|------|-------------|
190
+ | `children` | `ReactNode` | Status row content |
191
+ | `...rest` | `BoxProps` | Standard Ink Box props |
192
+
193
+ ### Spinner
194
+
195
+ Animated loader indicator. Supports the existing `ink-spinner` path plus a few
196
+ built-in text-based variants for more terminal-native styles.
197
+
198
+ | Prop | Type | Description |
199
+ |------|------|-------------|
200
+ | `variant` | `"spinner" \| "dots" \| "pulse" \| "bar" \| "bounce"` | Loader style (default: `"spinner"`) |
201
+ | `type` | `ink-spinner` type | Spinner preset used when `variant="spinner"` |
202
+ | `intervalMs` | `number` | Animation speed for non-spinner variants (default: `120`) |
203
+ | `...rest` | `TextProps` | Standard Ink Text props |
204
+
205
+ ### Text
206
+
207
+ Status label rendered as Ink `Text`.
208
+
209
+ | Prop | Type | Description |
210
+ |------|------|-------------|
211
+ | `children` | `ReactNode` | Message text (default: `"Thinking..."`) |
212
+ | `...rest` | `TextProps` | Standard Ink Text props |
213
+
214
+ ### ElapsedTime
215
+
216
+ Elapsed time indicator for the current run. Uses message timing metadata when
217
+ available and falls back to a local timer so it still works during manual
218
+ testing.
219
+
220
+ | Prop | Type | Description |
221
+ |------|------|-------------|
222
+ | `format` | `(seconds: number) => string` | Custom formatter for the elapsed time label |
223
+ | `...rest` | `TextProps` | Standard Ink Text props |
224
+
162
225
  ## Composer
163
226
 
164
227
  ```tsx
@@ -273,6 +336,80 @@ Triggers attachment addition.
273
336
  </ComposerPrimitive.AddAttachment>
274
337
  ```
275
338
 
339
+ ### Queue
340
+
341
+ Renders all queued composer items. Each item is wrapped in a `QueueItemByIndexProvider`, so `QueueItemPrimitive.*` can read item state and call queue actions inside the render prop. Backed by the shared `ComposerPrimitiveQueue` from `@assistant-ui/core/react`.
342
+
343
+ ```tsx
344
+ <ComposerPrimitive.Queue>
345
+ {({ queueItem }) => (
346
+ <Box>
347
+ <QueueItemPrimitive.Text />
348
+ <QueueItemPrimitive.Steer>
349
+ <Text color="cyan">[Run Now]</Text>
350
+ </QueueItemPrimitive.Steer>
351
+ <QueueItemPrimitive.Remove>
352
+ <Text color="red">[x]</Text>
353
+ </QueueItemPrimitive.Remove>
354
+ </Box>
355
+ )}
356
+ </ComposerPrimitive.Queue>
357
+ ```
358
+
359
+ | Prop | Type | Description |
360
+ |------|------|-------------|
361
+ | `children` | `(value: { queueItem: QueueItemState }) => ReactNode` | Render function called for each queue item |
362
+
363
+ ### Quote
364
+
365
+ Renders the active composer quote preview. Children are only rendered while `s.composer.quote` is set, so this acts as both a container and a gate.
366
+
367
+ ```tsx
368
+ <ComposerPrimitive.Quote>
369
+ <Box>
370
+ <Text dimColor>Quoting:</Text>
371
+ <ComposerPrimitive.QuoteText color="gray" />
372
+ <ComposerPrimitive.QuoteDismiss>
373
+ <Text color="red">[x]</Text>
374
+ </ComposerPrimitive.QuoteDismiss>
375
+ </Box>
376
+ </ComposerPrimitive.Quote>
377
+ ```
378
+
379
+ | Prop | Type | Description |
380
+ |------|------|-------------|
381
+ | `children` | `ReactNode` | Quote preview content; only rendered when a quote is set |
382
+ | `...rest` | `BoxProps` | Standard Ink Box props |
383
+
384
+ ### QuoteText
385
+
386
+ Renders the quoted text from `s.composer.quote?.text`. Pass `children` to override the displayed value.
387
+
388
+ ```tsx
389
+ <ComposerPrimitive.QuoteText color="gray" />
390
+ ```
391
+
392
+ | Prop | Type | Description |
393
+ |------|------|-------------|
394
+ | `children` | `ReactNode` | Override content; defaults to `s.composer.quote?.text` |
395
+ | `...rest` | `TextProps` | Standard Ink Text props |
396
+
397
+ ### QuoteDismiss
398
+
399
+ Pressable that clears the active quote by calling `aui.composer().setQuote(undefined)`.
400
+
401
+ ```tsx
402
+ <ComposerPrimitive.QuoteDismiss>
403
+ <Text color="red">[x]</Text>
404
+ </ComposerPrimitive.QuoteDismiss>
405
+ ```
406
+
407
+ | Prop | Type | Description |
408
+ |------|------|-------------|
409
+ | `children` | `ReactNode` | Button content |
410
+ | `disabled` | `boolean` | Disable Enter activation and focus |
411
+ | `...rest` | `BoxProps` | Standard Ink Box props |
412
+
276
413
  ### Conditional Rendering (Composer)
277
414
 
278
415
  Use `AuiIf` for conditional rendering based on composer state:
@@ -323,7 +460,7 @@ Conditional rendering based on composer state. Shared from `@assistant-ui/core/r
323
460
  ## Message
324
461
 
325
462
  ```tsx
326
- import { MessagePrimitive } from "@assistant-ui/react-ink";
463
+ import { MessagePartPrimitive, MessagePrimitive } from "@assistant-ui/react-ink";
327
464
  ```
328
465
 
329
466
  ### Root
@@ -338,7 +475,7 @@ Container `Box` for a single message.
338
475
 
339
476
  ### Parts
340
477
 
341
- Renders message content parts via a `components` prop. Tool call and data parts automatically render registered tool UIs (via `useAssistantTool` / `useAssistantDataUI`), falling back to components provided here. A default `Text` component using Ink's `<Text>` is provided out of the box.
478
+ Renders message content parts via a `components` prop. Tool call and data parts automatically render registered tool UIs (via `useAssistantTool` / `useAssistantDataUI`), falling back to components provided here. Default terminal-safe renderers are provided for text, reasoning, source, image, file, and data parts.
342
479
 
343
480
  ```tsx
344
481
  <MessagePrimitive.Parts>
@@ -350,10 +487,26 @@ Renders message content parts via a `components` prop. Tool call and data parts
350
487
  </MessagePrimitive.Parts>
351
488
  ```
352
489
 
490
+ Override part rendering with app-owned components when you need richer terminal UI:
491
+
492
+ ```tsx
493
+ <MessagePrimitive.Parts
494
+ components={{
495
+ Image: () => <Text color="cyan">image available</Text>,
496
+ Reasoning: () => null,
497
+ data: {
498
+ by_name: {
499
+ weather_card: ({ data }) => <Text>{data.city}: {data.temperature}</Text>,
500
+ },
501
+ },
502
+ }}
503
+ />
504
+ ```
505
+
353
506
  ### Content (deprecated)
354
507
 
355
508
  <Callout type="warn">
356
- Deprecated. Use `MessagePrimitive.Parts` instead. See the [v0.11 migration guide](/docs/reference/migrations/v0-11) for details.
509
+ Deprecated. Use `MessagePrimitive.Parts` instead. See the [v0.11 migration guide](/docs/migrations/v0-11) for details.
357
510
  </Callout>
358
511
 
359
512
  Renders message content parts using render props. Tool call and data parts automatically render registered tool UIs (via `useAssistantTool` / `useAssistantDataUI`), falling back to render props if provided.
@@ -375,6 +528,36 @@ Renders message content parts using render props. Tool call and data parts autom
375
528
  | `renderFile` | `(props: { part; index }) => ReactElement` | File part renderer |
376
529
  | `renderData` | `(props: { part; index }) => ReactElement` | Data part fallback |
377
530
 
531
+ ## MessagePartPrimitive
532
+
533
+ Composable primitives for rendering the current message part inside part context from `MessagePrimitive.Parts`, `MessagePrimitive.PartByIndex`, or `PartByIndexProvider`.
534
+
535
+ ```tsx
536
+ <MessagePrimitive.Parts
537
+ components={{
538
+ Text: () => (
539
+ <>
540
+ <MessagePartPrimitive.Text />
541
+ <MessagePartPrimitive.InProgress>
542
+ <Text color="yellow"> ...</Text>
543
+ </MessagePartPrimitive.InProgress>
544
+ </>
545
+ ),
546
+ File: () => <MessagePartPrimitive.File dimColor />,
547
+ }}
548
+ />
549
+ ```
550
+
551
+ | Primitive | Default terminal behavior |
552
+ |-----------|---------------------------|
553
+ | `MessagePartPrimitive.Text` | Renders text with Ink `<Text>` |
554
+ | `MessagePartPrimitive.InProgress` | Renders children only while the current part status is `running` |
555
+ | `MessagePartPrimitive.Image` | Renders `[image: filename]` or `[image]`; never emits image data or terminal image protocols |
556
+ | `MessagePartPrimitive.File` | Renders `[file: filename mimeType]` or `[file: mimeType]`; never prints file data |
557
+ | `MessagePartPrimitive.Source` | Renders source title and/or URL metadata |
558
+ | `MessagePartPrimitive.Reasoning` | Renders conservative reasoning text by default; override or return `null` to suppress |
559
+ | `MessagePartPrimitive.Data` | Renders `[data: name]` when no registered data renderer is available |
560
+
378
561
  ### PartByIndex
379
562
 
380
563
  Low-level provider that sets up the part context for a specific message part by index. Used internally by `MessagePrimitive.Parts`.
@@ -462,34 +645,118 @@ Renders user message attachments using the provided component configuration.
462
645
  import { AttachmentPrimitive } from "@assistant-ui/react-ink";
463
646
  ```
464
647
 
465
- Primitives for rendering individual attachments.
648
+ Primitives for rendering individual attachments. Each primitive reads from the current attachment context (provided by `ComposerPrimitive.Attachments`, `ComposerPrimitive.AttachmentByIndex`, `MessagePrimitive.Attachments`, or `MessagePrimitive.AttachmentByIndex`).
466
649
 
467
650
  ### Root
468
651
 
469
- Container `Box` for an attachment.
652
+ Container `Box` for an attachment. Forwards all `Box` props.
653
+
654
+ | Prop | Type | Description |
655
+ |------|------|-------------|
656
+ | `children` | `ReactNode` | Attachment sub-components |
657
+ | `...rest` | `ComponentProps<typeof Box>` | Forwarded to the underlying Ink `Box` |
470
658
 
471
659
  ### Name
472
660
 
473
- `Text` component displaying the attachment filename.
661
+ `Text` component displaying `s.attachment.name`.
662
+
663
+ | Prop | Type | Description |
664
+ |------|------|-------------|
665
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
474
666
 
475
667
  ### Thumb
476
668
 
477
- `Text` component displaying the file extension.
669
+ `Text` component displaying a short identifier for the attachment. Renders the file extension (`.pdf`, `.png`, …) when the name has one. Falls back to the attachment `type` (e.g. `image`, `document`) otherwise, and finally to `file`.
670
+
671
+ | Prop | Type | Description |
672
+ |------|------|-------------|
673
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
674
+
675
+ ### Status
676
+
677
+ `Text` component rendering the current attachment status from `s.attachment.status`. Uses the same visual vocabulary as `ToolFallback`: spinner = uploading, `?` = pending action, `x` = error, `||` = paused. By default, completed attachments render nothing.
678
+
679
+ | Prop | Type | Description |
680
+ |------|------|-------------|
681
+ | `showComplete` | `boolean` | When `true`, completed attachments render `+ ready` instead of `null` |
682
+ | `...rest` | `Omit<ComponentProps<typeof Text>, "children">` | Forwarded to the underlying Ink `Text`. Caller-supplied `color` overrides the per-status default. `children` is not accepted; `Status` always renders its own content. |
478
683
 
479
684
  ### Remove
480
685
 
481
- Pressable that removes the attachment from the composer.
686
+ `Pressable` that calls `aui.attachment().remove()` when activated (Enter while focused). Disabled when not focused or when the `disabled` prop is set.
687
+
688
+ | Prop | Type | Description |
689
+ |------|------|-------------|
690
+ | `children` | `ReactNode` | Visual content for the button |
691
+ | `disabled` | `boolean` | Skip focus registration and ignore Enter |
692
+ | `...rest` | `ComponentProps<typeof Box>` | Forwarded to the underlying Pressable's `Box` |
482
693
 
483
694
  ```tsx
484
695
  <AttachmentPrimitive.Root>
485
696
  <AttachmentPrimitive.Thumb />
486
697
  <AttachmentPrimitive.Name />
698
+ <AttachmentPrimitive.Status />
487
699
  <AttachmentPrimitive.Remove>
488
700
  <Text color="red">[x]</Text>
489
701
  </AttachmentPrimitive.Remove>
490
702
  </AttachmentPrimitive.Root>
491
703
  ```
492
704
 
705
+ ## QueueItem
706
+
707
+ ```tsx
708
+ import { QueueItemPrimitive } from "@assistant-ui/react-ink";
709
+ ```
710
+
711
+ Primitives for rendering individual queued composer items. Use inside a `ComposerPrimitive.Queue` render prop, where the queue item context is set up by `QueueItemByIndexProvider`.
712
+
713
+ ### Text
714
+
715
+ Renders the queue item's prompt with Ink `<Text>`. Pass `children` to override the displayed value.
716
+
717
+ ```tsx
718
+ <QueueItemPrimitive.Text color="gray" />
719
+ ```
720
+
721
+ | Prop | Type | Description |
722
+ |------|------|-------------|
723
+ | `children` | `ReactNode` | Override content; defaults to `s.queueItem.prompt` |
724
+ | `...rest` | `TextProps` | Standard Ink Text props |
725
+
726
+ ### Remove
727
+
728
+ Pressable that removes the queue item by calling `aui.queueItem().remove()`.
729
+
730
+ ```tsx
731
+ <QueueItemPrimitive.Remove>
732
+ <Text color="red">[x]</Text>
733
+ </QueueItemPrimitive.Remove>
734
+ ```
735
+
736
+ | Prop | Type | Description |
737
+ |------|------|-------------|
738
+ | `children` | `ReactNode` | Button content |
739
+ | `disabled` | `boolean` | Disable Enter activation and focus |
740
+
741
+ Remaining props are forwarded to the underlying `Pressable` (Ink `Box` props).
742
+
743
+ ### Steer
744
+
745
+ Pressable that promotes the queue item to run next by calling `aui.queueItem().steer()`.
746
+
747
+ ```tsx
748
+ <QueueItemPrimitive.Steer>
749
+ <Text color="cyan">[Run Now]</Text>
750
+ </QueueItemPrimitive.Steer>
751
+ ```
752
+
753
+ | Prop | Type | Description |
754
+ |------|------|-------------|
755
+ | `children` | `ReactNode` | Button content |
756
+ | `disabled` | `boolean` | Disable Enter activation and focus |
757
+
758
+ Remaining props are forwarded to the underlying `Pressable` (Ink `Box` props).
759
+
493
760
  ## ActionBar
494
761
 
495
762
  ```tsx
@@ -746,6 +1013,8 @@ Components for rendering code diffs in the terminal.
746
1013
 
747
1014
  Pre-composed component that combines all diff primitives for easy diff rendering. Accepts either a unified diff patch string or old/new file content for inline comparison.
748
1015
 
1016
+ When a replacement is rendered as an equal-length adjacent `-`/`+` run, `DiffView` also highlights the changed word spans inside those lines. The existing prefixes, line numbers, folding, and primitive API surface stay the same. This intra-line behavior is internal to `DiffView`; `DiffPrimitive.Line` remains a line-level primitive.
1017
+
749
1018
  ```tsx
750
1019
  // From a patch string
751
1020
  <DiffView
@@ -874,3 +1143,75 @@ For custom layouts, use the primitives directly:
874
1143
  </Box>
875
1144
  </DiffPrimitive.Root>
876
1145
  ```
1146
+
1147
+ ## StatusBar
1148
+
1149
+ ```tsx
1150
+ import { StatusBarPrimitive } from "@assistant-ui/react-ink";
1151
+ ```
1152
+
1153
+ Primitives for rendering a compact terminal status bar showing run state, model, message count, token usage, and latency. All sub-components read directly from the active thread state.
1154
+
1155
+ ### Root
1156
+
1157
+ Container `Box` for the status bar. Forwards all `Box` props; pass `gap` to space its children.
1158
+
1159
+ | Prop | Type | Description |
1160
+ |------|------|-------------|
1161
+ | `children` | `ReactNode` | Status bar sub-components |
1162
+ | `...rest` | `ComponentProps<typeof Box>` | Forwarded to the underlying Ink `Box` |
1163
+
1164
+ ### ModelName
1165
+
1166
+ `Text` component displaying the current model name. The name is supplied as a prop — the primitive does not infer it from state.
1167
+
1168
+ | Prop | Type | Description |
1169
+ |------|------|-------------|
1170
+ | `name` | `ReactNode` | Model label to render (default: `"unknown"`) |
1171
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
1172
+
1173
+ ### MessageCount
1174
+
1175
+ `Text` component displaying the number of messages on the current thread, formatted as `N msgs` by default. Renders nothing when the thread is empty.
1176
+
1177
+ | Prop | Type | Description |
1178
+ |------|------|-------------|
1179
+ | `format` | `(count: number) => string` | Custom formatter for the count (default: `` `${count} msgs` ``) |
1180
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
1181
+
1182
+ ### TokenCount
1183
+
1184
+ `Text` component summing `metadata.timing.tokenCount` across all assistant messages on the thread, formatted with `toLocaleString()` + `" tokens"` by default. Renders nothing when the total is `0`.
1185
+
1186
+ | Prop | Type | Description |
1187
+ |------|------|-------------|
1188
+ | `format` | `(tokens: number) => string` | Custom formatter for the total (default: `` `${tokens.toLocaleString()} tokens` ``) |
1189
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
1190
+
1191
+ ### Latency
1192
+
1193
+ `Text` component displaying `metadata.timing.tokensPerSecond` from the most recent assistant message, formatted as `N tok/s` (rounded) by default. Renders nothing when the field is missing.
1194
+
1195
+ | Prop | Type | Description |
1196
+ |------|------|-------------|
1197
+ | `format` | `(tokensPerSecond: number) => string` | Custom formatter (default: `` `${Math.round(tokensPerSecond)} tok/s` ``) |
1198
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
1199
+
1200
+ ### Status
1201
+
1202
+ `Text` component reporting the thread's run state. Resolves to `"running"` while `s.thread.isRunning`, otherwise inspects the most recent assistant message: `"error"` when its status is `incomplete` with reason `error`, `"cancelled"` when reason is `cancelled`, and `"idle"` for every other case. Pass `color` (or any `Text` prop) to style the label.
1203
+
1204
+ | Prop | Type | Description |
1205
+ |------|------|-------------|
1206
+ | `format` | `(status: "idle" \| "running" \| "error" \| "cancelled") => string` | Custom label formatter (default: returns the state string verbatim) |
1207
+ | `...rest` | `ComponentProps<typeof Text>` | Forwarded to the underlying Ink `Text` |
1208
+
1209
+ ```tsx
1210
+ <StatusBarPrimitive.Root gap={1}>
1211
+ <StatusBarPrimitive.Status />
1212
+ <StatusBarPrimitive.ModelName name="gpt-5" />
1213
+ <StatusBarPrimitive.MessageCount />
1214
+ <StatusBarPrimitive.TokenCount />
1215
+ <StatusBarPrimitive.Latency />
1216
+ </StatusBarPrimitive.Root>
1217
+ ```
@@ -69,7 +69,7 @@ export async function POST(req: Request) {
69
69
 
70
70
  const { messages }: { messages: UIMessage[] } = await req.json();
71
71
  const result = streamText({
72
- model: openai("gpt-4o"),
72
+ model: openai("gpt-5.4-nano"),
73
73
  messages: await convertToModelMessages(messages),
74
74
  });
75
75
  return result.toUIMessageStreamResponse();
@@ -51,7 +51,7 @@ export async function POST(req: Request) {
51
51
 
52
52
  const { messages }: { messages: UIMessage[] } = await req.json();
53
53
  const result = streamText({
54
- model: openai("gpt-4o"),
54
+ model: openai("gpt-5.4-nano"),
55
55
  messages: await convertToModelMessages(messages),
56
56
  });
57
57
  return result.toUIMessageStreamResponse();
@@ -77,7 +77,7 @@ export async function POST(req: Request) {
77
77
 
78
78
  const { messages }: { messages: UIMessage[] } = await req.json();
79
79
  const result = streamText({
80
- model: openai("gpt-4o"),
80
+ model: openai("gpt-5.4-nano"),
81
81
  messages: await convertToModelMessages(messages),
82
82
  });
83
83
  return result.toUIMessageStreamResponse();
@@ -1,6 +1,6 @@
1
1
  ---
2
- title: Vercel AI SDK
3
- description: The canonical first-party framework integration for assistant-ui.
2
+ title: Vercel AI SDK Integration
3
+ description: Wire the Vercel AI SDK into a React chat UI with assistant-ui — useChat, streaming, tools, attachments, multi-step agents, and persistence covered end-to-end.
4
4
  ---
5
5
 
6
6
  import { VercelIcon } from "@/components/icons/vercel";