Skip to content

chore: 1.0-dev into proto refactor#696

Merged
ishymko merged 52 commits intoishymko/1.0-a2a_proto_refactorfrom
1.0-dev-merge-proto-refactor
Feb 17, 2026
Merged

chore: 1.0-dev into proto refactor#696
ishymko merged 52 commits intoishymko/1.0-a2a_proto_refactorfrom
1.0-dev-merge-proto-refactor

Conversation

@ishymko
Copy link
Member

@ishymko ishymko commented Feb 17, 2026

This will apply changes in main since the 1.0-a2a_proto_refactor was created from 3bfbea9 and "list tasks" feature implemented in 1.0-dev (d5818e5 and 5a2ca75).

ishymko/1.0-a2a_proto_refactor is created as a temporary backup branch to simplify reasoning about the diff. It's going to be merged into 1.0-dev separately.

UPD

Issues discovered and fixed after merge in #697:

  • .github/workflows/linter.yaml - syntax issue - missing space
  • src/a2a/utils/test_helpers.py - test file duplicated in non-test code

Re #559.

lkawka and others added 30 commits November 13, 2025 11:12
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Luca Muscariello <muscariello@ieee.org>
Co-authored-by: Yaroslav <yarolegovich@gmail.com>
Co-authored-by: Agent2Agent (A2A) Bot <a2a-bot@google.com>
Co-authored-by: agil.yolchuyev <agilyolchuyev@outlook.com>
Co-authored-by: yolagil <agil@peotic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Co-authored-by: Luca Muscariello <muscariello@ieee.org>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…the specification (#511)

Commit:
a2aproject/A2A@0a9f629

This PR introduces support for the new `tasks/list` method, including:
- Automatically generated type definitions from the specification.
- Complete client-side and server-side implementations.

Fixes #515 🦕

---------

Co-authored-by: lkawka <lkawka@google.com>
Co-authored-by: lkawka <luk.kawka@gmail.com>
Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Co-authored-by: Iva Sokolaj <102302011+sokoliva@users.noreply.github.com>
Co-authored-by: Agent2Agent (A2A) Bot <a2a-bot@google.com>
Co-authored-by: Tadaki Asechi <127199356+TadakiAsechi@users.noreply.github.com>
Co-authored-by: tadaki <tadaki.asechi@gmail.com>
Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Co-authored-by: TadakiAsechi <tadaki.asechi@icould.com>
Co-authored-by: TadakiAsechi <tadaki.asechi@iclould.com>
# Description

Refine error management for the streaming operation. Previously, errors
were converted into stream parts, resulting in the loss of status info.
The updated logic now first verifies if the request was successful; if
it failed, a client error is returned, preserving the relevant status
information.

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Fixes #502  🦕
🤖 I have created a release *beep* *boop*
---


##
[0.3.20](v0.3.19...v0.3.20)
(2025-12-03)


### Bug Fixes

* Improve streaming errors handling
([#576](#576))
([7ea7475](7ea7475))

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

Just fixing various typos discovered while reading code of the repo: see
commit diffs for details

Cheers

Didier

- [X] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [X] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- [X] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [X] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

N/A

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This PR introduces digital signatures for Agent Cards to ensure
authenticity and integrity, adhering to the A2A specification for [Agent
Card Signing (Section
8.4).](https://a2a-protocol.org/latest/specification/#84-agent-card-signing)

## Changes:
- Implement `Canonicalization` Logic (`src/a2a/utils/signing.py`)
- Add `Signing` and `Verification` Utilities
(`src/a2a/utils/signing.py`):
- `create_agent_card_signer` which generates an `agent_card_signer` for
signing `AgentCards`
- `create_signature_verifier` which generates a `signature_verifier` for
verification of `AgentCard` signatures
- Enable signature verification support for `json-rpc`, `rest` and
`gRPC` transports
- Add Protobuf Conversion for Signatures
(`src/a2a/utils/proto_utils.py`) ensuring `AgentCardSignature` can be
serialized and deserialized for gRPC transport
- Add related tests:
   - integration tests for fetching signed cards from the Server
   - unit tests for signing util
   - unit tests for protobuf conversions 



- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Release-As: 0.3.21
# Description

Read further and discovered this additional (and final) set of typos
🤖 I have created a release *beep* *boop*
---


##
[0.3.21](v0.3.20...v0.3.21)
(2025-12-12)


### Documentation

* Fixing typos
([#586](#586))
([5fea21f](5fea21f))

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

This change allows passing custom `task_id_generator` and
`context_id_generator` functions to the `SimpleRequestContextBuilder`.

This provides flexibility in how task and context IDs are generated,
defaulting to the previous behavior if no generators are provided.

Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make
sure it goes smoothly:

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕
# Description

Adding 2 more tests to user.py to improve build code coverage

- [X] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [X] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- [X] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [N/A] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

N/A

---------

Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
# Description

Adding 21 tests for client/card_resolver.py

They all pass:

```
========================= test session starts ==============================
collecting ... collected 21 items

tests/client/test_card_resolver.py::TestA2ACardResolverInit::test_init_with_defaults PASSED [  4%]
tests/client/test_card_resolver.py::TestA2ACardResolverInit::test_init_with_custom_path PASSED [  9%]
tests/client/test_card_resolver.py::TestA2ACardResolverInit::test_init_strips_leading_slash_from_agent_card_path PASSED [ 14%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_success_default_path PASSED [ 19%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_success_custom_path PASSED [ 23%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_strips_leading_slash_from_relative_path PASSED [ 28%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_with_http_kwargs PASSED [ 33%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_root_path PASSED [ 38%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_http_status_error PASSED [ 42%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_json_decode_error PASSED [ 47%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_request_error PASSED [ 52%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_validation_error PASSED [ 57%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_logs_success PASSED [ 61%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_none_relative_path PASSED [ 66%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_empty_string_relative_path PASSED [ 71%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[400] PASSED [ 76%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[401] PASSED [ 80%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[403] PASSED [ 85%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[500] PASSED [ 90%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[502] PASSED [ 95%]
tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_returns_agent_card_instance PASSED [100%]

======================== 21 passed, 2 warnings in 0.11s ========================
```

- [X] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [X] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- [X] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [N/A ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

N/A

---------

Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
…r` (#593)

# Description

Previously, the `JSON-RPC` and `REST` protocols verified agent card
signatures after calling `A2ACardResolver.get_agent_card`. This change
moves the signature verification logic inside the
`A2ACardResolver.get_agent_card` method and adds a unit test to test_card_resolver.py


Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make
sure it goes smoothly:

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)
🤖 I have created a release *beep* *boop*
---


##
[0.3.22](v0.3.21...v0.3.22)
(2025-12-16)


### Features

* Add custom ID generators to `SimpleRequestContextBuilder`
([#594](#594))
([04bcafc](04bcafc))


### Code Refactoring

* Move agent card signature verification into `A2ACardResolver`
([6fa6a6c](6fa6a6c))

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

Adding 13 tests for server/tasks/id_generator.py

They all pass:

```
============================= test session starts ==============================
collecting ... collected 13 items

tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_all_fields PASSED [  7%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_defaults PASSED [ 15%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_partial_fields[kwargs0-task_123-None] PASSED [ 23%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_partial_fields[kwargs1-None-context_456] PASSED [ 30%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_mutability PASSED [ 38%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_validation PASSED [ 46%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::TestIDGenerator::test_cannot_instantiate_abstract_class PASSED [ 53%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::TestIDGenerator::test_subclass_must_implement_generate PASSED [ 61%]
tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::TestIDGenerator::test_valid_subclass_implementation PASSED [ 69%]
tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_returns_string PASSED [ 76%]
tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_produces_unique_ids PASSED [ 84%]
tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_works_with_various_contexts[none_context] PASSED [ 92%]
tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_works_with_various_contexts[empty_context] PASSED [100%]

============================== 13 passed in 0.04s ==============================
```

- [X] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [X] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- [X] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [N/A] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

N/A

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
…updates (#603)

Bumps the github-actions group with 4 updates in the / directory:
[actions/checkout](https://github.com/actions/checkout),
[actions/upload-artifact](https://github.com/actions/upload-artifact),
[actions/download-artifact](https://github.com/actions/download-artifact)
and
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request).

Updates `actions/checkout` from 5 to 6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>v6-beta by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2298">actions/checkout#2298</a></li>
<li>update readme/changelog for v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2311">actions/checkout#2311</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v5.0.0...v6.0.0">https://github.com/actions/checkout/compare/v5.0.0...v6.0.0</a></p>
<h2>v6-beta</h2>
<h2>What's Changed</h2>
<p>Updated persist-credentials to store the credentials under
<code>$RUNNER_TEMP</code> instead of directly in the local git
config.</p>
<p>This requires a minimum Actions Runner version of <a
href="https://github.com/actions/runner/releases/tag/v2.329.0">v2.329.0</a>
to access the persisted credentials for <a
href="https://docs.github.com/en/actions/tutorials/use-containerized-services/create-a-docker-container-action">Docker
container action</a> scenarios.</p>
<h2>v5.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v5...v5.0.1">https://github.com/actions/checkout/compare/v5...v5.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Add Ref and Commit outputs by <a
href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
<li>Dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a
href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>,
<a
href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
</ul>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
<li>Pin actions/checkout's own workflows to a known, good, stable
version. by <a href="https://github.com/jww3"><code>@​jww3</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1776">actions/checkout#1776</a></li>
</ul>
<h2>v4.1.6</h2>
<ul>
<li>Check platform to set archive extension appropriately by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1732">actions/checkout#1732</a></li>
</ul>
<h2>v4.1.5</h2>
<ul>
<li>Update NPM dependencies by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1703">actions/checkout#1703</a></li>
<li>Bump github/codeql-action from 2 to 3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1694">actions/checkout#1694</a></li>
<li>Bump actions/setup-node from 1 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1696">actions/checkout#1696</a></li>
<li>Bump actions/upload-artifact from 2 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1695">actions/checkout#1695</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/8e8c483db84b4bee98b60c0593521ed34d9990e8"><code>8e8c483</code></a>
Clarify v6 README (<a
href="https://redirect.github.com/actions/checkout/issues/2328">#2328</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/033fa0dc0b82693d8986f1016a0ec2c5e7d9cbb1"><code>033fa0d</code></a>
Add worktree support for persist-credentials includeIf (<a
href="https://redirect.github.com/actions/checkout/issues/2327">#2327</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5"><code>c2d88d3</code></a>
Update all references from v5 and v4 to v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2314">#2314</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3"><code>1af3b93</code></a>
update readme/changelog for v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2311">#2311</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/71cf2267d89c5cb81562390fa70a37fa40b1305e"><code>71cf226</code></a>
v6-beta (<a
href="https://redirect.github.com/actions/checkout/issues/2298">#2298</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/069c6959146423d11cd0184e6accf28f9d45f06e"><code>069c695</code></a>
Persist creds to a separate file (<a
href="https://redirect.github.com/actions/checkout/issues/2286">#2286</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493"><code>ff7abcd</code></a>
Update README to include Node.js 24 support details and requirements (<a
href="https://redirect.github.com/actions/checkout/issues/2248">#2248</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/v5...v6">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/upload-artifact` from 5 to 6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>v6 - What's new</h2>
<blockquote>
<p>[!IMPORTANT]
actions/upload-artifact@v6 now runs on Node.js 24 (<code>runs.using:
node24</code>) and requires a minimum Actions Runner version of 2.327.1.
If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<h3>Node.js 24</h3>
<p>This release updates the runtime to Node.js 24. v5 had preliminary
support for Node.js 24, however this action was by default still running
on Node.js 20. Now this action by default will run on Node.js 24.</p>
<h2>What's Changed</h2>
<ul>
<li>Upload Artifact Node 24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/719">actions/upload-artifact#719</a></li>
<li>fix: update <code>@​actions/artifact</code> for Node.js 24 punycode
deprecation by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/744">actions/upload-artifact#744</a></li>
<li>prepare release v6.0.0 for Node.js 24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/745">actions/upload-artifact#745</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0">https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/upload-artifact/commit/b7c566a772e6b6bfb58ed0dc250532a479d7789f"><code>b7c566a</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/745">#745</a>
from actions/upload-artifact-v6-release</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/e516bc8500aaf3d07d591fcd4ae6ab5f9c391d5b"><code>e516bc8</code></a>
docs: correct description of Node.js 24 support in README</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/ddc45ed9bca9b38dbd643978d88e3981cdc91415"><code>ddc45ed</code></a>
docs: update README to correct action name for Node.js 24 support</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/615b319bd27bb32c3d64dca6b6ed6974d5fbe653"><code>615b319</code></a>
chore: release v6.0.0 for Node.js 24 support</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/017748b48f8610ca8e6af1222f4a618e84a9c703"><code>017748b</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/744">#744</a>
from actions/fix-storage-blob</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/38d4c7997f5510fcc41fc4aae2a6b97becdbe7fc"><code>38d4c79</code></a>
chore: rebuild dist</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/7d27270e0cfd253e666c44abac0711308d2d042f"><code>7d27270</code></a>
chore: add missing license cache files for <code>@​actions/core</code>,
<code>@​actions/io</code>, and mi...</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/5f643d3c9475505ccaf26d686ffbfb71a8387261"><code>5f643d3</code></a>
chore: update license files for <code>@​actions/artifact</code><a
href="https://github.com/5"><code>@​5</code></a>.0.1 dependencies</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/1df1684032c88614064493e1a0478fcb3583e1d0"><code>1df1684</code></a>
chore: update package-lock.json with <code>@​actions/artifact</code><a
href="https://github.com/5"><code>@​5</code></a>.0.1</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/b5b1a918401ee270935b6b1d857ae66c85f3be6f"><code>b5b1a91</code></a>
fix: update <code>@​actions/artifact</code> to ^5.0.0 for Node.js 24
punycode fix</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/upload-artifact/compare/v5...v6">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/download-artifact` from 6 to 7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/download-artifact/releases">actions/download-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>v7 - What's new</h2>
<blockquote>
<p>[!IMPORTANT]
actions/download-artifact@v7 now runs on Node.js 24 (<code>runs.using:
node24</code>) and requires a minimum Actions Runner version of 2.327.1.
If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<h3>Node.js 24</h3>
<p>This release updates the runtime to Node.js 24. v6 had preliminary
support for Node 24, however this action was by default still running on
Node.js 20. Now this action by default will run on Node.js 24.</p>
<h2>What's Changed</h2>
<ul>
<li>Update GHES guidance to include reference to Node 20 version by <a
href="https://github.com/patrikpolyak"><code>@​patrikpolyak</code></a>
in <a
href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li>
<li>Download Artifact Node24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li>
<li>fix: update <code>@​actions/artifact</code> to fix Node.js 24
punycode deprecation by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/451">actions/download-artifact#451</a></li>
<li>prepare release v7.0.0 for Node.js 24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/452">actions/download-artifact#452</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/patrikpolyak"><code>@​patrikpolyak</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li>
<li><a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0">https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/download-artifact/commit/37930b1c2abaa49bbe596cd826c3c89aef350131"><code>37930b1</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/452">#452</a>
from actions/download-artifact-v7-release</li>
<li><a
href="https://github.com/actions/download-artifact/commit/72582b9e0acd370909e83fa4a1fd0fca3ad452d8"><code>72582b9</code></a>
doc: update readme</li>
<li><a
href="https://github.com/actions/download-artifact/commit/0d2ec9d4cbcefe257d822f108de2a1f15f8da9f6"><code>0d2ec9d</code></a>
chore: release v7.0.0 for Node.js 24 support</li>
<li><a
href="https://github.com/actions/download-artifact/commit/fd7ae8fda6dc16277a9ffbc91cdb0eedf156e912"><code>fd7ae8f</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/451">#451</a>
from actions/fix-storage-blob</li>
<li><a
href="https://github.com/actions/download-artifact/commit/d484700543354b15886d6a52910cf61b7f1d2b27"><code>d484700</code></a>
chore: restore minimatch.dep.yml license file</li>
<li><a
href="https://github.com/actions/download-artifact/commit/03a808050efe42bb6ad85281890afd4e4546672c"><code>03a8080</code></a>
chore: remove obsolete dependency license files</li>
<li><a
href="https://github.com/actions/download-artifact/commit/56fe6d904b0968950f8b68ea17774c54973ed5e2"><code>56fe6d9</code></a>
chore: update <code>@​actions/artifact</code> license file to 5.0.1</li>
<li><a
href="https://github.com/actions/download-artifact/commit/8e3ebc4ab4d2e095e5eb44ba1a4a53b6b03976ad"><code>8e3ebc4</code></a>
chore: update package-lock.json with <code>@​actions/artifact</code><a
href="https://github.com/5"><code>@​5</code></a>.0.1</li>
<li><a
href="https://github.com/actions/download-artifact/commit/1e3c4b4d4906c98ab57453c24efefdf16c078044"><code>1e3c4b4</code></a>
fix: update <code>@​actions/artifact</code> to ^5.0.0 for Node.js 24
punycode fix</li>
<li><a
href="https://github.com/actions/download-artifact/commit/458627d354794c71bc386c8d5839d20b5885fe2a"><code>458627d</code></a>
chore: use local <code>@​actions/artifact</code> package for Node.js 24
testing</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/download-artifact/compare/v6...v7">compare
view</a></li>
</ul>
</details>
<br />

Updates `peter-evans/create-pull-request` from 7 to 8
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v8.0.0</h2>
<h2>What's new in v8</h2>
<ul>
<li>Requires <a
href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions
Runner v2.327.1</a> or later if you are using a self-hosted runner for
Node 24 support.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>chore: Update checkout action version to v6 by <a
href="https://github.com/yonas"><code>@​yonas</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li>Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
<li>feat: v8 by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4260">peter-evans/create-pull-request#4260</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yonas"><code>@​yonas</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0">https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0</a></p>
<h2>Create Pull Request v7.0.11</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: restrict remote prune to self-hosted runners by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4250">peter-evans/create-pull-request#4250</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11">https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11</a></p>
<h2>Create Pull Request v7.0.10</h2>
<p>⚙️ Fixes an issue where updating a pull request failed when targeting
a forked repository with the same owner as its parent.</p>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4235">peter-evans/create-pull-request#4235</a></li>
<li>build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4240">peter-evans/create-pull-request#4240</a></li>
<li>fix: provider list pulls fallback for multi fork same owner by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4245">peter-evans/create-pull-request#4245</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/obnyis"><code>@​obnyis</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4064">peter-evans/create-pull-request#4064</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10">https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10</a></p>
<h2>Create Pull Request v7.0.9</h2>
<p>⚙️ Fixes an <a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4228">incompatibility</a>
with the recently released <code>actions/checkout@v6</code>.</p>
<h2>What's Changed</h2>
<ul>
<li>~70 dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a></li>
<li>docs: fix workaround description about <code>ready_for_review</code>
by <a href="https://github.com/ybiquitous"><code>@​ybiquitous</code></a>
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3939">peter-evans/create-pull-request#3939</a></li>
<li>Docs: <code>add-paths</code> default behavior by <a
href="https://github.com/joeflack4"><code>@​joeflack4</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li>
<li>docs: update to create-github-app-token v2 by <a
href="https://github.com/Goooler"><code>@​Goooler</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li>
<li>Fix compatibility with actions/checkout@v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/joeflack4"><code>@​joeflack4</code></a>
made their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li>
<li><a href="https://github.com/Goooler"><code>@​Goooler</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li>
<li><a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/98357b18bf14b5342f975ff684046ec3b2a07725"><code>98357b1</code></a>
feat: v8 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4260">#4260</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/41c0e4b7899a4a0922bf899d64c5f25738cfe356"><code>41c0e4b</code></a>
Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4259">#4259</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/994332de4c8124517167807167073cf397678768"><code>994332d</code></a>
chore: Update checkout action version to v6 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4258">#4258</a>)</li>
<li>See full diff in <a
href="https://github.com/peter-evans/create-pull-request/compare/v7...v8">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
# Description

Currently it creates a lot of noise from broken PRs:
https://github.com/a2aproject/a2a-python/pulls/a2a-bot.

While we're migrating to 1.0 spec we're not benefiting from this
automation. `workflow_dispatch` (manual run) is still available.
# Description

Doing `uv sync` now updates `uv.lock` with `pyjwt` added in #581. Commit
updated file and update CI to fail on inconsistent `uv.lock` via
`--locked`.

Tested via
e6df935:
[failed CI
run](https://github.com/a2aproject/a2a-python/actions/runs/21206882696/job/61005414117?pr=637).
…638)

# Description

Run TCK tests with `mandatory` and `capabilities` categories for
JSON-RPC transport (GRPC and REST fail at the moment).

Re #639

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.32.0 to
20.36.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/virtualenv/releases">virtualenv's
releases</a>.</em></p>
<blockquote>
<h2>20.36.1</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.36.0 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3011">pypa/virtualenv#3011</a></li>
<li>fix: resolve TOCTOU vulnerabilities in app_data and lock directory
creation by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3013">pypa/virtualenv#3013</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.36.0...20.36.1">https://github.com/pypa/virtualenv/compare/20.36.0...20.36.1</a></p>
<h2>20.36.0</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.35.3 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2981">pypa/virtualenv#2981</a></li>
<li>fix: Prevent NameError when accessing _DISTUTILS_PATCH during file
ov… by <a href="https://github.com/gracetyy"><code>@​gracetyy</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li>
<li>Upgrade pip and fix 3.15 picking old wheel by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2989">pypa/virtualenv#2989</a></li>
<li>release 20.35.4 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2990">pypa/virtualenv#2990</a></li>
<li>fix: wrong path on migrated venv by <a
href="https://github.com/sk1234567891"><code>@​sk1234567891</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2996">pypa/virtualenv#2996</a></li>
<li>test_too_many_open_files: assert on <code>errno.EMFILE</code>
instead of <code>strerror</code> by <a
href="https://github.com/pltrz"><code>@​pltrz</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3001">pypa/virtualenv#3001</a></li>
<li>fix: update filelock dependency version to 3.20.1 to fix CVE
CVE-2025-68146 by <a
href="https://github.com/pythonhubdev"><code>@​pythonhubdev</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3002">pypa/virtualenv#3002</a></li>
<li>fix: resolve EncodingWarning in tox upgrade environment by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3007">pypa/virtualenv#3007</a></li>
<li>Fix Interpreter discovery bug wrt. Microsoft Store shortcut using
Latin-1 by <a
href="https://github.com/rahuldevikar"><code>@​rahuldevikar</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3006">pypa/virtualenv#3006</a></li>
<li>Add support for PEP 440 version specifiers in the
<code>--python</code> flag. by <a
href="https://github.com/rahuldevikar"><code>@​rahuldevikar</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3008">pypa/virtualenv#3008</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/gracetyy"><code>@​gracetyy</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li>
<li><a
href="https://github.com/sk1234567891"><code>@​sk1234567891</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2996">pypa/virtualenv#2996</a></li>
<li><a href="https://github.com/pltrz"><code>@​pltrz</code></a> made
their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3001">pypa/virtualenv#3001</a></li>
<li><a
href="https://github.com/pythonhubdev"><code>@​pythonhubdev</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3002">pypa/virtualenv#3002</a></li>
<li><a
href="https://github.com/rahuldevikar"><code>@​rahuldevikar</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3006">pypa/virtualenv#3006</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.35.3...20.36.0">https://github.com/pypa/virtualenv/compare/20.35.3...20.36.0</a></p>
<h2>20.35.4</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.35.3 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2981">pypa/virtualenv#2981</a></li>
<li>fix: Prevent NameError when accessing _DISTUTILS_PATCH during file
ov… by <a href="https://github.com/gracetyy"><code>@​gracetyy</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li>
<li>Upgrade pip and fix 3.15 picking old wheel by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2989">pypa/virtualenv#2989</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/gracetyy"><code>@​gracetyy</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4">https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4</a></p>
<h2>20.35.3</h2>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's
changelog</a>.</em></p>
<blockquote>
<h2>v20.36.1 (2026-01-09)</h2>
<p>Bugfixes - 20.36.1</p>
<pre><code>- Fix TOCTOU vulnerabilities in app_data and lock directory
creation that could be exploited via symlink attacks - reported by
:user:`tsigouris007`, fixed by :user:`gaborbernat`. (:issue:`3013`)
<h2>v20.36.0 (2026-01-07)</h2>
<p>Features - 20.36.0
</code></pre></p>
<ul>
<li>Add support for PEP 440 version specifiers in the
<code>--python</code> flag. Users can now specify Python versions using
operators like <code>&gt;=</code>, <code>&lt;=</code>, <code>~=</code>,
etc. For example: <code>virtualenv --python=&quot;&gt;=3.12&quot;
myenv</code> <code>. (:issue:</code>2994`)</li>
</ul>
<h2>v20.35.4 (2025-10-28)</h2>
<p>Bugfixes - 20.35.4</p>
<pre><code>- Fix race condition in ``_virtualenv.py`` when file is
overwritten during import, preventing ``NameError`` when
``_DISTUTILS_PATCH`` is accessed - by :user:`gracetyy`. (:issue:`2969`)
- Upgrade embedded wheels:
<ul>
<li>pip to <code>25.3</code> from <code>25.2</code>
(:issue:<code>2989</code>)</li>
</ul>
<h2>v20.35.3 (2025-10-10)</h2>
<p>Bugfixes - 20.35.3
</code></pre></p>
<ul>
<li>Accept RuntimeError in <code>test_too_many_open_files</code>, by
:user:<code>esafak</code> (:issue:<code>2935</code>)</li>
</ul>
<h2>v20.35.2 (2025-10-10)</h2>
<p>Bugfixes - 20.35.2</p>
<pre><code>- Revert out changes related to the extraction of the
discovery module - by :user:`gaborbernat`. (:issue:`2978`)
<h2>v20.35.1 (2025-10-09)</h2>
<p>Bugfixes - 20.35.1
</code></pre></p>
<ul>
<li>Patch get_interpreter to handle missing cache and app_data - by
:user:<code>esafak</code> (:issue:<code>2972</code>)</li>
<li>Fix backwards incompatible changes to <code>PythonInfo</code> - by
:user:<code>gaborbernat</code>. (:issue:<code>2975</code>)</li>
</ul>
<h2>v20.35.0 (2025-10-08)</h2>
<p>Features - 20.35.0</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pypa/virtualenv/commit/d0ad11d1146e81ea74d2461be9653f1da9cf3fd1"><code>d0ad11d</code></a>
release 20.36.1</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/dec4cec5d16edaf83a00a658f32d1e032661cebc"><code>dec4cec</code></a>
Merge pull request <a
href="https://redirect.github.com/pypa/virtualenv/issues/3013">#3013</a>
from gaborbernat/fix-sec</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/5fe5d38beb1273b489591a7b444f1018af2edf0a"><code>5fe5d38</code></a>
release 20.36.0 (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3011">#3011</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/9719376addaa710b61d9ed013774fa26f6224b4e"><code>9719376</code></a>
release 20.36.0</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/0276db6fcf8849c519d75465f659b12aefb2acd8"><code>0276db6</code></a>
Add support for PEP 440 version specifiers in the <code>--python</code>
flag. (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3008">#3008</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/4f900c29044e17812981b5b98ddce45604858b7f"><code>4f900c2</code></a>
Fix Interpreter discovery bug wrt. Microsoft Store shortcut using
Latin-1 (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3">#3</a>...</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/13afcc62a3444d0386c8031d0a62277a8274ab07"><code>13afcc6</code></a>
fix: resolve EncodingWarning in tox upgrade environment (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3007">#3007</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/31b5d31581df3e3a7bbc55e52568b26dd01b0d57"><code>31b5d31</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2997">#2997</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/7c284221b4751388801355fc6ebaa2abe60427bd"><code>7c28422</code></a>
fix: update filelock dependency version to 3.20.1 to fix CVE
CVE-2025-68146 (...</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/365628c544cd5498fbf0a3b6c6a8c1f41d25a749"><code>365628c</code></a>
test_too_many_open_files: assert on <code>errno.EMFILE</code> instead of
<code>strerror</code> (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3001">#3001</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pypa/virtualenv/compare/20.32.0...20.36.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=uv&previous-version=20.32.0&new-version=20.36.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/a2aproject/a2a-python/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ivan Shymko <vana.shimko@gmail.com>
# Description

The cause is florimondmanca/httpx-sse#35:
using comments among events with `id` field causes `httpx-sse` to emit
an event with empty data.

Although according to [the standard (item
2)](https://html.spec.whatwg.org/multipage/server-sent-events.html#dispatchMessage)
empty `buffer` shouldn't produce an event, with the way how `httpx-sse`
API is defined it may still be reasonable to emit an object with just
`retry` field for instance so that consumer could handle it. [The
standard](https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation)
defines `retry` field handling outside of events dispatching, so in the
context of this library it's up to the client (see
[here](https://github.com/florimondmanca/httpx-sse?tab=readme-ov-file#handling-reconnections)).
That being said, even if comment handling bug is fixed, it still makes
sense to add this check against `data` field unconditionally without any
TODOs.

Tested by mocking one level lower to put `httpx-sse` under test as well
as it's an integration issue.

Fixes #540

---------

Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Bumps the all group with 27 updates:

| Package | From | To |
| --- | --- | --- |
| [httpx-sse](https://github.com/florimondmanca/httpx-sse) | `0.4.1` |
`0.4.3` |
| [pydantic](https://github.com/pydantic/pydantic) | `2.11.7` | `2.12.5`
|
| [protobuf](https://github.com/protocolbuffers/protobuf) | `5.29.5` |
`6.33.4` |
| [google-api-core](https://github.com/googleapis/python-api-core) |
`2.25.1` | `2.29.0` |
| [fastapi](https://github.com/fastapi/fastapi) | `0.116.1` | `0.128.0`
|
| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.0.2` |
`3.2.0` |
| [starlette](https://github.com/Kludex/starlette) | `0.47.2` | `0.50.0`
|
| [cryptography](https://github.com/pyca/cryptography) | `45.0.5` |
`46.0.3` |
| [grpcio](https://github.com/grpc/grpc) | `1.74.0` | `1.76.0` |
| [grpcio-tools](https://github.com/grpc/grpc) | `1.71.2` | `1.74.0` |
| [grpcio-reflection](https://grpc.io) | `1.71.2` | `1.74.0` |
|
[opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python)
| `1.36.0` | `1.39.1` |
|
[opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python)
| `1.36.0` | `1.39.1` |
|
[datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator)
| `0.32.0` | `0.53.0` |
| [mypy](https://github.com/python/mypy) | `1.17.1` | `1.19.1` |
| [pytest](https://github.com/pytest-dev/pytest) | `8.4.1` | `9.0.2` |
| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) |
`1.1.0` | `1.3.0` |
| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `6.2.1` |
`7.0.0` |
| [pytest-mock](https://github.com/pytest-dev/pytest-mock) | `3.14.1` |
`3.15.1` |
| [ruff](https://github.com/astral-sh/ruff) | `0.12.8` | `0.14.13` |
|
[uv-dynamic-versioning](https://github.com/ninoseki/uv-dynamic-versioning)
| `0.8.2` | `0.13.0` |
| [types-protobuf](https://github.com/typeshed-internal/stub_uploader) |
`6.30.2.20250703` | `6.32.1.20251210` |
| [types-requests](https://github.com/typeshed-internal/stub_uploader) |
`2.32.4.20250611` | `2.32.4.20260107` |
| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.2.0` |
`4.5.1` |
| [pyupgrade](https://github.com/asottile/pyupgrade) | `3.20.0` |
`3.21.2` |
| [trio](https://github.com/python-trio/trio) | `0.30.0` | `0.32.0` |
| [uvicorn](https://github.com/Kludex/uvicorn) | `0.38.0` | `0.40.0` |

Updates `httpx-sse` from 0.4.1 to 0.4.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/florimondmanca/httpx-sse/releases">httpx-sse's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.4.3</h2>
<h2>0.4.3 - 2025-10-10</h2>
<h3>Fixed</h3>
<ul>
<li>Fix performance issue introduced by the improved line parsing from
release 0.4.2. (Pull <a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/40">#40</a>)</li>
</ul>
<h2>Version 0.4.2</h2>
<h2>0.4.2 - 2025-10-07</h2>
<h3>Fixed</h3>
<ul>
<li>Fix incorrect newline parsing that was not compliant with SSE spec.
(Pull <a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/37">#37</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/florimondmanca/httpx-sse/blob/master/CHANGELOG.md">httpx-sse's
changelog</a>.</em></p>
<blockquote>
<h2>0.4.3 - 2025-10-10</h2>
<h3>Fixed</h3>
<ul>
<li>Fix performance issue introduced by the improved line parsing from
release 0.4.2. (Pull <a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/40">#40</a>)</li>
</ul>
<h2>0.4.2 - 2025-10-07</h2>
<h3>Fixed</h3>
<ul>
<li>Fix incorrect newline parsing that was not compliant with SSE spec.
(Pull <a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/37">#37</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/florimondmanca/httpx-sse/commit/e8fcd9e159066185963ffb9fa29efb8ba2ca84bf"><code>e8fcd9e</code></a>
Version 0.4.3 (<a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/41">#41</a>)</li>
<li><a
href="https://github.com/florimondmanca/httpx-sse/commit/6339349ef44add55654daf58776e753554a8dbd6"><code>6339349</code></a>
Update CHANGELOG.md</li>
<li><a
href="https://github.com/florimondmanca/httpx-sse/commit/4787b4f846cf24c75980611b026e5d60213cd2df"><code>4787b4f</code></a>
Refactor _splitlines_sse to improve efficiency (<a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/40">#40</a>)</li>
<li><a
href="https://github.com/florimondmanca/httpx-sse/commit/c3dd81af12687f5243243223ac1a89d47c0cf9f6"><code>c3dd81a</code></a>
Version 0.4.2 (<a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/39">#39</a>)</li>
<li><a
href="https://github.com/florimondmanca/httpx-sse/commit/6297588229e0a213f170101516e41102d7c7647a"><code>6297588</code></a>
Changelog for Version 0.4.2</li>
<li><a
href="https://github.com/florimondmanca/httpx-sse/commit/1ccc0958f5786fe66c0d220ef53e70ddb2158e1b"><code>1ccc095</code></a>
SSE spec compliant line parsing (<a
href="https://redirect.github.com/florimondmanca/httpx-sse/issues/37">#37</a>)</li>
<li>See full diff in <a
href="https://github.com/florimondmanca/httpx-sse/compare/0.4.1...0.4.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `pydantic` from 2.11.7 to 2.12.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pydantic/pydantic/releases">pydantic's
releases</a>.</em></p>
<blockquote>
<h2>v2.12.5 2025-11-26</h2>
<h2>v2.12.5 (2025-11-26)</h2>
<p>This is the fifth 2.12 patch release, addressing an issue with the
<code>MISSING</code> sentinel and providing several documentation
improvements.</p>
<p>The next 2.13 minor release will be published in a couple weeks, and
will include a new <em>polymorphic serialization</em> feature addressing
the remaining unexpected changes to the <em>serialize as any</em>
behavior.</p>
<ul>
<li>Fix pickle error when using <code>model_construct()</code> on a
model with <code>MISSING</code> as a default value by <a
href="https://github.com/ornariece"><code>@​ornariece</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic/pull/12522">#12522</a>.</li>
<li>Several updates to the documentation by <a
href="https://github.com/Viicos"><code>@​Viicos</code></a>.</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pydantic/pydantic/compare/v2.12.4...v2.12.5">https://github.com/pydantic/pydantic/compare/v2.12.4...v2.12.5</a></p>
<h2>v2.12.4 2025-11-05</h2>
<h2>v2.12.4 (2025-11-05)</h2>
<p>This is the fourth 2.12 patch release, fixing more regressions, and
reverting a change in the <code>build()</code> method
of the <a
href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code>
and Dsn types</a>.</p>
<p>This patch release also fixes an issue with the serialization of IP
address types, when <code>serialize_as_any</code> is used. The next
patch release
will try to address the remaining issues with <em>serialize as any</em>
behavior by introducing a new <em>polymorphic serialization</em>
feature, that
should be used in most cases in place of <em>serialize as any</em>.</p>
<ul>
<li>
<p>Fix issue with forward references in parent <code>TypedDict</code>
classes by <a href="https://github.com/Viicos"><code>@​Viicos</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic/pull/12427">#12427</a>.</p>
<p>This issue is only relevant on Python 3.14 and greater.</p>
</li>
<li>
<p>Exclude fields with <code>exclude_if</code> from JSON Schema required
fields by <a href="https://github.com/Viicos"><code>@​Viicos</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic/pull/12430">#12430</a></p>
</li>
<li>
<p>Revert URL percent-encoding of credentials in the
<code>build()</code> method of the <a
href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code>
and Dsn types</a> by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1833">pydantic-core#1833</a>.</p>
<p>This was initially considered as a bugfix, but caused regressions and
as such was fully reverted. The next release will include
an opt-in option to percent-encode components of the URL.</p>
</li>
<li>
<p>Add type inference for IP address types by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1868">pydantic-core#1868</a>.</p>
<p>The 2.12 changes to the <code>serialize_as_any</code> behavior made
it so that IP address types could not properly serialize to JSON.</p>
</li>
<li>
<p>Avoid getting default values from defaultdict by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1853">pydantic-core#1853</a>.</p>
<p>This fixes a subtle regression in the validation behavior of the <a
href="https://docs.python.org/3/library/collections.html#collections.defaultdict"><code>collections.defaultdict</code></a>
type.</p>
</li>
<li>
<p>Fix issue with field serializers on nested typed dictionaries by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1879">pydantic-core#1879</a>.</p>
</li>
<li>
<p>Add more <code>pydantic-core</code> builds for the three-threaded
version of Python 3.14 by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1864">pydantic-core#1864</a>.</p>
</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pydantic/pydantic/compare/v2.12.3...v2.12.4">https://github.com/pydantic/pydantic/compare/v2.12.3...v2.12.4</a></p>
<h2>v2.12.3 2025-10-17</h2>
<h2>v2.12.3 (2025-10-17)</h2>
<h3>What's Changed</h3>
<p>This is the third 2.13 patch release, fixing issues related to the
<code>FieldInfo</code> class, and reverting a change to the supported <a
href="https://docs.pydantic.dev/latest/concepts/validators/#model-validators"><em>after</em>
model validator</a> function signatures.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pydantic/pydantic/blob/main/HISTORY.md">pydantic's
changelog</a>.</em></p>
<blockquote>
<h2>v2.12.5 (2025-11-26)</h2>
<p><a
href="https://github.com/pydantic/pydantic/releases/tag/v2.12.5">GitHub
release</a></p>
<p>This is the fifth 2.12 patch release, addressing an issue with the
<code>MISSING</code> sentinel and providing several documentation
improvements.</p>
<p>The next 2.13 minor release will be published in a couple weeks, and
will include a new <em>polymorphic serialization</em> feature addressing
the remaining unexpected changes to the <em>serialize as any</em>
behavior.</p>
<ul>
<li>Fix pickle error when using <code>model_construct()</code> on a
model with <code>MISSING</code> as a default value by <a
href="https://github.com/ornariece"><code>@​ornariece</code></a> in <a
href="https://redirect.github.com/pydantic/pydantic/pull/12522">#12522</a>.</li>
<li>Several updates to the documentation by <a
href="https://github.com/Viicos"><code>@​Viicos</code></a>.</li>
</ul>
<h2>v2.12.4 (2025-11-05)</h2>
<p><a
href="https://github.com/pydantic/pydantic/releases/tag/v2.12.4">GitHub
release</a></p>
<p>This is the fourth 2.12 patch release, fixing more regressions, and
reverting a change in the <code>build()</code> method
of the <a
href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code>
and Dsn types</a>.</p>
<p>This patch release also fixes an issue with the serialization of IP
address types, when <code>serialize_as_any</code> is used. The next
patch release
will try to address the remaining issues with <em>serialize as any</em>
behavior by introducing a new <em>polymorphic serialization</em>
feature, that
should be used in most cases in place of <em>serialize as any</em>.</p>
<ul>
<li>
<p>Fix issue with forward references in parent <code>TypedDict</code>
classes by <a href="https://github.com/Viicos"><code>@​Viicos</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic/pull/12427">#12427</a>.</p>
<p>This issue is only relevant on Python 3.14 and greater.</p>
</li>
<li>
<p>Exclude fields with <code>exclude_if</code> from JSON Schema required
fields by <a href="https://github.com/Viicos"><code>@​Viicos</code></a>
in <a
href="https://redirect.github.com/pydantic/pydantic/pull/12430">#12430</a></p>
</li>
<li>
<p>Revert URL percent-encoding of credentials in the
<code>build()</code> method
of the <a
href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code>
and Dsn types</a> by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1833">pydantic-core#1833</a>.</p>
<p>This was initially considered as a bugfix, but caused regressions and
as such was fully reverted. The next release will include
an opt-in option to percent-encode components of the URL.</p>
</li>
<li>
<p>Add type inference for IP address types by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1868">pydantic-core#1868</a>.</p>
<p>The 2.12 changes to the <code>serialize_as_any</code> behavior made
it so that IP address types could not properly serialize to JSON.</p>
</li>
<li>
<p>Avoid getting default values from defaultdict by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1853">pydantic-core#1853</a>.</p>
<p>This fixes a subtle regression in the validation behavior of the <a
href="https://docs.python.org/3/library/collections.html#collections.defaultdict"><code>collections.defaultdict</code></a>
type.</p>
</li>
<li>
<p>Fix issue with field serializers on nested typed dictionaries by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1879">pydantic-core#1879</a>.</p>
</li>
<li>
<p>Add more <code>pydantic-core</code> builds for the three-threaded
version of Python 3.14 by <a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a> in
<a
href="https://redirect.github.com/pydantic/pydantic-core/pull/1864">pydantic-core#1864</a>.</p>
</li>
</ul>
<h2>v2.12.3 (2025-10-17)</h2>
<p><a
href="https://github.com/pydantic/pydantic/releases/tag/v2.12.3">GitHub
release</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pydantic/pydantic/commit/bd2d0dd0137dfa1a8fdff2529b9dfb1547980150"><code>bd2d0dd</code></a>
Prepare release v2.12.5</li>
<li><a
href="https://github.com/pydantic/pydantic/commit/7d0302ec7ec2cf115de3450a615522875bdd8b56"><code>7d0302e</code></a>
Document security implications when using
<code>create_model()</code></li>
<li><a
href="https://github.com/pydantic/pydantic/commit/e9ef980def726b6f59b6c495ddc9dc259a0228db"><code>e9ef980</code></a>
Fix typo in Standard Library Types documentation</li>
<li><a
href="https://github.com/pydantic/pydantic/commit/f2c20c00c265a31a13c48f9bae923a87c829952e"><code>f2c20c0</code></a>
Add <code>pydantic-docs</code> dev dependency, make use of versioning
blocks</li>
<li><a
href="https://github.com/pydantic/pydantic/commit/a76c1aa26f2d64a3fd080ac515d80832689197e8"><code>a76c1aa</code></a>
Update documentation about JSON Schema</li>
<li><a
href="https://github.com/pydantic/pydantic/commit/8cbc72ca489891e574fba45238ee8bd4f8e719a2"><code>8cbc72c</code></a>
Add documentation about custom <code>__init__()</code></li>
<li><a
href="https://github.com/pydantic/pydantic/commit/99eba599069da137b3f708ffa74627f2b456ba73"><code>99eba59</code></a>
Add additional test for <code>FieldInfo.get_default()</code></li>
<li><a
href="https://github.com/pydantic/pydantic/commit/c71076988e507ea93844c77c3bf0bbb85a5716af"><code>c710769</code></a>
Special case <code>MISSING</code> sentinel in
<code>smart_deepcopy()</code></li>
<li><a
href="https://github.com/pydantic/pydantic/commit/20a9d771c210fd77d52366ac923258c4c199727f"><code>20a9d77</code></a>
Do not delete mock validator/serializer in
<code>rebuild_dataclass()</code></li>
<li><a
href="https://github.com/pydantic/pydantic/commit/c86515a3a8f2120148fab2eaedd3bc45925779d0"><code>c86515a</code></a>
Update parts of the model and <code>revalidate_instances</code>
documentation</li>
<li>Additional commits viewable in <a
href="https://github.com/pydantic/pydantic/compare/v2.11.7...v2.12.5">compare
view</a></li>
</ul>
</details>
<br />

Updates `protobuf` from 5.29.5 to 6.33.4
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/protocolbuffers/protobuf/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `google-api-core` from 2.25.1 to 2.29.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/python-api-core/releases">google-api-core's
releases</a>.</em></p>
<blockquote>
<h2>google-api-core 2.29.0</h2>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.28.1...v2.29.0">2.29.0</a>
(2026-01-08)</h2>
<h3>Features</h3>
<ul>
<li>
<p>make parse_version_to_tuple public (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/864">#864</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/c969186f">c969186f</a>)</p>
</li>
<li>
<p>Auto enable mTLS when supported certificates are detected (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/869">#869</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/f8bf6f96">f8bf6f96</a>)</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p>remove call to importlib.metadata.packages_distributions() for
py38/py39 (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/859">#859</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/628003e2">628003e2</a>)</p>
</li>
<li>
<p>Log version check errors (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/858">#858</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/6493118c">6493118c</a>)</p>
</li>
<li>
<p>flaky tests due to imprecision in floating point calculation and
performance test setup (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/865">#865</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/93404080">93404080</a>)</p>
</li>
<li>
<p>closes tailing streams in bidi classes. (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/851">#851</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/c97b3a00">c97b3a00</a>)</p>
</li>
</ul>
<h2>v2.28.1</h2>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.28.0...v2.28.1">2.28.1</a>
(2025-10-28)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Remove dependency on packaging and pkg_resources (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/852">#852</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/ca59a863b08a79c2bf0607f9085de1417422820b">ca59a86</a>)</li>
</ul>
<h2>v2.28.0</h2>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.27.0...v2.28.0">2.28.0</a>
(2025-10-24)</h2>
<h3>Features</h3>
<ul>
<li>Provide and use Python version support check (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/832">#832</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/d36e896f98a2371c4d58ce1a7a3bc1a77a081836">d36e896</a>)</li>
</ul>
<h2>v2.27.0</h2>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.26.0...v2.27.0">2.27.0</a>
(2025-10-22)</h2>
<h3>Features</h3>
<ul>
<li>Support for async bidi streaming apis (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/836">#836</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/95305480d234b6dd0903960db020e55125a997e0">9530548</a>)</li>
</ul>
<h2>v2.26.0</h2>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.25.2...v2.26.0">2.26.0</a>
(2025-10-08)</h2>
<h3>Features</h3>
<ul>
<li>Add trove classifier for Python 3.14 (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/842">#842</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/43690de33a23321d52ab856e2bf253590e1a9357">43690de</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/python-api-core/blob/main/CHANGELOG.md">google-api-core's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/google-cloud-python/compare/google-api-core-v2.28.1...google-api-core-v2.29.0">2.29.0</a>
(2026-01-08)</h2>
<h3>Features</h3>
<ul>
<li>Auto enable mTLS when supported certificates are detected (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/869">#869</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/f8bf6f9610f3e0e7580f223794c3906513e1fa73">f8bf6f9610f3e0e7580f223794c3906513e1fa73</a>)</li>
<li>make parse_version_to_tuple public (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/864">#864</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/c969186f2b66bde1df5e25bbedc5868e27d136f9">c969186f2b66bde1df5e25bbedc5868e27d136f9</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>flaky tests due to imprecision in floating point calculation and
performance test setup (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/865">#865</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/93404080f853699b9217e4b76391a13525db4e3e">93404080f853699b9217e4b76391a13525db4e3e</a>)</li>
<li>remove call to importlib.metadata.packages_distributions() for
py38/py39 (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/859">#859</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/628003e217d9a881d24f3316aecfd48c244a73f0">628003e217d9a881d24f3316aecfd48c244a73f0</a>)</li>
<li>Log version check errors (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/858">#858</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/6493118cae2720696c3d0097274edfd7fe2bce67">6493118cae2720696c3d0097274edfd7fe2bce67</a>)</li>
<li>closes tailing streams in bidi classes. (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/851">#851</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/c97b3a004044ebf8b35c2a7ba97409d7795e11b0">c97b3a004044ebf8b35c2a7ba97409d7795e11b0</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.28.0...v2.28.1">2.28.1</a>
(2025-10-28)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Remove dependency on packaging and pkg_resources (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/852">#852</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/ca59a863b08a79c2bf0607f9085de1417422820b">ca59a86</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.27.0...v2.28.0">2.28.0</a>
(2025-10-24)</h2>
<h3>Features</h3>
<ul>
<li>Provide and use Python version support check (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/832">#832</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/d36e896f98a2371c4d58ce1a7a3bc1a77a081836">d36e896</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.26.0...v2.27.0">2.27.0</a>
(2025-10-22)</h2>
<h3>Features</h3>
<ul>
<li>Support for async bidi streaming apis (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/836">#836</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/95305480d234b6dd0903960db020e55125a997e0">9530548</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.25.2...v2.26.0">2.26.0</a>
(2025-10-08)</h2>
<h3>Features</h3>
<ul>
<li>Add trove classifier for Python 3.14 (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/842">#842</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/43690de33a23321d52ab856e2bf253590e1a9357">43690de</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-api-core/compare/v2.25.1...v2.25.2">2.25.2</a>
(2025-10-01)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Deprecate credentials_file argument (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/841">#841</a>)
(<a
href="https://github.com/googleapis/python-api-core/commit/324eb7464d6ade9a8c2e413d4695bc7d7adfcb3d">324eb74</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/python-api-core/commit/014d3def6ac4fdd5b39d5296a5aad10a546fde21"><code>014d3de</code></a>
chore: librarian release pull request: 20260108T134327Z (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/883">#883</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/2d93bd1e189a5c67d993bd78f38ee68d4e6429df"><code>2d93bd1</code></a>
tests: remove pytype nox session (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/876">#876</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/0fe0632cbf432e4ae9ef477e0719e64256a3b834"><code>0fe0632</code></a>
chore: fix mypy check (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/882">#882</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/f8bf6f9610f3e0e7580f223794c3906513e1fa73"><code>f8bf6f9</code></a>
feat: Auto enable mTLS when supported certificates are detected (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/869">#869</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/f0188c6f9c4dc2036f50fa5d8a8b9433749872d2"><code>f0188c6</code></a>
chore: update github action workflow permissions (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/875">#875</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/d211307fd5a418489837270ee4a0cdbf4ef3fe57"><code>d211307</code></a>
tests: refactor unit test nox sessions (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/873">#873</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/2196e2affabe670dd2bde448d7641084fad3d83c"><code>2196e2a</code></a>
chore: remove sync-repo-settings.yaml which is not used (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/872">#872</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/54d1d364c1ba7426ae61d623f967314174758468"><code>54d1d36</code></a>
tests: update default python runtime used in tests to 3.14 (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/870">#870</a>)</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/93404080f853699b9217e4b76391a13525db4e3e"><code>9340408</code></a>
fix: flaky tests due to imprecision in floating point calculation and
perform...</li>
<li><a
href="https://github.com/googleapis/python-api-core/commit/c969186f2b66bde1df5e25bbedc5868e27d136f9"><code>c969186</code></a>
feat: make parse_version_to_tuple public (<a
href="https://redirect.github.com/googleapis/python-api-core/issues/864">#864</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/python-api-core/compare/v2.25.1...v2.29.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `fastapi` from 0.116.1 to 0.128.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastapi/fastapi/releases">fastapi's
releases</a>.</em></p>
<blockquote>
<h2>0.128.0</h2>
<h3>Breaking Changes</h3>
<ul>
<li>➖ Drop support for <code>pydantic.v1</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14609">#14609</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>✅ Run performance tests only on Pydantic v2. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14608">#14608</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h2>0.127.1</h2>
<h3>Refactors</h3>
<ul>
<li>🔊 Add a custom <code>FastAPIDeprecationWarning</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14605">#14605</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Docs</h3>
<ul>
<li>📝 Add documentary to website. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14600">#14600</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Update translations for de (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14602">#14602</a>
by <a
href="https://github.com/nilslindemann"><code>@​nilslindemann</code></a>.</li>
<li>🌐 Update translations for de (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14581">#14581</a>
by <a
href="https://github.com/nilslindemann"><code>@​nilslindemann</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>🔧 Update pre-commit to use local Ruff instead of hook. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14604">#14604</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>✅ Add missing tests for code examples. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14569">#14569</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
<li>👷 Remove <code>lint</code> job from <code>test</code> CI workflow.
PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14593">#14593</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
<li>👷 Update secrets check. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14592">#14592</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>👷 Run CodSpeed tests in parallel to other tests to speed up CI. PR
<a
href="https://redirect.github.com/fastapi/fastapi/pull/14586">#14586</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔨 Update scripts and pre-commit to autofix files. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14585">#14585</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h2>0.127.0</h2>
<h3>Breaking Changes</h3>
<ul>
<li>🔊 Add deprecation warnings when using <code>pydantic.v1</code>. PR
<a
href="https://redirect.github.com/fastapi/fastapi/pull/14583">#14583</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🔧 Add LLM prompt file for Korean, generated from the existing
translations. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14546">#14546</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔧 Add LLM prompt file for Japanese, generated from the existing
translations. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14545">#14545</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>⬆️ Upgrade OpenAI model for translations to gpt-5.2. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14579">#14579</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h2>0.126.0</h2>
<h3>Upgrades</h3>
<ul>
<li>➖ Drop support for Pydantic v1, keeping short temporary support for
Pydantic v2's <code>pydantic.v1</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14575">#14575</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastapi/fastapi/commit/8322a4445a3b25acd9b26b61192571b2d92f9bcd"><code>8322a44</code></a>
🔖 Release version 0.128.0</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/4b2cfcfd34d0b2e158a05b377426e0c8376b94de"><code>4b2cfcf</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/e3006305518a56ea35f62a31748ad26fe4356fcc"><code>e300630</code></a>
➖ Drop support for <code>pydantic.v1</code> (<a
href="https://redirect.github.com/fastapi/fastapi/issues/14609">#14609</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/1b3bea8b6be2220cc1544653ea785d2134fcb35b"><code>1b3bea8</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/34e884156f38dff4094a7764ff895c4d4b872060"><code>34e8841</code></a>
✅ Run performance tests only on Pydantic v2 (<a
href="https://redirect.github.com/fastapi/fastapi/issues/14608">#14608</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/cd90c78391f86f3fd06d5b327bffad9666b05b44"><code>cd90c78</code></a>
🔖 Release version 0.127.1</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/93f4dfd88b7d62bda89eb521ebd9322e357e6fff"><code>93f4dfd</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/535b5daa317a9d1d1f9a1058e57650a7beefa861"><code>535b5da</code></a>
🔊 Add a custom <code>FastAPIDeprecationWarning</code> (<a
href="https://redirect.github.com/fastapi/fastapi/issues/14605">#14605</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/6b53786f626db95a42fd0f66afd360bab161f4b1"><code>6b53786</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/d98f4eb56eae3155034fe631d9639d95171fb9ab"><code>d98f4eb</code></a>
🔧 Update pre-commit to use local Ruff instead of hook (<a
href="https://redirect.github.com/fastapi/fastapi/issues/14604">#14604</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/fastapi/fastapi/compare/0.116.1...0.128.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `sse-starlette` from 3.0.2 to 3.2.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sysid/sse-starlette/releases">sse-starlette's
releases</a>.</em></p>
<blockquote>
<h2>v3.2.0</h2>
<h2>What's Changed</h2>
<ul>
<li>[feat] Allow disabling automatic draining immediately on sigterm by
<a
href="https://github.com/yuliy-openai"><code>@​yuliy-openai</code></a>
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/157">sysid/sse-starlette#157</a></li>
<li>feat: add enable_automatic_graceful_drain_mode() for re-enabling
auto… by <a href="https://github.com/sysid"><code>@​sysid</code></a> in
<a
href="https://redirect.github.com/sysid/sse-starlette/pull/158">sysid/sse-starlette#158</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/yuliy-openai"><code>@​yuliy-openai</code></a>
made their first contribution in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/157">sysid/sse-starlette#157</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.1.2...v3.2.0">https://github.com/sysid/sse-starlette/compare/v3.1.2...v3.2.0</a></p>
<h2>v3.1.2</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: prevent watcher task leak by using threading.local (<a
href="https://redirect.github.com/sysid/sse-starlette/issues/152">#152</a>)
by <a href="https://github.com/sysid"><code>@​sysid</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/153">sysid/sse-starlette#153</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.1.1...v3.1.2">https://github.com/sysid/sse-starlette/compare/v3.1.1...v3.1.2</a></p>
<h2>v3.1.1</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(shutdown): detect uvicorn shutdown via signal handler
introspection by <a
href="https://github.com/sysid"><code>@​sysid</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/151">sysid/sse-starlette#151</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.1.0...v3.1.1">https://github.com/sysid/sse-starlette/compare/v3.1.0...v3.1.1</a></p>
<h2>v3.1.0</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): bump actions/setup-python from 3 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/143">sysid/sse-starlette#143</a></li>
<li>Fix Issue <a
href="https://redirect.github.com/sysid/sse-starlette/issues/149">#149</a>:
handle_exit cannot signal context-local events by <a
href="https://github.com/sysid"><code>@​sysid</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/150">sysid/sse-starlette#150</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.0.4...v3.1.0">https://github.com/sysid/sse-starlette/compare/v3.0.4...v3.1.0</a></p>
<h2>v3.0.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Add starlette to dependencies by <a
href="https://github.com/WOnder93"><code>@​WOnder93</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/147">sysid/sse-starlette#147</a></li>
<li>Maintenance: CI updates, Python 3.13 support, and packaging fixes by
<a href="https://github.com/sysid"><code>@​sysid</code></a> in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/148">sysid/sse-starlette#148</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/WOnder93"><code>@​WOnder93</code></a>
made their first contribution in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/147">sysid/sse-starlette#147</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.0.3...v3.0.4">https://github.com/sysid/sse-starlette/compare/v3.0.3...v3.0.4</a></p>
<h2>v3.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Security: Upgrade Starlette to 0.49.1 to address CVE-2025-62727 by
<a href="https://github.com/ColeMurray"><code>@​ColeMurray</code></a> in
<a
href="https://redirect.github.com/sysid/sse-starlette/pull/144">sysid/sse-starlette#144</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/ColeMurray"><code>@​ColeMurray</code></a> made
their first contribution in <a
href="https://redirect.github.com/sysid/sse-starlette/pull/144">sysid/sse-starlette#144</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/sysid/sse-starlette/compare/v3.0.2...v3.0.3">https://github.com/sysid/sse-starlette/compare/v3.0.2...v3.0.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sysid/sse-starlette/commit/9101a42cb27395bb4a2700b79934809a19abfdbf"><code>9101a42</code></a>
Bump version to 3.2.0</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/c3248fcdc2512fdec7ae00512785b0bf1fb0d3b8"><code>c3248fc</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/158">#158</a>
from sysid/pr-157</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/c99dd676c08de8f840f65ab56252607abeaf09eb"><code>c99dd67</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/157">#157</a>
from yuliy-openai/optional_auto_drain</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/ed3577721b2f78775b538f79cc0e8452431c66cd"><code>ed35777</code></a>
feat: add enable_automatic_graceful_drain_mode() for re-enabling
auto-drain</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/15f26cb4163d884d813da52a95d9fb1d4bb50397"><code>15f26cb</code></a>
[feat] Allow disabling automatic draining immediately on sigterm</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/fc50af6bb26566a57c9b88b7b917234878365182"><code>fc50af6</code></a>
chore: update gitignore</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/268b3cd3029388cb09434120679e650eb1f4e76e"><code>268b3cd</code></a>
feat: add pre-commit hooks for format, lint, and mypy</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/618ac0e62caf7e15ec716197212cbe1b2a1a4254"><code>618ac0e</code></a>
Bump version to 3.1.2</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/6d68ba9484c9f32f3299bbb069b5877f1db37453"><code>6d68ba9</code></a>
Merge pull request <a
href="https://redirect.github.com/sysid/sse-starlette/issues/153">#153</a>
from sysid/fix/152_shutdown_watcher_leak</li>
<li><a
href="https://github.com/sysid/sse-starlette/commit/89faa043d16b6cbb85025068544ea4da4a17941f"><code>89faa04</code></a>
fix: prevent watcher task leak with threading.local (<a
href="https://redirect.github.com/sysid/sse-starlette/issues/152">#152</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/sysid/sse-starlette/compare/v3.0.2...v3.2.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `starlette` from 0.47.2 to 0.50.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/starlette/releases">starlette's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.50.0</h2>
<h2>Removed</h2>
<ul>
<li>Drop Python 3.9 support <a
href="https://redirect.github.com/Kludex/starlette/pull/3061">#3061</a>.</li>
</ul>
<hr />
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/starlette/compare/0.49.3...0.50.0">https://github.com/Kludex/starlette/compare/0.49.3...0.50.0</a></p>
<h2>Version 0.49.3</h2>
<h2>Fixed</h2>
<ul>
<li>Relax strictness on <code>Middleware</code> type <a
href="https://redirect.github.com/Kludex/starlette/pull/3059">#3059</a>.</li>
</ul>
<hr />
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/starlette/compare/0.49.2...0.49.3">https://github.com/Kludex/starlette/compare/0.49.2...0.49.3</a></p>
<h2>Version 0.49.2</h2>
<h2>Fixed</h2>
<ul>
<li>Ignore <code>if-modified-since</code> header if
<code>if-none-match</code> is present in <code>StaticFiles</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/3044">#3044</a>.</li>
</ul>
<hr />
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/starlette/compare/0.49.1...0.49.2">https://github.com/Kludex/starlette/compare/0.49.1...0.49.2</a></p>
<h2>Version 0.49.1</h2>
<p>This release fixes a security vulnerability in the parsing logic of
the <code>Range</code> header in <code>FileResponse</code>.</p>
<p>You can view the full security advisory: <a
href="https://github.com/Kludex/starlette/security/advisories/GHSA-7f5h-v6xp-fcq8">GHSA-7f5h-v6xp-fcq8</a></p>
<h2>Fixed</h2>
<ul>
<li>Optimize the HTTP ranges parsing logic <a
href="https://github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5">4ea6e22b489ec388d6004cfbca52dd5b147127c5</a></li>
</ul>
<hr />
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/starlette/compare/0.49.0...0.49.1">https://github.com/Kludex/starlette/compare/0.49.0...0.49.1</a></p>
<h2>Version 0.49.0</h2>
<h2>Added</h2>
<ul>
<li>Add <code>encoding</code> parameter to <code>Config</code> class <a
href="https://redirect.github.com/Kludex/starlette/pull/2996">#2996</a>.</li>
<li>Support multiple cookie headers in <code>Request.cookies</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/3029">#3029</a>.</li>
<li>Use <code>Literal</code> type for <code>WebSocketEndpoint</code>
encoding values <a
href="https://redirect.github.com/Kludex/starlette/pull/3027">#3027</a>.</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Do not pollute exception context in <code>Middleware</code> when
using <code>BaseHTTPMiddleware</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/2976">#2976</a>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/starlette/blob/main/docs/release-notes.md">starlette's
changelog</a>.</em></p>
<blockquote>
<h2>0.50.0 (November 1, 2025)</h2>
<h4>Removed</h4>
<ul>
<li>Drop Python 3.9 support <a
href="https://redirect.github.com/Kludex/starlette/pull/3061">#3061</a>.</li>
</ul>
<h2>0.49.3 (November 1, 2025)</h2>
<p>This is the last release that supports Python 3.9, which will be
dropped in the next minor release.</p>
<h4>Fixed</h4>
<ul>
<li>Relax strictness on <code>Middleware</code> type <a
href="https://redirect.github.com/Kludex/starlette/pull/3059">#3059</a>.</li>
</ul>
<h2>0.49.2 (November 1, 2025)</h2>
<h4>Fixed</h4>
<ul>
<li>Ignore <code>if-modified-since</code> header if
<code>if-none-match</code> is present in <code>StaticFiles</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/3044">#3044</a>.</li>
</ul>
<h2>0.49.1 (October 28, 2025)</h2>
<p>This release fixes a security vulnerability in the parsing logic of
the <code>Range</code> header in <code>FileResponse</code>.</p>
<p>You can view the full security advisory: <a
href="https://github.com/Kludex/starlette/security/advisories/GHSA-7f5h-v6xp-fcq8">GHSA-7f5h-v6xp-fcq8</a></p>
<h4>Fixed</h4>
<ul>
<li>Optimize the HTTP ranges parsing logic <a
href="https://github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5">4ea6e22b489ec388d6004cfbca52dd5b147127c5</a></li>
</ul>
<h2>0.49.0 (October 28, 2025)</h2>
<h4>Added</h4>
<ul>
<li>Add <code>encoding</code> parameter to <code>Config</code> class <a
href="https://redirect.github.com/Kludex/starlette/pull/2996">#2996</a>.</li>
<li>Support multiple cookie headers in <code>Request.cookies</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/3029">#3029</a>.</li>
<li>Use <code>Literal</code> type for <code>WebSocketEndpoint</code>
encoding values <a
href="https://redirect.github.com/Kludex/starlette/pull/3027">#3027</a>.</li>
</ul>
<h4>Changed</h4>
<ul>
<li>Do not pollute exception context in <code>Middleware</code> when
using <code>BaseHTTPMiddleware</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/2976">#2976</a>.</li>
</ul>
<h2>0.48.0 (September 13, 2025)</h2>
<h4>Added</h4>
<ul>
<li>Add official Python 3.14 support <a
href="https://redirect.github.com/Kludex/starlette/pull/3013">#3013</a>.</li>
</ul>
<h4>Changed</h4>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Kludex/starlette/commit/4941b4a04993d087dea66e9287fe9472babee879"><code>4941b4a</code></a>
Version 0.50.0 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3063">#3063</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/a0499f60a6f13b8b42381d70bafc076b6ece4eee"><code>a0499f6</code></a>
Drop support for Python 3.9 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3061">#3061</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/de3ffecaeadd34612f71495374f5853edbda1bf2"><code>de3ffec</code></a>
Version 0.49.3 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3062">#3062</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/c4433960ccc07289e0963df94dc5c2746f07ca1a"><code>c443396</code></a>
Relax strictness on <code>Middleware</code> type (<a
href="https://redirect.github.com/Kludex/starlette/issues/3059">#3059</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/85bf0275fbf26f5a7fef539a03bebfeb125b9ea3"><code>85bf027</code></a>
Version 0.49.2 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3058">#3058</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/3d480dd7d5adf474d0736c67a2a3064e88226837"><code>3d480dd</code></a>
Ignore <code>if-modified-since</code> if <code>if-none-match</code> is
present (<a
href="https://redirect.github.com/Kludex/starlette/issues/3057">#3057</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/da0605243010715356be69693a524f2300011948"><code>da06052</code></a>
Bump the github-actions group with 3 updates (<a
href="https://redirect.github.com/Kludex/starlette/issues/3056">#3056</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/34caa9900f47b9ab5afffa5f4ee148a00940f622"><code>34caa99</code></a>
Add groups configuration for GitHub Actions (<a
href="https://redirect.github.com/Kludex/starlette/issues/3055">#3055</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/7e4b7428f273dbdc875dcd036d20804bcfc7b2ee"><code>7e4b742</code></a>
Version 0.49.1 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3047">#3047</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5"><code>4ea6e22</code></a>
Merge commit from fork</li>
<li>Additional commits viewable in <a
href="https://github.com/Kludex/starlette/compare/0.47.2...0.50.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `cryptography` from 45.0.5 to 46.0.3
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.3 - 2025-10-15</p>
<pre><code>
* Fixed compilation when using LibreSSL 4.2.0.
<p>.. _v46-0-2:</p>
<p>46.0.2 - 2025-09-30<br />
</code></pre></p>
<ul>
<li>Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.5.4.</li>
</ul>
<p>.. _v46-0-1:</p>
<p>46.0.1 - 2025-09-16</p>
<pre><code>
* Fixed an issue where users installing via ``pip`` on Python 3.14
development
  versions would not properly install a dependency.
* Fixed an issue building the free-threaded macOS 3.14 wheels.
<p>.. _v46-0-0:</p>
<p>46.0.0 - 2025-09-16<br />
</code></pre></p>
<ul>
<li><strong>BACKWARDS INCOMPATIBLE:</strong> Support for Python 3.7 has
been removed.</li>
<li>Support for OpenSSL &lt; 3.0 is deprecated and will be removed in
the next
release.</li>
<li>Support for <code>x86_64</code> macOS (including publishing wheels)
is deprecated
and will be removed in two releases. We will switch to publishing an
<code>arm64</code> only wheel for macOS.</li>
<li>Support for 32-bit Windows (including publishing wheels) is
deprecated
and will be removed in two releases. Users should move to a 64-bit
Python installation.</li>
<li>Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.5.3.</li>
<li>We now build <code>ppc64le</code> <code>manylinux</code> wheels and
publish them to PyPI.</li>
<li>We now build <code>win_arm64</code> (Windows on Arm) wheels and
publish them to PyPI.</li>
<li>Added support for free-threaded Python 3.14.</li>
<li>Removed the deprecated <code>get_attribute_for_oid</code> method on
:class:<code>~cryptography.x509.CertificateSigningRequest</code>. Users
should use
:meth:<code>~cryptography.x509.Attributes.get_attribute_for_oid</code>
instead.</li>
<li>Removed the deprecated <code>CAST5</code>, <code>SEED</code>,
<code>IDEA</code>, and <code>Blowfish</code>
classes from the cipher module. These are still available in
:doc:<code>/hazmat/decrepit/index</code>.</li>
<li>In X.509, when performing a PSS signature with a SHA-3 hash, it is
now
encoded with the official NIST SHA3 OID.</li>
</ul>
<p>.. _v45-0-7:</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pyca/cryptography/commit/c0af4dd7b75921bbe9f1d41a03dbd4b64a9e3403"><code>c0af4dd</code></a>
release 46.0.3 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13681">#13681</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/99efe5ad150a56efadafacaffd0e3ee319373904"><code>99efe5a</code></a>
bump version for 46.0.2 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13531">#13531</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/e735cfc27502320101c130335c556394a125ba52"><code>e735cfc</code></a>
release 46.0.1 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13450">#13450</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/4e457ffba43a6d87efc63c33041e2081438dd8a4"><code>4e457ff</code></a>
Explicitly specify python in mac uv build invocation (<a
href="https://redirect.github.com/pyca/cryptography/issues/13447">#13447</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/2726efdb6d67f1c90cf9c6062d9fe051965586f8"><code>2726efd</code></a>
Depend on CFFI 2.0.0 or newer on Python &gt; 3.8 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13448">#13448</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/62230623d183706632c0eb7822c96ac95e3710a8"><code>6223062</code></a>
release 46.0.0 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13446">#13446</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/563c4915b0931455706f761a4579c26698824eae"><code>563c491</code></a>
Update comment for pyopenssl-release tag (<a
href="https://redirect.github.com/pyca/cryptography/issues/13445">#13445</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/d2f6f7faced35b73277bc624ff496f8af696b172"><code>d2f6f7f</code></a>
Bump downstream dependencies in CI (<a
href="https://redirect.github.com/pyca/cryptography/issues/13439">#13439</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/e7ab02bd679d0b4f55d93486fe27e62554ef15d4"><code>e7ab02b</code></a>
we'll ship this with 3.5.3 why not (<a
href="https://redirect.github.com/pyca/cryptography/issues/13442">#13442</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/0b68a4bffb61202e4d4f5074cd30c2b9d15f429e"><code>0b68a4b</code></a>
Another pair of bump dependencies fix (<a
href="https://redirect.github.com/pyca/cryptography/issues/13444">#13444</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pyca/cryptography/compare/45.0.5...46.0.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `grpcio` from 1.74.0 to 1.76.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/grpc/grpc/releases">grpcio's
releases</a>.</em></p>
<blockquote>
<h2>Release v1.76.0</h2>
<p>This is release 1.76.0 (<a
href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">genuine</a>)
of gRPC Core.</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This release contains refinements, improvements, and bug fixes, with
highlights listed below.</p>
<h2>Core</h2>
<ul>
<li>Prioritize system CA over bundled CA. (<a
href="https://redirect.github.com/grpc/grpc/pull/40583">#40583</a>)</li>
<li>[event_engine] Introduce a event_engine_poller_for_python
experiment. (<a
href="https://redirect.github.com/grpc/grpc/pull/40243">#40243</a>)</li>
<li>[metrics] add grpc.lb.backend_service label. (<a
href="https://redirect.github.com/grpc/grpc/pull/40486">#40486</a>)</li>
</ul>
<h2>C#</h2>
<ul>
<li>[csharp tools] <a
href="https://redirect.github.com/grpc/grpc/issues/39374">#39374</a>
Grpc.Tools can't process file Suffix name with Upper character. (<a
href="https://redirect.github.com/grpc/grpc/pull/40072">#40072</a>)</li>
</ul>
<h2>Python</h2>
<ul>
<li>[Python] gRPC AsyncIO: Improve CompletionQueue polling performance.
(<a
href="https://redirect.github.com/grpc/grpc/pull/39993">#39993</a>)</li>
</ul>
<h2>Release v1.76.0-pre1</h2>
<p>This is a prerelease of gRPC Core 1.76.0 (genuine).</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This prerelease contains refinements, improvements, and bug
fixes.</p>
<h2>Release v1.75.1</h2>
<p>This is release gRPC Core 1.75.1 (gemini).</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This release contains refinements, improvements, and bug fixes.</p>
<h2>What's Changed</h2>
<h3>Python</h3>
<ul>
<li>Release grpcio wheels with Python 3.14 support (<a
href="https://redirect.github.com/grpc/grpc/issues/40403">#40403</a>)</li>
<li>Asyncio: fixes grpc shutdown race condition occurring during python
interpreter finalizations. (<a
href="https://redirect.github.com/grpc/grpc/issues/40447">#40447</a>)
<ul>
<li>This also addresses previously reported issues with empty error
message on Python interpreter exit (<code>Error in
sys.excepthook:</code>/<code>Original exception was:</code> empty): <a
href="https://redirect.github.com/grpc/grpc/issues/36655">#36655</a>, <a
href="https://redirect.github.com/grpc/grpc/issues/38679">#38679</a>, <a
href="https://redirect.github.com/grpc/grpc/issues/33342">#33342</a></li>
</ul>
</li>
<li>Python 3.14: preserve current behavior when using grpc.aio async
methods outside of a running event loop. (<a
href="https://redirect.github.com/grpc/grpc/issues/40750">#40750</a>)
<ul>
<li>Note: using async methods outside of a running event loop is <a
href="https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies">discouraged</a>
by Python, and <strong>will be deprecated in future gRPC
releases</strong>. Please use the <a
href="https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run">asyncio.run()</a>
function (or <a
href="https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner">asyncio.Runner</a>
for custom loop factories). For interactive mode, use dedicated <a
href="https://docs.python.org/3/library/asyncio.html#asyncio-cli">asyncio
REPL</a>: <code>python -m asyncio</code>.</li>
</ul>
</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1">https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/grpc/grpc/commit/f5ffb68d8a2fd603dff16287e90a4ac571e1fec6"><code>f5ffb68</code></a>
[Release] Bump version to 1.76.0 (on v1.76.x branch) (<a
href="https://redirect.github.com/grpc/grpc/issues/40925">#40925</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/ffd83794b3804739c0789096155833e302ac1270"><code>ffd8379</code></a>
[Release] Bump version to 1.76.0-pre1 (on v1.76.x branch) (<a
href="https://redirect.github.com/grpc/grpc/issues/40798">#40798</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/835d394034060002262ab4e404e552ac0393a1a1"><code>835d394</code></a>
[Release] Bump core version to 51.0.0 for upcoming release (<a
href="https://redirect.github.com/grpc/grpc/issues/40784">#40784</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/de6ce7f32b1bf254d2b4c04e8872b63284632fd3"><code>de6ce7f</code></a>
[PH2] Add files for goaway support (<a
href="https://redirect.github.com/grpc/grpc/issues/40786">#40786</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/f7dd7f4b4186049d104aa2c88ad4432f58c19ede"><code>f7dd7f4</code></a>
[PH2][Trivial][CleanUp]</li>
<li><a
href="https://github.com/grpc/grpc/commit/2d40a376c7ea72602fa7bc62606324b1ff14c44f"><code>2d40a37</code></a>
[PH2][ChannelZ][ZTrace][Skeleton]</li>
<li><a
href="https://github.com/grpc/grpc/commit/83acb278bef565d8d46d6e19582eaacc86f737a3"><code>83acb27</code></a>
[build] Add Missing Dependencies for reflection_proto in Preparation for
Enab...</li>
<li><a
href="https://github.com/grpc/grpc/commit/abfe8a29d31a8ab9ff6cdda11cdfa2813cb59632"><code>abfe8a2</code></a>
[PH2] Stream list represents streams open for reads.</li>
<li><a
href="https://github.com/grpc/grpc/commit/c65d8de800aaa907b45cee54ebcd29d5b556d3ca"><code>c65d8de</code></a>
[PH2][Expt] Fix the experiment expiry</li>
<li><a
href="https://github.com/grpc/grpc/commit/755d025f16d20641155e89ecc46777e94e9e172d"><code>755d025</code></a>
Fix latent_see_test flakiness</li>
<li>Additional commits viewable in <a
href="https://github.com/grpc/grpc/compare/v1.74.0...v1.76.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `grpcio-tools` from 1.71.2 to 1.74.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/grpc/grpc/releases">grpcio-tools's
releases</a>.</em></p>
<blockquote>
<h2>Release v1.74.0</h2>
<p>This is release 1.74.0 (<a
href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">gee</a>)
of gRPC Core.</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This release contains refinements, improvements, and bug fixes, with
highlights listed below.</p>
<h2>Core</h2>
<ul>
<li>[OTel C++, Posix EE] Plumb TCP write timestamps and metrics to OTel
tracers. (<a
href="https://redirect.github.com/grpc/grpc/pull/39946">#39946</a>)</li>
<li>[event_engine] Implement fork support in Posix Event Engine. (<a
href="https://redirect.github.com/grpc/grpc/pull/38980">#38980</a>)</li>
<li>[http2] Fix GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES for when BDP is
disabled. (<a
href="https://redirect.github.com/grpc/grpc/pull/39585">#39585</a>)</li>
</ul>
<h2>Objective-C</h2>
<ul>
<li>[dep] Upgrade Protobuf Version 31.1. (<a
href="https://redirect.github.com/grpc/grpc/pull/39916">#39916</a>)</li>
</ul>
<h2>PHP</h2>
<ul>
<li>[PHP] Fully qualify stdClass with global namespace. (<a
href="https://redirect.github.com/grpc/grpc/pull/39996">#39996</a>)</li>
<li>[php] Fix PHPDoc so that UnaryCall defines the proper return type.
(<a
href="https://redirect.github.com/grpc/grpc/pull/37563">#37563</a>)</li>
<li>fix typing of nullable parameters. (<a
href="https://redirect.github.com/grpc/grpc/pull/39199">#39199</a>)</li>
</ul>
<h2>Python</h2>
<ul>
<li>[EventEngine] Fix the issue with gRPC Python Client not reconnecting
in certain situations: <a
href="https://redirect.github.com/grpc/grpc/issues/38290">#38290</a>, <a
href="https://redirect.github.com/grpc/grpc/issues/39113">#39113</a>, <a
href="https://redirect.github.com/grpc/grpc/issues/39631">#39631</a>.
(<a
href="https://redirect.github.com/grpc/grpc/issues/39894">#39894</a>)</li>
<li>Fix gRPC Python docs website layout - use spaces optimally. (<a
href="https://redirect.github.com/grpc/grpc/pull/40073">#40073</a>)</li>
</ul>
<h2>Ruby</h2>
<ul>
<li>[Ruby] Add rubygems support for linux-gnu and linux-musl platforms .
(<a
href="https://redirect.github.com/grpc/grpc/pull/40174">#40174</a>)</li>
<li>[ruby] enable EE fork support. (<a
href="https://redirect.github.com/grpc/grpc/pull/39786">#39786</a>)</li>
<li>[ruby] Return nil for c functions expected to return a VALUE. (<a
href="https://redirect.github.com/grpc/grpc/pull/39214">#39214</a>)</li>
<li>[ruby] remove connectivity state watch thread, fix cancellations
from spurious signals. (<a
href="https://redirect.github.com/grpc/grpc/pull/39409">#39409</a>)</li>
<li>[ruby] Drop Ruby 3.0 support. (<a
href="https://redirect.github.com/grpc/grpc/pull/39607">#39607</a>)</li>
</ul>
<h2>Release v1.74.0-pre2</h2>
<p>This is a prerelease of gRPC Core 1.74.0 (gee).</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This prerelease contains refinements, improvements, and bug
fixes.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/grpc/grpc/commit/3e7a4d52d257990fa5b9d80f69f4a591178d9d7c"><code>3e7a4d5</code></a>
[Release] Bump version to 1.74.0 (on v1.74.x branch) (<a
href="https://redirect.github.com/grpc/grpc/issues/40290">#40290</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/b2d32db3e1a6221c22d4a008930e1e54e45f1930"><code>b2d32db</code></a>
[Backport][v1.74.x][Python] Fix for windows distribtest (<a
href="https://redirect.github.com/grpc/grpc/issues/40241">#40241</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/a7d80a7e90729849b052c7f36456514dcd1d6752"><code>a7d80a7</code></a>
[ruby] bump timeout for ruby artifact build on 1.74.x branch (<a
href="https://redirect.github.com/grpc/grpc/issues/40230">#40230</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/2a6bf865d7000fa5e415a9e5685b2fd612b9ccc7"><code>2a6bf86</code></a>
[Release] Bump version to 1.74.0-pre2 (on v1.74.x branch) (<a
href="https://redirect.github.com/grpc/grpc/issues/40216">#40216</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/c8dcda63a8c1f91224c75e4311f847db5f42745a"><code>c8dcda6</code></a>
[Backport-to-1.74.x] Added missing useful to cf_event_engine (<a
href="https://redirect.github.com/grpc/grpc/issues/40210">#40210</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/1c64908e6b68ea0dabf62ca6d3af8a8958e6c970"><code>1c64908</code></a>
[Ruby] Add rubygems support for linux-gnu and linux-musl platforms (<a
href="https://redirect.github.com/grpc/grpc/issues/40174">#40174</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/08648d377dfd8ada795a7ad8068b48dcb24bd328"><code>08648d3</code></a>
[Backport][v1.74.x][event_engine] Fix race conditions in the timer
manager sh...</li>
<li><a
href="https://github.com/grpc/grpc/commit/5d59f8e8517bb6a5f2865be63a06b2976b105…
# Description

Support disabling OTEL instrumentation via the a2a-sdk using an
environment variable `OTEL_A2A_SDK_INSTRUMENTATION_ENABLED`

Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make
sure it goes smoothly:

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Fixes #604  🦕

Release-As: 0.3.23
# Description

Based on
[`unit-tests.yml`](https://github.com/a2aproject/a2a-python/blob/main/.github/workflows/unit-tests.yml).

Supports:
- `--debug` to start DB(s) without running tests (for selective running
in IDE)
- `--mysql`, `--postgres` to use only one DB
- `--stop` to stop after running with `--debug`

From project root:

```bash
./scripts/run_integration_tests.sh
```

Re #652 to troubleshoot failures
# Description

Do not use `NULLS LAST` which is not available in MySQL, coalesce nulls
to empty strings which will appear last in descending ordering (there
are tests for this behavior already, however CI wasn't enabled for this
branch).

Currently `NULLS LAST` fails MySQL tests:

```
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULLS LAST, tasks.id DESC \n LIMIT 51' at line 3")
```
([actions
run](https://github.com/a2aproject/a2a-python/actions/runs/21520017047/job/62008309612?pr=651))

Enable tests run against `1.0-dev` to prevent it in the future.

Re #511 
Fixes #652 

---
Mark as "refactor" for release please as it's a fix for a non-released
feature, hence shouldn't get into a changelog.

BEGIN_COMMIT_OVERRIDE
refactor: use MySQL compatible syntax in list tasks
END_COMMIT_OVERRIDE
# Conflicts:
#	CHANGELOG.md
#	tests/client/transports/test_rest_client.py
#	tests/utils/test_proto_utils.py
# Description

Words from
2698cc0
pushed to main branch directly used to fail #658.

Ignoring URLs according to the
[docs](https://docs.check-spelling.dev/Configuration-Examples:-patterns).

The fix was tested in the affected PR:
[before](https://github.com/a2aproject/a2a-python/actions/runs/21582994306),
[after](https://github.com/a2aproject/a2a-python/actions/runs/21584577892).
dependabot bot and others added 13 commits February 11, 2026 08:00
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.4
to 46.0.5.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.5 - 2026-02-10</p>
<pre><code>
* An attacker could create a malicious public key that reveals portions
of your
private key when using certain uncommon elliptic curves (binary curves).
This version now includes additional security checks to prevent this
attack.
This issue only affects binary elliptic curves, which are rarely used in
real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab
and
Atuin Automated Vulnerability Discovery Engine** for reporting the
issue.
  **CVE-2026-26007**
* Support for ``SECT*`` binary elliptic curves is deprecated and will be
  removed in the next release.
<p>.. v46-0-4:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pyca/cryptography/commit/06e120e682cb200e3f7050c02f0bcdac90c4c6ad"><code>06e120e</code></a>
bump version for 46.0.5 release (<a
href="https://redirect.github.com/pyca/cryptography/issues/14289">#14289</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/0eebb9dbb6343d9bc1d91e5a2482ed4e054a6d8c"><code>0eebb9d</code></a>
EC check key on cofactor &gt; 1 (<a
href="https://redirect.github.com/pyca/cryptography/issues/14287">#14287</a>)</li>
<li><a
href="https://github.com/pyca/cryptography/commit/bedf6e186b814f69a3f54f51252c23a71d44ed2e"><code>bedf6e1</code></a>
fix openssl version on 46 branch (<a
href="https://redirect.github.com/pyca/cryptography/issues/14220">#14220</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.4...46.0.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography&package-manager=uv&previous-version=46.0.4&new-version=46.0.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/a2aproject/a2a-python/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This PR fixes two issues related to the grpc support:

1. The extension headers key in the metadata are supposed to be lower
key
([ref](https://github.com/grpc/grpc/blob/ce463633548e47c05343bc1243f9ea95b700a908/src/core/lib/surface/validate_metadata.cc#L99))
2. Invokes correctly the `servicer_context.invocation_metadata` as a
[method](https://grpc.github.io/grpc/python/grpc_asyncio.html#grpc.aio.ServicerContext.invocation_metadata)
instead of as a property

For each of these issues was respectively opened a community PR (#635 ,
#673). To speed up the integration of these changes, this new PR has
been created to integrate both changes at the same time.

Fixes #656

---------

Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Co-authored-by: Ivan Shymko <ishymko@google.com>
# Description

Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make
sure it goes smoothly:

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Fixes #674 🦕

## Problem

`ClientTransport` defines an abstract `close()` method but does not
implement `__aenter__`/`__aexit__`. This means transports cannot be used
with `async with`, which is the idiomatic Python pattern for managing
async resources. If an exception occurs between creating a transport and
calling `close()`, the underlying connection (e.g., gRPC channel, httpx
client) is never cleaned up:

```python
transport = GrpcTransport(channel=channel, agent_card=agent_card)
result = await transport.send_message(params)  # if this raises, close() is never called
await transport.close()
```

## Fix

Added `__aenter__` and `__aexit__` methods to `ClientTransport` in
`src/a2a/client/transports/base.py`:

`__aenter__` returns `self`.
`__aexit__` awaits `close()`.

This enables the standard async context manager pattern on all transport
implementations (`GrpcTransport`, `RestTransport`, `JsonRpcTransport`):

```python
async with GrpcTransport(channel=channel, agent_card=agent_card) as transport:
    result = await transport.send_message(params)
    # close() called automatically, even on exceptions
```

This is a non-breaking, additive change. Calling `close()` manually or
via `try/finally` continues to work exactly as before.

## Test

Tests were added to `tests/client/test_base_client.py` since it already
imports and mocks `ClientTransport`. Happy to move them to a dedicated
file if maintainers prefer.

## Note

As mentioned in #674, the same pattern could also be applied to
`BaseClient`, which wraps `ClientTransport` and also exposes a `close()`
method. I've kept this PR scoped to `ClientTransport` only. Happy to
extend it to `BaseClient` in this same PR or a follow-up if maintainers
prefer.

Release-As: 0.3.23

---------

Co-authored-by: Ivan Shymko <vana.shimko@gmail.com>
[`Metadata` is a
`Collection`](https://grpc.github.io/grpc/python/_modules/grpc/aio/_metadata.html)
so iterating over key-value tuples is possible, there are existing tests
in `test_grpc_handler.py`.

Re #676
…ith server errors (#683)

# Description

Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make
sure it goes smoothly:

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Fixes #679 🦕

## Problem

Server-side exceptions (`ServerError`) implement `__repr__` for
developer-friendly debugging output, but client-side exceptions
(`A2AClientHTTPError`, `A2AClientJSONError`, `A2AClientTimeoutError`,
`A2AClientInvalidArgsError`, `A2AClientInvalidStateError`,
`A2AClientJSONRPCError`) do not. When these exceptions appear during
debugging, they show minimal information via the default
`Exception.__repr__`, which only wraps `str()` output and loses
structured attributes:

```python
>>> repr(A2AClientHTTPError(404, 'Not Found'))
"A2AClientHTTPError('HTTP Error 404: Not Found')"  # Loses status_code as a distinct attribute
````

For `A2AClientJSONRPCError`, the situation is worse — `repr` flattens
the underlying `JSONRPCError` object into a single string, losing
structured access to the error code and data during inspection.

## Fix

Added `__repr__` methods to all client exception classes in
`src/a2a/client/errors.py`, following the same pattern already
established by `ServerError.__repr__` in `src/a2a/utils/errors.py`:

```python
>>> repr(A2AClientHTTPError(404, 'Not Found'))
"A2AClientHTTPError(status_code=404, message='Not Found')"
````

`A2AClientJSONError`, `A2AClientTimeoutError`,
`A2AClientInvalidArgsError`, `A2AClientInvalidStateError`: Expose
message as a `keyword` argument.

```python
>>> repr(A2AClientTimeoutError('Connection timed out after 30s'))
"A2AClientTimeoutError(message='Connection timed out after 30s')"
```

`A2AClientJSONRPCError`: Delegates to `repr()` of the inner
`JSONRPCError` object, preserving structured error code and data.

```python
>>> repr(A2AClientJSONRPCError(response))
"A2AClientJSONRPCError(JSONRPCError(code=-32600, message='Invalid Request', data=None))"
```

This change does not alter traceback formatting, `__str__` output,
exception hierarchy, catching behavior, or any existing error handling
logic. It is purely additive and intended to improve debuggability via
`repr()` in REPLs, logs, and structured logging contexts.

## Test

Tests were added directly into the existing suite at
`tests/client/test_errors.py`, keeping the same structure and
conventions already in place.

No existing test was modified or removed — all additions are purely
additive. Happy to adapt the test approach based on maintainer feedback.

Release-As: 0.3.23

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
#614)

This PR addresses potential deadlocks and resource leaks in the
DefaultRequestHandler when agent execution fails, particularly in
non-streaming scenarios.

Fixes #609  🦕

---------

Co-authored-by: Łukasz Bobiński <bobinski@google.com>
Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Co-authored-by: Ivan Shymko <ishymko@google.com>
This reverts commit 40613ed.

Should be merged without squashing
# Description

Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make
sure it goes smoothly:

- [x] Follow the [`CONTRIBUTING`
Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md).
- [x] Make your Pull Request title in the
<https://www.conventionalcommits.org/> specification.
- Important Prefixes for
[release-please](https://github.com/googleapis/release-please):
- `fix:` which represents bug fixes, and correlates to a
[SemVer](https://semver.org/) patch.
- `feat:` represents a new feature, and correlates to a SemVer minor.
- `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking
change (indicated by the `!`) and will result in a SemVer major.
- [x] Ensure the tests and linter pass (Run `bash scripts/format.sh`
from the repository root to format)
- [x] Appropriate docs were updated (if necessary)

Follow-up to #682, as suggested by @ishymko in the
[review](#682 (review)).

This extends the async context manager pattern to `BaseClient`, which
wraps `ClientTransport` and also exposes a `close()` method.

Fixes #674 🦕

## Problem

`BaseClient` delegates resource cleanup to its underlying
`ClientTransport` via `close()`, but doesn't implement
`__aenter__`/`__aexit__`. This means clients cannot be used with `async
with`, leading to the same resource leak risk that #682 solved for
transports:

```python
client = BaseClient(card=card, config=config, transport=transport, consumers=[], middleware=[])
result = await client.send_message(msg)  # if this raises, close() is never called
await client.close()
```

## Fix

Added `__aenter__` and `__aexit__` methods to `BaseClient` in
`src/a2a/client/base_client.py`:

`__aenter__` returns `self`
`__aexit__ `awaits `close()`

This enables the standard async context manager pattern:

```python
async with BaseClient(card=card, config=config, transport=transport, consumers=[], middleware=[]) as client:
    async for event in client.send_message(msg):
        ...
    # close() called automatically, even on exceptions
```

This is a non-breaking, additive change. Calling `close()` manually or
via `try/finally` continues to work exactly as before.

## Test

Tests were added to `tests/client/test_base_client.py`, following the
same approach as the `ClientTransport` tests from #682.

Release-As: 0.3.23
…PC clients (#690)

This PR standardizes timeout error handling across the JSON-RPC and REST
clients.

Previously, only the JSON-RPC client (in non-streaming mode) handled
`ReadTimeout` exceptions, while streaming calls and the REST client
catch them incorrectly.
Updating both `JsonRpcTransport` and `RestTransport` to catch the base
httpx.TimeoutException, all timeout types (Read, Connect, Write, Pool)
are consistently caught and wrapped in A2AClientTimeoutError.

This ensures consistent behavior for API consumers regardless of the
transport (REST vs JSON-RPC) or mode (Streaming vs Non-Streaming) being
used, preventing generic errors when network timeouts occur.
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @ishymko, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a significant refactoring of the A2A Python SDK by transitioning its internal data models from Pydantic to Protocol Buffer messages. This change aims to enhance type safety, improve performance, and streamline the development workflow by leveraging Proto's robust serialization and deserialization capabilities. The update also simplifies the client-side API by deprecating older client classes in favor of a more flexible factory pattern, and integrates automated generation of Python types and API documentation from the Proto definitions.

Highlights

  • Protocol Buffer Migration: The core A2A types have been migrated from Pydantic models to Protocol Buffer (Proto) messages, standardizing data structures across the SDK.
  • Unified Client Approach: Legacy client implementations (A2AClient and A2AGrpcClient) have been removed, consolidating client creation under a unified ClientFactory that dynamically selects the appropriate transport.
  • Build Process Automation: The build process now automatically generates Python Proto types and an OpenAPI specification (a2a.json) directly from the Proto definitions, ensuring consistency and reducing manual maintenance.
  • API and Method Signature Updates: Client and server components, including transports, request handlers, and middleware, have been updated to reflect the new Proto-based type signatures and field access patterns.
  • Error Handling Refinement: Error handling mechanisms have been updated to align with the new Proto types and JSON-RPC error specifications, improving clarity and consistency in error responses.
Changelog
  • .git-blame-ignore-revs
    • Updated the template URL from 'master' to 'main' branch.
  • .github/actions/spelling/allow.txt
    • Added new words to the spelling allow list, including terms related to A2A, FastAPI, JWT, OpenAPI, and Protocol Buffers.
  • .github/actions/spelling/excludes.txt
    • Added new exclusion patterns for generated Proto files (src/a2a/types/) and the a2a.json OpenAPI specification.
  • .gitignore
    • Added src/a2a/types/a2a.json and docker-compose.yaml to the ignore list.
  • .pre-commit-config.yaml
    • Removed the pre-commit configuration file.
  • CODE_OF_CONDUCT.md
    • Updated a URL reference from 'master' to 'main' branch.
  • buf.gen.yaml
    • Updated the subdir for input from specification/grpc to specification.
    • Changed the output directory for generated Python types from src/a2a/grpc to src/a2a/types.
    • Added a new plugin to generate an OpenAPI v2 specification (a2a.swagger.json).
  • pyproject.toml
    • Added hatch-build-scripts to the build requirements.
    • Configured build hooks to generate a2a.json and execute scripts/gen_proto.sh.
    • Added json-rpc and googleapis-common-protos to dependencies.
    • Removed datamodel-code-generator from dev dependencies.
    • Added PyJWT to dev dependencies.
    • Updated mypy, ruff, and coverage exclusion patterns to target src/a2a/types instead of src/a2a/grpc.
    • Added filterwarnings for SQLAlchemy and ResourceWarnings in pytest configuration.
  • scripts/checkout_experimental_types.sh
    • Removed the script for checking out experimental types.
  • scripts/gen_proto.sh
    • Added a new script to generate protobuf code and OpenAPI spec, and fix imports in generated gRPC files.
  • scripts/generate_types.sh
    • Removed the script for generating types.
  • scripts/grpc_gen_post_processor.py
    • Removed the gRPC generation post-processor script.
  • src/a2a/client/init.py
    • Removed imports and __all__ entries for A2AClient and A2AGrpcClient.
  • src/a2a/client/auth/interceptor.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard and security scheme types.
    • Adjusted logic to use Proto message field accessors (HasField) and properties (security_requirements) instead of Pydantic model methods.
  • src/a2a/client/base_client.py
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types.
    • Changed type hints for request and response objects to reflect Proto message types.
    • Adjusted send_message streaming logic to process StreamResponse objects.
    • Renamed resubscribe method to subscribe and get_card to get_extended_agent_card.
  • src/a2a/client/card_resolver.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
    • Replaced Pydantic model_validate with google.protobuf.json_format.ParseDict for parsing agent card data.
    • Updated error handling to catch google.protobuf.json_format.ParseError.
  • src/a2a/client/client.py
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types.
    • Changed ClientConfig.supported_transports to supported_protocol_bindings.
    • Updated ClientEvent type alias to reflect Proto StreamResponse.
    • Adjusted method signatures to use Proto message types for requests and responses.
  • src/a2a/client/client_factory.py
    • Updated imports to use a2a.types.a2a_pb2 and constants from a2a.utils.constants.
    • Adjusted logic for selecting transport based on supported_interfaces instead of preferred_transport and additional_interfaces.
    • Updated minimal_agent_card creation to align with new AgentCard structure.
  • src/a2a/client/client_task_manager.py
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types.
    • Removed Event import from a2a.server.events.event_queue.
    • Adjusted process method to handle StreamResponse objects and Proto message field checks (HasField).
    • Updated update_with_message to use Proto message methods (HasField, ClearField).
  • src/a2a/client/errors.py
    • Removed JSONRPCErrorResponse import.
    • Updated A2AClientJSONRPCError to accept a dict[str, Any] for error details.
  • src/a2a/client/helpers.py
    • Updated imports to use a2a.types.a2a_pb2 for Message, Part, and Role.
    • Adjusted create_text_message_object to use Proto Part and Role enums.
  • src/a2a/client/legacy.py
    • Removed the legacy a2a.client.legacy.py file.
  • src/a2a/client/legacy_grpc.py
    • Removed the legacy a2a.client.legacy_grpc.py file.
  • src/a2a/client/middleware.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
  • src/a2a/client/optionals.py
    • Updated grpc.aio.Channel import type hint.
  • src/a2a/client/transports/base.py
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types.
    • Adjusted method signatures to use Proto message types for requests and responses.
    • Renamed resubscribe method to subscribe and get_card to get_extended_agent_card.
  • src/a2a/client/transports/grpc.py
    • Updated grpc imports to include type: ignore[reportMissingModuleSource].
    • Changed imports from a2a.grpc to a2a.types.
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types.
    • Adjusted method signatures to use Proto message types directly for requests and responses.
    • Removed proto_utils conversions as methods now directly handle Proto messages.
  • src/a2a/client/transports/jsonrpc.py
    • Updated imports to use google.protobuf.json_format and jsonrpc.jsonrpc2.
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types.
    • Adjusted method signatures to use Proto message types for requests and responses.
    • Updated JSON-RPC request/response handling to use json_format.MessageToDict and ParseDict.
  • src/a2a/client/transports/rest.py
    • Updated imports to use google.protobuf.json_format and google.protobuf.message.Message.
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types and constants from a2a.utils.constants.
    • Adjusted method signatures to use Proto message types for requests and responses.
    • Updated JSON/REST request/response handling to use MessageToDict and ParseDict.
  • src/a2a/extensions/common.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard and AgentExtension.
  • src/a2a/grpc/a2a_pb2.py
    • Removed the generated a2a_pb2.py file.
  • src/a2a/server/agent_execution/agent_executor.py
    • Updated TaskState.canceled to TaskState.TASK_STATE_CANCELED for Proto enum consistency.
  • src/a2a/server/agent_execution/context.py
    • Updated imports to use a2a.types.a2a_pb2 and error types from a2a.utils.errors.
    • Adjusted type hints for request objects to SendMessageRequest.
    • Updated metadata handling to convert Proto Struct to Python dict.
  • src/a2a/server/agent_execution/request_context_builder.py
    • Updated imports to use a2a.types.a2a_pb2 for SendMessageRequest and Task.
  • src/a2a/server/agent_execution/simple_request_context_builder.py
    • Updated imports to use a2a.types.a2a_pb2 for SendMessageRequest and Task.
  • src/a2a/server/apps/jsonrpc/fastapi_app.py
    • Added imports for importlib.resources and json.
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
    • Modified openapi method to load a2a.json schema from generated types if available, falling back to auto-generation.
  • src/a2a/server/apps/jsonrpc/jsonrpc_app.py
    • Added imports for google.protobuf.json_format and jsonrpc.jsonrpc2.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.server.jsonrpc_models for JSON-RPC error models.
    • Updated METHOD_TO_MODEL mapping to use Proto message types directly.
    • Refactored error and success response building to use new helper functions and Proto message serialization.
  • src/a2a/server/apps/jsonrpc/starlette_app.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
  • src/a2a/server/apps/rest/fastapi_app.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
  • src/a2a/server/apps/rest/rest_adapter.py
    • Added google.protobuf.json_format.MessageToDict import.
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard and error types from a2a.utils.errors.
    • Adjusted serialization logic to use MessageToDict for agent card responses.
  • src/a2a/server/events/event_consumer.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and error types from a2a.utils.errors.
    • Updated is_final_event logic to use Proto enum values (e.g., TaskState.TASK_STATE_COMPLETED).
  • src/a2a/server/events/event_queue.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
  • src/a2a/server/jsonrpc_models.py
    • Added a new file defining Pydantic models for standard JSON-RPC 2.0 error types.
  • src/a2a/server/models.py
    • Added imports for google.protobuf.json_format and google.protobuf.message.Message.
    • Updated PydanticType and PydanticListType to handle serialization and deserialization of Protocol Buffer messages.
    • Adjusted _to_orm and _from_orm methods for Proto message serialization.
  • src/a2a/server/request_handlers/default_request_handler.py
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types and error types from a2a.utils.errors.
    • Updated TERMINAL_TASK_STATES to use Proto enum values.
    • Adjusted method signatures and logic to use Proto message types directly for requests and responses.
  • src/a2a/server/request_handlers/grpc_handler.py
    • Updated grpc imports to include type: ignore[reportMissingModuleSource].
    • Changed imports from a2a.grpc to a2a.types.
    • Updated imports to use a2a.types.a2a_pb2 and a2a.server.jsonrpc_models.
    • Adjusted method signatures and logic to use Proto message types directly for requests and responses.
  • src/a2a/server/request_handlers/jsonrpc_handler.py
    • Updated imports to use google.protobuf.json_format and jsonrpc.jsonrpc2.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.server.jsonrpc_models for JSON-RPC error models.
    • Refactored error and success response building to use new helper functions and Proto message serialization.
  • src/a2a/server/request_handlers/request_handler.py
    • Updated imports to use a2a.types.a2a_pb2 for all A2A types and error types from a2a.utils.errors.
    • Adjusted method signatures to use Proto message types for requests and responses.
  • src/a2a/server/request_handlers/response_helpers.py
    • Updated imports to use google.protobuf.json_format and jsonrpc.jsonrpc2.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.server.jsonrpc_models for JSON-RPC error models.
    • Refactored error and success response building to use new helper functions and Proto message serialization.
  • src/a2a/server/request_handlers/rest_handler.py
    • Updated imports to use google.protobuf.json_format.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and error types from a2a.utils.errors.
    • Adjusted method signatures and serialization logic to use Proto message types directly for requests and responses.
  • src/a2a/server/tasks/base_push_notification_sender.py
    • Added google.protobuf.json_format.MessageToDict import.
    • Updated imports to use a2a.types.a2a_pb2 for PushNotificationConfig, StreamResponse, and Task.
    • Adjusted JSON payload for post request to send a StreamResponse.
  • src/a2a/server/tasks/database_push_notification_config_store.py
    • Updated imports to use google.protobuf.json_format.
    • Updated imports to use a2a.types.a2a_pb2 for PushNotificationConfig.
    • Adjusted serialization/deserialization logic for Proto messages.
  • src/a2a/server/tasks/database_task_store.py
    • Added google.protobuf.json_format.MessageToDict import.
    • Updated imports to use a2a.types.a2a_pb2 for ListTasksRequest, ListTasksResponse, and Task.
    • Adjusted serialization/deserialization logic for Proto messages and filtering logic for Proto message fields.
  • src/a2a/server/tasks/inmemory_push_notification_config_store.py
    • Updated imports to use a2a.types.a2a_pb2 for PushNotificationConfig.
  • src/a2a/server/tasks/inmemory_task_store.py
    • Updated imports to use a2a.types.a2a_pb2 for ListTasksRequest, ListTasksResponse, and Task.
    • Adjusted filtering logic for Proto message fields.
  • src/a2a/server/tasks/push_notification_config_store.py
    • Updated imports to use a2a.types.a2a_pb2 for PushNotificationConfig.
  • src/a2a/server/tasks/push_notification_sender.py
    • Updated imports to use a2a.types.a2a_pb2 for Task.
  • src/a2a/server/tasks/result_aggregator.py
    • Updated imports to use a2a.types.a2a_pb2 for Message, Task, TaskState, and TaskStatusUpdateEvent.
    • Updated is_auth_required logic to use Proto enum values.
  • src/a2a/server/tasks/task_manager.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and error types from a2a.utils.errors.
    • Adjusted task status and history update logic for Proto messages.
  • src/a2a/server/tasks/task_store.py
    • Updated imports to use a2a.types.a2a_pb2 for ListTasksRequest, ListTasksResponse, and Task.
  • src/a2a/server/tasks/task_updater.py
    • Added google.protobuf.timestamp_pb2.Timestamp import.
    • Updated imports to use a2a.types.a2a_pb2 for Artifact, Message, Part, Role, TaskState, TaskStatus, and TaskStatusUpdateEvent.
    • Adjusted task status update logic for Proto messages.
  • src/a2a/types.py
    • Removed the Pydantic-based a2a.types.py file.
  • src/a2a/types/init.py
    • Added a new __init__.py file to re-export Proto-generated types and SDK-specific error types.
  • src/a2a/types/a2a_pb2.py
    • Added the new Proto-generated Python code file.
  • src/a2a/types/a2a_pb2.pyi
    • Renamed from src/a2a/grpc/a2a_pb2.pyi.
    • Updated TaskState.TASK_STATE_CANCELLED to TASK_STATE_CANCELED.
  • src/a2a/types/a2a_pb2_grpc.py
    • Renamed from src/a2a/grpc/a2a_pb2_grpc.py.
    • Updated method names from TaskSubscription to SubscribeToTask and GetAgentCard to GetExtendedAgentCard.
  • src/a2a/utils/init.py
    • Added proto_utils import.
    • Re-exported new constants for transport protocols.
  • src/a2a/utils/artifact.py
    • Updated imports to use a2a.types.a2a_pb2 for Artifact and Part, and google.protobuf.struct_pb2 for Struct and Value.
    • Adjusted new_text_artifact and new_data_artifact to use Proto Part and Value types.
  • src/a2a/utils/constants.py
    • Added new constants for transport protocols (TRANSPORT_JSONRPC, TRANSPORT_HTTP_JSON, TRANSPORT_GRPC) and JSONRPC error codes.
  • src/a2a/utils/error_handlers.py
    • Updated imports to use a2a.server.jsonrpc_models and a2a.utils.errors.
    • Adjusted error handling logic to work with new error types.
  • src/a2a/utils/errors.py
    • Refactored error classes to inherit from a base A2AError and removed Pydantic BaseModel inheritance.
  • src/a2a/utils/helpers.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and google.protobuf.json_format.
    • Adjusted create_task_obj, append_artifact_to_task, build_text_artifact, and canonicalize_agent_card for Proto messages.
  • src/a2a/utils/message.py
    • Updated imports to use a2a.types.a2a_pb2 for Message, Part, and Role.
    • Adjusted new_agent_text_message and new_agent_parts_message for Proto Part and Role types.
  • src/a2a/utils/parts.py
    • Updated imports to use a2a.types.a2a_pb2 for Part and google.protobuf.json_format.
    • Adjusted get_text_parts, get_data_parts, and get_file_parts for Proto Part types.
  • src/a2a/utils/proto_utils.py
    • Refactored to remove Pydantic-to-Proto conversion logic.
    • Added to_stream_response helper function for converting internal events to StreamResponse Proto messages.
  • src/a2a/utils/signing.py
    • Adjusted agent_card_signer to append to agent_card.signatures directly.
  • src/a2a/utils/task.py
    • Updated imports to use a2a.types.a2a_pb2 for Artifact, Message, Part, Task, TaskState, and TaskStatus.
    • Adjusted new_task, completed_task, and apply_history_length for Proto messages.
  • src/a2a/utils/telemetry.py
    • Updated opentelemetry imports for better type hinting.
  • tests/README.md
    • Corrected a typo in the README file.
  • tests/client/test_auth_middleware.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.utils.constants for TransportProtocol.
    • Adjusted build_success_response and build_message for Proto messages.
    • Updated AuthTestCase to use Proto types and wrap_security_scheme helper.
  • tests/client/test_base_client.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
    • Adjusted sample_agent_card, sample_message, and test_send_message methods for Proto messages.
  • tests/client/test_card_resolver.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
    • Removed Pydantic model_validate calls, as ParseDict is now used directly.
    • Adjusted valid_agent_card_data for Proto structure.
  • tests/client/test_client_factory.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.utils.constants for TransportProtocol.
    • Adjusted base_agent_card and transport selection logic for Proto messages.
  • tests/client/test_client_task_manager.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/client/test_errors.py
    • Updated imports to use jsonrpc.jsonrpc2 for JSONRPC20Response.
    • Adjusted A2AClientJSONRPCError initialization to accept a dictionary.
  • tests/client/test_legacy_client.py
    • Removed the legacy client test file.
  • tests/client/test_middleware.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
  • tests/client/test_optionals.py
    • Updated grpc.aio.Channel import type hint to use type: ignore[reportMissingModuleSource].
  • tests/client/transports/test_grpc_client.py
    • Updated grpc imports to include type: ignore[reportMissingModuleSource].
    • Changed imports from a2a.grpc to a2a.types.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/client/transports/test_jsonrpc_client.py
    • Updated imports to use google.protobuf.json_format and uuid.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/client/transports/test_rest_client.py
    • Updated imports to use google.protobuf.json_format.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.utils.constants for TRANSPORT_HTTP_JSON.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/e2e/init.py
    • Added new __init__.py file for e2e tests package.
  • tests/e2e/push_notifications/init.py
    • Added new __init__.py file for push notifications e2e tests package.
  • tests/e2e/push_notifications/agent_app.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.types for InvalidParamsError.
    • Adjusted test_agent_card and invoke methods for Proto messages.
  • tests/e2e/push_notifications/notifications_app.py
    • Added imports for google.protobuf.json_format.
    • Updated imports to use a2a.types.a2a_pb2 for StreamResponse and Task.
    • Adjusted Notification model and add_notification method for Proto messages.
  • tests/e2e/push_notifications/test_default_push_notification_support.py
    • Updated imports to use relative paths for local modules.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.utils.constants for TransportProtocol.
    • Adjusted a2a_client initialization and updated assertions for Proto messages.
  • tests/e2e/push_notifications/utils.py
    • Updated multiprocessing import to use multiprocessing.get_context for cross-platform compatibility.
  • tests/extensions/test_common.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard and AgentExtension.
    • Adjusted test_find_extension_by_uri for Proto messages.
  • tests/integration/test_client_server_integration.py
    • Updated imports to use google.protobuf.json_format.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.utils.constants for transport protocols.
    • Adjusted test constants and methods for Proto messages.
  • tests/server/agent_execution/test_context.py
    • Updated imports to use a2a.types.a2a_pb2 for Message, SendMessageRequest, and Task.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/server/agent_execution/test_simple_request_context_builder.py
    • Updated imports to use a2a.types.a2a_pb2 for Message, SendMessageRequest, and Task.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/server/apps/jsonrpc/test_fastapi_app.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
  • tests/server/apps/jsonrpc/test_jsonrpc_app.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/server/apps/jsonrpc/test_serialization.py
    • Updated imports to use google.protobuf.json_format.
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.server.jsonrpc_models for JSON-RPC error models.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/server/apps/jsonrpc/test_starlette_app.py
    • Updated imports to use a2a.types.a2a_pb2 for AgentCard.
  • tests/server/apps/rest/test_rest_fastapi_app.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types.
  • tests/server/events/test_event_consumer.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.server.jsonrpc_models for JSONRPCError.
    • Adjusted test fixtures and methods for Proto messages.
  • tests/server/events/test_event_queue.py
    • Updated imports to use a2a.types.a2a_pb2 for A2A types and a2a.server.jsonrpc_models for JSONRPCError.
    • Adjusted test fixtures and methods for Proto messages.
Ignored Files
  • Ignored by pattern: .github/workflows/** (3)
    • .github/workflows/linter.yaml
    • .github/workflows/unit-tests.yml
    • .github/workflows/update-a2a-types.yml
Activity
  • The pull request title indicates a chore: merge proto refactor into 1.0-dev.
  • The description outlines standard PR submission guidelines, including conventional commits, passing tests/linter, and documentation updates. It also references an issue to be fixed.
  • No human activity (comments, reviews) was provided in the context.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@ishymko ishymko force-pushed the 1.0-dev-merge-proto-refactor branch 4 times, most recently from 6c06780 to 43ae5d6 Compare February 17, 2026 13:56
Copy link
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 represents a significant and impressive refactoring, migrating the project's data models from Pydantic (based on JSON Schema) to Protobuf. The changes are extensive and touch almost every part of the codebase, including the client, server, transports, and tests. The result is a much cleaner and more robust implementation, especially with the removal of the complex proto_utils conversion layer and the direct use of Protobuf types throughout the SDK. The API has also been improved for consistency, for example, by making send_message always return a consistent iterator type.

My main concern is the removal of the .pre-commit-config.yaml file, which seems to eliminate important automated checks for code quality, security, and commit message conventions. While I see a format.sh script is mentioned, the loss of tools like gitleaks is worrying.

I also have a minor suggestion regarding the sed command used for post-processing generated gRPC files, which could potentially be made more robust.

Overall, this is a high-quality refactoring that significantly improves the SDK's architecture.

I am having trouble creating individual review comments. Click here to see my feedback.

.pre-commit-config.yaml (1-82)

high

The removal of the pre-commit configuration is a significant change that could impact code quality and security. This file configured several important hooks, including gitleaks for secret scanning, commitizen for conventional commits, and various linters and formatters. While I see a format.sh script is mentioned in the PR template, it's not clear if it replaces all the functionality, especially the security scanning. Could you please clarify the reasoning behind removing pre-commit hooks and ensure that equivalent checks are in place in the CI/CD pipeline?

scripts/gen_proto.sh (21)

low

The sed command to fix the import path in the generated gRPC file is a common workaround, but it can be brittle if the generated code format changes in the future. It might be worth investigating if the buf.build/grpc/python plugin offers an option to generate relative imports directly. For example, some protoc plugins have options like --python_out=...:src to control the output structure and import paths. If not, this is acceptable, but a plugin-native solution would be more robust.

@ishymko ishymko changed the base branch from 1.0-dev to 1.0-a2a_proto_refactor February 17, 2026 14:30
@ishymko ishymko changed the title chore: merge proto refactor into 1.0-dev chore: 1.0-dev into proto refactor Feb 17, 2026
@ishymko ishymko force-pushed the 1.0-dev-merge-proto-refactor branch from 43ae5d6 to 03ba6d9 Compare February 17, 2026 14:40
@ishymko ishymko changed the base branch from 1.0-a2a_proto_refactor to ishymko/1.0-a2a_proto_refactor February 17, 2026 15:56
@ishymko ishymko marked this pull request as ready for review February 17, 2026 15:59
@ishymko ishymko requested a review from a team as a code owner February 17, 2026 15:59
@ishymko ishymko merged commit 03ba6d9 into ishymko/1.0-a2a_proto_refactor Feb 17, 2026
6 checks passed
@ishymko ishymko deleted the 1.0-dev-merge-proto-refactor branch February 17, 2026 15:59
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.