Skip to content

feat: cli spec reconciliation part 2 - #23

Open
yarolegovich wants to merge 7 commits into
mainfrom
yarolegovich/cli-spec-reconcile-2
Open

feat: cli spec reconciliation part 2#23
yarolegovich wants to merge 7 commits into
mainfrom
yarolegovich/cli-spec-reconcile-2

Conversation

@yarolegovich

@yarolegovich yarolegovich commented Aug 28, 2026

Copy link
Copy Markdown
Member
  • Rename --polling-interval -> --poll-interval.
  • Allow : as service parameter separator.
  • In text mode print task resume hint for input and auth required states.
  • Introduce --a2a-version which can pin protocol version to a specific value. The default is all supported transports.
  • Fix events printed without wire one-of envelope in json mode.
  • Fix jsonl being indented. Added --pretty for re-enabling indentation.

Comment thread specification/SPEC.md

Cross-cutting options such as `--insecure` apply to whichever transport is negotiated. Where a future option is meaningful only for one binding (for example a gRPC keepalive setting that HTTP has no analogue for), a tool SHOULD namespace it per transport rather than overloading a global flag; the reserved convention is `--<binding>-<option>` (for example `--grpc-keepalive`). This specification defines no such per-transport option today; the convention is reserved so that adding one later is not a breaking change.

13.2 **Protocol version (MUST):** a tool MUST signal the A2A protocol version on every request — A2A §3.6.1 makes this a client MUST. It travels as the `A2A-Version` service parameter, carried by each binding in its own mechanism (an HTTP header, or gRPC metadata); over HTTP a client MAY instead pass it as a request parameter (`?A2A-Version=1.0`, A2A §3.6.1). An empty value makes the server assume **0.3** (A2A §3.6.2), so the tool MUST set it explicitly. The tool SHOULD expose `--a2a-version`. Absent an explicit value, a tool SHOULD negotiate down to the highest version supported by both itself and the agent as declared on the Agent Card, but MUST NOT negotiate below **1.0**: versions earlier than 1.0 are legacy and MUST require an explicit opt-in. A tool MUST surface a version-unsupported error clearly rather than silently downgrading.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentional. I want to reduce the scope of work to be v1.0 or above.

At the start of the document I also mention that we are taking A2A v1.0 protocol as a the basedline.

Comment thread specification/SPEC.md
| `--metadata <json-string>` | Attach caller-supplied metadata to the message/request as an inline JSON object string (e.g. `'{"k":"v"}'`); values may be any JSON. Sent in the request **payload** (A2A §3.2.5); distinct from `--svc-param`, which sets transport-level parameters (A2A §3.2.6). |
| `-o, --output <text\|json>` | Output **format** only: `text` (default, §6.5, §11.2) or `json`, the protocol's own types (Appendix B). Whether `json` is one document or JSONL is set by `--stream`, not this flag (§11.3). |
| `--poll-interval <duration>` / `--timeout <duration>` | How often to re-check task status while waiting, and how long to wait before giving up (§9.3). |
| `--pretty` | Pretty-print (indent) `-o json --stream` records for human reading instead of the default one-compact-object-per-line JSONL (§11.3). Affects presentation only, not the data. OPTIONAL. |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. A question: What if --pretty is a provided along with --stream or -o as input params for the CLI ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants