feat(a2a-bridge): advertise multi-turn capabilities#316
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates the SCION A2A bridge to advertise support for streaming and push notifications in agent cards, removes the corresponding warning log for stream messages, and updates the README documentation. However, the feedback indicates that these changes are premature because the underlying bridge implementation still retains the MVP limitation where tasks are closed on the first content message, meaning multi-turn streaming and push notifications are not yet fully supported.
| "streaming": true, | ||
| "pushNotifications": true, |
There was a problem hiding this comment.
Advertising streaming: true and pushNotifications: true is premature because the bridge still contains the MVP limitation in dispatchToActiveTask (lines 633-642), where any non-state-change message is treated as a terminal response and the task is closed. This will cause multi-turn agents to have their tasks closed prematurely on the first content message. Please ensure the multi-turn dispatch logic is fully implemented and the MVP limitation is removed before advertising these capabilities.
| "streaming": true, | |
| "pushNotifications": true, | |
| "streaming": false, | |
| "pushNotifications": false, |
| "streaming": true, | ||
| "pushNotifications": true, |
There was a problem hiding this comment.
Advertising streaming: true and pushNotifications: true is premature because the bridge still contains the MVP limitation in dispatchToActiveTask (lines 633-642 of bridge.go), where any non-state-change message is treated as a terminal response and the task is closed. This will cause multi-turn agents to have their tasks closed prematurely on the first content message. Please ensure the multi-turn dispatch logic is fully implemented and the MVP limitation is removed before advertising these capabilities.
| "streaming": true, | |
| "pushNotifications": true, | |
| "streaming": false, | |
| "pushNotifications": false, |
| s.log.Warn("message/stream request received — MVP limitation: streaming treats the first content message as terminal; multi-turn agents will break", | ||
| "project", projectSlug, "agent", agentSlug) | ||
|
|
||
| var params SendMessageParams |
There was a problem hiding this comment.
Removing this warning is premature because the underlying bridge still has the MVP limitation in dispatchToActiveTask (lines 633-642 of bridge.go) where it treats the first content message as terminal. If a client sends a streaming request, they will not be warned that multi-turn streaming is still broken.
s.log.Warn("message/stream request received — MVP limitation: streaming treats the first content message as terminal; multi-turn agents will break",
"project", projectSlug, "agent", agentSlug)
var params SendMessageParams|
|
||
| - **Single-turn only.** The bridge treats the first non-state-change message from an agent as the final response and closes the task. Multi-turn agents that emit interim content (clarifying questions, progress updates) will have their task closed prematurely. Agents using `input-required` → `completed` flows are not supported yet. Agent cards advertise `streaming: false` and `pushNotifications: false` to reflect this constraint. Streaming requests (`message/stream`) are accepted but emit a runtime warning because multi-turn dispatch is not implemented. | ||
| - **Blocking-mode `input-required` flows never resolve.** State-change messages are intentionally skipped for blocking waiters so the actual content reply is delivered. This means a blocking `message/send` call against an agent that transitions to `input-required` will time out (default 120s) because the state change is suppressed and no content reply follows. | ||
| - **No gRPC or REST transport.** The bridge only supports JSON-RPC 2.0 over HTTP. gRPC and HTTP+JSON/REST transports are not implemented. |
There was a problem hiding this comment.
Removing the Single-turn only limitation from the README is premature. The bridge implementation in bridge.go (lines 633-642) still contains the MVP limitation where any non-state-change message is treated as terminal, closing the task on the first content message. This limitation should remain documented until the multi-turn dispatch logic is fully implemented and the code limitation is removed.
Update agent cards to advertise streaming and push notification support now that multi-turn conversations are implemented. - Registry card: streaming=true, pushNotifications=true - Per-agent cards: streaming=true, pushNotifications=true - Remove MVP streaming warning from handleStreamMessage - Update README: remove single-turn limitation, update known limitations to reflect current state (no gRPC/REST transport)
4 tests verifying multi-turn capability advertisement: - Registry card advertises streaming=true, pushNotifications=true - Per-agent card matches registry capabilities - Direct unit test of GenerateAgentCard capability values - Drift prevention test ensuring registry and per-agent cards stay in sync
35b892c to
132803c
Compare
|
Review rounds complete (3 rounds, 3 clean cycles each). No bugs found in any round — this PR is just boolean flips and README text. Rebased on upstream/main. 4 tests verify capability values. |
Summary
Update agent cards to advertise streaming and push notification support now that multi-turn conversations are implemented (PRs #314, #315).
Changes
streaming: true,pushNotifications: truestreaming: true,pushNotifications: truehandleStreamMessageReview history
Merge order
Merge after #314 and #315.