UAT: Standard A2A operations message/send and message/stream not handled by A2aLocalFacade — spec requires these as core agent messaging operations #2567

Closed
opened 2026-04-03 18:56:12 +00:00 by freemo · 1 comment
Owner

Bug Report

Feature Area

Standards Alignment — A2A Protocol / Agent Messaging

What Was Tested

Code-level analysis of src/cleveragents/a2a/facade.py — the A2aLocalFacade operation dispatch table.

Expected Behavior (from spec)

The specification (§Server and Client Architecture, §A2A Standard Operations) states:

Standard A2A operations handle agent messaging (message/send, message/stream), task lifecycle, streaming updates, and Agent Card-based discovery.

Every CLI command maps to either a standard A2A operation or a _cleveragents/ extension method.

Standard A2A operations (message/send, message/stream) drive the conversation.

The spec explicitly maps:

  • message/sendSessionWorkflow.tell() — send user message to orchestrator actor; creates or updates a Task
  • message/streamSessionWorkflow.tell() with streaming — returns TaskStatusUpdateEvent / TaskArtifactUpdateEvent via SSE

Actual Behavior (from code)

In src/cleveragents/a2a/facade.py, the _EXTENSION_OPERATIONS and _LEGACY_OPERATIONS lists do not include message/send or message/stream:

_EXTENSION_OPERATIONS: list[str] = [
    "_cleveragents/plan/use",
    "_cleveragents/plan/execute",
    # ... (no message/send or message/stream)
]

_LEGACY_OPERATIONS: list[str] = [
    "session.create",
    "session.close",
    # ... (no message/send or message/stream)
]

The _handlers() method also has no entries for message/send or message/stream. Any client sending these standard A2A operations will receive an A2aOperationNotFoundError.

Impact

  • Core A2A compliance broken: The two most fundamental A2A operations are unimplemented.
  • CLI agents session tell broken: The agents session tell command maps to message/send per the spec. Without this handler, the primary user interaction pathway (sending messages to actors) fails.
  • Third-party A2A clients cannot interact: Any standard A2A client attempting to use message/send will receive an error.
  • Streaming broken: message/stream is the SSE streaming pathway; without it, real-time plan progress cannot be delivered.

Code Location

  • src/cleveragents/a2a/facade.py_EXTENSION_OPERATIONS, _LEGACY_OPERATIONS, _handlers() method

Steps to Reproduce

from cleveragents.a2a.facade import A2aLocalFacade
from cleveragents.a2a.models import A2aRequest

facade = A2aLocalFacade()
req = A2aRequest(method="message/send", params={
    "message": {"role": "user", "parts": [{"type": "text", "text": "Hello"}]}
})
# Raises A2aOperationNotFoundError: Unknown A2A method: message/send
response = facade.dispatch(req)

Fix Required

Add handlers for message/send and message/stream to A2aLocalFacade:

  1. message/send → route to SessionWorkflow.tell() (or equivalent session service method)
  2. message/stream → route to SessionWorkflow.tell() with streaming, publishing events to A2aEventQueue
  3. Add both to _EXTENSION_OPERATIONS (or a new _STANDARD_OPERATIONS list)
  4. Wire the session_service to handle the A2A Task lifecycle (submitted → working → completed)

Automated by CleverAgents Bot
Supervisor: UAT Testing | Agent: ca-uat-tester

## Bug Report ### Feature Area Standards Alignment — A2A Protocol / Agent Messaging ### What Was Tested Code-level analysis of `src/cleveragents/a2a/facade.py` — the `A2aLocalFacade` operation dispatch table. ### Expected Behavior (from spec) The specification (§Server and Client Architecture, §A2A Standard Operations) states: > Standard A2A operations handle agent messaging (`message/send`, `message/stream`), task lifecycle, streaming updates, and Agent Card-based discovery. > Every CLI command maps to either a standard A2A operation or a `_cleveragents/` extension method. > Standard A2A operations (`message/send`, `message/stream`) drive the conversation. The spec explicitly maps: - `message/send` → `SessionWorkflow.tell()` — send user message to orchestrator actor; creates or updates a Task - `message/stream` → `SessionWorkflow.tell()` with streaming — returns `TaskStatusUpdateEvent` / `TaskArtifactUpdateEvent` via SSE ### Actual Behavior (from code) In `src/cleveragents/a2a/facade.py`, the `_EXTENSION_OPERATIONS` and `_LEGACY_OPERATIONS` lists do not include `message/send` or `message/stream`: ```python _EXTENSION_OPERATIONS: list[str] = [ "_cleveragents/plan/use", "_cleveragents/plan/execute", # ... (no message/send or message/stream) ] _LEGACY_OPERATIONS: list[str] = [ "session.create", "session.close", # ... (no message/send or message/stream) ] ``` The `_handlers()` method also has no entries for `message/send` or `message/stream`. Any client sending these standard A2A operations will receive an `A2aOperationNotFoundError`. ### Impact - **Core A2A compliance broken**: The two most fundamental A2A operations are unimplemented. - **CLI `agents session tell` broken**: The `agents session tell` command maps to `message/send` per the spec. Without this handler, the primary user interaction pathway (sending messages to actors) fails. - **Third-party A2A clients cannot interact**: Any standard A2A client attempting to use `message/send` will receive an error. - **Streaming broken**: `message/stream` is the SSE streaming pathway; without it, real-time plan progress cannot be delivered. ### Code Location - `src/cleveragents/a2a/facade.py` — `_EXTENSION_OPERATIONS`, `_LEGACY_OPERATIONS`, `_handlers()` method ### Steps to Reproduce ```python from cleveragents.a2a.facade import A2aLocalFacade from cleveragents.a2a.models import A2aRequest facade = A2aLocalFacade() req = A2aRequest(method="message/send", params={ "message": {"role": "user", "parts": [{"type": "text", "text": "Hello"}]} }) # Raises A2aOperationNotFoundError: Unknown A2A method: message/send response = facade.dispatch(req) ``` ### Fix Required Add handlers for `message/send` and `message/stream` to `A2aLocalFacade`: 1. `message/send` → route to `SessionWorkflow.tell()` (or equivalent session service method) 2. `message/stream` → route to `SessionWorkflow.tell()` with streaming, publishing events to `A2aEventQueue` 3. Add both to `_EXTENSION_OPERATIONS` (or a new `_STANDARD_OPERATIONS` list) 4. Wire the `session_service` to handle the A2A Task lifecycle (submitted → working → completed) --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: ca-uat-tester
Author
Owner

Closing as duplicate of #2569.

Both issues report the same gap: A2aLocalFacade does not handle standard A2A operations message/send and message/stream. Issue #2569 is the more comprehensive ticket — it includes the full list of missing standard operations (tasks/get, tasks/cancel, tasks/sendSubscribe) and has a MoSCoW/Should have classification already applied.

All work should be tracked under #2569.


Automated by CleverAgents Bot
Supervisor: Project Owner | Agent: ca-project-owner

Closing as duplicate of #2569. Both issues report the same gap: `A2aLocalFacade` does not handle standard A2A operations `message/send` and `message/stream`. Issue #2569 is the more comprehensive ticket — it includes the full list of missing standard operations (`tasks/get`, `tasks/cancel`, `tasks/sendSubscribe`) and has a MoSCoW/Should have classification already applied. All work should be tracked under #2569. --- **Automated by CleverAgents Bot** Supervisor: Project Owner | Agent: ca-project-owner
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core#2567
No description provided.