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
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning.
telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.mark interim tool output as
isPreliminary so a tool that streams its result stays running until the final result lands, instead of reading as complete on the first chunk; react-pi flags live partialResult output and ai-sdk flags preliminary outputs, and the default tool fallback keeps the output a cancelled tool streamed before it was cut offFixes11
correct settled and failed tool-call arg conversion
>@assistant-ui/core@0.3.21useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXTPUBLICASSISTANTBASEURL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecated71 changes
Features9
useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXT_PUBLIC_ASSISTANT_BASE_URL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecatedLangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning.
telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.mark interim tool output as
isPreliminary so a tool that streams its result stays running until the final result lands, instead of reading as complete on the first chunk; react-pi flags live partialResult output and ai-sdk flags preliminary outputs, and the default tool fallback keeps the output a cancelled tool streamed before it was cut offa tool UI can record what the user did on its tool call with
unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore themFixes60
useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol
core
the assistant transport runtime sends a new thread's remote id with its first request and keeps its default thread when the host re-renders; a resume never creates a thread, and a new thread whose first run is not an append still gets its title
type the assistant transport request body that
prepareSendCommandsRequest receives; its fields are no longer unknown in @assistant-ui/react, and threadId is an optional string, absent when a resume has no remote id, instead of string | nullcore
feedback submitted mid-run no longer strands the message, drops its history write, or keeps invoking the adapter.
core
core
keep a dictation session that a composer subscriber starts while send cancels the previous one
core
core
a message deleted through an external store's
onDelete stays deleted when the host re-renders or the thread reloads before onDelete resolves, instead of coming back as a branchcore
an external store runtime that switches threads through
adapters.threadList.threadId builds the new thread from the current store, so the previous thread's messages no longer show up as a branch of the new one and a tool call in the new thread's history no longer executes on switchcore
keep nested required fields in interactable update tool schemas, so the model sends a nested object whole instead of a partial one that the shallow merge would store as is
core
AssistantFrameProvider.dispose withdraws the frame's tools from the parent hostcore
persist a tool result added after its message settled through the history adapter's
update, and report a cloud run only from the write that first settles its message; Assistant Cloud still rejects rewriting a message that later turns followcore
leave the message repository unchanged when it rejects an update or a delete
core
settle a tool call only on its final result in the tool tracker, aui/v0 persistence and
addToolResultcorrect settled and failed tool-call arg conversion
core
clear a tool call's status when a human-input request made from streamCall is resumed or aborted, so the runtime stops reporting it as running or waiting; an execute that keeps running after its request is aborted now shows as executing instead of waiting
core
log a failed controlled
threadId switch in useRemoteThreadListRuntime instead of dropping it, as the RemoteThreadList client already doesreject archiving, deleting or detaching the thread the user is in when its first
initialize fails, instead of looping forever and freezing the tabcore
cancelling an assistant transport run after its response body was fully received calls
onCancel and clears the queued commands, instead of leaving them pending and sending them with the next runcore
an assistant transport request no longer carries the
parentId of a message that a cancel or a failed run discardeddrop a voice transcript or typed turn whose thread runtime is replaced or unmounted before it commits. one held for a pending history load no longer waits forever, so a typed turn's
append resolves, and a typed turn still sending is no longer written to the replaced runtime's history or handed to its onVoiceTranscripthold a voice transcript or typed turn until a pending thread history load settles, so it is committed onto the loaded thread instead of a branch the import leaves behind. A thread switched before the load ends drops the waiting message rather than committing it under the wrong thread
Refactors1
Docs1
core
describe which optimistic messages eviction removes and when completed optimistic updates stop being replayed
>@assistant-ui/eve@0.0.19emit declarations from one TypeScript program so two builds of the same commit produce the same .d.ts2 changes
>@assistant-ui/metro@0.0.15stop @assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run1 change
Fixes1
stop
@assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run>@assistant-ui/react@0.15.22useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXTPUBLICASSISTANTBASEURL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecated23 changes
Features6
useAssistantTransportRuntime accepts cloud: Assistant Cloud backs the thread list and every request carries the cloud thread id; without cloud, NEXT_PUBLIC_ASSISTANT_BASE_URL selects Assistant Cloud, as it does for useLocalRuntime. adapters.history, which this runtime never read, is deprecateda tool UI can record what the user did on its tool call with
unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore themFixes17
type the assistant transport request body that
prepareSendCommandsRequest receives; its fields are no longer unknown in @assistant-ui/react, and threadId is an optional string, absent when a resume has no remote id, instead of string | nullevery distribution re-exports the same shared surface from
@assistant-ui/core. @assistant-ui/react-ink gains ReadonlyThreadProvider, ToolCallMessagePartStatus, groupPartByType, GroupByContext, VoiceSessionState, the external store runtime (useExternalStoreRuntime, useExternalMessageConverter, their adapters and options), the message queue, the tool approval types, the generative UI renderer and the cloud thread list hooks; @assistant-ui/react-native gains VoiceSessionState, the cloud thread list hooks, the generative UI renderer and the runtime state and adapter types the web package already carried; @assistant-ui/react gains MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, TitleGenerationAdapter, createSimpleTitleAdapter and ChainOfThoughtPartByIndexProvider.react
react
expose feedback submission state to assistive technology
react
keep the selection toolbar in sync after a right-click, so a context menu that swallows the mouseup no longer leaves it showing (and quoting) the previous selection
Use successful Standard Schema output for tool execution and model output. Keep the original arguments for validation errors and stored tool calls.
>@assistant-ui/react-a2a@0.2.37keep finalized voice transcripts in the thread and store them through a configured history adapter; the agent does not receive them, since A2A has no way to record a message without asking the agent to act on it8 changes
Features4
react-a2a
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning.
telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.Fixes4
>@assistant-ui/react-ag-ui@0.0.61keep finalized voice transcripts in the thread, send them with the next run, and store them through a configured history adapter8 changes
Features3
react-ag-ui
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning.
telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.Fixes5
send an attachment whose data URL is not base64 (such as
data:text/plain,hello or a percent-encoded SVG) as an AG-UI url source instead of a data source that claims to hold base64, so the agent receives the file intact and it is no longer wrapped in a second data URL when a snapshot is restored.react-ag-ui
keep a finished answer complete when Stop lands before the response closes
>@assistant-ui/react-ai-sdk@1.4.13ai (7.0.101 or newer) is now a peer dependency, so the adapter shares the app's ai and upgrading it no longer splits assistant-cloud into two copies whose AssistantCloud types reject each other1 change
Fixes1
>@assistant-ui/react-data-stream@0.12.33useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol2 changes
Fixes2
useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol
useCloudRuntime posts the thread messages as they are, so a run after a frontend tool result no longer fails with 400
>@assistant-ui/react-devtools@1.2.21show an Error's name, message and stack instead of an empty object2 changes
>@assistant-ui/react-generative-ui@0.0.21the A2UI converter follows v0.9 and v1.0 child references, so a spec Card keeps its content and a spec Button takes its label from its child Text (any other child, such as an Icon, renders inside the button); a button action written as { event: { name, context } } dispatches like the bare { name, context } form; with keepUnknownComponents, a kept Modal or Tabs keeps the components it references as children, and a child reference the converter cannot follow is reported as a warning1 change
Fixes1
the A2UI converter follows v0.9 and v1.0
child references, so a spec Card keeps its content and a spec Button takes its label from its child Text (any other child, such as an Icon, renders inside the button); a button action written as { event: { name, context } } dispatches like the bare { name, context } form; with keepUnknownComponents, a kept Modal or Tabs keeps the components it references as children, and a child reference the converter cannot follow is reported as a warning>@assistant-ui/react-generative-ui@0.0.20surfaceToOperations turns a reduced A2UI surface into operations that replay it, convertSurfaceToUISpec can keep unknown components with keepUnknownComponents, and Icon, List, ChoicePicker and DateTimeInput now render4 changes
>@assistant-ui/react-google-adk@0.0.32useAdkSubmitAuth answers the pending adkrequestcredential call with its auth config carrying the credential as exchangedAuthCredential, the reply ADK resumes the tool on; an id that is not a pending request throws6 changes
Fixes6
>@assistant-ui/react-hook-form@0.12.35settle assistant form submissions when their form unmounts1 change
>@assistant-ui/react-ink@0.0.45show a message with uploading attachments in the thread while it is being sent9 changes
Features4
a tool UI can record what the user did on its tool call with
unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore themFixes5
every distribution re-exports the same shared surface from
@assistant-ui/core. @assistant-ui/react-ink gains ReadonlyThreadProvider, ToolCallMessagePartStatus, groupPartByType, GroupByContext, VoiceSessionState, the external store runtime (useExternalStoreRuntime, useExternalMessageConverter, their adapters and options), the message queue, the tool approval types, the generative UI renderer and the cloud thread list hooks; @assistant-ui/react-native gains VoiceSessionState, the cloud thread list hooks, the generative UI renderer and the runtime state and adapter types the web package already carried; @assistant-ui/react gains MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, TitleGenerationAdapter, createSimpleTitleAdapter and ChainOfThoughtPartByIndexProvider.react-ink
export the
ToolCallTiming type that @assistant-ui/react and @assistant-ui/react-native already export>@assistant-ui/react-ink-markdown@0.0.44render Shiki tokens that use short hex colors1 change
>@assistant-ui/react-langchain@0.0.33keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; an edit or regenerate after them forks from before them and sends them again7 changes
>@assistant-ui/react-langgraph@0.14.30keep finalized voice transcripts in the thread and send them to the graph with the next run, which writes them to the thread state; @assistant-ui/react-langchain/converter gains getMessageModality, which reads the additionalkwargs.modality a transcript carries5 changes
>@assistant-ui/react-lexical@0.2.15allow Lexical composer submission while a queued run is active.4 changes
Fixes3
build the composer with
LexicalExtensionComposer instead of the deprecated LexicalComposer, with PlainTextExtension and HistoryExtension replacing the legacy plugins. The editable textbox now carries aria-placeholder, and the visual placeholder is hidden from assistive technology.declare
lexical and the @lexical/* packages as peer dependencies, so the app resolves one copy of lexical and custom plugins passed as LexicalComposerInput children find the composer context. npm, pnpm and bun install the peers on their own; a yarn app adds lexical, @lexical/react, @lexical/utils, @lexical/history and @lexical/plain-text itselfChores1
migrate to Lexical 0.51
>@assistant-ui/react-markdown@0.14.17end quoted code fences and $$ blocks where their own blockquote ends, so a deeper > line no longer closes one early and a blank or shallower line no longer leaves one open1 change
Fixes1
markdown
end quoted code fences and
$$ blocks where their own blockquote ends, so a deeper > line no longer closes one early and a blank or shallower line no longer leaves one open>@assistant-ui/react-mcp@0.1.20ignore authorization URLs from stale MCP OAuth connections1 change
>@assistant-ui/react-native@0.1.44show a message with uploading attachments in the thread while it is being sent12 changes
Features5
a tool UI can record what the user did on its tool call with
unstable_recordInteraction, kept on the part as unstable_interactions and stored in cloud history; the answer to a human input request is recorded once the runtime accepts it, the local runtime persists records and keeps them out of model input, external stores receive them through unstable_onRecordToolInteraction, and readonly threads ignore themFixes7
expose the current thread to assistive technology on react-native-web
every distribution re-exports the same shared surface from
@assistant-ui/core. @assistant-ui/react-ink gains ReadonlyThreadProvider, ToolCallMessagePartStatus, groupPartByType, GroupByContext, VoiceSessionState, the external store runtime (useExternalStoreRuntime, useExternalMessageConverter, their adapters and options), the message queue, the tool approval types, the generative UI renderer and the cloud thread list hooks; @assistant-ui/react-native gains VoiceSessionState, the cloud thread list hooks, the generative UI renderer and the runtime state and adapter types the web package already carried; @assistant-ui/react gains MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, TitleGenerationAdapter, createSimpleTitleAdapter and ChainOfThoughtPartByIndexProvider.expose feedback submission state to assistive technology
>@assistant-ui/react-opencode@0.2.25useOpenCodeRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to an OpenCode session; a cloud thread without a session opens empty and rejects a send instead of asking OpenCode for the cloud id4 changes
>@assistant-ui/react-pi@0.0.25usePiRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to a Pi thread; deleting a Pi thread that no longer exists succeeds, in the node client and in createPiHttpClient, which reads a 404 as gone, so its cloud thread can always be deleted; a cloud thread without a Pi thread opens empty and rejects a send instead of asking the Pi server for the cloud id7 changes
Features3
usePiRuntime accepts cloud: Assistant Cloud backs the thread list, and each cloud thread maps to a Pi thread; deleting a Pi thread that no longer exists succeeds, in the node client and in createPiHttpClient, which reads a 404 as gone, so its cloud thread can always be deleted; a cloud thread without a Pi thread opens empty and rejects a send instead of asking the Pi server for the cloud idmark interim tool output as
isPreliminary so a tool that streams its result stays running until the final result lands, instead of reading as complete on the first chunk; react-pi flags live partialResult output and ai-sdk flags preliminary outputs, and the default tool fallback keeps the output a cancelled tool streamed before it was cut offFixes4
raise the
@assistant-ui/react peer range to ^0.15.22, the release that added the approval.dismissible field Pi select, input and editor requests usedrop user content parts of a type the projection does not handle instead of turning them into text parts without text
>@assistant-ui/react-streamdown@0.3.17fail the build when emitted output imports an undeclared package11 changes
Fixes11
react-streamdown
stop an unmatched mid-line
$$ from pairing with later display mathmarkdown
end quoted code fences and
$$ blocks where their own blockquote ends, so a deeper > line no longer closes one early and a blank or shallower line no longer leaves one openstop nested raw pre markup from causing quadratic rerender comparisons
react-streamdown
end streaming
$$ math where remark-math ends it, so a $$ inside a display block no longer leaks escapes into the math or appends a stray closerkeep the streaming escapes out of every fence and
$$ block, including one that opens right after a paragraph line or nests in a list item, and settle the paragraph a block interrupts, so ~ inside code and math is no longer escaped and a dangling ** before a fence no longer lands its closer after the closing markerreact-streamdown
stop the streaming repair from escaping text inside raw HTML blocks
>@assistant-ui/store@0.3.15stop a nested useChatRuntime chat when its own component unmounts, stop registering AISDKThreads cloud threads on the client destroy signal, and stop fast refresh from aborting the destroy signal of useAui(config) hosts2 changes
Fixes1
>@assistant-ui/tap@0.9.19bail out of a no-op state dispatch from an effect under a React host instead of re-rendering on every commit1 change
Fixes1
>@assistant-ui/x-buildutils@0.0.29fail the build when emitted output imports an undeclared package5 changes
Fixes4
>@assistant-ui/x-generative-compiler@0.0.19stop @assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run1 change
Fixes1
stop
@assistant-ui/metro from breaking native bundles in Expo apps that use reanimated, by moving its Babel dependencies and those of @assistant-ui/x-generative-compiler back to Babel 7, the major Metro and Expo run>assistant-cloud@0.2.3LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning. telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.9 changes
Features1
LangGraph, LangChain, Google ADK and custom external store runtimes under a cloud thread list now store a copy of their settled messages in Assistant Cloud by default, keyed by their backend's message ids, so the dashboard shows the transcript and feedback can rate it; tool interactions recorded in their tool UIs are kept on the copy instead of throwing. a message the cloud refuses, such as one over the size limit, is skipped with a console warning and the later messages are still copied, while a thread it refuses as a whole (deleted, its end user past the plan cap, or refused twice before any message was accepted) stops being copied with one warning.
telemetry: { messages: false } on the AssistantCloud client keeps the copy out, and tool interactions then throw as before. a stored user message counts its end user toward the project's monthly active users.Fixes8
useCloudRuntime sends the active Cloud thread id, including on the first run of a new thread, and pins the ui message stream protocol
cloud
expose caller-supplied cost, attributes, and root span fields on run reports
cloud
>assistant-stream@0.3.45createResumableStreamContext no longer reports onFinalize for a producer whose finalize was fenced out by a newer acquisition of the same stream. ResumableStreamStore.finalize now resolves false when it finalized nothing (the bundled in-memory and Redis stores return it; a custom store that resolves without a value is still taken to have finalized), the context skips the hook on false, and a producer whose "done" finalize did not apply is reported through onError with a ResumableStreamError("missing").5 changes
Fixes5
createResumableStreamContext no longer reports onFinalize for a producer whose finalize was fenced out by a newer acquisition of the same stream. ResumableStreamStore.finalize now resolves false when it finalized nothing (the bundled in-memory and Redis stores return it; a custom store that resolves without a value is still taken to have finalized), the context skips the hook on false, and a producer whose "done" finalize did not apply is reported through onError with a ResumableStreamError("missing").surface preliminary tool outputs instead of dropping them
Use successful Standard Schema output for tool execution and model output. Keep the original arguments for validation errors and stored tool calls.
>assistant-ui@0.0.118assistant-ui agent now opens Claude Code with the maintained skills from assistant-ui/skills, fetched at a pinned commit into the user cache, instead of a plugin bundled in the package. the bundled copy had drifted from the AI SDK it teaches (#7486) and is removed from the package.12 changes
Features1
assistant-ui agent now opens Claude Code with the maintained skills from assistant-ui/skills, fetched at a pinned commit into the user cache, instead of a plugin bundled in the package. the bundled copy had drifted from the AI SDK it teaches (#7486) and is removed from the package.Fixes11
make the assistant-ui agent skill scaffold a working AI SDK 7 chat route, matching the files the ai-sdk-quick-start registry preset installs
>heat-graph@0.0.21keep the last day of the range in a midnight-DST timezone1 change
>5 maintenance releasesdependency updates and chores
>@assistant-ui/next@0.0.23@assistant-ui/x-generative-compiler@0.0.191 change
Other1
@assistant-ui/x-generative-compiler@0.0.19
>@assistant-ui/react-a2a@0.2.38@assistant-ui/react-generative-ui@0.0.211 change
Other1
@assistant-ui/react-generative-ui@0.0.21
>@assistant-ui/react-ag-ui@0.0.62@assistant-ui/react-generative-ui@0.0.211 change
Other1
@assistant-ui/react-generative-ui@0.0.21
>@assistant-ui/vite@0.0.19@assistant-ui/x-generative-compiler@0.0.191 change
Other1
@assistant-ui/x-generative-compiler@0.0.19
>create-assistant-ui@0.0.81assistant-ui@0.0.1181 change
Other1
assistant-ui@0.0.118
Sep 18, 2026
40 releases
>@assistant-ui/ai-sdk@0.0.7voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run3 changes
Features2
voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run
>@assistant-ui/core@0.3.20voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run15 changes
Features3
voice transcripts persist into the useChat messages through onVoiceTranscript. the external message converter keeps a voice transcript as its own message instead of joining it into the neighbouring assistant message, and the history adapter stores a transcript as it lands instead of waiting for the next text run
Fixes11
keep a cloud aui/v0 thread loadable when one stored row is malformed. an unreadable part, attachment or nested tool call message is dropped on its own, a row that does not hold a message at all is dropped together with the thread below it, and nesting is bounded so a deeply nested row cannot overflow the stack
Generative UI rendering no longer throws when a node's
children is not an array; a string or node renders as the only child, and any other value is skipped with the malformed-node warning.preserve voice modality when loading local storage history
core
>@assistant-ui/react@0.15.21resume bottom following when auto-scroll is enabled at runtime3 changes
>@assistant-ui/react-a2a@0.2.36ignore stale cancellation responses and read the cancel target before the local abort3 changes
>@assistant-ui/react-ag-ui@0.0.60preserve tool result modelContent and stored artifact in addToolResult5 changes
Fixes4
react-ag-ui
react-ag-ui
>@assistant-ui/react-generative-ui@0.0.19exclude controls disabled by an ancestor fieldset from form payloads5 changes
Fixes4
keep package imports external in
aui-build output without resolving them, and fail the build when anything from node_modules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/node_modules.>@assistant-ui/react-google-adk@0.0.31give a function call that arrives without args an empty args object, so an args-less call no longer renders as a tool call with undefined args and argsText5 changes
Fixes4
list only unanswered requests in
useAdkToolConfirmations, useAdkAuthRequests and session snapshots, derived from the adk_request_confirmation and adk_request_credential calls in the thread, so a session load no longer lists settled requests, a later send no longer drops unanswered ones, and a confirmation no longer appears twice. an auth request's toolCallId is now the id of its adk_request_credential call, the only id ADK accepts a credential reply on (it was the gated tool call's id with ADK JS), and authConfig is also read from camelCase args.stop
artifacts.load from rejecting fileData artifacts and snake_case artifact responsesskip media parts missing
mimeType, data, or fileUri instead of failing the session load or rendering them with an undefined source>@assistant-ui/react-hook-form@0.12.34resolve type errors in the react-pi tool result projection and the react-hook-form owning form lookup2 changes
>@assistant-ui/react-ink@0.0.44restart fallback elapsed time when the running message changes4 changes
Fixes3
>@assistant-ui/react-langchain@0.0.32allow unresolved subagent namespace discovery to retry5 changes
Fixes4
>@assistant-ui/react-langgraph@0.14.29unstablecreateLangGraphStream forwards streamSubgraphs so subgraph events arrive through the helper3 changes
>@assistant-ui/react-markdown@0.14.16stop preprocess from restarting smooth streaming when a rewrite changes already-revealed text2 changes
>@assistant-ui/react-mcp@0.1.19resolve the remaining type errors in the elicitation content defaults, the elicitation answer paths and the OpenCode shadow part reconciliation8 changes
>@assistant-ui/react-native@0.1.43action bar and branch picker children receive disabled, and ActionBarPrimitive.Speak and StopSpeaking arrive on react native.4 changes
Features3
>@assistant-ui/react-opencode@0.2.24resolve the remaining type errors in the elicitation content defaults, the elicitation answer paths and the OpenCode shadow part reconciliation6 changes
Fixes5
>@assistant-ui/react-pi@0.0.24answer pi select, input and editor requests through the tool call's approval6 changes
Fixes5
>@assistant-ui/react-streamdown@0.3.16keep settled code blocks from re-rendering when streamdown re-renders their block2 changes
>@assistant-ui/store@0.3.14teach AuiConfig and the provider config prop instead of the deprecated useAui({...}) overload in docblocks and the agent skill2 changes
>@assistant-ui/x-buildutils@0.0.28keep package imports external in aui-build output without resolving them, and fail the build when anything from nodemodules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/nodemodules.4 changes
Fixes1
keep package imports external in
aui-build output without resolving them, and fail the build when anything from node_modules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/node_modules.Chores3
>assistant-cloud@0.2.2message feedback accepts an optional comment and Assistant Cloud stores it5 changes
Features1
Fixes2
Docs1
enable the AI SDK OpenTelemetry integration in the README telemetry recipe, so a route that follows it emits spans
>assistant-stream@0.3.44cancel merged assistant streams when a transform is cancelled or errors, including child streams waiting for their next chunk.6 changes
Fixes5
assistant-stream
normalize configurable JSON Schema converters to draft-07
keep package imports external in
aui-build output without resolving them, and fail the build when anything from node_modules would be bundled. assistant-stream and @assistant-ui/react-generative-ui now depend on @types/json-schema instead of shipping a copy of it under dist/node_modules.>assistant-ui@0.0.117create the project under --cwd when assistant-ui init runs without a project name, instead of under the caller's directory4 changes
>safe-content-frame@0.0.31support multibyte pathnames when deriving browser cache salts2 changes
>17 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.16update dependencies1 change
>@assistant-ui/eve@0.0.18update dependencies1 change
>@assistant-ui/mcp-docs-server@0.3.2update dependencies1 change
>@assistant-ui/metro@0.0.14update dependencies1 change
>@assistant-ui/next@0.0.22update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.12@assistant-ui/ai-sdk@0.0.71 change
Other1
@assistant-ui/ai-sdk@0.0.7
>@assistant-ui/react-data-stream@0.12.32update dependencies1 change
>@assistant-ui/react-devtools@1.2.20update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.43update dependencies1 change
>@assistant-ui/react-lexical@0.2.14update dependencies1 change
>@assistant-ui/react-o11y@0.0.45update dependencies1 change
>@assistant-ui/react-syntax-highlighter@0.14.6update dependencies1 change
>@assistant-ui/tap@0.9.18update dependencies1 change
>@assistant-ui/vite@0.0.18update dependencies1 change
>@assistant-ui/x-generative-compiler@0.0.18update dependencies1 change
>create-assistant-ui@0.0.80update dependencies1 change
>heat-graph@0.0.20update dependencies1 change
Sep 15, 2026
25 releases
>@assistant-ui/ai-sdk@0.0.6register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project5 changes
Features2
Fixes2
AISDKThreads chats call the latest onToolCall, onData, onFinish, onError and sendAutomaticallyWhen passed to it, including on a thread still streaming in the background, instead of the ones captured when the thread was createdreport the error, error code and first token time of a run persisted in the
ai-sdk/v6 format; the runtime hands the cloud history adapter the thread message it persisted, whose status and timing complete a report the stored message cannot carry. the failed message's status error is now the AssistantError shape ({ code, message }, the code being the AI SDK error's code or its name) instead of the message string, and first_token_ms reads firstTokenTime as the duration the runtime records instead of subtracting the stream start, which also repairs the aui/v0 pathRefactors1
the cloud history adapter reports runs and engagement events through
assistant-cloud's reporters and reads AI SDK runs through assistant-cloud/ai-sdk; steps are now reported for a run with a single step as well, an error is reported once per run, a stored ai-sdk/v6 run that produced tool calls without text reads completed instead of incomplete, and a run whose message carries a cancelled, length or content filter finish reports incomplete instead of completed>@assistant-ui/core@0.3.19add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript33 changes
Features6
add an opt-in cache to
convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcriptFixes26
exclude cleared attachments from a message when its upload finishes
report the error, error code and first token time of a run persisted in the
ai-sdk/v6 format; the runtime hands the cloud history adapter the thread message it persisted, whose status and timing complete a report the stored message cannot carry. the failed message's status error is now the AssistantError shape ({ code, message }, the code being the AI SDK error's code or its name) instead of the message string, and first_token_ms reads firstTokenTime as the duration the runtime records instead of subtracting the stream start, which also repairs the aui/v0 pathRefactors1
the cloud history adapter reports runs and engagement events through
assistant-cloud's reporters and reads AI SDK runs through assistant-cloud/ai-sdk; steps are now reported for a run with a single step as well, an error is reported once per run, a stored ai-sdk/v6 run that produced tool calls without text reads completed instead of incomplete, and a run whose message carries a cancelled, length or content filter finish reports incomplete instead of completed>@assistant-ui/next@0.0.21avoid treating similarly named user modules as internal redirects1 change
>@assistant-ui/react@0.15.20add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript5 changes
Features3
add an opt-in cache to
convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcriptFixes2
>@assistant-ui/react-a2a@0.2.35wait for agent capabilities before choosing the first A2A send method2 changes
>@assistant-ui/react-data-stream@0.12.31preserve source message IDs when generic conversion drops or splits messages1 change
Fixes1
>@assistant-ui/react-devtools@1.2.19read the first token time as the duration the runtime records instead of subtracting the stream start, which always clamped it to zero3 changes
Fixes3
>@assistant-ui/react-google-adk@0.0.30register the package as an integration on the assistant-cloud client so the cloud can tell which packages talk to a project7 changes
Features1
Fixes6
drop long-running tool calls the client already answered from
useAdkLongRunningToolIds and session snapshotskeep unanswered long-running tool calls in
useAdkLongRunningToolIds across sends, so answering one gate no longer lets the next text message auto-cancel the others. AdkEventAccumulator takes the pending ids to seed as an optional second constructor argument.>@assistant-ui/react-hook-form@0.12.33submit the actual form owner of registered controls, including controls with an explicit form attribute.1 change
Fixes1
>@assistant-ui/react-ink@0.0.43derive thread.tasks from tool calls that carry nested conversations, with a task scope5 changes
>@assistant-ui/react-ink-markdown@0.0.42avoid reformatting fixed-width or unwrapped Markdown on terminal resize while keeping automatic-width output responsive.1 change
Fixes1
>@assistant-ui/react-langchain@0.0.31add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript4 changes
Features3
add an opt-in cache to
convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcripttask subagent transcripts ride on ToolCallMessagePart.messages so MessagePartPrimitive.Messages renders them and thread.tasks lists them; the peer floors move to @langchain/react ^1.0.20 and @langchain/langgraph-sdk ^1.9.20, and react-langgraph follows the sdk floor because it depends on react-langchain
Fixes1
task subagent transcripts include the generative UI parts pushed for their own messages
>@assistant-ui/react-langgraph@0.14.28task subagent transcripts ride on ToolCallMessagePart.messages so MessagePartPrimitive.Messages renders them and thread.tasks lists them; the peer floors move to @langchain/react ^1.0.20 and @langchain/langgraph-sdk ^1.9.20, and react-langgraph follows the sdk floor because it depends on react-langchain3 changes
Features2
task subagent transcripts ride on ToolCallMessagePart.messages so MessagePartPrimitive.Messages renders them and thread.tasks lists them; the peer floors move to @langchain/react ^1.0.20 and @langchain/langgraph-sdk ^1.9.20, and react-langgraph follows the sdk floor because it depends on react-langchain
Fixes1
>@assistant-ui/react-lexical@0.2.13skip rebuilding unchanged drafts on selection-only Lexical updates while preserving deferred parser retries4 changes
Fixes4
>@assistant-ui/react-mcp@0.1.18isolate custom MCP servers across storage scopes and fence writes after load failures3 changes
Fixes3
>@assistant-ui/react-native@0.1.42add an opt-in cache to convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstablecreateExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcript7 changes
Features5
add an opt-in cache to
convertExternalMessages so a source message that has not changed keeps its ThreadMessage object across calls (createExternalMessageConversionCache, exported as unstable_createExternalMessageConversionCache from react and react-native); react-langchain uses it for subagent transcripts, so a streamed token no longer rebuilds every message of the nested transcriptFixes2
>@assistant-ui/react-pi@0.0.23preserve image content returned by Pi tools2 changes
>@assistant-ui/react-streamdown@0.3.15keep remend escapes out of settled ~~~ fences and $$ math blocks1 change
Fixes1
keep remend escapes out of settled
~~~ fences and $$ math blocks>@assistant-ui/x-buildutils@0.0.27define AUIPACKAGEVERSION from the built package's version in both builds and ship its ambient declaration through the shared tsconfig base1 change
Features1
>assistant-cloud@0.2.1add CloudRunReporter, CloudEngagementReporter, RunMessageTelemetry and the assistant-cloud/ai-sdk entry (aiSDKV6FormatAdapter, extractAISDKRunTelemetry), which lists ai as an optional peer and needs no runtime from it11 changes
Features2
Fixes7
keep an append's remote ID in
CloudMessagePersistence when a history load returns the same message IDDocs2
>assistant-stream@0.3.43a producer whose stream expired no longer writes into or finalizes the stream a later run starts under the same id. createResumableStreamContext now passes a lease from the new optional ResumableStreamStore.acquireLease to append and finalize; the bundled in-memory and Redis stores implement it, and custom stores opt in by implementing it.10 changes
Fixes10
a producer whose stream expired no longer writes into or finalizes the stream a later
run starts under the same id. createResumableStreamContext now passes a lease from the new optional ResumableStreamStore.acquireLease to append and finalize; the bundled in-memory and Redis stores implement it, and custom stores opt in by implementing it.a stale Redis append or delete no longer changes a stream that was reacquired between the store's metadata read and its write. the node-redis and ioredis adapters now run append, finalize, and delete as scripts through
EVALSHA, so the Redis endpoint must allow EVALSHA as well as EVAL. a custom RedisLikeClient gets the same protection by implementing the optional appendIfUnchanged and deleteIfUnchanged.strict
TextStreamController.append drops deltas instead of throwing after the consumer cancels the streamthe tool-call
argsText controller honors the strict flag passed to createAssistantStreamControllermark tool arguments complete when their text stream ends
>assistant-ui@0.0.116install the native registry components in React Native projects, and scaffold create --native from the registry instead of copying local elements3 changes
>heat-graph@0.0.19accept full ISO timestamps in heat graph date inputs2 changes
>2 maintenance releasesdependency updates and chores
>@assistant-ui/react-ai-sdk@1.4.11@assistant-ui/ai-sdk@0.0.61 change
Other1
@assistant-ui/ai-sdk@0.0.6
>create-assistant-ui@0.0.79assistant-ui@0.0.1161 change
Other1
assistant-ui@0.0.116
Sep 11, 2026
40 releases
>@assistant-ui/agent-launcher@0.1.15keep the selected skill when the prompt is empty2 changes
Fixes1
keep the selected skill when the prompt is empty
>@assistant-ui/ai-sdk@0.0.5show approval request reasons as fallback prompts9 changes
Fixes6
preserve the AI SDK's approval request metadata during message conversion instead of rebuilding the approval from a fixed field list
>@assistant-ui/cloud-ai-sdk@0.2.0Minoralign the cloud SDK with Assistant Cloud 0.28 changes
Fixes5
order thread title generations against each other and against renames
>@assistant-ui/core@0.3.18align the cloud SDK with Assistant Cloud 0.239 changes
Features2
Fixes35
keep an explicit null parent when a thread appends a message
keep discarded composer text out of dictation results after reset
complete assistant voice messages when the first transcript is final
keep the selected head aligned when relinking a message
use the original file to select the adapter for attachment removal when contentType is absent
keep separate tool calls when their IDs are absent
match attachment extensions against the complete filename suffix, so
.tar.gz accepts backup.tar.gz and .png rejects extensionless png.export parent messages before their children
keep the selected nested branch when an ancestor is selected again
keep the initialization task on a new thread promoted to regular
preserve attachment removal errors in the tap composer
keep the existing thread title when title generation produces no text, and stop a streaming generation from briefly blanking it
preserve a manual thread rename that lands while automatic title generation is in flight. the rename is reasserted through the adapter once the generated run has persisted its own title, so the typed title survives on the server as well as in the list.
keep ancestor branch pointers current after relinking a message
return the requested thread's metadata from getById when another thread is selected
isolate external-store thread records from prototype-named ids
core
keep the thread list and report the error when a load fails. failed loads previously looked like an empty thread list; thread list state now exposes
loadError, clears it when a later load starts, and in browsers retries a failed load once when the window comes back online or the document becomes visible again. React Native has neither event, so it keeps recovering through reload.Notify thread-list subscribers when only the loading state changes.
skip adapter cleanup for complete edit attachments
Other1
Handle prototype-named tool and remote thread keys safely.
>@assistant-ui/eve@0.0.17show resumed session history at its real times, not "just now"2 changes
Fixes1
show resumed session history at its real times, not "just now"
>@assistant-ui/mcp-docs-server@0.3.1close the docs proxy and its HTTP transport once stdin can no longer deliver messages, whether it reaches EOF or is destroyed4 changes
Fixes3
close the docs proxy and its HTTP transport once stdin can no longer deliver messages, whether it reaches EOF or is destroyed
keep clean proxy shutdowns from logging transport errors
>@assistant-ui/metro@0.0.13isolate transformer settings between independently loaded Metro configs2 changes
>@assistant-ui/react@0.15.19align the cloud SDK with Assistant Cloud 0.223 changes
Features2
Fixes17
honor message part text render elements with an explicit component.
notify controlled and uncontrolled modal owners when a run opens a closed modal
keep parent IDs separate from ungrouped message parts
ignore flat mention items when categories is an empty list
support WebMCP tool cancellation below AbortSignal.any's browser floor and with a non-native caller signal
apply tool allowlist changes to mounted MCP app frames
preserve the requested scroll behavior across nested viewport providers
render message part text inside the supplied render element.
reject quote selections that cross excluded content
forward every part renderer option through
MessagePrimitive.Parts, so data renderers survive ChainOfThoughtRefactors2
Other1
Handle prototype-named tool and remote thread keys safely.
>@assistant-ui/react-a2a@0.2.34validate nested message part fields2 changes
>@assistant-ui/react-ag-ui@0.0.59add resumeTranscript to control what a resume run sends9 changes
>@assistant-ui/react-devtools@1.2.18adjust state during render where an effect only mirrored a prop2 changes
>@assistant-ui/react-generative-ui@0.0.18preserve prototype-named A2UI action context fields8 changes
Fixes8
>@assistant-ui/react-google-adk@0.0.29abort superseded Google ADK streams even when interactive cancellation is disabled.5 changes
Fixes5
>@assistant-ui/react-ink@0.0.42forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders3 changes
Fixes2
>@assistant-ui/react-langchain@0.0.30harden the shared content block converter against non-spec blocks4 changes
Fixes2
>@assistant-ui/react-langgraph@0.14.27merge indexed text blocks by content index and skip empty text openers9 changes
Fixes8
merge indexed text blocks by content index and skip empty text openers
keep supported content blocks from continuation chunks
accept tool results with empty names when the tool call IDs match
accept a tool name that arrives after the first tool-call chunk.
>@assistant-ui/react-markdown@0.14.15compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup7 changes
Fixes6
read tilde fences in the currency walker, and end an unclosed fence with its blockquote instead of the rest of the input
read a backtick run as a fence only when it starts a line, so an info string no longer closes a fenced block
preserve rehype plugin markup in code blocks and pass the complete code text to code headers in both Markdown renderers.
preserve currency and math inside indented tilde fences
>@assistant-ui/react-mcp@0.1.17scope persisted authentication to MCP server URLs; a credential saved for a different URL is never sent and is reported on lastError, existing OAuth credentials require reconnecting once, and host-persisted bearer records must include serverUrl5 changes
Fixes3
keep static OAuth client updates out of the dynamic registration cache
Other1
Scope persisted OAuth tokens and client registrations to their originating client. Credentials stored by earlier versions carry no client identity, so they are dropped on first load and every existing OAuth connection re-authenticates once.
>@assistant-ui/react-native@0.1.41forward every part renderer option through MessagePrimitive.Parts, so configured generative UI renders and data renderers survive ChainOfThought3 changes
Fixes2
forward every part renderer option through
MessagePrimitive.Parts, so configured generative UI renders and data renderers survive ChainOfThoughtsupply derived status to registered tool and data renderers
>@assistant-ui/react-opencode@0.2.23preserve OpenCode messages whose IDs match object prototype properties3 changes
>@assistant-ui/react-pi@0.0.22carry compaction and retry activity on thread snapshots6 changes
Fixes5
carry compaction and retry activity on thread snapshots
keep the effective Pi thinking level for thread subscribers
recover missed messages and thread status from a snapshot after a live-only stream disconnects.
clear retry and compaction flags when a snapshot reports a settled thread
>@assistant-ui/react-streamdown@0.3.14compare arrays with indexed loops so sparse-array holes cannot read as equal; a sparse suggestions list now compacts to a dense one before it reaches the per-suggestion lookup11 changes
Fixes9
read tilde fences in the currency walker, and end an unclosed fence with its blockquote instead of the rest of the input
read a backtick run as a fence only when it starts a line, so an info string no longer closes a fenced block
update memoized children when their text or props change
preserve text escapes and custom handler changes in earlier paragraphs without completing or deleting their unfinished Markdown.
preserve rehype plugin markup in code blocks and pass the complete code text to code headers in both Markdown renderers.
render user
pre and code components through the code adapter without remounting the code block on every render, and keep the element of a raw <pre> that has no code childpreserve currency and math inside indented tilde fences
Performance2
>@assistant-ui/store@0.3.13preserve client list order for numeric string keys10 changes
Fixes9
preserve client list order for numeric string keys
add and retrieve client resources with prototype-named keys
expire falsy values in the last-valid cache and preserve cached null and undefined during the stale window.
commit hosted tap resources before descendant layout effects
detect values that replace empty positions in sparse arrays during shallow comparison
keep replacement event listeners after a stale unsubscribe call.
>@assistant-ui/tap@0.9.17notify every Tap root subscriber when one throws2 changes
>@assistant-ui/x-generative-compiler@0.0.17refresh TypeScript path aliases after config changes2 changes
>assistant-cloud@0.2.0Minoralign the cloud SDK with Assistant Cloud 0.27 changes
>assistant-stream@0.3.42prevent tool execution after cancellation during asynchronous schema validation14 changes
Fixes13
prevent tool execution after cancellation during asynchronous schema validation
use final message usage for token counts when the stream reports a positive output total
remove nested required constraints from partial schemas without properties
keep provider messages in backend tool responses and completed pending tool calls
complete aborted in-memory stream reads without throwing a stored error after the last buffered chunk.
Keep stored replay bytes separate from producer and consumer buffers.
keep the first SSE event when a text stream starts with a byte-order mark
supply the draft-07 target to Standard JSON Schema converters so tool parameter conversion does not throw on missing options
keep positive exponents incomplete until all argument digits arrive
keep the JSON quotes on a successful tool input that is a plain string, so a tool with a string input schema executes instead of failing with a parameter parsing error
>assistant-ui@0.0.115keep relative add directories anchored to the caller6 changes
Fixes5
keep relative add directories anchored to the caller
>safe-content-frame@0.0.30clear load timeout timers after SafeContentFrame settles1 change
>tw-shimmer@0.4.13gate the text clip behind the same capability check as the gradient, so shimmer text stays readable below the browser support floor3 changes
>10 maintenance releasesdependency updates and chores
>@assistant-ui/next@0.0.20update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.10@assistant-ui/ai-sdk@0.0.51 change
Other1
@assistant-ui/ai-sdk@0.0.5
>@assistant-ui/react-data-stream@0.12.30update dependencies1 change
>@assistant-ui/react-hook-form@0.12.32update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.41@assistant-ui/core@0.3.181 change
Other1
@assistant-ui/core@0.3.18
>@assistant-ui/react-o11y@0.0.44update dependencies2 changes
>@assistant-ui/vite@0.0.17update dependencies1 change
>@assistant-ui/x-buildutils@0.0.26update dependencies1 change
>create-assistant-ui@0.0.78assistant-ui@0.0.1151 change
Other1
assistant-ui@0.0.115
>heat-graph@0.0.18update dependencies1 change
Sep 3, 2026
40 releases
>@assistant-ui/ai-sdk@0.0.4keep cloud threads running across switches in AISDKThreads9 changes
>@assistant-ui/cloud-ai-sdk@0.1.37publish workspace dependencies as caret ranges so they dedupe3 changes
>@assistant-ui/core@0.3.17let a tool approval request describe itself and report its outcome39 changes
Features4
Fixes28
avoid duplicate external-store runtime publications
report lifecycle events from background thread runtimes
keep a frontend tool's pending
human interrupt when execution startsisolate model context update listener errors
keep suggestion state stable across equal configurations
Refactors3
Chores4
>@assistant-ui/eve@0.0.16project eve's input request onto the approval itself5 changes
Chores3
>@assistant-ui/mcp-docs-server@0.3.0Minorproxy the hosted assistant-ui mcp endpoint instead of bundling a docs snapshot. the stdio server now forwards to the hosted tool set, and the programmatic server export is removed3 changes
Features1
>@assistant-ui/react@0.15.18let a tool approval request describe itself and report its outcome15 changes
>@assistant-ui/react-a2a@0.2.33preserve zero-byte files when converting messages to A2A parts2 changes
>@assistant-ui/react-ag-ui@0.0.58model the AG-UI subagent protocol. SUBAGENTSTARTED / SUBAGENTFINISHED / SUBAGENTERROR are parsed instead of falling through to RAW and being dropped, subagentRunId is read off the events that carry it, and each subagent run is grouped into one nested assistant message attached to its spawning tool call as ToolCallMessagePart.messages. a subagent with no reachable spawning call renders in the parent thread rather than being dropped.12 changes
Features1
model the AG-UI subagent protocol.
SUBAGENT_STARTED / SUBAGENT_FINISHED / SUBAGENT_ERROR are parsed instead of falling through to RAW and being dropped, subagentRunId is read off the events that carry it, and each subagent run is grouped into one nested assistant message attached to its spawning tool call as ToolCallMessagePart.messages. a subagent with no reachable spawning call renders in the parent thread rather than being dropped.Fixes8
diagnose malformed AG-UI events
diagnose malformed fields on accepted AG-UI events
keep unresolved tool calls pending after successful runs
reject state snapshots without a snapshot value
>@assistant-ui/react-devtools@1.2.17preserve readable model context when individual properties throw5 changes
Fixes3
>@assistant-ui/react-generative-ui@0.0.17bound a node whose has trap hides children from the pre-pass3 changes
>@assistant-ui/react-google-adk@0.0.28scope adapter refs to committed renders3 changes
Fixes2
>@assistant-ui/react-ink@0.0.41use terminal display columns for multiline text input movement6 changes
Fixes4
>@assistant-ui/react-langchain@0.0.29convert messages without a type or with non-array content instead of throwing4 changes
Fixes3
>@assistant-ui/react-langgraph@0.14.26keep runtime refs scoped to committed renders2 changes
>@assistant-ui/react-lexical@0.2.12peer ranges on the packages this workspace releases now track the release train1 change
Fixes1
>@assistant-ui/react-markdown@0.14.14stop bracket-delimited math from swallowing the rest of the message3 changes
>@assistant-ui/react-mcp@0.1.16publish workspace dependencies as caret ranges so they dedupe9 changes
Fixes8
>@assistant-ui/react-native@0.1.40re-export the approval display type and its helper3 changes
>@assistant-ui/react-o11y@0.0.43publish workspace dependencies as caret ranges so they dedupe1 change
>@assistant-ui/react-pi@0.0.21re-render usePiThreadState only when the selected slice changes3 changes
>@assistant-ui/react-streamdown@0.3.13stop bracket-delimited math from swallowing the rest of the message4 changes
Fixes3
>@assistant-ui/store@0.3.12allow string ids in the stale scope reporter8 changes
>assistant-cloud@0.1.43coordinate anonymous authentication across Cloud client instances6 changes
Fixes5
coordinate anonymous authentication across browser tabs
>assistant-stream@0.3.41prevent stale Redis producers from finalizing replacement streams4 changes
Fixes3
>assistant-ui@0.0.114scaffold lib/utils from the assistant-ui registry so new projects get cn8 changes
>create-assistant-ui@0.0.77publish workspace dependencies as caret ranges so they dedupe1 change
>safe-content-frame@0.0.29name why a frame failed to load with a code on the rejection, narrowed by the new isShimLoadError guard2 changes
Features1
Fixes1
tell a missing shim, a shim that failed to start, and a slow render apart
>13 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.14update dependencies1 change
>@assistant-ui/metro@0.0.12update dependencies1 change
>@assistant-ui/next@0.0.19update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.9@assistant-ui/ai-sdk@0.0.41 change
Other1
@assistant-ui/ai-sdk@0.0.4
>@assistant-ui/react-data-stream@0.12.29update dependencies2 changes
>@assistant-ui/react-hook-form@0.12.31update dependencies2 changes
>@assistant-ui/react-ink-markdown@0.0.40@assistant-ui/core@0.3.171 change
Other1
@assistant-ui/core@0.3.17
>@assistant-ui/react-opencode@0.2.22update dependencies2 changes
>@assistant-ui/tap@0.9.16update dependencies1 change
>@assistant-ui/vite@0.0.16update dependencies1 change
>@assistant-ui/x-buildutils@0.0.25update dependencies2 changes
>@assistant-ui/x-generative-compiler@0.0.16update dependencies1 change
>heat-graph@0.0.17update dependencies1 change
Aug 27, 2026
40 releases
>@assistant-ui/ai-sdk@0.0.3preserve settled output-denied tool calls when sending a new message8 changes
>@assistant-ui/cloud-ai-sdk@0.1.36preserve active chats when Cloud scope renders are interrupted8 changes
>@assistant-ui/core@0.3.16roll back AssistantFrame providers on registration, release, and disposal failures35 changes
Fixes19
derive requires-action for pending and interrupted tool calls in the external-store convertMessage path; messages with unresolved tool calls now report requires-action instead of complete
type MCP app metadata in ThreadMessageLike tool calls
derive requires-action for pending and interrupted tool calls when importing messages into the repository, and resume local runs after approving an imported pending approval
preserve generated thread titles across overlapping optimistic updates
preserve streamed RemoteThreadList titles across optimistic replays
never execute a frontend tool on a tool call that carries a provider approval
Refactors13
Docs2
>@assistant-ui/eve@0.0.15refetch the open thread in place through threads.reloadMainThread6 changes
Features1
refetch the open thread in place through
threads.reloadMainThreadFixes2
cancel runs through the eve 0.38+
cancel binding, with stop fallback for older hostspreserve HITL input-request prompt and display mode; answer free-form requests with the response text instead of approve, and never submit a response eve cannot record as an answer to the request it names
Refactors2
>@assistant-ui/mcp-docs-server@0.2.3validate template catalog entries before using them2 changes
>@assistant-ui/metro@0.0.11derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.3 changes
Refactors2
derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.
>@assistant-ui/react@0.15.17export createSuggestionAdapter and its option types from the distribution packages12 changes
>@assistant-ui/react-a2a@0.2.32keep the server-assigned contextId across re-renders. switching threads aborts the in-flight run and fires onCancel12 changes
Fixes7
load a history adapter that arrives after the first load
reject non-string task and context IDs when decoding A2A responses
apply runtime options after commit
Refactors4
>@assistant-ui/react-ag-ui@0.0.57omit empty text parts from streamed snapshots12 changes
Fixes6
omit empty text parts from streamed snapshots
load a history adapter that arrives after the first load
apply runtime options after commit
Refactors5
>@assistant-ui/react-data-stream@0.12.28keep mid-stream cancellation out of onError3 changes
>@assistant-ui/react-generative-ui@0.0.16allow ListViewItem actions to fire from the row trigger6 changes
Fixes3
allow ListViewItem actions to fire from the row trigger
bound outbound prop arrays by index before conversion
bound the Slack decoder and the spec pre-pass by index so a replaced slice or Symbol.species cannot defeat their caps
Refactors2
share one contiguous-run helper and one element predicate across the converters
share one spec-bounding pre-pass between the Slack and Teams converters
>@assistant-ui/react-google-adk@0.0.27keep every text and reasoning part of a multi-part ADK event8 changes
Refactors6
>@assistant-ui/react-ink@0.0.40export createSuggestionAdapter and its option types from the distribution packages3 changes
>@assistant-ui/react-langchain@0.0.28preserve reasoning fallback text when summary is empty8 changes
>@assistant-ui/react-langgraph@0.14.25preserve reasoning fallback text when summary is empty10 changes
Fixes3
preserve reasoning fallback text when summary is empty
skip malformed stream payloads instead of throwing
Refactors6
>@assistant-ui/react-lexical@0.2.11allow trigger popovers to override query matching3 changes
>@assistant-ui/react-markdown@0.14.13compare componentsByLanguage structurally so inline objects keep code-block memoization4 changes
Fixes2
Refactors1
single-source the code-fence contract on a react-markdown subpath. the CodeHeader/SyntaxHighlighter prop types, the by-language override entry, and the language-class parser now live in @assistant-ui/react-markdown/code-fence; react-streamdown re-exports the types from there instead of keeping structurally compatible copies. @types/hast moves to dependencies in both packages so the published declarations reference hast by name instead of a broken store-relative path.
>@assistant-ui/react-mcp@0.1.15refresh MCP connections when connector settings change4 changes
Refactors2
>@assistant-ui/react-native@0.1.39export createSuggestionAdapter and its option types from the distribution packages3 changes
>@assistant-ui/react-opencode@0.2.21keep new OpenCode threads sendable while their session initializes5 changes
>@assistant-ui/react-pi@0.0.20resolve the schema dependency in published declarations9 changes
Fixes5
resolve the schema dependency in published declarations
allow allocating selectors in
usePiThreadState without an external-store render loopkeep the composer enabled while a new thread initializes
Refactors3
subscribe the Pi runtime to stable controller snapshots instead of a version counter. a
PiThreadControllerLike implementation must now return reference-stable values from getState (or the new optional getStateSnapshot) and getMessageRepository, since the React bindings read them as useSyncExternalStore snapshots.>@assistant-ui/react-streamdown@0.3.12bump streamdown to 2.6 so fenced code updates when streamed content changes3 changes
Fixes1
Refactors1
single-source the code-fence contract on a react-markdown subpath. the CodeHeader/SyntaxHighlighter prop types, the by-language override entry, and the language-class parser now live in @assistant-ui/react-markdown/code-fence; react-streamdown re-exports the types from there instead of keeping structurally compatible copies. @types/hast moves to dependencies in both packages so the published declarations reference hast by name instead of a broken store-relative path.
>@assistant-ui/vite@0.0.15share the generative source predicate across bundler integrations2 changes
>@assistant-ui/x-buildutils@0.0.24derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.2 changes
Refactors1
derive a bundled commonjs build mode from the exports map, and drop metro's private tsdown config. a package whose exports targets are .cjs files now builds as a bundled cjs/node artifact with declared dependencies external and workspace devDependencies inlined; metro's dist is byte-identical to what its per-package config produced.
>@assistant-ui/x-generative-compiler@0.0.15share the generative source predicate across bundler integrations2 changes
>assistant-cloud@0.1.42surface the response text when a JSON error body has no message6 changes
>assistant-stream@0.3.40encode file parts on the data stream12 changes
Fixes7
keep partial tool args parseable while a
\uXXXX escape is still streamingunstable_runPendingTools no longer re-executes tool calls that already have a result
TextStreamController.close no longer throws after the consumer cancels
Refactors4
build accumulated assistant messages through one part-append helper
>assistant-ui@0.0.113preserve CLI termination signals and child cleanup5 changes
>create-assistant-ui@0.0.76propagate termination signals to the spawned CLI. cancelling now exits by the signal (130 for SIGINT, 143 for SIGTERM) instead of reporting success, so a cancelled scaffold no longer looks like a completed one to CI.1 change
Fixes1
>11 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.13update dependencies1 change
>@assistant-ui/next@0.0.18update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.8@assistant-ui/ai-sdk@0.0.31 change
Other1
@assistant-ui/ai-sdk@0.0.3
>@assistant-ui/react-devtools@1.2.16update dependencies1 change
>@assistant-ui/react-hook-form@0.12.30update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.39update dependencies1 change
>@assistant-ui/react-o11y@0.0.42update dependencies1 change
>@assistant-ui/store@0.3.11update dependencies1 change
>@assistant-ui/tap@0.9.15update dependencies1 change
>heat-graph@0.0.16update dependencies1 change
>safe-content-frame@0.0.28update dependencies1 change
Aug 20, 2026
25 releases
>@assistant-ui/agent-launcher@0.1.12propagate child process termination signals1 change
>@assistant-ui/cloud-ai-sdk@0.1.35clear thread selections after refresh confirms their deletion2 changes
>@assistant-ui/core@0.3.15propagate AssistantFrame tool cancellation across the frame boundary19 changes
Fixes14
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 loadingavoid ancestor scans when importing new messages
align tool-call status reasons with message status
Other3
Mark voice sessions cancelled when aborted or explicitly disconnected.
>@assistant-ui/react@0.15.16keep DevTools updates flowing when a subscriber throws9 changes
Fixes5
resync trigger popover cursor after selection
drain unrevealed smooth text when a message completes before any frame
Docs1
document Escape-to-stop-speaking on ThreadPrimitive.Root
Chores2
Other1
>@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
>@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>@assistant-ui/react-devtools@1.2.15contain failed DevTools conversation switches1 change
>@assistant-ui/react-hook-form@0.12.29validate assistant-triggered form submissions before reporting success1 change
>@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
Other1
>@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
>@assistant-ui/react-lexical@0.2.10reparse an unedited composer draft when directive formatters register1 change
>@assistant-ui/react-markdown@0.14.12preserve currency inside one- and two-backtick code spans that contain longer backtick runs1 change
Fixes1
>@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
Other1
>@assistant-ui/react-o11y@0.0.41flatten deeply nested observability traces without overflowing the call stack1 change
Fixes1
>@assistant-ui/react-pi@0.0.19validate event stream payloads before updating thread state2 changes
>@assistant-ui/react-streamdown@0.3.11preserve currency inside one- and two-backtick code spans that contain longer backtick runs1 change
Fixes1
>@assistant-ui/tap@0.9.14flush state updates dispatched from subscriber notifications during flushTapSync1 change
Fixes1
>assistant-stream@0.3.39decode AI SDK v6 tool-input/tool-output chunks in UIMessageStreamDecoder1 change
Fixes1
>7 maintenance releasesdependency updates and chores
>@assistant-ui/ai-sdk@0.0.2update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.7@assistant-ui/ai-sdk@0.0.21 change
Other1
@assistant-ui/ai-sdk@0.0.2
>@assistant-ui/react-ink-markdown@0.0.38@assistant-ui/core@0.3.151 change
Other1
@assistant-ui/core@0.3.15
>@assistant-ui/react-mcp@0.1.14@assistant-ui/core@0.3.151 change
Other1
@assistant-ui/core@0.3.15
>@assistant-ui/react-opencode@0.2.20update dependencies1 change
>assistant-ui@0.0.112@assistant-ui/agent-launcher@0.1.121 change
Other1
@assistant-ui/agent-launcher@0.1.12
>create-assistant-ui@0.0.75assistant-ui@0.0.1121 change
Other1
assistant-ui@0.0.112
Aug 18, 2026
24 releases
>@assistant-ui/cloud-ai-sdk@0.1.34stop abandoned chats when the Cloud scope changes5 changes
>@assistant-ui/core@0.3.14host assistant-cloud thread lists on AISDKThreads via RemoteThreadList55 changes
Features12
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.
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.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 cloud history against the departing thread after a switch
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
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
keep duplicate model context registrations independent
isolate overlapping tool executions that reuse a toolCallId
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.render system messages safely when editing components are omitted
isolate voice volume subscriber failures
>@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
Fixes1
settle eve text and reasoning parts to a complete part status once eve marks them done
>@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
>@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
>@assistant-ui/react@0.15.15host assistant-cloud thread lists on AISDKThreads via RemoteThreadList23 changes
Features7
runtime suggestions can carry a display title and label
Fixes15
isolate MCP App notification callback errors
preserve bottom follow through viewport clicks and cancel stale auto-scroll frames
render system messages safely when editing components are omitted
>@assistant-ui/react-a2a@0.2.30validate task push notification responses6 changes
Fixes5
>@assistant-ui/react-ai-sdk@1.4.6host assistant-cloud thread lists on AISDKThreads via RemoteThreadList4 changes
>@assistant-ui/react-data-stream@0.12.27cancel response streams when response callbacks fail3 changes
>@assistant-ui/react-devtools@1.2.14sanitize circular collections and non-JSON primitives3 changes
>@assistant-ui/react-generative-ui@0.0.15default untoned Teams alerts to info2 changes
Fixes1
default untoned Teams alerts to info
>@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"
>@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
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.
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.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.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.Refactors1
>@assistant-ui/tap@0.9.13reconcile effects at commit time so mount, update, and Activity reveal share one mechanism21 changes
Features6
Fixes10
deduplicate changelog records during StrictMode replay
roll back compiler memo caches with resource versions
preserve reducer state when React replays a chain from a record's committed dispatch floor
Refactors1
Tests2
>@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
>@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
>@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
>assistant-cloud@0.1.41scope anonymous refresh tokens by Cloud backend7 changes
Fixes6
validate auth token responses
>assistant-stream@0.3.38cancel invalid Gorp stream responses9 changes
Fixes8
cancel invalid Gorp stream responses
keep partial tool-call args parseable when a negative number is cut before its digits
isolate overlapping tool executions that reuse a toolCallId
>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
>4 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.11update dependencies1 change
>@assistant-ui/mcp-docs-server@0.2.2update dependencies2 changes
>@assistant-ui/react-o11y@0.0.40@assistant-ui/tap@0.9.131 change
Other1
@assistant-ui/tap@0.9.13
>create-assistant-ui@0.0.74assistant-ui@0.0.1111 change
Other1
assistant-ui@0.0.111