Version Packages#52
Merged
Merged
Conversation
gitsad
approved these changes
Jul 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@mobile-reality/mdma-agui@0.3.0
Minor Changes
16fe1f2: Surface agentic activity — tool calls, run steps, and reasoning streams — as an ordered feed via the
onActivityoption andbridge.activity(also returned fromuseMdmaAgentStream). Activity isdeliberately kept out of the MDMA document store, so agent chatter and rendered components stay
decoupled: render it as a timeline beside the documents, or ignore it entirely. Each
MdmaActivitycarries a stable
id(tool-call id / step handle / reasoning message id), akind(
'tool' | 'step' | 'reasoning'), alabel, astatus('running' | 'done'), and streameddetail— accumulating tool args, the tool result, or the reasoning text.16fe1f2: Accept MDMA on a dedicated
CUSTOMevent channel alongside inline assistant text. A backend thatwould rather not interleave documents into visible prose can emit
{ type: 'CUSTOM', name: 'mdma', value }(the name is exported asMDMA_CUSTOM_EVENT_NAME), wherevalueis either the markdown string or{ messageId?, markdown }. Both channels feed the sameparse/store/render pipeline — out-of-band text is parsed immediately rather than throttled, since it
arrives complete — and each message reports where it came from via
message.source(
'text' | 'custom'). Keeping documents off the prose channel means no markup leaks into the chat,which is what a tool-calling agent wants when the document lives in a tool argument.
16fe1f2: Resume parked runs through AG-UI's native
interruptprimitive. When a run finishes with aninterruptoutcome the bridge exposes the pending set asbridge.interruptsand firesonInterrupt; answering the component an interrupt refers to now resolves that interrupt withrunAgent({ resume }), so the parked run continues with its state intact instead of starting afresh turn.
The new
resumeModeoption selects the strategy:'auto'(default) — resolve a matching interrupt if the run is parked on one, otherwise fall backto a fresh user turn.
'interrupt'— only ever resolve a matching interrupt; if none matches, do nothing.'user-turn'— always open a fresh user turn (addMessage+runAgent).Behavior change: a user decision previously always opened a fresh user turn. Under the new
'auto'default it will resolve a matching interrupt when the run is parked on one. PassresumeMode: 'user-turn'to keep the previous behavior. ReturningfalsefromonAction, orsupplying
resume, still overrides resumption entirely.16fe1f2: Track the agent's shared state (
STATE_SNAPSHOT/STATE_DELTA, including JSON-patch deltas) as acomponentId → valuesmap, exposed via theonStateoption andbridge.state, and use it tohydrate MDMA stores. MDMA components are headless — a document describes intent and takes its values
from state — so this is what lets a form the agent renders come up pre-filled from what it
already knows.
Hydration is reactive: state arriving after a component is already on screen is dispatched into
that live store too, so the agent can set a field the user is currently looking at without
re-rendering the component.
@mobile-reality/mdma-demo-native@0.0.4
Patch Changes
mdma-example-agui@0.0.1
Patch Changes