Release history.

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

Sep 24, 2026

38 releases

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

Features5

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

Fixes11

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

Features9

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

Fixes60

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

Refactors1

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

Docs1

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

Fixes2

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

Fixes1

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

Features6

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

Fixes17

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

Features4

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

Fixes4

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

Features3

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

Fixes5

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

Fixes1

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

Fixes2

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

Fixes2

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

Fixes1

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

Features2

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

Fixes2

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

Fixes6

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

Fixes1

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

Features4

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

Fixes5

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

Fixes1

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

Features2

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

Fixes5

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

Features1

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

Fixes4

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

Fixes3

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

Chores1

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

Fixes1

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

Fixes1

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

Features5

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

Fixes7

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

Features1

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

Fixes3

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

Features3

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

Fixes4

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

Fixes11

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

Fixes1

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

Performance1

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

Fixes1

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

Fixes4

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

Chores1

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

Fixes1

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

Features1

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

Fixes8

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

Fixes5

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

Features1

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

Fixes11

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

Fixes1

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

Other1

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

Other1

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

Other1

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

Other1

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

Other1

assistant-ui@0.0.118
view on github

Sep 18, 2026

40 releases

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

Features2

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

Chores1

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

Features3

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

Fixes11

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

Chores1

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

Fixes2

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

Chores1

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

Fixes2

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

Chores1

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

Fixes4

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

Chores1

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

Fixes4

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

Chores1

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

Fixes4

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

Chores1

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

Fixes1

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

Chores1

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

Fixes3

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

Chores1

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

Fixes4

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

Chores1

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

Features1

unstable_createLangGraphStream forwards streamSubgraphs so subgraph events arrive through the helper

Fixes1

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

Chores1

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

Fixes1

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

Chores1

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

Fixes6

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

Docs1

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

Chores1

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

Features3

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

Chores1

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

Fixes5

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

Chores1

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

Fixes5

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

Chores1

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

Fixes1

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

Chores1

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

Docs1

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

Chores1

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

Fixes1

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

Chores3

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

Features1

message feedback accepts an optional comment and Assistant Cloud stores it

Fixes2

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

Docs1

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

Chores1

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

Fixes5

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

Chores1

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

Fixes2

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

Docs1

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

Chores1

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

Fixes1

support multibyte pathnames when deriving browser cache salts

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Other1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

update dependencies
view on github

Sep 15, 2026

25 releases

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

Features2

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

Fixes2

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

Refactors1

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

Features6

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

Fixes26

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

Refactors1

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

Fixes1

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

Features3

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

Fixes2

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

Fixes2

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

Fixes1

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

Fixes3

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

Features1

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

Fixes6

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

Fixes1

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

Features1

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

Fixes4

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

Fixes1

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

Features3

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

Fixes1

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

Features2

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

Fixes1

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

Fixes4

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

Fixes3

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

Features5

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

Fixes2

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

Fixes2

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

Fixes1

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

Features1

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

Features2

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

Fixes7

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

Docs2

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

Fixes10

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

Features1

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

Fixes1

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

Chores1

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

Fixes2

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

Other1

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

Other1

assistant-ui@0.0.116
view on github

Sep 11, 2026

40 releases

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

Fixes1

keep the selected skill when the prompt is empty

Chores1

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

Fixes6

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

Refactors1

adjust state during render where an effect only mirrored a prop

Docs1

say where route metadata lands on a thread message

Chores1

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

Features1

align the cloud SDK with Assistant Cloud 0.2

Fixes5

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

Refactors1

adjust state during render where an effect only mirrored a prop

Chores1

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

Features2

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

Fixes35

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

Refactors1

adjust state during render where an effect only mirrored a prop

Other1

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

Fixes1

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

Chores1

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

Fixes3

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

Chores1

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

Fixes1

isolate transformer settings between independently loaded Metro configs

Chores1

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

Features2

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

Fixes17

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

Refactors2

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

Chores1

update dependencies

Other1

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

Fixes2

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

Features1

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

Fixes7

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

Other1

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

Refactors1

adjust state during render where an effect only mirrored a prop

Chores1

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

Fixes8

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

Fixes5

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

Fixes2

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

Chores1

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

Fixes2

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

Refactors1

adjust state during render where an effect only mirrored a prop

Chores1

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

Fixes8

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

Chores1

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

Fixes6

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

Performance1

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

Fixes3

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

Refactors1

adjust state during render where an effect only mirrored a prop

Other1

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

Fixes2

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

Chores1

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

Fixes2

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

Chores1

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

Fixes5

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

Chores1

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

Fixes9

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

Performance2

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

Fixes9

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

Chores1

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

Fixes1

notify every Tap root subscriber when one throws

Chores1

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

Fixes1

refresh TypeScript path aliases after config changes

Chores1

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

Features3

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

Fixes3

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

Chores1

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

Fixes13

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

Performance1

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

Fixes5

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

Chores1

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

Fixes1

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

Fixes1

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

Performance1

run the text shimmer on the compositor without duplicate markup

Docs1

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

Chores1

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

Other1

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

Chores1

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

Chores1

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

Other1

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

Chores1

update dependencies

Other1

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

Chores1

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

Chores1

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

Other1

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

Chores1

update dependencies
view on github

Sep 3, 2026

40 releases

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

Features1

keep cloud threads running across switches in AISDKThreads

Fixes5

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

Chores3

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

Fixes1

publish workspace dependencies as caret ranges so they dedupe

Chores2

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

Features4

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

Fixes28

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

Refactors3

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

Chores4

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

Features1

project eve's input request onto the approval itself

Fixes1

keep thread refetches scoped to the committed Eve agent

Chores3

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

Features1

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

Chores2

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

Features3

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

Fixes5

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

Refactors3

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

Chores4

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

Fixes1

preserve zero-byte files when converting messages to A2A parts

Chores1

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

Features1

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

Fixes8

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

Refactors1

walk the nested tool-call tree through one shared traversal

Chores2

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

Fixes3

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

Chores2

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

Fixes1

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

Refactors1

cap the Teams carousel through the shared bounded copy

Chores1

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

Fixes2

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

Chores1

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

Fixes4

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

Chores2

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

Fixes3

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

Chores1

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

Fixes1

keep runtime refs scoped to committed renders

Chores1

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

Fixes1

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

Fixes3

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

Fixes8

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

Chores1

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

Features1

re-export the approval display type and its helper

Fixes1

drop zustand from core

Chores1

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

Fixes1

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

Fixes1

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

Chores2

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

Fixes3

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

Chores1

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

Features3

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

Fixes2

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

Chores3

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

Fixes5

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

Chores1

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

Fixes3

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

Refactors1

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

Features3

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

Fixes4

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

Chores1

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

Fixes1

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

Features1

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

Fixes1

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

Chores1

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

Chores1

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

Chores1

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

Other1

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

Chores2

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

Chores2

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

Other1

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

Chores2

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

Chores1

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

Chores1

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

Chores2

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

Chores1

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

Chores1

update dependencies
view on github

Aug 27, 2026

40 releases

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

Fixes4

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

Refactors2

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

Docs1

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

Chores1

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

Fixes5

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

Refactors2

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

Chores1

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

Fixes19

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

Refactors13

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

Docs2

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

Chores1

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

Features1

refetch the open thread in place through threads.reloadMainThread

Fixes2

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

Refactors2

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

Chores1

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

Fixes1

validate template catalog entries before using them

Chores1

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

Refactors2

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

Chores1

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

Features2

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

Fixes7

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

Chores3

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

Fixes7

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

Refactors4

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

Chores1

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

Fixes6

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

Refactors5

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

Chores1

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

Fixes1

keep mid-stream cancellation out of onError

Refactors1

share the runtime lifecycle callback invoker from core internal.

Chores1

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

Fixes3

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

Refactors2

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

Chores1

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

Fixes1

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

Refactors6

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

Chores1

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

Features1

export createSuggestionAdapter and its option types from the distribution packages

Fixes1

reset fallback elapsed time when each run starts

Chores1

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

Fixes2

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

Refactors5

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

Chores1

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

Fixes3

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

Refactors6

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

Chores1

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

Features1

allow trigger popovers to override query matching

Fixes1

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

Chores1

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

Fixes2

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

Refactors1

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

Chores1

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

Fixes1

refresh MCP connections when connector settings change

Refactors2

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

Chores1

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

Features1

export createSuggestionAdapter and its option types from the distribution packages

Fixes1

guard Enter-to-send behind running state and canSend

Chores1

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

Fixes2

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

Refactors2

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

Chores1

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

Fixes5

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

Refactors3

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

Chores1

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

Fixes1

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

Refactors1

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

Chores1

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

Refactors1

share the generative source predicate across bundler integrations

Chores1

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

Refactors1

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

Chores1

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

Refactors1

share the generative source predicate across bundler integrations

Chores1

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

Fixes3

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

Refactors2

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

Chores1

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

Fixes7

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

Refactors4

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

Chores1

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

Fixes2

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

Refactors1

consolidate the package manager resolver and project file iteration

Chores2

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

Fixes1

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

Chores1

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

Chores1

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

Other1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

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

Chores1

update dependencies
view on github

Aug 20, 2026

25 releases

>@assistant-ui/agent-launcher@0.1.12propagate child process termination signals1 change

Fixes1

propagate child process termination signals
view on github
>@assistant-ui/cloud-ai-sdk@0.1.35clear thread selections after refresh confirms their deletion2 changes

Fixes1

clear thread selections after refresh confirms their deletion

Chores1

update dependencies
view on github
>@assistant-ui/core@0.3.15propagate AssistantFrame tool cancellation across the frame boundary19 changes

Fixes14

propagate AssistantFrame tool cancellation across the frame boundary
prevent AssistantFrameProvider from ignoring a later explicit targetOrigin
keep DevTools updates flowing when a subscriber throws
preserve falsy assistant transport artifacts
load archived threads in the cloud thread list adapter
contain a synchronously throwing clipboard writer in useActionBarCopy
ExternalThread no longer reports an empty thread while it is loading
avoid ancestor scans when importing new messages
prevent cancelled external-store runs from resyncing after teardown
reset remote thread selection and cached records when the thread-list adapter is replaced
notify thread subscribers when a remote thread core is republished
traverse long message branches without recursive stack growth
settle aborted and superseded local runs without continuing them, while keeping approval pauses answerable after cancel
align tool-call status reasons with message status

Refactors1

collapse the two inert thread cores onto a shared base

Chores1

update dependencies

Other3

deprecate leftover Primitive.If and Empty wrappers on react-native and react-ink, and point them at AuiIf
Disconnect immediately when createVoiceSession receives an already-aborted signal.
Mark voice sessions cancelled when aborted or explicitly disconnected.
view on github
>@assistant-ui/react@0.15.16keep DevTools updates flowing when a subscriber throws9 changes

Fixes5

keep DevTools updates flowing when a subscriber throws
contain SandboxHost render failures after teardown
resync trigger popover cursor after selection
handle rejected asynchronous Markdown exports
drain unrevealed smooth text when a message completes before any frame

Docs1

document Escape-to-stop-speaking on ThreadPrimitive.Root

Chores2

delete the dead ensureBinding and useRuntimeState utilities
update dependencies

Other1

deprecate leftover Primitive.If and Empty wrappers on react-native and react-ink, and point them at AuiIf
view on github
>@assistant-ui/react-a2a@0.2.31include the first skipped SSE frame's reason in the empty-stream error1 change

Fixes1

include the first skipped SSE frame's reason in the empty-stream error
view on github
>@assistant-ui/react-ag-ui@0.0.56expose toAgUiMessages and fill a missing AG-UI message id3 changes

Features2

expose toAgUiMessages and fill a missing AG-UI message id
expose AG-UI tool_call interrupts through the core tool-approval seam

Chores1

update dependencies
view on github
>@assistant-ui/react-devtools@1.2.15contain failed DevTools conversation switches1 change

Fixes1

contain failed DevTools conversation switches
view on github
>@assistant-ui/react-hook-form@0.12.29validate assistant-triggered form submissions before reporting success1 change

Fixes1

validate assistant-triggered form submissions before reporting success
view on github
>@assistant-ui/react-ink@0.0.39let Pressable wrapper primitives accept the platform render-function children5 changes

Fixes3

let Pressable wrapper primitives accept the platform render-function children
expose the active state of thread-list items on react-native and react-ink
expose the active state of ThreadListNew on react-native and react-ink

Chores1

update dependencies

Other1

deprecate leftover Primitive.If and Empty wrappers on react-native and react-ink, and point them at AuiIf
view on github
>@assistant-ui/react-langchain@0.0.27render the first LangChain user message while thread initialization is pending2 changes

Fixes1

render the first LangChain user message while thread initialization is pending

Chores1

update dependencies
view on github
>@assistant-ui/react-lexical@0.2.10reparse an unedited composer draft when directive formatters register1 change

Fixes1

reparse an unedited composer draft when directive formatters register
view on github
>@assistant-ui/react-markdown@0.14.12preserve currency inside one- and two-backtick code spans that contain longer backtick runs1 change

Fixes1

preserve currency inside one- and two-backtick code spans that contain longer backtick runs
view on github
>@assistant-ui/react-native@0.1.38add composer quote and queue primitives8 changes

Features1

add composer quote and queue primitives

Fixes4

let Pressable wrapper primitives accept the platform render-function children
announce actionable react-native primitives as buttons
expose the active state of thread-list items on react-native and react-ink
expose the active state of ThreadListNew on react-native and react-ink

Chores2

drop two unreachable re-export shims from react-native
update dependencies

Other1

deprecate leftover Primitive.If and Empty wrappers on react-native and react-ink, and point them at AuiIf
view on github
>@assistant-ui/react-o11y@0.0.41flatten deeply nested observability traces without overflowing the call stack1 change

Fixes1

flatten deeply nested observability traces without overflowing the call stack
view on github
>@assistant-ui/react-pi@0.0.19validate event stream payloads before updating thread state2 changes

Fixes1

validate event stream payloads before updating thread state

Chores1

update dependencies
view on github
>@assistant-ui/react-streamdown@0.3.11preserve currency inside one- and two-backtick code spans that contain longer backtick runs1 change

Fixes1

preserve currency inside one- and two-backtick code spans that contain longer backtick runs
view on github
>@assistant-ui/tap@0.9.14flush state updates dispatched from subscriber notifications during flushTapSync1 change

Fixes1

flush state updates dispatched from subscriber notifications during flushTapSync
view on github
>assistant-stream@0.3.39decode AI SDK v6 tool-input/tool-output chunks in UIMessageStreamDecoder1 change

Fixes1

decode AI SDK v6 tool-input/tool-output chunks in UIMessageStreamDecoder
view on github
>7 maintenance releasesdependency updates and chores
>@assistant-ui/ai-sdk@0.0.2update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.7@assistant-ui/ai-sdk@0.0.21 change

Other1

@assistant-ui/ai-sdk@0.0.2
view on github
>@assistant-ui/react-ink-markdown@0.0.38@assistant-ui/core@0.3.151 change

Other1

@assistant-ui/core@0.3.15
view on github
>@assistant-ui/react-mcp@0.1.14@assistant-ui/core@0.3.151 change

Other1

@assistant-ui/core@0.3.15
view on github
>@assistant-ui/react-opencode@0.2.20update dependencies1 change

Chores1

update dependencies
view on github
>assistant-ui@0.0.112@assistant-ui/agent-launcher@0.1.121 change

Other1

@assistant-ui/agent-launcher@0.1.12
view on github
>create-assistant-ui@0.0.75assistant-ui@0.0.1121 change

Other1

assistant-ui@0.0.112
view on github

Aug 18, 2026

24 releases

>@assistant-ui/cloud-ai-sdk@0.1.34stop abandoned chats when the Cloud scope changes5 changes

Fixes2

stop abandoned chats when the Cloud scope changes
isolate Cloud synchronization error callbacks

Chores3

replace stale example model ids with gpt-5.6-luna
update dependencies
update dependencies
view on github
>@assistant-ui/core@0.3.14host assistant-cloud thread lists on AISDKThreads via RemoteThreadList55 changes

Features12

host assistant-cloud thread lists on AISDKThreads via RemoteThreadList
move useAssistantTransportRuntime into core/react
move useCloudThreadListRuntime into core/react and drop the unused react copy of the aui/v0 codec
expose InMemoryThreadList and its transform scopes from the store entry, with an onDelete callback and a fresh thread after deleting the last one
shared disabled predicates for the primitive layer on @assistant-ui/core/store/internal. the composer, action bar, branch picker, and suggestion disabled selectors previously lived as verbatim copies in each binding's hooks; they are now named exports (composerSendDisabled and friends) consumed by the react hooks and the vue and svelte bridges alike, so disabled semantics cannot drift between frameworks.
export runtimeAdapterTransformScopes from the store entry, so adapter packages can attach RuntimeAdapter's scope defaults to their own config entries.
add RemoteThreadListAdapter.unstable_useAdapters so the RemoteThreadList store entry can load per-thread history without rendering unstable_Provider
add a RemoteThreadList store entry so any AssistantClient host can run a remote thread list from a RemoteThreadListAdapter and a thread factory
add unstable_notifySessionReset so adapters with a resettable backing session can clear session-scoped tool-invocation state without run-cancel side effects; the eve reset now uses it instead of composing cancelRun with a hand-rolled session filter
host remote thread runtimeHooks as keyed tap resources on the list hook. useRemoteThreadListRuntime mounts one useResources host after each thread's unstable_Provider, so the first runtimeHook call already sees Provider adapters. AdapterSink only publishes those adapters. @assistant-ui/store/client exports useConfiguredAui and useAssistantContextProvider so that host can extend and provide a client the same way AuiProvider does in React.
new threads.selectionChanged event carrying threadId and previousThreadId; deprecate threadListItem.switchedTo/switchedAway in its favor. Un-deprecate the semantically meaningful events (thread.runStart, thread.runEnd, thread.initialize, composer.send, composer.attachmentAdd).
runtime suggestions can carry a display title and label

Fixes41

stabilize unstable_useAdapters results on both adapter faces and warn on an unkeyed history factory. the React host's synthesized provider now absorbs a fresh but shallow-equal adapters bag the same way the RemoteThreadList store entry does, reusing the store's useShallowStable primitive through its internal entry, and the store entry warns in development when a history adapter arrives while the thread factory is unkeyed, since switching threads would silently keep the first thread's history.
persist data message parts in aui/v0 cloud history
handle failed LocalRuntime user-message history writes without abandoning the run
report automatic thread title generation failures
report attachment removal failures without leaking unhandled rejections
isolate WebSpeech dictation listener errors and report async listener rejections from speech synthesis and voice sessions
handle rejected external-store callbacks
persist cloud history against the departing thread after a switch
derive thread composer canCancel from an in-flight run
snapshot composer role and run configuration before uploading attachments
route ThreadRuntime/ThreadListRuntime subscribe through the memoizing state binding, and give LazyMemoizeSubject the same identity guard ShallowMemoizeSubject has, so getState serves a stable identity between notifications. Note: ThreadRuntime.subscribe now only notifies when the shallow-compared ThreadState changed — composer edits no longer wake thread subscribers; observe them via runtime.composer.subscribe, matching every other runtime class.
generate the thread title as soon as the thread exists. the automatic title generation for a new thread fires when initialization resolves, concurrent with the first run, instead of at the first runEnd, so the sidebar stops showing "New Chat" for the whole first response and a thread abandoned mid-run no longer stays untitled forever. the title request carries the messages present at that moment, typically just the user message.
avoid trailing spaces when appending empty suggestions
paint the first message of a new thread before initialization resolves. the local core inserts and notifies before awaiting the initialization barrier, rolling the optimistic message back and rejecting with MessageNotSentError when the barrier fails, and the external-store core no longer holds onNew on it. behavior change for custom external-store adapters under a remote thread list: onNew and onEdit can now run before the thread record exists, so a dispatch that needs the remote identity must await threadListItem.initialize itself (the ai-sdk transport and langgraph already do, useStreamRuntime now does). appends that used to be silently dropped when the thread was stopped, unmounted, or switched away during the initialization wait now dispatch immediately instead; the invalidation guard still covers the tool-abort window. the queue path keeps the pre-enqueue barrier.
retain the message part children props in published declarations
switch away when remote thread unarchive fails
preserve archived thread state when unarchive fallback reseeds
refresh Cloud attachment uploads when the Cloud client changes
handle rejected dictation shutdowns
migrate interactables update-tool UIs across tools scope replacements and install pending ones once the scope appears
preserve metadata from every joined assistant message
wait for remote thread initialization before external-store appends
resynchronize lazy memoized state when connecting
discard pending appends when their thread runtime is replaced
gate queued external-store appends on thread initialization
ignore suggestions generated by superseded local runtime runs
keep duplicate model context registrations independent
isolate overlapping tool executions that reuse a toolCallId
notify every external thread-list subscriber when one listener throws
flush queued interactable writes through the outgoing persistence adapter, one full-state save at a time
notify every model context subscriber before rethrowing, and roll back a provider registration when its subscribe throws
retry remote thread initialization after a rejected append
model-context registrations follow the committed scope across structural replacements. The new useAssistantScopeEffect(scope, effect, deps) re-runs a registration when the scope's bound client is replaced (cleaning up against the old one first) while ignoring value updates, and the toolkit, runtime-adapter, interactables, and MCP registration sites now use it instead of registering once against a stable client ref.
isolate message queue subscriber errors
render system messages safely when editing components are omitted
resync a memoized thread snapshot when a subscriber connects, and load local history if the adapter arrives after the first load
notify every interactable model-context subscriber when one throws
notify every memoized subject subscriber when one throws
handle thread list action failures without unhandled rejections
clean up disconnected voice sessions
isolate voice volume subscriber failures

Styles1

apply oxfmt 0.63 formatting

Chores1

replace stale example model ids with gpt-5.6-luna
view on github
>@assistant-ui/eve@0.0.14expose runtime extras (error, session, events, reset) with accessor hooks4 changes

Features3

expose runtime extras (error, session, events, reset) with accessor hooks
adopt the eve 0.31+ session API (positional send, separate respond for HITL responses, cancel approval option) and raise the eve peer floor to >=0.32.0, validated against eve 0.37
add unstable_notifySessionReset so adapters with a resettable backing session can clear session-scoped tool-invocation state without run-cancel side effects; the eve reset now uses it instead of composing cancelRun with a hand-rolled session filter

Fixes1

settle eve text and reasoning parts to a complete part status once eve marks them done
view on github
>@assistant-ui/metro@0.0.10add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them1 change

Features1

add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them
view on github
>@assistant-ui/next@0.0.17add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them1 change

Features1

add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them
view on github
>@assistant-ui/react@0.15.15host assistant-cloud thread lists on AISDKThreads via RemoteThreadList23 changes

Features7

host assistant-cloud thread lists on AISDKThreads via RemoteThreadList
move useAssistantTransportRuntime into core/react
move useCloudThreadListRuntime into core/react and drop the unused react copy of the aui/v0 codec
add RemoteThreadListAdapter.unstable_useAdapters so the RemoteThreadList store entry can load per-thread history without rendering unstable_Provider
add a RemoteThreadList store entry so any AssistantClient host can run a remote thread list from a RemoteThreadListAdapter and a thread factory
new threads.selectionChanged event carrying threadId and previousThreadId; deprecate threadListItem.switchedTo/switchedAway in its favor. Un-deprecate the semantically meaningful events (thread.runStart, thread.runEnd, thread.initialize, composer.send, composer.attachmentAdd).
runtime suggestions can carry a display title and label

Fixes15

persist data message parts in aui/v0 cloud history
validate MCP App resource responses
dispose sandbox frames when bridge setup fails
await assistant transport response callbacks and cancel unfinished responses when they fail
keep bottom follow through a content-growth undershoot
refresh live completion results after their data source changes
keep MCP App error replies reliable when error callbacks throw
isolate MCP App notification callback errors
isolate assistant transport lifecycle callback failures
InMemoryThreadList restarts with a fresh thread when the last one is deleted, notifies the new onDelete callback, and applies deletes batch-safely; the export is now sourced from the core store entry
top-anchor turn clears skip turns that are still valid
preserve bottom follow through viewport clicks and cancel stale auto-scroll frames
keep Escape-to-stop-speaking active when message action bars are hidden by moving the shortcut to ThreadPrimitive.Root; custom compositions must mount the root to enable it
render system messages safely when editing components are omitted
handle synchronous live completion failures

Chores1

update dependencies
view on github
>@assistant-ui/react-a2a@0.2.30validate task push notification responses6 changes

Fixes5

validate task push notification responses
cancel invalid A2A stream responses
tolerate malformed A2A task content
report A2A message streams that end without events
validate successful task API responses before exposing them to runtimes

Chores1

update dependencies
view on github
>@assistant-ui/react-ai-sdk@1.4.6host assistant-cloud thread lists on AISDKThreads via RemoteThreadList4 changes

Features1

host assistant-cloud thread lists on AISDKThreads via RemoteThreadList

Refactors1

the package now re-exports @assistant-ui/ai-sdk. all existing imports keep working unchanged.

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-data-stream@0.12.27cancel response streams when response callbacks fail3 changes

Fixes1

cancel response streams when response callbacks fail

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-devtools@1.2.14sanitize circular collections and non-JSON primitives3 changes

Fixes2

sanitize circular collections and non-JSON primitives
sanitize invalid dates in inspected runtime values

Chores1

update dependencies
view on github
>@assistant-ui/react-generative-ui@0.0.15default untoned Teams alerts to info2 changes

Fixes1

default untoned Teams alerts to info

Docs1

name the slack, teams, and a2ui converter subpaths in the README
view on github
>@assistant-ui/react-markdown@0.14.11pass the raw fence language to custom highlighters instead of "unknown"1 change

Fixes1

pass the raw fence language to custom highlighters instead of "unknown"
view on github
>@assistant-ui/store@0.3.10aui.optional.<scope> resolves an unavailable scope to undefined instead of a throwing accessor, mirroring s.optional on the state side; the documented availability check moves off source != null11 changes

Features6

aui.optional.<scope> resolves an unavailable scope to undefined instead of a throwing accessor, mirroring s.optional on the state side; the documented availability check moves off source != null
hoist the shared binding utilities to the client entry. createClientFacade (stable client facade over a source) and createLastValidCache/createStaleReporter (by-index shrink guard with an injectable expiry scheduler) were duplicated per framework bridge; they now live on @assistant-ui/store/client so bridges cannot drift.
subscription-owned lifecycle for createAssistantClient. the handle now rides tap's mountOnSubscribe: scopes render lazily on first read, mount when the first subscriber attaches, and soft unmount one task after the last subscriber releases (effects clean up, state is retained, a later subscriber remounts the same scopes). state updates before the first subscriber throw; an imperative consumer without a reactive framework holds a no-op subscription. destroy remains the permanent teardown: synchronous while subscribers are attached; after the last release it defers to the soft unmount that release already scheduled. requires @assistant-ui/tap ^0.9.12.
hoist the viewport scroll math to the client entry. isViewportAtBottom, viewportOverflows, isUserScrollUp, and observeContentResize were vue-local; they now live on @assistant-ui/store/client so the svelte viewport consumes the same implementation.
host remote thread runtimeHooks as keyed tap resources on the list hook. useRemoteThreadListRuntime mounts one useResources host after each thread's unstable_Provider, so the first runtimeHook call already sees Provider adapters. AdapterSink only publishes those adapters. @assistant-ui/store/client exports useConfiguredAui and useAssistantContextProvider so that host can extend and provide a client the same way AuiProvider does in React.
new threads.selectionChanged event carrying threadId and previousThreadId; deprecate threadListItem.switchedTo/switchedAway in its favor. Un-deprecate the semantically meaningful events (thread.runStart, thread.runEnd, thread.initialize, composer.send, composer.attachmentAdd).

Fixes4

stabilize unstable_useAdapters results on both adapter faces and warn on an unkeyed history factory. the React host's synthesized provider now absorbs a fresh but shallow-equal adapters bag the same way the RemoteThreadList store entry does, reusing the store's useShallowStable primitive through its internal entry, and the store entry warns in development when a history adapter arrives while the thread factory is unkeyed, since switching threads would silently keep the first thread's history.
stop active chats only when their standalone client is destroyed
model-context registrations follow the committed scope across structural replacements. The new useAssistantScopeEffect(scope, effect, deps) re-runs a registration when the scope's bound client is replaced (cleaning up against the old one first) while ignoring value updates, and the toolkit, runtime-adapter, interactables, and MCP registration sites now use it instead of registering once against a stable client ref.
cache live config source reads between notifications so getConfig satisfies the useSyncExternalStore getSnapshot contract

Refactors1

the config path rides React's scheduler instead of a self-scheduled tap root
view on github
>@assistant-ui/tap@0.9.13reconcile effects at commit time so mount, update, and Activity reveal share one mechanism21 changes

Features6

reconcile effects at commit time so mount, update, and Activity reveal share one mechanism
useTapRoot falls through React for Suspense/ErrorBoundary support
hold the committed value when a scheduler-driven update suspends in useTapRoot; createTapRoot now reports initial-render suspension with a clear error
useReducer overloads for action-less reducers
the standalone shim gains jsx-runtime and jsx-dev-runtime entries plus module-scope forwardRef and memo, so react-coupled module graphs stay loadable under the react-less alias; rendering their JSX without real React still throws.
use(promise) suspends resource renders

Fixes10

deduplicate changelog records during StrictMode replay
rewind reducer cells through committed history so React replays from any mid-chain base reduce from the oracle state
keep the compiler memo cache across uncommitted render replays so a StrictMode double invoke observes one memoized instance
roll back compiler memo caches with resource versions
preserve reducer state when React replays a chain from a record's committed dispatch floor
discard the work-in-progress render when a resource render throws
restore application snapshots when a rewound replay is discarded, stop dispatch-before-mount from stranding replay history retention, and throw in development and test environments when a below-committed replay finds no committed history to rewind
export the full react surface the package dists import from both shims explicitly
useSyncExternalStore re-checks the snapshot after commits where the value or getSnapshot changed
useSyncExternalStore reads getServerSnapshot for every pre-mount render pass

Refactors1

add a shared scheduleTask for one-off deferred work instead of allocating single-purpose UpdateScheduler instances

Docs1

repitch the README around the hook-dispatch engine and its two use cases

Tests2

wait deterministically for scheduler flushes instead of racing setTimeout against MessageChannel
wait deterministically for the scheduleTask flush instead of racing setTimeout against MessageChannel

Chores1

update dependencies
view on github
>@assistant-ui/vite@0.0.14add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them1 change

Features1

add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them
view on github
>@assistant-ui/x-buildutils@0.0.23remap a package's own bare react imports to the react-free standalone-shim when it depends on tap without a react peer, so a reactless bridge's build output no longer imports React directly4 changes

Fixes2

remap a package's own bare react imports to the react-free standalone-shim when it depends on tap without a react peer, so a reactless bridge's build output no longer imports React directly
count direct react dependencies when selecting the tap shim target

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/x-generative-compiler@0.0.14add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them1 change

Features1

add a backendless compile option for apps without their own backend (e.g. cloud-hosted runs), keeping "use generative" frontend/human tool schemas and JSONGenerativeUI component-library schemas uploadable from the client instead of assuming the backend already knows them
view on github
>assistant-cloud@0.1.41scope anonymous refresh tokens by Cloud backend7 changes

Fixes6

scope anonymous refresh tokens by Cloud backend
validate file API responses before returning them to consumers
preserve anonymous identities when token refresh fails transiently
validate auth token responses
validate Cloud run stream response bodies and content types
validate thread, message, and run IDs returned by Cloud mutations

Chores1

update dependencies
view on github
>assistant-stream@0.3.38cancel invalid Gorp stream responses9 changes

Fixes8

cancel invalid Gorp stream responses
release merged stream child readers after completion and cancellation
await merged stream cleanup during cancellation
keep partial tool-call args parseable when a negative number is cut before its digits
isolate overlapping tool executions that reuse a toolCallId
cancel and release assistant message stream readers when iteration ends
release resumable producer readers after stream failures
prevent stale data from leaking into reacquired Redis streams

Chores1

update dependencies
view on github
>assistant-ui@0.0.111register the with-openui example in npx assistant-ui create now that @openuidev/react-headless widened its ai peer to ^6 || ^74 changes

Features1

register the with-openui example in npx assistant-ui create now that @openuidev/react-headless widened its ai peer to ^6 || ^7

Fixes1

avoid installing the incompatible legacy React UI package during upgrades

Chores2

replace stale example model ids with gpt-5.6-luna
update dependencies
view on github
>4 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.11update dependencies1 change

Chores1

update dependencies
view on github
>@assistant-ui/mcp-docs-server@0.2.2update dependencies2 changes

Chores2

update dependencies
update dependencies
view on github
>@assistant-ui/react-o11y@0.0.40@assistant-ui/tap@0.9.131 change

Other1

@assistant-ui/tap@0.9.13
view on github
>create-assistant-ui@0.0.74assistant-ui@0.0.1111 change

Other1

assistant-ui@0.0.111
view on github