Skip to content

feat: Send current task as the first event after subscribing to it#418

Merged
bartek-gralewicz merged 44 commits into
epic/1.0_breaking_changesfrom
bgralewicz/send_task_state_when_subscribing
Apr 22, 2026
Merged

feat: Send current task as the first event after subscribing to it#418
bartek-gralewicz merged 44 commits into
epic/1.0_breaking_changesfrom
bgralewicz/send_task_state_when_subscribing

Conversation

@bartek-gralewicz
Copy link
Copy Markdown
Contributor

@bartek-gralewicz bartek-gralewicz commented Apr 21, 2026

Description

Sending a Task object as the first event after subscribing to it.

Additionally, throwing an UnsupportedOperationError error if a Task in terminal state was used for subscribing. This behavior is aligned with spec requirements: https://a2a-protocol.org/latest/specification/#1046-subscribetotask

Fixes #323 🦕

…bgralewicz/use_stream_response_as_push_notif_payload
…bgralewicz/use_stream_response_as_push_notif_payload
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

🧪 Code Coverage

⬇️ Download Full Report

Base PR Delta
src/server/request_handler/default_request_handler.ts 78.46% 79.64% 🟢 +1.18%
Total 83.35% 83.54% 🟢 +0.19%

Generated by coverage-comment.yml

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the resubscribe method to prevent race conditions by initializing the event queue before loading the task, and adds validation to prevent resubscribing to tasks in terminal states. It also updates push notification handling to a fire-and-forget pattern and expands test coverage. Review feedback suggests replacing a risky non-null assertion with optional chaining and removing a redundant Promise.resolve wrapper.

Comment thread src/server/request_handler/default_request_handler.ts Outdated
Comment thread src/server/request_handler/default_request_handler.ts Outdated
@bartek-gralewicz bartek-gralewicz changed the title feat: Send task state when subscribing feat: Send current task as the first event after subscribing to it Apr 21, 2026
@bartek-gralewicz
Copy link
Copy Markdown
Contributor Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the resubscribe method in DefaultRequestHandler to eliminate a race condition by attaching to the event bus before loading the task from the store. It also updates the logic to throw an UnsupportedOperationError for tasks in terminal states and includes new unit tests for various resubscription scenarios. Feedback suggests that the console.warn for non-terminal tasks without an active event bus may be unnecessary as this is a valid state.

Comment thread src/server/request_handler/default_request_handler.ts Outdated
@bartek-gralewicz bartek-gralewicz marked this pull request as ready for review April 21, 2026 11:38
@bartek-gralewicz bartek-gralewicz requested a review from a team as a code owner April 21, 2026 11:38
@bartek-gralewicz bartek-gralewicz merged commit 4bfcf5f into epic/1.0_breaking_changes Apr 22, 2026
10 checks passed
@bartek-gralewicz bartek-gralewicz deleted the bgralewicz/send_task_state_when_subscribing branch April 22, 2026 06:57
ishymko added a commit that referenced this pull request May 11, 2026
🤖 I have created a release *beep* *boop*
---

## 1.0.0-alpha.0 (2026-05-11)

See the [v0.3 -> v1.0-alpha.0 migration
guide](https://github.com/a2aproject/a2a-js/blob/v1.0.0-alpha.0/docs/migration-guide.md).

**Note**: Enabling backward compatibility with v0.3 is tracked in
[#452](#452).


### ⚠ BREAKING CHANGES

* Drop support for node 18
([#368](#368))
* Make ServerCallContext parameter mandatory across all places
([#405](#405))
* Remove JSON-RPC client
([#353](#353))
* Remove transport-specific exports
([#404](#404))
* Update codebase to use A2A 1.0.0 data model
([#375](#375))
* Remove A2AExpressApp
([#363](#363))

### Features

* Add A2A Version Header
([#422](#422))
([b5f3db7](b5f3db7))
* Add cache-headers logic to the agent card handler
([#435](#435))
([955b52b](955b52b))
* Add resource scoping
([#450](#450))
([c527086](c527086))
* Add support for custom authentication scheme and credentials in
auth-headers ([#430](#430))
([5a4389b](5a4389b))
* AgentCardSignature support
([#448](#448))
([4a41a8c](4a41a8c))
* Enforce events ordering
([#437](#437))
([157cf48](157cf48))
* Enriched Error Model
([#427](#427))
([c130778](c130778))
* Implement listTasks method
([#383](#383))
([7d4c472](7d4c472))
* Send current task as the first event after subscribing to it
([#418](#418))
([4bfcf5f](4bfcf5f))
* Support multi-tenancy
([#419](#419))
([1877877](1877877))

### Code Refactoring

* remove A2AExpressApp
([#363](#363))
([0b84728](0b84728))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: bartek-gralewicz <bgralewicz@google.com>
Co-authored-by: Ivan Shymko <ishymko@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants