UAT: A2A facade missing standard message/send and message/stream operations #1385

Open
opened 2026-04-02 17:02:10 +00:00 by freemo · 0 comments
Owner

Bug Report

Feature Area: TuiMaterializer A2A Integration / A2A Module
Severity: High
Found by: UAT tester uat-worker-a2a

What Was Tested

Verified whether the A2aLocalFacade supports the standard A2A protocol operations message/send and message/stream as required by the spec.

Expected Behavior (from spec)

Per docs/specification.md lines 23394-23397:

A2A Operation Direction CleverAgents Mapping
message/send Client → Server SessionWorkflow.tell() — send user message to orchestrator actor; creates or updates a Task
message/stream Client → Server SessionWorkflow.tell() with streaming — returns TaskStatusUpdateEvent / TaskArtifactUpdateEvent via SSE

"A2A uses a Task-centric model: each message/send or message/stream creates or updates a Task that tracks the lifecycle of the interaction. Tasks transition through states: submittedworkingcompleted (or failed, canceled, input-required)."

These are standard A2A protocol operations (not _cleveragents/ extensions) and must be supported.

Actual Behavior

A2aLocalFacade.dispatch() raises A2aOperationNotFoundError for both operations:

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

facade = A2aLocalFacade()

try:
    facade.dispatch(A2aRequest(operation='message/send', params={'message': 'hello'}))
except A2aOperationNotFoundError as e:
    print(e)  # "Unknown A2A operation: message/send"

try:
    facade.dispatch(A2aRequest(operation='message/stream', params={'message': 'hello'}))
except A2aOperationNotFoundError as e:
    print(e)  # "Unknown A2A operation: message/stream"

The _SUPPORTED_OPERATIONS list in src/cleveragents/a2a/facade.py contains 42 operations but neither message/send nor message/stream.

Code Location

  • src/cleveragents/a2a/facade.py_EXTENSION_OPERATIONS and _LEGACY_OPERATIONS lists (lines ~30-70)
  • Missing handlers: _handle_message_send() and _handle_message_stream() methods

Additional Missing Items

Related to this gap, the A2A module also lacks:

  1. A2A Task model — no A2aTask class with task_id, state (submitted/working/completed/failed/canceled/input-required) per spec line 23397
  2. Agent Card discovery — no handler for capability negotiation endpoint

Impact

The TUI and CLI cannot send user messages to orchestrator actors through the standard A2A protocol. The session tell command bypasses A2A entirely (uses SessionService.append_message() directly with a stub response). This violates the spec requirement that "every client operation flows through A2A regardless of deployment mode."

## Bug Report **Feature Area:** TuiMaterializer A2A Integration / A2A Module **Severity:** High **Found by:** UAT tester uat-worker-a2a ### What Was Tested Verified whether the `A2aLocalFacade` supports the standard A2A protocol operations `message/send` and `message/stream` as required by the spec. ### Expected Behavior (from spec) Per `docs/specification.md` lines 23394-23397: | A2A Operation | Direction | CleverAgents Mapping | |---|---|---| | `message/send` | Client → Server | `SessionWorkflow.tell()` — send user message to orchestrator actor; creates or updates a Task | | `message/stream` | Client → Server | `SessionWorkflow.tell()` with streaming — returns `TaskStatusUpdateEvent` / `TaskArtifactUpdateEvent` via SSE | > "A2A uses a **Task-centric model**: each `message/send` or `message/stream` creates or updates a Task that tracks the lifecycle of the interaction. Tasks transition through states: `submitted` → `working` → `completed` (or `failed`, `canceled`, `input-required`)." These are **standard A2A protocol operations** (not `_cleveragents/` extensions) and must be supported. ### Actual Behavior `A2aLocalFacade.dispatch()` raises `A2aOperationNotFoundError` for both operations: ```python from cleveragents.a2a.facade import A2aLocalFacade from cleveragents.a2a.models import A2aRequest from cleveragents.a2a.errors import A2aOperationNotFoundError facade = A2aLocalFacade() try: facade.dispatch(A2aRequest(operation='message/send', params={'message': 'hello'})) except A2aOperationNotFoundError as e: print(e) # "Unknown A2A operation: message/send" try: facade.dispatch(A2aRequest(operation='message/stream', params={'message': 'hello'})) except A2aOperationNotFoundError as e: print(e) # "Unknown A2A operation: message/stream" ``` The `_SUPPORTED_OPERATIONS` list in `src/cleveragents/a2a/facade.py` contains 42 operations but neither `message/send` nor `message/stream`. ### Code Location - `src/cleveragents/a2a/facade.py` — `_EXTENSION_OPERATIONS` and `_LEGACY_OPERATIONS` lists (lines ~30-70) - Missing handlers: `_handle_message_send()` and `_handle_message_stream()` methods ### Additional Missing Items Related to this gap, the A2A module also lacks: 1. **A2A Task model** — no `A2aTask` class with `task_id`, `state` (`submitted`/`working`/`completed`/`failed`/`canceled`/`input-required`) per spec line 23397 2. **Agent Card discovery** — no handler for capability negotiation endpoint ### Impact The TUI and CLI cannot send user messages to orchestrator actors through the standard A2A protocol. The `session tell` command bypasses A2A entirely (uses `SessionService.append_message()` directly with a stub response). This violates the spec requirement that "every client operation flows through A2A regardless of deployment mode."
freemo self-assigned this 2026-04-02 18:45:16 +00:00
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#1385
No description provided.