2.6.0 (2026-09-25)
- a2acrypto: add AgentCard JWS signing and verification (fixes #141) (#368) (b03b830)
- itk: use shared scenarios (#429) (e54a070)
- a2acrypto canonicalization and refactoring (#441) (012cc74)
- a2asrv: return spec error codes for terminal and parked tasks (#438) (#442) (a2f11cb)
- align ListTasks timestamp query parameter (#425) (621e01e)
- ci: skip scheduled nightly workflows on forks (#427) (03b1f84), closes #426
- compare recovery timestamps by value (#428) (b3d23f5)
- support ProtoJSON security requirement scopes in Agent Cards (#437) (76da16e)
2.5.0 (2026-08-18)
- agent executor constructor helper (#418) (0f45c92)
- cli supports full agent card urls (#413) (d5d1cec), closes #412
- cli: polling fallback for servers which don't support streaming (#419) (b5b9f85)
- make agentcard resolver handler file:// (#424) (e1c3cc0)
- utilities for working with a2a events (#416) (1b8cac7)
- added missing converters and made sure a2agrpc uses pbconv (#421) (579cff8)
- cli not parsing compat agent cards (#415) (bebdcee)
- handle negative historyLength as empty history request (#393) (f4d5882)
- jsonrpc: lenient decode of error.data to preserve server errors (#386) (497cbac)
- remove empty contextId check in proto converter (#392) (758c7a1)
- sse: buffer REST SSE panicChan to avoid goroutine leak on client disconnect (#396) (ff6035b)
- taskexec: close event-queue reader on cancel early exits (#409) (14e41a9)
2.4.0 (2026-07-28)
- provide generic pull event queue (#354) (6a48d4b)
- push: push sender SSRF protection enabled by default (fixes #373) (#374) (0a4f17a)
- a2acompat/a2av0: implement A2A v0.3 REST wire format (#371) (1ca80f9), closes #370
- a2asrv: skip TaskID mismatch check when message has no task reference (fixes #350) (#359) (8c0dd99)
- allow empty request bodies and enable GET method for task subscriptions (#381) (8363365), closes #380
- cli: emit non-null required Agent Card list fields in synthesized card (fixes #369) (#372) (0640869)
- eventqueue: add JSON marshal/unmarshal to Message so events survive roundtrip (fixes #349) (#360) (d52d5a1)
- itk grpc compatibility for v0.3 SDKs (#367) (11340a7)
- ListTaskshistoryLength missing (8b91364)
- ListTaskshistoryLength missing (issue #355) (#361) (8b91364)
- taskstore,push: enforce cross-tenant authorization on Get and push config stores (#357) (a9f9c64)
2.3.1 (2026-05-13)
2.3.0 (2026-05-12)
- add WithAgentInactivityTimeout option for terminating stalled a… (#315) (357bb11)
- workqueue finalization (#324) (8b4bbf6), closes #200
- a2acompat: correct OAuth2 round-trip through compat producer/parser (#337) (4dfb802)
- make push config listing return correct json response (#338) (7c89490)
2.2.1 (2026-04-29)
- compat package fixes (#328) (21e166c)
- deserialize REST streaming error events into typed A2A errors (#318) (#319) (8a250ad)
- extra query and fast client rejection in local executor (#330) (f307ca9)
- task push notification configurations (#329) (c78fb4d)
- update error handling to match spec (#327) (1aa72ce)
2.2.0 (2026-04-10)
2.1.0 (2026-04-01)
- blocking=true compatibility (#305) (8fbdbee), closes #301
- correct json discriminator keys (#298) (dfb4052)
- correct json discriminator keys (#300) (b4471e6)
2.0.1 (2026-03-24)
- a2acompat: add HTTP+JSON REST support to a2av0 compat layer (#280) (bac00e7)
- agent executor cleaner (#276) (9c95980)
- a2aclient: add Example_* test functions for pkg.go.dev documentation (#263) (f8dae97)
- update diagrams, docs and instructions (#289) (ed33c7a)
1.0.0 (2026-03-17)
- implement the new rest error handling (#282) (a3bda30)
- use v2 suffix for module ID and provide compat support (#270) (dd1b6ba), closes #250
- a2asrv jsonrpc Content-Type (#265) (2568a46)
- bugs before going from alpha (#279) (b1f055c)
- GetTaskRequest nil pointer assignment check (#258) (440bb79)
- inject headers into service params (#277) (d33f3bd), closes #275
- propagate cancelation signal using task store (#272) (5e1d462), closes #245
- regenerate spec and fix returnImmediately (#284) (2eee0b9)
- task modified after save (#266) (c15febe)
- taskupdater result mutable (#274) (6038d92)
- update pushsender (#256) (5f7a594)
- use enum values as in the spec (#261) (eb98981), closes #251
- a2asrv: add Example_* test functions for pkg.go.dev documentation (#262) (7888e37)
- add example tests a2a (#240) (4fe08a9)
1.0.0-alpha.3 (2026-02-27)
a2a.Partmetadata handling fixed.
1.0.0-alpha.2 (2026-02-27)
Versioning is introduced on the SDK level, the new version is github.com/a2aproject/a2a-go/v1.
- gRPC protocol binding uses standard
google.rpc.ErrorInfofor error details. a2asrv.NewTenantRESTHandlerprovides a utility for setting up multi-tenant deplyments.a2a.Tasksnapshot is emitted as the first event on task resubscription.RESTtransport supports configurable keep-alive and panic recovery for SSE connections.a2asrv.WithCapabilityCheckshandler option rejecting requests for which no support is declared ina2a.AgentCapabilities.a2acompatworks against the oldgithub.com/a2aproject/a2a-golibrary and provides adapters for common dependencies.- Compatibility handling of extensions header.
- JSONRPC handler request scope is not terminated when panic is recovered during SSE streaming.
- Correct
HistoryLengthhandling for 0 and nil cases.
1.0.0-alpha (2026-02-23)
Implements A2A spec 1.0-rc revision with JSONRPC and gRPC protocol bindings.
a2aclient.Factoryimplements protocol version negotiation.- New errors added:
ExtensionSupportRequiredErrorandVersionNotSupportedError. - Client sends
A2A-Versionheader. - ListTasks RPC implementation.
a2apackage providesPartconstructor functions.
In addition to breaking core type changes updates:
- Agent output validations: task must be the first event emitted by AgentExecutor, artifact parts must be non-empty.
Finalfield removed fromTaskStatusUpdateEvent, state is used to determine whether event is final.- RPCs renamed: TaskSubscription -> SubscribeToTask, GetAgentCard -> GetExtendedAgentCard.
- JSONRPC uses the same method naming as gRPC.
For motivation behind some of the changes refer to the change announcement.
a2asrv.AgentExecutorchanges:ExecuteandCancelnow returniter.Seq2[a2a.Event, error]instead of writing events to a queue.a2asrv/taskstorepackage gets introduced withTaskStoreinterface and the the default in-memory implementation.a2a.TaskVersiongets moved toa2asrv/taskstore.TaskStore.Savemethod gets replaced with separateCreateandUpdatemethods.TaskStore.Updateis called witha2a.Eventset to usera2a.Messageon task history update.TaskStore.Getreturn types istaskstore.StoredTaskwhich is (task, version) pair.eventqueue.Queuegets replaced with separateeventqueue.Readerandeventqueue.Writer.eventqueue.Managermethods updated appropriately.eventqueue.Messagegets introduced for groupinga2a.Task,taskstore.TaskVersionanda2a.ProtocolVersion.a2aclient.CallInterceptoranda2asrv.CallInterceptorcan now return a value fromBeforeto return a result without performing the actual call.a2aclient.WithInterceptorsgets renamed toa2aclient.WithCallInterceptorsanda2asrv.WithCallInterceptorgets renamed toa2asrv.WithCallInterceptorsand takes vararg so that methods are consistent with each other.a2asrv.Userget changed from an interface to a struct with anAttributes map[string]anyfield.a2asrv.RequestContextgets renamed intoa2asrv.ExecutorContext.UserandServiceParamsare added to the struct, these should be used intead ofCallContext.a2asrv.ReqMetaanda2aclient.CallMetaare renamed toServiceParams.a2asrv.PushSenderanda2asrv.PushConfigStoreare moved toa2asrv/push.a2aclient.ServiceParamsare now passed explicitly toa2aclient.Transport.- Methods which attach something to
context.Contextstart withAttachprefix, methods used to create constructor-function options start withWith. a2aclient.NewStaticServiceParamsInjectorreplaced witha2aclient.AttachServiceParamsfor sending request headers.- gRPC transport for
a2aclientwas moved toa2agrpcpackage. This removes gRPC as the mandatory dependency from the client.
Backward compatibility implementation as discussed in A2A spec repo is provided by github.com/a2aproject/a2a-go/a2acompat/a2av0 package.
a2agrpc and a2apb are versioned, where v0 contains mappers from v0.3.6 types to core types, and v1 implements the latest protocol version.
For an example backward-compatibility setup refer to e2e/compat.
0.3.7 (2026-02-20)
- handle internal error: tck failure (#186) (b55fbfd)
- sse: support data: prefix without space (#188) (6657a6d), closes #162
0.3.6 (2026-01-30)
- callinterceptor supports payload override (#177) (baf66d8)
- callinterceptor supports payload override-client (#181) (1d74565)
- custom errors (#180) (2152258)
- custom panic handler (#185) (d3af3bf)
- db-backend cluster setup (#133) (4f7471c), closes #115
- extension utilities (#165) (6c78425)
- add opt-in keep-alive. Fixes #168 (#171) (64880fc)
- reflect origin if provided when serving public agentcard (#183) (535bb1f), closes #174
0.3.5 (2026-01-23)
- added MessageSendParams validations in handleSendMessage (#160) (1c66cb3)
- Address default blocking for JSONRpc server (#156) (5a5b403)
- final event overriding task failure event (#172) (8a97b84)
- return correct jsonrpc errors (#161) (950ce82)
- return the root cause of the error. Fixes #167 (#169) (b699c67)
- wrong field set as meta (#164) (2173f5e), closes #163
0.3.4 (2026-01-14)
- introduce and integrate TaskVersion (#127) (5cf0332)
- taskstore list (#126) (9987486)
- taskstore pagination (#136) (fffb4d4)
- workqueue (#132) (dcc3a89), closes #115
- nil parts must be empty array when encoded to JSON (#140) (049190c)
- provide request-level metadata in RequestContext (#152) (bf3096c)
- sse: increase buffer size for large SSE payloads (#149) (1287239)
0.3.3 (2025-12-08)
- allow creating grpc transport from service client (#117) (e95c064)
- concurrency control (#110) (4e8bcc1)
- increase default timeout on jsonrpc client to account for streaming (#134) (6d7290b), closes #125
- make log package capture the source properly (#112) (0ec064d)
- return a task in failed state as a result (#114) (80e20aa)
0.3.2 (2025-11-14)
0.3.1 (2025-11-13)
- nil meta becomes empty struct in send message conversion (#105) (60d3fcb)
- remove keep-alive messages (#100) (493e497)
- use UUIDv7 in type ID generators (#102) (3a809ea), closes #101
- add JSON-RPC client transport implementation (#79) (1690088)
- agent card resolver (#48) (0951293)
- blocking flag handling (#97) (f7aa465), closes #96
- client API proposal (#32) (b6ca54f)
- client auth interceptor (#90) (25b9aae)
- client interceptor invocations (#51) (3e9f2ae)
- core types JSON codec (#42) (c5b3982)
- define core types and interfaces (#16) (69b96ea)
- disallow custom types and circular refs in Metadata (#43) (53bc928)
- get task implementation (#59) (f74d854)
- grpc authenticated agent card and producer utils (#85) (9d82f31), closes #82
- grpc client transport (#66) (fee703e)
- grpc code generation from A2A .proto spec (#11) (2993b98)
- handling artifacts and implementing send message stream (#52) (c3fa631)
- implement an a2aclient.Factory (#50) (49deee7)
- implementing grpc server wrapper (#37) (071e952)
- implementing message-message interaction (#34) (b568979)
- implementing task pushes (#86) (c210240)
- input-required and auth-required handling (#70) (3ac89ba)
- jsonrpc server (#91) (5491030)
- logger (#56) (86ab9d2)
- request context loading (#60) (ab7a29b)
- result aggregation part 1 - task store (#38) (d3c02f5)
- result aggregation part 3 - concurrent task executor (#40) (265c3e7)
- result aggregation part 4 - integration (#41) (bab72d9)
- SDK type utilities (#31) (32b77b4)
- server middleware API (#63) (738bf85)
- server middleware integration (#64) (5dc8be0)
- smarter a2aclient (#88) (322d05b)
- task event factory (#95) (fbf3bcf), closes #84
- task executor docs (#36) (b6868df)
- task update logic (0ac987f)
- Execute() callers missing events (#74) (4c3389f)
- mark task failed when execution fails (#94) (ee0e7ed)
- push semantics update (#93) (76bff9f)
- race detector queue closed access (c07b7d0)
- regenerate proto and update converters (#81) (c732060)
- streaming (#92) (ca7a64b)
- release 0.3.0 (fa7cfba)