a2aproject / a2aproject/a2a-js

[Bug]: JSON-RPC SSE error events lose their typed A2A error

Ouverte
#712 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
TypeScript
Étoiles
613
Forks
169
Merge moyen
1 j 6 h
PR mergées (30 j)
21

Description

## What happened

The JSON-RPC client maps an error response from a unary request to a typed A2A error, but wraps the same error envelope from an SSE stream in a generic `Error`.

For example, JSON-RPC error code `-32001` is exposed as `TaskNotFoundError` by `SendMessage`. When it arrives as an SSE error event from `SendStreamingMessage`, the caught error instead has `name === "Error"` and fails `instanceof JsonRpcTaskNotFoundError`; the typed error is only available through `error.cause`.

## What I expected

The same JSON-RPC error envelope should produce the same typed A2A error regardless of whether it arrives through a unary response or an SSE error event. Callers should be able to use the SDK's error classes consistently for branching, retries, and recovery.

## Steps to reproduce

1. Create a `JsonRpcTransport` with a fetch implementation that returns HTTP 200 and `Content-Type: text/event-stream`.
2. Return an SSE error event whose data is a matching JSON-RPC response with error code `-32001` and message `"Task not found"`.
3. Iterate `sendMessageStream()` and catch the thrown error.
4. Observe that the error is a generic `Error`; its `cause` is the typed `TaskNotFoundError`.
5. Return the same JSON-RPC error envelope from `sendMessage()` and observe that the typed error is thrown directly.

## Additional context

Minimal comparison:

```text
unary: name=TaskNotFoundError, typed=true
streaming: name=Error, typed=false, cause=TaskNotFoundError
```

This makes streaming and non-streaming calls expose different public error contracts for the same protocol failure. Mapping and throwing the SSE error envelope directly would preserve the semantic and JSON-RPC-specific error information.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.