Release history.

Every package release from the assistant-ui monorepo, grouped by day.

Oct 6, 2026

62 releases

>@assistant-ui/ai-sdk@0.0.11avoid repeated toolkit parameter schema conversion3 changes

Fixes1

avoid repeated toolkit parameter schema conversion

Other2

a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them
Forward MCP Apps metadata from AI SDK tool metadata while keeping server routing controlled by provider metadata.
view on github
>@assistant-ui/core@0.3.24support message-scoped converter metadata invalidation14 changes

Features1

support message-scoped converter metadata invalidation

Fixes5

core
release realtime voice listeners when a session ends on its own
traverse deeply nested tool-call messages without overflowing the stack
core
keep the selected branch when a local run continues an existing answer
disable message speech actions when no speech adapter is configured
preserve OpenCode interactions with prototype-named identifiers

Other8

a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them
name local runtime initial messages from React's useId during a server render, so a Next.js cacheComponents prerender no longer reads Math.random; the browser keeps random ids
getSuggestionKeys moved to @assistant-ui/core/internal so React and Vue key suggestions the same way.
a thread can open on its latest page and load older messages on demand: the external store adapter takes hasEarlier and onLoadEarlier, the runtime surfaces them as thread.hasEarlier, thread.isLoadingEarlier and aui.thread.loadEarlier with one load in flight at a time, ThreadPrimitive.LoadEarlier loads the next page, ThreadPrimitive.Viewport keeps the visible messages in place when it lands above them, and the React Native ThreadPrimitive.MessagesFlatList pages through the runtime when it gets no history prop
reasoning parts carry an optional timing with their start and end times, typed as the new MessagePartTiming that ToolCallTiming now aliases, so a host can show how long its agent thought; the assistant-stream accumulator stamps it while reasoning streams, joined reasoning parts and the cloud format keep it, and a MessagePrimitive.GroupedParts group reports the span of its timed parts as timing
the composer trigger popover primitives and their adapter, item, category and directive formatter types get stable names; the Unstable_ names stay as deprecated aliases, and the trigger popover hooks stay unstable
a long thread can be virtualized per part instead of per message: createThreadRowsSelector flattens the thread for useAuiState into stable rows (a user message, each top-level part group of an assistant message, a turn end) that keep their identity while tokens stream, and ThreadPrimitive.Row renders one row with only the scopes it needs; a turn-end row carries the turn's start time and, once the turn completes, the latest end its messages record, so a turn footer can show how long the agent worked
a server rendered local runtime now names id-less initial messages and tool calls the same way while the browser hydrates, so data-message-id and selection quotes match the client's messages
view on github
>@assistant-ui/core@0.3.23the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down8 changes

Fixes3

the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down
core
resolve aui.threads.getLoadThreadsPromise, reload and loadMore once getState reports the result: the loaded list, or loadError when the initial load or reload fails. A failed loadMore request is logged and its promise still resolves. If the client can't commit within 100ms, as inside the act that completes the load in a test or under a Suspense boundary that hides the client, the promises resolve anyway. In tests, await them outside that act to read the loaded list.
core
end the voice session on hang up even when committing the unfinished reply throws; a synchronous voice commit failure is reported like a rejected one

Chores1

update dependencies

Other4

keep pending history writes from restoring deleted messages without delaying deletion
report a history write that fails in the background through a thread historyWriteError event instead of dropping it silently
name a remote thread list's first new thread from React's useId during a server render, so a Next.js cacheComponents prerender no longer reads Math.random; the browser keeps a random id
preserve message part state by host-supplied identity across renderers and store lookups, and carry part identity through cloud persistence; a part whose type changes at the same position now mounts fresh state.
view on github
>@assistant-ui/react@0.15.25allow visible component action settle delays to be configured9 changes

Features2

allow visible component action settle delays to be configured
support message-scoped converter metadata invalidation

Fixes1

clean up cancelled and pre-load failed sandbox frame renders

Other6

a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them
a thread can open on its latest page and load older messages on demand: the external store adapter takes hasEarlier and onLoadEarlier, the runtime surfaces them as thread.hasEarlier, thread.isLoadingEarlier and aui.thread.loadEarlier with one load in flight at a time, ThreadPrimitive.LoadEarlier loads the next page, ThreadPrimitive.Viewport keeps the visible messages in place when it lands above them, and the React Native ThreadPrimitive.MessagesFlatList pages through the runtime when it gets no history prop
streaming text, running tool durations, and message stall detection read no wall clock during render, so a cacheComponents prerender no longer fails on them.
reasoning parts carry an optional timing with their start and end times, typed as the new MessagePartTiming that ToolCallTiming now aliases, so a host can show how long its agent thought; the assistant-stream accumulator stamps it while reasoning streams, joined reasoning parts and the cloud format keep it, and a MessagePrimitive.GroupedParts group reports the span of its timed parts as timing
the composer trigger popover primitives and their adapter, item, category and directive formatter types get stable names; the Unstable_ names stay as deprecated aliases, and the trigger popover hooks stay unstable
a long thread can be virtualized per part instead of per message: createThreadRowsSelector flattens the thread for useAuiState into stable rows (a user message, each top-level part group of an assistant message, a turn end) that keep their identity while tokens stream, and ThreadPrimitive.Row renders one row with only the scopes it needs; a turn-end row carries the turn's start time and, once the turn completes, the latest end its messages record, so a turn footer can show how long the agent worked
view on github
>@assistant-ui/react@0.15.24ignore the Enter or Escape that ends an IME composition, so committing a conversion in Safari no longer sends the message, and cancelling one no longer cancels the run or stops read-aloud3 changes

Fixes1

react
ignore the Enter or Escape that ends an IME composition, so committing a conversion in Safari no longer sends the message, and cancelling one no longer cancels the run or stops read-aloud

Chores1

update dependencies

Other1

key message parts by their id when no other part of the same type in the message shares it, so a replaced or reordered part no longer keeps another part's component state
view on github
>@assistant-ui/react-a2a@0.2.41keep runs started by onCancel abortable during runtime detachment1 change

Fixes1

keep runs started by onCancel abortable during runtime detachment
view on github
>@assistant-ui/react-a2a@0.2.40a2aPartsToContent and a2aMessageToContent skip null part entries instead of throwing, a2aPartToContent returns an empty text part for a null part, and a part with a null text, url or raw is read as if the field were absent, the way A2AClient already normalizes it3 changes

Fixes1

a2aPartsToContent and a2aMessageToContent skip null part entries instead of throwing, a2aPartToContent returns an empty text part for a null part, and a part with a null text, url or raw is read as if the field were absent, the way A2AClient already normalizes it

Chores1

update dependencies

Other1

Notify task subscribers when an owned server cancellation response updates the task.
view on github
>@assistant-ui/react-ag-ui@0.0.65convert deeply nested tool calls without overflowing the stack3 changes

Fixes1

convert deeply nested tool calls without overflowing the stack

Other2

opencode and ag-ui reasoning parts, and opencode tool call parts, now carry the start and end times their sources record
Hold queued messages while sending is disabled.
view on github
>@assistant-ui/react-ag-ui@0.0.64report an HttpAgent network failure to onError once, and keep an answer that already finished complete when the connection drops afterwards4 changes

Fixes3

report an HttpAgent network failure to onError once, and keep an answer that already finished complete when the connection drops afterwards
keep a resumed answer complete when Stop is pressed after the resume stream delivered it but before the stream closes
the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down

Chores1

update dependencies
view on github
>@assistant-ui/react-data-stream@0.12.35preserve assistant-generated files in subsequent model history1 change

Fixes1

preserve assistant-generated files in subsequent model history
view on github
>@assistant-ui/react-google-adk@0.0.35preserve run configuration when ADK tool results resume a turn1 change

Fixes1

preserve run configuration when ADK tool results resume a turn
view on github
>@assistant-ui/react-google-adk@0.0.34skip ADK messages, tool calls, and media parts that are missing required fields instead of crashing the thread or rendering broken images and files5 changes

Fixes3

skip ADK messages, tool calls, and media parts that are missing required fields instead of crashing the thread or rendering broken images and files
skip null tool call entries when projecting approvals, collecting confirmation and credential requests, cancelling pending calls, and sending messages
the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down

Chores1

update dependencies

Other1

Mark unfinished assistant messages as cancelled when an ADK run is stopped, including finalized tool-call and long-running tool messages.
view on github
>@assistant-ui/react-langchain@0.0.35support message-scoped converter metadata invalidation1 change

Features1

support message-scoped converter metadata invalidation
view on github
>@assistant-ui/react-langchain@0.0.34skip a null or nameless LangChain tool call instead of crashing the thread4 changes

Fixes3

skip a null or nameless LangChain tool call instead of crashing the thread
stop sending a cancellation without a tool_call_id for a pending tool call that has no id, which the graph rejects
the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down

Chores1

update dependencies
view on github
>@assistant-ui/react-langgraph@0.14.33support message-scoped converter metadata invalidation2 changes

Features1

support message-scoped converter metadata invalidation

Fixes1

parse streamed LangGraph tool arguments incrementally instead of reparsing the complete prefix for every delta
view on github
>@assistant-ui/react-langgraph@0.14.32stop sending a cancellation without a toolcallid for a pending tool call that has no id, which the graph rejects4 changes

Fixes3

stop sending a cancellation without a tool_call_id for a pending tool call that has no id, which the graph rejects
skip a null entry in an AI message's tool_call_chunks instead of throwing and dropping the reply, both while a chunk streams and when the message is converted
the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down

Chores1

update dependencies
view on github
>@assistant-ui/react-opencode@0.2.28preserve OpenCode interactions with prototype-named identifiers3 changes

Fixes1

preserve OpenCode interactions with prototype-named identifiers

Other2

opencode and ag-ui reasoning parts, and opencode tool call parts, now carry the start and end times their sources record
opencode question requests render as approval questionnaires on their tool call, answered through the default tool fallback
view on github
>@assistant-ui/react-opencode@0.2.27the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down3 changes

Fixes1

the remaining runtime hooks keep their thread loads, runs, queued messages, subagent transcripts and event streams across a fast refresh or a StrictMode replay instead of tearing them down

Chores1

update dependencies

Other1

keep a loaded pi or opencode thread from loading again when its runtime hook's effects replay
view on github
>@assistant-ui/react-pi@0.0.28preserve live runs while loading cold thread history2 changes

Fixes2

react-pi
preserve live runs while loading cold thread history
project streaming transcript updates incrementally
view on github
>assistant-stream@0.3.48preserve assistant-generated files in subsequent model history3 changes

Fixes2

preserve assistant-generated files in subsequent model history
use attachment media types when converting images for models

Other1

reasoning parts carry an optional timing with their start and end times, typed as the new MessagePartTiming that ToolCallTiming now aliases, so a host can show how long its agent thought; the assistant-stream accumulator stamps it while reasoning streams, joined reasoning parts and the cloud format keep it, and a MessagePrimitive.GroupedParts group reports the span of its timed parts as timing
view on github
>assistant-stream@0.3.47toGenericMessages no longer throws on a message without content, an attachment without content, or a null part or attachment; it skips what is missing and converts the rest of the conversation.2 changes

Fixes1

toGenericMessages no longer throws on a message without content, an attachment without content, or a null part or attachment; it skips what is missing and converts the rest of the conversation.

Chores1

update dependencies
view on github
>safe-content-frame@0.0.33clean up cancelled and pre-load failed sandbox frame renders1 change

Fixes1

clean up cancelled and pre-load failed sandbox frame renders
view on github
>40 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.17update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/ai-sdk@0.0.10update dependencies2 changes

Chores1

update dependencies

Other1

forward data part ids from AI SDK messages in both directions.
view on github
>@assistant-ui/eve@0.0.22a failed eve turn now ends as an error carrying eve's failure code and message, and a cancelled one as cancelled, instead of the cancelled or complete status eve's reducer left them with1 change

Other1

a failed eve turn now ends as an error carrying eve's failure code and message, and a cancelled one as cancelled, instead of the cancelled or complete status eve's reducer left them with
view on github
>@assistant-ui/eve@0.0.21update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/mcp-docs-server@0.3.3update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/metro@0.0.16update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/next@0.0.24update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.16@assistant-ui/ai-sdk@0.0.111 change

Other1

@assistant-ui/ai-sdk@0.0.11
view on github
>@assistant-ui/react-ai-sdk@1.4.15update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-data-stream@0.12.34update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-devtools@1.2.23update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-generative-ui@0.0.24a DatePicker with its own action dispatches it once per committed value: a pick from the native picker commits at once, and a typed value commits on blur or on Enter outside a form, instead of dispatching every intermediate value while typing2 changes

Other2

a DatePicker with its own action dispatches it once per committed value: a pick from the native picker commits at once, and a typed value commits on blur or on Enter outside a form, instead of dispatching every intermediate value while typing
keep a datetime DatePicker's value stable while a year is typed in a time zone whose historical offset has seconds, by submitting second precision when the offset needs it
view on github
>@assistant-ui/react-generative-ui@0.0.23update dependencies3 changes

Chores1

update dependencies

Other2

give DatePicker time and datetime modes on the web, Slack and Teams, and map a2ui DateTimeInput onto them; a datetime with an offset is an instant that shows in the viewer's zone where the client knows it and submits with its original offset
submit edited DatePicker times in the browser's normalized form, so .500 goes out as .5 whichever spelling the browser reports
view on github
>@assistant-ui/react-hook-form@0.12.36update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ink@0.0.48a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them5 changes

Other5

a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them
add MessagePrimitive.Quote, so a message sent with a composer quote can show what it replied to
reasoning parts carry an optional timing with their start and end times, typed as the new MessagePartTiming that ToolCallTiming now aliases, so a host can show how long its agent thought; the assistant-stream accumulator stamps it while reasoning streams, joined reasoning parts and the cloud format keep it, and a MessagePrimitive.GroupedParts group reports the span of its timed parts as timing
the composer trigger popover primitives and their adapter, item, category and directive formatter types get stable names; the Unstable_ names stay as deprecated aliases, and the trigger popover hooks stay unstable
a long thread can be virtualized per part instead of per message: createThreadRowsSelector flattens the thread for useAuiState into stable rows (a user message, each top-level part group of an assistant message, a turn end) that keep their identity while tokens stream, and ThreadPrimitive.Row renders one row with only the scopes it needs; a turn-end row carries the turn's start time and, once the turn completes, the latest end its messages record, so a turn footer can show how long the agent worked
view on github
>@assistant-ui/react-ink@0.0.47update dependencies2 changes

Chores1

update dependencies

Other1

key message parts by their id when no other part of the same type in the message shares it, so a replaced or reordered part no longer keeps another part's component state
view on github
>@assistant-ui/react-ink-markdown@0.0.47@assistant-ui/core@0.3.241 change

Other1

@assistant-ui/core@0.3.24
view on github
>@assistant-ui/react-ink-markdown@0.0.46update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-lexical@0.2.16update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-markdown@0.14.19update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-mcp@0.1.21update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-native@0.1.46a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them7 changes

Other7

a tool approval can ask several questions at once, or let one question take several answers: display: "questions" with approval.questions, answered through respondToApproval({ answers }) keyed by question id, validated before it reaches onRespondToToolApproval and recorded on approval.answers; the AI SDK converter reads questions and answers from the approval descriptor when a response handler is set, and the cloud format keeps them
a thread can open on its latest page and load older messages on demand: the external store adapter takes hasEarlier and onLoadEarlier, the runtime surfaces them as thread.hasEarlier, thread.isLoadingEarlier and aui.thread.loadEarlier with one load in flight at a time, ThreadPrimitive.LoadEarlier loads the next page, ThreadPrimitive.Viewport keeps the visible messages in place when it lands above them, and the React Native ThreadPrimitive.MessagesFlatList pages through the runtime when it gets no history prop
add MessagePrimitive.Quote, so a message sent with a composer quote can show what it replied to
reasoning parts carry an optional timing with their start and end times, typed as the new MessagePartTiming that ToolCallTiming now aliases, so a host can show how long its agent thought; the assistant-stream accumulator stamps it while reasoning streams, joined reasoning parts and the cloud format keep it, and a MessagePrimitive.GroupedParts group reports the span of its timed parts as timing
react native threads can virtualize per row with ThreadPrimitive.RowsFlatList, which renders each row with ThreadPrimitive.Row, supports inverted and pages earlier messages
the composer trigger popover primitives and their adapter, item, category and directive formatter types get stable names; the Unstable_ names stay as deprecated aliases, and the trigger popover hooks stay unstable
a long thread can be virtualized per part instead of per message: createThreadRowsSelector flattens the thread for useAuiState into stable rows (a user message, each top-level part group of an assistant message, a turn end) that keep their identity while tokens stream, and ThreadPrimitive.Row renders one row with only the scopes it needs; a turn-end row carries the turn's start time and, once the turn completes, the latest end its messages record, so a turn footer can show how long the agent worked
view on github
>@assistant-ui/react-native@0.1.45update dependencies2 changes

Chores1

update dependencies

Other1

key message parts by their id when no other part of the same type in the message shares it, so a replaced or reordered part no longer keeps another part's component state
view on github
>@assistant-ui/react-o11y@0.0.46update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-pi@0.0.27update dependencies2 changes

Chores1

update dependencies

Other1

keep a loaded pi or opencode thread from loading again when its runtime hook's effects replay
view on github
>@assistant-ui/react-streamdown@0.3.19update dependencies2 changes

Chores1

update dependencies

Other1

require streamdown 2.7 and remend 1.4, and keep the tail-bounded remend repair in step with remend 1.4's code spans, so a comparison after an escaped backtick still gets escaped
view on github
>@assistant-ui/react-syntax-highlighter@0.14.7update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/store@0.3.17update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/tap@0.9.21update dependencies2 changes

Chores1

update dependencies

Other1

tap gains an internal refresh scope that recomputes memos and replays effects for hooks it wraps when its token changes
view on github
>@assistant-ui/vite@0.0.20update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/vue@0.0.1first public release of @assistant-ui/vue, the Vue binding for assistant-ui: AuiProvider, useAui, useAuiState, useAuiEvent, and headless primitives for threads, messages, composers, attachments, branches, suggestions, and thread lists, running the same AI SDK runtime as React through @assistant-ui/ai-sdk1 change

Other1

first public release of @assistant-ui/vue, the Vue binding for assistant-ui: AuiProvider, useAui, useAuiState, useAuiEvent, and headless primitives for threads, messages, composers, attachments, branches, suggestions, and thread lists, running the same AI SDK runtime as React through @assistant-ui/ai-sdk
view on github
>@assistant-ui/x-buildutils@0.0.30update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/x-generative-compiler@0.0.20update dependencies1 change

Chores1

update dependencies
view on github
>assistant-cloud@0.2.5update dependencies1 change

Chores1

update dependencies
view on github
>assistant-ui@0.0.121the agent skill the CLI installs now comes from the skills commit that routes cloud persistence to the cloud option of useChatRuntime instead of the removed cloud-ai-sdk hooks3 changes

Other3

the agent skill the CLI installs now comes from the skills commit that routes cloud persistence to the cloud option of useChatRuntime instead of the removed cloud-ai-sdk hooks
add browser sign-in and cloud setup commands that provision a shared multiplayer chat with hackathon access-code support.
add --setup-url to cloud login and setup so an active setup wizard can show device authorization while the CLI polls Accounts and keeps its credentials locally.
view on github
>assistant-ui@0.0.120update dependencies1 change

Chores1

update dependencies
view on github
>create-assistant-ui@0.0.84assistant-ui@0.0.1211 change

Other1

assistant-ui@0.0.121
view on github
>create-assistant-ui@0.0.83update dependencies1 change

Chores1

update dependencies
view on github
>heat-graph@0.0.23update dependencies1 change

Chores1

update dependencies
view on github
>safe-content-frame@0.0.32update dependencies1 change

Chores1

update dependencies
view on github

Oct 2, 2026

24 releases

>@assistant-ui/ai-sdk@0.0.9give chat thread events the thread list's id instead of a placeholder9 changes

Fixes7

give chat thread events the thread list's id instead of a placeholder
ai-sdk
deliver a host tool approval answer when an earlier stored tool part is approval-requested without an approval object
keep a host tool-approval answer with its chat across runtime remounts and settled tool results
ai-sdk
store a message paused on an unanswered tool approval, so a reload keeps the approval request.
persist successful host approval answers after switching owners
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
cancel unanswered approvals once a later AI SDK message follows them, and store late tool results in their originating message without resuming the obsolete run. with cancelPendingToolCallsOnSend: false and onRespondToToolApproval, superseded approvals settle as cancelled. an idle joined message keeps its auto status when the last entry has an open tool call, and the last message keeps running during a run.

Performance1

streaming tool input that contains a long run of }, ] or " no longer stalls the thread on every update

Other1

Report automatic reconnect errors exposed through the AI SDK's Chat.error, invoke onResumeError, and clear only the failed checkpoint. A replacement checkpoint remains intact if the callback starts another run. Errors from a subsequent send or resume are not attributed to a completed reconnect.
view on github
>@assistant-ui/core@0.3.22RuntimeCapabilities.answerToolCall reports whether a thread can answer a waiting tool call by adding its result, resuming it, or responding to its approval. a readonly thread reports false, a local thread true, and an external store true once it sets onAddToolResult, onResumeToolCall, or onRespondToToolApproval, or runs tools itself through unstableenableToolInvocations; the react-ink ToolFallback shows a pending approval's prompt without its Allow and Deny controls where it is false31 changes

Features2

RuntimeCapabilities.answerToolCall reports whether a thread can answer a waiting tool call by adding its result, resuming it, or responding to its approval. a readonly thread reports false, a local thread true, and an external store true once it sets onAddToolResult, onResumeToolCall, or onRespondToToolApproval, or runs tools itself through unstable_enableToolInvocations; the react-ink ToolFallback shows a pending approval's prompt without its Allow and Deny controls where it is false
the cloud thread list's create receives the id of the thread being saved, so a runtime whose backend assigns its id on the first turn can wait for that turn, and upsert: true makes a retried create reuse the thread that already has the returned external id

Fixes29

a history adapter without update now stores a paused run once a later turn cancels it, and importing a thread accepts a message listed before its parent, so a turn sent after a pause reloads instead of failing with Parent message not found
core
log a failed ThreadRuntime.append or MessageRuntime.reload with console.error instead of letting it surface as an unhandled rejection. Neither call returns its task, so the rejection never reached a caller; a host that sends these failures to an error tracker should catch them inside its own runtime callbacks.
cancel pending suggestions when their adapter is removed
a message sent while a local run is paused ends the pause instead of stranding it: open approvals record resolution: "cancelled", the paused message settles as cancelled, and a result added to it later no longer resumes the run and drops the turns after it; toGenericMessages closes out the calls of an earlier or settled message as not completed
register the SDK that changes along with the cloud on the new cloud in useCloudThreadListAdapter.
the anonymous cloud client picks up NEXT_PUBLIC_ASSISTANT_BASE_URL in Next.js production builds made with Turbopack, where the browser fell back to an in-memory thread list
keep an empty file part filename through cloud history, as image parts and attachments already do
refresh original source messages when a converter reuses its output for new inputs.
extract base64 data from URLs that omit the media type, preserving explicit file-type hints and defaulting standalone parsing to text/plain.
never resume a pause that a follow-up ended, even after the follow-up is deleted
derive joined assistant message status from its latest assistant segment.
read a tool part's original messages when it contains a nested conversation.
preserve a tool call's nested conversation when its result omits a replacement transcript.
reserve a queued run before notifying subscribers so reentrant enqueues preserve FIFO order.
keep a turn a subscriber appends while a run or an append is still moving the head
stop reloading a running thread from notifying store subscribers during render.
keep a runtime host's threads, their in-flight runs, and its runtime object across a fast refresh.
store a message before a turn that follows it while its run is still open, store a completed message a tool result replaced, and load a history that holds a child without its parent
keep copy feedback scoped to the message that was copied
core
ignore an interactable setState for an id that is not registered, so a later load still restores its stored value
give each in-memory thread its own composer, and abandon a deleted thread's pending attachment send instead of dispatching it through that thread; an external-store core adopting a shared repository mid-run now reuses its live optimistic placeholder
a thread its thread list discards for good now abandons an attachment send it was still preparing, instead of dispatching it after the thread is gone.
core
keep the message queue draining when a subscriber cancels while a queued message is being dispatched
disconnect active voice sessions when their adapter is removed
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
a voice session ends and a pending attachment send is abandoned when the component calling a useExternalStoreRuntime that no thread list hosts unmounts, or when a remounted AssistantRuntimeProvider replaces a thread list's runtime
emit threadListItem.switchedTo and switchedAway from the tap thread lists
preserve higher-priority model context settings when providers overlap
give assistant transport user messages a client id, so the settled message replaces the optimistic one and reaches the cloud copy
view on github
>@assistant-ui/eve@0.0.20useEveAgentRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread keeps the eve session its first turn creates as its external id, saved with upsert so a retried save cannot store a second thread. a resuming session now reports isLoading, and a message sent during the replay waits for it instead of being refused2 changes

Features1

useEveAgentRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread keeps the eve session its first turn creates as its external id, saved with upsert so a retried save cannot store a second thread. a resuming session now reports isLoading, and a message sent during the replay waits for it instead of being refused

Fixes1

runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
view on github
>@assistant-ui/react@0.15.23honor user={false}, assistant={false} and system={false} on MessagePrimitive.If, and migrate them to the matching AuiIf inequality4 changes

Fixes4

honor user={false}, assistant={false} and system={false} on MessagePrimitive.If, and migrate them to the matching AuiIf inequality
publish committed WebMCP tool implementations before layout effects
leave modified arrow keys available to application shortcuts while preserving ordinary thread-list focus navigation.
scope Escape speech cancellation to the targeted thread
view on github
>@assistant-ui/react-a2a@0.2.39runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down1 change

Fixes1

runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
view on github
>@assistant-ui/react-ag-ui@0.0.63apply ACTIVITYDELTA to the activity part its snapshot created and log ignored step boundaries3 changes

Fixes2

apply ACTIVITY_DELTA to the activity part its snapshot created and log ignored step boundaries
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down

Other1

Editing a message now creates a sibling branch and keeps the original turn reachable instead of deleting it.
view on github
>@assistant-ui/react-devtools@1.2.22show conversation lists that contain only archived threads2 changes

Fixes2

show conversation lists that contain only archived threads
restart copy feedback timing after each successful copy
view on github
>@assistant-ui/react-generative-ui@0.0.22map a2ui sliders onto the slider vocabulary26 changes

Features8

map a2ui sliders onto the slider vocabulary
add a CheckboxGroup vocabulary component for picking any number of options; its $input is the array of checked values, a Form collects it the same way, Slack renders it as checkboxes, and Teams as a multi-select Input.ChoiceSet
answered prompt_user controls lock and restore submitted form values after a reload.
add carousel paging controls
support negative chart values, tooltips, and series colors
add sliders, checkbox switches, and option descriptions to generative UI.
format generative ui tables and fact deltas
add an undo window to generative UI buttons

Fixes17

resolve absolute A2UI bindings from the surface root inside templates.
carry an A2UI event's userMessage in the a2ui:action payload, with the text the user entered when it is bound to an input
the A2UI converter maps a ChoicePicker without a variant to RadioGroup like the spec default mutuallyExclusive, maps multipleSelection to CheckboxGroup with every selected value, and turns a functionCall button action into an a2ui:functionCall $action; an action it cannot read now warns
update A2UI surface bindings and function values while users edit bound inputs, preserve edits across unrelated agent updates, and send one current value for shared bindings without changing the public API
keep the a2ui renderer importable from next.js server code
expand A2UI template children written in the spec's { componentId, path } shape, and keep a Row or Column template in its own container instead of a list
A2UI inputs show their bound value and are named by the full binding pointer, and a button's context or functionCall args bound to an input send what the user entered; $action values accept { "$field": name } references resolved when the action fires, falling back to an optional fallback (the value the agent sent, for converted surfaces) where no control can be read, such as on Slack or in a component that dispatches $action itself, while decodeSubmitData resolves them from a Teams card's inputs; Input and Select take a defaultValue that the Slack and Teams converters map, and a control resets when a re-render changes its initial value
preserve obscured, numeric, temporal, and single choice input values in a2ui surfaces, and render password inputs masked on teams and as an omission note on slack
the A2UI reducer applies v0.9.1 operations the way it applies v0.9 ones instead of warning that the version is unsupported, so a surface from a v0.9.1 server renders
the A2UI converter maps a spec Button variant (primary to the primary button style, borderless to ghost) and a TextField longText variant (a multiline Input); an explicit buttonStyle still wins
the A2UI converter evaluates function call values (formatString with its ${...} expressions, formatNumber, formatCurrency, formatDate, pluralize, and, or, not), including inside an action's context and a functionCall's args, and resolves relative binding paths against the current template item; any other function in a value is skipped with a warning
preserve literal entities in string props and keys when escaping JSX.
render prompt controls while a tool is waiting for user input.
keep the vocabulary importable from react server components
isolate radio selections across generated cards while preserving logical field names in form submissions and action references.
preserve radio, checkbox, and select choices when options reorder or new options are inserted.
preserve JSON object text in Slack plain-text input actions instead of decoding it as button metadata.

Other1

Resolve Slack action $field references from named controls in the submitted state.values.
view on github
>@assistant-ui/react-google-adk@0.0.33preserve activity message text during ADK conversion3 changes

Fixes3

preserve activity message text during ADK conversion
report repeated agent transfers from separate runs
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
view on github
>@assistant-ui/react-ink@0.0.46RuntimeCapabilities.answerToolCall reports whether a thread can answer a waiting tool call by adding its result, resuming it, or responding to its approval. a readonly thread reports false, a local thread true, and an external store true once it sets onAddToolResult, onResumeToolCall, or onRespondToToolApproval, or runs tools itself through unstableenableToolInvocations; the react-ink ToolFallback shows a pending approval's prompt without its Allow and Deny controls where it is false2 changes

Features1

RuntimeCapabilities.answerToolCall reports whether a thread can answer a waiting tool call by adding its result, resuming it, or responding to its approval. a readonly thread reports false, a local thread true, and an external store true once it sets onAddToolResult, onResumeToolCall, or onRespondToToolApproval, or runs tools itself through unstable_enableToolInvocations; the react-ink ToolFallback shows a pending approval's prompt without its Allow and Deny controls where it is false

Fixes1

preserve the multiline input cursor when Alt+Up or Alt+Down is used for application shortcuts.
view on github
>@assistant-ui/react-langgraph@0.14.31reload LangGraph threads with the latest committed load callback4 changes

Fixes4

reload LangGraph threads with the latest committed load callback
resume the graph after a frontend tool result when the same AI message also has a tool call without an id, which used to hold the result back forever
skip null tool_calls entries in the runtime's run bookkeeping, its pending tool call scan and appendLangChainChunk's message merging instead of throwing on them
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
view on github
>@assistant-ui/react-opencode@0.2.26runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down1 change

Fixes1

runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
view on github
>@assistant-ui/react-pi@0.0.26finish controller cleanup when event unsubscription throws2 changes

Fixes2

finish controller cleanup when event unsubscription throws
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
view on github
>@assistant-ui/store@0.3.16deliver scoped events from remote thread clients4 changes

Fixes4

deliver scoped events from remote thread clients
remove runtime import cycles from development bundles
runtime hooks keep their clients, runs, streams, queued sends and pending history copies across a fast refresh or a StrictMode replay instead of rebuilding or tearing them down
run useInsertionEffect cleanups only when a resource is released for good, as React does, let createTapRoot.unmount release a mountOnSubscribe root instead of throwing, and have destroy release an assistant client's resources for good
view on github
>@assistant-ui/tap@0.9.20run useInsertionEffect cleanups only when a resource is released for good, as React does, let createTapRoot.unmount release a mountOnSubscribe root instead of throwing, and have destroy release an assistant client's resources for good1 change

Fixes1

run useInsertionEffect cleanups only when a resource is released for good, as React does, let createTapRoot.unmount release a mountOnSubscribe root instead of throwing, and have destroy release an assistant client's resources for good
view on github
>assistant-cloud@0.2.4mark files.pdfToImages deprecated, since Assistant Cloud has no /v1/files/pdf-to-images route and every call answers 4042 changes

Fixes2

mark files.pdfToImages deprecated, since Assistant Cloud has no /v1/files/pdf-to-images route and every call answers 404
threads.create accepts upsert, so a server can create or find the thread for an external_id without a cast
view on github
>assistant-stream@0.3.46a message sent while a local run is paused ends the pause instead of stranding it: open approvals record resolution: "cancelled", the paused message settles as cancelled, and a result added to it later no longer resumes the run and drops the turns after it; toGenericMessages closes out the calls of an earlier or settled message as not completed2 changes

Fixes2

a message sent while a local run is paused ends the pause instead of stranding it: open approvals record resolution: "cancelled", the paused message settles as cancelled, and a result added to it later no longer resumes the run and drops the turns after it; toGenericMessages closes out the calls of an earlier or settled message as not completed
remove runtime import cycles from development bundles
view on github
>assistant-ui@0.0.119assistant-ui agent installs the skills commit whose cloud skill no longer shows files.pdfToImages2 changes

Fixes2

assistant-ui agent installs the skills commit whose cloud skill no longer shows files.pdfToImages
honor user={false}, assistant={false} and system={false} on MessagePrimitive.If, and migrate them to the matching AuiIf inequality
view on github
>heat-graph@0.0.22render heat-graph's contexts through .Provider so Root works on React 181 change

Fixes1

render heat-graph's contexts through .Provider so Root works on React 18
view on github
>5 maintenance releasesdependency updates and chores
>@assistant-ui/react-ai-sdk@1.4.14@assistant-ui/ai-sdk@0.0.91 change

Other1

@assistant-ui/ai-sdk@0.0.9
view on github
>@assistant-ui/react-ink-markdown@0.0.45@assistant-ui/store@0.3.161 change

Other1

@assistant-ui/store@0.3.16
view on github
>@assistant-ui/react-markdown@0.14.18preserve currency and math delimiters inside html blocks during preprocessing.1 change

Other1

preserve currency and math delimiters inside html blocks during preprocessing.
view on github
>@assistant-ui/react-streamdown@0.3.18preserve currency and math delimiters inside html blocks during preprocessing.3 changes

Other3

preserve currency and math delimiters inside html blocks during preprocessing.
preserve raw html bodies inside list and blockquote containers during streaming repair.
keep comparison escapes within each line without splitting settled prose or slowing down on blank lines.
view on github
>create-assistant-ui@0.0.82assistant-ui@0.0.1191 change

Other1

assistant-ui@0.0.119
view on github

Sep 24, 2026

38 releases

>@assistant-ui/ai-sdk@0.0.8on the AI SDK runtime a recorded tool interaction shows on its tool call, is written to history at once (under auitoolInteractions in the stored copy's metadata, never in the chat's messages) and returns on reload16 changes

Features5

on the AI SDK runtime a recorded tool interaction shows on its tool call, is written to history at once (under __aui_toolInteractions in the stored copy's metadata, never in the chat's messages) and returns on reload
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.
mark interim tool output as isPreliminary so a tool that streams its result stays running until the final result lands, instead of reading as complete on the first chunk; react-pi flags live partialResult output and ai-sdk flags preliminary outputs, and the default tool fallback keeps the output a cancelled tool streamed before it was cut off
let a tool approval question declare that it accepts a dismissal
core
let typed text enter a connected voice session through sendText

Fixes11

ai (7.0.101 or newer) is now a peer dependency, so the adapter shares the app's ai and upgrading it no longer splits assistant-cloud into two copies whose AssistantCloud types reject each other
read select and text approval requests from the AI SDK approval descriptor
an approval the host answers through onRespondToToolApproval is stored with its message (under __aui_toolApprovalResponses in the stored copy's metadata, never in the chat's messages) and shows as answered after a reload
clone AssistantChatTransport per thread in useChatThread
ai-sdk
cancel pending tool calls left behind a staged message
a frontend tool's artifact reaches its tool UI on the AI SDK runtime and survives a reload from history; the stored copy keeps it under __aui_toolArtifacts in message metadata, which is stripped on load and never sent to the server
stop an attachment send when the thread it belongs to is destroyed
emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
stop a nested useChatRuntime chat when its own component unmounts, stop registering AISDKThreads cloud threads on the client destroy signal, and stop fast refresh from aborting the destroy signal of useAui(config) hosts
preserve prototype-named custom message metadata
correct settled and failed tool-call arg conversion
view on github
>@assistant-ui/core@0.3.21useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXTPUBLICASSISTANTBASEURL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecated71 changes

Features9

useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXT_PUBLIC_ASSISTANT_BASE_URL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecated
CloudRendererHost draws a stored conversation in the Assistant Cloud dashboard's As shown view with the app's own components; a read only thread now reports itself disabled, so its composer renders disabled, and ignores composer input instead of throwing
show a message with uploading attachments in the thread while it is being sent
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.
mark interim tool output as isPreliminary so a tool that streams its result stays running until the final result lands, instead of reading as complete on the first chunk; react-pi flags live partialResult output and ai-sdk flags preliminary outputs, and the default tool fallback keeps the output a cancelled tool streamed before it was cut off
name the runtime state types ThreadRuntimeState, MessageRuntimeState, ComposerRuntimeState, AttachmentRuntimeState and ThreadListItemRuntimeState
let a tool approval question declare that it accepts a dismissal
a tool UI can record what the user did on its tool call with unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore them
core
let typed text enter a connected voice session through sendText

Fixes60

useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol
core
the assistant transport runtime sends a new thread's remote id with its first request and keeps its default thread when the host re-renders; a resume never creates a thread, and a new thread whose first run is not an append still gets its title
type the assistant transport request body that prepareSendCommandsRequest receives; its fields are no longer unknown in @assistant-ui/react, and threadId is an optional string, absent when a resume has no remote id, instead of string | null
core
keep a message appended during a local history load on the loaded branch
stop an attachment send when the thread it belongs to is destroyed
core
keep image filename and text/image provider metadata through the aui/v0 encoder
feedback submitted mid-run no longer strands the message, drops its history write, or keeps invoking the adapter.
roll back subscriptions when connecting to their source fails
validate persisted assistant statuses and steps before loading history
keep app-scoped interactables isolated and persist edits made before adapter attachment
report cloud engagement events once per thread list instead of once per mounted thread, keep counting a run that ends while its thread is in the background, and let an engagement id resolver decline an event for a thread it does not know
preserve file and attachment provider metadata in Cloud history
keep a tool call's artifact and provider metadata in cloud history
warn about lossy tool results before Cloud persistence can discard their data
use a binary MIME type for Cloud uploads with unknown file types
attempt every runtime cleanup when an unsubscribe throws
core
report isLast on the message client, not only on the thread list
keep a tool call's pending approval or interrupt actionable when the call already carries a result, so a question raised by a tool that streamed output first (react-pi partial results) still renders its controls instead of reading as complete
core
spoken user turns no longer carry a status, which only assistant messages accept, so a host that stores a voice transcript and converts it back through convertMessage no longer throws
emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
core
keep a dictation session that a composer subscriber starts while send cancels the previous one
bound Web Speech dictation shutdown when the browser never ends
core
a message part type that the part renderer or fromThreadMessageLike does not handle is now a type error, and ThreadMessageLike content accepts every part of ThreadAssistantMessagePart and ThreadUserMessagePart
core
a message deleted through an external store's onDelete stays deleted when the host re-renders or the thread reloads before onDelete resolves, instead of coming back as a branch
core
an external store runtime that switches threads through adapters.threadList.threadId builds the new thread from the current store, so the previous thread's messages no longer show up as a branch of the new one and a tool call in the new thread's history no longer executes on switch
prevent a cancelled edit from sending after an attachment upload finishes.
disconnect a thread's voice session when a thread switch or its thread list discards the runtime
core
keep nested required fields in interactable update tool schemas, so the model sends a nested object whole instead of a partial one that the shallow merge would store as is
keep streaming and persist the final message when a tool result arrives mid-run.
core
AssistantFrameProvider.dispose withdraws the frame's tools from the parent host
render registered tool and data UIs when GroupedParts children return null
prevent late local-storage history writes from restoring deleted threads
keep a nested object's unwritten fields while an interactable update streams it
keep messages stable across values events when UI lives in graph state
core
persist a tool result added after its message settled through the history adapter's update, and report a cloud run only from the write that first settles its message; Assistant Cloud still rejects rewriting a message that later turns follow
tear down late voice controls at most once while preserving cleanup after early cancellation and the original session end reason.
core
refresh model context subscribers when the main thread runtime attaches
core
leave the message repository unchanged when it rejects an update or a delete
resolve component registries by own keys only, so a component, tool or data part name that only Object.prototype has (toString, constructor, __proto__) takes the Fallback or GenerativeUIRenderError path instead of rendering the inherited built-in
persist settled feedback in histories that support message updates, including the bundled local storage adapter
core
settle a tool call only on its final result in the tool tracker, aui/v0 persistence and addToolResult
preserve falsy error payloads such as 0, "" and false in external runtimes, while continuing to treat null as no error
clean up dictation sessions when listener setup fails
a readonly thread ignores mutations instead of throwing, so a stored conversation rendered through ReadonlyThreadProvider no longer breaks when a tool UI adds a result, answers an approval or submits feedback; reading external state still throws
reuse successful attachment uploads after a sibling fails in both runtime and ExternalThread composers, while preserving cleanup when the unsent draft is discarded.
correct settled and failed tool-call arg conversion
handle synchronous Web Speech synthesis terminal events
core
clear a tool call's status when a human-input request made from streamCall is resumed or aborted, so the runtime stops reporting it as running or waiting; an execute that keeps running after its request is aborted now shows as executing instead of waiting
suggestion chips with send follow the voice session's canSendText instead of the run state, so a chip clicked during a spoken reply sends its prompt into a connected session that takes typed text, and stays disabled while the session cannot
core
log a failed controlled threadId switch in useRemoteThreadListRuntime instead of dropping it, as the RemoteThreadList client already does
reject archiving, deleting or detaching the thread the user is in when its first initialize fails, instead of looping forever and freezing the tab
key each rendered suggestion by its content instead of its array index, so removing or reordering a suggestion no longer displays a removed suggestion's component state against a surviving one
render numeric and nested-array generative UI children
ignore malformed AssistantFrame messages
carry a tool result's modelContent across the data-stream wire and aui/v0 persistence
core
cancelling an assistant transport run after its response body was fully received calls onCancel and clears the queued commands, instead of leaving them pending and sending them with the next run
core
an assistant transport request no longer carries the parentId of a message that a cancel or a failed run discarded
drop a voice transcript or typed turn whose thread runtime is replaced or unmounted before it commits. one held for a pending history load no longer waits forever, so a typed turn's append resolves, and a typed turn still sending is no longer written to the replaced runtime's history or handed to its onVoiceTranscript
hold a voice transcript or typed turn until a pending thread history load settles, so it is committed onto the loaded thread instead of a branch the import leaves behind. A thread switched before the load ends drops the waiting message rather than committing it under the wrong thread
wait for an attachment that is still uploading before sending it

Refactors1

make the replay boundary stream clear its own replay state on read failures and cancellation, so the transition out of replay mode is balanced with the transition in

Docs1

core
describe which optimistic messages eviction removes and when completed optimistic updates stop being replayed
view on github
>@assistant-ui/eve@0.0.19emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts2 changes

Fixes2

emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
ignore events whose wire type names a prototype-inherited member instead of stamping a turn timestamp under it
view on github
>@assistant-ui/metro@0.0.15stop @assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run1 change

Fixes1

stop @assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run
view on github
>@assistant-ui/react@0.15.22useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXTPUBLICASSISTANTBASEURL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecated23 changes

Features6

useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXT_PUBLIC_ASSISTANT_BASE_URL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecated
CloudRendererHost draws a stored conversation in the Assistant Cloud dashboard's As shown view with the app's own components; a read only thread now reports itself disabled, so its composer renders disabled, and ignores composer input instead of throwing
show a message with uploading attachments in the thread while it is being sent
name the runtime state types ThreadRuntimeState, MessageRuntimeState, ComposerRuntimeState, AttachmentRuntimeState and ThreadListItemRuntimeState
a tool UI can record what the user did on its tool call with unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore them
core
let typed text enter a connected voice session through sendText

Fixes17

type the assistant transport request body that prepareSendCommandsRequest receives; its fields are no longer unknown in @assistant-ui/react, and threadId is an optional string, absent when a resume has no remote id, instead of string | null
lock the current scroll container after reasoning content or its ancestor chain changes
prevent stale message hover updates after unmount
scope selection toolbars to their owning thread
honor registered data-part fallbacks on native MessageContent and grouped parts
emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
every distribution re-exports the same shared surface from @assistant-ui/core. @assistant-ui/react-ink gains ReadonlyThreadProvider, ToolCallMessagePartStatus, groupPartByType, GroupByContext, VoiceSessionState, the external store runtime (useExternalStoreRuntime, useExternalMessageConverter, their adapters and options), the message queue, the tool approval types, the generative UI renderer and the cloud thread list hooks; @assistant-ui/react-native gains VoiceSessionState, the cloud thread list hooks, the generative UI renderer and the runtime state and adapter types the web package already carried; @assistant-ui/react gains MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, TitleGenerationAdapter, createSimpleTitleAdapter and ChainOfThoughtPartByIndexProvider.
react
attach the ExportMarkdown download anchor to the document so Firefox starts the download
prevent disabled attachment dropzones from navigating to dropped files.
clear attachment drag state when the dropzone is disabled
react
stop a pending bottom scroll from hijacking keyboard-driven content growth
resolve component registries by own keys only, so a component, tool or data part name that only Object.prototype has (toString, constructor, __proto__) takes the Fallback or GenerativeUIRenderError path instead of rendering the inherited built-in
expose feedback submission state to assistive technology
react
keep the selection toolbar in sync after a right-click, so a context menu that swallows the mouseup no longer leaves it showing (and quoting) the previous selection
Use successful Standard Schema output for tool execution and model output. Keep the original arguments for validation errors and stored tool calls.
respond to touch and programmatic text selection changes
restore the pre-clamp viewport position after a layout-induced scroll clamp on WebKit
view on github
>@assistant-ui/react-a2a@0.2.37keep finalized voice transcripts in the thread and store them through a configured history adapter; the agent does not receive them, since A2A has no way to record a message without asking the agent to act on it8 changes

Features4

react-a2a
keep finalized voice transcripts in the thread and store them through a configured history adapter; the agent does not receive them, since A2A has no way to record a message without asking the agent to act on it
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.
A2UI DataParts render as surfaces whose tool artifact replays them, the task's artifacts ride on the assistant message in metadata.custom.a2a.artifacts without inline file bytes, and a message paused for input is written to history with its question
the A2A runtime records tool interactions on their tool call, keeps them through task updates and A2UI surface rebuilds, and writes them to history

Fixes4

clear the message repository before creating a new thread
clear the message repository before switching A2A threads
load persisted history independently of agent-card discovery
allow cancellation while dynamic request headers are resolving
view on github
>@assistant-ui/react-ag-ui@0.0.61keep finalized voice transcripts in the thread, send them with the next run, and store them through a configured history adapter8 changes

Features3

react-ag-ui
keep finalized voice transcripts in the thread, send them with the next run, and store them through a configured history adapter
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.
the AG-UI runtime records tool interactions on their tool call, keeps them while the run streams and A2UI surfaces are rebuilt, and writes them to history

Fixes5

clear the message repository before creating a new thread
fold the prose a turn spoke before a parentless tool call onto that call's container, so a reloaded thread renders the turn as the one message the live run did
send an attachment whose data URL is not base64 (such as data:text/plain,hello or a percent-encoded SVG) as an AG-UI url source instead of a data source that claims to hold base64, so the agent receives the file intact and it is no longer wrapped in a second data URL when a snapshot is restored.
react-ag-ui
keep a finished answer complete when Stop lands before the response closes
preserve unrendered activity snapshots as scoped agui-activity/<type> data parts across live runs and restored transcripts, keep a2ui surface rebuild operations in artifact.a2ui, and persist each run's final agent state on its settled assistant message
view on github
>@assistant-ui/react-ai-sdk@1.4.13ai (7.0.101 or newer) is now a peer dependency, so the adapter shares the app's ai and upgrading it no longer splits assistant-cloud into two copies whose AssistantCloud types reject each other1 change

Fixes1

ai (7.0.101 or newer) is now a peer dependency, so the adapter shares the app's ai and upgrading it no longer splits assistant-cloud into two copies whose AssistantCloud types reject each other
view on github
>@assistant-ui/react-data-stream@0.12.33useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol2 changes

Fixes2

useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol
useCloudRuntime posts the thread messages as they are, so a run after a frontend tool result no longer fails with 400
view on github
>@assistant-ui/react-devtools@1.2.21show an Error's name, message and stack instead of an empty object2 changes

Fixes2

react-devtools
show an Error's name, message and stack instead of an empty object
preserve snapshots for prototype-named thread ids
view on github
>@assistant-ui/react-generative-ui@0.0.21the A2UI converter follows v0.9 and v1.0 child references, so a spec Card keeps its content and a spec Button takes its label from its child Text (any other child, such as an Icon, renders inside the button); a button action written as { event: { name, context } } dispatches like the bare { name, context } form; with keepUnknownComponents, a kept Modal or Tabs keeps the components it references as children, and a child reference the converter cannot follow is reported as a warning1 change

Fixes1

the A2UI converter follows v0.9 and v1.0 child references, so a spec Card keeps its content and a spec Button takes its label from its child Text (any other child, such as an Icon, renders inside the button); a button action written as { event: { name, context } } dispatches like the bare { name, context } form; with keepUnknownComponents, a kept Modal or Tabs keeps the components it references as children, and a child reference the converter cannot follow is reported as a warning
view on github
>@assistant-ui/react-generative-ui@0.0.20surfaceToOperations turns a reduced A2UI surface into operations that replay it, convertSurfaceToUISpec can keep unknown components with keepUnknownComponents, and Icon, List, ChoicePicker and DateTimeInput now render4 changes

Features2

surfaceToOperations turns a reduced A2UI surface into operations that replay it, convertSurfaceToUISpec can keep unknown components with keepUnknownComponents, and Icon, List, ChoicePicker and DateTimeInput now render
an action fired in present or prompt_user output is recorded on its tool call, and a value returned by a prompt_user action handler becomes the tool result

Fixes2

preserve model-provided children when rendering RadioGroup
preserve recursive component schema references in generative UI tool parameters.
view on github
>@assistant-ui/react-google-adk@0.0.32useAdkSubmitAuth answers the pending adkrequestcredential call with its auth config carrying the credential as exchangedAuthCredential, the reply ADK resumes the tool on; an id that is not a pending request throws6 changes

Fixes6

useAdkSubmitAuth answers the pending adk_request_credential call with its auth config carrying the credential as exchangedAuthCredential, the reply ADK resumes the tool on; an id that is not a pending request throws
skip malformed ADK message content instead of throwing
respect response backpressure when streaming ADK events to slow readers.
keep a tool call's pending approval or interrupt actionable when the call already carries a result, so a question raised by a tool that streamed output first (react-pi partial results) still renders its controls instead of reading as complete
report an explicit error when an ADK event stream has no body
allow cancellation while dynamic request headers are resolving
view on github
>@assistant-ui/react-hook-form@0.12.35settle assistant form submissions when their form unmounts1 change

Fixes1

settle assistant form submissions when their form unmounts
view on github
>@assistant-ui/react-ink@0.0.45show a message with uploading attachments in the thread while it is being sent9 changes

Features4

show a message with uploading attachments in the thread while it is being sent
name the runtime state types ThreadRuntimeState, MessageRuntimeState, ComposerRuntimeState, AttachmentRuntimeState and ThreadListItemRuntimeState
a tool UI can record what the user did on its tool call with unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore them
core
let typed text enter a connected voice session through sendText

Fixes5

emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
every distribution re-exports the same shared surface from @assistant-ui/core. @assistant-ui/react-ink gains ReadonlyThreadProvider, ToolCallMessagePartStatus, groupPartByType, GroupByContext, VoiceSessionState, the external store runtime (useExternalStoreRuntime, useExternalMessageConverter, their adapters and options), the message queue, the tool approval types, the generative UI renderer and the cloud thread list hooks; @assistant-ui/react-native gains VoiceSessionState, the cloud thread list hooks, the generative UI renderer and the runtime state and adapter types the web package already carried; @assistant-ui/react gains MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, TitleGenerationAdapter, createSimpleTitleAdapter and ChainOfThoughtPartByIndexProvider.
keep case-distinct file storage keys separate on case-insensitive filesystems
let ink ToolFallback answer decision-shaped approval requests
react-ink
export the ToolCallTiming type that @assistant-ui/react and @assistant-ui/react-native already export
view on github
>@assistant-ui/react-ink-markdown@0.0.44render Shiki tokens that use short hex colors1 change

Fixes1

render Shiki tokens that use short hex colors
view on github
>@assistant-ui/react-langchain@0.0.33keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; an edit or regenerate after them forks from before them and sends them again7 changes

Features2

react-langchain
keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; an edit or regenerate after them forks from before them and sends them again
react-langgraph
keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; @assistant-ui/react-langchain/converter gains getMessageModality, which reads the additional_kwargs.modality a transcript carries

Fixes5

build
catch statement-level type imports in published declarations
emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
keep a subagent transcript scoped to its own namespace, so a nested subagent's messages no longer replace its parent's transcript while the nested task runs
coerce malformed LangChain tool-call args to an empty object
keep messages stable across values events when UI lives in graph state
view on github
>@assistant-ui/react-langgraph@0.14.30keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; @assistant-ui/react-langchain/converter gains getMessageModality, which reads the additionalkwargs.modality a transcript carries5 changes

Features1

react-langgraph
keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; @assistant-ui/react-langchain/converter gains getMessageModality, which reads the additional_kwargs.modality a transcript carries

Fixes4

normalize malformed LangGraph tool arguments during conversion
coerce malformed LangChain tool-call args to an empty object
synthesize a computer_call id when the provider omits call_id
discard cached attachments when editing or reloading removes their messages
view on github
>@assistant-ui/react-lexical@0.2.15allow Lexical composer submission while a queued run is active.4 changes

Fixes3

allow Lexical composer submission while a queued run is active.
build the composer with LexicalExtensionComposer instead of the deprecated LexicalComposer, with PlainTextExtension and HistoryExtension replacing the legacy plugins. The editable textbox now carries aria-placeholder, and the visual placeholder is hidden from assistive technology.
declare lexical and the @lexical/* packages as peer dependencies, so the app resolves one copy of lexical and custom plugins passed as LexicalComposerInput children find the composer context. npm, pnpm and bun install the peers on their own; a yarn app adds lexical, @lexical/react, @lexical/utils, @lexical/history and @lexical/plain-text itself

Chores1

migrate to Lexical 0.51
view on github
>@assistant-ui/react-markdown@0.14.17end quoted code fences and $$ blocks where their own blockquote ends, so a deeper > line no longer closes one early and a blank or shallower line no longer leaves one open1 change

Fixes1

markdown
end quoted code fences and $$ blocks where their own blockquote ends, so a deeper > line no longer closes one early and a blank or shallower line no longer leaves one open
view on github
>@assistant-ui/react-mcp@0.1.20ignore authorization URLs from stale MCP OAuth connections1 change

Fixes1

ignore authorization URLs from stale MCP OAuth connections
view on github
>@assistant-ui/react-native@0.1.44show a message with uploading attachments in the thread while it is being sent12 changes

Features5

show a message with uploading attachments in the thread while it is being sent
export ReadonlyThreadProvider and ToolCallMessagePartStatus
name the runtime state types ThreadRuntimeState, MessageRuntimeState, ComposerRuntimeState, AttachmentRuntimeState and ThreadListItemRuntimeState
a tool UI can record what the user did on its tool call with unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore them
core
let typed text enter a connected voice session through sendText

Fixes7

expose the current thread to assistive technology on react-native-web
honor registered data-part fallbacks on native MessageContent and grouped parts
emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
every distribution re-exports the same shared surface from @assistant-ui/core. @assistant-ui/react-ink gains ReadonlyThreadProvider, ToolCallMessagePartStatus, groupPartByType, GroupByContext, VoiceSessionState, the external store runtime (useExternalStoreRuntime, useExternalMessageConverter, their adapters and options), the message queue, the tool approval types, the generative UI renderer and the cloud thread list hooks; @assistant-ui/react-native gains VoiceSessionState, the cloud thread list hooks, the generative UI renderer and the runtime state and adapter types the web package already carried; @assistant-ui/react gains MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, TitleGenerationAdapter, createSimpleTitleAdapter and ChainOfThoughtPartByIndexProvider.
prevent duplicate history requests at the start of a message list
expose feedback submission state to assistive technology
type the ThreadPrimitive.Messages children message as the MessageState the package exports, which is the store state the primitive passes at runtime
view on github
>@assistant-ui/react-opencode@0.2.25useOpenCodeRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to an OpenCode session; a cloud thread without a session opens empty and rejects a send instead of asking OpenCode for the cloud id4 changes

Features1

useOpenCodeRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to an OpenCode session; a cloud thread without a session opens empty and rejects a send instead of asking OpenCode for the cloud id

Fixes3

stop an attachment send when the thread it belongs to is destroyed
react-opencode
keep the composer usable after reverting a finished turn
restore pending child-session interactions after reconnect
view on github
>@assistant-ui/react-pi@0.0.25usePiRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to a Pi thread; deleting a Pi thread that no longer exists succeeds, in the node client and in createPiHttpClient, which reads a 404 as gone, so its cloud thread can always be deleted; a cloud thread without a Pi thread opens empty and rejects a send instead of asking the Pi server for the cloud id7 changes

Features3

usePiRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to a Pi thread; deleting a Pi thread that no longer exists succeeds, in the node client and in createPiHttpClient, which reads a 404 as gone, so its cloud thread can always be deleted; a cloud thread without a Pi thread opens empty and rejects a send instead of asking the Pi server for the cloud id
mark interim tool output as isPreliminary so a tool that streams its result stays running until the final result lands, instead of reading as complete on the first chunk; react-pi flags live partialResult output and ai-sdk flags preliminary outputs, and the default tool fallback keeps the output a cancelled tool streamed before it was cut off
let a tool approval question declare that it accepts a dismissal

Fixes4

dispose sessions when event subscription setup fails
raise the @assistant-ui/react peer range to ^0.15.22, the release that added the approval.dismissible field Pi select, input and editor requests use
drop user content parts of a type the projection does not handle instead of turning them into text parts without text
preserve live thread state when a fetched snapshot is stale
view on github
>@assistant-ui/react-streamdown@0.3.17fail the build when emitted output imports an undeclared package11 changes

Fixes11

fail the build when emitted output imports an undeclared package
stop applying streaming tail repair after a message finishes.
react-streamdown
stop an unmatched mid-line $$ from pairing with later display math
markdown
end quoted code fences and $$ blocks where their own blockquote ends, so a deeper > line no longer closes one early and a blank or shallower line no longer leaves one open
stop nested raw pre markup from causing quadratic rerender comparisons
react-streamdown
end streaming $$ math where remark-math ends it, so a $$ inside a display block no longer leaks escapes into the math or appends a stray closer
let a new SyntaxHighlighter, CodeHeader or componentsByLanguage entry reach settled code blocks
keep the streaming escapes out of every fence and $$ block, including one that opens right after a paragraph line or nests in a list item, and settle the paragraph a block interrupts, so ~ inside code and math is no longer escaped and a dangling ** before a fence no longer lands its closer after the closing marker
react-streamdown
stop the streaming repair from escaping text inside raw HTML blocks
recognize a fence or $$ block that opens on a list marker line (- ~~~, 1. ```bash, - $$), so ~ inside it is no longer escaped and its closing marker no longer opens a fence that leaves the rest of the message without streaming repair or escapes
react-streamdown
stop preprocess from restarting smooth streaming when a rewrite changes already-revealed text
view on github
>@assistant-ui/store@0.3.15stop a nested useChatRuntime chat when its own component unmounts, stop registering AISDKThreads cloud threads on the client destroy signal, and stop fast refresh from aborting the destroy signal of useAui(config) hosts2 changes

Fixes1

stop a nested useChatRuntime chat when its own component unmounts, stop registering AISDKThreads cloud threads on the client destroy signal, and stop fast refresh from aborting the destroy signal of useAui(config) hosts

Performance1

keep a thread update off every message client
view on github
>@assistant-ui/tap@0.9.19bail out of a no-op state dispatch from an effect under a React host instead of re-rendering on every commit1 change

Fixes1

bail out of a no-op state dispatch from an effect under a React host instead of re-rendering on every commit
view on github
>@assistant-ui/x-buildutils@0.0.29fail the build when emitted output imports an undeclared package5 changes

Fixes4

fail the build when emitted output imports an undeclared package
build
catch statement-level type imports in published declarations
emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts
sort the entry list so two builds of the same commit emit identical javascript

Chores1

cover the undeclared-import guard with tests
view on github
>@assistant-ui/x-generative-compiler@0.0.19stop @assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run1 change

Fixes1

stop @assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run
view on github
>assistant-cloud@0.2.3LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.9 changes

Features1

LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.

Fixes8

useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol
report cloud engagement events once per thread list instead of once per mounted thread, keep counting a run that ends while its thread is in the background, and let an engagement id resolver decline an event for a thread it does not know
retry transient engagement event delivery failures
cloud
summarize base64 blocks inside an MCP CallToolResult instead of shipping them raw
expose caller-supplied cost, attributes, and root span fields on run reports
accept a step input and every run outcome type on run reports
cloud
measure a send's idle time from a stopped run instead of the last completed one
stop pending engagement event retries when telemetry is disabled
view on github
>assistant-stream@0.3.45createResumableStreamContext no longer reports onFinalize for a producer whose finalize was fenced out by a newer acquisition of the same stream. ResumableStreamStore.finalize now resolves false when it finalized nothing (the bundled in-memory and Redis stores return it; a custom store that resolves without a value is still taken to have finalized), the context skips the hook on false, and a producer whose "done" finalize did not apply is reported through onError with a ResumableStreamError("missing").5 changes

Fixes5

createResumableStreamContext no longer reports onFinalize for a producer whose finalize was fenced out by a newer acquisition of the same stream. ResumableStreamStore.finalize now resolves false when it finalized nothing (the bundled in-memory and Redis stores return it; a custom store that resolves without a value is still taken to have finalized), the context skips the hook on false, and a producer whose "done" finalize did not apply is reported through onError with a ResumableStreamError("missing").
surface preliminary tool outputs instead of dropping them
assistant-stream
reject tool argument waiters when the args stream fails
carry a tool result's modelContent across the data-stream wire and aui/v0 persistence
Use successful Standard Schema output for tool execution and model output. Keep the original arguments for validation errors and stored tool calls.
view on github
>assistant-ui@0.0.118assistant-ui agent now opens Claude Code with the maintained skills from assistant-ui/skills, fetched at a pinned commit into the user cache, instead of a plugin bundled in the package. the bundled copy had drifted from the AI SDK it teaches (#7486) and is removed from the package.12 changes

Features1

assistant-ui agent now opens Claude Code with the maintained skills from assistant-ui/skills, fetched at a pinned commit into the user cache, instead of a plugin bundled in the package. the bundled copy had drifted from the AI SDK it teaches (#7486) and is removed from the package.

Fixes11

preserve unrelated bindings when migrating client accessors
keep forced child exits active until the process closes
make the assistant-ui agent skill scaffold a working AI SDK 7 chat route, matching the files the ai-sdk-quick-start registry preset installs
cli
make the create project-name default reachable
stop the assistant-ui agent skill from listing @assistant-ui/ui, which is private, and @assistant-ui/styles, which is deprecated
cli
stop upgrade from silently skipping installs on non-interactive stdin
fail codemod commands when jscodeshift reports transformation errors
process explicit source files passed to the codemod command
skip dependency installation during dry upgrades
preserve unrelated imports and references during the hook migration
prevent timed-out template downloads from writing into the project
view on github
>heat-graph@0.0.21keep the last day of the range in a midnight-DST timezone1 change

Fixes1

heat-graph
keep the last day of the range in a midnight-DST timezone
view on github
>5 maintenance releasesdependency updates and chores
>@assistant-ui/next@0.0.23@assistant-ui/x-generative-compiler@0.0.191 change

Other1

@assistant-ui/x-generative-compiler@0.0.19
view on github
>@assistant-ui/react-a2a@0.2.38@assistant-ui/react-generative-ui@0.0.211 change

Other1

@assistant-ui/react-generative-ui@0.0.21
view on github
>@assistant-ui/react-ag-ui@0.0.62@assistant-ui/react-generative-ui@0.0.211 change

Other1

@assistant-ui/react-generative-ui@0.0.21
view on github
>@assistant-ui/vite@0.0.19@assistant-ui/x-generative-compiler@0.0.191 change

Other1

@assistant-ui/x-generative-compiler@0.0.19
view on github
>create-assistant-ui@0.0.81assistant-ui@0.0.1181 change

Other1

assistant-ui@0.0.118
view on github

Sep 18, 2026

40 releases

>@assistant-ui/ai-sdk@0.0.7voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run3 changes

Features2

voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run
let hosts answer tool approvals through onRespondToToolApproval and hand the requests they do not own back to the AI SDK

Chores1

update dependencies
view on github
>@assistant-ui/core@0.3.20voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run15 changes

Features3

voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run
message feedback accepts an optional comment and Assistant Cloud stores it
voice transcripts persist as ordinary messages on the local runtime and reach external store hosts through onVoiceTranscript; a text send while a voice session is connected is rejected

Fixes11

publish cancelRun's message rollback as it happens, so rendering right after a cancel no longer throws "Entry not available in the store"
keep a cloud aui/v0 thread loadable when one stored row is malformed. an unreadable part, attachment or nested tool call message is dropped on its own, a row that does not hold a message at all is dropped together with the thread below it, and nesting is bounded so a deeply nested row cannot overflow the stack
core
preserve tool result modelContent and stored artifact in addToolResult
accept explicitly undefined optional metadata on user and system thread messages, so a ThreadUserMessage or ThreadSystemMessage value is assignable to ThreadMessage under exactOptionalPropertyTypes
quote and escape filenames in text attachment wrappers
Generative UI rendering no longer throws when a node's children is not an array; a string or node renders as the only child, and any other value is skipped with the malformed-node warning.
commit remote thread runtimes before the layout effects of AssistantRuntimeProvider's children, so a layout effect there can update a thread on its first render. effects inside a useRemoteThreadListRuntime runtime hook now run before paint instead of after it.
preserve voice modality when loading local storage history
core
keep the steer lane for implicit sends made during back-to-back queued runs
publish runtime hook changes from useRemoteThreadListRuntime in the layout phase, so a run that settles mid-commit reads the current callbacks. the hosted thread runtime now re-renders synchronously before paint when the hook changes, instead of in a later render.
preserve local message feedback when no feedback adapter is configured

Chores1

update dependencies
view on github
>@assistant-ui/react@0.15.21resume bottom following when auto-scroll is enabled at runtime3 changes

Fixes2

resume bottom following when auto-scroll is enabled at runtime
cancel the selection toolbar's pending animation frame on teardown and between selection events

Chores1

update dependencies
view on github
>@assistant-ui/react-a2a@0.2.36ignore stale cancellation responses and read the cancel target before the local abort3 changes

Fixes2

ignore stale cancellation responses and read the cancel target before the local abort
ignore initial history loads after switching threads without discarding same-thread history on cancel.

Chores1

update dependencies
view on github
>@assistant-ui/react-ag-ui@0.0.60preserve tool result modelContent and stored artifact in addToolResult5 changes

Fixes4

react-ag-ui
preserve tool result modelContent and stored artifact in addToolResult
react-ag-ui
fold a reasoning record onto the assistant record that follows it
react-ag-ui
rejoin a reloaded turn whose tool call opened its own assistant record
accept explicitly undefined optional fields on the message-like input of toAgUiMessages, so the messages fromAgUiMessages returns can be passed straight back under exactOptionalPropertyTypes

Chores1

update dependencies
view on github
>@assistant-ui/react-generative-ui@0.0.19exclude controls disabled by an ancestor fieldset from form payloads5 changes

Fixes4

exclude controls disabled by an ancestor fieldset from form payloads
keep internal radio-group names out of submitted form payloads
keep package imports external in aui-build output without resolving them, and fail the build when anything from node_modules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/node_modules.
declare the injected $status on the RadioGroup render props, matching what the renderer passes to every vocabulary component

Chores1

update dependencies
view on github
>@assistant-ui/react-google-adk@0.0.31give a function call that arrives without args an empty args object, so an args-less call no longer renders as a tool call with undefined args and argsText5 changes

Fixes4

give a function call that arrives without args an empty args object, so an args-less call no longer renders as a tool call with undefined args and argsText
list only unanswered requests in useAdkToolConfirmations, useAdkAuthRequests and session snapshots, derived from the adk_request_confirmation and adk_request_credential calls in the thread, so a session load no longer lists settled requests, a later send no longer drops unanswered ones, and a confirmation no longer appears twice. an auth request's toolCallId is now the id of its adk_request_credential call, the only id ADK accepts a credential reply on (it was the gated tool call's id with ADK JS), and authConfig is also read from camelCase args.
stop artifacts.load from rejecting fileData artifacts and snake_case artifact responses
skip media parts missing mimeType, data, or fileUri instead of failing the session load or rendering them with an undefined source

Chores1

update dependencies
view on github
>@assistant-ui/react-hook-form@0.12.34resolve type errors in the react-pi tool result projection and the react-hook-form owning form lookup2 changes

Fixes1

resolve type errors in the react-pi tool result projection and the react-hook-form owning form lookup

Chores1

update dependencies
view on github
>@assistant-ui/react-ink@0.0.44restart fallback elapsed time when the running message changes4 changes

Fixes3

restart fallback elapsed time when the running message changes
clamp the loading spinner's frame interval so a non-positive intervalMs cannot spin the terminal at the runtime's 1ms floor
observe active runs when terminal notifications are enabled mid-run

Chores1

update dependencies
view on github
>@assistant-ui/react-langchain@0.0.32allow unresolved subagent namespace discovery to retry5 changes

Fixes4

allow unresolved subagent namespace discovery to retry
render live generative UI in transcripts of subagents nested below the first level
give task calls their subagent's wall clock and nested transcripts their own streaming timing
stop reconverting messages and subagent transcripts on custom events that carry no UI update, and keep live UI messages whose events have left the custom channel buffer

Chores1

update dependencies
view on github
>@assistant-ui/react-langgraph@0.14.29unstablecreateLangGraphStream forwards streamSubgraphs so subgraph events arrive through the helper3 changes

Features1

unstable_createLangGraphStream forwards streamSubgraphs so subgraph events arrive through the helper

Fixes1

react-langgraph
keep a turn appended between loads at the bottom of the thread instead of the top

Chores1

update dependencies
view on github
>@assistant-ui/react-markdown@0.14.16stop preprocess from restarting smooth streaming when a rewrite changes already-revealed text2 changes

Fixes1

react-markdown
stop preprocess from restarting smooth streaming when a rewrite changes already-revealed text

Chores1

update dependencies
view on github
>@assistant-ui/react-mcp@0.1.19resolve the remaining type errors in the elicitation content defaults, the elicitation answer paths and the OpenCode shadow part reconciliation8 changes

Fixes6

resolve the remaining type errors in the elicitation content defaults, the elicitation answer paths and the OpenCode shadow part reconciliation
ignore duplicate custom server IDs while hydrating persisted records
preserve custom server removals made before storage hydration completes
let custom AuthFields inputs bind to the MCP add-server form
keep a newer OAuth callback attempt's result when an older attempt for a previous URL settles late
read the elicitation abort signal from the request context where MCP SDK v2 places it, so elicitation requests no longer throw

Docs1

teach AuiConfig and the provider config prop instead of the deprecated useAui({...}) overload in docblocks and the agent skill

Chores1

update dependencies
view on github
>@assistant-ui/react-native@0.1.43action bar and branch picker children receive disabled, and ActionBarPrimitive.Speak and StopSpeaking arrive on react native.4 changes

Features3

action bar and branch picker children receive disabled, and ActionBarPrimitive.Speak and StopSpeaking arrive on react native.
export MessagePartPrimitive (Text, Image, InProgress, Messages) from the react native distribution.
ThreadPrimitive.MessagesFlatList takes a history prop that wires loading older messages at the top.

Chores1

update dependencies
view on github
>@assistant-ui/react-opencode@0.2.24resolve the remaining type errors in the elicitation content defaults, the elicitation answer paths and the OpenCode shadow part reconciliation6 changes

Fixes5

resolve the remaining type errors in the elicitation content defaults, the elicitation answer paths and the OpenCode shadow part reconciliation
preserve live messages and changed parts during history refreshes without retaining unrelated stale parts
keep background history refresh failures out of run state
preserve newer live session status during reconnect recovery
keep a sent user message's locally displayed text across repeated refreshes until the server returns its parts

Chores1

update dependencies
view on github
>@assistant-ui/react-pi@0.0.24answer pi select, input and editor requests through the tool call's approval6 changes

Fixes5

answer pi select, input and editor requests through the tool call's approval
react-pi
cancel a send while its session is still opening
react-pi
don't let a failed send remove the wrong queued message
react-pi
don't let a stale queue-clear response hide newer messages
resolve type errors in the react-pi tool result projection and the react-hook-form owning form lookup

Chores1

update dependencies
view on github
>@assistant-ui/react-streamdown@0.3.16keep settled code blocks from re-rendering when streamdown re-renders their block2 changes

Fixes1

keep settled code blocks from re-rendering when streamdown re-renders their block

Chores1

update dependencies
view on github
>@assistant-ui/store@0.3.14teach AuiConfig and the provider config prop instead of the deprecated useAui({...}) overload in docblocks and the agent skill2 changes

Docs1

teach AuiConfig and the provider config prop instead of the deprecated useAui({...}) overload in docblocks and the agent skill

Chores1

update dependencies
view on github
>@assistant-ui/x-buildutils@0.0.28keep package imports external in aui-build output without resolving them, and fail the build when anything from nodemodules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/nodemodules.4 changes

Fixes1

keep package imports external in aui-build output without resolving them, and fail the build when anything from node_modules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/node_modules.

Chores3

update dependencies
bump tsdown to 0.23
add the ts/test preset so colocated vitest suites typecheck against the Node and ES2024 environment they run in
view on github
>assistant-cloud@0.2.2message feedback accepts an optional comment and Assistant Cloud stores it5 changes

Features1

message feedback accepts an optional comment and Assistant Cloud stores it

Fixes2

reject non-finite numeric event properties before serialization
allow keyed run reports to retry after rate limiting

Docs1

enable the AI SDK OpenTelemetry integration in the README telemetry recipe, so a route that follows it emits spans

Chores1

update dependencies
view on github
>assistant-stream@0.3.44cancel merged assistant streams when a transform is cancelled or errors, including child streams waiting for their next chunk.6 changes

Fixes5

cancel merged assistant streams when a transform is cancelled or errors, including child streams waiting for their next chunk.
assistant-stream
keep streaming tool-call arguments across a non-terminal error on the data stream
normalize configurable JSON Schema converters to draft-07
keep package imports external in aui-build output without resolving them, and fail the build when anything from node_modules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/node_modules.
name the Zod helper when a Zod schema has no JSON Schema converter

Chores1

update dependencies
view on github
>assistant-ui@0.0.117create the project under --cwd when assistant-ui init runs without a project name, instead of under the caller's directory4 changes

Fixes2

create the project under --cwd when assistant-ui init runs without a project name, instead of under the caller's directory
keep an existing empty project directory when create fails, removing only what the failed run wrote

Docs1

teach AuiConfig and the provider config prop instead of the deprecated useAui({...}) overload in docblocks and the agent skill

Chores1

update dependencies
view on github
>safe-content-frame@0.0.31support multibyte pathnames when deriving browser cache salts2 changes

Fixes1

support multibyte pathnames when deriving browser cache salts

Chores1

update dependencies
view on github
>17 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.16update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/eve@0.0.18update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/mcp-docs-server@0.3.2update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/metro@0.0.14update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/next@0.0.22update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.12@assistant-ui/ai-sdk@0.0.71 change

Other1

@assistant-ui/ai-sdk@0.0.7
view on github
>@assistant-ui/react-data-stream@0.12.32update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-devtools@1.2.20update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ink-markdown@0.0.43update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-lexical@0.2.14update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-o11y@0.0.45update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-syntax-highlighter@0.14.6update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/tap@0.9.18update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/vite@0.0.18update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/x-generative-compiler@0.0.18update dependencies1 change

Chores1

update dependencies
view on github
>create-assistant-ui@0.0.80update dependencies1 change

Chores1

update dependencies
view on github
>heat-graph@0.0.20update dependencies1 change

Chores1

update dependencies
view on github

Sep 15, 2026

25 releases

>@assistant-ui/ai-sdk@0.0.6register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project5 changes

Features2

register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project
mark voice transcript messages with metadata.modality

Fixes2

AISDKThreads chats call the latest onToolCall, onData, onFinish, onError and sendAutomaticallyWhen passed to it, including on a thread still streaming in the background, instead of the ones captured when the thread was created
report the error, error code and first token time of a run persisted in the ai-sdk/v6 format; the runtime hands the cloud history adapter the thread message it persisted, whose status and timing complete a report the stored message cannot carry. the failed message's status error is now the AssistantError shape ({ code, message }, the code being the AI SDK error's code or its name) instead of the message string, and first_token_ms reads firstTokenTime as the duration the runtime records instead of subtracting the stream start, which also repairs the aui/v0 path

Refactors1

the cloud history adapter reports runs and engagement events through assistant-cloud's reporters and reads AI SDK runs through assistant-cloud/ai-sdk; steps are now reported for a run with a single step as well, an error is reported once per run, a stored ai-sdk/v6 run that produced tool calls without text reads completed instead of incomplete, and a run whose message carries a cancelled, length or content filter finish reports incomplete instead of completed
view on github
>@assistant-ui/core@0.3.19add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript33 changes

Features6

add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript
expose per-status counts on grouped parts and route tool calls by name in groupPartByType
keep a message running while a tool call's nested conversation is still streaming, and report it on the nested thread
register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project
derive thread.tasks from tool calls that carry nested conversations, with a task scope
mark voice transcript messages with metadata.modality

Fixes26

isolate thread ID change callback errors from completed switches
reconnect subjects after an upstream cleanup error
exclude cleared attachments from a message when its upload finishes
report the error, error code and first token time of a run persisted in the ai-sdk/v6 format; the runtime hands the cloud history adapter the thread message it persisted, whose status and timing complete a report the stored message cannot carry. the failed message's status error is now the AssistantError shape ({ code, message }, the code being the AI SDK error's code or its name) instead of the message string, and first_token_ms reads firstTokenTime as the duration the runtime records instead of subtracting the stream start, which also repairs the aui/v0 path
preserve cloud message parts and track tool approvals
attempt every pending attachment removal during reset and clearAttachments even when an adapter throws synchronously.
preserve the complete interim dictation transcript and clear retracted browser results without duplicating finalized words.
disable the reload, edit and branch switching primitives when the runtime does not expose the capability, instead of throwing when they are pressed
keep restored resolved tool calls historical when snapshots change
prevent ended speech handles from cancelling newer playback
preserve prototype-named fields in interactable updates and snapshots
refresh interactable schemas after configuration changes
cancel cloud attachment uploads when the attachment is removed
keep local storage threads loadable when a stored message holds a malformed part, attachment, or nested tool call message; the unreadable entry is dropped and the rest of the message and its descendants still load.
avoid repeated scans while joining external message parts
preserve data renderers whose names match object prototype properties
restore and pause queued messages after synchronous dispatch failures
avoid leaking a frame host message listener when initialization fails
settle pending frame tool calls when cancellation fails
finalize cancelled iterators once, skip finalizing naturally exhausted sources, and release abort listeners when stream opening or reads settle.
send data URL image attachments as inline ADK data and resolve wildcard image types
release completed local speech subscriptions and ignore callbacks from replaced utterances
preserve component state when stable message IDs move
finish realtime voice cleanup after adapter errors
finish dictation cleanup after adapter errors
speak and feedback work on voice transcript messages, and edit fails with a clear error

Refactors1

the cloud history adapter reports runs and engagement events through assistant-cloud's reporters and reads AI SDK runs through assistant-cloud/ai-sdk; steps are now reported for a run with a single step as well, an error is reported once per run, a stored ai-sdk/v6 run that produced tool calls without text reads completed instead of incomplete, and a run whose message carries a cancelled, length or content filter finish reports incomplete instead of completed
view on github
>@assistant-ui/next@0.0.21avoid treating similarly named user modules as internal redirects1 change

Fixes1

avoid treating similarly named user modules as internal redirects
view on github
>@assistant-ui/react@0.15.20add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript5 changes

Features3

add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript
derive thread.tasks from tool calls that carry nested conversations, with a task scope
mark voice transcript messages with metadata.modality

Fixes2

settle pending frame tool calls when cancellation fails
keep notifying thread viewport scroll listeners after a listener fails
view on github
>@assistant-ui/react-a2a@0.2.35wait for agent capabilities before choosing the first A2A send method2 changes

Fixes2

wait for agent capabilities before choosing the first A2A send method
retry agent card discovery after transient failures
view on github
>@assistant-ui/react-data-stream@0.12.31preserve source message IDs when generic conversion drops or splits messages1 change

Fixes1

preserve source message IDs when generic conversion drops or splits messages
view on github
>@assistant-ui/react-devtools@1.2.19read the first token time as the duration the runtime records instead of subtracting the stream start, which always clamped it to zero3 changes

Fixes3

read the first token time as the duration the runtime records instead of subtracting the stream start, which always clamped it to zero
defer hidden JSON entries and clipboard serialization in DevTools
preserve prototype-named values in sanitized runtime data
view on github
>@assistant-ui/react-google-adk@0.0.30register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project7 changes

Features1

register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project

Fixes6

normalize nested snake_case media fields in ADK streams and session history.
preserve failed tool result status in ADK requests, optimistic messages, and session history.
wrap scalar tool results in ADK function response objects
drop long-running tool calls the client already answered from useAdkLongRunningToolIds and session snapshots
keep unanswered long-running tool calls in useAdkLongRunningToolIds across sends, so answering one gate no longer lets the next text message auto-cancel the others. AdkEventAccumulator takes the pending ids to seed as an optional second constructor argument.
send data URL image attachments as inline ADK data and resolve wildcard image types
view on github
>@assistant-ui/react-hook-form@0.12.33submit the actual form owner of registered controls, including controls with an explicit form attribute.1 change

Fixes1

submit the actual form owner of registered controls, including controls with an explicit form attribute.
view on github
>@assistant-ui/react-ink@0.0.43derive thread.tasks from tool calls that carry nested conversations, with a task scope5 changes

Features1

derive thread.tasks from tool calls that carry nested conversations, with a task scope

Fixes4

calculate word-level diff highlighting only for visible line pairs and reuse it when a preview expands or shrinks.
find word movement and deletion boundaries from the caret without scanning the preceding draft
avoid scanning long prompt prefixes when moving, editing or looking up cursor graphemes
depend on assistant-cloud like @assistant-ui/react does, so an app whose runtime is not the AI SDK one can bundle; @assistant-ui/core imports it from its react entry and optional peers are not installed
view on github
>@assistant-ui/react-ink-markdown@0.0.42avoid reformatting fixed-width or unwrapped Markdown on terminal resize while keeping automatic-width output responsive.1 change

Fixes1

avoid reformatting fixed-width or unwrapped Markdown on terminal resize while keeping automatic-width output responsive.
view on github
>@assistant-ui/react-langchain@0.0.31add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript4 changes

Features3

add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript
task subagent transcripts ride on ToolCallMessagePart.messages so MessagePartPrimitive.Messages renders them and thread.tasks lists them; the peer floors move to @langchain/react ^1.0.20 and @langchain/langgraph-sdk ^1.9.20, and react-langgraph follows the sdk floor because it depends on react-langchain
register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project

Fixes1

task subagent transcripts include the generative UI parts pushed for their own messages
view on github
>@assistant-ui/react-langgraph@0.14.28task subagent transcripts ride on ToolCallMessagePart.messages so MessagePartPrimitive.Messages renders them and thread.tasks lists them; the peer floors move to @langchain/react ^1.0.20 and @langchain/langgraph-sdk ^1.9.20, and react-langgraph follows the sdk floor because it depends on react-langchain3 changes

Features2

task subagent transcripts ride on ToolCallMessagePart.messages so MessagePartPrimitive.Messages renders them and thread.tasks lists them; the peer floors move to @langchain/react ^1.0.20 and @langchain/langgraph-sdk ^1.9.20, and react-langgraph follows the sdk floor because it depends on react-langchain
register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project

Fixes1

ignore malformed non-array message content and normalize system content blocks
view on github
>@assistant-ui/react-lexical@0.2.13skip rebuilding unchanged drafts on selection-only Lexical updates while preserving deferred parser retries4 changes

Fixes4

skip rebuilding unchanged drafts on selection-only Lexical updates while preserving deferred parser retries
keep composer plugin cursor positions in sync after selection changes and edits before the caret.
report the runtime cursor offset for collapsed element selections, including empty paragraphs after text
forward accessibility labels and description references to the Lexical composer textbox instead of its wrapper.
view on github
>@assistant-ui/react-mcp@0.1.18isolate custom MCP servers across storage scopes and fence writes after load failures3 changes

Fixes3

isolate custom MCP servers across storage scopes and fence writes after load failures
reject OAuth discovery hosts that only resemble loopback addresses
associate MCP add-server form labels and validation errors with their controls
view on github
>@assistant-ui/react-native@0.1.42add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript7 changes

Features5

add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript
let ComposerPrimitive.AddAttachment take an onPress handler, so the platform picker runs behind the composer's disabled state instead of on a separate button
ThreadPrimitive.MessagesFlatList keeps the visible message anchored while older messages load above it (maintainVisibleContentPosition defaults to the first visible item and stays overridable)
export the external store family (useExternalStoreRuntime, the converters, the shared options, the message queue and their types) from @assistant-ui/react-native so React Native apps never import them from the web package
derive thread.tasks from tool calls that carry nested conversations, with a task scope

Fixes2

scroll existing threads to their measured bottom offset
depend on assistant-cloud like @assistant-ui/react does, so an app whose runtime is not the AI SDK one can bundle; @assistant-ui/core imports it from its react entry and optional peers are not installed
view on github
>@assistant-ui/react-pi@0.0.23preserve image content returned by Pi tools2 changes

Fixes2

preserve image content returned by Pi tools
reconnect promptly when subscribers return during stream backoff
view on github
>@assistant-ui/react-streamdown@0.3.15keep remend escapes out of settled ~~~ fences and $$ math blocks1 change

Fixes1

keep remend escapes out of settled ~~~ fences and $$ math blocks
view on github
>@assistant-ui/x-buildutils@0.0.27define AUIPACKAGEVERSION from the built package's version in both builds and ship its ambient declaration through the shared tsconfig base1 change

Features1

define __AUI_PACKAGE_VERSION__ from the built package's version in both builds and ship its ambient declaration through the shared tsconfig base
view on github
>assistant-cloud@0.2.1add CloudRunReporter, CloudEngagementReporter, RunMessageTelemetry and the assistant-cloud/ai-sdk entry (aiSDKV6FormatAdapter, extractAISDKRunTelemetry), which lists ai as an optional peer and needs no runtime from it11 changes

Features2

add CloudRunReporter, CloudEngagementReporter, RunMessageTelemetry and the assistant-cloud/ai-sdk entry (aiSDKV6FormatAdapter, extractAISDKRunTelemetry), which lists ai as an optional peer and needs no runtime from it
send the Aui-Sdk header on every request, naming the client version and the integrations registered through registerSdk

Fixes7

avoid caching malformed rotated JWTs
cloud
ignore whitespace-only generated thread titles
prevent pending history loads from restoring message mappings after reset.
preserve cloud message parts and track tool approvals
preserve successful MCP sampling responses when metrics callbacks throw or reject. Report callback errors without delaying the response or masking model failures.
stop sending queued engagement events after telemetry is disabled
keep an append's remote ID in CloudMessagePersistence when a history load returns the same message ID

Docs2

clarify that run telemetry can include assistant output and tool data
rewrite the jsdoc of CloudMessagePersistence and createFormattedPersistence so the generated package reference reads without the retired hook
view on github
>assistant-stream@0.3.43a producer whose stream expired no longer writes into or finalizes the stream a later run starts under the same id. createResumableStreamContext now passes a lease from the new optional ResumableStreamStore.acquireLease to append and finalize; the bundled in-memory and Redis stores implement it, and custom stores opt in by implementing it.10 changes

Fixes10

a producer whose stream expired no longer writes into or finalizes the stream a later run starts under the same id. createResumableStreamContext now passes a lease from the new optional ResumableStreamStore.acquireLease to append and finalize; the bundled in-memory and Redis stores implement it, and custom stores opt in by implementing it.
avoid repeatedly scanning unfinished SSE lines when events arrive in small chunks
a stale Redis append or delete no longer changes a stream that was reacquired between the store's metadata read and its write. the node-redis and ioredis adapters now run append, finalize, and delete as scripts through EVALSHA, so the Redis endpoint must allow EVALSHA as well as EVAL. a custom RedisLikeClient gets the same protection by implementing the optional appendIfUnchanged and deleteIfUnchanged.
batch raw AssistantStream enqueue calls
skip in-memory resumable stream expiry sweeps until an expiry can be due, avoiding full-store scans on every chunk while preserving TTL and reader wakeups.
strict TextStreamController.append drops deltas instead of throwing after the consumer cancels the stream
the tool-call argsText controller honors the strict flag passed to createAssistantStreamController
avoid rescanning emitted tool argument array entries on each streaming update
mark tool arguments complete when their text stream ends
return only own JSON properties when reading tool argument fields
view on github
>assistant-ui@0.0.116install the native registry components in React Native projects, and scaffold create --native from the registry instead of copying local elements3 changes

Features1

install the native registry components in React Native projects, and scaffold create --native from the registry instead of copying local elements

Fixes1

cli
install the Zed MCP server in the macOS user settings file.

Chores1

drop @assistant-ui/cloud-ai-sdk from the managed package list now that the package is deprecated
view on github
>heat-graph@0.0.19accept full ISO timestamps in heat graph date inputs2 changes

Fixes2

accept full ISO timestamps in heat graph date inputs
preserve tooltip behavior when cells define hover handlers
view on github
>2 maintenance releasesdependency updates and chores
>@assistant-ui/react-ai-sdk@1.4.11@assistant-ui/ai-sdk@0.0.61 change

Other1

@assistant-ui/ai-sdk@0.0.6
view on github
>create-assistant-ui@0.0.79assistant-ui@0.0.1161 change

Other1

assistant-ui@0.0.116
view on github

Sep 11, 2026

40 releases

>@assistant-ui/agent-launcher@0.1.15keep the selected skill when the prompt is empty2 changes

Fixes1

keep the selected skill when the prompt is empty

Chores1

update dependencies
view on github
>@assistant-ui/ai-sdk@0.0.5show approval request reasons as fallback prompts9 changes

Fixes6

show approval request reasons as fallback prompts
preserve the AI SDK's approval request metadata during message conversion instead of rebuilding the approval from a fixed field list
ai-sdk
keep replacement MCP clients after stale timeouts
preserve MCP tools whose names collide with object prototype properties
core
cancel a thread's in-flight request when its runtime is torn down
store
cancel in-flight work when the React host that owns it unmounts

Refactors1

adjust state during render where an effect only mirrored a prop

Docs1

say where route metadata lands on a thread message

Chores1

update dependencies
view on github
>@assistant-ui/cloud-ai-sdk@0.2.0Minoralign the cloud SDK with Assistant Cloud 0.28 changes

Features1

align the cloud SDK with Assistant Cloud 0.2

Fixes5

propagate chat cancellation through telemetry stream observation
preserve manual thread titles when automatic generation is pending
order thread title generations against each other and against renames
resolve run telemetry model IDs from per-step response metadata
keep explicit title generations ordered after in-flight renames

Refactors1

adjust state during render where an effect only mirrored a prop

Chores1

update dependencies
view on github
>@assistant-ui/core@0.3.18align the cloud SDK with Assistant Cloud 0.239 changes

Features2

align the cloud SDK with Assistant Cloud 0.2
submit feedback for cloud-persisted thread messages

Fixes35

keep an explicit null parent when a thread appends a message
abort superseded Google ADK streams even when interactive cancellation is disabled.
preserve selected remote thread runtimes when raced slots collapse
notify every remote thread lifecycle subscriber
complete context provider cleanup when unsubscribe throws
release frame tool request resources when sending the request fails
keep discarded composer text out of dictation results after reset
compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup
complete assistant voice messages when the first transcript is final
keep the selected head aligned when relinking a message
use the original file to select the adapter for attachment removal when contentType is absent
speed up large interactable array updates with indexed ID matching
keep separate tool calls when their IDs are absent
match attachment extensions against the complete filename suffix, so .tar.gz accepts backup.tar.gz and .png rejects extensionless png.
export parent messages before their children
keep the selected nested branch when an ancestor is selected again
core
cancel a thread's in-flight request when its runtime is torn down
keep the initialization task on a new thread promoted to regular
preserve attachment removal errors in the tap composer
report AssistantFrame tool results that cannot cross the frame boundary
keep the existing thread title when title generation produces no text, and stop a streaming generation from briefly blanking it
preserve a manual thread rename that lands while automatic title generation is in flight. the rename is reasserted through the adapter once the generated run has persisted its own title, so the typed title survives on the server as well as in the list.
store
cancel in-flight work when the React host that owns it unmounts
keep ancestor branch pointers current after relinking a message
return the requested thread's metadata from getById when another thread is selected
isolate external-store thread records from prototype-named ids
stop frame provider broadcasts after disposal
resolve run telemetry model IDs from per-step response metadata
core
keep the thread list and report the error when a load fails. failed loads previously looked like an empty thread list; thread list state now exposes loadError, clears it when a later load starts, and in browsers retries a failed load once when the window comes back online or the document becomes visible again. React Native has neither event, so it keeps recovering through reload.
Notify thread-list subscribers when only the loading state changes.
defer remote thread deletion cleanup until persistence succeeds
keep explicit title generations ordered after in-flight renames
keep the server on the title that wins the ordering race
preserve prototype-named tool UI registrations and argument statuses
skip adapter cleanup for complete edit attachments

Refactors1

adjust state during render where an effect only mirrored a prop

Other1

Handle prototype-named tool and remote thread keys safely.
view on github
>@assistant-ui/eve@0.0.17show resumed session history at its real times, not "just now"2 changes

Fixes1

show resumed session history at its real times, not "just now"

Chores1

update dependencies
view on github
>@assistant-ui/mcp-docs-server@0.3.1close the docs proxy and its HTTP transport once stdin can no longer deliver messages, whether it reaches EOF or is destroyed4 changes

Fixes3

close the docs proxy and its HTTP transport once stdin can no longer deliver messages, whether it reaches EOF or is destroyed
keep clean proxy shutdowns from logging transport errors
repair the type drift tsc --noEmit catches in the codemod and proxy sources

Chores1

update dependencies
view on github
>@assistant-ui/metro@0.0.13isolate transformer settings between independently loaded Metro configs2 changes

Fixes1

isolate transformer settings between independently loaded Metro configs

Chores1

update dependencies
view on github
>@assistant-ui/react@0.15.19align the cloud SDK with Assistant Cloud 0.223 changes

Features2

align the cloud SDK with Assistant Cloud 0.2
cloud
claim anonymous threads into a signed-in workspace by exposing the browser's anonymous refresh token and moving its threads into an authenticated Assistant Cloud workspace after sign-in.

Fixes17

honor message part text render elements with an explicit component.
prevent queued live completion requests from starting after unmount
compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup
notify controlled and uncontrolled modal owners when a run opens a closed modal
keep parent IDs separate from ungrouped message parts
ignore flat mention items when categories is an empty list
support WebMCP tool cancellation below AbortSignal.any's browser floor and with a non-native caller signal
apply tool allowlist changes to mounted MCP app frames
reset message stall detection after equal-length content changes
preserve the requested scroll behavior across nested viewport providers
render message part text inside the supplied render element.
reject quote selections that cross excluded content
finish sandbox teardown after bridge cleanup errors
cancel WebMCP tools while asynchronous validation is pending
stop MCP App bridge messages after disposal
forward every part renderer option through MessagePrimitive.Parts, so data renderers survive ChainOfThought
react
keep the page from shifting sideways when a collapsible opens

Refactors2

extract the render-element Slot composition into one helper
adjust state during render where an effect only mirrored a prop

Chores1

update dependencies

Other1

Handle prototype-named tool and remote thread keys safely.
view on github
>@assistant-ui/react-a2a@0.2.34validate nested message part fields2 changes

Fixes2

react-a2a
validate nested message part fields
ignore thread loads superseded by a newer selection
view on github
>@assistant-ui/react-ag-ui@0.0.59add resumeTranscript to control what a resume run sends9 changes

Features1

react-ag-ui
add resumeTranscript to control what a resume run sends

Fixes7

cancel the superseded run through the agent when a new run starts
keep an explicit null parent when a thread appends a message
keep replacement AG-UI runs marked as active
keep deferred continuations with the run that owns them
preserve queued messages across interrupted renders
avoid repeatedly parsing incomplete streamed tool arguments
keep replacement run errors scoped to their run

Other1

Ignore superseded thread switches so late history loads cannot overwrite the active thread's messages or state, resume a stale run, or clear a newer selection.
view on github
>@assistant-ui/react-devtools@1.2.18adjust state during render where an effect only mirrored a prop2 changes

Refactors1

adjust state during render where an effect only mirrored a prop

Chores1

update dependencies
view on github
>@assistant-ui/react-generative-ui@0.0.18preserve prototype-named A2UI action context fields8 changes

Fixes8

preserve prototype-named A2UI action context fields
bound A2UI data model array expansion
treat inherited library properties as unknown component names
preserve prototype-named A2UI data model paths
tolerate malformed Select and Table collection props while ignoring invalid entries
tolerate malformed text properties while rendering generated UI
apply A2UI null updates as data model deletions
preserve prototype-named properties in generated component schemas
view on github
>@assistant-ui/react-google-adk@0.0.29abort superseded Google ADK streams even when interactive cancellation is disabled.5 changes

Fixes5

abort superseded Google ADK streams even when interactive cancellation is disabled.
preserve prototype-named session and artifact delta keys
preserve prototype-named ADK state keys and stabilize namespaced state hooks
react-google-adk
validate event content parts
ignore events, errors, and cleanup from superseded Google ADK runs
view on github
>@assistant-ui/react-ink@0.0.42forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders3 changes

Fixes2

forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders
preserve prototype-named tools in runtime toolkits

Chores1

update dependencies
view on github
>@assistant-ui/react-langchain@0.0.30harden the shared content block converter against non-spec blocks4 changes

Fixes2

harden the shared content block converter against non-spec blocks
keep supported content blocks from continuation chunks

Refactors1

adjust state during render where an effect only mirrored a prop

Chores1

update dependencies
view on github
>@assistant-ui/react-langgraph@0.14.27merge indexed text blocks by content index and skip empty text openers9 changes

Fixes8

merge indexed text blocks by content index and skip empty text openers
abort superseded Google ADK streams even when interactive cancellation is disabled.
index streamed tool-call chunks before matching completed calls
harden the shared content block converter against non-spec blocks
keep supported content blocks from continuation chunks
accept tool results with empty names when the tool call IDs match
accept a tool name that arrives after the first tool-call chunk.
merge anthropic citation deltas instead of appending "undefined"

Chores1

update dependencies
view on github
>@assistant-ui/react-markdown@0.14.15compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup7 changes

Fixes6

compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup
read tilde fences in the currency walker, and end an unclosed fence with its blockquote instead of the rest of the input
keep a fenced display body inside the list item or blockquote it was written in
read a backtick run as a fence only when it starts a line, so an info string no longer closes a fenced block
preserve rehype plugin markup in code blocks and pass the complete code text to code headers in both Markdown renderers.
preserve currency and math inside indented tilde fences

Performance1

parse once per token with defer on
view on github
>@assistant-ui/react-mcp@0.1.17scope persisted authentication to MCP server URLs; a credential saved for a different URL is never sent and is reported on lastError, existing OAuth credentials require reconnecting once, and host-persisted bearer records must include serverUrl5 changes

Fixes3

scope persisted authentication to MCP server URLs; a credential saved for a different URL is never sent and is reported on lastError, existing OAuth credentials require reconnecting once, and host-persisted bearer records must include serverUrl
compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup
keep static OAuth client updates out of the dynamic registration cache

Refactors1

adjust state during render where an effect only mirrored a prop

Other1

Scope persisted OAuth tokens and client registrations to their originating client. Credentials stored by earlier versions carry no client identity, so they are dropped on first load and every existing OAuth connection re-authenticates once.
view on github
>@assistant-ui/react-native@0.1.41forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders and data renderers survive ChainOfThought3 changes

Fixes2

forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders and data renderers survive ChainOfThought
supply derived status to registered tool and data renderers

Chores1

update dependencies
view on github
>@assistant-ui/react-opencode@0.2.23preserve OpenCode messages whose IDs match object prototype properties3 changes

Fixes2

preserve OpenCode messages whose IDs match object prototype properties
cancel pending new-thread sends when the runtime is torn down

Chores1

update dependencies
view on github
>@assistant-ui/react-pi@0.0.22carry compaction and retry activity on thread snapshots6 changes

Fixes5

carry compaction and retry activity on thread snapshots
keep the effective Pi thinking level for thread subscribers
recover missed messages and thread status from a snapshot after a live-only stream disconnects.
clear retry and compaction flags when a snapshot reports a settled thread
cancel pending new-thread sends when the runtime is torn down

Chores1

update dependencies
view on github
>@assistant-ui/react-streamdown@0.3.14compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup11 changes

Fixes9

compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup
read tilde fences in the currency walker, and end an unclosed fence with its blockquote instead of the rest of the input
keep a fenced display body inside the list item or blockquote it was written in
read a backtick run as a fence only when it starts a line, so an info string no longer closes a fenced block
update memoized children when their text or props change
preserve text escapes and custom handler changes in earlier paragraphs without completing or deleting their unfinished Markdown.
preserve rehype plugin markup in code blocks and pass the complete code text to code headers in both Markdown renderers.
render user pre and code components through the code adapter without remounting the code block on every render, and keep the element of a raw <pre> that has no code child
preserve currency and math inside indented tilde fences

Performance2

parse once per token with defer on
bound the streaming remend window scan to each line, so the boundary pass stays linear in the message instead of scanning the remaining text once per line
view on github
>@assistant-ui/store@0.3.13preserve client list order for numeric string keys10 changes

Fixes9

preserve client list order for numeric string keys
add and retrieve client resources with prototype-named keys
expire falsy values in the last-valid cache and preserve cached null and undefined during the stale window.
core
cancel a thread's in-flight request when its runtime is torn down
store
cancel in-flight work when the React host that owns it unmounts
commit hosted tap resources before descendant layout effects
detect values that replace empty positions in sparse arrays during shallow comparison
keep replacement event listeners after a stale unsubscribe call.
log event listener errors instead of raising uncatchable exceptions

Chores1

update dependencies
view on github
>@assistant-ui/tap@0.9.17notify every Tap root subscriber when one throws2 changes

Fixes1

notify every Tap root subscriber when one throws

Chores1

update dependencies
view on github
>@assistant-ui/x-generative-compiler@0.0.17refresh TypeScript path aliases after config changes2 changes

Fixes1

refresh TypeScript path aliases after config changes

Chores1

update dependencies
view on github
>assistant-cloud@0.2.0Minoralign the cloud SDK with Assistant Cloud 0.27 changes

Features3

align the cloud SDK with Assistant Cloud 0.2
submit feedback for cloud-persisted thread messages
cloud
claim anonymous threads into a signed-in workspace by exposing the browser's anonymous refresh token and moving its threads into an authenticated Assistant Cloud workspace after sign-in.

Fixes3

page the cloud thread message list so threads longer than 200 messages reload in full
support message IDs that match object prototype properties
resolve run telemetry model IDs from per-step response metadata

Chores1

update dependencies
view on github
>assistant-stream@0.3.42prevent tool execution after cancellation during asynchronous schema validation14 changes

Fixes13

prevent tool execution after cancellation during asynchronous schema validation
use final message usage for token counts when the stream reports a positive output total
assistant-stream
settle cancellation during asynchronous tool validation
assistant-stream
preserve prototype-named tool call IDs
apply deeply nested GORP paths without overflowing the stack
remove nested required constraints from partial schemas without properties
keep provider messages in backend tool responses and completed pending tool calls
complete aborted in-memory stream reads without throwing a stored error after the last buffered chunk.
Keep stored replay bytes separate from producer and consumer buffers.
keep the first SSE event when a text stream starts with a byte-order mark
supply the draft-07 target to Standard JSON Schema converters so tool parameter conversion does not throw on missing options
keep positive exponents incomplete until all argument digits arrive
keep the JSON quotes on a successful tool input that is a plain string, so a tool with a string input schema executes instead of failing with a parameter parsing error

Performance1

skip partial tool argument parsing without active readers
view on github
>assistant-ui@0.0.115keep relative add directories anchored to the caller6 changes

Fixes5

keep relative add directories anchored to the caller
quote the project directory in the cd instructions create prints
keep the directory selected with --cwd when init delegates to create
preserve operator precedence when the v0-12 codemod builds AuiIf conditions
repair the type drift tsc --noEmit catches in the codemod and proxy sources

Chores1

update dependencies
view on github
>safe-content-frame@0.0.30clear load timeout timers after SafeContentFrame settles1 change

Fixes1

clear load timeout timers after SafeContentFrame settles
view on github
>tw-shimmer@0.4.13gate the text clip behind the same capability check as the gradient, so shimmer text stays readable below the browser support floor3 changes

Fixes1

gate the text clip behind the same capability check as the gradient, so shimmer text stays readable below the browser support floor

Performance1

run the text shimmer on the compositor without duplicate markup

Docs1

align the documented utilities and defaults with the shipped CSS
view on github
>10 maintenance releasesdependency updates and chores
>@assistant-ui/next@0.0.20update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.10@assistant-ui/ai-sdk@0.0.51 change

Other1

@assistant-ui/ai-sdk@0.0.5
view on github
>@assistant-ui/react-data-stream@0.12.30update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-hook-form@0.12.32update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ink-markdown@0.0.41@assistant-ui/core@0.3.181 change

Other1

@assistant-ui/core@0.3.18
view on github
>@assistant-ui/react-o11y@0.0.44update dependencies2 changes

Chores1

update dependencies

Other1

export SpanPrimitive.ChildByIndex, which the docs already describe, so a row can be scoped to one span index without wiring SpanByIndexProvider by hand
view on github
>@assistant-ui/vite@0.0.17update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/x-buildutils@0.0.26update dependencies1 change

Chores1

update dependencies
view on github
>create-assistant-ui@0.0.78assistant-ui@0.0.1151 change

Other1

assistant-ui@0.0.115
view on github
>heat-graph@0.0.18update dependencies1 change

Chores1

update dependencies
view on github

Sep 3, 2026

40 releases

>@assistant-ui/ai-sdk@0.0.4keep cloud threads running across switches in AISDKThreads9 changes

Features1

keep cloud threads running across switches in AISDKThreads

Fixes5

ai-sdk
stop re-sending a persisted message whose content is unchanged
scope adapter refs to committed renders
carry server messageMetadata through to the thread
isolate each AISDKThreads thread in its own message repository
report a stopped AI SDK run as cancelled instead of complete

Chores3

drop an unexported usage helper
update dependencies
update dependencies
view on github
>@assistant-ui/cloud-ai-sdk@0.1.37publish workspace dependencies as caret ranges so they dedupe3 changes

Fixes1

publish workspace dependencies as caret ranges so they dedupe

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/core@0.3.17let a tool approval request describe itself and report its outcome39 changes

Features4

let a tool approval request describe itself and report its outcome
background thread bodies and a plain cloud adapter factory
resolve toolkit renderText through a framework-neutral seam
adopt an externally owned message repository instance per adapter swap

Fixes28

avoid duplicate external-store runtime publications
never execute a frontend tool on a tool call ADK resolves itself; a client-executed tool must be registered as a LongRunningFunctionTool on the agent
report lifecycle events from background thread runtimes
report run start and end for threads a remote thread list keeps alive in the background
cancel AssistantFrame tool calls when their provider is removed
preserve composer queue item component identity after removals
preserve thread list item state when preceding threads are removed
keep Cloud thread adapter options scoped to committed renders
drop zustand from core
keep model context callbacks scoped to committed React renders
never run a frontend tool on a call the provider is about to answer or gate
report a stopped AI SDK run as cancelled instead of complete
keep a frontend tool's pending human interrupt when execution starts
isolate errors from initialize listeners replayed after thread startup
isolate model context update listener errors
preserve attachment component state when message attachments are removed or reordered
preserve composer attachment component identity after removals
keep remote thread runtime hooks scoped to committed renders
clear the thread list loading state when a reload or adapter change supersedes the request
keep remote thread actions scoped to the committed adapter
prevent deleted threads from becoming the active thread
keep the remote main thread facade scoped to committed selections
peer ranges on the packages this workspace releases now track the release train
keep one thread slot per remote id and clear every alias on delete
keep the optimistic assistant placeholder id stable within a run
publish assistant transport callbacks before descendant layout effects
keep suggestion state stable across equal configurations
report cached and reasoning tokens from the AI SDK v7 token details

Refactors3

walk the nested tool-call tree through one shared traversal
generate composer attachment IDs with the shared ID utility
share the message error and thread-list load-more predicates across bindings

Chores4

stop hand-rolling the cloud adapter provider that the hosts synthesize
remove an internal re-export shim and a duplicated type guard
update dependencies
share one shallow-equal across the runtime internals
view on github
>@assistant-ui/eve@0.0.16project eve's input request onto the approval itself5 changes

Features1

project eve's input request onto the approval itself

Fixes1

keep thread refetches scoped to the committed Eve agent

Chores3

move the eve devDependency to 0.47.3
update dependencies
update dependencies
view on github
>@assistant-ui/mcp-docs-server@0.3.0Minorproxy the hosted assistant-ui mcp endpoint instead of bundling a docs snapshot. the stdio server now forwards to the hosted tool set, and the programmatic server export is removed3 changes

Features1

proxy the hosted assistant-ui mcp endpoint instead of bundling a docs snapshot. the stdio server now forwards to the hosted tool set, and the programmatic server export is removed

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react@0.15.18let a tool approval request describe itself and report its outcome15 changes

Features3

let a tool approval request describe itself and report its outcome
resolve MCP App renderer options per part
unstable_useWebMcpProvider, publishing frontend tools to a WebMCP-capable browser

Fixes5

react
keep trigger callbacks commit-safe
load newly mounted MCP Apps through the committed host
react
accept spec-shaped MCP App messages
react
keep model-context mentions current and honor explicit tool categories without requiring custom categories
report a sandboxed frame that never finishes loading through onError, and re-export the ShimLoadError and ShimLoadErrorCode types it is reported with

Refactors3

react
extract a shared model-context snapshot hook for the mention adapter and the webmcp provider
collapse the three trigger-item query predicates onto one shared helper
dispose WebMCP registrations through the abort signal alone

Chores4

drop a superseded internal hook and a dead plugin-registry variant
update dependencies
reuse the shared viewport math and callback invoker
update dependencies
view on github
>@assistant-ui/react-a2a@0.2.33preserve zero-byte files when converting messages to A2A parts2 changes

Fixes1

preserve zero-byte files when converting messages to A2A parts

Chores1

update dependencies
view on github
>@assistant-ui/react-ag-ui@0.0.58model the AG-UI subagent protocol. SUBAGENTSTARTED / SUBAGENTFINISHED / SUBAGENTERROR are parsed instead of falling through to RAW and being dropped, subagentRunId is read off the events that carry it, and each subagent run is grouped into one nested assistant message attached to its spawning tool call as ToolCallMessagePart.messages. a subagent with no reachable spawning call renders in the parent thread rather than being dropped.12 changes

Features1

model the AG-UI subagent protocol. SUBAGENT_STARTED / SUBAGENT_FINISHED / SUBAGENT_ERROR are parsed instead of falling through to RAW and being dropped, subagentRunId is read off the events that carry it, and each subagent run is grouped into one nested assistant message attached to its spawning tool call as ToolCallMessagePart.messages. a subagent with no reachable spawning call renders in the parent thread rather than being dropped.

Fixes8

surface a refused tool-approval decision, and show the gate's own message
a subagent's frontend tool result is recorded, survives re-emits, and resumes the run
rely on the upstream client to forward resume input
diagnose malformed AG-UI events
diagnose malformed fields on accepted AG-UI events
reject malformed message snapshot events
keep unresolved tool calls pending after successful runs
reject state snapshots without a snapshot value

Refactors1

walk the nested tool-call tree through one shared traversal

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-devtools@1.2.17preserve readable model context when individual properties throw5 changes

Fixes3

preserve readable model context when individual properties throw
tolerate unreadable runtime properties in DevTools snapshots
peer ranges on the packages this workspace releases now track the release train

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-generative-ui@0.0.17bound a node whose has trap hides children from the pre-pass3 changes

Fixes1

bound a node whose has trap hides children from the pre-pass

Refactors1

cap the Teams carousel through the shared bounded copy

Chores1

update dependencies
view on github
>@assistant-ui/react-google-adk@0.0.28scope adapter refs to committed renders3 changes

Fixes2

scope adapter refs to committed renders
never execute a frontend tool on a tool call ADK resolves itself; a client-executed tool must be registered as a LongRunningFunctionTool on the agent

Chores1

update dependencies
view on github
>@assistant-ui/react-ink@0.0.41use terminal display columns for multiline text input movement6 changes

Fixes4

use terminal display columns for multiline text input movement
drop zustand from core
keep vertical text input movement on grapheme boundaries
keep CRLF line endings intact during text input editing

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-langchain@0.0.29convert messages without a type or with non-array content instead of throwing4 changes

Fixes3

convert messages without a type or with non-array content instead of throwing
keep runtime refs scoped to committed renders
keep remote thread runtime hooks scoped to committed renders

Chores1

update dependencies
view on github
>@assistant-ui/react-langgraph@0.14.26keep runtime refs scoped to committed renders2 changes

Fixes1

keep runtime refs scoped to committed renders

Chores1

update dependencies
view on github
>@assistant-ui/react-lexical@0.2.12peer ranges on the packages this workspace releases now track the release train1 change

Fixes1

peer ranges on the packages this workspace releases now track the release train
view on github
>@assistant-ui/react-markdown@0.14.14stop bracket-delimited math from swallowing the rest of the message3 changes

Fixes3

stop bracket-delimited math from swallowing the rest of the message
keep code spans and fences inert when normalizing math delimiters
stop charging every streamed token a second render pass when defer is off
view on github
>@assistant-ui/react-mcp@0.1.16publish workspace dependencies as caret ranges so they dedupe9 changes

Fixes8

publish workspace dependencies as caret ranges so they dedupe
keep OAuth lifecycle callbacks scoped to committed renders
key server reconnects on the storage's scope identity so an OAuth connection never keeps a replaced store
serialize OAuth state persistence so concurrent updates are not lost
keep MCP storage resources stable across re-renders and serialize OAuth state persistence across provider instances
keep saved-token auto-connect from interrupting OAuth callbacks
validate OAuth callback state and issuer parameters
react-mcp
key the oauth write fence on scopeId so a same-scope storage swap cannot resurrect cleared tokens

Chores1

update dependencies
view on github
>@assistant-ui/react-native@0.1.40re-export the approval display type and its helper3 changes

Features1

re-export the approval display type and its helper

Fixes1

drop zustand from core

Chores1

update dependencies
view on github
>@assistant-ui/react-o11y@0.0.43publish workspace dependencies as caret ranges so they dedupe1 change

Fixes1

publish workspace dependencies as caret ranges so they dedupe
view on github
>@assistant-ui/react-pi@0.0.21re-render usePiThreadState only when the selected slice changes3 changes

Fixes1

react-pi
re-render usePiThreadState only when the selected slice changes

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-streamdown@0.3.13stop bracket-delimited math from swallowing the rest of the message4 changes

Fixes3

stop bracket-delimited math from swallowing the rest of the message
keep code spans and fences inert when normalizing math delimiters
stop charging every streamed token a second render pass when defer is off

Chores1

update dependencies
view on github
>@assistant-ui/store@0.3.12allow string ids in the stale scope reporter8 changes

Features3

allow string ids in the stale scope reporter
export useAssistantContextValue from the client entry
accept a content inset in the shared viewport scroll helpers

Fixes2

drop zustand from core
peer ranges on the packages this workspace releases now track the release train

Chores3

deduplicate the internal development flag
update dependencies
expose shallowEqual from the internal entry
view on github
>assistant-cloud@0.1.43coordinate anonymous authentication across Cloud client instances6 changes

Fixes5

coordinate anonymous authentication across Cloud client instances
coordinate anonymous authentication across browser tabs
deduplicate concurrent message appends while parent persistence is pending
abort Cloud authentication token requests after their deadline
report cached and reasoning tokens from the AI SDK v7 token details

Chores1

update dependencies
view on github
>assistant-stream@0.3.41prevent stale Redis producers from finalizing replacement streams4 changes

Fixes3

prevent stale Redis producers from finalizing replacement streams
await cross-realm and thenable tool validation results
preserve valid files with empty payload or MIME values

Refactors1

drop the redis client members the resumable store never calls
view on github
>assistant-ui@0.0.114scaffold lib/utils from the assistant-ui registry so new projects get cn8 changes

Features3

scaffold lib/utils from the assistant-ui registry so new projects get cn
map scanned component imports onto the elements registry item names
point the mcp command at the hosted assistant-ui mcp endpoint

Fixes4

publish workspace dependencies as caret ranges so they dedupe
fail the upgrade when a codemod exits nonzero
reconcile legacy component imports with the elements layout the registry installs, so created examples build
restrict component import reconciliation to module declarations

Chores1

update dependencies
view on github
>create-assistant-ui@0.0.77publish workspace dependencies as caret ranges so they dedupe1 change

Fixes1

publish workspace dependencies as caret ranges so they dedupe
view on github
>safe-content-frame@0.0.29name why a frame failed to load with a code on the rejection, narrowed by the new isShimLoadError guard2 changes

Features1

name why a frame failed to load with a code on the rejection, narrowed by the new isShimLoadError guard

Fixes1

tell a missing shim, a shim that failed to start, and a slow render apart
view on github
>13 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.14update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/metro@0.0.12update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/next@0.0.19update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.9@assistant-ui/ai-sdk@0.0.41 change

Other1

@assistant-ui/ai-sdk@0.0.4
view on github
>@assistant-ui/react-data-stream@0.12.29update dependencies2 changes

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-hook-form@0.12.31update dependencies2 changes

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-ink-markdown@0.0.40@assistant-ui/core@0.3.171 change

Other1

@assistant-ui/core@0.3.17
view on github
>@assistant-ui/react-opencode@0.2.22update dependencies2 changes

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/tap@0.9.16update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/vite@0.0.16update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/x-buildutils@0.0.25update dependencies2 changes

Chores2

update dependencies
unpin rolldown now that 1.2.6 restores the re-exported types it dropped in 1.2.5
view on github
>@assistant-ui/x-generative-compiler@0.0.16update dependencies1 change

Chores1

update dependencies
view on github
>heat-graph@0.0.17update dependencies1 change

Chores1

update dependencies
view on github

Aug 27, 2026

40 releases

>@assistant-ui/ai-sdk@0.0.3preserve settled output-denied tool calls when sending a new message8 changes

Fixes4

preserve settled output-denied tool calls when sending a new message
import an external AI SDK message tree without disconnecting useChat
expose the chat update throttle in useChatRuntime options
persist settled messages when history attaches after a run

Refactors2

derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
share the file part source resolution branch

Docs1

name @assistant-ui/ai-sdk in JSDoc examples

Chores1

update dependencies
view on github
>@assistant-ui/cloud-ai-sdk@0.1.36preserve active chats when Cloud scope renders are interrupted8 changes

Fixes5

preserve active chats when Cloud scope renders are interrupted
keep committed Cloud chat options active across interrupted renders
feed title generation the conversation in chronological order
load every Cloud thread list page
clear selected Cloud threads hidden by remote archival

Refactors2

move the run report tool call shape and its serialization into assistant-cloud
provide thread title generation from assistant-cloud; cloud-ai-sdk keeps only the format-specific half.

Chores1

update dependencies
view on github
>@assistant-ui/core@0.3.16roll back AssistantFrame providers on registration, release, and disposal failures35 changes

Fixes19

roll back AssistantFrame providers on registration, release, and disposal failures
keep prepended id-less messages in the external message converter
tag static ai-sdk/v6 tool calls as frontend in cloud run telemetry
cancelling an edit session cancels its in-flight attachment adds and removes its non-complete attachments through the attachment adapter
derive requires-action for pending and interrupted tool calls in the external-store convertMessage path; messages with unresolved tool calls now report requires-action instead of complete
evict deleted external-store messages so no phantom branch survives. the setMessages path evicts immediately; the onDelete path evicts at the confirming host snapshot
keep prepended history when convertMessage returns no id
report frame tool failures whose error message is empty
default assistant frame messaging to the current origin
preserve incomplete tool-call part statuses
resolve InMemoryThreadList index selectors within the archived/regular subset
type MCP app metadata in ThreadMessageLike tool calls
derive requires-action for pending and interrupted tool calls when importing messages into the repository, and resume local runs after approving an imported pending approval
preserve generated thread titles across overlapping optimistic updates
keep threads initialized during a list flight in the thread list when the stale response lands
preserve streamed RemoteThreadList titles across optimistic replays
reject archived index selectors on SingleThreadList instead of resolving the regular thread
refresh static suggestions when their configuration changes
never execute a frontend tool on a tool call that carries a provider approval

Refactors13

share the attachment add cancellation machinery between the composer core and the store client.
notify every thread runtime subscriber before rethrowing a subscriber error.
move the run report tool call shape and its serialization into assistant-cloud
derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
collapse the external message converter's duplicate derivation chains into one pure module.
share the file part source resolution branch
share the interactable persistence scheduler between the tap client and the legacy surface.
share the runtime lifecycle callback invoker from core internal.
share the message repository session layer between a2a and ag-ui
move queue item state ownership into the runtime layer.
back ModelContextRegistry's provider handling with CompositeContextProvider.
share the remote thread list empty state and local thread seeding.
share the pending tool-call scan, abortable thread load, and cloud create fallback via core.

Docs2

name @assistant-ui/ai-sdk in JSDoc examples
ToolApprovalOption.kind no longer says the default kit skips custom _-prefixed kinds; the kit renders them and answers with an explicit approved value alongside the optionId

Chores1

update dependencies
view on github
>@assistant-ui/eve@0.0.15refetch the open thread in place through threads.reloadMainThread6 changes

Features1

refetch the open thread in place through threads.reloadMainThread

Fixes2

cancel runs through the eve 0.38+ cancel binding, with stop fallback for older hosts
preserve HITL input-request prompt and display mode; answer free-form requests with the response text instead of approve, and never submit a response eve cannot record as an answer to the request it names

Refactors2

derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
share the file part source resolution branch

Chores1

update dependencies
view on github
>@assistant-ui/mcp-docs-server@0.2.3validate template catalog entries before using them2 changes

Fixes1

validate template catalog entries before using them

Chores1

update dependencies
view on github
>@assistant-ui/metro@0.0.11derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.3 changes

Refactors2

derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.
share the generative source predicate across bundler integrations

Chores1

update dependencies
view on github
>@assistant-ui/react@0.15.17export createSuggestionAdapter and its option types from the distribution packages12 changes

Features2

export createSuggestionAdapter and its option types from the distribution packages
allow trigger popovers to override query matching

Fixes7

keep MCP App server routing scoped to committed renders
keep sandbox bridge options scoped to committed renders
default assistant frame messaging to the current origin
keep committed MCP App host options active during interrupted renders
expose MCP App renderer handlers
keep slash commands scoped to committed renders. search now matches the displayed label, so a command with no explicit label is matched on its /id fallback rather than only on id and description.
keep live completion fetchers scoped to committed renders

Chores3

drop unreachable legacy forwarding sources.
import Radix internals from radix-ui/internal and drop the individual @radix-ui/* dependencies
update dependencies
view on github
>@assistant-ui/react-a2a@0.2.32keep the server-assigned contextId across re-renders. switching threads aborts the in-flight run and fires onCancel12 changes

Fixes7

keep the server-assigned contextId across re-renders. switching threads aborts the in-flight run and fires onCancel
recognize JSON-RPC kind-discriminated streaming events and hyphenated task states
load a history adapter that arrives after the first load
reject non-string task and context IDs when decoding A2A responses
keep managed A2A headers scoped to committed renders
apply runtime options after commit
validate wrapped A2A stream events before emitting them

Refactors4

share the file part source resolution branch
share the runtime lifecycle callback invoker from core internal.
share the message repository session layer between a2a and ag-ui
move shared pure converters to the converter seam. langgraph ui messages carrying the js sdk metadata.id parent field now attach to their assistant message.

Chores1

update dependencies
view on github
>@assistant-ui/react-ag-ui@0.0.57omit empty text parts from streamed snapshots12 changes

Fixes6

omit empty text parts from streamed snapshots
load a history adapter that arrives after the first load
keep developer messages across snapshot import
keep reasoning signatures from live runs that produce no visible part
keep tool follow-up text on its assistant message
apply runtime options after commit

Refactors5

generate ids with core generateId and drop the uuid dependency.
derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
share the file part source resolution branch
share the runtime lifecycle callback invoker from core internal.
share the message repository session layer between a2a and ag-ui

Chores1

update dependencies
view on github
>@assistant-ui/react-data-stream@0.12.28keep mid-stream cancellation out of onError3 changes

Fixes1

keep mid-stream cancellation out of onError

Refactors1

share the runtime lifecycle callback invoker from core internal.

Chores1

update dependencies
view on github
>@assistant-ui/react-generative-ui@0.0.16allow ListViewItem actions to fire from the row trigger6 changes

Fixes3

allow ListViewItem actions to fire from the row trigger
bound outbound prop arrays by index before conversion
bound the Slack decoder and the spec pre-pass by index so a replaced slice or Symbol.species cannot defeat their caps

Refactors2

share one contiguous-run helper and one element predicate across the converters
share one spec-bounding pre-pass between the Slack and Teams converters

Chores1

update dependencies
view on github
>@assistant-ui/react-google-adk@0.0.27keep every text and reasoning part of a multi-part ADK event8 changes

Fixes1

keep every text and reasoning part of a multi-part ADK event

Refactors6

move the pure adk helpers to the converter seam.
generate ids with core generateId and drop the uuid dependency.
derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
share the file part source resolution branch
share the runtime lifecycle callback invoker from core internal.
share the pending tool-call scan, abortable thread load, and cloud create fallback via core.

Chores1

update dependencies
view on github
>@assistant-ui/react-ink@0.0.40export createSuggestionAdapter and its option types from the distribution packages3 changes

Features1

export createSuggestionAdapter and its option types from the distribution packages

Fixes1

reset fallback elapsed time when each run starts

Chores1

update dependencies
view on github
>@assistant-ui/react-langchain@0.0.28preserve reasoning fallback text when summary is empty8 changes

Fixes2

preserve reasoning fallback text when summary is empty
do not default a tool message's toolName to an empty string

Refactors5

derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
share the file part source resolution branch
share the langchain converter layer with react-langgraph via the new @assistant-ui/react-langchain/converter subpath. @langchain/react becomes an optional peer of react-langchain.
move shared pure converters to the converter seam. langgraph ui messages carrying the js sdk metadata.id parent field now attach to their assistant message.
share the pending tool-call scan, abortable thread load, and cloud create fallback via core.

Chores1

update dependencies
view on github
>@assistant-ui/react-langgraph@0.14.25preserve reasoning fallback text when summary is empty10 changes

Fixes3

preserve reasoning fallback text when summary is empty
tolerate messages without content in the converter and accumulator
skip malformed stream payloads instead of throwing

Refactors6

generate ids with core generateId and drop the uuid dependency.
derive executing-tool running state inside the external-store runtime; adapters now pass raw provider isRunning.
share the runtime lifecycle callback invoker from core internal.
share the langchain converter layer with react-langgraph via the new @assistant-ui/react-langchain/converter subpath. @langchain/react becomes an optional peer of react-langchain.
move shared pure converters to the converter seam. langgraph ui messages carrying the js sdk metadata.id parent field now attach to their assistant message.
share the pending tool-call scan, abortable thread load, and cloud create fallback via core.

Chores1

update dependencies
view on github
>@assistant-ui/react-lexical@0.2.11allow trigger popovers to override query matching3 changes

Features1

allow trigger popovers to override query matching

Fixes1

keep leading blank lines when reading composer text back from the editor

Chores1

update dependencies
view on github
>@assistant-ui/react-markdown@0.14.13compare componentsByLanguage structurally so inline objects keep code-block memoization4 changes

Fixes2

compare componentsByLanguage structurally so inline objects keep code-block memoization
keep the pre element for raw pre blocks without a code child

Refactors1

single-source the code-fence contract on a react-markdown subpath. the CodeHeader/SyntaxHighlighter prop types, the by-language override entry, and the language-class parser now live in @assistant-ui/react-markdown/code-fence; react-streamdown re-exports the types from there instead of keeping structurally compatible copies. @types/hast moves to dependencies in both packages so the published declarations reference hast by name instead of a broken store-relative path.

Chores1

update dependencies
view on github
>@assistant-ui/react-mcp@0.1.15refresh MCP connections when connector settings change4 changes

Fixes1

refresh MCP connections when connector settings change

Refactors2

share the runtime lifecycle callback invoker from core internal.
generate ids from the shared core generator instead of per-call-site implementations

Chores1

update dependencies
view on github
>@assistant-ui/react-native@0.1.39export createSuggestionAdapter and its option types from the distribution packages3 changes

Features1

export createSuggestionAdapter and its option types from the distribution packages

Fixes1

guard Enter-to-send behind running state and canSend

Chores1

update dependencies
view on github
>@assistant-ui/react-opencode@0.2.21keep new OpenCode threads sendable while their session initializes5 changes

Fixes2

keep new OpenCode threads sendable while their session initializes
keep sessionStatus as server truth so a failed prompt send no longer leaves the thread stuck running

Refactors2

share the runtime lifecycle callback invoker from core internal.
generate ids from the shared core generator instead of per-call-site implementations

Chores1

update dependencies
view on github
>@assistant-ui/react-pi@0.0.20resolve the schema dependency in published declarations9 changes

Fixes5

resolve the schema dependency in published declarations
allow allocating selectors in usePiThreadState without an external-store render loop
deliver current thread state to late shared-stream subscribers
deliver the first message of a brand-new thread
keep the composer enabled while a new thread initializes

Refactors3

share the runtime lifecycle callback invoker from core internal.
parse pi event streams with the shared assistant-stream SSE decoder.
subscribe the Pi runtime to stable controller snapshots instead of a version counter. a PiThreadControllerLike implementation must now return reference-stable values from getState (or the new optional getStateSnapshot) and getMessageRepository, since the React bindings read them as useSyncExternalStore snapshots.

Chores1

update dependencies
view on github
>@assistant-ui/react-streamdown@0.3.12bump streamdown to 2.6 so fenced code updates when streamed content changes3 changes

Fixes1

bump streamdown to 2.6 so fenced code updates when streamed content changes

Refactors1

single-source the code-fence contract on a react-markdown subpath. the CodeHeader/SyntaxHighlighter prop types, the by-language override entry, and the language-class parser now live in @assistant-ui/react-markdown/code-fence; react-streamdown re-exports the types from there instead of keeping structurally compatible copies. @types/hast moves to dependencies in both packages so the published declarations reference hast by name instead of a broken store-relative path.

Chores1

update dependencies
view on github
>@assistant-ui/vite@0.0.15share the generative source predicate across bundler integrations2 changes

Refactors1

share the generative source predicate across bundler integrations

Chores1

update dependencies
view on github
>@assistant-ui/x-buildutils@0.0.24derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.2 changes

Refactors1

derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.

Chores1

update dependencies
view on github
>@assistant-ui/x-generative-compiler@0.0.15share the generative source predicate across bundler integrations2 changes

Refactors1

share the generative source predicate across bundler integrations

Chores1

update dependencies
view on github
>assistant-cloud@0.1.42surface the response text when a JSON error body has no message6 changes

Fixes3

surface the response text when a JSON error body has no message
keep telemetry enabled when config carries an undefined enabled
clamp pre-serialized run telemetry arguments

Refactors2

move the run report tool call shape and its serialization into assistant-cloud
provide thread title generation from assistant-cloud; cloud-ai-sdk keeps only the format-specific half.

Chores1

update dependencies
view on github
>assistant-stream@0.3.40encode file parts on the data stream12 changes

Fixes7

encode file parts on the data stream
reject non-canonical gorp array indices
make merge stream seal idempotent
keep partial tool args parseable while a \uXXXX escape is still streaming
unstable_runPendingTools no longer re-executes tool calls that already have a result
TextStreamController.close no longer throws after the consumer cancels
guard tool-call stream writes after consumer cancellation

Refactors4

build accumulated assistant messages through one part-append helper
split the ui message stream chunk normalizer out of the decoder
share the sse pipeline, stream factory, and closed-stream drop scaffolding.
share the decoder tool-call controller registry between data-stream and ui-message-stream.

Chores1

update dependencies
view on github
>assistant-ui@0.0.113preserve CLI termination signals and child cleanup5 changes

Fixes2

preserve CLI termination signals and child cleanup
stop the v0-12 codemods from emitting mismatched JSX, dropping dynamic conditions, and renaming unrelated api bindings

Refactors1

consolidate the package manager resolver and project file iteration

Chores2

install @assistant-ui/ai-sdk instead of @assistant-ui/react-ai-sdk
update dependencies
view on github
>create-assistant-ui@0.0.76propagate termination signals to the spawned CLI. cancelling now exits by the signal (130 for SIGINT, 143 for SIGTERM) instead of reporting success, so a cancelled scaffold no longer looks like a completed one to CI.1 change

Fixes1

propagate termination signals to the spawned CLI. cancelling now exits by the signal (130 for SIGINT, 143 for SIGTERM) instead of reporting success, so a cancelled scaffold no longer looks like a completed one to CI.
view on github
>11 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.13update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/next@0.0.18update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.8@assistant-ui/ai-sdk@0.0.31 change

Other1

@assistant-ui/ai-sdk@0.0.3
view on github
>@assistant-ui/react-devtools@1.2.16update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-hook-form@0.12.30update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ink-markdown@0.0.39update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-o11y@0.0.42update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/store@0.3.11update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/tap@0.9.15update dependencies1 change

Chores1

update dependencies
view on github
>heat-graph@0.0.16update dependencies1 change

Chores1

update dependencies
view on github
>safe-content-frame@0.0.28update dependencies1 change

Chores1

update dependencies
view on github