@assistant-ui/react-google-adk#
0.0.26#
Patch Changes#
-
#5901
4390880- fix: answer ADK tool confirmations through the core tool-approval seam instead of writing a fabricated tool result, and replay client-supplied tool results when a thread is reloaded (@samdickson22)A confirmation is now decided through
onRespondToToolApproval, and both the syntheticadk_request_confirmationcall and the call it gates carry that one approval, so answering either replies to the gate ADK resumes on.Loading a thread also replays the tool results the client supplied — confirmation replies,
useAdkSubmitInputanswers,useAdkSubmitAuthcredentials, andonAddToolResultresults. These were previously dropped on reload, so their tool calls came back result-less and re-rendered asrequires-action. -
#5853
8169942- fix: validate Google ADK proxy request payloads (@Kinfe123) -
#6028
9f2427a- fix: validate events loaded from Google ADK session history (@Kinfe123) -
#5853
8169942- fix: validate Google ADK stream event payloads (@Kinfe123) -
#6000
6467817- fix(react-google-adk): cancel active streams on runtime teardown (@Kinfe123) -
Updated dependencies [
ac0c836,c3fd447,f9529bf,f9529bf,bd01e8b,05b94bd,cef671d,ef7f70d,4a2a76f,04e967c,39db2ff,0e91e27,c5bc8ed,a2a753b,2b0fec7,bec0753,4326079,3d68b16,98795aa,9d920cc,1b9c33d,d68918e,74dca03,87bf950,5a01343,0f6e9e9,f0d1d48,b80a6be,01580e3,ab7f49f,e8c53e9,53ae80f,5f4dee5,d79b87d,645c56b,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,61d29f4,7ea9de1,72a6272,51886b2,3053195,44e574f,14c3b5a]:- @assistant-ui/core@0.3.14
- @assistant-ui/store@0.3.10
- assistant-cloud@0.1.41
- assistant-stream@0.3.38
0.0.25#
Patch Changes#
-
#5730
6c9560d- chore: drop dependencies that are never imported (@okisdev) -
Updated dependencies [
f551562,dc7b77d,0ae51a8,d1b7097,e319574]:- @assistant-ui/core@0.3.11
- assistant-stream@0.3.37
0.0.24#
Patch Changes#
-
Updated dependencies [
94dc3e5,ab57969]:- assistant-stream@0.3.36
- assistant-cloud@0.1.39
- @assistant-ui/core@0.3.10
- @assistant-ui/store@0.3.8
0.0.23#
Patch Changes#
-
#5663
1c71617- fix: isolate runtime event callback failures from ADK streams (@Kinfe123) -
Updated dependencies [
bd4c0ad,4aa1b1d,bd4c0ad]:- @assistant-ui/core@0.3.7
- @assistant-ui/store@0.3.5
0.0.22#
Patch Changes#
-
#5598
91b3a66- fix: keep ADK stream error events reliable when error callbacks fail (@Kinfe123) -
Updated dependencies [
dcacd9b,d52928d,d8a59ad,e70da91,aac3a8c,aa302ee,aa302ee,34cec64]:- @assistant-ui/store@0.3.4
- @assistant-ui/core@0.3.6
- assistant-stream@0.3.34
0.0.21#
Patch Changes#
-
#5456
ee2189f- fix: stop mangling file parts that carry an audio mime type (@okisdev)Outbound, the
filebranch forwardeddataverbatim into GeminiinlineData.data, which takes bare base64, while theaudiobranch stripped the data URL envelope first. Afilepart carrying a data URL therefore shippeddata:audio/wav;base64,...as the payload. Both branches now strip it.The
filebranch also now infers a url source from an unmarkedhttp(s)payload, matching the four sibling converters; previously only an explicitsourceType: "url"took that leg, so a plain URL was sent as if it were base64.Inbound, a user-role
filepart with no filename and a mime type of exactlyaudio/mp3oraudio/wavwas reclassified into the deprecatedUnstable_AudioMessagePart, so a caller following thefileplusaudio/*convention got a different part type back than it sent. File parts now stay file parts, which also means an audio file part on an assistant message survives instead of being dropped. -
#5445
2fdff87- feat: honor sourceType "url" in a2a, ag-ui, and adk file converters (@ShobhitPatra) -
#5545
e466edc- feat:threads.reloadMainThread()refetches an ADK session in place (@okisdev)The ADK runtime never registered
onRefetchThread, soreloadMainThread()fell back to remounting the runtime hook and discarded unsent composer input. It now refetches in place, matchingreact-langgraph: the runtime is reused, the draft survives, and messages stay rendered while the fresh session loads.loadgains a second argument carrying an abort signal, and returns the per-turn state the session events imply alongside the messages, so a refetch swaps the thread over in one commit instead of blanking a tool confirmation before the replacement arrives. Both are additive; aloadthat ignores the argument and returns only{ messages }behaves as before.Where this diverges from
react-langgraph, and why: a refetch that lands while a run is in flight, or after one has touched the thread, defers to the run rather than merging into it. Langgraph reconciles the two by message id, which relies on the server preserving the id the client sent. ADK assigns its own event ids, so an optimistic message cannot be correlated with the one the session stored for it, and a merge would duplicate it. -
#5544
5eac1d6- fix: a message keeps its id when its event is replayed (@okisdev)AdkEventAccumulatorminted assistant and tool message ids withuuidv4()on every pass, so replaying a stored event through a fresh accumulator produced different ids each time. A session load does exactly that, which churned those ids on every load: React remounted the message subtrees, andmessageMetadataMapentries (grounding, citation, usage) keyed on the old id were orphaned. Human messages already derived theirs from the event id.Both now derive from the event that carries them, and keep the bare event id free for the human message that has always used it: a tool message by the index of its part, an assistant message by how many that event has already opened. An event with no id of its own still gets a generated one, since it has never been through the session and has nothing stable to derive from.
This is about replaying one stored event; a message the client sent optimistically still carries a different id from the one the session assigns it.
-
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.20#
Patch Changes#
-
#5329
f30b54c- refactor: move createRuntimeExtras to the @assistant-ui/core/react entry and drop the internal re-export (@okisdev) -
#5315
676c751- fix: forward audio message parts and skip data parts instead of dropping or throwing (@ShobhitPatra) -
#5374
d486ffc- fix: cancel Google ADK streams when iteration stops early (@Kinfe123) -
Updated dependencies [
d2e7a4a,ecd7c87,2daf2d5,a5bdbed,fb993c3,3ae058c,f30b54c,936c52c,ee87dd9,e41734c,1c5266c,cdcdbd0,42dbc69,25f1e4f,d16e62d,60d049e,8643393,2eca438,23ee5db]:- @assistant-ui/store@0.3.2
- @assistant-ui/core@0.3.2
- assistant-stream@0.3.31
0.0.19#
Patch Changes#
-
#5285
d72c2b6- refactor: migrate to aui property accessors (@Yonom) -
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.18#
Patch Changes#
-
#5011
c430f19- fix: reject incomplete direct stream options (@Kinfe123) -
#5032
6153ff8- fix: validate session API response shapes (@Kinfe123) -
#5031
5bf7cbf- fix: validate event stream response content types (@Kinfe123) -
#5092
e18eb87- fix: validate Google ADK artifact API responses (@Kinfe123) -
Updated dependencies [
8630186,908ec91,0d0834d,3355098,3f90440,79034bb,7207b19,446a118,a081656,25a5be0,b17d392,20643e2,47562fd,ccebbf9,85d7c25,23a9925,7fde141,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-cloud@0.1.36
- @assistant-ui/store@0.2.21
0.0.17#
Patch Changes#
-
#4743
f597f06- fix: clarify invalid ADK proxy request body errors (@Kinfe123) -
#4880
d6c7571- refactor: consume the shared SSE event decoder (@okisdev) -
#4821
e5cce02- fix: parse standard SSE frames in Google ADK streams (@Kinfe123) -
#4964
3a63eaf- fix: normalize direct ADK stream API URLs (@Kinfe123) -
#4893
c7d6b23- fix: normalize trailing slashes in ADK session API URLs (@Kinfe123) -
#4957
65ba32a- fix: complete unsupported title generation streams (@Kinfe123) -
Updated dependencies [
43b8ce8,1e926b6,d6c7571,4d7a447,ca751f4,2aca5e0,908af6d,0ea628f,1b46551,7865f67,7cf5acc,7a85307,438ecd3,e4da8c5,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-cloud@0.1.35
- @assistant-ui/store@0.2.20
0.0.16#
Patch Changes#
-
#4515
f5e94b7- feat: forwardonThreadIdChangethrough the adapter entry hooks (useLangGraphRuntime,useStreamRuntime,useChatRuntime,useAdkRuntime,useOpenCodeRuntime,usePiRuntime). the option already existed onuseRemoteThreadListRuntimebut every wrapper dropped it, so routing/persistence built on the settled remote thread id never fired from these hooks. only the settled remote id is emitted; the transient__LOCALID_*placeholder is never surfaced. (@okisdev) -
#4475
4b22e39- refactor: adopt the shared createRuntimeExtras helper and move the extras type into types.ts, with no public API or behavior change (@okisdev) -
#4591
f582f09- feat: honor startRun false across staged-message-capable runtimes (@Yonom) -
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
0.0.15#
Patch Changes#
-
Updated dependencies [
2a84174,a0a0769,19c5b5f,dbdfb15,ca191dc,15878d8,44ff4bf,01cf957,26a365b]:- @assistant-ui/core@0.2.11
- assistant-stream@0.3.21
- assistant-cloud@0.1.32
- @assistant-ui/store@0.2.14
0.0.14#
Patch Changes#
-
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.0.13#
Patch Changes#
-
#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. -
#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.
-
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-cloud@0.1.30
0.0.12#
Patch Changes#
- #4125
e639a11- chore: drop tracker-behaviour explainer comments left behind in satellite runtimes (@Yonom)
0.0.11#
Patch Changes#
-
#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 typed
GenerativeUIRenderError(or invoke the optionalFallback). Composes with
MessagePrimitive.Partsvia the newcomponents.generativeUIoption, and
supports streaming partial specs.<MessagePrimitive.Parts components={{ generativeUI: { components: { Card, Button } }, }} /> -
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
- @assistant-ui/store@0.2.12
0.0.10#
Patch Changes#
- Updated dependencies [
040d469]:- @assistant-ui/core@0.2.0
0.0.9#
Patch Changes#
-
Updated dependencies [
7098bab,b090acb,5fdf17e]:- @assistant-ui/core@0.1.18
- assistant-stream@0.3.13
- @assistant-ui/store@0.2.10
0.0.8#
Patch Changes#
-
#3894
d3380f4- fix(react-google-adk): add missing DictationAdapter to UseAdkRuntimeOptions (@okisdev) -
#3905
d0b72cb- fix(react-google-adk): preserve file attachment data on the wire (@okisdev)useAdkRuntime.getMessageContentpreviously collapsed file message parts into a[File: <name>]text marker before sending to ADK, dropping the base64 payload entirely. newfileandfile_urlvariants onAdkMessageContentPartcarry the binary throughAdkClientanduseAdkMessages.contentToParts, which serialize them asinlineDataandfileDataon the wire. inbound,AdkEventAccumulatorsniffs MIME type so non-imageinlineDataproduces afilepart (rather than being silently coerced intoimage), and explicitly non-imagefileDataproducesfile_url;fileDatawith no MIME type falls back toimage_urlto preserve the legacy round-trip.convertAdkMessagemapsfileto a coreFileMessagePartandfile_urlto adatapart named"file_url". -
Updated dependencies [
549037a,005f83f,976aec5,25b97d5,2008fc9,88fcd35]:- @assistant-ui/core@0.1.16
- @assistant-ui/store@0.2.9
0.0.7#
Patch Changes#
-
#3843
c15a958- fix(react-google-adk): return the ADK session id asremoteIdfromcreateAdkSessionAdapter().initialize(). Previously the inputthreadId(an internal__LOCALID_*) was returned, so laterdelete(remoteId)calls hit/sessions/__LOCALID_*and 404'd — masked by the adapter's tolerated 404 on delete. (@okisdev) -
Updated dependencies [
c7a274e,ce865bc,ca8f526,c56f98f,974d15e,4b19d42,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
0.0.6#
Patch Changes#
-
147c1b8: fix(react-google-adk): render user-authored events as human messages
AdkEventAccumulator.processEventpreviously routedauthor: "user"events throughgetOrCreateAiMessage, producingtype: "ai"messages thatconvertAdkMessagemapped torole: "assistant"— so user text rendered as assistant bubbles. With Workflow agents this caused full multi-turn conversations to merge into a single assistant block. User events now createtype: "human"messages, preserving text, inline images, and file references. -
9abb15c: fix(react-google-adk): allow HITL interrupt tool UIs to render with
requires-actionstatusmakeAssistantToolUIfor HITL tools (adk_request_input, etc.) can now usestatus.type === "requires-action"to render input forms- Non-HITL final events still receive their manual
completestatus
-
4d2531e: fix(react-google-adk): don't auto-cancel HITL interrupts when user sends a new message
useAdkRuntime.onNewnow filters pending tool calls whose id is tracked inlong_running_tool_ids, so ADK HITL interrupts (adk_request_input,adk_request_confirmation,adk_request_credential) are no longer overwritten with{cancelled: true}when the user types a new message- Add
useAdkSubmitInput(toolCallId, result)to submit the user's answer as a{result}FunctionResponse, matching ADK'sunwrap_responsecontract so WorkflowRequestInputnodes resume with the unwrapped value AdkEventAccumulatorunionslong_running_tool_idsacross events instead of replacing, so multiple HITL interrupts in the same turn are all trackedonEdit/onReload/ session load paths now reset derived HITL state (longRunningToolIds,toolConfirmations,authRequests,escalated) via a newreplaceMessageshelper onuseAdkMessages, so stale interrupt markers don't leak into the next turn
Behavior change: HITL interrupts must now be answered through a tool UI using the dedicated submit helpers (
useAdkSubmitInput,useAdkConfirmTool,useAdkSubmitAuth). Typing in the composer while an interrupt is pending no longer sends a spurious cancellation. -
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
0.0.5#
Patch Changes#
- 376bb00: chore: update dependencies
- Updated dependencies [42bc640]
- Updated dependencies [376bb00]
- Updated dependencies [87e7761]
- @assistant-ui/core@0.1.13
- assistant-cloud@0.1.25
0.0.4#
Patch Changes#
- 5e23896: fix: skip partial functionCall events in AdkEventAccumulator to prevent incomplete tool calls from hanging the runtime
- 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.0.3#
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 [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
0.0.2#
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
- assistant-cloud@0.1.23
- @assistant-ui/store@0.2.5
0.0.1#
Patch Changes#
- 69886fd: feat: add Google ADK adapter package
- Updated dependencies [7ecc497]
- @assistant-ui/core@0.1.7