Thank you @ferponse for the submissions and I apologize for the delay in responding, though
even this response is more of a placeholder as your requests can't be considered in bulk and, with
most of them being features rather than fixes, some require more consideration than others.
Why this is one issue
@ferponse opened 8 PRs + 5 protocol-design issues (Jul 1–2), all opt-in / default-off,
and pinged me on each. The PRs are individually reasonable, but nearly all of them append a
flag to the same three files — so they conflict with each other and, if eventually accepted,
have to be merged in sequence, re-running the middleware suite between each. This issue is
the single home for hat sequence; the far-reaching protocol-direction questions live in a separate
Proposal discussion (linked at the bottom).
File hotspots (why serial)
Merge order
Rebasing later PRs onto the earlier merges is on the contributor.
⛔ Precursor — land first, standalone
Phase 1 — event_translator.py chain (cleanest)
Phase 2 — adk_agent.py config
Phase 3 — endpoint.py transports (reconcile against #2108's capabilities path)
Protocol-direction questions (handled separately)
The 5 design issues — #2154, #2146, #2106, #2105, #2091 — touch the core protocol surface and
are being decided together, not piecemeal:
➡️ Proposals discussion #2161
Thank you @ferponse for the submissions and I apologize for the delay in responding, though
even this response is more of a placeholder as your requests can't be considered in bulk and, with
most of them being features rather than fixes, some require more consideration than others.
Why this is one issue
@ferponse opened 8 PRs + 5 protocol-design issues (Jul 1–2), all opt-in / default-off,
and pinged me on each. The PRs are individually reasonable, but nearly all of them append a
flag to the same three files — so they conflict with each other and, if eventually accepted,
have to be merged in sequence, re-running the middleware suite between each. This issue is
the single home for hat sequence; the far-reaching protocol-direction questions live in a separate
Proposal discussion (linked at the bottom).
File hotspots (why serial)
event_translator.pytranslate()adk_agent.py__init__/from_appsignatureendpoint.pycapabilities_endpointtransport dictRUN_FINISHED/ completionMerge order
Rebasing later PRs onto the earlier merges is on the contributor.
⛔ Precursor — land first, standalone
chore· Bumpag-ui-protocolminimum pin →>=0.1.18(ideally0.1.19) inintegrations/adk-middleware/python/pyproject.toml. Unblocks feat(ag-ui-adk): surface HITL pauses as AG-UI interrupts on RUN_FINISHED.outcome #2102's imports ofInterrupt/RunFinishedInterruptOutcomeand de-risks all interrupt-related work.Phase 1 —
event_translator.pychain (cleanest)feature· feat(ag-ui-adk): emit ACTIVITY_SNAPSHOT/DELTA from ADK custom_metadata markers #2104 — ACTIVITY_SNAPSHOT/DELTA fromcustom_metadatamarkers · closes feat(ag-ui-adk): emit ACTIVITY_SNAPSHOT/DELTA from ADK custom_metadata markers #2103→ merge first. Ask: add a malformed-delta test + assert activity-precedes-text ordering.
fix· fix(adk-middleware): emit REASONING_ENCRYPTED_VALUE for function_call thought signatures #2073 — REASONING_ENCRYPTED_VALUE for thought signatures · closes [adk-middleware] REASONING_ENCRYPTED_VALUE never emitted: thought signatures are on function_call parts, not thought parts #2072→ Ask: add
self._emitted_signature_tool_call_ids.clear()toreset()(unbounded growthacross sequential runs). Optionally handle streaming-fc-args id remap.
feature· feat(adk): opt-in STEP_STARTED/STEP_FINISHED for workflows (Sequential/Parallel/Loop + sub-agents) — non-breaking, ADK 1.x & 2.x #2076 — opt-in STEP_STARTED/FINISHED for workflows · closes Feature Request: ADK middleware - no STEP_STARTED/STEP_FINISHED for workflow / multi-agent runs #2075→ Ask: also call
finalize_step_events()on theexcept/ RUN_ERROR path so an exceptioncan't leave steps open.
feature· feat(ag-ui-adk): opt-in RAW passthrough of the untranslated ADK event #2099 — RAW passthrough of untranslated ADK events · closes feat(ag-ui-adk): opt-in RAW passthrough of the untranslated ADK event #2098→ Ask: LRO/HITL events bypass
translate()and get no RAW event — close the gap or documentit. Needs my scope sign-off (author explicitly requested it).
Phase 2 —
adk_agent.pyconfigfeature· feat(ag-ui-adk): auto-discover AgentCapabilities from the wrapped ADK agent (opt-in) #2108 — auto-discover AgentCapabilities · closes Auto-discover AgentCapabilities from the wrapped ADK agent (opt-in) #2107→ Ask: flag-off is not "100% unchanged" —
capabilities={}now returnsNone; make it anexplicit
is not Nonecheck + a test. Fix the description: the factory isfrom_app(),not the nonexistent
create().feature· feat(ag-ui-adk): surface HITL pauses as AG-UI interrupts on RUN_FINISHED.outcome #2102 — HITL pauses → interrupts onRUN_FINISHED.outcome· closes feat(ag-ui-adk): surface HITL pauses as AG-UI interrupts on RUN_FINISHED.outcome #2101→ Blocked on the precursor pin bump. Ask: add an end-to-end test that drives a real HITL
pause through the consumer loop; reuse the authoritative HITL marker set instead of treating
every unresolved
TOOL_CALL_ENDas an interrupt.Phase 3 —
endpoint.pytransports (reconcile against #2108's capabilities path)feature· feat(transport): implement httpBinary (protobuf-over-HTTP) on the Python side (ag_ui encoder + ag-ui-adk) #2097 — httpBinary (protobuf-over-HTTP) on the Python side · closes feat(transport): implement httpBinary (protobuf-over-HTTP) on the Python side (ag_ui encoder + ag-ui-adk) #2094→ Ask: don't advertise
httpBinaryunless the protobuf extra is importable (else clientsnegotiate a transport that fails with an empty stream); surface an error frame on binary
encode failure; drop the dead capabilities guard.
feature· feat(transport): WebSocket transport for ag-ui-adk and @ag-ui/client #2085 — WebSocket transport · closes feat(transport): WebSocket support for ag-ui-adk and @ag-ui/client #2084 · request changes, land last→ Must: fix the 3 broken
test_capabilities.pytests; make transport advertisement additive(no force-override / in-place mutation / dead branch); add real
/ws+WebSocketAgenttests; and either implement or delete the single-socket HITL claim. Pending transport-roadmap
decision (see discussion).
Protocol-direction questions (handled separately)
The 5 design issues — #2154, #2146, #2106, #2105, #2091 — touch the core protocol surface and
are being decided together, not piecemeal:
➡️ Proposals discussion #2161