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
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 themForward MCP Apps metadata from AI SDK tool metadata while keeping server routing controlled by provider metadata.
>@assistant-ui/core@0.3.24support message-scoped converter metadata invalidation14 changes
Fixes5
core
release realtime voice listeners when a session ends on its own
core
keep the selected branch when a local run continues an existing answer
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 thema 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 propreasoning 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 timinga 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 workeda 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
>@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
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
Other4
>@assistant-ui/react@0.15.25allow visible component action settle delays to be configured9 changes
Features2
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 thema 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 propreasoning 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 timinga 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>@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
Other1
>@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
>@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 itOther1
>@assistant-ui/react-ag-ui@0.0.65convert deeply nested tool calls without overflowing the stack3 changes
Other2
>@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 afterwardskeep a resumed answer complete when Stop is pressed after the resume stream delivered it but before the stream closes
>@assistant-ui/react-data-stream@0.12.35preserve assistant-generated files in subsequent model history1 change
>@assistant-ui/react-google-adk@0.0.35preserve run configuration when ADK tool results resume a turn1 change
>@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
Other1
Mark unfinished assistant messages as cancelled when an ADK run is stopped, including finalized tool-call and long-running tool messages.
>@assistant-ui/react-langchain@0.0.35support message-scoped converter metadata invalidation1 change
>@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>@assistant-ui/react-langgraph@0.14.33support message-scoped converter metadata invalidation2 changes
>@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 rejectsskip 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>@assistant-ui/react-opencode@0.2.28preserve OpenCode interactions with prototype-named identifiers3 changes
Other2
>@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
>@assistant-ui/react-pi@0.0.28preserve live runs while loading cold thread history2 changes
Fixes2
>assistant-stream@0.3.48preserve assistant-generated files in subsequent model history3 changes
Fixes2
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>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.>safe-content-frame@0.0.33clean up cancelled and pre-load failed sandbox frame renders1 change
>40 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.17update dependencies1 change
>@assistant-ui/ai-sdk@0.0.10update dependencies2 changes
>@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
>@assistant-ui/eve@0.0.21update dependencies1 change
>@assistant-ui/mcp-docs-server@0.3.3update dependencies1 change
>@assistant-ui/metro@0.0.16update dependencies1 change
>@assistant-ui/next@0.0.24update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.16@assistant-ui/ai-sdk@0.0.111 change
Other1
@assistant-ui/ai-sdk@0.0.11
>@assistant-ui/react-ai-sdk@1.4.15update dependencies1 change
>@assistant-ui/react-data-stream@0.12.34update dependencies1 change
>@assistant-ui/react-devtools@1.2.23update dependencies1 change
>@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
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
>@assistant-ui/react-generative-ui@0.0.23update dependencies3 changes
Other2
submit edited DatePicker times in the browser's normalized form, so .500 goes out as .5 whichever spelling the browser reports
>@assistant-ui/react-hook-form@0.12.36update dependencies1 change
>@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 themadd
MessagePrimitive.Quote, so a message sent with a composer quote can show what it replied toreasoning 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 timinga 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>@assistant-ui/react-ink@0.0.47update dependencies2 changes
>@assistant-ui/react-ink-markdown@0.0.47@assistant-ui/core@0.3.241 change
Other1
@assistant-ui/core@0.3.24
>@assistant-ui/react-ink-markdown@0.0.46update dependencies1 change
>@assistant-ui/react-lexical@0.2.16update dependencies1 change
>@assistant-ui/react-markdown@0.14.19update dependencies1 change
>@assistant-ui/react-mcp@0.1.21update dependencies1 change
>@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 thema 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 propadd
MessagePrimitive.Quote, so a message sent with a composer quote can show what it replied toreasoning 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 timinga 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>@assistant-ui/react-native@0.1.45update dependencies2 changes
>@assistant-ui/react-o11y@0.0.46update dependencies1 change
>@assistant-ui/react-pi@0.0.27update dependencies2 changes
>@assistant-ui/react-streamdown@0.3.19update dependencies2 changes
>@assistant-ui/react-syntax-highlighter@0.14.7update dependencies1 change
>@assistant-ui/store@0.3.17update dependencies1 change
>@assistant-ui/tap@0.9.21update dependencies2 changes
>@assistant-ui/vite@0.0.20update dependencies1 change
>@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>@assistant-ui/x-buildutils@0.0.30update dependencies1 change
>@assistant-ui/x-generative-compiler@0.0.20update dependencies1 change
>assistant-cloud@0.2.5update dependencies1 change
>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
>assistant-ui@0.0.120update dependencies1 change
>create-assistant-ui@0.0.84assistant-ui@0.0.1211 change
Other1
assistant-ui@0.0.121
>create-assistant-ui@0.0.83update dependencies1 change
>heat-graph@0.0.23update dependencies1 change
>safe-content-frame@0.0.32update dependencies1 change
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
ai-sdk
deliver a host tool approval answer when an earlier stored tool part is
approval-requested without an approval objectai-sdk
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 updateOther1
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.>@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 falseFixes29
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.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 completedkeep an empty file part filename through cloud history, as image parts and attachments already do
core
ignore an interactable setState for an id that is not registered, so a later load still restores its stored value
core
keep the message queue draining when a subscriber cancels while a queued message is being dispatched
>@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 refusedFixes1
>@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
>@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
>@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
Other1
Editing a message now creates a sibling branch and keeps the original turn reachable instead of deleting it.
>@assistant-ui/react-devtools@1.2.22show conversation lists that contain only archived threads2 changes
>@assistant-ui/react-generative-ui@0.0.22map a2ui sliders onto the slider vocabulary26 changes
Features8
Fixes17
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 warnsupdate 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
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 valuethe 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 warningOther1
Resolve Slack action
$field references from named controls in the submitted state.values.>@assistant-ui/react-google-adk@0.0.33preserve activity message text during ADK conversion3 changes
Fixes3
>@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 falseFixes1
>@assistant-ui/react-langgraph@0.14.31reload LangGraph threads with the latest committed load callback4 changes
Fixes4
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>@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
>@assistant-ui/react-pi@0.0.26finish controller cleanup when event unsubscription throws2 changes
>@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
>@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
>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
>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 completedremove runtime import cycles from development bundles
>assistant-ui@0.0.119assistant-ui agent installs the skills commit whose cloud skill no longer shows files.pdfToImages2 changes
Fixes2
>heat-graph@0.0.22render heat-graph's contexts through .Provider so Root works on React 181 change
>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
>@assistant-ui/react-ink-markdown@0.0.45@assistant-ui/store@0.3.161 change
Other1
@assistant-ui/store@0.3.16
>@assistant-ui/react-markdown@0.14.18preserve currency and math delimiters inside html blocks during preprocessing.1 change
Other1
>@assistant-ui/react-streamdown@0.3.18preserve currency and math delimiters inside html blocks during preprocessing.3 changes
Other3
>create-assistant-ui@0.0.82assistant-ui@0.0.1191 change
Other1
assistant-ui@0.0.119
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
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 offFixes11
correct settled and failed tool-call arg conversion
>@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 deprecatedLangGraph, 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 offa 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 themFixes60
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 | nullcore
feedback submitted mid-run no longer strands the message, drops its history write, or keeps invoking the adapter.
core
core
keep a dictation session that a composer subscriber starts while send cancels the previous one
core
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 branchcore
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 switchcore
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
core
AssistantFrameProvider.dispose withdraws the frame's tools from the parent hostcore
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 followcore
leave the message repository unchanged when it rejects an update or a delete
core
settle a tool call only on its final result in the tool tracker, aui/v0 persistence and
addToolResultcorrect settled and failed tool-call arg conversion
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
core
log a failed controlled
threadId switch in useRemoteThreadListRuntime instead of dropping it, as the RemoteThreadList client already doesreject archiving, deleting or detaching the thread the user is in when its first
initialize fails, instead of looping forever and freezing the tabcore
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 runcore
an assistant transport request no longer carries the
parentId of a message that a cancel or a failed run discardeddrop 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 onVoiceTranscripthold 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
Refactors1
Docs1
core
describe which optimistic messages eviction removes and when completed optimistic updates stop being replayed
>@assistant-ui/eve@0.0.19emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts2 changes
>@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>@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 deprecateda 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 themFixes17
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 | nullevery 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
react
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.
>@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
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.Fixes4
>@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
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.Fixes5
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
>@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
>@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
>@assistant-ui/react-devtools@1.2.21show an Error's name, message and stack instead of an empty object2 changes
>@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>@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
>@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
>@assistant-ui/react-hook-form@0.12.35settle assistant form submissions when their form unmounts1 change
>@assistant-ui/react-ink@0.0.45show a message with uploading attachments in the thread while it is being sent9 changes
Features4
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 themFixes5
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-ink
export the
ToolCallTiming type that @assistant-ui/react and @assistant-ui/react-native already export>@assistant-ui/react-ink-markdown@0.0.44render Shiki tokens that use short hex colors1 change
>@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
>@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
>@assistant-ui/react-lexical@0.2.15allow Lexical composer submission while a queued run is active.4 changes
Fixes3
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 itselfChores1
migrate to Lexical 0.51
>@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>@assistant-ui/react-mcp@0.1.20ignore authorization URLs from stale MCP OAuth connections1 change
>@assistant-ui/react-native@0.1.44show a message with uploading attachments in the thread while it is being sent12 changes
Features5
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 themFixes7
expose the current thread to assistive technology on react-native-web
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.expose feedback submission state to assistive technology
>@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
>@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 idmark 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 offFixes4
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 usedrop user content parts of a type the projection does not handle instead of turning them into text parts without text
>@assistant-ui/react-streamdown@0.3.17fail the build when emitted output imports an undeclared package11 changes
Fixes11
react-streamdown
stop an unmatched mid-line
$$ from pairing with later display mathmarkdown
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 openstop 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 closerkeep 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 markerreact-streamdown
stop the streaming repair from escaping text inside raw HTML blocks
>@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
>@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
>@assistant-ui/x-buildutils@0.0.29fail the build when emitted output imports an undeclared package5 changes
Fixes4
>@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>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
cloud
expose caller-supplied cost, attributes, and root span fields on run reports
cloud
>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
Use successful Standard Schema output for tool execution and model output. Keep the original arguments for validation errors and stored tool calls.
>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
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
>heat-graph@0.0.21keep the last day of the range in a midnight-DST timezone1 change
>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
>@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
>@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
>@assistant-ui/vite@0.0.19@assistant-ui/x-generative-compiler@0.0.191 change
Other1
@assistant-ui/x-generative-compiler@0.0.19
>create-assistant-ui@0.0.81assistant-ui@0.0.1181 change
Other1
assistant-ui@0.0.118
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
>@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
Fixes11
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
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.preserve voice modality when loading local storage history
core
>@assistant-ui/react@0.15.21resume bottom following when auto-scroll is enabled at runtime3 changes
>@assistant-ui/react-a2a@0.2.36ignore stale cancellation responses and read the cancel target before the local abort3 changes
>@assistant-ui/react-ag-ui@0.0.60preserve tool result modelContent and stored artifact in addToolResult5 changes
Fixes4
react-ag-ui
react-ag-ui
>@assistant-ui/react-generative-ui@0.0.19exclude controls disabled by an ancestor fieldset from form payloads5 changes
Fixes4
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.>@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
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 responsesskip media parts missing
mimeType, data, or fileUri instead of failing the session load or rendering them with an undefined source>@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
>@assistant-ui/react-ink@0.0.44restart fallback elapsed time when the running message changes4 changes
Fixes3
>@assistant-ui/react-langchain@0.0.32allow unresolved subagent namespace discovery to retry5 changes
Fixes4
>@assistant-ui/react-langgraph@0.14.29unstablecreateLangGraphStream forwards streamSubgraphs so subgraph events arrive through the helper3 changes
>@assistant-ui/react-markdown@0.14.16stop preprocess from restarting smooth streaming when a rewrite changes already-revealed text2 changes
>@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
>@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
>@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
>@assistant-ui/react-pi@0.0.24answer pi select, input and editor requests through the tool call's approval6 changes
Fixes5
>@assistant-ui/react-streamdown@0.3.16keep settled code blocks from re-rendering when streamdown re-renders their block2 changes
>@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
>@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
>assistant-cloud@0.2.2message feedback accepts an optional comment and Assistant Cloud stores it5 changes
Features1
Fixes2
Docs1
enable the AI SDK OpenTelemetry integration in the README telemetry recipe, so a route that follows it emits spans
>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
assistant-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.>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
>safe-content-frame@0.0.31support multibyte pathnames when deriving browser cache salts2 changes
>17 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.16update dependencies1 change
>@assistant-ui/eve@0.0.18update dependencies1 change
>@assistant-ui/mcp-docs-server@0.3.2update dependencies1 change
>@assistant-ui/metro@0.0.14update dependencies1 change
>@assistant-ui/next@0.0.22update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.12@assistant-ui/ai-sdk@0.0.71 change
Other1
@assistant-ui/ai-sdk@0.0.7
>@assistant-ui/react-data-stream@0.12.32update dependencies1 change
>@assistant-ui/react-devtools@1.2.20update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.43update dependencies1 change
>@assistant-ui/react-lexical@0.2.14update dependencies1 change
>@assistant-ui/react-o11y@0.0.45update dependencies1 change
>@assistant-ui/react-syntax-highlighter@0.14.6update dependencies1 change
>@assistant-ui/tap@0.9.18update dependencies1 change
>@assistant-ui/vite@0.0.18update dependencies1 change
>@assistant-ui/x-generative-compiler@0.0.18update dependencies1 change
>create-assistant-ui@0.0.80update dependencies1 change
>heat-graph@0.0.20update dependencies1 change
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
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 createdreport 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 pathRefactors1
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>@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 transcriptFixes26
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 pathRefactors1
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>@assistant-ui/next@0.0.21avoid treating similarly named user modules as internal redirects1 change
>@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 transcriptFixes2
>@assistant-ui/react-a2a@0.2.35wait for agent capabilities before choosing the first A2A send method2 changes
>@assistant-ui/react-data-stream@0.12.31preserve source message IDs when generic conversion drops or splits messages1 change
Fixes1
>@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
>@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
Fixes6
drop long-running tool calls the client already answered from
useAdkLongRunningToolIds and session snapshotskeep 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.>@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
>@assistant-ui/react-ink@0.0.43derive thread.tasks from tool calls that carry nested conversations, with a task scope5 changes
>@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
>@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 transcripttask 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
Fixes1
task subagent transcripts include the generative UI parts pushed for their own messages
>@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
Fixes1
>@assistant-ui/react-lexical@0.2.13skip rebuilding unchanged drafts on selection-only Lexical updates while preserving deferred parser retries4 changes
Fixes4
>@assistant-ui/react-mcp@0.1.18isolate custom MCP servers across storage scopes and fence writes after load failures3 changes
Fixes3
>@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 transcriptFixes2
>@assistant-ui/react-pi@0.0.23preserve image content returned by Pi tools2 changes
>@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>@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
>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
Fixes7
keep an append's remote ID in
CloudMessagePersistence when a history load returns the same message IDDocs2
>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.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.strict
TextStreamController.append drops deltas instead of throwing after the consumer cancels the streamthe tool-call
argsText controller honors the strict flag passed to createAssistantStreamControllermark tool arguments complete when their text stream ends
>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
>heat-graph@0.0.19accept full ISO timestamps in heat graph date inputs2 changes
>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
>create-assistant-ui@0.0.79assistant-ui@0.0.1161 change
Other1
assistant-ui@0.0.116
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
>@assistant-ui/ai-sdk@0.0.5show approval request reasons as fallback prompts9 changes
Fixes6
preserve the AI SDK's approval request metadata during message conversion instead of rebuilding the approval from a fixed field list
>@assistant-ui/cloud-ai-sdk@0.2.0Minoralign the cloud SDK with Assistant Cloud 0.28 changes
Fixes5
order thread title generations against each other and against renames
>@assistant-ui/core@0.3.18align the cloud SDK with Assistant Cloud 0.239 changes
Features2
Fixes35
keep an explicit null parent when a thread appends a message
keep discarded composer text out of dictation results after reset
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
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
keep the initialization task on a new thread promoted to regular
preserve attachment removal errors in the tap composer
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.
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
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.
skip adapter cleanup for complete edit attachments
Other1
Handle prototype-named tool and remote thread keys safely.
>@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"
>@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
>@assistant-ui/metro@0.0.13isolate transformer settings between independently loaded Metro configs2 changes
>@assistant-ui/react@0.15.19align the cloud SDK with Assistant Cloud 0.223 changes
Features2
Fixes17
honor message part text render elements with an explicit component.
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
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
forward every part renderer option through
MessagePrimitive.Parts, so data renderers survive ChainOfThoughtRefactors2
Other1
Handle prototype-named tool and remote thread keys safely.
>@assistant-ui/react-a2a@0.2.34validate nested message part fields2 changes
>@assistant-ui/react-ag-ui@0.0.59add resumeTranscript to control what a resume run sends9 changes
>@assistant-ui/react-devtools@1.2.18adjust state during render where an effect only mirrored a prop2 changes
>@assistant-ui/react-generative-ui@0.0.18preserve prototype-named A2UI action context fields8 changes
Fixes8
>@assistant-ui/react-google-adk@0.0.29abort superseded Google ADK streams even when interactive cancellation is disabled.5 changes
Fixes5
>@assistant-ui/react-ink@0.0.42forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders3 changes
Fixes2
>@assistant-ui/react-langchain@0.0.30harden the shared content block converter against non-spec blocks4 changes
Fixes2
>@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
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.
>@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
read tilde fences in the currency walker, and end an unclosed fence with its blockquote instead of the rest of the input
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
>@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
keep static OAuth client updates out of the dynamic registration cache
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.
>@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 ChainOfThoughtsupply derived status to registered tool and data renderers
>@assistant-ui/react-opencode@0.2.23preserve OpenCode messages whose IDs match object prototype properties3 changes
>@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
>@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
read tilde fences in the currency walker, and end an unclosed fence with its blockquote instead of the rest of the input
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 childpreserve currency and math inside indented tilde fences
Performance2
>@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.
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.
>@assistant-ui/tap@0.9.17notify every Tap root subscriber when one throws2 changes
>@assistant-ui/x-generative-compiler@0.0.17refresh TypeScript path aliases after config changes2 changes
>assistant-cloud@0.2.0Minoralign the cloud SDK with Assistant Cloud 0.27 changes
>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
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
>assistant-ui@0.0.115keep relative add directories anchored to the caller6 changes
Fixes5
keep relative add directories anchored to the caller
>safe-content-frame@0.0.30clear load timeout timers after SafeContentFrame settles1 change
>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
>10 maintenance releasesdependency updates and chores
>@assistant-ui/next@0.0.20update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.10@assistant-ui/ai-sdk@0.0.51 change
Other1
@assistant-ui/ai-sdk@0.0.5
>@assistant-ui/react-data-stream@0.12.30update dependencies1 change
>@assistant-ui/react-hook-form@0.12.32update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.41@assistant-ui/core@0.3.181 change
Other1
@assistant-ui/core@0.3.18
>@assistant-ui/react-o11y@0.0.44update dependencies2 changes
>@assistant-ui/vite@0.0.17update dependencies1 change
>@assistant-ui/x-buildutils@0.0.26update dependencies1 change
>create-assistant-ui@0.0.78assistant-ui@0.0.1151 change
Other1
assistant-ui@0.0.115
>heat-graph@0.0.18update dependencies1 change
Sep 3, 2026
40 releases
>@assistant-ui/ai-sdk@0.0.4keep cloud threads running across switches in AISDKThreads9 changes
>@assistant-ui/cloud-ai-sdk@0.1.37publish workspace dependencies as caret ranges so they dedupe3 changes
>@assistant-ui/core@0.3.17let a tool approval request describe itself and report its outcome39 changes
Features4
Fixes28
avoid duplicate external-store runtime publications
report lifecycle events from background thread runtimes
keep a frontend tool's pending
human interrupt when execution startsisolate model context update listener errors
keep suggestion state stable across equal configurations
Refactors3
Chores4
>@assistant-ui/eve@0.0.16project eve's input request onto the approval itself5 changes
Chores3
>@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
>@assistant-ui/react@0.15.18let a tool approval request describe itself and report its outcome15 changes
>@assistant-ui/react-a2a@0.2.33preserve zero-byte files when converting messages to A2A parts2 changes
>@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
diagnose malformed AG-UI events
diagnose malformed fields on accepted AG-UI events
keep unresolved tool calls pending after successful runs
reject state snapshots without a snapshot value
>@assistant-ui/react-devtools@1.2.17preserve readable model context when individual properties throw5 changes
Fixes3
>@assistant-ui/react-generative-ui@0.0.17bound a node whose has trap hides children from the pre-pass3 changes
>@assistant-ui/react-google-adk@0.0.28scope adapter refs to committed renders3 changes
Fixes2
>@assistant-ui/react-ink@0.0.41use terminal display columns for multiline text input movement6 changes
Fixes4
>@assistant-ui/react-langchain@0.0.29convert messages without a type or with non-array content instead of throwing4 changes
Fixes3
>@assistant-ui/react-langgraph@0.14.26keep runtime refs scoped to committed renders2 changes
>@assistant-ui/react-lexical@0.2.12peer ranges on the packages this workspace releases now track the release train1 change
Fixes1
>@assistant-ui/react-markdown@0.14.14stop bracket-delimited math from swallowing the rest of the message3 changes
>@assistant-ui/react-mcp@0.1.16publish workspace dependencies as caret ranges so they dedupe9 changes
Fixes8
>@assistant-ui/react-native@0.1.40re-export the approval display type and its helper3 changes
>@assistant-ui/react-o11y@0.0.43publish workspace dependencies as caret ranges so they dedupe1 change
>@assistant-ui/react-pi@0.0.21re-render usePiThreadState only when the selected slice changes3 changes
>@assistant-ui/react-streamdown@0.3.13stop bracket-delimited math from swallowing the rest of the message4 changes
Fixes3
>@assistant-ui/store@0.3.12allow string ids in the stale scope reporter8 changes
>assistant-cloud@0.1.43coordinate anonymous authentication across Cloud client instances6 changes
Fixes5
coordinate anonymous authentication across browser tabs
>assistant-stream@0.3.41prevent stale Redis producers from finalizing replacement streams4 changes
Fixes3
>assistant-ui@0.0.114scaffold lib/utils from the assistant-ui registry so new projects get cn8 changes
>create-assistant-ui@0.0.77publish workspace dependencies as caret ranges so they dedupe1 change
>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
Fixes1
tell a missing shim, a shim that failed to start, and a slow render apart
>13 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.14update dependencies1 change
>@assistant-ui/metro@0.0.12update dependencies1 change
>@assistant-ui/next@0.0.19update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.9@assistant-ui/ai-sdk@0.0.41 change
Other1
@assistant-ui/ai-sdk@0.0.4
>@assistant-ui/react-data-stream@0.12.29update dependencies2 changes
>@assistant-ui/react-hook-form@0.12.31update dependencies2 changes
>@assistant-ui/react-ink-markdown@0.0.40@assistant-ui/core@0.3.171 change
Other1
@assistant-ui/core@0.3.17
>@assistant-ui/react-opencode@0.2.22update dependencies2 changes
>@assistant-ui/tap@0.9.16update dependencies1 change
>@assistant-ui/vite@0.0.16update dependencies1 change
>@assistant-ui/x-buildutils@0.0.25update dependencies2 changes
>@assistant-ui/x-generative-compiler@0.0.16update dependencies1 change
>heat-graph@0.0.17update dependencies1 change
Aug 27, 2026
40 releases
>@assistant-ui/ai-sdk@0.0.3preserve settled output-denied tool calls when sending a new message8 changes
>@assistant-ui/cloud-ai-sdk@0.1.36preserve active chats when Cloud scope renders are interrupted8 changes
>@assistant-ui/core@0.3.16roll back AssistantFrame providers on registration, release, and disposal failures35 changes
Fixes19
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
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
preserve streamed RemoteThreadList titles across optimistic replays
never execute a frontend tool on a tool call that carries a provider approval
Refactors13
Docs2
>@assistant-ui/eve@0.0.15refetch the open thread in place through threads.reloadMainThread6 changes
Features1
refetch the open thread in place through
threads.reloadMainThreadFixes2
cancel runs through the eve 0.38+
cancel binding, with stop fallback for older hostspreserve 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
>@assistant-ui/mcp-docs-server@0.2.3validate template catalog entries before using them2 changes
>@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.
>@assistant-ui/react@0.15.17export createSuggestionAdapter and its option types from the distribution packages12 changes
>@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
load a history adapter that arrives after the first load
reject non-string task and context IDs when decoding A2A responses
apply runtime options after commit
Refactors4
>@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
apply runtime options after commit
Refactors5
>@assistant-ui/react-data-stream@0.12.28keep mid-stream cancellation out of onError3 changes
>@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
>@assistant-ui/react-google-adk@0.0.27keep every text and reasoning part of a multi-part ADK event8 changes
Refactors6
>@assistant-ui/react-ink@0.0.40export createSuggestionAdapter and its option types from the distribution packages3 changes
>@assistant-ui/react-langchain@0.0.28preserve reasoning fallback text when summary is empty8 changes
>@assistant-ui/react-langgraph@0.14.25preserve reasoning fallback text when summary is empty10 changes
Fixes3
preserve reasoning fallback text when summary is empty
skip malformed stream payloads instead of throwing
Refactors6
>@assistant-ui/react-lexical@0.2.11allow trigger popovers to override query matching3 changes
>@assistant-ui/react-markdown@0.14.13compare componentsByLanguage structurally so inline objects keep code-block memoization4 changes
Fixes2
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.
>@assistant-ui/react-mcp@0.1.15refresh MCP connections when connector settings change4 changes
Refactors2
>@assistant-ui/react-native@0.1.39export createSuggestionAdapter and its option types from the distribution packages3 changes
>@assistant-ui/react-opencode@0.2.21keep new OpenCode threads sendable while their session initializes5 changes
>@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 loopkeep the composer enabled while a new thread initializes
Refactors3
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.>@assistant-ui/react-streamdown@0.3.12bump streamdown to 2.6 so fenced code updates when streamed content changes3 changes
Fixes1
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.
>@assistant-ui/vite@0.0.15share the generative source predicate across bundler integrations2 changes
>@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.
>@assistant-ui/x-generative-compiler@0.0.15share the generative source predicate across bundler integrations2 changes
>assistant-cloud@0.1.42surface the response text when a JSON error body has no message6 changes
>assistant-stream@0.3.40encode file parts on the data stream12 changes
Fixes7
keep partial tool args parseable while a
\uXXXX escape is still streamingunstable_runPendingTools no longer re-executes tool calls that already have a result
TextStreamController.close no longer throws after the consumer cancels
Refactors4
build accumulated assistant messages through one part-append helper
>assistant-ui@0.0.113preserve CLI termination signals and child cleanup5 changes
>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
>11 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.13update dependencies1 change
>@assistant-ui/next@0.0.18update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.8@assistant-ui/ai-sdk@0.0.31 change
Other1
@assistant-ui/ai-sdk@0.0.3