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: v0.3.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: v0.3.2
Choose a head ref
  • 10 commits
  • 13 files changed
  • 9 contributors

Commits on Aug 13, 2025

  1. Configuration menu
    Copy the full SHA
    1dbe33d View commit details
    Browse the repository at this point in the history

Commits on Aug 15, 2025

  1. fix: Add missing mime_type and name in proto conversion utils (#408)

    # 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)
    - [ ] Appropriate docs were updated (if necessary)
    
    Fixes the issue when using protoutils, mime type and file name are lost
    pwwpche authored Aug 15, 2025
    Configuration menu
    Copy the full SHA
    72b2ee7 View commit details
    Browse the repository at this point in the history

Commits on Aug 20, 2025

  1. Configuration menu
    Copy the full SHA
    da14cea View commit details
    Browse the repository at this point in the history
  2. fix: make event_consumer tolerant to closed queues on py3.13 (#407)

    # Issue
    
    On Python 3.13, the closed-queue signal is `asyncio.QueueShutDown`.
    `event_consumer.py` aliased `asyncio.QueueShutDown` to `ClosedQueue`,
    but `asyncio.QueueEmpty` can still arise on py3.13 and it's not handled
    properly in `consume_all()`'s except blocks.
    
    # How it's reproduced
    
    In any `AgentExecutor` class:
    ```
    # (...)
    async def execute(
            self,
            request: RequestContext,
            event_queue: EventQueue,
        ) -> None:
            await event_queue.enqueue_event(
                new_task(request.message)
            )
    ```
    
    In python < 3.13:
    
    - Sending a `message/send` request works, a task is added to the
    `InMemoryTaskStore`.
    
    In python >= 3.13:
    
    - Sending a `message/send` request crashes with exception:
    ```
    File "venv/lib/python3.13/site-packages/a2a/server/apps/jsonrpc/jsonrpc_app.py", line 219, in _handle_requests
        return await self._process_non_streaming_request(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            request_id, a2a_request, call_context
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        )
        ^
      File "venv/lib/python3.13/site-packages/a2a/server/apps/jsonrpc/jsonrpc_app.py", line 306, in _process_non_streaming_request
        handler_result = await self.handler.on_message_send(
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            request_obj, context
            ^^^^^^^^^^^^^^^^^^^^
        )
        ^
      File "venv/lib/python3.13/site-packages/a2a/utils/telemetry.py", line 162, in async_wrapper
        result = await func(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "venv/lib/python3.13/site-packages/a2a/server/request_handlers/jsonrpc_handler.py", line 87, in on_message_send
        task_or_message = await self.request_handler.on_message_send(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            request.params, context
            ^^^^^^^^^^^^^^^^^^^^^^^
        )
        ^
      File "venv/lib/python3.13/site-packages/a2a/utils/telemetry.py", line 162, in async_wrapper
        result = await func(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "venv/lib/python3.13/site-packages/a2a/server/request_handlers/default_request_handler.py", line 282, in on_message_send
        ) = await result_aggregator.consume_and_break_on_interrupt(consumer)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "venv/lib/python3.13/site-packages/a2a/server/tasks/result_aggregator.py", line 115, in consume_and_break_on_interrupt
        async for event in event_stream:
        ...<20 lines>...
                break
      File "venv/lib/python3.13/site-packages/a2a/server/events/event_consumer.py", line 87, in consume_all
        raise self._exception
      File "venv/lib/python3.13/site-packages/a2a/server/events/event_consumer.py", line 94, in consume_all
        event = await asyncio.wait_for(
                ^^^^^^^^^^^^^^^^^^^^^^^
            self.queue.dequeue_event(), timeout=self._timeout
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        )
        ^
      File "/opt/homebrew/Cellar/python@3.13/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
        return await fut
               ^^^^^^^^^
      File "venv/lib/python3.13/site-packages/a2a/utils/telemetry.py", line 162, in async_wrapper
        result = await func(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "venv/lib/python3.13/site-packages/a2a/server/events/event_queue.py", line 95, in dequeue_event
        raise asyncio.QueueEmpty('Queue is closed.')
    asyncio.queues.QueueEmpty: Queue is closed.
    ```
     
     # Fix
    
    ## Code
    - `event_consumer.consume_all`:
    - Catch `(QueueClosed, asyncio.QueueEmpty)` and break only when
    `queue.is_closed()` is True; otherwise continue polling.
    
    - `event_queue.dequeue_event`:
    - Version-guard the early-raise: on <3.13 keep raising `QueueEmpty` when
    closed+empty; on ≥3.13 skip the early raise and rely on
    `queue.shutdown()` to surface `QueueShutDown` exceptions.
    
    ## Tests
    Added 2 tests which fail on current implementation, but pass after the
    fix.
    
    ---------
    
    Co-authored-by: taralesc <taralesc@adobe.com>
    ovidiutaralesca and taralesc authored Aug 20, 2025
    Configuration menu
    Copy the full SHA
    a371461 View commit details
    Browse the repository at this point in the history
  3. fix: non-blocking send_message server handler not invoke push notif…

    …ication (#394)
    
    - Problem: When client use `send_message` with
    `MessageSendConfiguration.blocking=False`, the `result_aggregator` will
    enter the logic of `_continue_consuming`. But it's not push notification
    to client. The client can't get notification for long-running
    task(non-blocking invoke) at this situation.
    - Solution: Simply add push notification logic to result_aggregator is
    okay.
    
    Fixes #239 🦕
    
    Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
    weimch and holtskinner authored Aug 20, 2025
    Configuration menu
    Copy the full SHA
    db82a65 View commit details
    Browse the repository at this point in the history
  4. fix: Client hangs when implementing AgentExecutor and awaiting tw…

    …ice in execute method (#379)
    
    Fixes #367
    
     - Add clear_events method for immediate queue cleanup
     - Integrate with event_consumer to prevent hanging
     - Support child queue clearing for complete cleanup
    
    ---------
    
    Co-authored-by: 严骏驰 <yanjunchi@chinamobile.com>
    meoow113 and 严骏驰 authored Aug 20, 2025
    Configuration menu
    Copy the full SHA
    c147a83 View commit details
    Browse the repository at this point in the history
  5. fix(grpc): Update CreateTaskPushNotificationConfig endpoint to `/v1…

    …/{parent=tasks/*/pushNotificationConfigs}` (#415)
    
    Commit:
    a2aproject/A2A@911f9b0
    a2a-bot authored Aug 20, 2025
    Configuration menu
    Copy the full SHA
    73dddc3 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    00703e3 View commit details
    Browse the repository at this point in the history
  7. chore(gRPC): Update a2a.proto to include metadata on `GetTaskRequ…

    …est` (#417)
    
    Commit:
    a2aproject/A2A@f0d48cd
    
    ---------
    
    Co-authored-by: Holt Skinner <holtskinner@google.com>
    a2a-bot and holtskinner authored Aug 20, 2025
    Configuration menu
    Copy the full SHA
    5999cd4 View commit details
    Browse the repository at this point in the history
  8. chore(main): release 0.3.2 (#404)

    🤖 I have created a release *beep* *boop*
    ---
    
    
    ##
    [0.3.2](v0.3.1...v0.3.2)
    (2025-08-20)
    
    
    ### Bug Fixes
    
    * Add missing mime_type and name in proto conversion utils
    ([#408](#408))
    ([72b2ee7](72b2ee7))
    * Add name field to FilePart protobuf message
    ([#403](#403))
    ([1dbe33d](1dbe33d))
    * Client hangs when implementing `AgentExecutor` and `await`ing twice in
    execute method
    ([#379](#379))
    ([c147a83](c147a83))
    * **grpc:** Update `CreateTaskPushNotificationConfig` endpoint to
    `/v1/{parent=tasks/*/pushNotificationConfigs}`
    ([#415](#415))
    ([73dddc3](73dddc3))
    * make `event_consumer` tolerant to closed queues on py3.13
    ([#407](#407))
    ([a371461](a371461))
    * non-blocking `send_message` server handler not invoke push
    notification
    ([#394](#394))
    ([db82a65](db82a65))
    * **proto:** Add `icon_url` to `a2a.proto`
    ([#416](#416))
    ([00703e3](00703e3))
    * **spec:** Suggest Unique Identifier fields to be UUID
    ([#405](#405))
    ([da14cea](da14cea))
    
    ---
    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 Aug 20, 2025
    Configuration menu
    Copy the full SHA
    5912b28 View commit details
    Browse the repository at this point in the history
Loading