feat(a2a): implement SSE streaming for task updates and artifacts #1048

Merged
freemo merged 1 commit from feature/m6-a2a-sse-streaming into master 2026-03-22 01:24:58 +00:00
Owner
No description provided.
freemo added this to the v3.6.0 milestone 2026-03-18 06:15:26 +00:00
freemo force-pushed feature/m6-a2a-sse-streaming from da4f820273
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 17s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 36s
CI / typecheck (pull_request) Successful in 40s
CI / security (pull_request) Successful in 1m3s
CI / unit_tests (pull_request) Successful in 2m58s
CI / integration_tests (pull_request) Successful in 3m40s
CI / docker (pull_request) Successful in 58s
CI / e2e_tests (pull_request) Successful in 4m52s
CI / coverage (pull_request) Successful in 6m19s
CI / benchmark-regression (pull_request) Successful in 37m35s
to 18d98a2723
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 20s
CI / build (pull_request) Successful in 36s
CI / quality (pull_request) Successful in 38s
CI / typecheck (pull_request) Successful in 41s
CI / security (pull_request) Successful in 52s
CI / unit_tests (pull_request) Successful in 3m21s
CI / integration_tests (pull_request) Successful in 3m34s
CI / e2e_tests (pull_request) Successful in 3m49s
CI / docker (pull_request) Successful in 55s
CI / coverage (pull_request) Failing after 6m46s
CI / benchmark-regression (pull_request) Successful in 38m24s
2026-03-18 17:47:41 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-18 17:47:52 +00:00
Author
Owner

Code Review — PR #1048 feat(a2a): implement SSE streaming

(Note: Cannot submit formal review approval since this PR is authored by the same account. Leaving review as a comment instead.)

The implementation is technically sound — SseEventFormatter, EventBusBridge, and the domain-to-A2A event mapping are clean and well-tested with 8 Behave scenarios.

Process Issues

  1. Empty PR body — Per CONTRIBUTING.md §Pull Request Process, every PR must include a clear description with summary, issue reference, and dependency link. Please add a proper description.

  2. No linked issue — This feature addition should reference its tracking issue with a Closes #NNN keyword.

Minor Code Notes

  1. Inline importimport contextlib is imported inside the _on_domain_event method body rather than at the module top level. Per the project's import guidelines: "Ensure all imports are at the top of the Python file."

  2. Silent error suppressioncontextlib.suppress(RuntimeError) when publishing to the queue silently swallows all RuntimeError variants. Consider at minimum a debug-level log so that publish failures are traceable.

  3. default=str in JSON serializationSseEventFormatter.format() uses json.dumps(data, default=str) which silently converts any non-serializable type to its string representation. Pragmatic but could mask data type issues — worth a code comment.

## Code Review — PR #1048 `feat(a2a): implement SSE streaming` *(Note: Cannot submit formal review approval since this PR is authored by the same account. Leaving review as a comment instead.)* The implementation is technically sound — `SseEventFormatter`, `EventBusBridge`, and the domain-to-A2A event mapping are clean and well-tested with 8 Behave scenarios. ### Process Issues 1. **Empty PR body** — Per CONTRIBUTING.md §Pull Request Process, every PR must include a clear description with summary, issue reference, and dependency link. Please add a proper description. 2. **No linked issue** — This feature addition should reference its tracking issue with a `Closes #NNN` keyword. ### Minor Code Notes 3. **Inline import** — `import contextlib` is imported inside the `_on_domain_event` method body rather than at the module top level. Per the project's import guidelines: *"Ensure all imports are at the top of the Python file."* 4. **Silent error suppression** — `contextlib.suppress(RuntimeError)` when publishing to the queue silently swallows all `RuntimeError` variants. Consider at minimum a debug-level log so that publish failures are traceable. 5. **`default=str` in JSON serialization** — `SseEventFormatter.format()` uses `json.dumps(data, default=str)` which silently converts any non-serializable type to its string representation. Pragmatic but could mask data type issues — worth a code comment.
freemo force-pushed feature/m6-a2a-sse-streaming from 18d98a2723
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 20s
CI / build (pull_request) Successful in 36s
CI / quality (pull_request) Successful in 38s
CI / typecheck (pull_request) Successful in 41s
CI / security (pull_request) Successful in 52s
CI / unit_tests (pull_request) Successful in 3m21s
CI / integration_tests (pull_request) Successful in 3m34s
CI / e2e_tests (pull_request) Successful in 3m49s
CI / docker (pull_request) Successful in 55s
CI / coverage (pull_request) Failing after 6m46s
CI / benchmark-regression (pull_request) Successful in 38m24s
to f5f083f8cd
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 25s
CI / quality (pull_request) Successful in 43s
CI / typecheck (pull_request) Successful in 44s
CI / build (pull_request) Successful in 44s
CI / security (pull_request) Successful in 48s
CI / integration_tests (pull_request) Successful in 5m27s
CI / unit_tests (pull_request) Successful in 5m34s
CI / e2e_tests (pull_request) Successful in 5m53s
CI / docker (pull_request) Successful in 1m9s
CI / benchmark-regression (pull_request) Failing after 39m24s
CI / coverage (pull_request) Successful in 7m38s
2026-03-20 21:37:25 +00:00
Compare
freemo force-pushed feature/m6-a2a-sse-streaming from f5f083f8cd
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 25s
CI / quality (pull_request) Successful in 43s
CI / typecheck (pull_request) Successful in 44s
CI / build (pull_request) Successful in 44s
CI / security (pull_request) Successful in 48s
CI / integration_tests (pull_request) Successful in 5m27s
CI / unit_tests (pull_request) Successful in 5m34s
CI / e2e_tests (pull_request) Successful in 5m53s
CI / docker (pull_request) Successful in 1m9s
CI / benchmark-regression (pull_request) Failing after 39m24s
CI / coverage (pull_request) Successful in 7m38s
to f138bab5ff
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 24s
CI / lint (pull_request) Successful in 3m38s
CI / quality (pull_request) Successful in 4m5s
CI / typecheck (pull_request) Successful in 4m21s
CI / security (pull_request) Successful in 4m31s
CI / e2e_tests (pull_request) Successful in 8m45s
CI / integration_tests (pull_request) Successful in 9m5s
CI / unit_tests (pull_request) Successful in 9m9s
CI / docker (pull_request) Successful in 1m9s
CI / coverage (pull_request) Successful in 10m46s
CI / status-check (pull_request) Successful in 2s
CI / lint (push) Successful in 3m18s
CI / build (push) Successful in 22s
CI / quality (push) Successful in 3m39s
CI / security (push) Successful in 4m0s
CI / typecheck (push) Successful in 4m12s
CI / benchmark-regression (push) Has been skipped
CI / e2e_tests (push) Successful in 8m20s
CI / integration_tests (push) Successful in 8m38s
CI / unit_tests (push) Successful in 8m42s
CI / docker (push) Successful in 1m13s
CI / coverage (push) Successful in 10m49s
CI / status-check (push) Successful in 1s
CI / benchmark-publish (push) Successful in 29m24s
CI / benchmark-regression (pull_request) Successful in 51m28s
2026-03-22 01:07:21 +00:00
Compare
freemo merged commit f138bab5ff into master 2026-03-22 01:24:58 +00:00
freemo deleted branch feature/m6-a2a-sse-streaming 2026-03-22 01:24:58 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!1048
No description provided.