feat(eve): remote session-callback terminal envelope#1202
Open
ruiconti wants to merge 1 commit into
Open
Conversation
Session callbacks now carry an event envelope discriminated by event.status. The terminal lane (status: "termination", session.completed/session.failed) is the durable control path: the callee posts one terminal callback, the caller's callback route projects it and resumes the parked parent turn exactly once, never dropped. "notification", "working", and "input_required" are reserved on the wire vocabulary and rejected by the terminal route — the notification relay lane lands separately (it has different delivery semantics: fire-once, drop-ok, rendering-only). Also drops a model-supplied empty outputSchema in remote dispatch, which otherwise forced the callee into structured-output completion and failed the call. parseSessionCallback is renamed to parseCallbackMetadata to distinguish the create-session callback metadata from the new callback events. The callback wire shape changed: caller and callee must both run this version. Signed-off-by: Rui Conti <ruiconti@gmail.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Jul 25, 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.
Part of the event-lane split for #1170. This PR is the durable control lane: remote-agent terminal callbacks. The relay lane (notifications → channels) and the research doc are separate PRs; this one stands alone off
main.What
Remote session callbacks now carry an event envelope discriminated by
event.status. The terminal lane —status: "termination"withsession.completed/session.failed— is the control path a remote call resolves on: the callee posts exactly one terminal callback, and the caller's callback route projects it into a subagent result and resumes the parked parent turn."notification","working", and"input_required"are declared on the wire vocabulary but reserved — the terminal route rejects them. They belong to the relay lane, which has fundamentally different delivery semantics and lands separately.Also folds in a remote-dispatch fix: a model-supplied empty
outputSchema: {}is now dropped instead of forwarded, which otherwise forced the callee into structured-output completion and failed the call withOUTPUT_SCHEMA_NOT_FULFILLED. (Local delegation already filtered it.)parseSessionCallback→parseCallbackMetadata, distinguishing create-session callback metadata from the new callback events.Why two lanes
session.completed/failedauthorization.*, futureworkingA dropped terminal callback wedges the parent forever; a dropped notification is a sign-in button that doesn't render. Different tolerances, different mechanisms — conflating them under one "event callback" path was the mistake this split corrects.
Wire compatibility
The callback shape changed (events are now enveloped). Caller and callee deployments must both run this version; pre-1.0, per repo policy.
Unit suite green (5352), lint + guard clean.