a2a
A minimal A2A (Agent-to-Agent) protocol client (EXPERIMENTAL x/ tier, #6 Y2) — completing the agentic triad (S9 MCP client, Y1 MCP server, Y2 A2A) on the shared substrate (jsonrpc + http + json), no new transport. Pure shaping (text-part, message, user-message, send-request, agent-card) + response extractors (message-text, task-state) + the effectful client (send-message, ask). An A2A peer composes as a cx-x/run Runnable via a call-site closure. This is Y2a (protocol + client); Y2b maps A2A onto the xap substrate — tasks→cx-stdlib/journal (replayable lifecycle), messages→cx-stdlib/bus (pub/sub), auth→cx-stdlib/did + vc (signed agent cards + message provenance).
Experimental x/ tier — imported as cx-x/a2a. Bundled and gated in-tree like any other module, but EXEMPT from the frozen-surface stability promise (std-lib README, decision D3): a semver-breaking change is allowed here while the surface settles, and the frozen-surface canary never counts it. Pin behaviour you depend on with your own fixtures.
a2a:text-part
[$a2a:text-part] -> map — Build one text content part {kind:"text", text}.
a2a:message
[$a2a:message] -> map — Build an A2A message {role, parts:[…], messageId, kind:"message"} with a single text part.
a2a:user-message
[$a2a:user-message] -> map — Build a user-role A2A message (the common client send).
a2a:send-request
[$a2a:send-request] -> map — Build the JSON-RPC message/send request carrying a message.
a2a:agent-card
[$a2a:agent-card] ($name::string $description::string $url::string $version::string $skills::any) -> map — Build a minimal A2A Agent Card (name/description/url/version/capabilities/skills). Skills are the caller's — derive them from module source via skills-for.
a2a:skill-of
[$a2a:skill-of] ($d::element) -> map — Map ONE cx-x/tools descriptor to the A2A skill entry ({id,name,description,tags}) — the A2A lossy ruling drops the JSON Schemas and keeps the true annotation hints as tags.
a2a:skills-for
[$a2a:skills-for] ($source::string) -> any — Module source text → the Agent Card skills array from the SAME projection the MCP adapter serves (one model, two lossy adapters). A projection failure propagates its [err].
a2a:message-text
[$a2a:message-text] -> string — Extract the first text part of a Message reply (result.parts[0].text).
a2a:task-state
[$a2a:task-state] -> string — Extract the lifecycle state of a Task reply (result.status.state).
a2a:send-message
[$a2a:send-message] -> any — POST a message/send request to an A2A endpoint (net) and return the parsed reply.
a2a:ask
[$a2a:ask] -> string — Send a user text message to an A2A peer (net) and return its reply text. Compose as a cx-x/run Runnable.