@assistant-ui/react-ag-ui#
0.0.56#
Patch Changes#
-
#6078
179f8ca- feat: expose toAgUiMessages and fill a missing AG-UI message id (@rupic-app) -
#5902
ff0aad4- feat: expose AG-UItool_callinterrupts through the core tool-approval seam (@samdickson22) -
Updated dependencies [
fa30915,b355aef,f7bd2d9,4947ef4,332f736,ef9254d,9c65b51,5845ba7,1b30bfd,365e763,d19921d,996aa57,21d6e87,cd247e5,1bf263b,19e52c4,06b04a7,a614b5e,07b51db,92e52bd]:- @assistant-ui/core@0.3.15
- assistant-stream@0.3.39
0.0.55#
Patch Changes#
-
#5999
0cdf980- fix(react-ag-ui): cancel active runs on runtime teardown (@Kinfe123) -
#5843
d8ccd52- feat: expose AG-UI custom events as assistant data parts (@rupic-app) -
#5898
6ec2511- fix: mark streamed AG-UI run errors as failed (@Kinfe123) -
#5978
4101a7d- fix: persist snapshot assistants with append-only history adapters (@rupic-app) -
#5313
a07a4dd- fix: preserve regeneration branches, visible server-id streaming, and history updates after message snapshots (@Gujiassh) -
Updated dependencies [
ac0c836,c3fd447,f858321,f9529bf,f9529bf,05b94bd,cef671d,ef7f70d,39db2ff,0e91e27,c5bc8ed,a2a753b,2b0fec7,bec0753,4326079,3d68b16,98795aa,9d920cc,1b9c33d,d68918e,74dca03,87bf950,5a01343,0f6e9e9,f0d1d48,b80a6be,01580e3,ab7f49f,e8c53e9,53ae80f,5f4dee5,9ffbd99,61d29f4,2da61a3,0131fc7,a934d03,b6d7b2b,bc337af,dc6eb2f,ce57458,ab7ead9,067ef52,f44163f,e5bf0ef,a2ab997,fc9dd90,0e2a230,d800f8b,f5b39d4,26f40c1,f618ab6,d80e988,7f944be,f37f595,74dca03,1b9c33d,82e2bde,52df42d,6c9e7dd,837ef1b,7748e15,72705c3,0d2e23f,4446d45,e8997d9,bfe47b6,ceb8c16,7ea9de1,51886b2,3053195,44e574f,14c3b5a]:- @assistant-ui/core@0.3.14
- @assistant-ui/store@0.3.10
- @assistant-ui/react-generative-ui@0.0.15
- assistant-stream@0.3.38
0.0.54#
Patch Changes#
-
#5805
48af3c5- feat: round-trip a part'sproviderMetadata.aguithrough AG-UI's contentmetadata. An image or file part, whether it sits on the message or inside an attachment, now reaches the agent with whatever the host put in that namespace, and an inbound item puts it back on the rebuilt part, so a snapshot echo resends it instead of dropping it. A file part's ownfilenamestill wins over a key of the same name. Text is unchanged, its AG-UI schema has no metadata field. (@okisdev) -
#5807
84ef0df- fix: preserve image filenames through AG-UI snapshots (@Kinfe123) -
#5803
a44c953- fix: preserve queued messages when cancelling an active run (@Kinfe123) -
#5755
b9d5ba3- fix: preserve encrypted-only reasoning records across the AG-UI round trip. Under zero data retention an agent sends aReasoningMessagewhose readablecontentis empty and whose payload is entirely inencryptedValue, and both the adapter and the core normalizer dropped it: the import guarded on empty text, and a reasoning part with neither text nor summary is removed byfromThreadMessageLike. Such a record now rides onmetadata.custom.agui.opaqueReasoningof the neighbouring message instead of becoming an unrenderable part, and is replayed into the run input adjacent to that message. A record that sat between an assistant message and its own tool result is replayed after that result, since import folds the result into the assistant message and that boundary no longer exists at export. A runtime configured withshowThinking: falseis affected too: it previously emitted noreasoningrecords at all, and now emits{ role: "reasoning", content: "", encryptedValue }for each imported record that carried a value, since that option hides reasoning from the UI rather than discarding state the agent needs back. (@okisdev) -
#5752
ee4db08- fix: keep reasoning, and its signature, across the AG-UI round trip.toAgUiMessagesbuilt the run input fromextractText, which reads text parts only, so an imported reasoning-only assistant message was discarded as a blank turn and a live assistant message silently lost its reasoning; reloading a thread and sending one more message deleted the reasoning history from what the agent received. Reasoning parts now leave as the standalonereasoningrecords they arrived as. The runtime also consumesREASONING_ENCRYPTED_VALUEand stores the blob atproviderMetadata.agui.encryptedValue, so reasoning from a live run and from an importedReasoningMessageare both re-emitted with their signature intact rather than replayed unsigned. (@okisdev) -
Updated dependencies [
a90db30,cfb5fab,65e03a6,d3fece3,63d6d34,388a49b,4b75b8f,1e98bcf,82cbc15,93ccfc2,e28a62d,48af3c5,22fa20f,00a630a,73fdb3a,2016d07,417efee,1e1d52b,685a069,a3ef2f0,1674523,f59d24b,092585b]:- @assistant-ui/core@0.3.13
- @assistant-ui/react-generative-ui@0.0.14
- @assistant-ui/store@0.3.9
0.0.53#
Patch Changes#
-
Updated dependencies [
94dc3e5,ab57969]:- assistant-stream@0.3.36
- @assistant-ui/core@0.3.10
- @assistant-ui/react-generative-ui@0.0.13
- @assistant-ui/store@0.3.8
0.0.52#
Patch Changes#
-
#5684
20bda3c- fix: senddescription: ""for a tool registered without one, soRunAgentInputstays valid against the AG-UI schema. previously the key was dropped from the payload entirely and validating servers rejected the run. also types therunAgentcall site against the upstream parameters. (@samdickson22) -
#5670
a87c192- fix: isolate runtime lifecycle callback failures (@Kinfe123) -
Updated dependencies [
456b056,99d09c8,a88751d,79253f2,4e99deb,2af514c]:- assistant-stream@0.3.35
- @assistant-ui/core@0.3.8
- @assistant-ui/store@0.3.7
0.0.51#
Patch Changes#
-
#5622
7bd72be- fix: abort AG-UI HTTP requests when cancelling runs (@rupic-app) -
#5649
baa6e2e- feat: add unstable_enableMessageQueue so a send during a run is buffered instead of swallowed (@okisdev) -
#5650
34cec64- feat: two-lane, placement-aware message queue with steer-by-default mid-run sends (@Yonom)ExternalThreadQueueAdapteris reshaped:enqueue(message, { steer })splits into
enqueue(message)/steer(message),steer(queueItemId)becomes
move(queueItemId, { lane: "steer", insertAfter: null }),clear(reason)is dropped
(queue clear policy is now host-owned), andsteerItems/move/editand
QueueItemState.partsare required. -
Updated dependencies [
dcacd9b,d52928d,d8a59ad,0578c16,e70da91,aac3a8c,aa302ee,aa302ee,34cec64]:- @assistant-ui/store@0.3.4
- @assistant-ui/core@0.3.6
- assistant-stream@0.3.34
- @assistant-ui/react-generative-ui@0.0.12
0.0.50#
Patch Changes#
-
#5461
1fae3c6- fix: convert file parts placed directly in message content (@okisdev)buildUserContentfiltered everyfilepart out ofmessage.content, on the stated grounds that binary always flows throughmessage.attachments. That rule was not actually implemented:imageandaudiocontent parts, equally binary, were converted from content all along, so onlyfilewas excluded. It also guarded nothing, because both composer paths put binary in attachments and leave content as text (the edit composer lifts non-text parts withliftNonTextPartsand passes none through), and because content-sourced and attachment-sourced parts land in the same flatInputContent[]with no downstream distinction. The only way a file part reached that filter was a deliberateappend(), where it was silently dropped. -
#5445
2fdff87- feat: honor sourceType "url" in a2a, ag-ui, and adk file converters (@ShobhitPatra) -
Updated dependencies [
b19c2f5,01140bd,8c99934,ece5a54,2fdff87,90b3003,4c313cf,55b2824,22b05a4,f913c21,c868710,011e275,da32fe0,f913c21,5bb2573,5ececc1]:- @assistant-ui/core@0.3.4
- assistant-stream@0.3.32
- @assistant-ui/store@0.3.3
0.0.49#
Patch Changes#
-
#5386
d9502b2- feat: send A2UI actions back to the agent as forwardedProps.a2uiAction on the next run (@okisdev) -
#5329
f30b54c- refactor: move createRuntimeExtras to the @assistant-ui/core/react entry and drop the internal re-export (@okisdev) -
#5314
3d45df9- feat: read the canonical nested_meta.ui.resourceUriMCP Apps pointer, keeping the deprecated flat"ui/resourceUri"key as a fallback (@okisdev) -
#5345
ed3794c- feat: consume a2ui-surface activity snapshots and render A2UI surfaces as present tool-call parts (@okisdev) -
#5352
4a9a765- feat: rehydrate A2UI surfaces from restored activity history (@rupic-app) -
#5315
676c751- fix: forward audio message parts and skip data parts instead of dropping or throwing (@ShobhitPatra) -
#5311
34e95a1- fix: keep streaming across mid-run MESSAGES_SNAPSHOT imports. The active assistant is preserved and re-anchored when the snapshot omits it, and when a snapshot shape still evicts it, the placeholder is recreated under its original id on the next content-bearing emit, so neither the token stream nor the message identity is lost. (@Gujiassh) -
Updated dependencies [
d2e7a4a,ecd7c87,2daf2d5,a5bdbed,fb993c3,3ae058c,f30b54c,7f9b91f,936c52c,ee87dd9,e41734c,1c5266c,cdcdbd0,42dbc69,25f1e4f,d16e62d,60d049e,8643393,2eca438,23ee5db,f4aabe9]:- @assistant-ui/store@0.3.2
- @assistant-ui/core@0.3.2
- @assistant-ui/react-generative-ui@0.0.11
- assistant-stream@0.3.31
0.0.48#
Patch Changes#
- Updated dependencies [
9a7e776,ae5f831,a196711,f78e579,dcc41bb,2f5d0d4]:- @assistant-ui/store@0.3.0
- @assistant-ui/core@0.3.0
- assistant-stream@0.3.29
0.0.47#
Patch Changes#
-
#5225
1f8e80c- feat: reconstructmcp.appon restored tool-call parts infromAgUiMessagesfrom the_meta["ui/resourceUri"]MCP-UI pointer, sogetMcpAppFromToolPartresolves the app on restored history instead of leavingMcpAppRendereron its fallback; effective for transports that preserve_meta(the standard@ag-ui/clientHTTP transport strips it until upstreamToolMessageSchemagains a passthrough, agno-agi/agno#9087) (@rupic-app) -
Updated dependencies [
f9c1b0f,235c17e,6225d6a,801781c,d4bdf2c,a0ddc86,cee74f1,cf839ff,396ea1f,e1f27d8,3e8f59e,06f5266,d319637]:- assistant-stream@0.3.28
- @assistant-ui/core@0.2.23
- @assistant-ui/store@0.2.22
0.0.46#
Patch Changes#
-
#5025
d15791c- refactor: share interrupt-response validation between submitInterruptResponses and steerAway (@ShobhitPatra) -
#5110
8150626- fix: apply mcp-apps ACTIVITY_SNAPSHOT events to tool calls from restored history (@VihaanAgarwal) -
#5095
1e3e195- fix: preserve MCP Host fields in AG-UI tool results and restored history (@samdickson22) -
#5039
8faad07- refactor: share parseDataUrl and httpUrlPattern from core internal (@ShobhitPatra) -
Updated dependencies [
8630186,908ec91,0d0834d,3355098,79034bb,7207b19,446a118,a081656,25a5be0,b17d392,20643e2,47562fd,afacb10,af6c945,33924df,19cfdcd,044def8,039b75f,5e4dd9f,5da0d93,85d4976,5135400,fc6b4ad,121ee83,2b2587a,ca80153,e4ce1a2,f2f5e83,ec8ee6a,9a343db,666aaab,c1b1750,f263c9e,475fca3,8faad07,61518b9,5412099,1eb7275,c47bdf4,ba948d8,de54334,44aac58,9402648,4651ea5,2f69f68,390e417,2bc6798]:- assistant-stream@0.3.27
- @assistant-ui/core@0.2.22
- @assistant-ui/store@0.2.21
0.0.45#
Patch Changes#
-
#4828
9e23265- feat: useAgUiState and useAgUiSetState hooks exposing shared agent state with optimistic updates that ride the next run (@okisdev) -
#4760
15b9ac2- feat: auto-cancel pending client-side tool calls on send, edit, and reload (opt out with autoCancelPendingToolCalls: false) (@ShobhitPatra) -
#4776
a5ce81a- fix: preserve branchable history loaded by the AG-UI runtime (@Kinfe123) -
#4938
477d08e- refactor: back AG-UI thread state with a MessageRepository source of truth (@okisdev) -
#4898
a84cf6d- feat: plumb an optional serverId through MCP Apps metadata and host calls for multi-MCP routing (@okisdev) -
#4674
16d5ec4- feat: steer-away cancels pending client-side tool calls (@ShobhitPatra) -
#4895
139f7c5- feat: surface the mcp-apps ACTIVITY_SNAPSHOT CallToolResult on the tool part result while preserving the model-facing text for subsequent runs (@okisdev) -
Updated dependencies [
43b8ce8,1e926b6,d6c7571,4d7a447,ca751f4,2aca5e0,908af6d,1b46551,7865f67,438ecd3,5a34e8c,5dbbac4,d3bd0ed,84e8ddf,8282269,03ffe44,38bf104,19b2a00,77c7b26,026a7ae,160b0af,c814c9c,6be3b67,c590a21,0686f4e,a84cf6d,9f99c46,c2d2271,e3aba86,25f9eb2,84e8ddf,d03e5cf,ef81c86,5ade3a5,1f284ac,65ba32a,5325f09]:- assistant-stream@0.3.26
- @assistant-ui/core@0.2.21
- @assistant-ui/store@0.2.20
0.0.44#
Patch Changes#
-
#4615
c4fcb07- feat(react-ag-ui): restore interrupt status in fromAgUiMessages from persisted metadata (@ShobhitPatra) -
Updated dependencies [
523e0b5,f833bc1]:- @assistant-ui/core@0.2.20
- assistant-stream@0.3.25
0.0.43#
Patch Changes#
-
#4538
13df77b- feat(react-ag-ui): restore requires-action status for pending tool calls in fromAgUiMessages so reloaded human-in-the-loop calls are actionable (@okisdev) -
#4533
fa4c23d- fix: order tool-call parts by parentMessageId (@dkachur1)The run aggregator appended tool-call parts in wire-arrival order. Because the messages and tool-call channels are not ordered relative to each other on the wire, a tool whose
TOOL_CALL_STARTarrived after a later message's text was rendered below that text instead of under the message that spawned it. Tool-call parts are now placed adjacent to theirparentMessageIdtext part (falling back to append when the parent is unknown), matching the message association the canonical@ag-ui/clientalready performs. -
#4485
3a405b4- feat(react-ag-ui): expose pending interrupts through the shared createRuntimeExtras + hooks.ts surface (useAgUiInterrupts,useAgUiSubmitInterruptResponses); the equivalentunstable_getPendingInterrupts/unstable_submitInterruptResponsesruntime methods are now deprecated but keep working (@okisdev) -
#4493
2303d0f- feat(react-ag-ui): adduseAgUiSteerAwayto send a new message while an AG-UI interrupt is pending; it accepts a string or partial message (the parent defaults to the head), cancels every open interrupt as{status:"cancelled"}on the wire (honoring the AG-UI interrupts spec), and resumes the run instead of throwing. passresponsesto resolve specific interrupts while cancelling the rest (@okisdev) -
Updated dependencies [
ddc40b7,ea52de0,29c6fdb,d0987a3,cefcf27,0c51b90,3a8f685,ec6adf4,4acd4c0]:- @assistant-ui/core@0.2.19
- assistant-stream@0.3.24
- @assistant-ui/store@0.2.19
0.0.42#
Patch Changes#
-
#4420
fe24ad6- feat(react-ag-ui): apply external state fromThreadHistoryAdapter.load()(@dkachur1)onSwitchToThreadalready applies returnedstatevialoadExternalState, but the historyload()path did not, so state restored on a fresh page load was dropped.ThreadHistoryAdapter.load()may now return an optionalstate, andAgUiThreadRuntimeCoreapplies it — making both load paths symmetric. -
Updated dependencies [
68dfbaa,fe24ad6]:- @assistant-ui/core@0.2.18
0.0.41#
Patch Changes#
-
#4414
344f737- chore: importgenerateIdandfromThreadMessageLikefrom the public@assistant-ui/coreentry instead of/internal(@okisdev)no behavior change; these utilities are now part of the public API.
-
Updated dependencies [
344f737,a2e21ee]:- @assistant-ui/core@0.2.17
0.0.40#
Patch Changes#
-
Updated dependencies [
434bba5,4cc7eaa]:- assistant-stream@0.3.23
- @assistant-ui/core@0.2.16
0.0.39#
Patch Changes#
-
#4381
f9db6ca- feat: accept any AbstractAgent in useAgUiRuntime instead of requiring HttpAgent (@dkachur1) -
#4380
6f2f687- feat: forward the full ExternalStoreThreadListAdapter (threads, archivedThreads, onRename, onArchive, ...) through adapters.threadList so server-persisted threads can be registered and switched to; clear messages before onSwitchToThread so the previous thread's messages no longer merge in as a phantom sibling branch; onSwitchToThread can return unstable_resume to reattach to an in-flight run after switching (resumes in the background and requires a ThreadHistoryAdapter with resume(), otherwise it reports through onError instead of re-running the agent) (@dkachur1) -
#4362
64a6566- fix: attach a TOOL_CALL_RESULT for a prior run's tool call to its owning message instead of synthesizing a duplicate empty-args part (@dkachur1) -
#4382
fa89168- fix: keep failed and aborted runs visible. the synthetic RUN_FINISHED from onRunFinalized used to overwrite RUN_ERROR with a successful status, so failed runs rendered as complete and MessagePrimitive.Error never showed. aborts (which @ag-ui/client routes through onRunFailed) now map to RUN_CANCELLED instead of RUN_ERROR, so the run lands as incomplete/cancelled. (@dkachur1) -
Updated dependencies [
c207bcd,ae59baf,4583ca7,94cc028]:- @assistant-ui/core@0.2.15
- assistant-stream@0.3.22
0.0.38#
Patch Changes#
-
#4321
f5e183b- feat: restore multimodal user input (image,audio,video,document, and legacybinaryparts) as attachments infromAgUiMessages, so persisted conversations reload attachments instead of dropping them and re-send them on the next run (@dkachur1) -
Updated dependencies [
ab8e5bc,59d252f,feecac3,5a4f20e,f10b8ae,1fb5862]:- @assistant-ui/core@0.2.14
0.0.37#
Patch Changes#
-
#4317
89e603e- fix: mark the streaming assistant placeholder withmetadata.isOptimisticso the message repository evicts it after the client→server id swap, instead of leaving a phantom empty sibling branch on every run (@dkachur1) -
Updated dependencies [
60ef0e9,1b6a0d6,1b6a0d6]:- @assistant-ui/core@0.2.13
0.0.36#
Patch Changes#
-
#4278
a4d9836- feat: consume ACTIVITY_SNAPSHOT events to support MCP Apps on the AG-UI runtime (@ShobhitPatra) -
#4264
11f2321- feat: exportfromAgUiMessagesfrom the package root (@serhiizghama)Converting persisted AG-UI messages to assistant-ui messages (e.g. when
restoring a conversation from aGET /agents/stateendpoint on page load)
previously required reaching into package internals.fromAgUiMessagesis now
a public export, typed to returnThreadMessageLike[]so its output plugs
directly intoExportedMessageRepository.fromArrayinside a history adapter. -
#4233
465f264- fix: import AG-UIreasoningmessages fromMESSAGES_SNAPSHOT(@dkachur1)fromAgUiMessagesonly branched ontool/assistant/user/system, so
reasoningmessages in aMESSAGES_SNAPSHOTwere silently dropped on cold
reload even though the liveREASONING_*(and deprecatedTHINKING_*) path
already surfaces them. They are now converted faithfully to areasoning
assistant part.activitymessages carry a structured payload with no
assistant-ui message-part equivalent and remain intentionally unmapped. -
#4232
a16baa8- feat: emit AG-UI multimodal input parts (image/audio/video/document with typed data/url sources) for file attachments instead of the legacybinaryinput content (@dkachur1) -
Updated dependencies [
2a84174,a0a0769,19c5b5f,dbdfb15,ca191dc,15878d8,44ff4bf,26a365b]:- @assistant-ui/core@0.2.11
- assistant-stream@0.3.21
0.0.35#
Patch Changes#
-
#4241
b94f545- fix: preserve frontend tool results and auto-continue when they resolve before RUN_FINISHED (@Yonom) -
#4224
f086497- feat(react-ag-ui): honorCreateResumeRunConfig.streaminAgUiThreadRuntimeCore(@dkachur1)resume()previously loggedresume stream is not supportedand fell back to a freshagent.runAgent(...), re-running the agent on every resume. It now passes the resume generator intostartRun, which replays eachChatModelRunResultinto the existing assistant message (no newrunId, no replayedagent.runAgent). On historyload()withunstable_resume, the adapter now feedshistory.resume()when present (falling back to a fresh run otherwise), andResumeRunConfig.streamis typed as the real(options: ChatModelRunOptions) => AsyncGenerator<ChatModelRunResult, void, unknown>instead ofunknown. This lets apps that persist their own AG-UI event stream re-attach and continue consuming on reload. -
#4210
8dc2e0d- feat(react-ag-ui): apply AG-UI STATE_DELTA events (@okisdev) -
Updated dependencies [
cba2b42,4145caa,58f80e0,5fe118d,dcd5897,0558db2,69540af,d9b3119,ae54c55,7640b31]:- assistant-stream@0.3.20
- @assistant-ui/core@0.2.10
0.0.34#
Patch Changes#
-
#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. -
#4135
e7c2396- align the runtime wrapper hooks so every distribution forwards the same set of optional adapter-level fields touseExternalStoreRuntime. closes #4134. (@okisdev)useChatRuntimeanduseAISDKRuntime(which already acceptedsuggestions) gain three new options:isDisabled, disables the composer input entirely.isSendDisabled, keeps the input usable but makessend()a no-op (paired withcomposer.canSend).unstable_capabilities, per-thread capability overrides (currently{ copy?: boolean }).
useLangGraphRuntime,useA2ARuntime,useAgUiRuntime,useAdkRuntime,useStreamRuntime,useOpenCodeRuntimegain all four (the three above plussuggestions).adapter-level additions, where missing:
useChatRuntime/useAISDKRuntimealready accepteddictationandvoicethrough theExternalStoreAdapteradapter shape; this just confirms the typing.useLangGraphRuntime,useA2ARuntime,useAgUiRuntime,useAdkRuntime,useStreamRuntime,useOpenCodeRuntimenow acceptdictationandvoicein theiradaptersobject and forward them through.useOpenCodeRuntimegains anadaptersoption for the first time (attachments / speech / dictation / voice / feedback).
every new field is optional and defaults to the prior behavior, so existing call sites need no changes.
-
#4133
c4d3eea- forward per-toolproviderOptionsfromuseAssistantToolthroughtoToolsJSONSchemaandfrontendToolsinto the AI SDK request body, and emit tool entries in alphabetical order so identical tool sets produce byte-identical request bodies for stable prompt caching.react-ag-uiinherits the sort viatoAgUiTools, so identical tool sets reach the AG-UI runtime in a stable order regardless of mount order. (@okisdev)this lets you opt into provider-specific tool features (e.g. Anthropic's
defer_loading, Anthropic Tool Search Tool) without any provider-aware code in assistant-ui:useAssistantTool({ toolName: "get_weather", parameters: schema, providerOptions: { anthropic: { deferLoading: true } }, execute: async ({ city }) => fetchWeather(city), });the value is passed through verbatim; the AI SDK provider (
@ai-sdk/anthropic,@ai-sdk/openai, ...) interprets it. -
Updated dependencies [
1315789,299d448,4429aa3,e76611f,76f7d16,eef724e,2dec3ae,fcb6baf,c4d3eea]:- assistant-stream@0.3.18
- @assistant-ui/core@0.2.8
0.0.33#
Patch Changes#
- #4125
e639a11- chore: drop tracker-behaviour explainer comments left behind in satellite runtimes (@Yonom)
0.0.32#
Patch Changes#
-
Updated dependencies [
13a12c4,0a0c306,6a0ecb2,e4634a5,325de4c,01244a5,f2ec01c]:- assistant-stream@0.3.16
- @assistant-ui/core@0.2.5
0.0.31#
Patch Changes#
-
#4066
3bc6dc0- fix(react-ag-ui): preserve arrival order of parts in RunAggregator (@tlecomte)The aggregator now strictly preserves the order events arrive from the upstream stream. Each
REASONING_START,TOOL_CALL_START, andTEXT_MESSAGE_ENDacts as a boundary that closes the current active part, so consecutive events of the same type are grouped into one part while interleaved events of a different type produce separate parts in chronological order.Previously, the first reasoning block was always moved before the first text part regardless of arrival order, and multiple reasoning cycles were merged into a single block. Both behaviours have been removed.
-
#3925
53cdc51- feat(react-ag-ui): track streaming timing on the run aggregator souseMessageTiming()works on AG-UI assistant messages (@shashank-100) -
Updated dependencies [
94548fa,94548fa,8b6fc88,179895f,7a8bf26,3b2bbce]:- assistant-stream@0.3.15
- @assistant-ui/core@0.2.3
0.0.30#
Patch Changes#
-
#3974
1959f3a- feat(react-ag-ui): surface AG-UI interrupt-aware run lifecycle (@okisdev)event-parserreads the optionaloutcomeonRUN_FINISHEDand forwards bothsuccessandinterruptvariants; the subscriber subscribes toonRunFinishedEvent(withonRunFinalizedas a fallback for older servers).RunAggregatormapsoutcome.type === "interrupt"torequires-actionwithreason: "interrupt"and writes the interrupts tometadata.custom.agui.interrupts.useAgUiRuntimereturns anAgUiAssistantRuntimeaugmented withunstable_getPendingInterruptsandunstable_submitInterruptResponses; the latter validates coverage and expiry on the client, then issues a fresh run withRunAgentInput.resumepopulated. the runtime state snapshot is also synced onto the agent before each run sostateactually reaches the protocol layer. -
#3977
876abd1- feat(react-ag-ui): tighten interrupt lifecycle (@okisdev)append,reload, andresumenow refuse to start a new run while interrupts are still pending on the thread; the call throws with a message pointing atsubmitInterruptResponsesinstead of letting the request hit the wire and rely on the agent to reject it (AG-UI interrupts spec rule 4).AgUiInterrupt.reasonis typed asAgUiInterruptReason("tool_call" | "input_required" | "confirmation" | (string & {})), so the spec values autocomplete while string extension stays open.onRunFinishedEventnow ignores payloads that parse as a different event type, so a misrouted callback can no longer suppress theonRunFinalizedfallback. -
#4017
1802e08- fix(react-ag-ui): adoptTEXT_MESSAGE_START.messageIdas the assistantThreadMessage.id(@okisdev)AgUiThreadRuntimeCorenow inserts the assistant placeholder under an optimistic id (generateOptimisticId), then atomically reassigns the message id to the server-suppliedmessageIdthe first timeRunAggregatorobserves one (onTEXT_MESSAGE_START,TEXT_MESSAGE_CONTENT,TEXT_MESSAGE_END, orTOOL_CALL_START.parentMessageId).assistantHistoryParentsandrecordedHistoryIdsmigrate with the id, sopersistAssistantHistory,addToolResult, and downstream lookups keep working and resolve to the canonical AG-UI id. This brings the streaming path in line withMESSAGES_SNAPSHOTimports, which were already keyed on the server id.TOOL_CALL_RESULT.messageIdis now surfaced asunstable_toolMessageIdon the tool-call part, so tool messages round-trip back to AG-UI with their original id instead of a synthetic${toolCallId}:toolvalue. -
Updated dependencies [
9ecda1d,35d0146,fa4510a,c9dd16c,dea8bc7,9c3d24d]:- assistant-stream@0.3.14
- @assistant-ui/core@0.2.1
0.0.29#
Patch Changes#
- Updated dependencies [
040d469]:- @assistant-ui/core@0.2.0
0.0.28#
Patch Changes#
-
Updated dependencies [
7098bab,b090acb]:- @assistant-ui/core@0.1.18
- assistant-stream@0.3.13
0.0.27#
Patch Changes#
-
Updated dependencies [
c7a274e,ce865bc,ca8f526,c56f98f,974d15e,4b19d42,da0f598,d53ff4f,20f8404,17958c9]:- @assistant-ui/core@0.1.15
- assistant-stream@0.3.12
0.0.26#
Patch Changes#
-
43fb4f7: fix(react-ag-ui): preserve user message attachments when converting to AG-UI format
toAgUiMessages()previously calledextractText()for user messages, silently dropping image and file attachments- User messages with attachments now emit AG-UI
InputContent[]: images map to theimagevariant with adataorurlsource, files map to thebinaryvariant preservingfilename - Falls back to plain string
contentwhen no binary parts are present, preserving backward compatibility
-
c988db8: chore: update dependencies
-
Updated dependencies [f20b9ca]
-
Updated dependencies [c988db8]
- @assistant-ui/core@0.1.14
- assistant-stream@0.3.11
0.0.25#
Patch Changes#
- 376bb00: chore: update dependencies
- Updated dependencies [42bc640]
- Updated dependencies [87e7761]
- @assistant-ui/core@0.1.13
0.0.24#
Patch Changes#
- bdce66f: chore: update dependencies
- 209ae81: chore: remove aui-source export condition from package.json exports
- Updated dependencies [dffb6b4]
- Updated dependencies [6554892]
- Updated dependencies [9103282]
- Updated dependencies [876f75d]
- Updated dependencies [bdce66f]
- Updated dependencies [4abb898]
- Updated dependencies [209ae81]
- Updated dependencies [af70d7f]
- assistant-stream@0.3.9
- @assistant-ui/core@0.1.10
0.0.23#
Patch Changes#
- 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
0.0.22#
Patch Changes#
- 736344c: chore: update dependencies
- Updated dependencies [1406aed]
- Updated dependencies [9480f30]
- Updated dependencies [28a987a]
- Updated dependencies [736344c]
- Updated dependencies [ff3be2a]
- Updated dependencies [70b19f3]
- @assistant-ui/core@0.1.8
- assistant-stream@0.3.7
0.0.21#
Patch Changes#
- 349f3c7: chore: update deps
- 619d923: Depend on @assistant-ui/core instead of @assistant-ui/react
- 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
0.0.20#
Patch Changes#
- 164ff4e: fix(react-ag-ui): preserve tool message id through AgUiMessage conversion round-trip
- Updated dependencies [5ae74fe]
- Updated dependencies [8ed9d6f]
- @assistant-ui/react@0.12.16
0.0.19#
Patch Changes#
- a845911: chore: update dependencies
- a8983ae: fix(react-ag-ui): add REASONING_* event support to match @ag-ui/client v0.0.45
- c482ca2: fix(react-ag-ui): correctly import
MESSAGES_SNAPSHOTevents that includerole: "tool"messages by normalizing them into assistant tool-call results before core conversion. - Updated dependencies [07dcce0]
- Updated dependencies [a845911]
- Updated dependencies [bc40eaf]
- Updated dependencies [be23d74]
- Updated dependencies [1eb059c]
- @assistant-ui/react@0.12.15
0.0.18#
Patch Changes#
- 36ef3a2: chore: update dependencies
- 8c29377: fix(react-ag-ui): route tool results to the latest pending tool call and avoid false auto-resume triggers
- Updated dependencies [36ef3a2]
- Updated dependencies [6692226]
- Updated dependencies [c31c0fa]
- Updated dependencies [1672be8]
- Updated dependencies [28f39fe]
- Updated dependencies [3a1cb66]
- Updated dependencies [14769af]
- Updated dependencies [7c360ce]
- Updated dependencies [a638f05]
- Updated dependencies [8a78cd2]
- assistant-stream@0.3.4
- @assistant-ui/react@0.12.12
0.0.17#
Patch Changes#
- 88ec552: fix(react-ag-ui): auto-resume run after frontend tool execution completes
- Updated dependencies [5bbe8a9]
- Updated dependencies [5e304ea]
- Updated dependencies [546c053]
- Updated dependencies [a7039e3]
- Updated dependencies [16c10fd]
- Updated dependencies [98c3d54]
- Updated dependencies [b181803]
- Updated dependencies [7836760]
- Updated dependencies [9276547]
- Updated dependencies [b65428e]
- Updated dependencies [af5b085]
- Updated dependencies [61b54e9]
- Updated dependencies [a094c45]
- Updated dependencies [4d7f712]
- Updated dependencies [ecc29ec]
- Updated dependencies [6e97999]
- Updated dependencies [a247fc9]
- Updated dependencies [f414af9]
- Updated dependencies [b48912c]
- Updated dependencies [93910bd]
- Updated dependencies [58a8472]
- @assistant-ui/react@0.12.11
- assistant-stream@0.3.3
0.0.16#
Patch Changes#
- afaaf3b: feat(react-ag-ui): support frontend tool execution in AG-UI runtime
- Updated dependencies [afaaf3b]
- Updated dependencies [afaaf3b]
- Updated dependencies [afaaf3b]
- Updated dependencies [afaaf3b]
- Updated dependencies [51d24be]
- Updated dependencies [afaaf3b]
- @assistant-ui/react@0.12.10
0.0.15#
Patch Changes#
- a088518: chore: update dependencies
- Updated dependencies [a088518]
- Updated dependencies [d8122cc]
- assistant-stream@0.3.2
- @assistant-ui/react@0.12.9
0.0.14#
Patch Changes#
- d45b893: chore: update dependencies
- Updated dependencies [d45b893]
- Updated dependencies [fe71bfc]
- assistant-stream@0.3.1
- @assistant-ui/react@0.12.5
0.0.13#
Patch Changes#
- a888c9b: feat(react-ag-ui): add experimental switch new thread
0.0.12#
Patch Changes#
- acbaf07: feat: add framework-agnostic
toToolsJSONSchemaandtoGenericMessagesutilities toassistant-stream - Updated dependencies [07d1c65]
- Updated dependencies [b591d72]
- Updated dependencies [59a338a]
- Updated dependencies [acbaf07]
- Updated dependencies [c665612]
- Updated dependencies [0371d72]
- Updated dependencies [e8b3f34]
- @assistant-ui/react@0.12.3
- assistant-stream@0.3.0
0.0.11#
Patch Changes#
- 605d825: chore: update dependencies
- Updated dependencies [1ea3e28]
- Updated dependencies [8cbf686]
- Updated dependencies [a8be364]
- Updated dependencies [605d825]
- @assistant-ui/react@0.12.2
- assistant-stream@0.2.48
0.0.10#
Patch Changes#
- c7b7897: fix(react-ag-ui): load history on runtime initialization
- 7073ccc: fix(react-ag-ui): use
threadIdinstead of hardcodedmain - Updated dependencies [6eab31e]
- Updated dependencies [9314b36]
- Updated dependencies [083ed83]
- Updated dependencies [6511990]
- Updated dependencies [a526e63]
- @assistant-ui/react@0.11.60
0.0.9#
Patch Changes#
- 3719567: chore: update deps
- Updated dependencies [3719567]
- assistant-stream@0.2.47
- @assistant-ui/react@0.11.58
0.0.8#
Patch Changes#
- bb1b4c2: fix(react-ag-ui): add missing DictationAdapter to UseAgUiRuntimeAdapters
- Updated dependencies [ebd41c7]
- Updated dependencies [9a110ea]
- Updated dependencies [caee095]
- Updated dependencies [9883125]
- @assistant-ui/react@0.11.57
0.0.7#
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-ui/react@0.11.53
0.0.6#
Patch Changes#
- e8ea57b: chore: update deps
- Updated dependencies [bae3aa2]
- Updated dependencies [e8ea57b]
- @assistant-ui/react@0.11.50
- assistant-stream@0.2.45
0.0.5#
Patch Changes#
- Updated dependencies [89aec17]
- Updated dependencies [ee7040f]
- Updated dependencies [bd27465]
- Updated dependencies [a3e9549]
- Updated dependencies [206616b]
- Updated dependencies [7aa77b5]
- assistant-stream@0.2.44
- @assistant-ui/react@0.11.49
0.0.4#
Patch Changes#
- 01c31fe: chore: update dependencies
- Updated dependencies [ba26b22]
- Updated dependencies [d169e4f]
- Updated dependencies [da9f8a6]
- Updated dependencies [01c31fe]
- @assistant-ui/react@0.11.48
- assistant-stream@0.2.43
0.0.3#
Patch Changes#
- ec662cd: chore: update dependencies
- Updated dependencies [ec662cd]
- assistant-stream@0.2.42
- @assistant-ui/react@0.11.45
0.0.2#
Patch Changes#
- 2c33091: chore: update deps
- Updated dependencies [2c33091]
- assistant-stream@0.2.41
- @assistant-ui/react@0.11.40
0.0.1#
Patch Changes#
- Updated dependencies [ef58020]
- assistant-stream@0.2.40