a2aproject / a2aproject/a2a-js
[Bug]: Part.data set to null drops the content oneof
- Lingua principale
- TypeScript
- Stelle
- 613
- Fork
- 169
- Merge medio
- 1g 6h
- PR unite (30g)
- 21
Descrizione
### 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.
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.