a2aproject / a2aproject/a2a-js

[Bug]: Part.data set to null drops the content oneof

Abierto
#642 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
TypeScript
Estrellas
613
Forks
169
Merge medio
1 d 6 h
PR fusionados (30 d)
21

Descripción

### What happened?

`Part` has a oneof named `content` over `text`, `raw`, `url` and `data`. `data` is a
`google.protobuf.Value`, and `null` is a perfectly good `Value`.

When `data` is null, this SDK parses the Part as having no content arm at all:

```js
import { Part } from '@a2a-js/sdk';

const p = Part.fromJSON({ data: null, mediaType: 'application/json' });
// { filename: '', mediaType: 'application/json' } no content case

Part.toJSON(p);
// { mediaType: 'application/json' }
```

`a2a-python` treats the arm as set and round-trips it:

```python
from a2a.types import Part
from google.protobuf.json_format import MessageToDict, ParseDict

m = Part(); ParseDict({"data": None, "mediaType": "application/json"}, m)
m.HasField('data') # True
MessageToDict(m) # {'data': None, 'mediaType': 'application/json'}
```

### Why it matters

"This is a data part whose payload is null" and "this part has no content" are different
statements, and the second one isn't valid. A data part sent by a Python agent arrives at
a JS peer as a Part with nothing in it, and gets forwarded on in that state.

Other `Value` shapes are fine. Objects, arrays, strings, numbers, booleans and empty
containers all round-trip identically between the two SDKs. Null is the only one that
falls through.

### What I'd expect

`{"data": null}` keeps the `data` arm set, and `toJSON` emits `data: null` rather than
omitting the key.

### How this was found

Round-tripping a shared corpus through this SDK and `a2a-python` and diffing the JSON.

Reproduced on `@a2a-js/sdk` 1.0.1 from npm and on `main` at `1c6eb32`, against
`a2a-python` at `cff6727`.

This is in the generated `src/types/pb/a2a.ts`, so happy to send the fix wherever you'd
prefer it to live.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.