-
Notifications
You must be signed in to change notification settings - Fork 0
Align JSON-RPC and agent-card parsing with cross-SDK interoperability expectations #18
Description
Summary
CSIT Rust <-> Go interoperability work surfaced two upstream compatibility gaps in a2a-rs that currently require test-side shims to get clean cross-SDK interop.
Context
Observed while implementing agntcy/csit#163 for Rust <-> Go interoperability validation.
Gaps
1. JSON-RPC method name mismatch
The current Rust JSON-RPC transport/router uses dotted method names such as:
message.sendmessage.streamtasks.gettasks.listtasks.canceltasks.resubscribe
The Go SDK currently emits/specifies CamelCase method names such as:
SendMessageSendStreamingMessageGetTaskListTasksCancelTaskSubscribeToTask
In practice, Go -> Rust JSON-RPC calls fail with method not found unless the Rust side is wrapped in a compatibility shim.
2. Strict agent card parsing
The Rust AgentCard type currently expects a concrete Vec<AgentSkill> for skills, while Go agent cards may serialize skills: null.
That causes strict Rust deserialization of otherwise usable cross-SDK agent cards to fail, even when the Rust client only needs the JSON-RPC interface URL.
Expected behavior
a2a-rs should interoperate cleanly with other A2A SDKs without requiring CSIT-specific protocol shims for basic JSON-RPC and agent-card exchange.
Suggested scope
- Decide and document the canonical JSON-RPC method names for A2A v1.
- Update the Rust JSON-RPC server/client edges to support the interoperable method names.
- If compatibility matters, consider accepting both the existing dotted names and the spec-style CamelCase names.
- Relax agent card deserialization so
skills: nullis handled equivalently to an empty list, or otherwise make incoming card parsing tolerant where the field is optional in practice. - Add regression coverage for cross-SDK cards and JSON-RPC requests.
Impact
This currently blocks clean Rust <-> Go interoperability without fixture-specific compatibility code, and will likely affect broader multi-SDK CSIT work as more languages are added.