a2aproject / a2aproject/A2A

[Epic] Multi-turn interaction gaps — state acceptance rules, interruptibility, and task lifecycle

Aperta
#1,992 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub
enhancement v1.1-candidate
Lingua principale
Shell
Stelle
25.7k
Fork
2.6k
Merge medio
3g 6h
PR unite (30g)
16

Descrizione

## Multi-turn interaction gaps — state acceptance rules, interruptibility, and task lifecycle

Section 3.4 of the A2A specification defines the foundations of multi-turn interaction: `contextId` and `taskId` semantics, the `INPUT_REQUIRED` pattern, follow-up message references, and context inheritance. However, several practical scenarios are left unspecified. This epic tracks the gaps.

## Gaps

### 1. No normative rules for which states accept a follow-up message

§3.4.3 states that clients *can* send additional messages with a `taskId` reference, but the spec does not define:

- Which task states MUST accept a follow-up message
- Which states MUST reject one, and with which error
- Whether sending to a `WORKING` or `SUBMITTED` task is valid or an error

Two open proposals take opposing positions on this, and the tension needs a TSC decision:

- **#1027** proposes that follow-up messages MUST only be accepted in `INPUT_REQUIRED`. Sending to any other non-terminal state (e.g. `WORKING`) MUST return an `UnsupportedOperationError` ("Task not accepting input"). This makes the protocol deterministic.
- **#1022** proposes the opposite: agents should be *able* to accept messages while actively `WORKING` (mid-execution steering, as in long agentic loops), advertised via a new `guidable` capability flag on the Agent Card.

Without a normative answer here, client and agent implementations diverge.

- **#1022** — [Feat]: Support being able to send messages to actively running tasks
- **#1027** — [Feat]: Clarify multi-turn message acceptance requirements for `message/send`

### 2. No mechanism to re-engage a task in a terminal state

Once a task reaches `COMPLETED`, `FAILED`, or `CANCELED`, the spec provides no way to continue within the same task context. Conversational agents frequently need to handle follow-ups to just-completed actions ("actually, move that meeting to 16:00"). Today clients must start a fresh task, losing direct task linkage.

- **#1095** — [Feat]: Task Revival Proposal

### 3. No agent-initiated handoff from synchronous to asynchronous delivery

Clients must choose their delivery strategy (`message/send`, `message/stream`, push) before an agent has enough information to know how long a task will take. There is no mechanism for an agent to signal mid-stream: *"this will take much longer than expected — please switch to async polling or push."*

- **#1960** — [Feat]: Agent-Initiated Transition from Synchronous to Asynchronous Task Delivery

### 4. Cancellation of in-progress tasks is underspecified

Related to task lifecycle during execution: the spec does not define how an agent responds when cancellation cannot complete immediately (e.g. a rollback is running), and the `CancelTaskRequest` message definition is absent from the proto.

- **#1680** — [Feat]: How to respond to a task that cannot be cancelled immediately?
- **#1684** — [Bug]: The definition of `CancelTaskRequest` is missing

---

## Out of scope

The following are already addressed in §3.4 and are not tracked here:
- `contextId` and `taskId` semantics, assignment, and mismatch handling
- The `INPUT_REQUIRED` state pattern itself
- Context inheritance across tasks

**#902** (Managing multi-step user interactions) is a documentation/guidance gap rather than a protocol gap, and may be better resolved by expanding §3.4 examples rather than a protocol change.

---

## Child issues

| # | Area | Title |
|---|------|-------|
| #1022 | State rules | Support sending messages to actively running tasks |
| #1027 | State rules | Clarify multi-turn message acceptance requirements for `message/send` |
| #1095 | Lifecycle | Task Revival Proposal |
| #1680 | Cancellation | How to respond to a task that cannot be cancelled immediately? |
| #1684 | Cancellation | The definition of `CancelTaskRequest` is missing |
| #1960 | Async handoff | Agent-Initiated Transition from Synchronous to Asynchronous Delivery |

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

This is an epic tracking design gaps in the A2A protocol's multi-turn interaction model. The work involves reading the specification (section 3.4), reviewing the linked child issues (#1022, #1027, #1095, #1680, #1684, #1960), and contributing to protocol design decisions. A newcomer would need deep familiarity with the A2A spec, agent interaction patterns, and the existing codebase to participate meaningfully.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Ambito
backend-api-design
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Attiva
Chiarezza
Specificata chiaramente
Idoneità per principianti
20/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.