@assistant-ui/mcp-docs-server 0.1.23 → 0.1.25

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 (137) hide show
  1. package/.docs/organized/code-examples/waterfall.md +5 -3
  2. package/.docs/organized/code-examples/with-a2a.md +676 -0
  3. package/.docs/organized/code-examples/with-ag-ui.md +7 -8
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +28 -16
  5. package/.docs/organized/code-examples/with-artifacts.md +5 -5
  6. package/.docs/organized/code-examples/with-assistant-transport.md +3 -3
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +34 -26
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +10 -8
  9. package/.docs/organized/code-examples/with-cloud.md +5 -5
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +7 -7
  11. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +8 -8
  12. package/.docs/organized/code-examples/with-expo.md +571 -539
  13. package/.docs/organized/code-examples/with-external-store.md +3 -4
  14. package/.docs/organized/code-examples/with-ffmpeg.md +5 -5
  15. package/.docs/organized/code-examples/with-google-adk.md +353 -0
  16. package/.docs/organized/code-examples/with-heat-graph.md +304 -0
  17. package/.docs/organized/code-examples/with-langgraph.md +25 -23
  18. package/.docs/organized/code-examples/with-parent-id-grouping.md +4 -4
  19. package/.docs/organized/code-examples/with-react-hook-form.md +6 -9
  20. package/.docs/organized/code-examples/with-react-ink.md +265 -0
  21. package/.docs/organized/code-examples/with-react-router.md +10 -11
  22. package/.docs/organized/code-examples/with-store.md +29 -18
  23. package/.docs/organized/code-examples/with-tanstack.md +7 -7
  24. package/.docs/organized/code-examples/with-tap-runtime.md +6 -4
  25. package/.docs/raw/blog/2025-01-31-changelog/index.mdx +1 -1
  26. package/.docs/raw/blog/2026-03-launch-week/index.mdx +227 -0
  27. package/.docs/raw/docs/(docs)/architecture.mdx +1 -1
  28. package/.docs/raw/docs/(docs)/cli.mdx +14 -9
  29. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +8 -3
  30. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +5 -1
  31. package/.docs/raw/docs/(docs)/copilots/{make-assistant-readable.mdx → make-assistant-visible.mdx} +14 -5
  32. package/.docs/raw/docs/(docs)/copilots/model-context.mdx +11 -11
  33. package/.docs/raw/docs/(docs)/copilots/motivation.mdx +2 -2
  34. package/.docs/raw/docs/(docs)/devtools.mdx +3 -2
  35. package/.docs/raw/docs/(docs)/guides/attachments.mdx +9 -11
  36. package/.docs/raw/docs/(docs)/guides/branching.mdx +11 -6
  37. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +18 -16
  38. package/.docs/raw/docs/(docs)/guides/context-api.mdx +81 -43
  39. package/.docs/raw/docs/(docs)/guides/dictation.mdx +5 -5
  40. package/.docs/raw/docs/(docs)/guides/editing.mdx +16 -7
  41. package/.docs/raw/docs/(docs)/guides/latex.mdx +3 -0
  42. package/.docs/raw/docs/(docs)/guides/message-timing.mdx +2 -1
  43. package/.docs/raw/docs/(docs)/guides/multi-agent.mdx +173 -0
  44. package/.docs/raw/docs/(docs)/guides/quoting.mdx +55 -206
  45. package/.docs/raw/docs/(docs)/guides/speech.mdx +1 -4
  46. package/.docs/raw/docs/(docs)/guides/suggestions.mdx +9 -15
  47. package/.docs/raw/docs/(docs)/guides/tool-ui.mdx +17 -7
  48. package/.docs/raw/docs/(docs)/guides/tools.mdx +24 -9
  49. package/.docs/raw/docs/(docs)/index.mdx +3 -3
  50. package/.docs/raw/docs/(docs)/installation.mdx +69 -46
  51. package/.docs/raw/docs/(reference)/api-reference/context-providers/text-message-part-provider.mdx +20 -6
  52. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +24 -4
  53. package/.docs/raw/docs/(reference)/api-reference/integrations/react-hook-form.mdx +1 -1
  54. package/.docs/raw/docs/(reference)/api-reference/integrations/vercel-ai-sdk.mdx +20 -19
  55. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +28 -53
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +4 -4
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +7 -1
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +20 -14
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +1 -1
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +99 -45
  61. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +52 -40
  62. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +343 -23
  63. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +4 -6
  64. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +4 -2
  65. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +3 -5
  66. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +169 -22
  67. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +14 -4
  68. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +15 -26
  69. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +39 -21
  70. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +33 -9
  71. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +48 -21
  72. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +36 -7
  73. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +30 -10
  74. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +12 -10
  75. package/.docs/raw/docs/(reference)/migrations/deprecation-policy.mdx +1 -1
  76. package/.docs/raw/docs/(reference)/migrations/react-langgraph-v0-7.mdx +9 -4
  77. package/.docs/raw/docs/(reference)/migrations/v0-11.mdx +7 -5
  78. package/.docs/raw/docs/(reference)/migrations/v0-12.mdx +9 -7
  79. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +159 -0
  80. package/.docs/raw/docs/(reference)/react-compatibility.mdx +5 -134
  81. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +89 -7
  82. package/.docs/raw/docs/cloud/ai-sdk.mdx +19 -5
  83. package/.docs/raw/docs/cloud/langgraph.mdx +13 -3
  84. package/.docs/raw/docs/ink/adapters.mdx +41 -0
  85. package/.docs/raw/docs/ink/custom-backend.mdx +203 -0
  86. package/.docs/raw/docs/ink/hooks.mdx +448 -0
  87. package/.docs/raw/docs/ink/index.mdx +239 -0
  88. package/.docs/raw/docs/ink/migration.mdx +140 -0
  89. package/.docs/raw/docs/ink/primitives.mdx +699 -0
  90. package/.docs/raw/docs/react-native/adapters.mdx +63 -87
  91. package/.docs/raw/docs/react-native/custom-backend.mdx +11 -14
  92. package/.docs/raw/docs/react-native/hooks.mdx +214 -232
  93. package/.docs/raw/docs/react-native/index.mdx +118 -159
  94. package/.docs/raw/docs/react-native/migration.mdx +144 -0
  95. package/.docs/raw/docs/react-native/primitives.mdx +431 -302
  96. package/.docs/raw/docs/runtimes/a2a/index.mdx +294 -0
  97. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +9 -9
  98. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +14 -3
  99. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +53 -0
  100. package/.docs/raw/docs/runtimes/assistant-transport.mdx +59 -25
  101. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +13 -6
  102. package/.docs/raw/docs/runtimes/custom/external-store.mdx +138 -38
  103. package/.docs/raw/docs/runtimes/custom/local.mdx +184 -42
  104. package/.docs/raw/docs/runtimes/data-stream.mdx +92 -19
  105. package/.docs/raw/docs/runtimes/google-adk/index.mdx +624 -0
  106. package/.docs/raw/docs/runtimes/helicone.mdx +6 -6
  107. package/.docs/raw/docs/runtimes/langgraph/index.mdx +38 -27
  108. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +1 -1
  109. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +15 -20
  110. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +7 -11
  111. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +8 -11
  112. package/.docs/raw/docs/runtimes/langserve.mdx +6 -7
  113. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +18 -3
  114. package/.docs/raw/docs/ui/context-display.mdx +147 -0
  115. package/.docs/raw/docs/ui/file.mdx +5 -4
  116. package/.docs/raw/docs/ui/image.mdx +5 -4
  117. package/.docs/raw/docs/ui/markdown.mdx +3 -1
  118. package/.docs/raw/docs/ui/model-selector.mdx +8 -8
  119. package/.docs/raw/docs/ui/part-grouping.mdx +7 -10
  120. package/.docs/raw/docs/ui/quote.mdx +210 -0
  121. package/.docs/raw/docs/ui/reasoning.mdx +12 -11
  122. package/.docs/raw/docs/ui/sources.mdx +88 -17
  123. package/.docs/raw/docs/ui/streamdown.mdx +16 -7
  124. package/.docs/raw/docs/ui/thread-list.mdx +11 -13
  125. package/.docs/raw/docs/ui/thread.mdx +28 -33
  126. package/.docs/raw/docs/ui/tool-fallback.mdx +5 -6
  127. package/.docs/raw/docs/ui/tool-group.mdx +9 -8
  128. package/.docs/raw/docs/utilities/heat-graph.mdx +236 -0
  129. package/.docs/raw/docs/utilities/tw-shimmer.mdx +211 -0
  130. package/package.json +4 -4
  131. package/.docs/raw/docs/(reference)/legacy/styled/assistant-modal.mdx +0 -77
  132. package/.docs/raw/docs/(reference)/legacy/styled/decomposition.mdx +0 -635
  133. package/.docs/raw/docs/(reference)/legacy/styled/markdown.mdx +0 -77
  134. package/.docs/raw/docs/(reference)/legacy/styled/scrollbar.mdx +0 -72
  135. package/.docs/raw/docs/(reference)/legacy/styled/thread-width.mdx +0 -22
  136. package/.docs/raw/docs/(reference)/legacy/styled/thread.mdx +0 -77
  137. /package/.docs/raw/docs/cloud/{overview.mdx → index.mdx} +0 -0
@@ -0,0 +1,227 @@
1
+ ---
2
+ title: "Launch Week: assistant-ui goes multi-platform"
3
+ description: "React Native, terminal UIs, and more — assistant-ui is no longer just for the web."
4
+ author: Simon Farshid
5
+ date: 2026-03-09T12:00:00
6
+ ---
7
+
8
+ import Image from "next/image";
9
+
10
+ This week, we're shipping one major feature every day. The theme: **assistant-ui everywhere**.
11
+
12
+ For two years, assistant-ui has been the go-to library for building AI chat on the web. Starting this week, that changes. Same runtime, same adapters, same developer experience — now on every platform your users are.
13
+
14
+ ---
15
+
16
+ ## Day 1 — React Native
17
+
18
+ **Build AI chat for iOS and Android.**
19
+
20
+ We're launching `@assistant-ui/react-native` — native React Native bindings that bring the full assistant-ui experience to mobile.
21
+
22
+ Everything you know from the web version carries over:
23
+
24
+ - **Same runtime, same adapters.** Your `ChatModelAdapter`, AI SDK integration, or LangGraph setup works out of the box. No rewrites.
25
+ - **Native primitives.** `View`, `Pressable`, `Text`, `FlatList` — not web views, not wrappers. Real native components.
26
+ - **Full feature set.** Streaming, tool calls, message branching, thread management, attachments — all there.
27
+
28
+ Get started in one command:
29
+
30
+ ```sh
31
+ npx assistant-ui@latest create --example with-expo my-chat-app
32
+ ```
33
+
34
+ Or add it to an existing Expo project:
35
+
36
+ ```sh
37
+ npx expo install @assistant-ui/react-native @assistant-ui/react-ai-sdk
38
+ ```
39
+
40
+ The API mirrors the web version closely. If you've built with `@assistant-ui/react`, you already know how to use it.
41
+
42
+ [Read the docs →](/docs/react-native)
43
+
44
+ ---
45
+
46
+ ## Day 2 — React Ink (Terminal UI)
47
+
48
+ **Build AI chat for the terminal.**
49
+
50
+ We're launching `@assistant-ui/react-ink` — terminal UI bindings powered by [Ink](https://github.com/vadimdemedes/ink), the React renderer for CLIs.
51
+
52
+ Build rich, interactive AI chat interfaces that run in any terminal:
53
+
54
+ - **Composable primitives.** `ThreadRoot`, `ComposerInput`, `MessageContent` — the same component model, adapted for the terminal.
55
+ - **Markdown rendering.** Ship with `@assistant-ui/react-ink-markdown` for formatted headings, code blocks with syntax highlighting, tables, and lists — all in your terminal.
56
+ - **Tool calls with live feedback.** Built-in `ToolFallback` component shows spinners and formatted JSON output while tools execute.
57
+ - **Shared backend.** Same adapters, same runtime core. Switch platforms without touching your backend code.
58
+
59
+ Get started:
60
+
61
+ ```sh
62
+ npx assistant-ui@latest create --ink my-chat-app
63
+ ```
64
+
65
+ [Read the docs →](/docs/ink)
66
+
67
+ ---
68
+
69
+ ## Day 3 — Assistant Cloud Redesign
70
+
71
+ **A new dashboard for managing your AI assistants at scale.**
72
+
73
+ We've completely redesigned [Assistant Cloud](https://cloud.assistant-ui.com), the hosted backend for assistant-ui. Thread persistence, analytics, user management, and more, all in one place.
74
+
75
+ <Image
76
+ src="/images/cloud-dashboard.png"
77
+ alt="Assistant Cloud dashboard showing analytics, threads, and run tracking"
78
+ width={1200}
79
+ height={675}
80
+ className="mx-auto rounded-xl border drop-shadow"
81
+ />
82
+
83
+ ### What is Assistant Cloud?
84
+
85
+ Assistant Cloud gives your assistant-ui app a production-ready backend. Drop in a few lines of config and get:
86
+
87
+ - **Thread persistence.** Conversations survive page refreshes. Users can pick up where they left off.
88
+ - **Thread list.** A ChatGPT-style sidebar, powered by your data — no extra backend work.
89
+ - **Auto-generated titles.** Every thread gets a title, automatically.
90
+ - **User authorization.** Works with Clerk, Auth0, Supabase, Firebase, or anonymous mode for demos.
91
+
92
+ ### What's new in the redesign
93
+
94
+ The new dashboard at `cloud.assistant-ui.com` is a full control center for your AI deployments:
95
+
96
+ - **Analytics dashboard.** Total cost, token usage, run count, average duration — with model distribution charts and usage trends over time.
97
+ - **Thread browser.** Search and inspect every conversation. View full message history, metadata, and timestamps.
98
+ - **User analytics.** Per-user metrics: runs, threads created, tokens consumed, costs incurred.
99
+ - **Run tracking.** Every LLM invocation logged with model, provider, cost, input/output tokens, cached tokens, reasoning tokens, and duration.
100
+ - **Assistant configuration.** Create multiple assistants with different models, system prompts, temperature, and top-p settings.
101
+ - **LLM provider management.** Configure OpenAI, Anthropic, Google, and other providers — with encrypted credential storage.
102
+ - **API key management.** Generate, track, and revoke project API keys.
103
+ - **Auth rules.** Configure JWT validation with JWKS URL, audience, and issuer settings.
104
+
105
+ ### Getting started
106
+
107
+ Add thread persistence to your existing assistant-ui app:
108
+
109
+ ```sh
110
+ npx assistant-ui@latest cloud
111
+ ```
112
+
113
+ Or integrate directly with the AI SDK using `useCloudChat`:
114
+
115
+ ```sh
116
+ npm install @assistant-ui/cloud-ai-sdk @ai-sdk/react ai
117
+ ```
118
+
119
+ Works with any assistant-ui runtime — AI SDK, LangGraph, or custom backends. No migration required.
120
+
121
+ [Read the docs →](/docs/cloud)
122
+
123
+ [Sign up here →](https://cloud.assistant-ui.com)
124
+
125
+ ---
126
+
127
+ ## Day 4 — <span className="shimmer">tw-shimmer</span>
128
+
129
+ **Beautiful shimmer effects for Tailwind CSS v4. Zero dependencies, pure CSS.**
130
+
131
+ We're launching [`tw-shimmer`](https://www.npmjs.com/package/tw-shimmer) — a Tailwind CSS v4 plugin that adds polished shimmer animations for both text and skeleton loaders. No JavaScript runtime, no dependencies — just add a class and go.
132
+
133
+ - **Sine-eased gradients.** 17 carefully calculated gradient stops following a sine ease-in-out curve. No banding, no harsh edges — just smooth, organic highlights.
134
+ - **OKLCH color mixing.** Perceptually uniform color transitions that look great in any color scheme.
135
+ - **Text + Background.** Shimmer text labels or skeleton placeholders with the same API.
136
+ - **Auto-sizing.** CSS container queries automatically derive speed and spread from container width — no JavaScript measurement needed.
137
+ - **Fully customizable.** Speed, spread, angle, color, duration, and repeat delay — all controllable via Tailwind utilities or CSS variables.
138
+
139
+ Install and add to your CSS:
140
+
141
+ ```sh
142
+ npm install tw-shimmer
143
+ ```
144
+
145
+ ```css title="app/globals.css"
146
+ @import "tailwindcss";
147
+ @import "tw-shimmer";
148
+ ```
149
+
150
+ Then use it:
151
+
152
+ ```html
153
+ <!-- Text shimmer -->
154
+ <span class="shimmer text-foreground/60">Loading...</span>
155
+
156
+ <!-- Skeleton loader -->
157
+ <div class="shimmer-container flex gap-3">
158
+ <div class="shimmer-bg bg-muted size-12 rounded-full" />
159
+ <div class="flex-1 space-y-2">
160
+ <div class="shimmer-bg bg-muted h-4 w-1/4 rounded" />
161
+ <div class="shimmer-bg bg-muted h-4 w-full rounded" />
162
+ </div>
163
+ </div>
164
+ ```
165
+
166
+ [See the interactive demo →](/tw-shimmer)
167
+
168
+ [Read the docs →](/docs/utilities/tw-shimmer)
169
+
170
+ ---
171
+
172
+ ## Day 5 — Cloud AI SDK
173
+
174
+ **Add cloud persistence to any AI SDK app. Just change your import.**
175
+
176
+ We're launching `@assistant-ui/cloud-ai-sdk` — a standalone package that adds full thread persistence and management to any Vercel AI SDK application with a single hook change. No providers, no context, no runtime objects.
177
+
178
+ ### Before
179
+
180
+ ```tsx
181
+ import { useChat } from "@ai-sdk/react";
182
+
183
+ const { messages, sendMessage } = useChat();
184
+ ```
185
+
186
+ ### After
187
+
188
+ ```tsx
189
+ import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
190
+
191
+ const { messages, sendMessage, threads } = useCloudChat();
192
+ ```
193
+
194
+ That's it. One import change gives you:
195
+
196
+ - **Automatic thread creation.** Threads are created on the first message — no manual setup.
197
+ - **Full message persistence.** Conversations survive page refreshes. Users pick up where they left off.
198
+ - **Built-in thread list.** `threads.threads` gives you a ChatGPT-style thread sidebar, sorted by recency.
199
+ - **Auto-generated titles.** Every thread gets an AI-generated title after the first response.
200
+ - **Zero config.** Set one env var (`NEXT_PUBLIC_ASSISTANT_BASE_URL`) and you're done.
201
+ - **Works with any UI.** Keep your existing components — `useCloudChat` returns the same interface as `useChat`.
202
+
203
+ The package exports just two hooks (`useCloudChat` and `useThreads`) and four types. It works independently of assistant-ui's runtime and primitives — any React UI works.
204
+
205
+ Get started:
206
+
207
+ ```sh
208
+ npm install @assistant-ui/cloud-ai-sdk @ai-sdk/react ai
209
+ ```
210
+
211
+ [Read the docs →](/docs/cloud/ai-sdk)
212
+
213
+ [See the launch page →](/cloud-ai-sdk)
214
+
215
+ ---
216
+
217
+ ## One runtime, every platform
218
+
219
+ The big picture: assistant-ui is now a **universal AI chat framework**. Web, mobile, terminal — one codebase for your backend, one set of adapters, one way to register tools. The only thing that changes is the UI layer.
220
+
221
+ ```
222
+ @assistant-ui/react → Web (React + Radix UI)
223
+ @assistant-ui/react-native → Mobile (React Native)
224
+ @assistant-ui/react-ink → Terminal (Ink)
225
+ ```
226
+
227
+ We'll be updating this post throughout the week as we ship new announcements. Follow [@assistant-ui](https://x.com/assistantui) for daily updates or join our [Discord](https://discord.gg/S9dwgCNEFs) for early access.
@@ -30,7 +30,7 @@ Stylized and functional chat components built on top of Shadcn components that h
30
30
  A React state management context for assistant chat. The runtime handles data conversions between the local state and calls to backends and LLMs. We offer different runtime solutions that work with various frameworks like Vercel AI SDK, LangGraph, LangChain, Helicone, local runtime, and an ExternalStore when you need full control of the frontend message state. [You can view the runtimes we support](/docs/runtimes/pick-a-runtime)
31
31
 
32
32
  ### 3. Assistant Cloud
33
- A hosted service that enhances your assistant experience with comprehensive thread management and message history. Assistant Cloud stores complete message history, automatically persists threads, supports human-in-the-loop workflows, and integrates with common auth providers to seamlessly allow users to resume conversations at any point. [Cloud Docs](/docs/cloud/overview)
33
+ A hosted service that enhances your assistant experience with comprehensive thread management and message history. Assistant Cloud stores complete message history, automatically persists threads, supports human-in-the-loop workflows, and integrates with common auth providers to seamlessly allow users to resume conversations at any point. [Cloud Docs](/docs/cloud)
34
34
 
35
35
 
36
36
  ### There are three common ways to architect your assistant-ui application:
@@ -45,7 +45,7 @@ Use the `create` command to scaffold a new Next.js project with assistant-ui pre
45
45
  npx assistant-ui@latest create [project-directory]
46
46
  ```
47
47
 
48
- This command uses `create-next-app` with assistant-ui starter templates.
48
+ This command scaffolds a project from assistant-ui starter templates or examples.
49
49
 
50
50
  **Available Templates**
51
51
 
@@ -77,6 +77,8 @@ Use `--example` to create a project from one of the monorepo examples with full
77
77
  | `with-ffmpeg` | FFmpeg video processing tool | `npx assistant-ui create my-app -e with-ffmpeg` |
78
78
  | `with-elevenlabs-scribe` | ElevenLabs voice transcription | `npx assistant-ui create my-app -e with-elevenlabs-scribe` |
79
79
  | `with-parent-id-grouping` | Message part grouping | `npx assistant-ui create my-app -e with-parent-id-grouping` |
80
+ | `with-expo` | Expo / React Native | `npx assistant-ui create my-app -e with-expo` |
81
+ | `with-react-ink` | Terminal UI chat | `npx assistant-ui create my-app -e with-react-ink` |
80
82
  | `with-react-router` | React Router v7 integration | `npx assistant-ui create my-app -e with-react-router` |
81
83
  | `with-tanstack` | TanStack Start integration | `npx assistant-ui create my-app -e with-tanstack` |
82
84
 
@@ -113,14 +115,17 @@ Arguments:
113
115
  project-directory name of the project directory
114
116
 
115
117
  Options:
116
- -t, --template <template> template to use (default, minimal, cloud, cloud-clerk, langgraph, mcp)
117
- -e, --example <example> create from an example (e.g., with-langgraph)
118
- --use-npm explicitly use npm
119
- --use-pnpm explicitly use pnpm
120
- --use-yarn explicitly use yarn
121
- --use-bun explicitly use bun
122
- --skip-install skip installing packages
123
- -h, --help display help for command
118
+ -t, --template <template> template to use (default, minimal, cloud, cloud-clerk, langgraph, mcp)
119
+ -e, --example <example> create from an example (e.g., with-langgraph)
120
+ -p, --preset <name-or-url> preset name or URL (e.g., chatgpt)
121
+ --native create an Expo / React Native project
122
+ --ink create a React Ink terminal project
123
+ --use-npm explicitly use npm
124
+ --use-pnpm explicitly use pnpm
125
+ --use-yarn explicitly use yarn
126
+ --use-bun explicitly use bun
127
+ --skip-install skip installing packages
128
+ -h, --help display help for command
124
129
  ```
125
130
 
126
131
  ## add
@@ -3,6 +3,10 @@ title: makeAssistantToolUI
3
3
  description: Register custom UI components to render tool executions and their status.
4
4
  ---
5
5
 
6
+ <Callout type="warn">
7
+ `makeAssistantToolUI` is deprecated. Use the `Tools()` API instead. See the
8
+ [Tools guide](/docs/guides/tools) for the recommended approach.
9
+ </Callout>
6
10
 
7
11
  The `makeAssistantToolUI` utility is used to register a tool UI component with the Assistant.
8
12
 
@@ -81,7 +85,7 @@ const MyToolUI = makeAssistantToolUI({
81
85
  name: "status",
82
86
  type: "ToolCallMessagePartStatus",
83
87
  description:
84
- 'The execution status object with a type property: "running", "complete", "incomplete", or "requires_action"',
88
+ 'The execution status object with a type property: "running", "complete", "incomplete", or "requires-action"',
85
89
  },
86
90
  {
87
91
  name: "addResult",
@@ -115,7 +119,7 @@ import { AssistantRuntimeProvider } from "@assistant-ui/react";
115
119
  const GetWeatherUI = makeAssistantToolUI({
116
120
  toolName: "get_weather",
117
121
  render: ({ args, result, status }) => {
118
- if (status.type === "requires_action")
122
+ if (status.type === "requires-action")
119
123
  return <p>Getting weather for {args.location}...</p>;
120
124
  if (status.type === "running") return <p>Loading...</p>;
121
125
  if (status.type === "incomplete" && status.reason === "error")
@@ -127,8 +131,9 @@ const GetWeatherUI = makeAssistantToolUI({
127
131
  });
128
132
 
129
133
  function App() {
134
+ const runtime = /* your runtime setup */;
130
135
  return (
131
- <AssistantRuntimeProvider>
136
+ <AssistantRuntimeProvider runtime={runtime}>
132
137
  {/* ...your other components */}
133
138
  <GetWeatherUI />
134
139
  </AssistantRuntimeProvider>
@@ -3,6 +3,10 @@ title: makeAssistantTool
3
3
  description: Create React components that provide reusable tools to the assistant.
4
4
  ---
5
5
 
6
+ <Callout type="warn">
7
+ `makeAssistantTool` is deprecated. Use the `Tools()` API instead. See the
8
+ [Tools guide](/docs/guides/tools) for the recommended approach.
9
+ </Callout>
6
10
 
7
11
  `makeAssistantTool` creates a React component that provides a tool to the assistant. This is useful for defining reusable tools that can be composed into your application.
8
12
 
@@ -121,7 +125,7 @@ function Form() {
121
125
  name: "status",
122
126
  type: "ToolCallMessagePartStatus",
123
127
  description:
124
- 'The execution status object with a type property: "running", "complete", "incomplete", or "requires_action"',
128
+ 'The execution status object with a type property: "running", "complete", "incomplete", or "requires-action"',
125
129
  },
126
130
  {
127
131
  name: "addResult",
@@ -21,6 +21,11 @@ const ReadableButton = makeAssistantVisible(Button);
21
21
  const ClickableButton = makeAssistantVisible(Button, {
22
22
  clickable: true, // Enables the click tool
23
23
  });
24
+
25
+ // With editable configuration
26
+ const EditableInput = makeAssistantVisible(Input, {
27
+ editable: true, // Enables the edit tool
28
+ });
24
29
  ```
25
30
 
26
31
  ## API Reference
@@ -30,6 +35,7 @@ const ClickableButton = makeAssistantVisible(Button, {
30
35
  - `Component`: The base React component to enhance
31
36
  - `config`: Optional configuration object
32
37
  - `clickable`: When true, enables the assistant to programmatically click the component
38
+ - `editable`: When true, enables the assistant to programmatically set the value of an input or textarea within the component
33
39
 
34
40
  ### Behavior
35
41
 
@@ -37,13 +43,14 @@ The HOC will:
37
43
 
38
44
  1. Make the component's HTML structure available to the assistant via the system context
39
45
  2. Optionally provide a `click` tool if `clickable` is true
40
- 3. Handle nested readable components (only the outermost component's HTML is provided)
41
- 4. Forward refs and maintain component props
46
+ 3. Optionally provide an `edit` tool if `editable` is true, which sets the value of an `<input>` or `<textarea>` inside the component
47
+ 4. Handle nested readable components (only the outermost component's HTML is provided)
48
+ 5. Forward refs and maintain component props
42
49
 
43
50
  ## Example
44
51
 
45
52
  ```tsx
46
- // Create a readable form input
53
+ // Create a readable form input that the assistant can also edit
47
54
  const Input = ({ label, ...props }) => (
48
55
  <div>
49
56
  <label>{label}</label>
@@ -51,12 +58,12 @@ const Input = ({ label, ...props }) => (
51
58
  </div>
52
59
  );
53
60
 
54
- const ReadableInput = makeAssistantVisible(Input);
61
+ const EditableInput = makeAssistantVisible(Input, { editable: true });
55
62
 
56
63
  // Use in your component
57
64
  function Form() {
58
65
  return (
59
- <ReadableInput label="Email" type="email" placeholder="Enter your email" />
66
+ <EditableInput label="Email" type="email" placeholder="Enter your email" />
60
67
  );
61
68
  }
62
69
  ```
@@ -69,4 +76,6 @@ When a component is made readable:
69
76
  - The component's `outerHTML` is provided as system context
70
77
  - If `clickable` is true, a unique `data-click-id` is added and a `click` tool is provided
71
78
  - The click tool uses `querySelector` and simulates a click event
79
+ - If `editable` is true, a unique `data-edit-id` is added and an `edit` tool is provided
80
+ - The edit tool uses `querySelector` to find an `<input>` or `<textarea>` and sets its value, dispatching `input` and `change` events
72
81
  - All props and refs are properly forwarded to maintain component functionality
@@ -79,20 +79,20 @@ import { useAui, tool } from "@assistant-ui/react";
79
79
  import { useEffect } from "react";
80
80
  import { z } from "zod";
81
81
 
82
+ // Define tool outside the component (no runtime dependencies)
83
+ const myTool = tool({
84
+ parameters: z.object({
85
+ query: z.string(),
86
+ }),
87
+ execute: async ({ query }) => {
88
+ const result = await searchDatabase(query);
89
+ return { result };
90
+ },
91
+ });
92
+
82
93
  function MyComponent() {
83
94
  const aui = useAui();
84
95
 
85
- // Define tool using the tool() helper
86
- const myTool = tool({
87
- parameters: z.object({
88
- query: z.string(),
89
- }),
90
- execute: async ({ query }) => {
91
- const result = await searchDatabase(query);
92
- return { result };
93
- },
94
- });
95
-
96
96
  useEffect(() => {
97
97
  // Register context provider
98
98
  return aui.modelContext().register({
@@ -161,7 +161,7 @@ function SmartTransactionHistory({ userProfile }) {
161
161
  `,
162
162
  }),
163
163
  });
164
- }, [api, userProfile]);
164
+ }, [aui, userProfile]);
165
165
 
166
166
  // Previous components...
167
167
  }
@@ -189,7 +189,7 @@ This creates a more intuitive and safer banking experience while maintaining the
189
189
 
190
190
  Learn more about each API:
191
191
 
192
- - [makeAssistantVisible](make-assistant-readable) for component understanding
192
+ - [makeAssistantVisible](make-assistant-visible) for component understanding
193
193
  - [makeAssistantTool](make-assistant-tool) for transaction analysis
194
194
  - [useAssistantInstructions](use-assistant-instructions) for behavior guidance
195
195
  - [Model Context](model-context) for dynamic context management
@@ -4,7 +4,7 @@ description: Inspect runtime state, context, and events in the browser.
4
4
  ---
5
5
 
6
6
 
7
- Hey, the assistant-ui DevTools allows you to debug the assistant-ui state and context, and events without resorting to `console.log`. It's an easy way to see how data flows to the assistant-ui's runtime layer.
7
+ The assistant-ui DevTools allows you to debug the assistant-ui state and context, and events without resorting to `console.log`. It's an easy way to see how data flows to the assistant-ui's runtime layer.
8
8
 
9
9
  ![Screenshot of the DevTools UI showing logs and state panels](../../../../../.github/assets/devtoolsui.png)
10
10
 
@@ -27,8 +27,9 @@ import { AssistantRuntimeProvider } from "@assistant-ui/react";
27
27
  import { DevToolsModal } from "@assistant-ui/react-devtools";
28
28
 
29
29
  export function AssistantApp() {
30
+ const runtime = /* your runtime setup */;
30
31
  return (
31
- <AssistantRuntimeProvider>
32
+ <AssistantRuntimeProvider runtime={runtime}>
32
33
  <DevToolsModal />
33
34
  {/* ...your assistant-ui... */}
34
35
  </AssistantRuntimeProvider>
@@ -157,7 +157,7 @@ class VisionImageAdapter implements AttachmentAdapter {
157
157
  type: "image",
158
158
  name: file.name,
159
159
  file,
160
- status: { type: "running" },
160
+ status: { type: "requires-action", reason: "composer-send" },
161
161
  };
162
162
  }
163
163
 
@@ -224,7 +224,7 @@ class PDFAttachmentAdapter implements AttachmentAdapter {
224
224
  type: "document",
225
225
  name: file.name,
226
226
  file,
227
- status: { type: "running" },
227
+ status: { type: "requires-action", reason: "composer-send" },
228
228
  };
229
229
  }
230
230
 
@@ -360,7 +360,7 @@ class UploadAttachmentAdapter implements AttachmentAdapter {
360
360
  type: "file",
361
361
  name: file.name,
362
362
  file,
363
- status: { type: "running", progress: 0 },
363
+ status: { type: "running", reason: "uploading", progress: 0 },
364
364
  } as PendingAttachment;
365
365
 
366
366
  // Simulate upload progress
@@ -372,7 +372,7 @@ class UploadAttachmentAdapter implements AttachmentAdapter {
372
372
  type: "file",
373
373
  name: file.name,
374
374
  file,
375
- status: { type: "running", progress },
375
+ status: { type: "running", reason: "uploading", progress },
376
376
  } as PendingAttachment;
377
377
  }
378
378
 
@@ -382,7 +382,7 @@ class UploadAttachmentAdapter implements AttachmentAdapter {
382
382
  type: "file",
383
383
  name: file.name,
384
384
  file,
385
- status: { type: "running", progress: 100 },
385
+ status: { type: "running", reason: "uploading", progress: 100 },
386
386
  } as PendingAttachment;
387
387
  }
388
388
 
@@ -436,7 +436,6 @@ class ValidatedImageAdapter implements AttachmentAdapter {
436
436
  status: {
437
437
  type: "incomplete",
438
438
  reason: "error",
439
- error: new Error("File size exceeds 5MB limit"),
440
439
  },
441
440
  };
442
441
  }
@@ -456,7 +455,6 @@ class ValidatedImageAdapter implements AttachmentAdapter {
456
455
  status: {
457
456
  type: "incomplete",
458
457
  reason: "error",
459
- error,
460
458
  },
461
459
  };
462
460
  }
@@ -467,7 +465,7 @@ class ValidatedImageAdapter implements AttachmentAdapter {
467
465
  type: "image",
468
466
  name: file.name,
469
467
  file,
470
- status: { type: "running" },
468
+ status: { type: "requires-action", reason: "composer-send" },
471
469
  };
472
470
  }
473
471
 
@@ -514,7 +512,7 @@ const handleMultipleFiles = async (files: FileList) => {
514
512
  const filesToAdd = Array.from(files).slice(0, maxFiles);
515
513
 
516
514
  for (const file of filesToAdd) {
517
- await aui.composer().addAttachment({ file });
515
+ await aui.composer().addAttachment(file);
518
516
  }
519
517
  };
520
518
  ```
@@ -529,7 +527,7 @@ Attachments are sent to the backend as file content parts.
529
527
 
530
528
  Attachments work with all assistant-ui runtimes:
531
529
 
532
- - **AI SDK Runtime**: `useChatRuntime`, `useAssistantRuntime`
530
+ - **AI SDK Runtime**: `useChatRuntime`
533
531
  - **External Store**: `useExternalStoreRuntime`
534
532
  - **LangGraph**: `useLangGraphRuntime`
535
533
  - **Custom Runtimes**: Any runtime implementing the attachment interface
@@ -552,4 +550,4 @@ Attachments work with all assistant-ui runtimes:
552
550
  ## Resources
553
551
 
554
552
  - [Attachment UI Components](/docs/ui/attachment) - UI implementation details
555
- - [API Reference](/docs/api-reference) - Detailed type definitions
553
+ - [API Reference](/docs/api-reference/overview) - Detailed type definitions
@@ -30,7 +30,7 @@ const Message = () => {
30
30
  ...
31
31
  <BranchPicker /> {/* <-- show the branch picker */}
32
32
  ...
33
- </EditComposerPrimitive.Root>
33
+ </MessagePrimitive.Root>
34
34
  );
35
35
  };
36
36
 
@@ -48,13 +48,18 @@ const BranchPicker = () => {
48
48
 
49
49
  ## API
50
50
 
51
- You can access the current branch state or navigate via the API as well.
52
- These APIs rely on the message state and may only be called inside a message component.
51
+ You can access the current branch state or navigate via the API as well.
52
+ These APIs rely on the message scope and may only be called inside a message component.
53
53
 
54
54
  ```tsx
55
- const hasBranches = useMessageIf({ hasBranches: true }); // whether branchCount is >= 2
55
+ import { useAui, useAuiState } from "@assistant-ui/react";
56
+
57
+ // read branch state
58
+ const { branchNumber, branchCount } = useAuiState((s) => s.message);
56
59
 
57
60
  // navigation
58
- const goToNextBranch = useGoToNextBranch(); // null if there is no next branch
59
- const goToPreviousBranch = useGoToPreviousBranch(); // null if there is no previous branch
61
+ const aui = useAui();
62
+ aui.message().switchToBranch({ position: "next" });
63
+ aui.message().switchToBranch({ position: "previous" });
64
+ aui.message().switchToBranch({ branchId: "some-id" });
60
65
  ```
@@ -47,9 +47,13 @@ const ChainOfThought: FC = () => {
47
47
  Thinking
48
48
  </ChainOfThoughtPrimitive.AccordionTrigger>
49
49
  <AuiIf condition={(s) => !s.chainOfThought.collapsed}>
50
- <ChainOfThoughtPrimitive.Parts
51
- components={{ Reasoning, tools: { Fallback: ToolFallback } }}
52
- />
50
+ <ChainOfThoughtPrimitive.Parts>
51
+ {({ part }) => {
52
+ if (part.type === "reasoning") return <Reasoning {...part} />;
53
+ if (part.type === "tool-call") return <ToolFallback {...part} />;
54
+ return null;
55
+ }}
56
+ </ChainOfThoughtPrimitive.Parts>
53
57
  </AuiIf>
54
58
  </ChainOfThoughtPrimitive.Root>
55
59
  );
@@ -58,12 +62,12 @@ const ChainOfThought: FC = () => {
58
62
  const AssistantMessage: FC = () => {
59
63
  return (
60
64
  <MessagePrimitive.Root>
61
- <MessagePrimitive.Parts
62
- components={{
63
- Text: MarkdownText,
64
- ChainOfThought, // groups reasoning + tool parts
65
+ <MessagePrimitive.Parts>
66
+ {({ part }) => {
67
+ if (part.type === "text") return <MarkdownText />;
68
+ return null;
65
69
  }}
66
- />
70
+ </MessagePrimitive.Parts>
67
71
  </MessagePrimitive.Root>
68
72
  );
69
73
  };
@@ -111,15 +115,13 @@ Renders the grouped parts when expanded (nothing when collapsed).
111
115
 
112
116
  ```tsx
113
117
  <AuiIf condition={(s) => !s.chainOfThought.collapsed}>
114
- <ChainOfThoughtPrimitive.Parts
115
- components={{
116
- Reasoning,
117
- tools: { Fallback: ToolFallback },
118
- Layout: ({ children }) => (
119
- <div className="border-l-2 border-muted pl-4">{children}</div>
120
- ),
118
+ <ChainOfThoughtPrimitive.Parts>
119
+ {({ part }) => {
120
+ if (part.type === "reasoning") return <Reasoning {...part} />;
121
+ if (part.type === "tool-call") return <ToolFallback {...part} />;
122
+ return null;
121
123
  }}
122
- />
124
+ </ChainOfThoughtPrimitive.Parts>
123
125
  </AuiIf>
124
126
  ```
125
127