Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
b348735
[DRAFT] feat: Upgrade A2A to v1.0
Tehsmash Nov 20, 2025
74c5a19
feat!: migrate from Pydantic types to protobuf-generated types
muscariello Nov 28, 2025
2d698df
fix: update E2E tests and push notification handlers for proto migration
muscariello Nov 29, 2025
424dd7e
fix: resolve all linter errors and add pyright type fixes
muscariello Dec 1, 2025
7405dc7
refactor: Remove redundant JSON-RPC Pydantic types, use jsonrpc libra…
muscariello Dec 1, 2025
6462801
Address PR review feedback: rename methods, update types, clean up al…
muscariello Dec 1, 2025
42c72f2
refactor: remove extras.py and consolidate error types in utils/error…
muscariello Dec 1, 2025
ac1050d
chore: remove AIP-discussion-response.md from tracking
muscariello Dec 1, 2025
7ea7475
fix: Improve streaming errors handling (#576)
lkawka Dec 3, 2025
174d58d
chore(main): release 0.3.20 (#577)
a2a-bot Dec 3, 2025
5fea21f
docs: Fixing typos (#586)
didier-durand Dec 12, 2025
8a76730
feat: Implement Agent Card Signing and Verification per Spec (#581)
sokoliva Dec 12, 2025
090ca9c
chore: Fixing typos (final round) (#588)
didier-durand Dec 12, 2025
03fa4c2
chore(main): release 0.3.21 (#587)
a2a-bot Dec 12, 2025
04bcafc
feat: Add custom ID generators to SimpleRequestContextBuilder (#594)
chenweiyang0204 Dec 16, 2025
e12ca42
test: adding 2 additional tests to user.py (#595)
didier-durand Dec 16, 2025
3deecc4
test: adding 21 tests for client/card_resolver.py (#592)
didier-durand Dec 16, 2025
6fa6a6c
refactor: Move agent card signature verification into `A2ACardResolve…
sokoliva Dec 16, 2025
86c6759
chore(main): release 0.3.22 (#599)
a2a-bot Dec 16, 2025
df78a94
test: adding 13 tests for id_generator.py (#591)
didier-durand Jan 5, 2026
cb7cdb3
chore(deps): bump the github-actions group across 1 directory with 4 …
dependabot[bot] Jan 5, 2026
4487307
fix: align tests and implementation with proto definition updates
muscariello Jan 16, 2026
a680c18
chore: merge main and fix tests for proto refactor
muscariello Jan 16, 2026
0ae8548
style: fix spelling errors and add words to allow list
muscariello Jan 17, 2026
bd552f6
style: add more tech terms to spelling allow list
muscariello Jan 17, 2026
d8df048
style: fix spelling of interruptible
muscariello Jan 17, 2026
7433e04
build(spelling): exclude generated protobuf types from spell check
muscariello Jan 17, 2026
8e5ab33
fix: replace non-inclusive language in optionals.py
muscariello Jan 17, 2026
ce4c828
chore: remove unused type generation scripts and deps
muscariello Jan 19, 2026
66073cf
Apply suggestions from code review
muscariello Jan 20, 2026
d7fb690
Apply suggestion from @Tehsmash
muscariello Jan 20, 2026
99bb2c8
refactor: address PR review comments
muscariello Jan 20, 2026
3eeea28
fix(client): respect blocking configuration in send_message
muscariello Jan 20, 2026
796d86b
refactor: decouple JSON-RPC errors and fix circular imports
muscariello Jan 20, 2026
913234c
Apply suggestion from @Tehsmash
muscariello Jan 20, 2026
6260ea2
fix(server): add missing StreamResponse import in default_request_han…
muscariello Jan 20, 2026
c00b7b8
fix(server): wrap task in StreamResponse for push notifications
muscariello Jan 20, 2026
30685cf
Refactor: Extract JSONRPC error models to resolve circular dependency
muscariello Jan 20, 2026
33d3232
Docs: Clarify Proto3 repeated field presence checks in AuthInterceptor
muscariello Jan 20, 2026
f049d33
build: generate a2a.json OpenAPI spec via hatch build script
muscariello Jan 20, 2026
51ec5e9
chore: fix inclusive language and spelling check failures
muscariello Jan 20, 2026
6ea324b
chore: update spelling allow list and excludes
muscariello Jan 20, 2026
688e2c2
chore: add a2a-specific terms to spelling allow list
muscariello Jan 20, 2026
e9152ab
chore: add remaining unrecognized words to allow list
muscariello Jan 20, 2026
c6d97fd
chore: replace master with main in documentation URLs
muscariello Jan 20, 2026
cd8946b
chore: sort spelling allow list
muscariello Jan 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Template taken from https://github.com/v8/v8/blob/master/.git-blame-ignore-revs.
# Template taken from https://github.com/v8/v8/blob/main/.git-blame-ignore-revs.
#
# This file contains a list of git hashes of revisions to be ignored by git blame. These
# revisions are considered "unimportant" in that they are unlikely to be what you are
Expand Down
77 changes: 56 additions & 21 deletions .github/actions/spelling/allow.txt
Original file line number Diff line number Diff line change
@@ -1,26 +1,57 @@
A2A
A2AFastAPI
AAgent
ACMRTUXB
ACard
AClient
ACMRTUXB
aconnect
adk
AError
AException
AFast
agentic
AGrpc
aio
aiomysql
amannn
aproject
ARequest
ARun
AServer
AServers
AService
AStarlette
AUser
DSNs
ES256
EUR
FastAPI
GBP
GVsb
HS256
HS384
INR
JOSE
JPY
JSONRPC
JSONRPCt
JWS
Llm
OpenAPI
POSTGRES
Protobuf
RS256
RUF
SECP256R1
SLF
Starlette
Tful
a2a
aconnect
adk
agentic
aio
aiomysql
alg
amannn
aproject
autouse
backticks
base64url
buf
cla
cls
coc
Expand All @@ -29,59 +60,63 @@ coro
datamodel
deepwiki
drivername
DSNs
dunders
euo
EUR
excinfo
fernet
fetchrow
fetchval
GBP
genai
getkwargs
gle
GVsb
hazmat
ietf
importlib
initdb
inmemory
INR
isready
JPY
JSONRPCt
JWS
jku
jwk
jwks
jws
kid
kwarg
langgraph
lifecycles
linting
Llm
lstrips
middleware
mikeas
mockurl
notif
oauthoidc
oidc
openapiv
openapiv2
opensource
otherurl
pb2
postgres
POSTGRES
postgresql
proto
protobuf
protoc
pydantic
pyi
pypistats
pyupgrade
pyversions
redef
respx
resub
RUF
SLF
socio
sse
starlette
swagger
tagwords
taskupdate
testuuid
Tful
tiangolo
typ
typeerror
vulnz
2 changes: 2 additions & 0 deletions .github/actions/spelling/excludes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,5 +87,7 @@
^\.github/workflows/
CHANGELOG.md
^src/a2a/grpc/
^src/a2a/types/
^tests/
.pre-commit-config.yaml
(?:^|/)a2a\.json$
2 changes: 1 addition & 1 deletion .github/workflows/linter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: github.repository == 'a2aproject/a2a-python'
steps:
- name: Checkout Code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6

- name: Install uv
uses: astral-sh/setup-uv@v7
Expand All @@ -26,7 +26,7 @@ jobs:
run: uv build

- name: Upload distributions
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: release-dists
path: dist/
Expand All @@ -40,7 +40,7 @@ jobs:

steps:
- name: Retrieve release distributions
uses: actions/download-artifact@v6
uses: actions/download-artifact@v7
with:
name: release-dists
path: dist/
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ name: Mark stale issues and pull requests

on:
schedule:
# Scheduled to run at 10.30PM UTC everyday (1530PDT/1430PST)
# Scheduled to run at 10.30PM UTC every day (1530PDT/1430PST)
- cron: "30 22 * * *"
workflow_dispatch:

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
python-version: ['3.10', '3.13']
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Set up test environment variables
run: |
echo "POSTGRES_TEST_DSN=postgresql+asyncpg://a2a:a2a_password@localhost:5432/a2a_test" >> $GITHUB_ENV
Expand Down
19 changes: 6 additions & 13 deletions .github/workflows/update-a2a-types.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,36 @@ jobs:
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.10'
python-version: "3.10"
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Configure uv shell
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- name: Install dependencies (datamodel-code-generator)
run: uv sync
- name: Define output file variable
id: vars
run: |
GENERATED_FILE="./src/a2a/types.py"
GENERATED_FILE="./src/a2a/types"
echo "GENERATED_FILE=$GENERATED_FILE" >> "$GITHUB_OUTPUT"
- name: Generate types from schema
run: |
chmod +x scripts/generate_types.sh
./scripts/generate_types.sh "${{ steps.vars.outputs.GENERATED_FILE }}"
- name: Install Buf
uses: bufbuild/buf-setup-action@v1
- name: Run buf generate
run: |
set -euo pipefail # Exit immediately if a command exits with a non-zero status
echo "Running buf generate..."
buf generate
uv run scripts/grpc_gen_post_processor.py
echo "Buf generate finished."
- name: Create Pull Request with Updates
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.A2A_BOT_PAT }}
committer: a2a-bot <[email protected]>
author: a2a-bot <[email protected]>
commit-message: '${{ github.event.client_payload.message }}'
title: '${{ github.event.client_payload.message }}'
commit-message: "${{ github.event.client_payload.message }}"
title: "${{ github.event.client_payload.message }}"
body: |
Commit: https://github.com/a2aproject/A2A/commit/${{ github.event.client_payload.sha }}
branch: auto-update-a2a-types-${{ github.event.client_payload.sha }}
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ test_venv/
coverage.xml
.nox
spec.json
src/a2a/types/a2a.json
32 changes: 29 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# Changelog

## [0.3.22](https://github.com/a2aproject/a2a-python/compare/v0.3.21...v0.3.22) (2025-12-16)


### Features

* Add custom ID generators to SimpleRequestContextBuilder ([#594](https://github.com/a2aproject/a2a-python/issues/594)) ([04bcafc](https://github.com/a2aproject/a2a-python/commit/04bcafc737cf426d9975c76e346335ff992363e2))


### Code Refactoring

* Move agent card signature verification into `A2ACardResolver` ([6fa6a6c](https://github.com/a2aproject/a2a-python/commit/6fa6a6cf3875bdf7bfc51fb1a541a3f3e8381dc0))

## [0.3.21](https://github.com/a2aproject/a2a-python/compare/v0.3.20...v0.3.21) (2025-12-12)


### Documentation

* Fixing typos ([#586](https://github.com/a2aproject/a2a-python/issues/586)) ([5fea21f](https://github.com/a2aproject/a2a-python/commit/5fea21fb34ecea55e588eb10139b5d47020a76cb))

## [0.3.20](https://github.com/a2aproject/a2a-python/compare/v0.3.19...v0.3.20) (2025-12-03)


### Bug Fixes

* Improve streaming errors handling ([#576](https://github.com/a2aproject/a2a-python/issues/576)) ([7ea7475](https://github.com/a2aproject/a2a-python/commit/7ea7475091df2ee40d3035ef1bc34ee2f86524ee))

## [0.3.19](https://github.com/a2aproject/a2a-python/compare/v0.3.18...v0.3.19) (2025-11-25)


Expand Down Expand Up @@ -94,7 +120,7 @@
### Bug Fixes

* apply `history_length` for `message/send` requests ([#498](https://github.com/a2aproject/a2a-python/issues/498)) ([a49f94e](https://github.com/a2aproject/a2a-python/commit/a49f94ef23d81b8375e409b1c1e51afaf1da1956))
* **client:** `A2ACardResolver.get_agent_card` will auto-populate with `agent_card_path` when `relative_card_path` is empty ([#508](https://github.com/a2aproject/a2a-python/issues/508)) ([ba24ead](https://github.com/a2aproject/a2a-python/commit/ba24eadb5b6fcd056a008e4cbcef03b3f72a37c3))
* **client:** `A2ACardResolver.get_agent_card` will autopopulate with `agent_card_path` when `relative_card_path` is empty ([#508](https://github.com/a2aproject/a2a-python/issues/508)) ([ba24ead](https://github.com/a2aproject/a2a-python/commit/ba24eadb5b6fcd056a008e4cbcef03b3f72a37c3))


### Documentation
Expand Down Expand Up @@ -431,8 +457,8 @@
* Event consumer should stop on input_required ([#167](https://github.com/a2aproject/a2a-python/issues/167)) ([51c2d8a](https://github.com/a2aproject/a2a-python/commit/51c2d8addf9e89a86a6834e16deb9f4ac0e05cc3))
* Fix Release Version ([#161](https://github.com/a2aproject/a2a-python/issues/161)) ([011d632](https://github.com/a2aproject/a2a-python/commit/011d632b27b201193813ce24cf25e28d1335d18e))
* generate StrEnum types for enums ([#134](https://github.com/a2aproject/a2a-python/issues/134)) ([0c49dab](https://github.com/a2aproject/a2a-python/commit/0c49dabcdb9d62de49fda53d7ce5c691b8c1591c))
* library should released as 0.2.6 ([d8187e8](https://github.com/a2aproject/a2a-python/commit/d8187e812d6ac01caedf61d4edaca522e583d7da))
* remove error types from enqueable events ([#138](https://github.com/a2aproject/a2a-python/issues/138)) ([511992f](https://github.com/a2aproject/a2a-python/commit/511992fe585bd15e956921daeab4046dc4a50a0a))
* library should be released as 0.2.6 ([d8187e8](https://github.com/a2aproject/a2a-python/commit/d8187e812d6ac01caedf61d4edaca522e583d7da))
* remove error types from enqueueable events ([#138](https://github.com/a2aproject/a2a-python/issues/138)) ([511992f](https://github.com/a2aproject/a2a-python/commit/511992fe585bd15e956921daeab4046dc4a50a0a))
* **stream:** don't block event loop in EventQueue ([#151](https://github.com/a2aproject/a2a-python/issues/151)) ([efd9080](https://github.com/a2aproject/a2a-python/commit/efd9080b917c51d6e945572fd123b07f20974a64))
* **task_updater:** fix potential duplicate artifact_id from default v… ([#156](https://github.com/a2aproject/a2a-python/issues/156)) ([1f0a769](https://github.com/a2aproject/a2a-python/commit/1f0a769c1027797b2f252e4c894352f9f78257ca))

Expand Down
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,4 @@ available at
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

Note: A version of this file is also available in the
[New Project repository](https://github.com/google/new-project/blob/master/docs/code-of-conduct.md).
[New Project repository](https://github.com/google/new-project/blob/main/docs/code-of-conduct.md).
2 changes: 1 addition & 1 deletion Gemini.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
- uv as package manager

## How to run all tests
1. If dependencies are not installed install them using following command
1. If dependencies are not installed, install them using the following command
```
uv sync --all-extras
```
Expand Down
10 changes: 7 additions & 3 deletions buf.gen.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,15 @@ plugins:
# Generate python protobuf related code
# Generates *_pb2.py files, one for each .proto
- remote: buf.build/protocolbuffers/python:v29.3
out: src/a2a/grpc
out: src/a2a/types
# Generate python service code.
# Generates *_pb2_grpc.py
- remote: buf.build/grpc/python
out: src/a2a/grpc
out: src/a2a/types
# Generates *_pb2.pyi files.
- remote: buf.build/protocolbuffers/pyi
out: src/a2a/grpc
out: src/a2a/types
# Generates a2a.swagger.json (OpenAPI v2)
- remote: buf.build/grpc-ecosystem/openapiv2
out: src/a2a/types
opt: json_names_for_fields=true
Loading
Loading