Protocol direction: rewind/time-travel, tool displayName, and the reserved transport flags (resumable / pushNotifications) #2161
contextablemark
started this conversation in
Proposals
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
@ferponse surfaced five design questions with some protocol-level implications in a single burst.
Rather than answer them one PR at a time, capturing them here together so that the necessary
discussion can be centralized. The maintainers of other SDKs and integrations are therefore
invited to weigh in before anything lands in core.
These five all ask the same meta-question — lift into core, or leave integration-local?
A couple of them (notably #2106, and the framing of #2091) reach for
A2A shapes as the ready-made answer, so it's worth being
explicit about a design principle up front:
With that lens, grouping these together so the protocol moves in one coherent direction rather
than piecemeal.
1. Conversation rewind / edit / regenerate — "time travel" · #2154
Today every integration re-infers rewind intent by diffing incoming
messagesagainst its ownpersisted history. Proposal: standardize it at the protocol level.
RunAgentInput(
rewindBeforeMessageId/forkFromMessageId), mirroring the existingresume/ResumeEntryprecedent already in the protocol.accompanying spec docs, not a new field.
Question for the thread: does Option 1 fit the
RunAgentInputcontract cleanly, and doesany integration have a reason it can't honor a fork anchor? Are there alternative approaches that
would work better across frameworks?
2. Server-decided display name for tool calls · #2146
Frontends currently duplicate (and re-localize) the
toolName→ human-label mapping. Proposal:let the server attach a display name.
displayNameonToolCallStart/ToolCallResult.CUSTOM-event convention instead of a first-class field.Question: is a first-class optional field worth the surface-area cost vs. the
CUSTOMconvention?
3. Reserved
pushNotificationstransport flag · #2106The reserved flag is currently hollow (advertised, no contract), so it needs a contract or it
should stop being advertised. The proposal models it directly on A2A
PushNotificationConfig—which is exactly the coupling the principle above cautions against.
webhook/delivery shape expressed in AG-UI's own vocabulary. A2A's design is a useful
reference for what fields a push contract needs; we can stay interoperable with it and lift
the genuinely general parts without adopting the A2A type as our own.
driving the exact shape.
PushNotificationConfigdirectly — least work, but couples a corecapability to A2A's model; this is the one I'd want strong justification for.
Of the changes proposed, this is the one I'm most concerned about - if we're going to start
adding support for push notifications, it needs to be carefully considered and done in a platform-
and transport-agnostic fashion. Even the use of the term "webhook" is already indicating a bias.
4. Reserved
resumabletransport flag · #2105Also hollow: the flag exists with no backing wire mechanism. Proposal: a monotonic per-run
sequence number on
BaseEvent+Last-Event-IDfor SSE resumption.BaseEvent? the transport envelope?)and how is resumption requested (Last-Event-ID header? query param?).
Last-Event-IDisstandard SSE with no A2A coupling — so it's the more straightforward of the two reserved
flags.
5. Bidirectional shared state across an A2A boundary · #2091
More a question than a proposal: the blessed architecture when the state-owning agent sits
behind an A2A boundary (editable-form use case).
stateless across the boundary. This is the general answer regardless of what sits on the other
side (A2A or anything else). Any A2A ↔
STATE_DELTADataPart mapping is an integration-levelenhancement — explicitly not a core change — which keeps core from taking a dependency on
A2A's data model.
The cross-cutting call
with A2A at the integration boundary and borrow good ideas, but A2A-specific shapes don't get
pulled into core. Does anyone see a case here where that principle should bend?
RunAgentInputrewindanchor, tool
displayName) — and is each the right general shape, not just the shape oneintegration needs today?
Once there's rough consensus here, I'll convert the accepted items into scoped issues and note
which ones @ferponse is picking up.
Beta Was this translation helpful? Give feedback.
All reactions