Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: a2aproject/a2a-python
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.0.1
Choose a base ref
...
head repository: a2aproject/a2a-python
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.0.2
Choose a head ref
  • 12 commits
  • 25 files changed
  • 10 contributors

Commits on Apr 22, 2026

  1. ci: cleanup 1.0-dev triggers and remove branch filters (#1002)

    1. Cleanup 1.0-dev filters as the branch is removed already.
    2. Remove any branch filters for workflows as a safety net if something
    got skipped on PR by accident.
    3. Use "include" logic to make it more transparent what is the scope of
    each check (everything will run on `main` as per the previous item just
    in case the filter is wrong).
    ishymko authored Apr 22, 2026
    Configuration menu
    Copy the full SHA
    4a247ed View commit details
    Browse the repository at this point in the history
  2. chore(deps): bump requests from 2.32.5 to 2.33.0 (#994)

    Bumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/psf/requests/releases">requests's
    releases</a>.</em></p>
    <blockquote>
    <h2>v2.33.0</h2>
    <h2>2.33.0 (2026-03-25)</h2>
    <p><strong>Announcements</strong></p>
    <ul>
    <li>📣 Requests is adding inline types. If you have a typed code base
    that uses Requests, please take a look at <a
    href="https://redirect.github.com/psf/requests/issues/7271">#7271</a>.
    Give it a try, and report any gaps or feedback you may have in the
    issue. 📣</li>
    </ul>
    <p><strong>Security</strong></p>
    <ul>
    <li>CVE-2026-25645 <code>requests.utils.extract_zipped_paths</code> now
    extracts contents to a non-deterministic location to prevent malicious
    file replacement. This does not affect default usage of Requests, only
    applications calling the utility function directly.</li>
    </ul>
    <p><strong>Improvements</strong></p>
    <ul>
    <li>Migrated to a PEP 517 build system using setuptools. (<a
    href="https://redirect.github.com/psf/requests/issues/7012">#7012</a>)</li>
    </ul>
    <p><strong>Bugfixes</strong></p>
    <ul>
    <li>Fixed an issue where an empty netrc entry could cause malformed
    authentication to be applied to Requests on Python 3.11+. (<a
    href="https://redirect.github.com/psf/requests/issues/7205">#7205</a>)</li>
    </ul>
    <p><strong>Deprecations</strong></p>
    <ul>
    <li>Dropped support for Python 3.9 following its end of support. (<a
    href="https://redirect.github.com/psf/requests/issues/7196">#7196</a>)</li>
    </ul>
    <p><strong>Documentation</strong></p>
    <ul>
    <li>Various typo fixes and doc improvements.</li>
    </ul>
    <h2>New Contributors</h2>
    <ul>
    <li><a href="https://github.com/M0d3v1"><code>@​M0d3v1</code></a> made
    their first contribution in <a
    href="https://redirect.github.com/psf/requests/pull/6865">psf/requests#6865</a></li>
    <li><a href="https://github.com/aminvakil"><code>@​aminvakil</code></a>
    made their first contribution in <a
    href="https://redirect.github.com/psf/requests/pull/7220">psf/requests#7220</a></li>
    <li><a href="https://github.com/E8Price"><code>@​E8Price</code></a> made
    their first contribution in <a
    href="https://redirect.github.com/psf/requests/pull/6960">psf/requests#6960</a></li>
    <li><a href="https://github.com/mitre88"><code>@​mitre88</code></a> made
    their first contribution in <a
    href="https://redirect.github.com/psf/requests/pull/7244">psf/requests#7244</a></li>
    <li><a href="https://github.com/magsen"><code>@​magsen</code></a> made
    their first contribution in <a
    href="https://redirect.github.com/psf/requests/pull/6553">psf/requests#6553</a></li>
    <li><a
    href="https://github.com/Rohan5commit"><code>@​Rohan5commit</code></a>
    made their first contribution in <a
    href="https://redirect.github.com/psf/requests/pull/7227">psf/requests#7227</a></li>
    </ul>
    <p><strong>Full Changelog</strong>: <a
    href="https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25">https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25</a></p>
    </blockquote>
    </details>
    <details>
    <summary>Changelog</summary>
    <p><em>Sourced from <a
    href="https://github.com/psf/requests/blob/main/HISTORY.md">requests's
    changelog</a>.</em></p>
    <blockquote>
    <h2>2.33.0 (2026-03-25)</h2>
    <p><strong>Announcements</strong></p>
    <ul>
    <li>📣 Requests is adding inline types. If you have a typed code base
    that
    uses Requests, please take a look at <a
    href="https://redirect.github.com/psf/requests/issues/7271">#7271</a>.
    Give it a try, and report
    any gaps or feedback you may have in the issue. 📣</li>
    </ul>
    <p><strong>Security</strong></p>
    <ul>
    <li>CVE-2026-25645 <code>requests.utils.extract_zipped_paths</code> now
    extracts
    contents to a non-deterministic location to prevent malicious file
    replacement. This does not affect default usage of Requests, only
    applications calling the utility function directly.</li>
    </ul>
    <p><strong>Improvements</strong></p>
    <ul>
    <li>Migrated to a PEP 517 build system using setuptools. (<a
    href="https://redirect.github.com/psf/requests/issues/7012">#7012</a>)</li>
    </ul>
    <p><strong>Bugfixes</strong></p>
    <ul>
    <li>Fixed an issue where an empty netrc entry could cause
    malformed authentication to be applied to Requests on
    Python 3.11+. (<a
    href="https://redirect.github.com/psf/requests/issues/7205">#7205</a>)</li>
    </ul>
    <p><strong>Deprecations</strong></p>
    <ul>
    <li>Dropped support for Python 3.9 following its end of support. (<a
    href="https://redirect.github.com/psf/requests/issues/7196">#7196</a>)</li>
    </ul>
    <p><strong>Documentation</strong></p>
    <ul>
    <li>Various typo fixes and doc improvements.</li>
    </ul>
    </blockquote>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761"><code>bc04dfd</code></a>
    v2.33.0</li>
    <li><a
    href="https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7"><code>66d21cb</code></a>
    Merge commit from fork</li>
    <li><a
    href="https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028"><code>8b9bc8f</code></a>
    Move badges to top of README (<a
    href="https://redirect.github.com/psf/requests/issues/7293">#7293</a>)</li>
    <li><a
    href="https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286"><code>e331a28</code></a>
    Remove unused extraction call (<a
    href="https://redirect.github.com/psf/requests/issues/7292">#7292</a>)</li>
    <li><a
    href="https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29"><code>753fd08</code></a>
    docs: fix FAQ grammar in httplib2 example</li>
    <li><a
    href="https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71"><code>774a0b8</code></a>
    docs(socks): same block as other sections</li>
    <li><a
    href="https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303"><code>9c72a41</code></a>
    Bump github/codeql-action from 4.33.0 to 4.34.1</li>
    <li><a
    href="https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be"><code>ebf7190</code></a>
    Bump github/codeql-action from 4.32.0 to 4.33.0</li>
    <li><a
    href="https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798"><code>0e4ae38</code></a>
    docs: exclude Response.is_permanent_redirect from API docs (<a
    href="https://redirect.github.com/psf/requests/issues/7244">#7244</a>)</li>
    <li><a
    href="https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a"><code>d568f47</code></a>
    docs: clarify Quickstart POST example (<a
    href="https://redirect.github.com/psf/requests/issues/6960">#6960</a>)</li>
    <li>Additional commits viewable in <a
    href="https://github.com/psf/requests/compare/v2.32.5...v2.33.0">compare
    view</a></li>
    </ul>
    </details>
    <br />
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Ivan Shymko <[email protected]>
    dependabot[bot] and ishymko authored Apr 22, 2026
    Configuration menu
    Copy the full SHA
    d2a9887 View commit details
    Browse the repository at this point in the history
  3. chore(deps-dev): bump pytest from 9.0.2 to 9.0.3 (#966)

    Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to
    9.0.3.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/pytest-dev/pytest/releases">pytest's
    releases</a>.</em></p>
    <blockquote>
    <h2>9.0.3</h2>
    <h1>pytest 9.0.3 (2026-04-07)</h1>
    <h2>Bug fixes</h2>
    <ul>
    <li>
    <p><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/12444">#12444</a>:
    Fixed <code>pytest.approx</code> which now correctly takes into account
    <code>~collections.abc.Mapping</code> keys order to compare them.</p>
    </li>
    <li>
    <p><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/13634">#13634</a>:
    Blocking a <code>conftest.py</code> file using the <code>-p no:</code>
    option is now explicitly disallowed.</p>
    <p>Previously this resulted in an internal assertion failure during
    plugin loading.</p>
    <p>Pytest now raises a clear <code>UsageError</code> explaining that
    conftest files are not plugins and cannot be disabled via
    <code>-p</code>.</p>
    </li>
    <li>
    <p><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/13734">#13734</a>:
    Fixed crash when a test raises an exceptiongroup with
    <code>__tracebackhide__ = True</code>.</p>
    </li>
    <li>
    <p><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14195">#14195</a>:
    Fixed an issue where non-string messages passed to <!-- raw HTML omitted
    -->unittest.TestCase.subTest()<!-- raw HTML omitted --> were not
    printed.</p>
    </li>
    <li>
    <p><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14343">#14343</a>:
    Fixed use of insecure temporary directory (CVE-2025-71176).</p>
    </li>
    </ul>
    <h2>Improved documentation</h2>
    <ul>
    <li><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/13388">#13388</a>:
    Clarified documentation for <code>-p</code> vs
    <code>PYTEST_PLUGINS</code> plugin loading and fixed an incorrect
    <code>-p</code> example.</li>
    <li><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/13731">#13731</a>:
    Clarified that capture fixtures (e.g. <code>capsys</code> and
    <code>capfd</code>) take precedence over the <code>-s</code> /
    <code>--capture=no</code> command-line options in <code>Accessing
    captured output from a test function
    &lt;accessing-captured-output&gt;</code>.</li>
    <li><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14088">#14088</a>:
    Clarified that the default <code>pytest_collection</code> hook sets
    <code>session.items</code> before it calls
    <code>pytest_collection_finish</code>, not after.</li>
    <li><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14255">#14255</a>:
    TOML integer log levels must be quoted: Updating reference
    documentation.</li>
    </ul>
    <h2>Contributor-facing changes</h2>
    <ul>
    <li>
    <p><a
    href="https://redirect.github.com/pytest-dev/pytest/issues/12689">#12689</a>:
    The test reports are now published to Codecov from GitHub Actions.
    The test statistics is visible <a
    href="https://app.codecov.io/gh/pytest-dev/pytest/tests">on the web
    interface</a>.</p>
    <p>-- by <code>aleguy02</code></p>
    </li>
    </ul>
    </blockquote>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/a7d58d7a21b78581e636bbbdea13c66ad1657c1e"><code>a7d58d7</code></a>
    Prepare release version 9.0.3</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/089d98199c253d8f89a040243bc4f2aa6cd5ab22"><code>089d981</code></a>
    Merge pull request <a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14366">#14366</a>
    from bluetech/revert-14193-backport</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/8127eaf4ab7f6b2fdd0dc1b38343ec97aeef05ac"><code>8127eaf</code></a>
    Revert &quot;Fix: assertrepr_compare respects dict insertion order (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14050">#14050</a>)
    (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14193">#14193</a>)&quot;</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/99a7e6029e7a6e8d53e5df114b1346e035370241"><code>99a7e60</code></a>
    Merge pull request <a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14363">#14363</a>
    from pytest-dev/patchback/backports/9.0.x/95d8423bd...</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/ddee02a578da30dd43aedc39c1c1f1aaadfcee95"><code>ddee02a</code></a>
    Merge pull request <a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14343">#14343</a>
    from bluetech/cve-2025-71176-simple</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/74eac6916fee34726cb194f16c516e96fbd29619"><code>74eac69</code></a>
    doc: Update training info (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14298">#14298</a>)
    (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14301">#14301</a>)</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/f92dee777cfdb77d1c43633d02766ddf1f07c869"><code>f92dee7</code></a>
    Merge pull request <a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14267">#14267</a>
    from pytest-dev/patchback/backports/9.0.x/d6fa26c62...</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/7ee58acc8777c31ac6cf388d01addf5a414a7439"><code>7ee58ac</code></a>
    Merge pull request <a
    href="https://redirect.github.com/pytest-dev/pytest/issues/12378">#12378</a>
    from Pierre-Sassoulas/fix-implicit-str-concat-and-d...</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/37da870d37e3a2f5177cae075c7b9ae279432bf8"><code>37da870</code></a>
    Merge pull request <a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14259">#14259</a>
    from mitre88/patch-4 (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14268">#14268</a>)</li>
    <li><a
    href="https://github.com/pytest-dev/pytest/commit/c34bfa3b7acb65b594707c714f1d8461b0304eed"><code>c34bfa3</code></a>
    Add explanation for string context diffs (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14257">#14257</a>)
    (<a
    href="https://redirect.github.com/pytest-dev/pytest/issues/14266">#14266</a>)</li>
    <li>Additional commits viewable in <a
    href="https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3">compare
    view</a></li>
    </ul>
    </details>
    <br />
    
    
    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pytest&package-manager=uv&previous-version=9.0.2&new-version=9.0.3)](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] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Ivan Shymko <[email protected]>
    dependabot[bot] and ishymko authored Apr 22, 2026
    Configuration menu
    Copy the full SHA
    237621d View commit details
    Browse the repository at this point in the history
  4. chore(deps): bump cryptography from 46.0.5 to 46.0.7 (#993)

    Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5
    to 46.0.7.
    <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.7 - 2026-04-07</p>
    <pre><code>
    * **SECURITY ISSUE**: Fixed an issue where non-contiguous buffers could
    be
      passed to APIs that accept Python buffers, which could lead to buffer
      overflow. **CVE-2026-39892**
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
    3.5.6.
    <p>.. _v46-0-6:</p>
    <p>46.0.6 - 2026-03-25<br />
    </code></pre></p>
    <ul>
    <li><strong>SECURITY ISSUE</strong>: Fixed a bug where name constraints
    were not applied
    to peer names during verification when the leaf certificate contains a
    wildcard DNS SAN. Ordinary X.509 topologies are not affected by this
    bug,
    including those used by the Web PKI. Credit to <strong>Oleh Konko
    (1seal)</strong> for
    reporting the issue. <strong>CVE-2026-34073</strong></li>
    </ul>
    <p>.. _v46-0-5:</p>
    </blockquote>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/pyca/cryptography/commit/622d672e429a7cff836a23c5903683dbec1901f5"><code>622d672</code></a>
    46.0.7 release (<a
    href="https://redirect.github.com/pyca/cryptography/issues/14602">#14602</a>)</li>
    <li><a
    href="https://github.com/pyca/cryptography/commit/91d728897bdad30cd5c79a2b23e207f1f050d587"><code>91d7288</code></a>
    Cherry-pick <a
    href="https://redirect.github.com/pyca/cryptography/issues/14542">#14542</a>
    (<a
    href="https://redirect.github.com/pyca/cryptography/issues/14543">#14543</a>)</li>
    <li>See full diff in <a
    href="https://github.com/pyca/cryptography/compare/46.0.5...46.0.7">compare
    view</a></li>
    </ul>
    </details>
    <br />
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Ivan Shymko <[email protected]>
    dependabot[bot] and ishymko authored Apr 22, 2026
    Configuration menu
    Copy the full SHA
    e3e089b View commit details
    Browse the repository at this point in the history
  5. chore(docs): update migration README.md (#1003)

    # 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 [Contribution
    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> 🦕
    
    ---------
    
    Co-authored-by: Iva Sokolaj <[email protected]>
    Co-authored-by: sokoliva <[email protected]>
    3 people authored Apr 22, 2026
    Configuration menu
    Copy the full SHA
    b3d1ad6 View commit details
    Browse the repository at this point in the history
  6. fix(proto): use field.label instead of is_repeated for protobuf compa…

    …tibility (#1010)
    
    # Description
    Replace `field.is_repeated` with `field.label == field.LABEL_REPEATED`
    in `proto_utils.py` to support older protobuf versions where the
    `is_repeated` attribute is not available on `FieldDescriptor`.
    
    # Problem
    When using older protobuf versions accessing `field.is_repeated` raises:
    `a2a.utils.errors.InternalError: 'google._upb._message.FieldDescriptor'
    object has no attribute 'is_repeated'`
    The project's declared minimum is `protobuf>=5.29.5`, `5.29.5` does not
    support `is_repeated`. This caused `send_message` (and other
    proto-validating client calls) to fail at runtime for users on older
    protobuf releases.
    The `is_repeated` property was only added to `FieldDescriptor` in newer
    protobuf releases (6.x), so relying on it broke compatibility with the
    supported version range.
    
    Although the deprecated label was already [removed in some 7.x
    version](https://github.com/protocolbuffers/protobuf/releases/tag/v34.0-rc1.1),
    7.x version can't be resolved with the other constraints we have in the
    project.
    
    # Fix
    Use the long-standing `label` attribute and compare against
    `FieldDescriptor.LABEL_REPEATED`, which is available across all
    supported protobuf versions and is the canonical way to detect repeated
    fields.
    
    # Testing
    - `uv run pytest` passes against the supported protobuf version range.
    sokoliva authored Apr 22, 2026
    Configuration menu
    Copy the full SHA
    7d197db View commit details
    Browse the repository at this point in the history

Commits on Apr 23, 2026

  1. ci(linter): show which step failed (#1013)

    Before: 
    <img width="1006" height="1294" alt="image"
    src="https://github.com/user-attachments/assets/f855d9d0-b58f-4cd6-98de-a00d8698b93b"
    />
    
    After: 
    <img width="2054" height="1318" alt="image"
    src="https://github.com/user-attachments/assets/c7bb2bc4-ce35-4580-97fc-61e3578b193f"
    />
    ishymko authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    8a0f38d View commit details
    Browse the repository at this point in the history
  2. chore(docs): document strict AgentExecutor streaming rules in v1.0 gu…

    …ide (#1014)
    
    # Description
    - Adds a new section **"Server: AgentExecutor Streaming Rules"** to the
    v0.3 → v1.0 migration guide, covering the breaking change introduced in
    #979 where the server now strictly enforces the A2A spec rules for
    `message/stream`.
    - Documents the four `InvalidAgentResponseError` cases (mixing `Message`
    and `Task` events, multiple `Message`s, updates before the initial
    `Task`) with a clear table mapped to the actual error messages from
    `active_task.py`.
    - Provides before/after migration examples — including the message-only
    pattern and the full task lifecycle pattern (Task → WORKING → invoke
    agent → artifact → COMPLETED) — plus a quick migration checklist.
    - Links to the updated `helloworld/agent_executor.py` in
    [a2a-samples#474](a2aproject/a2a-samples#474) as
    a working reference.
    - Adds a corresponding bullet to the "Summary of Key Changes" section
    # Why
    Existing v0.3 executors that mixed `Message` and `Task` events were
    silently tolerated. After #979 they fail at runtime with
    `InvalidAgentResponseError`, which is easy to hit and hard to diagnose
    without guidance. This section gives users a clear path to migrate.
    sokoliva authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    d02ae4e View commit details
    Browse the repository at this point in the history
  3. feat(helpers): add non-text Part, Message, and Artifact helpers (#1004)

    ## Description
    
    - [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)
    - [ ] Appropriate docs were updated (if necessary)
    
    ---
    
    ### Summary
    
    `proto_helpers.py` provided `new_text_message` and `new_text_artifact`
    for the text Part variant, but nothing for the three remaining Part
    types (`data`, `raw`, `url`). This PR completes the set.
    
    **The `data` case is especially awkward without a helper.** `Part.data`
    is `google.protobuf.Value` in the v1.0 spec, which requires a
    non-obvious `ParseDict` dance to construct from a plain Python value:
    
    ```python
    # Without helper
    from google.protobuf.json_format import ParseDict
    from google.protobuf import struct_pb2
    part = Part(data=ParseDict({"answer": "hello"}, struct_pb2.Value()))
    
    # With helper
    part = new_data_part({"answer": "hello"})
    ```
    
    ### New helpers
    
    **Part primitives** (building blocks, mirror the existing implicit
    `Part(text=...)` pattern):
    
    | Helper | Part field | Accepts |
    |---|---|---|
    | `new_data_part(data)` | `data` (`google.protobuf.Value`) | Any
    JSON-serializable value (dict, list, str, …) |
    | `new_raw_part(raw, media_type, filename)` | `raw` (`bytes`) | Raw
    bytes with optional MIME type and filename |
    | `new_url_part(url, media_type, filename)` | `url` (`str`) | URL with
    optional MIME type and filename |
    
    **Message helpers** (mirror `new_text_message`):
    
    | Helper | Wraps |
    |---|---|
    | `new_data_message(data, role, context_id, task_id)` | `new_data_part`
    |
    | `new_raw_message(raw, media_type, filename, role, context_id,
    task_id)` | `new_raw_part` |
    | `new_url_message(url, media_type, filename, role, context_id,
    task_id)` | `new_url_part` |
    
    **Artifact helpers** (mirror `new_text_artifact`):
    
    | Helper | Wraps |
    |---|---|
    | `new_data_artifact(name, data, description, artifact_id)` |
    `new_data_part` |
    | `new_raw_artifact(name, raw, media_type, filename, description,
    artifact_id)` | `new_raw_part` |
    | `new_url_artifact(name, url, media_type, filename, description,
    artifact_id)` | `new_url_part` |
    
    ### Changes
    
    - `src/a2a/helpers/proto_helpers.py` — 9 new helper functions
    - `tests/helpers/test_proto_helpers.py` — tests for all new helpers (35
    total, all passing)
    
    ### Reviewer feedback addressed
    
    - `new_data_part` type hint broadened from `dict[str, Any]` to `Any`,
    since `google.protobuf.Value` accepts any JSON-serializable value, not
    just dicts. Added a list-value test to cover this.
    
    Release-as: 1.0.2
    
    ---------
    
    Co-authored-by: Sampath Kumar <[email protected]>
    martimfasantos and msampathkumar authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    cfdbe4c View commit details
    Browse the repository at this point in the history
  4. test: test push notifications in itk (#1009)

    # Description
    
    PR extends itk  cases with push_notifications compatibility tests
    
    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> 🦕
    
    Co-authored-by: Krzysztof Dziedzic <[email protected]>
    kdziedzic70 and Krzysztof Dziedzic authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    a470bae View commit details
    Browse the repository at this point in the history

Commits on Apr 24, 2026

  1. fix(server): deliver push notifications across all owners (#1016)

    # Description
    Fix a silent multi-tenant bug where push notifications were dropped for
    any deployment using authenticated users, and split the
    `PushNotificationConfigStore` read API into a user-callable owner-scoped
    read (`get_info`) and an internal cross-owner read for dispatch
    (`get_info_for_dispatch`).
    
    ## The bug
    `BasePushNotificationSender` accepted a `ServerCallContext` at
    construction time and called `config_store.get_info(task_id,
    self._call_context)` at dispatch. Because the sender is a process-wide
    singleton, callers passed a dummy `ServerCallContext()` (e.g.
    `itk/main.py`). The default `OwnerResolver`then resolved the dummy to
    the empty-string owner, which never matched any real registrar's
    partition. Result: `get_info` returned `[]` and every notification was
    silently dropped in any deployment with real authentication.
    
    ## The fix
    - **New non-abstract method**
    `PushNotificationConfigStore.get_info_for_dispatch(task_id)` returns
    every config for the task across all owners. Implemented in the
    in-memory and database stores. Custom 1.0 subclasses inherit a default
    implementation that forwards to `get_info(task_id, ServerCallContext())`
    preserving their 1.0 behavior exactly and emits a `DeprecationWarning`
    - **`BasePushNotificationSender`** no longer takes `context` in
    `__init__` and now calls `get_info_for_dispatch`. Identity is no longer
    held on the sender.
    - **`get_info(task_id, context)` is unchanged** and remains
    owner-scoped. Used by the user-callable read endpoints.
      
    The split encodes the asymmetry in the type system: the user-callable
    method requires a context, the dispatch-only method does not.
    Authorization (check if the user can create a config for a specific
    task) happens at registration (`set_info`), not at dispatch.
    
    Fixes #1015  🦕
    
    ---------
    
    Co-authored-by: Copilot <[email protected]>
    sokoliva and Copilot authored Apr 24, 2026
    Configuration menu
    Copy the full SHA
    c24ae05 View commit details
    Browse the repository at this point in the history
  2. chore(main): release 1.0.2 (#1012)

    🤖 I have created a release *beep* *boop*
    ---
    
    
    ##
    [1.0.2](v1.0.1...v1.0.2)
    (2026-04-24)
    
    
    ### Features
    
    * **helpers:** add non-text Part, Message, and Artifact helpers
    ([#1004](#1004))
    ([cfdbe4c](cfdbe4c))
    
    
    ### Bug Fixes
    
    * **proto:** use field.label instead of is_repeated for protobuf
    compatibility
    ([#1010](#1010))
    ([7d197db](7d197db))
    * **server:** deliver push notifications across all owners
    ([#1016](#1016))
    ([c24ae05](c24ae05))
    
    ---
    This PR was generated with [Release
    Please](https://github.com/googleapis/release-please). See
    [documentation](https://github.com/googleapis/release-please#release-please).
    a2a-bot authored Apr 24, 2026
    Configuration menu
    Copy the full SHA
    eb37091 View commit details
    Browse the repository at this point in the history
Loading