@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.
- package/.docs/organized/code-examples/waterfall.md +5 -3
- package/.docs/organized/code-examples/with-a2a.md +676 -0
- package/.docs/organized/code-examples/with-ag-ui.md +7 -8
- package/.docs/organized/code-examples/with-ai-sdk-v6.md +28 -16
- package/.docs/organized/code-examples/with-artifacts.md +5 -5
- package/.docs/organized/code-examples/with-assistant-transport.md +3 -3
- package/.docs/organized/code-examples/with-chain-of-thought.md +34 -26
- package/.docs/organized/code-examples/with-cloud-standalone.md +10 -8
- package/.docs/organized/code-examples/with-cloud.md +5 -5
- package/.docs/organized/code-examples/with-custom-thread-list.md +7 -7
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +8 -8
- package/.docs/organized/code-examples/with-expo.md +571 -539
- package/.docs/organized/code-examples/with-external-store.md +3 -4
- package/.docs/organized/code-examples/with-ffmpeg.md +5 -5
- package/.docs/organized/code-examples/with-google-adk.md +353 -0
- package/.docs/organized/code-examples/with-heat-graph.md +304 -0
- package/.docs/organized/code-examples/with-langgraph.md +25 -23
- package/.docs/organized/code-examples/with-parent-id-grouping.md +4 -4
- package/.docs/organized/code-examples/with-react-hook-form.md +6 -9
- package/.docs/organized/code-examples/with-react-ink.md +265 -0
- package/.docs/organized/code-examples/with-react-router.md +10 -11
- package/.docs/organized/code-examples/with-store.md +29 -18
- package/.docs/organized/code-examples/with-tanstack.md +7 -7
- package/.docs/organized/code-examples/with-tap-runtime.md +6 -4
- package/.docs/raw/blog/2025-01-31-changelog/index.mdx +1 -1
- package/.docs/raw/blog/2026-03-launch-week/index.mdx +227 -0
- package/.docs/raw/docs/(docs)/architecture.mdx +1 -1
- package/.docs/raw/docs/(docs)/cli.mdx +14 -9
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +8 -3
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +5 -1
- package/.docs/raw/docs/(docs)/copilots/{make-assistant-readable.mdx → make-assistant-visible.mdx} +14 -5
- package/.docs/raw/docs/(docs)/copilots/model-context.mdx +11 -11
- package/.docs/raw/docs/(docs)/copilots/motivation.mdx +2 -2
- package/.docs/raw/docs/(docs)/devtools.mdx +3 -2
- package/.docs/raw/docs/(docs)/guides/attachments.mdx +9 -11
- package/.docs/raw/docs/(docs)/guides/branching.mdx +11 -6
- package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +18 -16
- package/.docs/raw/docs/(docs)/guides/context-api.mdx +81 -43
- package/.docs/raw/docs/(docs)/guides/dictation.mdx +5 -5
- package/.docs/raw/docs/(docs)/guides/editing.mdx +16 -7
- package/.docs/raw/docs/(docs)/guides/latex.mdx +3 -0
- package/.docs/raw/docs/(docs)/guides/message-timing.mdx +2 -1
- package/.docs/raw/docs/(docs)/guides/multi-agent.mdx +173 -0
- package/.docs/raw/docs/(docs)/guides/quoting.mdx +55 -206
- package/.docs/raw/docs/(docs)/guides/speech.mdx +1 -4
- package/.docs/raw/docs/(docs)/guides/suggestions.mdx +9 -15
- package/.docs/raw/docs/(docs)/guides/tool-ui.mdx +17 -7
- package/.docs/raw/docs/(docs)/guides/tools.mdx +24 -9
- package/.docs/raw/docs/(docs)/index.mdx +3 -3
- package/.docs/raw/docs/(docs)/installation.mdx +69 -46
- package/.docs/raw/docs/(reference)/api-reference/context-providers/text-message-part-provider.mdx +20 -6
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +24 -4
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-hook-form.mdx +1 -1
- package/.docs/raw/docs/(reference)/api-reference/integrations/vercel-ai-sdk.mdx +20 -19
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +28 -53
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +4 -4
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +7 -1
- package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +20 -14
- package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +1 -1
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +99 -45
- package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +52 -40
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +343 -23
- package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +4 -6
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +4 -2
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +3 -5
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +169 -22
- package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +14 -4
- package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +15 -26
- package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +39 -21
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +33 -9
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +48 -21
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +36 -7
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +30 -10
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +12 -10
- package/.docs/raw/docs/(reference)/migrations/deprecation-policy.mdx +1 -1
- package/.docs/raw/docs/(reference)/migrations/react-langgraph-v0-7.mdx +9 -4
- package/.docs/raw/docs/(reference)/migrations/v0-11.mdx +7 -5
- package/.docs/raw/docs/(reference)/migrations/v0-12.mdx +9 -7
- package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +159 -0
- package/.docs/raw/docs/(reference)/react-compatibility.mdx +5 -134
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +89 -7
- package/.docs/raw/docs/cloud/ai-sdk.mdx +19 -5
- package/.docs/raw/docs/cloud/langgraph.mdx +13 -3
- package/.docs/raw/docs/ink/adapters.mdx +41 -0
- package/.docs/raw/docs/ink/custom-backend.mdx +203 -0
- package/.docs/raw/docs/ink/hooks.mdx +448 -0
- package/.docs/raw/docs/ink/index.mdx +239 -0
- package/.docs/raw/docs/ink/migration.mdx +140 -0
- package/.docs/raw/docs/ink/primitives.mdx +699 -0
- package/.docs/raw/docs/react-native/adapters.mdx +63 -87
- package/.docs/raw/docs/react-native/custom-backend.mdx +11 -14
- package/.docs/raw/docs/react-native/hooks.mdx +214 -232
- package/.docs/raw/docs/react-native/index.mdx +118 -159
- package/.docs/raw/docs/react-native/migration.mdx +144 -0
- package/.docs/raw/docs/react-native/primitives.mdx +431 -302
- package/.docs/raw/docs/runtimes/a2a/index.mdx +294 -0
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +9 -9
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +14 -3
- package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +53 -0
- package/.docs/raw/docs/runtimes/assistant-transport.mdx +59 -25
- package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +13 -6
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +138 -38
- package/.docs/raw/docs/runtimes/custom/local.mdx +184 -42
- package/.docs/raw/docs/runtimes/data-stream.mdx +92 -19
- package/.docs/raw/docs/runtimes/google-adk/index.mdx +624 -0
- package/.docs/raw/docs/runtimes/helicone.mdx +6 -6
- package/.docs/raw/docs/runtimes/langgraph/index.mdx +38 -27
- package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +1 -1
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +15 -20
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +7 -11
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +8 -11
- package/.docs/raw/docs/runtimes/langserve.mdx +6 -7
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +18 -3
- package/.docs/raw/docs/ui/context-display.mdx +147 -0
- package/.docs/raw/docs/ui/file.mdx +5 -4
- package/.docs/raw/docs/ui/image.mdx +5 -4
- package/.docs/raw/docs/ui/markdown.mdx +3 -1
- package/.docs/raw/docs/ui/model-selector.mdx +8 -8
- package/.docs/raw/docs/ui/part-grouping.mdx +7 -10
- package/.docs/raw/docs/ui/quote.mdx +210 -0
- package/.docs/raw/docs/ui/reasoning.mdx +12 -11
- package/.docs/raw/docs/ui/sources.mdx +88 -17
- package/.docs/raw/docs/ui/streamdown.mdx +16 -7
- package/.docs/raw/docs/ui/thread-list.mdx +11 -13
- package/.docs/raw/docs/ui/thread.mdx +28 -33
- package/.docs/raw/docs/ui/tool-fallback.mdx +5 -6
- package/.docs/raw/docs/ui/tool-group.mdx +9 -8
- package/.docs/raw/docs/utilities/heat-graph.mdx +236 -0
- package/.docs/raw/docs/utilities/tw-shimmer.mdx +211 -0
- package/package.json +4 -4
- package/.docs/raw/docs/(reference)/legacy/styled/assistant-modal.mdx +0 -77
- package/.docs/raw/docs/(reference)/legacy/styled/decomposition.mdx +0 -635
- package/.docs/raw/docs/(reference)/legacy/styled/markdown.mdx +0 -77
- package/.docs/raw/docs/(reference)/legacy/styled/scrollbar.mdx +0 -72
- package/.docs/raw/docs/(reference)/legacy/styled/thread-width.mdx +0 -22
- package/.docs/raw/docs/(reference)/legacy/styled/thread.mdx +0 -77
- /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
|
|
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
|
|
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>
|
|
117
|
-
-e, --example <example>
|
|
118
|
-
--
|
|
119
|
-
--
|
|
120
|
-
--
|
|
121
|
-
--use-
|
|
122
|
-
--
|
|
123
|
-
-
|
|
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 "
|
|
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 === "
|
|
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 "
|
|
128
|
+
'The execution status object with a type property: "running", "complete", "incomplete", or "requires-action"',
|
|
125
129
|
},
|
|
126
130
|
{
|
|
127
131
|
name: "addResult",
|
package/.docs/raw/docs/(docs)/copilots/{make-assistant-readable.mdx → make-assistant-visible.mdx}
RENAMED
|
@@ -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.
|
|
41
|
-
4.
|
|
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
|
|
61
|
+
const EditableInput = makeAssistantVisible(Input, { editable: true });
|
|
55
62
|
|
|
56
63
|
// Use in your component
|
|
57
64
|
function Form() {
|
|
58
65
|
return (
|
|
59
|
-
<
|
|
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
|
-
}, [
|
|
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-
|
|
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
|
-
|
|
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
|

|
|
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: "
|
|
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: "
|
|
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: "
|
|
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(
|
|
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
|
|
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
|
-
</
|
|
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
|
|
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
|
-
|
|
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
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
116
|
-
Reasoning
|
|
117
|
-
|
|
118
|
-
|
|
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
|
|