2.8.0 (2026-11-06)
Features
- a2aacp: add an A2A agent executor for Agent Client Protocol (ACP) agents (#491, #492, #493, #494, #530, #545, #548, #552, #562)
- a2agrpc: add GRPCConnectionPool for gRPC client connection reuse (fixes #109) (#382) (a2411f7)
- a2asrv: add NewErrorSanitizer, an opt-in interceptor which logs request errors in full and sends clients only A2A errors (#552) (ece71bc)
- a2asrv: agent card HTTP caching (ETag/304, opt-in Cache-Control) (#496) (313efd9)
- implement structured input extension (#490) (367f987)
Bug Fixes
- a2aclient: honor API key security scheme Location (#497) (c59beb5)
- a2aclient: honor configured HTTP authentication schemes (#502) (413de0c)
- a2aclient: normalize service param keys set by the client and AuthInterceptor (#479) (96f4df0)
- a2aclient: return JSON-RPC errors from non-200 responses (#559) (97f1fac)
- a2acrypto: reject malformed Unicode before signing (#450) (ec6cb14)
- a2aevent: preserve input-required history order (#501) (72f94a3)
- a2aevent: recover the whole artifact when it changes in place (#485) (4d61739)
- a2a: round-trip null data and nil raw parts through JSON (#513) (186decc)
- a2asrv: make ServiceParams.With nil-safe (#544) (c6042b8)
- a2asrv: preserve escaped tenant REST paths (#514, #562) (f86cf6c)
- a2asrv: preserve numeric precision in raw card ETags (#546) (18c2e72)
- a2asrv: reject HEAD before creating task subscriptions (#481) (e641e3c)
- a2asrv: split comma-separated A2A-Extensions values (#519) (db83820), closes #516
- a2av0: keep security schemes and v0.3 interface in extended agent cards (#558) (196d4bb), closes #556
- client: accept cached status and artifact stream events (#508) (ea78132)
- client: honor streaming interceptor error recovery (#507) (737b626)
- client: keep propagated tenants local to each call (#495) (0eaf017)
- client: preserve escaped REST path segments (#488) (8880d8f)
- compare and send A2A-Version as Major.Minor (#555) (b5ea753)
- don't fail CancelTask when the canceled execution ends first (#521) (1613ae6), closes #518
- don't move a task to FAILED when cancelation retries run out (#522) (247933b)
- jsonrpc: return empty result for successful push config deletion (#525) (42d0738)
- pass CancelTask metadata over REST (#520) (a104b2e), closes #517
- pbconv: preserve JSON data part values (#503) (7c040e0)
- pbconv: send pkceRequired for authorization code flows (#542) (cb2c30b)
- push: cap push notification configs per task (#405) (6bb5a68)
- report executions or cancelations in progress, and messages to terminal tasks in cluster mode, as UnsupportedOperation (#552) (ece71bc)
- sse: ignore a leading UTF-8 byte order mark (#511) (248f628)
- taskexec: keep the error when broadcasting an event fails (#536) (636fa9f)
- taskexec: report canceler panics during concurrent cancelation (#535) (7ffc680)
- taskexec: skip heartbeats for non-positive intervals (#543) (c4158ae)
- taskexec: wait for the cancelation result of input-required tasks (#560) (3194abe)