Release history.
Every package release from the assistant-ui monorepo, grouped by day.
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/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@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/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@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/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@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/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-ink-markdown@0.0.38@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-mcp@0.1.14@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-opencode@0.2.20update dependencies1 change
>assistant-ui@0.0.112@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>create-assistant-ui@0.0.75[email protected]1 change
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/[email protected]1 change
Other1
@assistant-ui/[email protected]
>create-assistant-ui@0.0.74[email protected]1 change
Aug 12, 2026
16 releases
>@assistant-ui/cloud-ai-sdk@0.1.33clear stale thread lists when the Cloud client changes3 changes
>@assistant-ui/core@0.3.13give the composer its draft back when a send never reached the backend. a runtime that rejects onNew with the new MessageNotSentError restores the text, quote, and attachments the composer cleared at dispatch time, as long as nothing has claimed the composer since. that guard and that outcome are the ones cancelRun already applies to a trailing user message, so whichever fires first keeps the composer, and of several drafts queued behind one turn only the most recent is still restorable. an edit composer closes at dispatch, so a rejected edit is not restored.14 changes
Features3
give the composer its draft back when a send never reached the backend. a runtime that rejects
onNew with the new MessageNotSentError restores the text, quote, and attachments the composer cleared at dispatch time, as long as nothing has claimed the composer since. that guard and that outcome are the ones cancelRun already applies to a trailing user message, so whichever fires first keeps the composer, and of several drafts queued behind one turn only the most recent is still restorable. an edit composer closes at dispatch, so a rejected edit is not restored.Fixes11
make a cancelled run move its trailing user message instead of dropping it. the message now leaves the thread only when the composer actually accepts it, so cancelling while a draft is already being written keeps the message in the thread rather than deleting it and handing it back nowhere, and what comes back carries the attachments and quote instead of the text alone. a message carrying content the composer has no home for, such as an image or file part, is left in the thread untouched. adapters keep the existing
setMessages guard: without it the runtime cannot see its own removal survive, so an adapter that removes the cancelled message itself owns handing it back.gate interactable state snapshots at dispatch instead of at enqueue. a message sent while a run is in flight waits in a queue lane but carried the snapshot taken when the user sent it, so a run that landed its own
update_{name} in the meantime was folded over by a stale user-edit version: a full snapshot replaced the model's edit outright, and a partial one merged the older diff on top of it, producing a state that never existed. every send path now stamps exactly once, when the message is dispatched rather than when it is queued. LocalThreadRuntimeCore stamps in _runAppend, the point both the direct send and the queue flush pass through, and ExternalThreadQueueAdapter gained an optional __internal_setDispatchTransform that createMessageQueue implements and ExternalStoreThreadRuntimeCore installs, so a queued message is re-gated against the thread tail it actually lands on. an adapter that does not implement the transform is stamped at enqueue as before.pause an external store's message queue when the user cancels. cancelling left the queue running, so the aborted run's settle dispatched the next pending message at the moment the user pressed Stop; the pending items now survive and the next send drains them, matching what the local runtime does under
unstable_queueClearOnCancel: false and the behaviour that flag becomes once it is removed.stamp interactable state snapshots on every send, not just composer sends. the gate ran in the thread and edit composer cores, so a send that skipped the composer carried
metadata.custom = {}: a Suggestions entry with send goes through thread.append, as does user code calling assistant.thread.append(...). the model then saw an update_{name} tool whose required id is documented as coming from a state snapshot, found no snapshot in the conversation, and could not call the tool at all. gating now runs in BaseThreadRuntimeCore.enrichAppendMetadata, applied by both thread runtime cores on append, deriving the branch prefix from the message's parentId so the previous composer behavior is reproduced exactly (the thread tail for an ordinary send, the edited message's parent for an edit). the remove operation's item id description in generated array-update schemas no longer reuses the instance-addressing wording that told the model each removable list item was an interactable instance.deliver
threadListItem.switchedTo to default-scope listeners (#5699). the thread list item client now emits the switch from its own observed selection transition, after the flush that rebinds the derived scopes, instead of relaying the runtime's synchronous notification. scoped listeners now resolve their scope against the host's current client at delivery time, so a listener subscribed before a structural swap follows the scope's present binding; the notification manager re-reads the listener set at flush time per the documented live-set semantics. listeners that need a pinned instance subscribe on an id-scoped client instead.>@assistant-ui/eve@0.0.13hand a cancelled queued send back to the composer instead of dropping it. hitting Stop while a message waits behind a streaming turn now restores that message as the composer draft, superseding the 0.0.10 note that cancelling a run drops queued sends. a turn cancelled before it streamed still hands its own message back to the composer first, so the queued one is dropped in that window. cancelled tool approvals are still discarded, and unmounting the runtime still drops whatever is queued.1 change
Fixes1
hand a cancelled queued send back to the composer instead of dropping it. hitting Stop while a message waits behind a streaming turn now restores that message as the composer draft, superseding the 0.0.10 note that cancelling a run drops queued sends. a turn cancelled before it streamed still hands its own message back to the composer first, so the queued one is dropped in that window. cancelled tool approvals are still discarded, and unmounting the runtime still drops whatever is queued.
>@assistant-ui/react@0.15.14give the composer its draft back when a send never reached the backend. a runtime that rejects onNew with the new MessageNotSentError restores the text, quote, and attachments the composer cleared at dispatch time, as long as nothing has claimed the composer since. that guard and that outcome are the ones cancelRun already applies to a trailing user message, so whichever fires first keeps the composer, and of several drafts queued behind one turn only the most recent is still restorable. an edit composer closes at dispatch, so a rejected edit is not restored.5 changes
Features2
give the composer its draft back when a send never reached the backend. a runtime that rejects
onNew with the new MessageNotSentError restores the text, quote, and attachments the composer cleared at dispatch time, as long as nothing has claimed the composer since. that guard and that outcome are the ones cancelRun already applies to a trailing user message, so whichever fires first keeps the composer, and of several drafts queued behind one turn only the most recent is still restorable. an edit composer closes at dispatch, so a rejected edit is not restored.Fixes3
>@assistant-ui/react-a2a@0.2.29reject synchronous message responses with invalid A2A roles1 change
>@assistant-ui/react-ag-ui@0.0.54round-trip a part's providerMetadata.agui through AG-UI's content metadata. An image or file part, whether it sits on the message or inside an attachment, now reaches the agent with whatever the host put in that namespace, and an inbound item puts it back on the rebuilt part, so a snapshot echo resends it instead of dropping it. A file part's own filename still wins over a key of the same name. Text is unchanged, its AG-UI schema has no metadata field.5 changes
Features1
round-trip a part's
providerMetadata.agui through AG-UI's content metadata. An image or file part, whether it sits on the message or inside an attachment, now reaches the agent with whatever the host put in that namespace, and an inbound item puts it back on the rebuilt part, so a snapshot echo resends it instead of dropping it. A file part's own filename still wins over a key of the same name. Text is unchanged, its AG-UI schema has no metadata field.Fixes4
preserve encrypted-only reasoning records across the AG-UI round trip. Under zero data retention an agent sends a
ReasoningMessage whose readable content is empty and whose payload is entirely in encryptedValue, and both the adapter and the core normalizer dropped it: the import guarded on empty text, and a reasoning part with neither text nor summary is removed by fromThreadMessageLike. Such a record now rides on metadata.custom.agui.opaqueReasoning of the neighbouring message instead of becoming an unrenderable part, and is replayed into the run input adjacent to that message. A record that sat between an assistant message and its own tool result is replayed after that result, since import folds the result into the assistant message and that boundary no longer exists at export. A runtime configured with showThinking: false is affected too: it previously emitted no reasoning records at all, and now emits { role: "reasoning", content: "", encryptedValue } for each imported record that carried a value, since that option hides reasoning from the UI rather than discarding state the agent needs back.keep reasoning, and its signature, across the AG-UI round trip.
toAgUiMessages built the run input from extractText, which reads text parts only, so an imported reasoning-only assistant message was discarded as a blank turn and a live assistant message silently lost its reasoning; reloading a thread and sending one more message deleted the reasoning history from what the agent received. Reasoning parts now leave as the standalone reasoning records they arrived as. The runtime also consumes REASONING_ENCRYPTED_VALUE and stores the blob at providerMetadata.agui.encryptedValue, so reasoning from a live run and from an imported ReasoningMessage are both re-emitted with their signature intact rather than replayed unsigned.>@assistant-ui/react-generative-ui@0.0.14report the depth warning against the 32 levels of element nesting the Slack and Teams converters actually allow, instead of the 64 traversal units that ceiling is spent in7 changes
Fixes7
report the content the Slack and Teams converters were discarding silently. A
ListView or Carousel child that would have rendered, a malformed Select or RadioGroup option, and a table column without a string label all warn dropped now, while a child that renders nothing anyway stays silent. A Slack column without a label also keeps its position now, so the header stays aligned with the data, and a discarded child no longer spends the shared markdown and data-table budgets or reserves a Teams input id that renames a control which survivesreport a reshaped Slack carousel card accurately. The reshape is a
fallback rather than a clamped, since a card holding only text loses nothing; the images, tables, charts, and controls a reshape really does lose are reported separately as dropped; and the title and body are clamped through the warning path instead of being sliced silently>@assistant-ui/react-native@0.1.36respect prevented composer key events1 change
>@assistant-ui/react-pi@0.0.17release event stream readers after completion, cancellation, and errors1 change
Fixes1
>@assistant-ui/store@0.3.9scoped event listeners under a derived-only provider filter against the child's own bindings instead of the parent's, in both directions and through scope-less intermediate hosts3 changes
Fixes3
deliver
threadListItem.switchedTo to default-scope listeners (#5699). the thread list item client now emits the switch from its own observed selection transition, after the flush that rebinds the derived scopes, instead of relaying the runtime's synchronous notification. scoped listeners now resolve their scope against the host's current client at delivery time, so a listener subscribed before a structural swap follows the scope's present binding; the notification manager re-reads the listener set at flush time per the documented live-set semantics. listeners that need a pinned instance subscribe on an id-scoped client instead.>@assistant-ui/tap@0.9.12mountOnSubscribe1 change
>assistant-cloud@0.1.40include archived Cloud threads when requested and preserve archive filters1 change
Fixes1
>assistant-ui@0.0.110clarify malformed package.json errors from the info command1 change
>3 maintenance releasesdependency updates and chores
>@assistant-ui/react-mcp@0.1.12@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-o11y@0.0.39@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>create-assistant-ui@0.0.73[email protected]1 change
Aug 9, 2026
13 releases
>@assistant-ui/cloud-ai-sdk@0.1.32clear a selected Cloud thread when archiving removes it from the list1 change
>@assistant-ui/core@0.3.12move ExternalThread, SingleThreadList, and the Assistant augmentation namespace into @assistant-ui/core1 change
Refactors1
>@assistant-ui/core@0.3.11name the offending input when an external message converter returns an invalid message3 changes
>@assistant-ui/eve@0.0.12isolate observe-only Eve lifecycle callbacks1 change
>@assistant-ui/react@0.15.13move ExternalThread, SingleThreadList, and the Assistant augmentation namespace into @assistant-ui/core1 change
Refactors1
>@assistant-ui/react-langgraph@0.14.23skip RemoveMessage explicitly in convertLangChainMessages2 changes
>@assistant-ui/react-lexical@0.2.9clear stale composer text when switching to a thread with an empty draft1 change
Fixes1
>@assistant-ui/react-pi@0.0.16isolate runtime error callback failures1 change
>assistant-stream@0.3.37support ioredis 6 alongside 5 in the resumable stream store2 changes
>4 maintenance releasesdependency updates and chores
>@assistant-ui/react@0.15.12drop dependencies that are never imported1 change
>@assistant-ui/react-google-adk@0.0.25drop dependencies that are never imported1 change
>@assistant-ui/react-mcp@0.1.11@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-mcp@0.1.10@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
Aug 8, 2026
55 releases
>@assistant-ui/cloud-ai-sdk@0.1.30clear the selected Cloud thread after deleting it1 change
>@assistant-ui/core@0.3.9route sourceId-carrying edit sends to onEdit instead of the queue adapter, and fail fast on beginEdit without an edit handler1 change
Fixes1
>@assistant-ui/core@0.3.8preserve app-authored reasoning summaries on message parts2 changes
>@assistant-ui/eve@0.0.10serialize eve sends so approvals and sends during an active turn no longer crash or drop messages. Cancelling a run or unmounting the runtime drops sends still queued behind the active turn.1 change
Fixes1
serialize eve sends so approvals and sends during an active turn no longer crash or drop messages. Cancelling a run or unmounting the runtime drops sends still queued behind the active turn.
>@assistant-ui/react@0.15.9feedback adapter support in ExternalThread6 changes
>@assistant-ui/react@0.15.11ExternalThread edit composer reads editing state live, so a same-tick beginEdit + setText + send dispatches the edit; send before beginEdit and double beginEdit now throw (legacy runtime parity)2 changes
>@assistant-ui/react@0.15.10route sourceId-carrying edit sends to onEdit instead of the queue adapter, and fail fast on beginEdit without an edit handler1 change
Fixes1
>@assistant-ui/react-ag-ui@0.0.52send description: "" for a tool registered without one, so RunAgentInput stays valid against the AG-UI schema. previously the key was dropped from the payload entirely and validating servers rejected the run. also types the runAgent call site against the upstream parameters.2 changes
Fixes2
send
description: "" for a tool registered without one, so RunAgentInput stays valid against the AG-UI schema. previously the key was dropped from the payload entirely and validating servers rejected the run. also types the runAgent call site against the upstream parameters.>@assistant-ui/react-data-stream@0.12.25isolate lifecycle callback failures from stream control flow1 change
>@assistant-ui/react-langgraph@0.14.21isolate stream event callback errors1 change
>@assistant-ui/react-lexical@0.2.8support lexical 0.492 changes
>@assistant-ui/react-pi@0.0.15support pi 0.842 changes
>@assistant-ui/react-pi@0.0.14isolate initial subscription callback errors1 change
>@assistant-ui/store@0.3.7createAssistantClient accepts an AssistantConfigSource, re-read in the root render so bindings can deliver config changes (updated element args, added or removed scopes) without remounting surviving scopes2 changes
Features1
Fixes1
answer Vue reactivity introspection probes (
__v_raw, __v_isRef, __v_isReactive, __v_isReadonly, __v_isShallow, __v_skip) on client proxies with undefined instead of an error accessor, so Vue's toRaw/isRef checks and its dev warning formatter no longer throw when a client crosses a Vue boundary>assistant-stream@0.3.35preserve app-authored reasoning summaries on message parts3 changes
Features1
preserve app-authored reasoning summaries on message parts
Fixes2
carry a reasoning summary on the data stream. a reasoning part opened with
unstable_summary previously lost it on that wire, and a summary-only part produced no frames at all, so it never reached the client. the encoder now emits a reasoning part-start frame when there is a summary to carry; a stream that does not use the field is unchanged, and one that does requires a decoder that understands the frame.>40 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.10update dependencies1 change
>@assistant-ui/cloud-ai-sdk@0.1.31update dependencies1 change
>@assistant-ui/core@0.3.10update dependencies2 changes
>@assistant-ui/eve@0.0.11update dependencies1 change
>@assistant-ui/mcp-docs-server@0.2.1update dependencies1 change
>@assistant-ui/metro@0.0.8update dependencies1 change
>@assistant-ui/next@0.0.15update dependencies1 change
>@assistant-ui/react-a2a@0.2.28update dependencies1 change
>@assistant-ui/react-ag-ui@0.0.53update dependencies1 change
>@assistant-ui/react-ai-sdk@1.4.5update dependencies1 change
>@assistant-ui/react-data-stream@0.12.26update dependencies1 change
>@assistant-ui/react-devtools@1.2.13update dependencies1 change
>@assistant-ui/react-generative-ui@0.0.13update dependencies1 change
>@assistant-ui/react-google-adk@0.0.24update dependencies1 change
>@assistant-ui/react-hook-form@0.12.27update dependencies1 change
>@assistant-ui/react-ink@0.0.37update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.36update dependencies1 change
>@assistant-ui/react-langchain@0.0.25update dependencies1 change
>@assistant-ui/react-langgraph@0.14.22update dependencies1 change
>@assistant-ui/react-markdown@0.14.10update dependencies1 change
>@assistant-ui/react-mcp@0.1.9update dependencies1 change
>@assistant-ui/react-mcp@0.1.8@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-mcp@0.1.7[email protected]1 change
>@assistant-ui/react-native@0.1.35update dependencies2 changes
>@assistant-ui/react-o11y@0.0.38update dependencies1 change
>@assistant-ui/react-o11y@0.0.37@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]
>@assistant-ui/react-opencode@0.2.18update dependencies1 change
>@assistant-ui/react-streamdown@0.3.10update dependencies1 change
>@assistant-ui/react-syntax-highlighter@0.14.5update dependencies1 change
>@assistant-ui/store@0.3.8update dependencies1 change
>@assistant-ui/tap@0.9.11update dependencies1 change
>@assistant-ui/vite@0.0.12update dependencies1 change
>@assistant-ui/x-buildutils@0.0.22update dependencies1 change
>@assistant-ui/x-generative-compiler@0.0.12update dependencies1 change
>assistant-cloud@0.1.39update dependencies1 change
>assistant-stream@0.3.36update dependencies1 change
>assistant-ui@0.0.109update dependencies1 change
>create-assistant-ui@0.0.72[email protected]1 change
>heat-graph@0.0.15update dependencies1 change
>safe-content-frame@0.0.27update dependencies1 change
Aug 6, 2026
23 releases
>@assistant-ui/core@0.3.6AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.5 changes
Features2
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.Fixes3
accept all valid image data URLs in sanitizeImageContent instead of a hardcoded format list
>@assistant-ui/eve@0.0.8export toEveInputResponse from the package barrel for custom approval flows5 changes
Features1
export toEveInputResponse from the package barrel for custom approval flows
Fixes4
render connector authorization parts and map auth-suspended turns to requires-action
convert inbound eve file parts instead of dropping them
reconcile staged messages with live session updates and promote staged prefixes on reload
map cancelled and failed turns to terminal message statuses instead of a permanent running state
>@assistant-ui/metro@0.0.7AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.1 change
Features1
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.>@assistant-ui/next@0.0.14only run the use-generative loader on modules carrying the directive1 change
Fixes1
only run the use-generative loader on modules carrying the directive
>@assistant-ui/react@0.15.5AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.10 changes
Features2
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.Fixes8
allow callers to override the default type="button" on action button primitives
AttachmentPrimitive.Thumb now renders custom children and supports asChild instead of always overriding them with the automatic label
AttachmentPrimitive.Thumb no longer renders a bare "." for extension-less filenames; falls back to the attachment type
ignore Escape during IME composition in ComposerPrimitiveInput so dismissing a composition candidate no longer cancels the composer
defer blob URL revocation in ActionBarPrimitive.ExportMarkdown so the download fetch can start before the URL is revoked
compose SelectionToolbarRoot onMouseDown with composeEventHandlers so user handlers run before preventDefault
>@assistant-ui/react-a2a@0.2.27restore inbound file and audio parts as file message parts instead of text placeholders4 changes
Fixes4
restore inbound file and audio parts as file message parts instead of text placeholders
keep the wire filename on inbound image parts
>@assistant-ui/react-ag-ui@0.0.51add unstableenableMessageQueue so a send during a run is buffered instead of swallowed3 changes
>@assistant-ui/react-generative-ui@0.0.12keep chart strokes crisp under viewBox stretching and stop outlining area baselines1 change
Fixes1
>@assistant-ui/react-google-adk@0.0.22keep ADK stream error events reliable when error callbacks fail1 change
>@assistant-ui/react-hook-form@0.12.26submit forms registered with standard and nested inputs1 change
>@assistant-ui/react-ink@0.0.36AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.3 changes
Features2
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.Fixes1
AttachmentPrimitive.Thumb now renders custom children instead of always overriding them with the automatic label
>@assistant-ui/react-langchain@0.0.24isolate LangChain stream options between thread runtimes1 change
>@assistant-ui/react-langgraph@0.14.20two-lane, placement-aware message queue with steer-by-default mid-run sends1 change
Features1
>@assistant-ui/react-mcp@0.1.4AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.3 changes
Features1
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.Fixes2
>@assistant-ui/react-native@0.1.34AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.3 changes
Features1
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.Fixes2
AttachmentPrimitive.Thumb now renders custom children instead of always overriding them with the automatic label
AttachmentPrimitive.Thumb no longer renders a bare "." for extension-less filenames; falls back to the attachment type
>@assistant-ui/react-o11y@0.0.34AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.2 changes
Features1
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.>@assistant-ui/react-pi@0.0.13two-lane, placement-aware message queue with steer-by-default mid-run sends1 change
Features1
>@assistant-ui/react-streamdown@0.3.9merge user rehypePlugins after the security hardening pipeline instead of dropping it2 changes
Fixes2
merge user rehypePlugins after the security hardening pipeline instead of dropping it
preserve Streamdown sanitization extensions with security
>@assistant-ui/store@0.3.4AuiProvider extends/config grammar. config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.3 changes
Features3
AuiProvider extends/config grammar.
config={AuiConfig({...})} alone creates a top-level root client; nested providers must pass extends — a client to extend, or null to isolate (dev-enforced). An empty config creates a client extending the extends client; ref exposes the resulting client. The config prop only accepts configs built with AuiConfig(...) (branded type). AssistantRuntimeProvider gains an optional config prop whose scopes are provided alongside the runtime scope. The useAui({...}) extension overload and the AuiProvider value prop are deprecated; value={client} now exposes a client extending the given one (same scopes, new identity) rather than the exact instance. useAui({}) with an empty scope object now mounts a rooted host (so the scope set can grow across renders) instead of a passthrough derived-only client. useAuiState state enumeration (Object.keys/spread) now includes scopes inherited from parent clients, matching in-operator behavior. Clients derived from a hand-built parent (a plain object with subscribe/on) forward scoped on(...) listeners to the parent's on instead of throwing for scopes the parent does not expose.>@assistant-ui/tap@0.9.10add a react-free standalone shim entry and make the react peer optional1 change
Features1
>@assistant-ui/x-buildutils@0.0.21only run the react compiler on tap-dependent packages that declare a react peer, so non-React framework bridges do not gain memo caches that run outside any render the compiler understands1 change
Fixes1
>assistant-stream@0.3.34await resumable reader cleanup during cancellation1 change
>1 maintenance releasedependency updates and chores
>@assistant-ui/react-ink-markdown@0.0.35@assistant-ui/[email protected]1 change
Other1
@assistant-ui/[email protected]