feat!: unify A2AError hierarchy with transport specific subclasses - #587
Conversation
There was a problem hiding this comment.
Code Review
This pull request refactors the SDK's error handling by introducing a unified, transport-agnostic error hierarchy under src/errors, with semantic subclasses and transport-specific variants (REST, gRPC, and JSON-RPC) that replace the previous monolithic and scattered error utilities. The review feedback highlights a potential server crash in src/errors/rest.ts due to an unsafe lookup in A2A_ERROR_SPECS for unregistered error names, and a semantic mismatch in the v0.3 compatibility layer where A2AError.internalError incorrectly returns a malformed request error instead of a generic JSON-RPC error.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
bartek-gralewicz
left a comment
There was a problem hiding this comment.
Would be worth adding some tests that target newly added logic, like actually testing instanceof.
🤖 I have created a release *beep* *boop* --- ## [1.0.0](v1.0.0-beta.0...v1.0.0) (2026-07-22) `@a2a-js/sdk` is now generally available. This release promotes the v1.0 line to stable, implementing the full [A2A Protocol Specification v1.0](https://a2a-protocol.org/v1.0.0/specification/) across all three transports (JSON-RPC, HTTP+JSON/REST, gRPC), with opt-in v0.3 backward compatibility for staged migrations. Upgrading from `0.3.x`? See the [v0.3 → v1.0 migration guide](https://github.com/a2aproject/a2a-js/blob/v1.0.0/docs/migration-guide.md). Interoperating with peers still on v0.3? See the [end-user v0.3 compatibility guide](https://github.com/a2aproject/a2a-js/blob/v1.0.0/docs/compatibility-v0_3.md). ### ⚠ BREAKING CHANGES * unify A2AError hierarchy with transport specific subclasses ([#587](#587)) * **server:** replace individual properties with SendMessageRequest in RequestContext ([#581](#581)) ### Features * add state bag and ServerCallContextBuilder to ServerCallContext ([#364](#364)) ([477e394](477e394)) * export SSE wire-format helpers from public entry point ([#548](#548)) ([8bc21f5](8bc21f5)), closes [#547](#547) * **server:** expose SendMessageRequest metadata to AgentExecutor via RequestContext ([#564](#564)) ([a92f54e](a92f54e)) * **server:** replace individual properties with SendMessageRequest in RequestContext ([#581](#581)) ([7cd30de](7cd30de)) * unify A2AError hierarchy with transport specific subclasses ([#587](#587)) ([4806f8f](4806f8f)) ### Bug Fixes * **client:** bound SSE event size to prevent client-side memory exhaustion ([#582](#582)) ([e6e8ce9](e6e8ce9)) * **client:** cancel the SSE stream on teardown to avoid leaking connections ([#580](#580)) ([83269a5](83269a5)) * **grpc:** preserve null values in protobuf Struct ([#578](#578)) ([f447e4e](f447e4e)), closes [#576](#576) * resolve sdk compatibility bugs ([#568](#568)) ([b57f026](b57f026)) * **server:** await _handleProcessingError so blocking drains surface errors ([#579](#579)) ([5833652](5833652)) * support GET for resubscribe route ([#569](#569)) ([8dd43d1](8dd43d1)) --- 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: JakubWorek <jakubworek@google.com>
Description
Error Handling Refactor and Unification
Transport Implementation Simplification
Build-tests Fix
Documentation and Migration Guide Updates
Closes #583 #317 🦕