https://dispatch.foo/a2a/ext/gate/v1
From §8 of the Dispatch Messaging Protocol 1.0.0-draft.2.
8.3 Extension activation and placement
The three extensions carry what A2A 1.0 has no field for: DMP addressing, why a task is waiting on its owner, and handoffs of work. Each extension URI serves its own subsection together with this one.
An extension is active for a request when its URI appears in the
A2A-Extensions header or in message.extensions. The response echoes the
active URIs in A2A-Extensions, and a host MUST write extension metadata only
for active extensions. A client that activates none gets the same facts as plain
text in status.message.
Extension data sits in metadata[<URI>]. On a Message (including
status.message) and on an Artifact, the object's extensions list also
names the URI. A Task has no extensions field, so task-level data lives only
in Task.metadata[<URI>], written when the request activated the extension.
All metadata on one message together MUST be at most 64 KiB as JSON; a host
refuses more as invalid on message.metadata. The extensions fit well inside
it: work/v1 tops out near 36 KB and envelope/v1 near 15 KB with inbound refs
restricted as §8.4 says. Body (64 KiB), data (64 KiB),
metadata (64 KiB) and A2A's framing fit a 256 KiB request. Vectors:
a2a.envelope-ext.refuses-metadata-over-64-kib.
Each extension is versioned by its URI: a breaking change mints a new URI ending
/v2 (§14.4). The registry of extension URIs is
§11.10.
8.5 gate/v1
https://dispatch.foo/a2a/ext/gate/v1 is data only, and read only: it rides on
status.message.metadata while a task is TASK_STATE_AUTH_REQUIRED
(§8.7), and says which gates hold the task open.
interface GateStateV1 {
gates: {
id: string; // the gate's DMP message id
type: string; // the gate's type (§5.6)
openedAt: string; // ISO 8601
waitingOn: 'owner';
}[];
}
Only a deciding principal answers a gate, and a client never can
(§5.2). A gate's data never leaves the host
(§5.8): a tool-approval gate quotes a tool's input and a
scope gate names paths. Only each gate's id, type and time leave, here, and
status.message carries one fixed sentence per type in place of the gate's
body. The Dispatch profile's sentences:
task-proposal: "Waiting for the project owner to approve this handoff."tool-approval: "Waiting for the project owner to approve a tool call."scope: "Waiting for the project owner to approve a change of scope."wake: "Waiting for the project owner to approve waking the task."
Vectors: a2a.projection.row-8-an-open-gate-needs-authorization,
a2a.projection.row-8-gate-v1-lists-id-type-and-time,
a2a.projection.row-8-a-handoff-waits-on-its-proposal,
a2a.egress.gate-data-never-reaches-a-client,
a2a.egress.a-reply-to-a-gate-never-reaches-a-client.