159 KiB
@assistant-ui/react
0.14.26
Patch Changes
-
#4627
266657d- Thread list accessibility improvements, focused on keyboard and focus handling: (@AVGVSTVS96)- Arrow-key navigation: Up/Down between items, Right to an item's "More" button (mirrored in RTL); every item stays a Tab stop.
- Continuous focus: opening and closing a menu keeps focus on the row, so the focus-visible highlight never breaks.
- New
sharedFocusGrouponThreadListItemMorePrimitive.Rootextends this to the menu (Right opens, Left/Escape close and restore focus) and forces it non-modal; without it, menus are unchanged.
-
Updated dependencies [
523e0b5,f833bc1]:- @assistant-ui/core@0.2.20
- assistant-stream@0.3.25
0.14.25
Patch Changes
-
#4562
942931d- fix: disable smooth text streaming under prefers-reduced-motion (@ephraimduncan) -
Updated dependencies [
a7b06f7]:- safe-content-frame@0.0.22
0.14.24
Patch Changes
-
#4543
d0987a3- external-store: addunstable_onBranchChangeadapter callback that fires on explicitswitchToBranch, emitting the canonical (persisted) head and visible message ids, deduped by head (@AVGVSTVS96) -
#4545
4550578- add unstable_useComposerInput headless bridge (value/setText/send/isDisabled/canSend) and unstable_useTriggerPopoverAriaProps for building a custom composer input without ComposerPrimitive.Input (@AVGVSTVS96) -
#4310
0c51b90- feat: addunstable_interactables API; restore and deprecate the previous interactables API (@AVGVSTVS96)The redesigned interactables API is now available as an additive
unstable_*surface for building editable, in-message UI while preserving the existing stable API for compatibility.unstable_useInteractable(name, config)registers an interactable and returns its state plus methods in one hook.- Each unstable interactable name gets one stable
update_{name}tool. When multiple instances share a name, the tool targets an instance byid. - Thread-scoped interactables rendered inside message parts expose
version, including the state for that message, whether it is the latest tool-driven version, andrestore(). - Added
unstable_interactableTool(...)for defining a creating tool and its in-message render UI together. - Added
unstable_useInteractableVersions(id, name)for version history UIs. - Persistence adapters can now provide
load()and be passed directly tounstable_Interactables({ persistence }).
The previous
useAssistantInteractable/useInteractableState/InteractablesAPI remains available unchanged and is marked deprecated. Existing apps do not need to migrate immediately.Migration notes for the unstable API:
- const id = useAssistantInteractable("taskBoard", config); - const [state, { setState }] = useInteractableState(id, initialState); + const [state, { id, setState }] = unstable_useInteractable("taskBoard", config);- Use
unstable_interactables: unstable_Interactables()when registering the unstable scope. unstable_useInteractableState(id)is intended for secondary readers and returnsundefineduntil the owner registers.- The unstable API uses per-name update tools (
update_{name}) with anidparameter instead of legacy per-instance tools (update_{name}_{id}). - A top-level
idfield instateSchemais reserved for instance addressing. Rename domain state fields toitemId,recordId, etc. if the model should edit them. - Model selection should be represented as ordinary state in the unstable API; the legacy
selectedregistration prop andsetSelectedmethod remain available on the deprecated stable API.
-
#4591
f582f09- feat: honor startRun false across staged-message-capable runtimes (@Yonom) -
#4542
4acd4c0- add unstable id-keyed thread message rendering APIs for virtualized and custom message lists.unstable_useThreadMessageIds()returns the thread's message ids (stable array identity across content-only updates), andThreadPrimitive.Unstable_MessageByIdrenders a single message by id with the same component surface asMessageByIndex. A missing or removed id rendersnullinstead of throwing. (@AVGVSTVS96) -
Updated dependencies [
ddc40b7,ea52de0,29c6fdb,d0987a3,cefcf27,0c51b90,3a8f685,ec6adf4,4acd4c0]:- @assistant-ui/core@0.2.19
- assistant-stream@0.3.24
- assistant-cloud@0.1.34
- @assistant-ui/store@0.2.19
- @assistant-ui/tap@0.9.3
0.14.23
Patch Changes
-
#4426
68dfbaa- chore: markgenerateIdandfromThreadMessageLikeas experimental (@okisdev)these two utilities became public in #4414. they now carry an
@deprecatedJSDoc noting the API is experimental and may change without notice, matching how the other unstable public utilities (e.g.bindExternalStoreMessage) are flagged. the distribution packages (@assistant-ui/react,@assistant-ui/react-native,@assistant-ui/react-ink) re-export them, so the annotation lands in their published types too. -
Updated dependencies [
68dfbaa,fe24ad6]:- @assistant-ui/core@0.2.18
0.14.22
Patch Changes
-
#4414
344f737- feat: exportfromThreadMessageLikeandgenerateIdfrom the public API (@okisdev)these two utilities were only reachable via
@assistant-ui/core/internal, so materializing aThreadMessageLikeinto aThreadMessage, or generating an id for a hand-built message, meant reaching into internals (the first-party ag-ui and a2a runtimes already did). they are now exported from@assistant-ui/core,@assistant-ui/react,@assistant-ui/react-native, and@assistant-ui/react-ink. also removes the now-redundant duplicate listing of both from the unstableINTERNALnamespace (the one in-repo consumer, the with-ffmpeg example, now uses the public export). -
#4419
3cef745- feat(react): addminCommitMstoSmoothOptionsto throttle committed reveal updates (@okisdev)useSmoothkeeps advancing the typewriter reveal every frame, but withminCommitMsthe visible text (and the downstream re-render and markdown re-parse it triggers) is committed at most once per interval. The final frame always commits, so no characters are lost. Defaults to0, which commits every frame and preserves the previous behavior. -
#4411
d76a922- feat: addunstable_useLiveCompletionAdapterfor async trigger completions (@okisdev)bridges an async completion source (a server search, a gateway RPC) into the synchronous
Unstable_TriggerAdapter.searchreturns cached items synchronously and schedules a debounced fetch with stale-request cancellation; when results land the adapter re-creates so the popover re-renders. also adds anisLoadingprop onComposerPrimitive.Unstable_TriggerPopover(surfaced on the popover scope) so async sources can render a loading state. -
Updated dependencies [
344f737,a2e21ee]:- @assistant-ui/core@0.2.17
0.14.21
Patch Changes
-
#4403
9f59d69- fix: prevent compiled context store hooks from skipping subscriptions (@Yonom) -
Updated dependencies [
8d3b0e8]:- @assistant-ui/tap@0.9.2
0.14.20
Patch Changes
-
#4392
4cc7eaa- chore: update peer and dependency ranges for @assistant-ui/tap 0.9 (@Yonom) -
Updated dependencies [
434bba5,bb38d08,4cc7eaa,4cc7eaa]:- assistant-stream@0.3.23
- @assistant-ui/core@0.2.16
- assistant-cloud@0.1.33
- @assistant-ui/tap@0.9.1
- @assistant-ui/store@0.2.18
0.14.19
Patch Changes
-
#4385
ae59baf- feat: precompile packages with React Compiler (@Yonom)- aui-build runs React Compiler over packages that depend on tap and remaps
react/compiler-runtimeto the tap shim subpath, so compiled hooks and components work both in React components and inside tap resource renders @assistant-ui/tap/react-shimexportsuseMemoCache(tap inside a resource render,React.__COMPILER_RUNTIME.cotherwise, with a React 18 polyfill); new@assistant-ui/tap/react-shim/compiler-runtimesubpath mirrorsreact/compiler-runtime'scexport- tap implements
useSyncExternalStoreand a no-opuseDebugValue;useSubscribablenow builds onuseSyncExternalStoreso its store reads stay visible to the compiler AssistantProviderBaseopts out via"use no memo"because the runtime receives options through an effect inside a re-rendered child element
- aui-build runs React Compiler over packages that depend on tap and remaps
-
#4378
4583ca7- feat: approval options vocabulary on tool approvals.ToolCallMessagePart.approvalgains request-suppliedoptions(machine-readable kinds allow-once / allow-always / reject-once / reject-always, open to_-prefixed custom kinds), a recordedoptionId, and a terminalresolution("cancelled" | "expired") for non-decision outcomes.respondToApprovaladditionally accepts{ optionId }, resolved in core against the option's kind; custom kinds require an explicitapproved.ExternalThreadgains anonRespondToToolApprovalcallback. The kit approval bar renders supplied options with an opt-in confirmation step showing the grants an option would persist. Persistence stays host-owned. (@okisdev) -
#4379
94cc028- feat: per-tool-call timing and stall detection.ToolCallMessagePartgains atimingfield ({ startedAt, completedAt? }in epoch ms), auto-populated by the assistant-stream accumulator at part start and result, and accepted onThreadMessageLikefor external-store hosts. NewuseToolCallElapsed()hook returns the call's elapsed milliseconds, ticking once per second while running;unstable_useMessageStallDetection({ thresholdMs })reports mid-run output stalls by watching a message content fingerprint. The kitToolFallbacktrigger renders the duration when timing is present. (@okisdev) -
Updated dependencies [
c207bcd,ae59baf,9f13fdb,4583ca7,94cc028]:- @assistant-ui/core@0.2.15
- @assistant-ui/tap@0.8.1
- @assistant-ui/store@0.2.17
- assistant-stream@0.3.22
0.14.18
Patch Changes
-
#4352
14aa2ac- feat:unstable_useComposerInputHistory(@okisdev)terminal-style input history for the thread composer: ArrowUp on an empty draft recalls previously sent user messages (newest first, derived live from thread state), ArrowDown steps back and finally restores the in-progress draft. spread the returned
{ onKeyDown }bundle ontoComposerPrimitive.Input. yields to open trigger popovers, IME composition, modifiers, selections, and consumer handlers that already prevented the event; inert on edit composers. -
#4340
ab8e5bc- fix: exclude reasoning parts from copied message text (@serhiizghama)getCopyTextfiltered parts with"text" in part, which also matchedreasoningparts (they carry atextfield), leaking the model's chain-of-thought into the clipboard. Both copy paths now delegate to the canonicalgetThreadMessageText, so copy returns onlytype: "text"content — consistent with the rest of the runtime. -
#4359
59d252f- feat: branch switching for the ExternalThread client (@okisdev)ExternalThreadaccepts an optionalbranchesadapter (ExternalThreadBranchAdapterin@assistant-ui/core, re-exported from@assistant-ui/react):getBranches(messageId)returns ordered sibling branch ids andswitchToBranch(branchId)makes a sibling visible by swapping themessagesarray. messages with more than one sibling get realbranchNumber/branchCount, which is what shows the branch picker;capabilities.switchToBranchis set for parity with the legacy external store. without the adapter, behavior is unchanged. -
#4329
2b96cb5- fix: emit the GroupedParts streaming indicator for empty running messages, so the assistant slot shows a loading affordance immediately after sending instead of staying blank (@okisdev) -
#4329
2b96cb5- fix: compensate scrollbar gutter in useScrollLock so collapsible animations don't shift centered content horizontally on classic scrollbars (@okisdev) -
#4350
42fd04f- feat: public, tunableuseSmooth(@okisdev)useSmoothand a newSmoothOptionstype are now exported from@assistant-ui/react(previously internal-only with a hard-coded reveal rate). thesmoothprop onMessagePartPrimitive.TextandMarkdownTextPrimitivewidens toboolean | SmoothOptions, withdrainMs(backlog drain target, default 250),maxCharIntervalMs(slowest reveal interval, default 5), andmaxCharsPerFrame(per-frame cap, default unlimited). the hook also now preserves the part type for reasoning parts instead of always returningtype: "text". react-markdown's@assistant-ui/reactpeer floor moves to the release that shipsSmoothOptions. -
#4325
5a4f20e- chore: update @assistant-ui/tap dependency ranges to ^0.7.0 (@Yonom) -
#4329
2b96cb5- fix: clear pending viewport bottom-scroll intent on pointer interaction, preventing collapsible expand/collapse from yanking the thread to the bottom (@okisdev) -
Updated dependencies [
ab8e5bc,59d252f,feecac3,3e58253,12b016b,3e58253,5a4f20e,f10b8ae,1fb5862]:- @assistant-ui/core@0.2.14
- @assistant-ui/store@0.2.16
- @assistant-ui/tap@0.7.1
0.14.17
Patch Changes
-
#4315
60ef0e9- feat: add runtime support for deleting messages (@Yonom) -
#4318
1b6a0d6- feat(tap): resources carry all hook arguments; elements are{ hook, args }(@Yonom)A
ResourceElementis now{ hook, args }(was{ type, props }): the underlying hook plus the full tuple of arguments to call it with. This lets a resource take multiple positional arguments, exactly like a hook, and makes hosting justhook(...args):const usePair = (a: number, b: string) => ({ a, b }); const Pair = resource(usePair); const element = Pair(1, "hi"); // { hook: usePair, args: [1, "hi"] }The single-object case is unchanged ergonomically (
Counter({ initialValue: 0 })still works; itsargsis just[{ initialValue: 0 }]), so existing resources and call sites are unaffected.resource()'s overloads collapse into one variadic signature, and thefnSymbol/callResourceFnindirection is gone (the element holds the hook directly;renderResourceFibercallsfiber.hook(...args)).Breaking (internal/advanced):
- The second type parameter of
Resource/ResourceElement/ContravariantResourcenow means the argument tupleA extends readonly unknown[]rather than a single payloadP. Explicit two-arg annotations must wrap the payload in a tuple (e.g.ResourceElement<R, [Props]>). - A resource's identity is now its hook. Reading
element.propsbecomeselement.args[0]; readingelement.typebecomeselement.hook.attachTransformScopesis now keyed by (and called with) the hook rather than the factory. useResource(element, deps)'s second arg is unchanged in behavior (renamedargsDeps).
- The second type parameter of
-
#4318
1b6a0d6- refactor: adopt the extracted-hook convention for resources (@Yonom)A resource body is a hook, so resources are now authored as a
use-prefixed hook wrapped withresource():const useCounter = () => { ... }; const Counter = resource(useCounter);resource()turns a hook into a Resource;useResource(Counter(props))turns it back into a hook call. Extracting the body to ause-prefixed hook lets React's stock rules-of-hooks and exhaustive-deps lint resource bodies directly. No public API or runtime behavior changes. -
Updated dependencies [
60ef0e9,1b6a0d6,1b6a0d6,1b6a0d6,1b6a0d6]:- @assistant-ui/core@0.2.13
- @assistant-ui/tap@0.6.2
- @assistant-ui/store@0.2.15
0.14.16
Patch Changes
- Updated dependencies:
- @assistant-ui/core@0.2.12
- @assistant-ui/tap@0.6.1
0.14.15
Patch Changes
-
#4260
19c5b5f- fix: make defineToolkit usable for plain runtime toolkits (@Yonom) -
#4246
dbdfb15- feat: message queuing for external-store, langgraph, and local runtimes (@okisdev)the composer can now stay usable while a run is in progress: a message sent during a run is held in
composer.queue(rendered viaComposerPrimitive.Queue/QueueItemPrimitive.*) and processed once the run settles. external-store adapters opt in by providing aqueueadapter (typically built with the newcreateMessageQueuehelper);useLangGraphRuntimeanduseLocalRuntimeopt in viaunstable_enableMessageQueue.ExternalThreadQueueAdapternow lives in@assistant-ui/core(still re-exported from@assistant-ui/react). -
#4249
ca191dc- feat: add externalTool for render-only generative toolkit entries (@Yonom) -
#4280
e7f1aa0- fix(mcp-apps): send the 2026-01-26 dialect on host→app messages so widgets built with@modelcontextprotocol/ext-appsinitialize and receive tool results (@okisdev)the bridge already normalized inbound
ui/*method names, but every outbound message (theui/initializeresult and the tool input/result/host context notifications) stayed in the pre-spec dialect. spec widgets zod-validate the initialize result and requirehostInfo+hostCapabilities, so they failed init; tool results were posted asnotifications/tools/call/result, a method the official SDK never listens for, so a patched widget still rendered empty. the bridge now additively dual-sends both dialects (the initialize result carrieshost/capabilitiesandhostInfo/hostCapabilities, echoes the app's requestedprotocolVersion, and each notification posts itsui/notifications/*counterpart with the spec param shapes). unknown methods and fields are ignored by either SDK, so legacy widgets are unaffected. -
#4256
44ff4bf- feat: rename hitlTool to humanTool while keeping deprecated compatibility aliases (@Yonom) -
#4298
72494e7- refactor: extract a shared sandbox host (SafeContentFrame lifecycle, the single cross-origin guarded message listener, auto-resize) and reuse it for the MCP app frame, with no behavior change (@okisdev) -
Updated dependencies [
2a84174,a0a0769,19c5b5f,dbdfb15,ca191dc,15878d8,44ff4bf,01cf957,01cf957,26a365b]:- @assistant-ui/core@0.2.11
- assistant-stream@0.3.21
- assistant-cloud@0.1.32
- safe-content-frame@0.0.21
- @assistant-ui/store@0.2.14
- @assistant-ui/tap@0.6.0
0.14.14
Patch Changes
-
#4212
5fe118d- feat: add MCP server support to generative toolkits (@Yonom) -
#4213
dcd5897- feat: add provider-executed tool support to generative toolkits (@Yonom) -
#4127
606c9d4- feat(assistant-transport): honourAui-Replay-Content-Lengthto split sync-server replay from live bytes (@Yonom)useAssistantTransportRuntimenow reads theAui-Replay-Content-Lengthresponse header on resume and gates the body at that byte boundary. The replay prefix is decoded whileisLoading: truehas rendered through React, then the reader pauses untilisLoading: falsehas rendered before releasing live bytes. Tool calls in the replayed portion are recorded as historical and skipstreamCall/execute, while tool calls that begin after the replay boundary fire normally. Responses without the header behave as today. -
#4208
0558db2- feat: addupdateCustomto thread list runtimes, adapters, and clients (@okisdev) -
#4214
69540af- feat: add renderText helpers for tool call status text (@Yonom) -
#4199
d9b3119- feat: adefineToolkitentry may now be an already-formedToolDefinition(carrying its owntype), not only an inline definition whosetypethe compiler infers. This is what lets a factory likenew JSONGenerativeUI({ library }).present()be used directly as a tool. (@Yonom)Renames the authoring types to match
defineToolkit:ToolkitDeclaration→ToolkitDefinition, and addsToolkitDefinitionEntry(the union of an inline tool definition and a pre-formedToolDefinition). The per-tool inline type is now an internalToolkitDefinitionInputand is no longer exported. -
#4236
ae54c55- feat: addstubTool()and experimentaluseAuiToolOverrides()for locally executed generative toolkit tools (@Yonom) -
#4235
7640b31- Deprecate component tool registration APIs in favor of toolkit registrations. (@Yonom) -
Updated dependencies [
cba2b42,4145caa,58f80e0,78ff336,5fe118d,dcd5897,0558db2,69540af,d9b3119,ae54c55,7640b31]:- assistant-stream@0.3.20
- @assistant-ui/core@0.2.10
- assistant-cloud@0.1.31
0.14.13
Patch Changes
-
#4176
27ae936- feat: add theToolkitDeclaration/ToolkitDeclarationDefinitiontypes for authoring a toolkit permissively (a backend tool may declaredescription/parameters/execute); the canonicalToolkitkeeps those fields erased. Author withdefineToolkit()from@assistant-ui/react, which the"use generative"compiler strips per build. (@Yonom) -
#4176
27ae936- feat: move thedefineToolkitandhitluse-generative markers from@assistant-ui/nextinto@assistant-ui/core/react, so they ship once from every distribution (@assistant-ui/react,@assistant-ui/react-native,@assistant-ui/react-ink) and stay portable across build targets. Import them from@assistant-ui/reactinstead of@assistant-ui/next; they remain no-op markers stripped at build time by a"use generative"compiler. (@Yonom) -
Updated dependencies [
27ae936,27ae936]:- assistant-stream@0.3.19
- @assistant-ui/core@0.2.9
0.14.12
Patch Changes
-
#4172
1315789- feat: add theToolkitDeclaration/ToolkitDeclarationDefinitiontypes for authoring a toolkit permissively (a backend tool may declaredescription/parameters/execute); the canonicalToolkitkeeps those fields erased. Author withdefineToolkit()from@assistant-ui/next, which the"use generative"compiler strips per build. (@Yonom) -
#4151
299d448- chore: drop stalebiome-ignorepragmas now that the repo lints with oxlint (@okisdev) -
#4136
4429aa3- centralize thread-level shared options forwarding across runtime wrapper hooks. follow-up to #4135. (@okisdev)new public exports from
@assistant-ui/core(re-exported from@assistant-ui/react):ExternalStoreSharedOptions, a typedPickoverExternalStoreAdaptercovering the four thread-level optional fields every wrapper forwards:isDisabled,isSendDisabled,unstable_capabilities,suggestions.pickExternalStoreSharedOptions(options), plucks those four fields from a wider options object. the body usessatisfies Required<...>so adding a key to the type without copying it in the function is a compile error rather than a silent missing-field bug.useExternalStoreSharedOptions(options)(from@assistant-ui/core/react), a memoized variant for wrappers that wrap their store inuseMemo. lets the wrapper list a single stablesharedreference as a dep instead of enumerating the four fields. samesatisfiesguard internally so the destructure stays in sync with the type.
internal: every runtime wrapper hook (
useChatRuntime,useAISDKRuntime,useLangGraphRuntime,useA2ARuntime,useAgUiRuntime,useAdkRuntime,useStreamRuntime,useOpenCodeRuntime) now uses these helpers instead of inlining the conditional spreads added in #4135. each wrapper sheds 20 to 40 lines of duplicated declarations and conditional spreads; future additions to the shared option set propagate through a single edit inpickExternalStoreSharedOptionsinstead of touching every wrapper. no user-facing behavior change. -
#4141
0b99959- fix(react): stop subtree mutations from snapping a scrolled-up viewport back to bottom; loosen at-bottom threshold for high-DPR displays (@vaniyokk)useThreadViewportAutoScrollhad two related bugs surfaced on Chrome macOS atdevicePixelRatio: 2:- subtree mutations snapped the viewport back to bottom after the user scrolled away.
scrollingToBottomBehaviorRefwas planted onthread.runStart/useOnScrollToBottom/ initialize / thread switch and only cleared inhandleScrolloncenewIsAtBottombecame true. while the ref stayed set, every non-style subtree mutation (a Radixdata-stateflip, a markdown re-render, an image lazy-load, an attribute toggle on a child) re-entereduseOnResizeContent's callback and calledscrollToBottom(scrollBehavior), locking the viewport to the bottom until reload. isAtBottomnever registered astrueon high-DPR displays.Math.abs(scrollHeight - scrollTop - clientHeight) < 1is strict-less-than, and Chrome macOS atdevicePixelRatio: 2clipsscrollTopone pixel short ofscrollHeight - clientHeight(Math.abs(1) < 1 === false), so the store never updated andScrollToBottomnever moved into its disabled state.
the fix combines two layers.
handleScrollnow trackslastScrollHeightalongsidelastScrollTopand releases the auto-stick intent when the user scrolls up with content size unchanged, ruling out content-driven scrollTop shifts. the resize callback also bails when neitherscrollHeightnorclientHeighthas changed since the last fire, so mutations that don't move layout never re-enter the snap path. at-bottom auto-follow during streaming is preserved (verified by appending a synthetic 600px child while scrolled to bottom; viewport follows to new bottom). the threshold becomes<= 1to absorb the 1px sub-pixel clip.closes #4140.
- subtree mutations snapped the viewport back to bottom after the user scrolled away.
-
#4160
e76611f- feat: addindicatorsupport toMessagePrimitive.GroupedParts. (@Yonom)Restores loading-state handling that was dropped from the grouped renderer.
GroupedPartsnow emits a synthetic{ part: { type: "indicator" } }render call you handle withcase "indicator"in yourswitch (part.type)— render a "thinking…" dot or any loading affordance.- The indicator is only ever emitted while the message is running, so its presence alone means "render loading UI here" — there's no
statusto branch on. - New
indicatorprop restricts which running states qualify:"never","empty"(no parts yet),"no-text"(default — last part isn'ttext/reasoning, e.g. the model ended on a tool call), or"always"(any running state).
- The indicator is only ever emitted while the message is running, so its presence alone means "render loading UI here" — there's no
-
#4162
eef724e- fix: drop phantom sibling messages when an external store swaps an optimistic message id mid-run (#4037). (@Yonom)Messages can now be flagged
metadata.isOptimistic. Optimistic messages are treated as ephemeral: they only ever live on the current head branch (the repository evicts off-branch optimistic messages whenever the head moves) and they are never written to persisted state (export()omits them). The AI SDK v6 adapter flags the streaming assistant message as optimistic, so when its client-generated id is replaced by a server-provided one mid-run, the stale placeholder no longer lingers as a phantom branch (e.g.BranchPickershowing2/2on a turn the user never branched). Unlike the reverted blanket id-diff (#4040), only explicitly-optimistic messages are affected, so legitimateonEdit/onReload/switchToBranchbranches are preserved. -
#4148
2d9595e- revert: roll back #4040 (drop phantom siblings on external-store id swap). the_lastSyncedMessageIdsdiff was deleting legitimate sibling branches created byonEdit/onReload/switchToBranch, causingBranchPickerto disappear on edits and reloads (#4131). this revert restores the additive sync behavior; the AI SDK v6 mid-stream id swap (#4037) regresses and will be addressed in the AI SDK adapter instead. (@okisdev) -
#4167
fcb6baf- feat: add adisplaypresentation hint to tools and a"standalone-tool-call"key togroupPartByType. (@Yonom)Tool UIs fall into three buckets: prompting the user (human-in-the-loop), informing the user (generative UI), and traces of what the model is doing (routine frontend/backend tool calls). The first two should be surfaced on their own; the last belongs folded into the chain-of-thought trace. The new
displayfield on a tool lets you place a tool in the right bucket without overloadingtype:const toolkit = { ask_user: { type: "human", render: AskUI }, // standalone (forced — can't opt out) search_web: { type: "frontend", render: SearchUI }, // inline trace (default) checkout: { type: "frontend", render: CheckoutUI, display: "standalone", // opt in }, } satisfies Toolkit;display?: "standalone" | "inline"is a client-only presentation hint (it never reaches the model). Defaults to"inline".humantools are always"standalone"and cannot opt out (the type only allows"standalone"). MCP-app tool calls and the built-in generative-UI tool are standalone too. Every other tool defaults to inline and opts in explicitly.groupPartByTypegains a synthetic"standalone-tool-call"key that matches all of the above.MessagePrimitive.GroupedPartspasses the live tool-UI registry to thegroupByfunction as a secondcontextargument ({ toolUIs }), and the helper reads it to resolve the registry-driven cases; MCP-app calls are detected from the part alone.- The
"mcp-app"key ongroupPartByTypeis deprecated in favor of"standalone-tool-call"(a superset). It still works for back-compat.
The shadcn
thread.tsxtemplate is updated to use"standalone-tool-call": []in place of"mcp-app": []. -
Updated dependencies [
1315789,299d448,4429aa3,e76611f,76f7d16,eef724e,2dec3ae,fcb6baf,c4d3eea,331f2f7]:- assistant-stream@0.3.18
- @assistant-ui/core@0.2.8
- @assistant-ui/store@0.2.13
- @assistant-ui/tap@0.5.14
- assistant-cloud@0.1.30
0.14.11
Patch Changes
- #4125
e639a11- chore: drop tracker-behaviour explainer comments left behind in satellite runtimes (@Yonom)
0.14.10
Patch Changes
-
#4118
a6e0653- feat(core): build a client-side tool-invocations pipeline directly intouseExternalStoreRuntime. Tool-call parts in messages now firestreamCall/executeautomatically for any external-store runtime that opts in. Opt in per-adapter viaunstable_enableToolInvocations: true(off by default — most external-store runtimes either run tools server-side or already wire their own client-side dispatch path; double-firing is the risk). The_store.isLoadingflag signals when initial history is loaded: snapshots observed whileisLoading === trueare treated as historical (no fire), matching the contract that callers likeimportExternalStatealready rely on. Six in-tree runtimes (useAssistantTransportRuntime,useAISDKRuntime,useLangGraphRuntime,useStreamRuntime,useAgUiRuntime,useAdkRuntime) are migrated to the embedded tracker; the standaloneuseToolInvocationsReact hook is removed. AddsExternalStoreAdapter.setToolStatusesso adapters can mirror the tracker's per-tool-call status into local React state for converter metadata. Auto-aborts in-flight tool calls on new turns (append()withstartRun,startRun()) so a tool that finishes after the user moves on can no longer feed a stale result into the next turn. (@Yonom) -
Updated dependencies [
7395092,a6e0653,cabfc71]:- @assistant-ui/core@0.2.7
- @assistant-ui/tap@0.5.13
0.14.9
Patch Changes
-
#4120
372d4f0- feat: simplifyMessagePrimitive.GroupedPartsAPI and addgroupPartByTypehelper. (@Yonom)- New
groupPartByType({ ... })helper builds agroupByfrom apart.type → group-key pathlookup. The map keys are typed againstPartState["type"](autocomplete + typo rejection), missing keys leave the part ungrouped, and the returned function carries an internal memo fingerprint so the tree survives unrelated re-renders even when reconstructed inline. - Special map key
"mcp-app"matches tool-call parts that point at an assistant-ui MCP app resource (ui://...). It takes precedence over the"tool-call"entry for those parts, so MCP apps can be routed separately (e.g. rendered outside a chain-of-thought wrapper). groupBysignature simplified from(part, index, parts) => string | string[] | null | undefinedto(part) => readonly \group-${string}`[] | null. The 2nd/3rd args were unused in practice. Arrays are required (no bare-string shorthand);nullis accepted as an alias for[]` to soften the migration.- Internal memoization now uses the helper's memo fingerprint when present, otherwise rebuilds the tree per render (O(n), cheap). The previous "pass a stable reference" advice is dropped — inline
groupByis fine. - Docs and examples updated to lead with
groupPartByType. ThegetMcpAppFromToolPartbranch inpackages/uiswitches to"mcp-app": []via the helper.
- New
-
#4107
32ae846- feat: surface AI SDK v6 tool approvals as a first-classrespondToApprovalprop on tool components. tool-call parts in theapproval-requestedstate now carrypart.approval = { id, isAutomatic? }; tool components callrespondToApproval({ approved, reason? })to ack the gate without threadingchatHelpersthrough application context. also fixes a transientrequires-actionflicker for theapproval-respondedstate and tightens the external-message converter so interrupt vs pending tool calls are distinguished by an actualinterrupt/approvalfield rather than byresult === undefined. (@okisdev) -
Updated dependencies [
372d4f0,d4f1db4,32ae846]:- @assistant-ui/core@0.2.6
- assistant-stream@0.3.17
0.14.8
Patch Changes
-
#4093
b02b701- feat(react):unstable_insertNewlineOnTouchEnteronComposerPrimitive.Input(@okisdev)When set, plain Enter on a touch-primary device — detected via the
(pointer: coarse) and (not (any-pointer: fine))media query — inserts a newline instead of submitting. Messages then dispatch only via the explicit Send button, matching the chat-input convention used by WhatsApp, Slack, Discord, iMessage, ChatGPT, and Claude.ai, and avoiding the consumer-side caret-aware re-insertion dance the previous workaround required.Orthogonal to
submitMode: only takes effect whensubmitModeresolves to"enter"(the default). A tablet paired with a hardware keyboard can still submit viasubmitMode="ctrlEnter"(Cmd/Ctrl+Enter), andsubmitMode="none"is unchanged.<ComposerPrimitive.Input placeholder="Ask anything..." unstable_insertNewlineOnTouchEnter />Stays
unstable_until we have enough field signal to flip the behavior on by default. -
#3967
0a0c306- feat(core, react): addMessagePrimitive.GenerativeUIprimitive (@samdickson22)A new first-class primitive for rendering agent-described React UI from a JSON spec, with a consumer-provided component allowlist as the security boundary.
The agent emits a new
generative-uimessage part containing a tree of components by name;MessagePrimitive.GenerativeUIwalks the spec and resolves each name against the registry you pass in. Unknown names throw a typedGenerativeUIRenderError(or invoke the optionalFallback). Composes withMessagePrimitive.Partsvia the newcomponents.generativeUIoption, and supports streaming partial specs.<MessagePrimitive.Parts components={{ generativeUI: { components: { Card, Button } }, }} /> -
#4099
f2ec01c- feat(core, react): opt-out of auto-unarchive when switching threads (@adityamohta)switchToThread(andThreadListItemRuntime.switchTo) now accept an optional{ unarchive?: boolean }argument. The default remainstrue, preserving the existing behavior of auto-unarchiving an archived thread when it becomes the main thread. Passunarchive: falseto keep the thread archived after switching — useful when the UI lets users preview an archived conversation without restoring it.// existing behavior — archived thread becomes regular await threadList.switchToThread(threadId); // new — keep status as archived await threadList.switchToThread(threadId, { unarchive: false }); // same option on the item runtime await threadListItem.switchTo({ unarchive: false }); -
Updated dependencies [
13a12c4,0a0c306,6a0ecb2,e4634a5,325de4c,01244a5,f2ec01c,1e21076]:- assistant-stream@0.3.16
- @assistant-ui/core@0.2.5
- assistant-cloud@0.1.29
- safe-content-frame@0.0.20
- @assistant-ui/store@0.2.12
- @assistant-ui/tap@0.5.12
0.14.7
Patch Changes
-
#4073
44ac459- fix(react|useSmooth): render-phase resync of displayed text on part change (@Yonom)Drop one frame of stale text after a thread switch by resyncing
displayedTextin render when the part instance flips ortextbreaks its streaming-append continuity, instead of waiting for the post-commit effect. -
Updated dependencies [
221d320]:- @assistant-ui/core@0.2.4
0.14.6
Patch Changes
-
#4023
94548fa- docs: add React JSDoc and deprecation notices for primitive and tool APIs (@AVGVSTVS96) -
#3513
8b6fc88- fix: guardnavigator.clipboardavailability and swallow write rejections inActionBarPrimitive.Copy. Previously, copy clicks in SSR, non-HTTPS contexts, or older browsers without the Clipboard API threw aReferenceError, and permission-denied rejections surfaced as unhandled promise rejections. The web copyToClipboard implementation in@assistant-ui/reactnow early-rejects when the API is unavailable, anduseActionBarCopyin@assistant-ui/coresilently absorbs the rejection so the rest of the UI is unaffected. (@JustAnOkapi) -
#4040
b481ec5- fix:useExternalStoreRuntimeno longer leaves phantom assistant siblings when the external store swaps a message id between syncs (e.g. AI SDK v6useChatreplacing a client-generated id with a server-provided id mid-stream, surfacing asBranchPickershowing2/2on a turn the user never branched). Themessages-array sync path now diffs against the previous sync and removes ids that disappeared, matching themessageRepositorypath's snapshot semantics. Closes #4037. (@okisdev) -
#4063
8f0dbb8- fix thread initialization timing race which causedscrollToBottomOnInitializeto fail inuseLocalRuntime(@AVGVSTVS96) -
#3958
7a8bf26- refactor: hoistMessagePartPrimitiveInProgressto@assistant-ui/core/reactso@assistant-ui/react,@assistant-ui/react-ink, and other distributions can share the same implementation.@assistant-ui/react'sMessagePartPrimitive.InProgressis unchanged for callers; it now re-exports from core. (@ShobhitPatra) -
#4050
693922b- fix(x-buildutils): include localtypes/intypeRootsso x-buildutils itself can resolve its ambientbrowser-processtypes (@Yonom)feat(react): re-export
Unstable_DirectiveFormatter,Unstable_DirectiveSegment,Unstable_TriggerItem, andunstable_defaultDirectiveFormatterfrom@assistant-ui/coreso downstream packages don't need to depend on@assistant-ui/coredirectly -
Updated dependencies [
845c7c1,db721df,94548fa,94548fa,94548fa,8b6fc88,179895f,7a8bf26,3b2bbce]:- assistant-cloud@0.1.28
- @assistant-ui/store@0.2.11
- assistant-stream@0.3.15
- @assistant-ui/core@0.2.3
0.14.5
Patch Changes
- Accept the MCP-UI
2026-01-26method names in the MCP App bridge (e.g.ui/notifications/size-changed,ui/request-display-mode,ui/open-link,ui/message). Widgets built with the current xmcp host-bridge emit these names; previously the host silently ignored them, leaving features like auto-resize broken (iframe never received a height change fromonSizeChange).
0.14.4
Patch Changes
-
#4033
552ffb0- feat(react): exportgetMcpAppFromToolPartso hosts can detect MCP-app tool parts (@Yonom) -
Updated dependencies []:
- safe-content-frame@0.0.19
0.14.3
Patch Changes
- #4031
30f0357- feat(react): clamp MCP app auto-resize height to a configurable max (default 800px) (@Yonom)
0.14.2
Patch Changes
-
#4024
19d4d94- feat: add native MCP Apps renderer —McpAppRenderercomposes intoToolsto render MCP UI resources inline in chat over a JSON-RPC postMessage bridge onSafeContentFrame. Adds anmcpfield toToolCallMessagePartand forwardscallProviderMetadata.mcp.appthrough the AI SDK message converter. (@Yonom) -
#4022
4c3eaa1- fix(composer): apply WAI-ARIA combobox attributes to the textarea while a trigger popover is open (@okisdev)Unstable_TriggerPopoverrendered the listbox half of the WAI-ARIA editable combobox pattern, but the focused element (the textarea) lacked the corresponding combobox attributes. screen readers had no way to announce that an autocomplete was open or which item was highlighted.ComposerPrimitive.Inputnow reads the active popover descriptor fromTriggerPopoverRootand appliesaria-controls,aria-expanded,aria-haspopup="listbox", andaria-activedescendantto the textarea while a popover is open. attributes are removed when the popover closes. consumers usingComposerPrimitive.Inputoutside aTriggerPopoverRootare unaffected. -
#4020
03694bd- fix(composer): select highlighted item on Tab in trigger popover (@serhiizghama)ComposerPrimitive.Unstable_TriggerPopoveronly accepted the highlighted entry on Enter. Tab fell through to the underlying textarea, moving focus out of the composer or inserting a tab character. This diverged from the autocomplete convention used in CLIs, IDEs, command palettes, GitHub, Slack, Discord, and Notion, where Tab accepts the highlighted suggestion.Tab now mirrors Enter and selects the highlighted item or category. Shift+Tab still passes through so native focus traversal keeps working.
-
Updated dependencies [
19d4d94]:- @assistant-ui/core@0.2.2
0.14.1
Patch Changes
-
#3984
35d0146- feat(composer): exposecanSendstate andisSendDisabledadapter input (@okisdev)ComposerState.canSend(read-only) is now derivable viauseAuiState((s) => s.composer.canSend)and<AuiIf condition={(s) => s.composer.canSend}/>. it reflects whether the composer is in a state where send is permitted; cross-thread gating (isRunning,capabilities.queue) continues to be layered on top byuseComposerSend.ExternalStoreAdapter.isSendDisabledis a new optional input alongsideisDisabled. whentrue, the thread composer's input remains usable butsend()becomes a no-op andcanSendisfalse. use this to gate sending on external React state (e.g. while tool config is loading) without disabling the input itself. edit composers (saving in-progress message edits) intentionally ignore this flag, since it is a thread-scoped gate.BaseComposerRuntimeCore.send()now early-returns when!canSend, so theCmd/Ctrl+Shift+Entersteer hotkey, form-requestSubmit(), and directaui.composer().send()calls are all gated by the same flag. the same gating is wired through the tap-basedExternalThreadclient via a newisSendDisabledprop onExternalThreadProps. -
#4008
fa4510a- feat: support multi-modal tool results viatoModelOutput(@okisdev)frontend tools can now project their execution output into multi-modal model content (text + image / pdf / arbitrary file parts), aligning with the AI SDK v6
toModelOutputcallback. previously, tool results were always serialized as a single JSON value, so a "read pdf" style tool had no way to send the PDF back to a multi-modal model.assistant-streamexports a newToolModelContentParttype ({ type: "text", text } | { type: "file", data, mediaType, filename? }) and aToolModelOutputFunction<TArgs, TResult>callback type.Tool.toModelOutputis wired throughunstable_runPendingToolsandToolExecutionStream, attaching the resultingmodelContentto thetool-callpart on the assistant message.@assistant-ui/corere-exportsToolModelContentPartand adds an optionalmodelContent?: readonly ToolModelContentPart[]field onToolCallMessagePart. existing tools and renderers are unchanged.@assistant-ui/react-ai-sdk'sfrontendTools(...)helper now also registers atoModelOutputon each forwarded tool. it transparently unwraps an envelope thatuseAISDKRuntimewrites when a frontend-executed tool producedmodelContent, turning it into AI SDK's{ type: "content", value: [...] }output. plain (non-envelope) outputs fall back to the existing{ type: "text" | "json", value }shape, so behavior for tools withouttoModelOutputis unchanged.
route handlers that adopt
toModelOutputalso need to passtoolstoconvertToModelMessages(this is the AI SDK's documented pattern):const aiSDKTools = { ...frontendTools(tools ?? {}) }; streamText({ messages: await convertToModelMessages(messages, { tools: aiSDKTools }), tools: aiSDKTools, });templates and existing examples are unchanged. they keep the simpler
convertToModelMessages(messages)form because none of the tools they ship with usetoModelOutput. the new tools guide page documents how to opt in.reserved key. when a frontend tool defines
toModelOutput, its result is persisted in the AI SDK chat as{ __aui_modelContent: ToolModelContentPart[], value: <your result> }. tools must not return objects whose top-level key is literally__aui_modelContent, orconvertMessagewill misread the result. the prefix is namespaced for this reason.read/write compatibility for persisted threads. the envelope is recognized by
@assistant-ui/react-ai-sdkfrom this version onward. if you persist UI messages and read them from multiple environments, upgrade every reader before any writer starts producingtoModelOutput; otherwise older readers will treat the envelope object as theresultand break the affected toolrenderfunctions. -
#3634
9c3d24d- Support AI SDKsource-documentparts by preserving them as assistant-ui (@sicko7947) document source message parts across conversion and cloud serialization, including the legacy React cloud encoder. -
Updated dependencies [
9ecda1d,35d0146,fa4510a,c9dd16c,dea8bc7,9c3d24d]:- assistant-stream@0.3.14
- @assistant-ui/core@0.2.1
0.14.0
Minor Changes
-
#3970
040d469- chore: drop APIs deprecated in v0.11/v0.12 (@Yonom)See the v0.14 migration guide for the full removal list and replacements.
useAssistantApi/useAssistantState/useAssistantEvent/AssistantIfremoved (useuseAui/useAuiState/useAuiEvent/AuiIf).getExternalStoreMessage(singular) removed (usegetExternalStoreMessages).MessageState.submittedFeedbackremoved (usemessage.metadata.submittedFeedback).ThreadRuntime.startRun(parentId)positional overload removed (pass{ parentId }).ThreadRuntime.unstable_loadExternalStateremoved (useimportExternalState).ThreadRuntime.unstable_resumeRunremoved (useresumeRun).ThreadRuntime.getModelConfigremoved (usegetModelContext).AssistantRuntime.threadList/switchToNewThread/switchToThread/registerModelConfigProvider/resetremoved (usethreads/threads.switchToNewThread/threads.switchToThread/registerModelContextProvider/thread.reset).ChatModelRunOptions.configremoved (usecontext).useLocalThreadRuntimealias removed (useuseLocalRuntime).unstable_useRemoteThreadListRuntime/unstable_useCloudThreadListAdapter/unstable_RemoteThreadListAdapter/unstable_InMemoryThreadListAdapteraliases removed (drop theunstable_prefix).react-langgraphonSwitchToThreadremoved (useload).toAISDKTools/getEnabledToolsremoved (usetoToolsJSONSchemafromassistant-stream).
Patch Changes
- Updated dependencies [
040d469]:- @assistant-ui/core@0.2.0
0.13.0
Minor Changes
-
#3908
d864d07- fix: robust top-turn anchoring with viewport-owned reserve (@AVGVSTVS96)Migration:
- Remove
ThreadPrimitive.ViewportSlackfrom your tree. It has been removed from the public API because top-anchor target registration is now handled automatically byMessagePrimitive.RootwhenturnAnchor="top". - If you customized
fillClampThreshold/fillClampOffsetonThreadPrimitive.ViewportSlackorMessagePrimitive.Root, replace them withtopAnchorMessageClamponThreadPrimitive.Viewport:
// Before, either: <MessagePrimitive.Root fillClampThreshold="10em" fillClampOffset="6em" /> // or: <ThreadPrimitive.ViewportSlack fillClampThreshold="10em" fillClampOffset="6em"> ... </ThreadPrimitive.ViewportSlack> // After <ThreadPrimitive.Viewport turnAnchor="top" topAnchorMessageClamp={{ tallerThan: "10em", visibleHeight: "6em" }} > ... </ThreadPrimitive.Viewport> - Remove
Patch Changes
-
#3924
801b9a6- fix(react): recover ComposerPrimitive.Input from dropped compositionend (@nitnizzie)reset
compositionRefwhen the next change event reportsisComposing: falseso a droppedcompositionend(chromium dead-key layouts, mid-composition focus loss) can no longer freeze the input. additionally callsetTextduring composition so React 19's stricter controlled-input reconciliation does not reset the textarea mid-IME. fixes #3923. -
#3953
7098bab- Add cursor-based pagination to the thread list.RemoteThreadListAdapter.list()accepts an optional{ after }cursor and may returnnextCursoron the response. The runtime exposesloadMore(),hasMore, andisLoadingMorethrough both the legacyThreadListRuntimeAPI and the tap-onlyaui.threads()path;ThreadListRuntimeCore.loadMore?(),hasMore?, andisLoadingMore?are optional, so non-paginating cores (local, external-store, single-thread, in-memory) remain conformant. (@okisdev)@assistant-ui/reactships a matchingThreadListPrimitive.LoadMorebutton built oncreateActionButton, plus auseThreadListLoadMoreprimitive hook. Consumers wanting anIntersectionObserversentinel can reads.threads.hasMore/isLoadingMorefromuseAuiStateand callaui.threads().loadMore()directly.In-flight
loadMore()calls dedup via a single promise. The existing_loadGenerationcounter drops stale append callbacks when areload()interleaves aloadMore(). The loadMore reducer captures the active adapter so a mid-flight adapter swap cannot leak a stale page. Empty-stringnextCursoris normalised toundefined.reload()pre-clears the cursor so consumers readinghasMoredirectly during a reload do not observe a stale value.Adapter rejections are surfaced via
console.errorin both the initial-load andloadMorepaths, matching the pattern inRemoteThreadListHookInstanceManageranduseToolInvocations. -
#3954
aa6e071- fix: keep active top-anchored messages visible to layout (@AVGVSTVS96) -
#3952
df7eb3e- perf: cut per-message overhead in long threads (@okisdev)Two
MessagePrimitive.Rootchanges remove work that scaled with message count:- Defer the
parseCssLengthcall inside the top-anchor target ref to the next animation frame. The synchronousgetComputedStyleread previously forced a full-tree layout during the bulk-mount of a long thread (a 335 ms forced reflow at 100 messages in our trace). Deferring past first paint lets the browser do the layout naturally. - Split the root into a default and a top-anchor path. Threads using the default
turnAnchor="bottom"no longer subscribe to the top-anchoruseAuiStateselectors per message.
The only observable change is that top-anchor target registration is now async by one frame.
Note:
@assistant-ui/ui(private, copy-into-project) gains acontent-visibility: autodefault on message wrappers in the same PR. On a cold load with pre-existing history taller than the viewport, the placeholder-basedscrollHeightcan transiently disagree with the at-bottom check until off-screen messages are measured.useOnResizeContentresyncs within a frame, and the auto-scroll path uses an explicit "scrolling" flag rather than trustingisAtBottomalone, so run-start scrolling is unaffected. - Defer the
-
#3948
f4a693e- fix(core): restore adapter context flow through RemoteThreadListAdapter.unstable_Provider (@okisdev)PR #3891 hoisted the runtime binder out of
RemoteThreadListAdapter.unstable_Providerso that user-supplied loading / Suspense wrappers no longer strand the runtime binding. as a side effect, anyRuntimeAdapterProvidermounted insideunstable_Provider(history, attachments — whatuseCloudThreadListAdapterandLocalStorageThreadListAdapterboth do) ended up below the binder in the render tree.useRuntimeAdapters()reads context from above, so the runtime hook sawnullanduseExternalHistoryearly-returned.for
useChatRuntime({ cloud })setups this silently disabled message persistence (POST /v1/threads/:id/messages), thread history loading, run telemetry (POST /v1/runs), and forced cloud attachments to fall back tovercelAttachmentAdapter's base64 inlining. the same regression hitsuseA2ARuntime,useAgUiRuntime, anduseLocalRuntimewhenever they are wrapped byuseRemoteThreadListRuntimewith a similar adapter.restore the pre-#3891 layering: the binder once again renders inside
unstable_Provider, so the runtime hook reads any context the Provider injects. theProviderRenderDetectorwarning introduced by #3891 is kept and now fires whenever Provider gateschildrenbehind suspense, loading state, oruseEffect(the original #3678 case), pointing the user at the synchronous-children rule. no API surface changes; first-party adapters keep working unchanged. -
Updated dependencies [
7098bab,b090acb,5fdf17e]:- @assistant-ui/core@0.1.18
- assistant-stream@0.3.13
- @assistant-ui/store@0.2.10
- @assistant-ui/tap@0.5.11
0.12.28
Patch Changes
-
#3853
6a919c1- feat: add<MessagePrimitive.GroupedParts>for hierarchical adjacent grouping of message parts (@Yonom)Introduces a new primitive that coalesces adjacent parts into groups via a user-supplied
groupBy(part) → "group-…" | readonly "group-…"[] | null. Adjacent parts sharing a key-path prefix coalesce up to that prefix; ungrouped parts render as direct leaves.The render function takes
{ part, children }and dispatches on a singleswitch (part.type)."group-…"cases wrapchildren(the recursively-rendered subtree); real part types ("text","tool-call","reasoning", …) render the part directly with the sameEnrichedPartStateenrichments (toolUI,addResult,resume,dataRendererUI) that<MessagePrimitive.Parts>provides.GroupPartis intentionally minimal:{ type, status, indices }. The render function is invoked once per group node and once per individual leaf part, so users never have to nest a<MessagePrimitive.Parts>call.The
groupByreturn type is constrained to`group-${string}`so the unified switch can never collide with a real part type. The component infers a literalTKeyper call site, sopart.typenarrows to the exact union of group keys plus part types.For leaf parts,
childrenis a sentinel that throws if rendered — accidental fall-through likedefault: return children;errors loudly instead of silently rendering nothing. Returningnullfrom a leaf case is fine.Deprecates the legacy
components.ToolGroup,components.ReasoningGroup, andcomponents.ChainOfThoughtprops on<Parts>, and<MessagePrimitive.Unstable_PartsGrouped>for adjacent grouping — all still work for backwards compatibility. -
Updated dependencies [
0bbf5dd,98f165c,62ec5bd,6a919c1]:- @assistant-ui/core@0.1.17
0.12.27
Patch Changes
-
Updated dependencies [
549037a,005f83f,976aec5,25b97d5,2008fc9,88fcd35]:- @assistant-ui/core@0.1.16
- @assistant-ui/store@0.2.9
- @assistant-ui/tap@0.5.10
0.12.26
Patch Changes
-
#3873
c56f98f- feat(core): addreload()method onThreadListRuntimeandaui.threads()that re-invokes the remote adapter'slist()and refreshes the thread list. Use this after asynchronous auth (e.g. OIDC, better-auth) completes to recover from an initial load that ran before the authenticated user was available. A generation counter ensures a mid-flight response from a superseded load cannot overwrite a newer reload's state. (@okisdev) -
#3829
9aa5410- fix: add render prop support to dropdown menu primitives (@AVGVSTVS96) -
#3583
a1f84ae- fix: process dropped attachments in parallel (@samdickson22)Align drag-and-drop attachment handling with paste so multiple files appear together instead of appearing one by one.
-
#3870
b4fde97- fix(composer): sync mouse hover with keyboard highlight inTriggerPopover. Items and categories now updatehighlightedIndexon mouse move, keepingdata-highlighted,aria-selected, andaria-activedescendantconsistent with the hovered element. A newhighlightIndex(index)method is exposed on the popover scope. Closes #3868. (@okisdev) -
#3831
d53ff4f- chore: remove decorative separator comments across packages (@okisdev) -
#3834
17958c9- refactor: unify mention/slash under behavior sub-primitives; delete Mention/SlashCommand aliases and theexecutefield onUnstable_TriggerItem; split TriggerPopoverResource; rename react-lexicalMentionNode/MentionPlugin/MentionChipProvider/mentionChipprop toDirectiveNode/DirectivePlugin/DirectiveChipProvider/directiveChip; fix IME/Unicode/copy-paste/undo bugs. Breaking (Unstable_APIs): replaceonSelect={{type:"insertDirective",formatter}}with<Unstable_TriggerPopover.Directive formatter={...}>; replaceonSelect={{type:"action",handler}}with<Unstable_TriggerPopover.Action onExecute={...}>. Renameunstable_useToolMentionAdapter→unstable_useMentionAdapterwith newitems/categories/includeModelContextToolsoptions.unstable_useSlashCommandAdapternow returns{ adapter, action }—executestays in the hook closure instead of on the item. Rename CSS classaui-mention-chip→aui-directive-chipand attributesdata-mention-*→data-directive-*. (@okisdev) -
#3827
477fa8a- feat: unify mention and slash command primitives underUnstable_TriggerPopover(@okisdev) -
Updated dependencies [
c7a274e,ce865bc,ca8f526,c56f98f,974d15e,4b19d42,055dda5,da0f598,d53ff4f,20f8404,17958c9]:- @assistant-ui/core@0.1.15
- assistant-stream@0.3.12
- assistant-cloud@0.1.27
- @assistant-ui/store@0.2.8
- @assistant-ui/tap@0.5.9
0.12.25
Patch Changes
- c988db8: chore: update dependencies
- Updated dependencies [f20b9ca]
- Updated dependencies [c988db8]
- @assistant-ui/core@0.1.14
- assistant-stream@0.3.11
- assistant-cloud@0.1.26
- @assistant-ui/store@0.2.7
- @assistant-ui/tap@0.5.8
0.12.24
Patch Changes
-
42bc640: feat: support edit lineage and startRun in EditComposer send flow
- Add
SendOptionswithstartRunflag tocomposer.send() - Expose
parentIdandsourceIdonEditComposerState - Add
EditComposerRuntimeCoreinterface extendingComposerRuntimeCore - Bypass text-unchanged guard when
startRunis explicitly set ComposerSendOptionsextendsSendOptionsfor consistent layering
- Add
-
e82726c: fix(react): forward viewport slack props from MessagePrimitive.Root
-
376bb00: chore: update dependencies
-
87e7761: feat: generalize mention system into trigger popover architecture with slash command support
- Introduce
ComposerInputPluginprotocol to decouple ComposerInput from mention-specific code - Extract generic
TriggerPopoverResourcefromMentionResourcesupporting multiple trigger characters - Add
Unstable_TriggerItem,Unstable_TriggerCategory,Unstable_TriggerAdaptergeneric types - Add
Unstable_SlashCommandAdapter,Unstable_SlashCommandItemtypes - Add
ComposerPrimitive.Unstable_TriggerPopoverRootand related primitives - Add
ComposerPrimitive.Unstable_SlashCommandRootand related primitives - Add
unstable_useSlashCommandAdapterhook for building slash command adapters - Refactor
MentionResourceas thin wrapper aroundTriggerPopoverResource - Alias
Unstable_MentionItem/Unstable_MentionAdapterto generic trigger types - Update
react-lexicalKeyboardPluginto use plugin protocol - All existing
Unstable_Mention*APIs remain unchanged
- Introduce
-
Updated dependencies [42bc640]
-
Updated dependencies [376bb00]
-
Updated dependencies [87e7761]
- @assistant-ui/core@0.1.13
- assistant-cloud@0.1.25
- @assistant-ui/tap@0.5.7
0.12.23
Patch Changes
- a8bf84b: feat(core): expose
getLoadThreadsPromise()onThreadListRuntimepublic API - bdbd024: fix(core): set EMPTY_THREAD_CORE.isLoading to true to prevent Welcome page flash during thread switch
- 0958070: feat(core): add
initialThreadIdoption touseRemoteThreadListRuntime - Updated dependencies [de29641]
- Updated dependencies [a8bf84b]
- Updated dependencies [5fd5c3d]
- Updated dependencies [2c5cd97]
- Updated dependencies [ec50e8a]
- @assistant-ui/core@0.1.11
- assistant-stream@0.3.10
0.12.22
Patch Changes
-
6554892: feat: add useAssistantContext for dynamic context injection
Register a callback-based context provider that injects computed text into the system prompt at evaluation time, ensuring the prompt always reflects current application state.
-
d726499: fix: unify assistant-transport request body format with AssistantChatTransport
callSettingsandconfigare now sent as nested objects in the request body, aligned with the AI SDK transport. The old top-level spread is preserved for backward compatibility but deprecated and will be removed in a future version. -
876f75d: feat: add interactable state persistence
Add persistence API to interactables with exportState/importState, debounced setPersistenceAdapter, per-id isPending/error tracking, flush() for immediate sync, and auto-flush on component unregister.
-
bdce66f: chore: update dependencies
-
c362685: feat: add RealtimeVoiceAdapter with VoiceOrb UI, mode/volume support, and ElevenLabs/LiveKit examples
-
4abb898: refactor: align interactables with codebase conventions
- Rename
useInteractabletouseAssistantInteractable(registration only, returns id) - Add
useInteractableStatehook for reading/writing interactable state - Remove
makeInteractableand related types - Rename
UseInteractableConfigtoAssistantInteractableProps - Extract
buildInteractableModelContextfromInteractablesresource - Add
with-interactablesexample to CLI
- Rename
-
209ae81: chore: remove aui-source export condition from package.json exports
-
50b3100: feat: add render prop support to all primitives for shadcn "Base" component library compatibility
-
af70d7f: feat: add useToolArgsStatus hook for per-prop streaming status
Add a convenience hook that derives per-property streaming completion status from tool call args using structural partial JSON analysis.
-
Updated dependencies [dffb6b4]
-
Updated dependencies [6554892]
-
Updated dependencies [9103282]
-
Updated dependencies [876f75d]
-
Updated dependencies [bdce66f]
-
Updated dependencies [4abb898]
-
Updated dependencies [209ae81]
-
Updated dependencies [2dd0c9f]
-
Updated dependencies [af70d7f]
- assistant-stream@0.3.9
- @assistant-ui/core@0.1.10
- assistant-cloud@0.1.24
- @assistant-ui/store@0.2.6
- @assistant-ui/tap@0.5.6
0.12.21
Patch Changes
-
3227e71: feat: add interactables with partial updates, multi-instance, and selection
useInteractable(name, config)hook andmakeInteractablefactory for registering AI-controllable UIInteractables()scope resource with auto-generated update tools and system prompt injection- Partial updates — auto-generated tools use partial schemas so AI only sends changed fields
- Multi-instance support — same name with different IDs get separate
update_{name}_{id}tools - Selection —
setSelected(true)marks an interactable as focused, surfaced as(SELECTED)in system prompt
-
52403c3: chore: update dependencies
-
Updated dependencies [781f28d]
-
Updated dependencies [3227e71]
-
Updated dependencies [3227e71]
-
Updated dependencies [0f55ce8]
-
Updated dependencies [83a15f7]
-
Updated dependencies [52403c3]
-
Updated dependencies [ffa3a0f]
- @assistant-ui/core@0.1.9
- assistant-stream@0.3.8
- assistant-cloud@0.1.23
- @assistant-ui/store@0.2.5
- @assistant-ui/tap@0.5.5
0.12.20
Patch Changes
-
28a987a: feat: SingleThreadList resource refactor: attachTransformScopes should mutate the scopes instead of cloning it
-
736344c: chore: update dependencies
-
ff3be2a: Add @-mention system with cursor-aware trigger detection, keyboard navigation, search, and Lexical rich editor support
-
70b19f3: feat: add queue.clear callback, route thread.append through queue
- Add
clear(reason: "edit" | "reload" | "cancel-run")toExternalThreadQueueAdapter thread.append()now routes throughqueue.enqueuewhen a queue adapter is present- Cancel, edit, and reload operations call
queue.clearwith the appropriate reason
- Add
-
70b19f3: feat: add native queue and steer support
- Add
queueadapter toExternalThreadPropsfor runtimes that support message queuing - Add
QueueItemPrimitive.Text,.Steer,.Removeprimitives for rendering queue items - Add
ComposerPrimitive.Queuefor rendering the queue list within the composer - Add
ComposerSendOptionswithsteerflag tocomposer.send() - Add
capabilities.queuetoRuntimeCapabilities ComposerPrimitive.Sendstays enabled during runs when queue is supported- Cmd/Ctrl+Shift+Enter hotkey sends with
steer: true(interrupt current run) - Add
queueItemscope toScopeRegistry - Add
queuefield toComposerStateandqueueItem()method toComposerMethods
- Add
-
c71cb58: chore: update dependencies
-
Updated dependencies [1406aed]
-
Updated dependencies [9480f30]
-
Updated dependencies [28a987a]
-
Updated dependencies [736344c]
-
Updated dependencies [ff3be2a]
-
Updated dependencies [70b19f3]
-
Updated dependencies [c71cb58]
- @assistant-ui/core@0.1.8
- @assistant-ui/store@0.2.4
- assistant-stream@0.3.7
- @assistant-ui/tap@0.5.4
0.12.19
Patch Changes
- 7ecc497: feat: children API for primitives with part.toolUI, part.dataRendererUI, and MessagePrimitive.Quote
- Updated dependencies [7ecc497]
- @assistant-ui/core@0.1.7
0.12.18
Patch Changes
-
1ed9867: feat: move resumeRun to stable
-
427ffaa: refactor: useRemoteThreadListRuntime no longer marked unstable
-
349f3c7: chore: update deps
-
02614aa: feat: add multi-agent support
ReadonlyThreadProviderandMessagePartPrimitive.Messagesfor rendering sub-agent messagesassistant-stream: addmessagesfield totool-resultchunks,ToolResponseLike, andToolCallParttypes, enabling sub-agent messages to flow through the streaming protocol
-
642bcda: Add
quote.tsxregistry components andinjectQuoteContexthelper -
Updated dependencies [1ed9867]
-
Updated dependencies [427ffaa]
-
Updated dependencies [349f3c7]
-
Updated dependencies [02614aa]
-
Updated dependencies [6cc4122]
-
Updated dependencies [642bcda]
- @assistant-ui/core@0.1.6
- assistant-stream@0.3.6
- assistant-cloud@0.1.22
- @assistant-ui/store@0.2.3
- @assistant-ui/tap@0.5.3
0.12.17
Patch Changes
- 990e41d: refactor: code sharing between the multiple platforms
- Updated dependencies [990e41d]
- @assistant-ui/core@0.1.5
0.12.16
Patch Changes
- 5ae74fe: fix: prevent double-submit when ComposerPrimitive.Send child has type="submit"
- 8ed9d6f: Refactor React Native component API: move shared runtime logic (remote thread list, external store, cloud adapters, message converter, tool invocations) into @assistant-ui/core for reuse across React and React Native
- Updated dependencies [5ae74fe]
- Updated dependencies [8ed9d6f]
- Updated dependencies [01bee2b]
- @assistant-ui/core@0.1.3
0.12.15
Patch Changes
- 07dcce0: fix(react): duplicate
toolCallIdparts when joining consecutive assistant snapshots in the external message converter. - a845911: chore: update dependencies
- bc40eaf: fix(react):
ActionBarMorePrimitivedisappearing whenActionBarPrimitive.Rootusesautohide="not-last"on non-last messages. - be23d74: fix(react): make
useToolInvocationsargs stream rewrites recover safely and avoid premature closure for non-executable client tools. - 1eb059c: fix(react): avoid crashing when external message conversion receives orphaned tool results without a matching tool call.
- Updated dependencies [a845911]
- assistant-cloud@0.1.21
- @assistant-ui/store@0.2.2
- @assistant-ui/tap@0.5.2
0.12.14
Patch Changes
- 03714af: fix: DataRenderers not in scope
- Updated dependencies [03714af]
- @assistant-ui/core@0.1.2
0.12.13
Patch Changes
- 17cf9a8: feat(telemetry): add reasoning/cached token usage across cloud reporting paths
- Updated dependencies [17cf9a8]
- assistant-cloud@0.1.20
0.12.12
Patch Changes
-
36ef3a2: chore: update dependencies
-
6692226: feat: support external source attachments in composer
addAttachment()now accepts either aFileor aCreateAttachmentdescriptor, allowing users to add attachments from external sources (URLs, API data, CMS references) without creating dummyFileobjects or requiring anAttachmentAdapter. -
c31c0fa: Extract shared React code (model-context, client, types, providers, RuntimeAdapter) into
@assistant-ui/core/reactsub-path so both@assistant-ui/reactand@assistant-ui/react-nativere-export from one source. -
1672be8: feat: bindExternalStoreMessage
-
28f39fe: Handle unknown attachment types with fallback component and unknown message part types with
console.warninstead of throwing -
3a1cb66: feat: assistant transport prepareRequestBody support
-
14769af: refactor: move RuntimeAdapter base logic to @assistant-ui/core; re-export missing core APIs from distribution packages
-
7c360ce: Update npm README
-
a638f05: refactor(react): target @assistant-ui/store for ScopeRegistry module augmentation
-
8a78cd2: fix: stabilize runtimeHook identity in useRemoteThreadListRuntime to avoid unnecessary option updates and thread state churn
-
Updated dependencies [a638f05]
-
Updated dependencies [28f39fe]
-
Updated dependencies [36ef3a2]
-
Updated dependencies [6692226]
-
Updated dependencies [c31c0fa]
-
Updated dependencies [fc98475]
-
Updated dependencies [374f83a]
-
Updated dependencies [fc98475]
-
Updated dependencies [1672be8]
-
Updated dependencies [14769af]
-
Updated dependencies [a638f05]
- @assistant-ui/core@0.1.1
- assistant-stream@0.3.4
- assistant-cloud@0.1.19
- @assistant-ui/store@0.2.1
- @assistant-ui/tap@0.5.1
0.12.11
Patch Changes
-
5bbe8a9: Fix rewritten streaming tool arguments in assistant transport by safely restarting tool-call arg streams without crashing, preserving logical tool call IDs, and preventing stale status cleanup after reset.
-
5e304ea: feat: client-side run telemetry reporting with
beforeReporthook -
546c053: feat(core): extract subscribable, utils, and model-context; add public/internal API split
-
a7039e3: feat(core): extract remote-thread-list and assistant-transport utilities to @assistant-ui/core
-
16c10fd: feat(core): extract runtime and adapters to @assistant-ui/core
-
98c3d54: feat(react): support custom components for "data" message parts
-
b181803: feat(core): introduce @assistant-ui/core package
Extract framework-agnostic core from @assistant-ui/react. Replace React ComponentType references with framework-agnostic types and decouple AssistantToolProps/AssistantInstructionsConfig from React hook files.
-
7836760: fix(assistant-cloud): expand joined messages for AI SDK v6 history export and telemetry reporting
-
9276547: fix: thread deletion crash "Entry not available in the store"
-
b65428e: refactor: thread().composer() now needs to be invoked
-
af5b085: feat(assistant-cloud): support MCP tool observability
-
61b54e9: Add message timing metadata:
AssistantMessageTimingtype, automatic timing tracking inAssistantMessageAccumulator,MessageTimingtype,useMessageTiming()hook, and client-side streaming timing for AI SDK runtime. -
a094c45: fix: add DataMessagePart to ThreadUserMessagePart for parity with ThreadAssistantMessagePart
-
4d7f712: feat(core): move runtime-to-client bridge to core/store for framework reuse
-
ecc29ec: feat(core): move scope types and client implementations to @assistant-ui/core/store
-
6e97999: feat(core): move store tap infrastructure to @assistant-ui/core/store
-
a247fc9: feat(assistant-cloud): allow save complete multi-step message
-
f414af9: fix: avoid stale thread metadata overwrite while streaming generated titles
-
b48912c: fix(react): smooth streaming behaviour to include first chunk
-
93910bd: Rename .tsx files to .ts where no JSX syntax is used
-
58a8472: feat: Add standalone AI SDK hooks for cloud persistence without assistant-ui
New
@assistant-ui/cloud-ai-sdkpackage withuseCloudChatanduseThreadshooks. Wraps AI SDK'suseChatwith automatic message persistence, thread management, and auto-title generation. -
Updated dependencies [b65428e]
-
Updated dependencies [d08a488]
-
Updated dependencies [b65428e]
-
Updated dependencies [5e304ea]
-
Updated dependencies [546c053]
-
Updated dependencies [a7039e3]
-
Updated dependencies [16c10fd]
-
Updated dependencies [40a67b6]
-
Updated dependencies [b65428e]
-
Updated dependencies [b181803]
-
Updated dependencies [b65428e]
-
Updated dependencies [6bd6419]
-
Updated dependencies [b65428e]
-
Updated dependencies [b65428e]
-
Updated dependencies [af5b085]
-
Updated dependencies [61b54e9]
-
Updated dependencies [4d7f712]
-
Updated dependencies [ecc29ec]
-
Updated dependencies [6e97999]
-
Updated dependencies [a247fc9]
-
Updated dependencies [b65428e]
-
Updated dependencies [93910bd]
-
Updated dependencies [60bbe53]
-
Updated dependencies [58a8472]
-
Updated dependencies [b65428e]
-
Updated dependencies [b65428e]
- @assistant-ui/tap@0.5.0
- assistant-cloud@0.1.18
- @assistant-ui/store@0.2.0
- @assistant-ui/core@0.1.0
- assistant-stream@0.3.3
0.12.10
Patch Changes
-
afaaf3b: fix: use bracket notation for process.env
-
afaaf3b: fix: duplicate key toolCallId error in HITL tools (#3197)
-
afaaf3b: fix(react): runConfig not applied when clicking Suggestion with send=true
-
afaaf3b: feat(react): Quote Selected Text primitives
Added new primitives and hooks for quoting selected text from messages:
SelectionToolbarPrimitive.Root- Floating toolbar that appears on text selection within a messageSelectionToolbarPrimitive.Quote- Button inside the floating toolbar to capture the selection as a quoteComposerPrimitive.Quote- Container for quote preview (renders only when quote is set)ComposerPrimitive.QuoteText- Displays the quoted textComposerPrimitive.QuoteDismiss- Button to clear the quoteuseMessageQuote()- Hook to read quote info from message metadataQuoteInfotype -{ text: string; messageId: string }ComposerRuntime.setQuote()- Programmatic API to set/clear quotesMessagePrimitive.Rootnow rendersdata-message-idattribute
-
51d24be: feat(react): add submitMode prop
Add submitMode prop to ComposerInput with three options: "enter" (default), "ctrlEnter", and "none". This controls keyboard submission behavior - "ctrlEnter" mode allows plain Enter to insert newlines for easier multi-line message composition, "none" disables keyboard submission entirely.
The existing submitOnEnter prop is now deprecated but still supported for backward compatibility.
-
afaaf3b: feat(assistant-transport): support editing messages
-
Updated dependencies [afaaf3b]
- @assistant-ui/tap@0.4.6
0.12.9
Patch Changes
- a088518: chore: update dependencies
- d8122cc: feat: ChainOfThought Layout API
- Updated dependencies [a088518]
- assistant-stream@0.3.2
- assistant-cloud@0.1.17
- @assistant-ui/store@0.1.6
- @assistant-ui/tap@0.4.5
0.12.8
Patch Changes
- 38f4a32: feat: ChainOfThoughtPrimitive
0.12.7
Patch Changes
- 77af8c3: fix: runtime not responsive if loaded under React StrictMode (critial bug)
- 9ef966a: fix(store): memoize the aui client instance
- Updated dependencies [77af8c3]
- Updated dependencies [9ef966a]
- @assistant-ui/tap@0.4.4
- @assistant-ui/store@0.1.5
0.12.6
Patch Changes
- 39fefec: feat: importExternalState API
0.12.5
Patch Changes
- d45b893: chore: update dependencies
- fe71bfc: feat: use enhanced tapSubscribableResource hook
- Updated dependencies [d45b893]
- Updated dependencies [fe71bfc]
- Updated dependencies [fe71bfc]
- assistant-stream@0.3.1
- assistant-cloud@0.1.16
- @assistant-ui/store@0.1.4
- @assistant-ui/tap@0.4.3
0.12.4
Patch Changes
- 86baaee: fix(react): devtools not register
- 3bbe318: fix: allow destructuring proxy methods (e.g.
addToolResult,resumeToolCall) - Updated dependencies [3bbe318]
- @assistant-ui/store@0.1.3
0.12.3
Patch Changes
- 07d1c65: fix: nesting assistant providers
- b591d72: feat: new tools API
- 59a338a: feat: åshowEmptyOnNonTextEnd
- acbaf07: feat: add framework-agnostic
toToolsJSONSchemaandtoGenericMessagesutilities toassistant-stream - c665612: fix: do not capture handleSendMessage errors
- 0371d72: feat: AssistantRuntimeProvider aui prop
- e8b3f34: feat: Suggestions API and Primitives
- Updated dependencies [07d1c65]
- Updated dependencies [acbaf07]
- Updated dependencies [5ab3690]
- Updated dependencies [0371d72]
- @assistant-ui/store@0.1.2
- assistant-stream@0.3.0
- @assistant-ui/tap@0.4.2
- assistant-cloud@0.1.15
0.12.2
Patch Changes
- 1ea3e28: feat(react): better error handling
- 8cbf686: fix: tap should run effects after remount
- a8be364: feat: log individual errors when throwing AggregateError
- 605d825: chore: update dependencies
- Updated dependencies [8cbf686]
- Updated dependencies [2e088eb]
- Updated dependencies [a8be364]
- Updated dependencies [605d825]
- Updated dependencies [fe15232]
- @assistant-ui/tap@0.4.1
- @assistant-ui/store@0.1.1
- assistant-stream@0.2.48
- assistant-cloud@0.1.14
0.12.1
Patch Changes
- 8672695: fix: race condition in RemoteThreadListRuntime causing app crash on thread deletion
0.12.0
Minor Changes
- 9314b36: feat: use @assistant-ui/store to power state management
Patch Changes
- 6eab31e: fix(react): handle tool argsText key reordering during streaming
- 083ed83: fix(cloud): serialize image and file parts across all formats
- 6511990: fix(react): bind
thiscontext when calling__internal_setGetInitializePromise - a526e63: fix uncaught AbortError when cancelling streams
- Updated dependencies [11625b5]
- @assistant-ui/store@0.0.7
0.11.59
Patch Changes
- fe06c7c: Revert "fix(react): accept URL-based images in sanitizeImageContent (#3069)"
- Updated dependencies
- @assistant-ui/tap@0.4.0
0.11.58
Patch Changes
- 3719567: chore: update deps
- Updated dependencies [3719567]
- assistant-stream@0.2.47
- assistant-cloud@0.1.13
- @assistant-ui/tap@0.3.6
0.11.57
Patch Changes
- 9a110ea: fix(react): prevent viewport slack feedback loop
- caee095: feat(react): allow passing threadId to backend
- 9883125: fix(react): merge reasoning parts with same parentId in ExternalStoreRuntime
0.11.56
Patch Changes
- 3a0b9c8: fix(react): scroll to bottom on initial history load
- b8f62e1: fix: add missing type export for
ExportedMessageRespositoryItem - 8d5c20c: fix: restore
useLocalThreadRuntimeexport as deprecated alias touseLocalRuntime
0.11.55
Patch Changes
- 5ca09bc: fix(cloud): filter unsupported messages parts passed to
generateTitle
0.11.54
Patch Changes
-
ab2259d: feat(react): thread list item more primitive
-
699e585: feat(react): action bar more primitive
-
4b63488: Allow async function for
bodyin runtime options -
aee8561: feat(react): add dictation (speech-to-text) support
Adds dictation (speech-to-text) support via a new
DictationAdapterinterface. Users can now convert voice input to text in the composer using the browser's Web Speech API or custom adapters.- New adapter:
WebSpeechDictationAdapter- uses browser's Web Speech API - New components:
ComposerPrimitive.Dictate,ComposerPrimitive.StopDictation,ComposerPrimitive.DictationTranscript - New state:
composer.dictationfor dictation status and transcript - New methods:
composer.startDictation(),composer.stopDictation() - Configuration via
adapters.dictationin runtime options
- New adapter:
-
dbfdb11: fix(docs): fix broken migration links
0.11.53
Patch Changes
- 57bd207: chore: update dependencies
- cce009d: chore: use tsc for building packages
- Updated dependencies [57bd207]
- Updated dependencies [cce009d]
- assistant-stream@0.2.46
- assistant-cloud@0.1.12
- @assistant-ui/tap@0.3.5
0.11.52
Patch Changes
- 4db92c9: fix(react): useIsHoveringRef on SSR issue
0.11.51
Patch Changes
- fix: update tap package
0.11.50
Patch Changes
- bae3aa2: feat: use new tap global flushSync method
- e8ea57b: chore: update deps
- Updated dependencies [bae3aa2]
- Updated dependencies [bae3aa2]
- Updated dependencies [bae3aa2]
- Updated dependencies [bae3aa2]
- Updated dependencies [bae3aa2]
- Updated dependencies [bae3aa2]
- Updated dependencies [e8ea57b]
- Updated dependencies [bae3aa2]
- @assistant-ui/tap@0.3.3
- assistant-stream@0.2.45
- assistant-cloud@0.1.11
0.11.49
Patch Changes
- 89aec17: feat: AI SDK frontend tool execution cancellation support fix: AI SDK isRunning status when running frontend tools
- ee7040f: fix: always scroll to bottom when switching to a thread
- bd27465: feat: ability to disable auto scrollToBottom on message send / thread switch
- a3e9549: feat: only add turn anchor slack after the first turn
- 206616b: fix: scroll to bottom button flickers on send message
- 7aa77b5: feat: do not take viewport padding into account when calculating the slack inset
- Updated dependencies [89aec17]
- assistant-stream@0.2.44
0.11.48
Patch Changes
-
ba26b22: feat(react): export as anything
-
d169e4f: feat: add AssistantIf
-
da9f8a6: Fix ESC keydown handler to only trigger when event originates from the composer input
The
useEscapeKeydownhook was intercepting ESC key events globally, preventing other UI elements (like Radix dialogs) from responding to ESC. The handler now checks if the event target is within the composer input before callingpreventDefault(). -
01c31fe: chore: update dependencies
-
Updated dependencies [01c31fe]
- assistant-stream@0.2.43
- assistant-cloud@0.1.10
- @assistant-ui/tap@0.3.2
0.11.47
Patch Changes
- 45d771f: fix(react): data-status stuck on running when smooth streaming disabled
0.11.46
Patch Changes
- ab8953b: feat(react): add
allowNestingoption to allow wrapping runtimes with custom thread list adapters
0.11.45
Patch Changes
- ec662cd: chore: update dependencies
- Updated dependencies [ec662cd]
- assistant-stream@0.2.42
- assistant-cloud@0.1.9
- @assistant-ui/tap@0.3.1
0.11.44
Patch Changes
- 4f6afef: feat: unified json schema
0.11.43
Patch Changes
- f54c17b: feat: Viewport turnAnchor="top"
0.11.42
Patch Changes
- 354c5c3: feat: MessageState.index
- c3ac004: fix: export
ComposerAttachmentDropzoneasComposerPrimitive.AttachmentDropzonefix: prevent drag state flicker inComposerAttachmentDropzone - 282a596: feat: ThreadPrimitive.ScrollToBottom behavior prop
0.11.41
Patch Changes
- 08430e8: feat(assistant-transport): support command enqueue inside onError/onCancel feat(assistant-transport): cancel queued commands on error
0.11.40
Patch Changes
- 2c33091: chore: update deps
- Updated dependencies [2c33091]
- assistant-stream@0.2.41
- assistant-cloud@0.1.8
- @assistant-ui/tap@0.2.2
0.11.39
Patch Changes
- b408005: feat(react-ai-sdk): Integrate AI SDK v5 data parts in message content
- 7a6d9ca: fix: LocalThreadRuntime deleting branches during message reloads
- 70d5966: feat: allow storing runConfig with ThreadHistoryAdapter
- 3754bdd: refactor: rename toolUIs to tools and remove ToolUI API
- 0a4bdc1: feat: renamed
ResourceElementConstructortoResource, changedResourceElement.typeto beResourceinstead ofResourceFn - Updated dependencies [0a4bdc1]
- @assistant-ui/tap@0.2.1
0.11.38
Patch Changes
-
66a13a0: fix: separate scroll-to-bottom button from autoScroll behavior (#1916)
-
4e3877e: feat: Add thread fetching capability to remote thread list adapter
- Add
fetchmethod toRemoteThreadListAdapterinterface - Implement
fetchin cloud adapter to retrieve individual threads - Enhance
switchToThreadto automatically fetch and load threads not present in the current list - Add
getmethod toAssistantCloudThreadsfor individual thread retrieval
- Add
-
eef682b: fix(react): update check for scroll position in autoscroll
-
Updated dependencies [4e3877e]
- assistant-cloud@0.1.7
0.11.37
Patch Changes
- 0ce129b: add scroll lock hook for reasoning component
0.11.36
Patch Changes
- 3ab9484: feat: Toolkit API
- 7a88ead: chore: mark all old context API hooks as deprecated
- 81b581f: feat: display AI SDK errors
- 2fc7e99: chore: update deps
- Updated dependencies [dbc4ec7]
- Updated dependencies [2fc7e99]
- @assistant-ui/tap@0.1.5
- assistant-stream@0.2.39
- assistant-cloud@0.1.6
0.11.35
Patch Changes
- 2fc5c3d: feat: AssistantTransport wire format
- 04144dd: feat: useAssistantTransportState
- Updated dependencies [2fc5c3d]
- assistant-stream@0.2.38
0.11.34
Patch Changes
- 953db24: chore: update deps
- fix: submittedFeedback external message converter support
- Updated dependencies [953db24]
- assistant-stream@0.2.37
- assistant-cloud@0.1.5
- @assistant-ui/tap@0.1.4
0.11.33
Patch Changes
- refactor: move submittedFeedback to metadata, add ThreadMessageLike support
0.11.32
Patch Changes
- fix: Cannot enqueue a chunk into a readable stream that is closed or has been requested to be closed
0.11.31
Patch Changes
- chore: update deps
- Updated dependencies
- assistant-stream@0.2.36
- assistant-cloud@0.1.4
- @assistant-ui/tap@0.1.3
0.11.30
Patch Changes
- feat: add submittedFeedback ThreadAssistantMessage
0.11.29
Patch Changes
- 92dfb0f: fix: update and maintain message levels on reparent
0.11.28
Patch Changes
- fix: useExternalMessageConverter Tool subagent messages support
0.11.27
Patch Changes
- e6a46e4: chore: update deps
- Updated dependencies [e6a46e4]
- assistant-stream@0.2.34
- assistant-cloud@0.1.3
- @assistant-ui/tap@0.1.2
0.11.26
Patch Changes
- feat: Add support for nested tool calls in assistant transport. Tool calls can now include a
messagesfield containing nestedThreadMessage[], enabling subagent tool calls to be automatically invoked byuseToolInvocations.
0.11.25
Patch Changes
- feat: ToolCallMessagePart.messages for subagent messages
0.11.24
Patch Changes
-
4a1e4cf: Deprecate
autoSendandmethodin favor ofsendandclearComposer<ThreadPrimitive.Suggestion prompt="Tell me about React hooks" send // same as autoSend=true clearComposer // same as method="replace", defaults to true />When
sendandclearComposerarefalse, the suggestion is appended to existing user input
0.11.23
Patch Changes
- 3caad00: refactor: rename interrupt -> human for tool input handling
- Updated dependencies [3caad00]
- assistant-stream@0.2.33
0.11.22
Patch Changes
- e8d6d7b: feat: revamp Assistant augmentation mechanism
- e81784b: feat: Tool Call interrupt() resume() API
- Updated dependencies [e81784b]
- assistant-stream@0.2.32
0.11.21
Patch Changes
- 7a020fa: fix: disallow branch switching during runs for most runtimes
- 7a020fa: feat: Add switchBranchDuringRun capability flag to control branch switching while running
- c5188d9: feat: revamp langgraph thread management integration
0.11.20
Patch Changes
-
94fcc39: feat: Add custom commands support to useAssistantTransportRuntime
Adds the ability to send custom commands through useAssistantTransportRuntime by:
- Introducing a global augmentation pattern via
Assistant.Commandsinterface - Adding
useAssistantTransportSendCommandhook for sending custom commands - Supporting custom command types in the transport layer
Users can now extend the Assistant interface to define their own command types:
declare global { interface Assistant { Commands: { myCommand: { type: "my-command"; data: string }; }; } } - Introducing a global augmentation pattern via
0.11.19
Patch Changes
- 2c6198a: fix: thread empty should return false while thread is loading fix: devtools hydration warning
0.11.18
Patch Changes
- 057cdc7: fix: notify when suggestions change
0.11.17
Patch Changes
- 2bbe604: feat: createMssageConverter toThreadMessages isRunning support
0.11.16
Patch Changes
- cc9945b: feat: MessageProvider API
0.11.15
Patch Changes
- d19ebab: feat(assistant-transport): surface stream errors to caller
- Updated dependencies [d19ebab]
- assistant-stream@0.2.29
0.11.14
Patch Changes
- feat: throttle only on stream resume
- Updated dependencies
- assistant-stream@0.2.28
0.11.13
Patch Changes
- 3ce485f: feat: add cancel handling and extend message types
0.11.12
Patch Changes
- c4830cc: feat: assistant transport allow passing state in converter
0.11.11
Patch Changes
- fix: make accumulator throttling smoother
- Updated dependencies
- assistant-stream@0.2.27
0.11.10
Patch Changes
- 367996e: fix: subscribe to scope identity changes
0.11.9
Patch Changes
- 6c36e21: fix: react 18 compatibility for AssistantProvider API
0.11.8
Patch Changes
- 0f21c70: feat: Attachment support for useAssistantTransportRuntime
- Updated dependencies [0f21c70]
- assistant-stream@0.2.26
0.11.7
Patch Changes
- 8f6fb59: feat: useAssistantTransportRuntime (experimental)
- d318c83: fix: ThreadMessageLike should prefer argsText if provided over json stringifying args
0.11.6
Patch Changes
- 5cdfc9c: fix: TextContentPartProvider not updating when passed text changes
0.11.5
Patch Changes
- 161db8b: fix: newThreadId should be null instead of undefined when empty
- 161db8b: fix: composer.add-attachment should only fire once
- 161db8b: feat: add wildcard event support to EventManager
- Added support for wildcard "*" event subscriptions to listen to all events
- Wildcard listeners receive events in format:
{ event: string, payload: any } - Updated type definitions to include "*" as a valid event type
- Modified emit method to trigger both specific and wildcard listeners
0.11.4
Patch Changes
- effd817: fix: race condition in remote threadlist runtime
0.11.3
Patch Changes
- 2e1815e: feat: select attachment by id
0.11.2
Patch Changes
- 2d46069: chore: drop deprecated renamed fields
0.11.1
Patch Changes
- 986b1c0: fix: attachments should not cause infinite rerenders
- 0534bc5: refactor: reorganize runtime files to prepare for part 2 of runtime rearchitecture
- Updated dependencies [0534bc5]
- @assistant-ui/tap@0.1.1
0.11.0
Minor Changes
- 5437dbe: feat: runtime rearchitecture (unified state API)
Patch Changes
- 39ac2f3: feat: AI SDK v5 import support
- Updated dependencies [5437dbe]
- @assistant-ui/tap@0.1.0
0.10.50
Patch Changes
- 3498c99: feat: assistant cloud attachments support
0.10.49
Patch Changes
- af2666a: fix: AssistantCloudThreadHistoryAdapter should be stateless
0.10.48
Patch Changes
- ad53f5f: fix: ComposerInput does not auto focus on thread switch when using ExternalStoreRuntime
0.10.47
Patch Changes
- 1f2ad24: fix: reset assistantOptimisticId on import
- 1f2ad24: fix: drop resetScheduled mechanism
0.10.46
Patch Changes
- 25104d0: feat: MessageRepository should delete dangling messages on resetHead
0.10.45
Patch Changes
- e242a06: feat: AssistantFrameHost, AssistantFrameProvider APIs
- e242a06: feat: ModelContextRegistry API
0.10.44
Patch Changes
- 13684d5: feat: useExternalStoreRuntime improved reset handling
0.10.43
Patch Changes
-
a80dcff: feat: Add *ByIndex primitives for direct indexed access
Added new primitives that allow rendering individual items by index, improving performance and enabling more granular control:
ThreadPrimitive.MessageByIndex- Render a specific message by indexMessagePrimitive.PartByIndex- Render a specific message part by indexMessagePrimitive.AttachmentByIndex- Render a specific message attachment by indexComposerPrimitive.AttachmentByIndex- Render a specific composer attachment by indexThreadListPrimitive.ItemByIndex- Render a specific thread list item by index
These primitives provide direct access to individual items without iterating through entire collections, and are now used internally by their parent components (Messages, Parts, Attachments, Items) for improved efficiency.
0.10.42
Patch Changes
- 12e0a77: chore: update deps
- Updated dependencies [12e0a77]
- assistant-stream@0.2.23
- assistant-cloud@0.1.1
0.10.41
Patch Changes
- eda5558: feat: AI SDK custom UIMessage type support
0.10.40
Patch Changes
-
179f8b7: Add format parameter support to assistant-cloud client library
- Add optional
formatquery parameter toAssistantCloudThreadMessages.list()method - Update cloud history adapter to pass format parameter when loading messages
- Enables backend-level message format conversion when supported by the cloud backend
- Add optional
-
Updated dependencies [179f8b7]
- assistant-cloud@0.1.0
0.10.39
Patch Changes
- a4389da: feat: AI SDK v5 assistant-cloud thread history support
0.10.38
Patch Changes
- 979ee67: feat: assistant cloud support for AI SDK v5
0.10.37
Patch Changes
- f32b6a4: fix: new thread functionality no longer working with new threadlistruntime
0.10.36
Patch Changes
- ed78407: Modified the
detachandcancelRunmethods to create a standardizedErrorobject with a JSON-encoded message and a name of"AbortError", improving consistency in how abort reasons are passed and processed. - 77ce337: Fix polymorphic ref type error in
ComposerInput - f59959e: fix: add image message part support and sanitize function
0.10.35
Patch Changes
- fix: threadListItemRuntime Method not implemented
- feat: support zod v4
0.10.34
Patch Changes
- 0f063e0: chore: update dependencies
- 5d8b074: feat: MessagePrimitive.PartsGrouedp
- Updated dependencies [0f063e0]
- assistant-stream@0.2.22
- assistant-cloud@0.0.4
0.10.33
Patch Changes
- fix: error on mount of local runtime
0.10.32
Patch Changes
- fix: race condition in generateTitle when a newly running thread is detached
0.10.31
Patch Changes
- fix: maintain chronological order for parts without parentId in PartsGroupedByParentId
0.10.30
Patch Changes
- fix: race condition in RunController when using parentIds
- 3fb37f9: Fix internal dependency cycles
- Updated dependencies
- assistant-stream@0.2.21
0.10.29
Patch Changes
- 1f2fb01: fix: message id not found when using messageRepository in external store
0.10.28
Patch Changes
- e92f7cc: feat: ExternalStoreAdapter.messageRepository API
- c823efe: feat: add
runtime.thread.reset()method for clearing thread
0.10.27
Patch Changes
- f23fdb6: feat: add parent ID grouping for message parts
- Updated dependencies [f23fdb6]
- assistant-stream@0.2.20
0.10.26
Patch Changes
- e359ffc: Fix circular dependency in ThreadMessageLike
- 2561cc0: fix: remove double onAddToolResult call in ExternalStoreThreadRuntimeCore
- 9793e64: fix: if tool calls have no argsText, assume empty object instead of crashing
- Updated dependencies [20a4649]
- Updated dependencies [9793e64]
- assistant-stream@0.2.19
0.10.25
Patch Changes
- 65b3ff1: chore: update deps
- 2731323: refactor: rename ContentPart to MessagePart
- 308afff: feat(react): add isLoading state to ThreadList and Thread runtimes
- cc9f567: feat: allow forwarding portal props for assistant modal content
- c380f37: feat: MessageContent.ToolGroup
- Updated dependencies [65b3ff1]
- assistant-stream@0.2.18
- assistant-cloud@0.0.3
0.10.24
Patch Changes
- b65e354: docs: add JSDoc comments
- 8eda24b: performance: Memoize Array.from() calls in render methods
- 644abb8: chore: update deps
- Updated dependencies [644abb8]
- assistant-stream@0.2.17
- assistant-cloud@0.0.2
0.10.23
Patch Changes
- 1b77d8a: fix: Add missing
useLocalThreadRuntimeexport
0.10.22
Patch Changes
- 5a86bda: feat(runtime): export
useLocalThreadRuntimefor more flexibility and runtime customization - 7a65c80: feat(assistant-cloud): filesToPdf support
- Updated dependencies [51b8493]
- assistant-stream@0.2.15
0.10.21
Patch Changes
- 57b5735: fix: logic for ComposerPrimitive.Input disabled prop
0.10.20
Patch Changes
- 8aa3020: Fix: Export missing adapter primitives
- f69ca69: fix(react): preserve message metadata in useThreadRuntime().append()
0.10.19
Patch Changes
- d0867eb: fix(message): add missing condition in
MessageIf - 52e18bc: feat: addToolResponse ToolResponse support
- 52e18bc: fix: add support for artifact and isError for langgraph tool calls
- Updated dependencies [52e18bc]
- assistant-stream@0.2.14
0.10.18
Patch Changes
- 3ed39ef: feat: export MessagePartStatus
0.10.17
Patch Changes
- fix: useInlineRender should correctly handle updates
0.10.16
Patch Changes
- fix: Last is not a partial call attempt 3
- Updated dependencies
- assistant-stream@0.2.13
0.10.15
Patch Changes
- fix: add another workaround for Last is not a partial call
- Updated dependencies
- assistant-stream@0.2.12
0.10.14
Patch Changes
- fix: Last is not a partial call error
- Updated dependencies
- assistant-stream@0.2.11
0.10.13
Patch Changes
- 971b05c: feat: useCloudRuntime (wip)
0.10.12
Patch Changes
- chore: update deps
- Updated dependencies
- assistant-stream@0.2.10
0.10.11
Patch Changes
- 6d214b9: add ComposerAttachmentDropzone component to enable file drag and drop
0.10.10
Patch Changes
-
9811ff8: Introduced a new
ErrorPrimitivecomponent for displaying error messages in the UI, includingErrorPrimitive.RootandErrorPrimitive.Message.Added
MessagePrimitive.Errorfor rendering error states in messages. -
1a4927a: feat: ThreadListItem.detach()
0.10.9
Patch Changes
- fix: correctly forward state updates from ChatModelAdapter
0.10.8
Patch Changes
- 5cb9598: feat(assistant-stream): ObjectStream
- Updated dependencies [5cb9598]
- assistant-stream@0.2.7
0.10.7
Patch Changes
- 621f35a: fix: patch Safari/iOS attachment issue by adding/removing input element to DOM
- Updated dependencies [0809c9f]
- assistant-stream@0.2.6
0.10.6
Patch Changes
- e63d574: feat: MessagePrimitive.If last
0.10.5
Patch Changes
- e9f8e7e: feat: tighten tool args type to be object
- c4c60cf: fix: server-side tool results should be forwarded to StreamCallController
- 73a6ff1: feat: Tool.type
- Updated dependencies [c4c60cf]
- Updated dependencies [73a6ff1]
- assistant-stream@0.2.5
0.10.4
Patch Changes
- 98a680e: fix: allow import from route handlers
- 98a680e: chore: update deps
- Updated dependencies [98a680e]
- assistant-stream@0.2.4
0.10.3
Patch Changes
- 30ae924: fix: disabled tools should still execute if invoked
0.10.2
Patch Changes
- fix: ESM without bundler compat
0.10.1
Patch Changes
- fix: correctly include Typescript declarations
0.10.0
Patch Changes
- 557c3f7: build: drop CJS builds
0.9.6
Patch Changes
- chore: update deps
0.9.5
Patch Changes
- chore: bump assistant-stream dependency
- 1ad0696: feat: assistant-ui update CLI command
0.9.4
Patch Changes
- c77ef43: feat: assistant-ui update CLI command
0.9.3
Patch Changes
- 62c2af7: feat: tool.streamCall API
- b9c731a: chore: update dependencies
0.9.2
Patch Changes
- 553bdff: feat: early return ChatModelAdapter.run on cancellation
- c0c9422: feat: useToolArgsFieldStatus
- 675fb20: feat: export types from
external-store - 4e86ab4: fix: should allow sending assistant messages from the composer
- e893985: fix: allow useMessagePartText on reasoning parts
- 0500584: fix: make addResult typesafe
0.9.1
Patch Changes
- chore: update deps
0.9.0
Patch Changes
- afae5c9: refactor!: edge package split
- Updated dependencies [1f65c94]
- Updated dependencies [8df35f6]
- Updated dependencies [476cbfb]
- assistant-stream@0.0.33
0.8.20
Patch Changes
- Updated dependencies [545a17c]
- assistant-stream@0.0.32
0.8.19
Patch Changes
- 93c3eb4: fix: drop ToolResponseBrand
- Updated dependencies [93c3eb4]
- assistant-stream@0.0.31
0.8.18
Patch Changes
- a22bc7a: refactor: merge setResult and setArtifact to setResponse
- 39aecd7: chore: update dependencies
- Updated dependencies [a22bc7a]
- Updated dependencies [39aecd7]
- assistant-stream@0.0.30
0.8.17
Patch Changes
- feat: expose assitant-stream ToolResponse API
- Updated dependencies
- assistant-stream@0.0.29
0.8.16
Patch Changes
- 40579cd: feat: ToolResponse support
- Updated dependencies [40579cd]
- assistant-stream@0.0.28
0.8.15
Patch Changes
- fix: assistant-stream appendText must only append to the very last part
- Updated dependencies
- assistant-stream@0.0.27
0.8.14
Patch Changes
- feat: update resumeRun signature
0.8.12
Patch Changes
- c4d7b29: feat: tool call artifacts
- 0962274: feat: ThreadRuntime.unstable_resumeRun
- Updated dependencies [c4d7b29]
- assistant-stream@0.0.26
0.8.11
Patch Changes
- Updated dependencies
- assistant-stream@0.0.25
0.8.10
Patch Changes
- Updated dependencies
- assistant-stream@0.0.24
0.8.9
Patch Changes
- fix: adjust message status even if no message-finish event is emitted
0.8.8
Patch Changes
- 439ae67: fix: properly emit tool-call args-text finish
- Updated dependencies [439ae67]
- assistant-stream@0.0.23
0.8.7
Patch Changes
- ecc6afd: feat: ThreadHistoryAdapter.resume
- b07603d: feat: assistant-stream rewrite
- b07603d: feat: use assistant-stream
- Updated dependencies [b07603d]
- assistant-stream@0.0.22
0.8.6
Patch Changes
- f8a157a: Add support for dynamic headers in EdgeChatAdapter
- 2497388: fix: useAssistantInstructions should correctly update on disabled change
0.8.5
Patch Changes
- chore: update deps
0.8.4
Patch Changes
- 4f22af9: fix: infinite rerender bug with useThread
0.8.3
Patch Changes
- 2e299b6: chore: update typescript
0.8.2
Patch Changes
- feat: source message parts
0.8.1
Patch Changes
- ba4a282: fix: cloud env variable loading
0.8.0
Breaking changes
- pre-styled UI components have moved to
@assistant-ui/react-ui - run
npx assistant-ui upgradeto update your codebase - manual upgrade: change styled component imports from
@assistant-ui/reactto@assistant-ui/react-ui(and same with markdown)
- manual upgrade: change styled component imports from
@assistant-ui/reactto@assistant-ui/react-ui(and same with Markdown)
0.7.91
Patch Changes
- feat: dispatch events for edit action; allow text area
0.7.90
Patch Changes
- feat: makeAssistantVisible editable
0.7.89
Patch Changes
- 5540aae: feat: local runtime SuggestionAdapter
0.7.88
Patch Changes
- a36fd9e: fix: bind reset method
0.7.87
Patch Changes
- e01b6cd: fix: remove reset() method on local-runtime
- 2dd5abc: feat: makeAssistantReadable
- 4531190: feat: ExportdMessageRepository.fromArray
- 400ff97: feat:thread.import() should reset the MessageRepository
0.7.86
Patch Changes
- 4685652: feat: useToolArgsFieldStatus
0.7.85
Patch Changes
- 3454871: fix: Vite bundler compat
0.7.84
Patch Changes
- fix: pin nanoid version for CJS compat
- Updated dependencies
- assistant-stream@0.0.21
0.7.83
Patch Changes
- 54b631c: chore: update README
0.7.82
Patch Changes
- 934ee4b: feat: anonymous login and auto-config for cloud
0.7.81
Patch Changes
- 7f7ab5e: refactor: assitant-stream API
- Updated dependencies [7f7ab5e]
- assistant-stream@0.0.20
0.7.80
Patch Changes
- fix: relax ReadonlyJSONObject requirement on tool/toolUI
0.7.79
Patch Changes
- fix: argsText parsing
0.7.78
Patch Changes
- fix: result sometimes set to undefined
0.7.77
Patch Changes
- f2a1e86: feat: unstable_humanToolNames
0.7.76
Patch Changes
- fix: README
0.7.75
Patch Changes
- 87fa024: fix: remove tailwind from peerdeps
0.7.74
Patch Changes
- 61f278b: fix: drop tailwind peer dependency
0.7.73
Patch Changes
- fix: return from createMessageConverter
- 86ba433: fix: ToolMessagePart.args should never be null
0.7.72
Patch Changes
- 797ce9c: fix: ToolMessagePart.args should never be null
0.7.71
Patch Changes
- 72e66db: chore: update dependencies
- Updated dependencies [72e66db]
- assistant-stream@0.0.19
0.7.70
Patch Changes
- 55a9cb2: fix: runConfig for reload / edits
- 2bc6781: feat: send toolCallId to the exeucte callback
- 2bc6781: feat: Tool.experimental_onSchemaValidationError
- 9fefc9d: feat: ThreadViewportContext & multiple renders of the same thread support
0.7.69
Patch Changes
- a7a871e: feat: make ThreadPrimitive.Suggestion method optional
- a7a871e: fix: ThreadPrimitive.Suggestion no longer clears the composer
- a7a871e: feat: expose the useThreadViewportAutoScroll in the API
0.7.68
Patch Changes
- eb4e13c: feat: useExternalMessageConverter megeConfig.joinStrategy
0.7.67
Patch Changes
- ddf468e: fix: import path
0.7.66
Patch Changes
- f4d71da: feat: Edge Runtime onResponse/onError/onfinish, sendExtraMessageFields, unstable_AISDKInterop=v2 support
- 16cd124: feat(local-runtime): native support for AssistantCloud
0.7.65
Patch Changes
- a07d8c1: fix: thread auto-scroll reliability
0.7.64
Patch Changes
- 6703842: feat: codemod to migrate to @assistant-ui/react-ui
- 79f7120: feat: createMessageConverter API
0.7.63
Patch Changes
- 843047d: feat(thread-list): forward model context to thread runtimes
0.7.62
Patch Changes
- 7e5f127: fix: useSmooth unnecessary re-renders
0.7.61
Patch Changes
- bd78a70: feat: ThreadListPrimitive.Root
- 9ea8100: feat: ThreadMessageLike optional toolCallId + args
0.7.60
Patch Changes
- 246ce4e: fix: export getExternalStoreMessages
0.7.59
Patch Changes
- 8ec1f07: feat: AssistantCloudThreadHistoryAdapter
- 4f5d77f: feat: ToolCallMessagePart.args should be JSONObject
- 8ec1f07: feat: auto-inject history adapter in local runtime
0.7.58
Patch Changes
- 02996f9: fix: support AISDKInterop + sendMessageId for human+system messages
0.7.57
Patch Changes
- 103efee: fix: mark ChatAdapter types as readonly
- 60bb6ff: fix: memoize MessageRepository.getMessages()
0.7.56
Patch Changes
- dba4dde: feat(ai-sdk): message.metadata.annotations
- efd60fe: fix(ai-sdk): onSwitchToThread
0.7.55
Patch Changes
- 0bf5082: fix: tailwindcss plugin crashes without config
0.7.54
Patch Changes
- 6cb7d10: refactor: rename ModelConfig to ModelContext
- c302933: feat: convertExternalMessages
0.7.53
Patch Changes
- 7618bf3: feat: AI SDK DataStream ReasoningDelta, StartStep support
0.7.52
Patch Changes
- fix: excessive number of classes included via tailwindcss plugin
0.7.51
Patch Changes
- fix: crash when message part is empty
0.7.50
Patch Changes
- fix: properly forward unstable_shouldContinueIgnoreToolNames
0.7.49
Patch Changes
- feat(local-runtime): add temporary shouldContinueIgnoreToolNames override
0.7.48
Patch Changes
- fix: crash
0.7.47
Patch Changes
- a3c6c1a: feat: ensure runtime methods are bound to the object
- a76ea0e: feat: AttachmentAdapter file upload progress update support via generator add callback
- a3c6c1a: feat: useRuntimeState API
0.7.46
Patch Changes
- fix: improved interrupt+Command support
- feat: MessagesFooter UI
- 2713487: feat: styled UI assistant message footer
0.7.45
Patch Changes
- 9934aef: feat(cloud-threadlist): auto initialize threads
- 3a8b55a: feat: styled UI assistant message footer
0.7.44
Patch Changes
- 2f44e9e: refactor: move switchToThread / switchToNewThread to runtime.threads
- 2f44e9e: refactor: rename runtime.threadList to runtime.threads
- 2f44e9e: refactor: drop CloudThreadListItemRuntime
- 2f44e9e: feat: add threads.getById and threads.main
- 2f44e9e: feat: ThreadListItemRuntime.initialize()
0.7.43
Patch Changes
- feat: reverse order of threads in useRemoteThreadListRuntime
0.7.42
Patch Changes
- 9c3961d: fix: event subscriptions triggering on threadList changes
0.7.41
Patch Changes
- 08de9c9: fix: RemoteThreadList should not return an iterator
0.7.40
Patch Changes
- feat: export useRemoteThreadListRuntime
0.7.39
Patch Changes
- 0979334: feat(local-runtime): New ThreadList items should appear at the top of the list
- 22272e6: chore: update dependencies
- Updated dependencies [b44a7ad]
- Updated dependencies [22272e6]
- assistant-stream@0.0.18
0.7.38
Patch Changes
- 5794b1b: feat: CreateStartRunConfig
0.7.37
Patch Changes
- 799dc79: feat: AppendMessage.sourceId
- 799dc79: feat: StartRunConfig.sourceId
0.7.36
Patch Changes
- 34d2915: feat: widen initialMessages type to ThreadMessageLike
- 4f3834a: refactor: deprecate UIMessagePart
- b8b11d3: feat: FileMessagePart
- 889a55e: fix: attachment filename should never overflow
- a7d9e41: feat: ComposerRuntime.unstable_on("attachment_add", ...)
0.7.35
Patch Changes
- 345f3d5: chore: update dependencies
- 345f3d5: fix: import errors in react server environments
- 2846559: feat: allow selecting multiple files as attachments
0.7.34
Patch Changes
- 9a3dc93: fix(external-store): metadata & attachments support
- 4c2bf58: chore: update dependencies
0.7.33
Patch Changes
- bb47b90: fix: invalid JSON in argsText should be gracefully handled
0.7.32
Patch Changes
- feat: MessagePrimitive.tools.Override
0.7.31
Patch Changes
- fix: data results should be forwarded via LocalThreadRuntime
0.7.30
Patch Changes
- 982a6a2: chore: update dependencies
0.7.29
Patch Changes
- 75a274f: feat: AssistantRuntimeCore.RenderComponent
- dcf51cb: fix: do not throw on AI SDK annotation packets
- 9ad9e75: fix: mark arrays in message types as readonly
- 75a274f: refactor: drop AssistantRuntimeCore.Provider due to causing app rerenders on runtime switch
- 65de5d6: feat: message.metadata.unstable_data
0.7.28
Patch Changes
- a8ac203: feat: export useThreadListItemRuntime
0.7.27
Patch Changes
- 528cfd3: feat: ExternalStoreAdapter.unstable_Provider
- 3c70ea1: feat: allow customizing thread max width
0.7.26
Patch Changes
- 6a17ec2: feat: useAssistantInstructions disable support
0.7.25
Patch Changes
- 798e9f3: fix: AttachmentRemove should not trigger AttachmentPreviewDialog
- 37e1abc: feat: ComposerRuntime.clearAttachments
- d6b3b79: feat: useRemoteThreadListRuntime
0.7.24
Patch Changes
- fix: ComposerRuntime.send() should not reset role or runConfig
0.7.23
Patch Changes
- feat(edge-runtime): pass RunConfig to backend
0.7.22
Patch Changes
- feat: RunConfig
0.7.21
Patch Changes
- feat: Composer.unstable_on("send", callback)
0.7.20
Patch Changes
- 2c7dec0: feat: useAssistantTool allow disabling tools
0.7.19
Patch Changes
- ec3b8cc: chore: update dependencies
0.7.18
Patch Changes
- 1b16dce: fix: thread initialization
- b0f309a: feat: allow specifying Empty component in thread-config
0.7.17
Patch Changes
- fix: toLanguageModelMessages should include attachments
0.7.16
Patch Changes
- fix: ensure message status is set on runResultStream flush
0.7.15
Patch Changes
- fix: toolResultStream should support JSONSchema params
0.7.14
Patch Changes
- fix: assistantDecoderStream should end current tool call on flush
0.7.12
Patch Changes
- 4c54273: chore: update dependencies
- 4c54273: fix: initialize thread on import
0.7.11
Patch Changes
- 0f88efb: fix: external store thread list should not crash
0.7.10
Patch Changes
- 1eab7b4: refactor: ThreadList
0.7.9
Patch Changes
- 2276e57: fix: cjs builds
- e8752ac: fix: ThreadList a11y improvements
0.7.8
Patch Changes
- 589d37b: feat: ThreadList / ThreadListItem UI
- 2112ce8: chore: update dependencies
0.7.7
Patch Changes
- 10d70db: fix: remove console.log
- c3027a0: fix: disallow nested ThreadConfigs
0.7.6
Patch Changes
- 933b8c0: chore: update deps
- 09a2a38: fix: TextMessagePartProvider should support MessagePartRuntime.getState()
0.7.5
Patch Changes
- c59d8b5: chore: update dependencies
0.7.4
Patch Changes
- 5462390: fix: Thread.Messages AssistantEditComposer support
- 0fb80c1: feat: ThreadConfig.UserMessage / AssistantMessage / EditComposer
0.7.3
Patch Changes
- 0dcd9cf: feat: mark message types as readonly
0.7.2
Patch Changes
- 7fa9a1b: feat: ThreadMessageLike metadata support
- 1a1f4a5: feat: message metadata for all message types
0.7.1
Patch Changes
- c2f75e5: feat: ThreadListRuntime API types
0.7.0
Breaking Changes
- c6e886b: refactor!: drop deprecated features
Patch Changes
- 2912fda: feat: ThreadListItemPrimitive
0.5.100
Patch Changes
- b5f92fe: fix(external-store): crash on cancel when using separate converter, fix branching
0.5.99
Patch Changes
- cdcfe1e: feat: ThreadListItemPrimitive (wip)
- cdcfe1e: fix: add React 19 RC to peerDeps
- 94feab2: feat: ComposerState.role / ComposerRuntime.setRole
- 472c548: feat: ThreadListPrimitive
- 14da684: feat: AppendMessage.startRun flag
- 1ada091: chore: update deps
0.5.98
Patch Changes
- ff5b86c: build: refactor build script into @assistant-ui/tsbuildutils
- ff5b86c: fix: better ESM compatibility
- ff5b86c: chore: update deps
0.5.97
Patch Changes
- 9a9c01d: feat(edge-runtime): add unstable_AISDKInterop flag
0.5.96
Patch Changes
- fix: properly pass initialMessages to LocalRuntime
0.5.95
Patch Changes
- fix: include generated css files in bundle
0.5.94
Patch Changes
- fix: toMessagePartStatus support for parallel tool calls
0.5.93
Patch Changes
- d2375cd: build: disable bundling in UI package releases
0.5.92
Patch Changes
- f6d197a: feat: Edge Runtime Server Accessible Ids (temp)
0.5.91
Patch Changes
- 56f80fa: fix: tailwind plugin turbopack interop
0.5.90
Patch Changes
- 2090544: fix: attachments infinite rerender bug
- be04b5b: feat: Unstable_AudioMessagePart (wip)
- 2090544: fix: Attachment preview accessibility
- fb32e61: chore: update deps
- fb32e61: feat: react-19 support
0.5.89
Patch Changes
- fd9ff67: fix(local-runtime): update capabilities on initial render
0.5.88
Patch Changes
- 0afecda: fix(ai-sdk): server-side maxSteps interop
0.5.87
Patch Changes
- b38165d: feat: export useAttachmentRuntime, useAttachment, FeedbackAdapter
- a1bfd26: fix(ai-sdk): DataStream interop without tool call streaming
- b38165d: feat(ai-sdk): Adapters support (attachment, feedback, speech, threadManager)
0.5.86
Patch Changes
- fix: do not cache adapter in useEdgeRuntime
0.5.85
Patch Changes
- 3a602b9: fix: correctly handle new thread creation
0.5.84
Patch Changes
- ba5116f: feat: useInlineRender hook
0.5.83
Patch Changes
- c38a018: feat: ThreadListRuntime
0.5.82
Patch Changes
- 0edadd1: feat: useThreadModelConfig API
- 1aeda53: feat: Runtime.path API
- 0c8277e: feat: MessageRuntime.unstable_getCopyText API
- 91d3951: feat: MessageRuntime.getMessagePartByToolCallId
- cf6861c: refactor!: simplify SpeechSynthesisAdapter to accept a text string
- 7c76939: feat: ThreadRuntime.getMesssageById
0.5.79
Patch Changes
- feat: allow out of order tool args streaming
0.5.78
Patch Changes
- dba0082: fix: border should apply to all aui-root children
- b182ea5: feat: Events API (experimental)
0.5.77
Patch Changes
- 0a3bd06: feat: Attachment image thumbnail and previews
0.5.76
Patch Changes
- c3806f8: fix: do not export internal Runtime types
- 899b963: refactor: add BaseThreadRuntimeCore class
- 899b963: feat: work towards Edit Composer attachment support
- 899b963: refactor: remove composerState.attachmentAccept, add composerRuntime.getAttachmentAccept()
- 8c80f2a: feat: MessageState.submittedFeedback state
- 809c5c1: feat: New Attachment UI
0.5.75
Patch Changes
- 31702b2: feat: MessageRuntime.stopSpeaking MessageState.speech state
- 44bfecd: refactor: move primitive types under the same namespace as the primitive components
0.5.74
Patch Changes
- 3d31f10: refactor: deprecate primitive-hooks
- cf872da: feat: AttachmentPrimitive
0.5.73
Patch Changes
- fb46305: chore: update dependencies
- e225116: feat(ui): add component override option for ThreadWelcome
- 0ff22a7: feat: switch to DataStream transfer protocol for edge runtime
- 378ee99: refactor: rename maxToolRoundtrips to maxSteps
- 378ee99: feat: server-side tool roundtrips support
0.5.72
Patch Changes
- d0db602: fix: useDangerousInBrowserRuntime correct options forwarding
0.5.71
Patch Changes
- 55942d8: fix: useMessagePartText backwards compat type
- e455aff: feat: FollowupSuggestions
- f7c156b: feat: mark new runtime API methods as stable
- f6a832e: chore: update dependencies
- 2b7c6fe: refactor: define interface types for the new runtime API
0.5.70
Patch Changes
- 3df0061: fix: TextMessagePartProvider missing fields
0.5.69
Patch Changes
- 46f91c2: feat(langgraph): allow disabling autocancellation of pending tool calls
0.5.68
Patch Changes
- 96b9d1f: feat: new Runtime API part 8
- 9fd85da: fix: ensure branch picker is supported before showing it
- d8bd40b: chore: update dependencies
- 42156cf: refactor: drop ReactThreadRuntimeCore, unstable_synchronizer
0.5.67
Patch Changes
- cfa8844: feat: useComposerRuntime hook
- 70720ba: feat: lift EditComposer to runtime layer
0.5.66
Patch Changes
- 325b049: fix: include attachments prop in the useExternalMessageConverter
- df9ec8f: feat: new Runtime API rollout part 2
- 3f549b2: refactor: rename internal export
0.5.65
Patch Changes
- 27208fb: fix: only include "use client" banner in ESM builds
0.5.64
Patch Changes
- ed24305: fix: add newline after "use client" for .js builds
0.5.63
Patch Changes
- c438773: feat: allow disabling ComposerInput keyboard shortcuts
- e1ae3d0: chore: update dependencies
0.5.62
Patch Changes
- cd1b286: fix: BranchPicker styles
0.5.61
Patch Changes
- 88957ac: feat: New unified Runtime API (part 1/n)
- 1a99132: feat: ThreadRuntime.Composer subscribe
- 3187013: feat: add status, attachments and metadata fields to all messages
0.5.60
Patch Changes
- 926dce5: feat: Feedback Primtives, UI and Adapter
- 155d6e7: chore: update dependencies
- f80226f: feat: ThreadActions.getModelConfig
0.5.59
Patch Changes
- 0f547a9: fix: useSmooth should work inside TextMessagePartProvider
0.5.58
Patch Changes
- 6507071: fix: TextMessagePartProvider text streaming support
- 6507071: feat: TextMessagePartProvider isRunning
0.5.57
Patch Changes
- 745d6e1: fix(runtimes/external-store): switch to thread should correctly copy the entire store
- 745d6e1: fix: only deprecate the null usage of switchToThread
0.5.56
Patch Changes
- e4863bb: feat(runtimes/external): add onSwitchToNewThread callback
- e4863bb: feat: add attachmentAccept to ThreadComposer
0.5.55
Patch Changes
- b0a22e3: feat: runtime.switchToNewThread()
- 11ca453: refactor: drop useModelConfig Context - use useAssistantActions instead
0.5.54
Patch Changes
- 0f99aa6: feat: New Context API
- c348553: chore: update dependencies
0.5.53
Patch Changes
- f0f7497: feat: MessageContent Empty should be displayed for empty messages with empty text part
- 8555685: feat: allow editing assistant/system messages
- 892b019: fix: Empty should default to the provided Text component
0.5.52
Patch Changes
- c0f975a: feat: TextMessagePartProvider
0.5.51
Patch Changes
- 164e46c: feat: ignore edits with text part unchanged
- 5eccae7: fix: createActionButton disabled handling
0.5.50
Patch Changes
- 04f6fc8: chore: update deps
0.5.49
Patch Changes
- 7ed296b: fix: make AppendMessage attachments field optional for now
0.5.48
Patch Changes
- 25a711d: fix: user message action bar css
0.5.47
Patch Changes
- a81b18f: feat: ComposerPrimitive.AddAttachment
- 44d08bd: feat: styled components for attachments
- b48fbcc: feat: UserMessageAttachment UI
- cc5e7d4: perf: memoize tool Ul components
- bdd3084: feat: allow runtimes to signal support for attachments
- 7dcab47: fix: message copy handling for runtimes
- a22e6bb: feat: AttachmentAdapter.accept allow attachment adapters to specify supported file types
- 9e00772: feat: add composer attachments state
- d2580d3: feat: SimpleImageAttachmentAdapter
- c845fcf: feat: allow sending attachment-only messages
- 3ba193e: feat: AttachmentContext
- d2580d3: feat: SimpleTextAttachmentAdapter
- 3b0f20b: feat: MessagePrimitive.Attachments
- 3ba193e: feat: ComposerPrimitive.Attachments
- d2580d3: feat: CompositeAttachmentAdapter
- 44d08bd: feat: Edge/Local runtime AttachmentAdapter support
0.5.46
Patch Changes
- 0a4b8d7: feat: adjust the override order of tool UIs
- 34ad491: feat: ThreadConfig.ToolFallback
- 34ad491: feat: ThreadConfig.tools
- 0a4b8d7: fix: tool UI fallback should not override makeAssistantToolUI definitions
0.5.45
Patch Changes
- fb8e58f: feat: add thread runtime threadId
0.5.44
Patch Changes
- b2801ce: feat(styling): cursor-not-allowed when composer input is disabled
- 0aa4e6b: fix: use-smooth-state should notdesync
0.5.43
Patch Changes
- 3962831: feat: useExternalMessageConverter API
- 85defe1: feat: allow string content in ThreadMessageLike
- 6f7ccf7: feat: add toolName to addToolResult callback
- 6f7ccf7: feat: thread converter should ignore empty text parts
0.5.42
Patch Changes
- c8b98b6: feat: animate composer border color on focus
- 800eb9e: fix: error on switchToThread / switchToNewThread
- 8768c67: feat: support shadcn scroll area
0.5.41
Patch Changes
- f526279: feat: SpeechSyntehsis
- e8aa697: refactor: remove unsupported external runtime onCopy callback
0.5.40
Patch Changes
- 4333382: fix(runtime/edge): handle maxToolRoundtrips
0.5.39
Patch Changes
- ab1160c: fix: switchToThread should persist maxToolRoundtrips
0.5.38
Patch Changes
- 554a423: chore: update deps
0.5.37
Patch Changes
- 60c0fdc: fix: remove Composer focus ring when using @tailwindcss/forms
- edbab24: feat(runtimes/local): reset thread
0.5.36
Patch Changes
- edb5a16: feat: DangerousInBrowserRuntime
- f8e2cf1: fix: @tailwindcss/forms input border
0.5.35
Patch Changes
- 53cf707: fix: do not require content in ChatModelRunResult
0.5.34
Patch Changes
- 3178788: feat: custom AssistantMessage metadata
0.5.33
Patch Changes
- c154b8f: feat(runtime/edge): allow extra headers & body
0.5.32
Patch Changes
- cd70d4f: refactor: rewrite ai-sdk integration to use external runtime
0.5.31
Patch Changes
- 34621cc: feat(runtimes/edge): getEdgeRuntimeResponse API
- 2df3e73: fix: CircleStopIcon invisible on safari
- 1b9ded0: feat: lift thread composer state to ThreadRuntime.Composer
0.5.30
Patch Changes
- ccf5fef: fix: do not capture enter key during IME composition events
0.5.29
Patch Changes
- 556001f: chore: update deps
- 556001f: feat: tool call cancellation support
0.5.28
Patch Changes
- 915b5b7: feat: expose streamUtils
- 9a55735: chore: update deps
0.5.27
Patch Changes
- dbf1042: fix: minor styling fixes
- dbf1042: chore: update deps
0.5.26
Patch Changes
- 440b051: fix: sending messages when thread is empty
0.5.25
Patch Changes
- 0445cdf: fix: disallow sending new messages when last message is in requires-action state
- 0445cdf: refactor: remove Runtime.isRunning / auto-infer isRunning state from last message state
- 71f4b77: feat: update Tooltip styles
0.5.24
Patch Changes
- a7e8ef6: refactor: rewrite external store sync
- 6629dd8: fix: render loop if a message ID is used twice
0.5.23
Patch Changes
- f83e4d1: feat: LocalRuntime export / import
0.5.22
Patch Changes
- 134d39e: fix: undo moving internal utilities to /react/internal
0.5.20
Patch Changes
- de04d92: feat: loading status & smooth streaming interop
- 3cc67f2: refactor: move internal utilities to @assistant-ui/react/internal
0.5.19
Patch Changes
- 2534938: feat: Message.Content Empty component
0.5.18
Patch Changes
- 0302235: fix(external-store): add initial messages to message repository
0.5.17
Patch Changes
- 4b4f9c8: feat(local-runtime): AsyncGenerator support
0.5.16
Patch Changes
- 9dc942f: feat: useThread.isDisabled flag
0.5.15
Patch Changes
- 0418c73: fix(runtimes/external-store): invalidate cache when isRunning changes during autoStatus
0.5.12
Patch Changes
- 8688a9f: feat(runtimes/external-store): loosen the return type for convertMessage callback
0.5.11
Patch Changes
- fc6bc35: feat: initialMessages SSR support
0.5.10
Patch Changes
- 1c6bf72: feat(tailwindcss): allow customizing colors directly in tailwind config
0.5.9
Patch Changes
- a216fbf: chore: update deps
0.5.6
Patch Changes
- e5e6b20: feat(runtime): BranchPicker feature detection
0.5.5
Patch Changes
- f26783a: feat(ui): allow ReactNode in SuggestionConfig.text
0.5.4
Patch Changes
- f2d7590: fix(rsc): hide copy message button
0.5.3
Patch Changes
- 1acdf45: feat: external store runtime
0.5.2
Patch Changes
- 2d7a8bd: fix: markdown loading indicator
- 2d7a8bd: fix: ScrollToBottom visbility bug
- 2d7a8bd: fix: text message part data-status field
0.5.1
Patch Changes
- ee38c0c: feat: message status v2
- ee38c0c: fix(runtimes/edge): wait for serverside tool call results before reporting onFinish
- 2baa898: chore: v5
0.4.6
Patch Changes
- bc77b4f: feat(runtimes/edge): dynamic model creator functions
- e220617: feat(runtimes/edge): client side API key, model name, model parameters specification
0.4.4
Patch Changes
- 998081b: fix: reduce specificity of built-in CSS styles
0.4.3
Minor Changes
- feat: scrolling to bottom during streaming is now instant
- fix: useSmooth gets triggered during branch switch
0.4.2
Minor Changes
- fix: issue with forwarding props to primitives
0.4.1
Minor Changes
- fix: useSmooth scrolling performance in dev mode
0.4.0
Minor Changes
- e0e51cf: refactor!: Rename AssistantMessage to ThreadAssistantMessage
- e0e51cf: refactor!: Rename UserMessage to ThreadUserMessage
- 679cd54: feat: system message support
Patch Changes
- c7ba6a2: feat: Edge Runtime API
- e0e51cf: feat: add styled UI components
0.3.5
Patch Changes
- ef25706: feat: Code Header and Syntax Highlighter support
0.3.3
Patch Changes
- b5aa29f: feat: smooth streaming by default
0.3.2
Patch Changes
- 1a8919b: feat: smooth text streaming
0.3.1
Patch Changes
- 05fd5d6: feat: runtime capabilities API
0.3.0
Minor Changes
- 5b68f4a: refactor!: drop Message.InProgress support
Patch Changes
- 3dd7384: fix: better message hover state tracking
- 23f474e: fix: remove warning about useLayoutEffect in SSR
0.2.4
Patch Changes
- c373fc9: feat: AssistantModalPrimitive.Anchor
0.2.3
Patch Changes
- be2c26b: fix: Vercel useAssistant BranchPicker duplicates bug
0.2.2
Patch Changes
- 62e9f19: feat: AssistantRuntime newThread
- 611fdcc: feat: useAssistantActions
- ca0eaa1: feat: Programmatic Interactions API
0.2.1
Patch Changes
- d52c345: feat: Primitive Prop Types
0.2.0
Minor Changes
- de20b1c: feat!: MessagePartText is now a
element
- 2ab2cab: feat!: experimental features are now marked as stable
0.1.12
Patch Changes
- 904556d: feat: ComposerContext focus() API
- 33ae8f9: feat: AssistantModalPrimitive
0.1.11
Patch Changes
- fd6a202: feat: Primitive Hook useThreadViewportAutoScroll
- c2a6b22: fix: improved Viewport autoscroll handling
- c2a6b22: fix: more reliable escape hotkey handling
- c2a6b22: feat: add "role" field to AppendMessage
0.1.10
Patch Changes
- 269b32f: feat: Primitive Hooks API
- 2867923: feat: Composer API Docs
0.1.9
Patch Changes
- ab16a99: feat: useMessageUtils Context API
- ab16a99: feat: useThreadActions Context API
- ab16a99: fix: make all Context APIs read-only
0.1.8
Patch Changes
- 8513f9a: feat: ToolUI addResult API
0.1.7
Patch Changes
- 36f3a1f: fix: add DisplayName to primitive components for better error logs
- 36f3a1f: chore: upgrade to radix-ui 1.1
- 36f3a1f: chore: update dependencies
0.1.6
Patch Changes
- a6769d5: feat: MessagePartComponent types
- 52236ab: feat: new default chat bubble design
0.1.5
Patch Changes
- 671dc86: feat: Tool Render functions
0.1.4
Patch Changes
- a73b50f: fix: ComposerRoot onSubmit should be called when using keyboard shortcuts
0.1.3
Patch Changes
- 6e9528d: build: add changesets
- 6e9528d: feat: add useAssistantTool API