Skip to content

Commit 459207c

Browse files
committed
Refactor: use $a2a/v1 namespace
1 parent 3ef45ea commit 459207c

8 files changed

Lines changed: 30 additions & 30 deletions

a2a-over-mqtt/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ The A2A over MQTT profile defines:
1919
## Discovery Interoperability
2020

2121
Agent Cards may also be discovered through HTTP well-known endpoints defined by core A2A conventions.
22-
For MQTT-compliant agents, broker-based discovery on `a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}` is recommended.
22+
For MQTT-compliant agents, broker-based discovery on `$a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}` is recommended.
2323
Clients can discover over HTTP and then choose MQTT from `supportedInterfaces` when invoking the agent.
2424

2525
## Comparison of Transport Binding Capabilities

a2a-over-mqtt/specification/0.1/basic/mqtt_transport.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ Additional terms used in this profile:
3030
Agent Cards **MUST** be published as retained messages at:
3131

3232
```
33-
a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}
33+
$a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}
3434
```
3535

3636
### Direct Interaction Topics
3737

3838
Interaction topics **SHOULD** use:
3939

4040
```
41-
a2a/v1/{method}/{org_id}/{unit_id}/{agent_id}
41+
$a2a/v1/{method}/{org_id}/{unit_id}/{agent_id}
4242
```
4343

4444
Where `{method}` is typically `request`, `reply`, or `event`.
@@ -48,7 +48,7 @@ Where `{method}` is typically `request`, `reply`, or `event`.
4848
Shared pool dispatch uses:
4949

5050
```
51-
a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
51+
$a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
5252
```
5353

5454
## Identifier Format
@@ -69,7 +69,7 @@ a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
6969
## Discovery Interoperability
7070

7171
1. Agent Cards **MAY** be discovered via HTTP well-known endpoints defined by core A2A conventions.
72-
2. For MQTT-compliant agents, publishing retained Agent Cards to `a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}` is **RECOMMENDED**.
72+
2. For MQTT-compliant agents, publishing retained Agent Cards to `$a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}` is **RECOMMENDED**.
7373
3. A client **MAY** discover a card via HTTP and then choose MQTT by selecting an MQTT-capable entry from `supportedInterfaces`.
7474

7575
## Discovery Publisher Behavior
@@ -81,19 +81,19 @@ a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
8181
## Discovery Subscriber Behavior
8282

8383
1. Discovery subscribers **SHOULD** subscribe using scoped filters such as:
84-
- `a2a/v1/discovery/{org_id}/{unit_id}/+`
84+
- `$a2a/v1/discovery/{org_id}/{unit_id}/+`
8585
2. Subscribers **MUST** process retained discovery messages as current registration state.
8686
3. Subscribers **SHOULD** treat subsequent retained updates on the same discovery topic as replacement state for that agent.
8787
4. Subscribers **MAY** combine HTTP-discovered cards and MQTT-discovered cards, but topic-scoped MQTT cards are authoritative for MQTT routing.
8888

8989
## Request/Reply Mapping (MQTT v5)
9090

91-
1. Requesters **SHOULD** publish requests to `a2a/v1/request/{org_id}/{unit_id}/{agent_id}` using MQTT QoS 1.
91+
1. Requesters **SHOULD** publish requests to `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}` using MQTT QoS 1.
9292
2. Requesters **MUST** set MQTT 5 `Response Topic` and `Correlation Data`.
9393
3. Responders **MUST** publish replies to the provided `Response Topic` and **MUST**
9494
echo `Correlation Data`. Replies **SHOULD** be published using MQTT QoS 1.
9595
4. Recommended reply topic pattern:
96-
`a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`.
96+
`$a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`.
9797
5. MQTT `Correlation Data` is transport-level request/reply correlation and **MUST NOT** be used as an A2A task identifier.
9898
6. For newly created tasks, responders **MUST** return a server-generated A2A `Task.id` in the response payload.
9999
7. Requesters **MUST** use that returned `Task.id` for subsequent task operations (for example `tasks/get`, `tasks/cancel`, and subscriptions).
@@ -145,10 +145,10 @@ a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
145145

146146
1. This profile supports an optional unit-scoped shared dispatch mode so compatible responders (same contract/intent) can share request load while keeping standard A2A request/reply behavior.
147147
2. Canonical shared pool request topic:
148-
- `a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
148+
- `$a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
149149
3. Requesters **MUST** publish pooled tasks to the canonical non-shared pool request topic and **MUST NOT** publish directly to `$share/...`.
150150
4. Pool members **MAY** consume pooled requests via:
151-
- `$share/{group_id}/a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
151+
- `$share/{group_id}/$a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
152152
5. All members of the same `{org_id}/{unit_id}/{pool_id}` pool **MUST** use the same `group_id`.
153153
6. `group_id` **SHOULD** be deterministic and stable. Recommended base value:
154154
- `a2a.{org_id}.{unit_id}.{pool_id}`
@@ -159,7 +159,7 @@ a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
159159
- key: `a2a-responder-agent-id`
160160
- value: concrete responder `agent_id`
161161
11. For pooled requests that create tasks, requesters **SHOULD** persist (`Task.id`, `a2a-responder-agent-id`) and **SHOULD** route follow-up operations to the concrete responder direct request topic:
162-
- `a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
162+
- `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
163163
12. A designated agent in the unit **MAY** act as pool registrar and publish/update metadata describing `pool_id`, membership, and the pool request topic.
164164
13. How pool members coordinate membership, liveness, leader election, and failover is implementation-specific and out of scope for this profile.
165165
14. Shared dispatch is intentionally limited to `{org_id}/{unit_id}` scope in this version because unit boundaries map to common tenancy/policy boundaries; cross-unit or org-global shared pools are not defined.
@@ -173,11 +173,11 @@ a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}
173173
5. For this MQTT binding, receipt of a `TaskStatusUpdateEvent.status.state` value of `TASK_STATE_COMPLETED`, `TASK_STATE_FAILED`, or `TASK_STATE_CANCELED` **MUST** be treated as the end of that stream for the given correlation.
174174
6. Requesters **MUST** treat that terminal status as stream completion for the correlated request.
175175
7. If a requester does not receive terminal status within its stream timeout policy, it **MAY** issue follow-up task retrieval (`tasks/get`) using `Task.id`.
176-
8. This end-of-stream rule applies to reply-stream messages on the request/reply path, not to general-purpose `a2a/v1/event/...` publications.
176+
8. This end-of-stream rule applies to reply-stream messages on the request/reply path, not to general-purpose `$a2a/v1/event/...` publications.
177177

178178
## Event Delivery
179179

180-
1. Event messages published to `a2a/v1/event/{org_id}/{unit_id}/{agent_id}` **MAY** use MQTT QoS 0.
180+
1. Event messages published to `$a2a/v1/event/{org_id}/{unit_id}/{agent_id}` **MAY** use MQTT QoS 0.
181181
2. Event publications are outside request/reply correlation unless explicitly tied by application metadata.
182182

183183
## QoS Guidance

a2a-over-mqtt/user-stories/01-security-oauth.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ A user asks Agent A to complete a task with Agent B. Agent A discovers Agent B f
1919
### Preconditions
2020

2121
- Agent B publishes retained Agent Card at:
22-
- `a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}`
22+
- `$a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}`
2323
- Agent B card includes:
2424
- `supportedInterfaces` with MQTT binding
2525
- `securitySchemes` + `securityRequirements` requiring OAuth scopes
@@ -28,17 +28,17 @@ A user asks Agent A to complete a task with Agent B. Agent A discovers Agent B f
2828
### End-to-End Flow
2929

3030
1. Agent A subscribes to:
31-
- `a2a/v1/discovery/{org_id}/+/+`
31+
- `$a2a/v1/discovery/{org_id}/+/+`
3232
2. Agent A receives retained cards and selects Agent B.
3333
3. Agent A checks required security scopes from Agent B card.
3434
4. Agent A obtains OAuth token from IdP/AS:
3535
- If interactive flow is needed, Agent A asks the user to complete login/MFA.
3636
- Agent A receives `access_token`.
3737
5. Agent A sends request to Agent B:
38-
- Topic: `a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
38+
- Topic: `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
3939
- QoS: `1` (recommended)
4040
- MQTT v5 properties:
41-
- `Response Topic`: `a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
41+
- `Response Topic`: `$a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
4242
- `Correlation Data`: request identifier bytes
4343
- User Property key: `a2a-authorization`
4444
- User Property value: `Bearer <access_token>`

a2a-over-mqtt/user-stories/02-request-single-response.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ Agent A sends one request to Agent B and receives exactly one response message o
1111
### Preconditions
1212

1313
- Agent B is discoverable on:
14-
- `a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}`
14+
- `$a2a/v1/discovery/{org_id}/{unit_id}/{agent_id}`
1515
- Agent A has selected Agent B and has a writable request topic plus a subscribed reply topic.
1616

1717
### End-to-End Flow
1818

1919
1. Agent A subscribes to reply topic:
20-
- `a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
20+
- `$a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
2121
2. Agent A publishes one request to:
22-
- `a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
22+
- `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
2323
- QoS: `1` (recommended)
2424
- MQTT v5 properties:
2525
- `Response Topic`: reply topic above

a2a-over-mqtt/user-stories/03-request-multi-response.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ Agent A sends one request and receives multiple response messages (status/artifa
1616
### End-to-End Flow
1717

1818
1. Agent A publishes one request to:
19-
- `a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
19+
- `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
2020
- QoS: `1` (recommended)
2121
- MQTT v5 properties:
22-
- `Response Topic`: `a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
22+
- `Response Topic`: `$a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
2323
- `Correlation Data`: unique request correlation bytes
2424
2. Agent B accepts request and starts work.
2525
3. Agent B publishes multiple reply messages to `Response Topic`:

a2a-over-mqtt/user-stories/04-request-multi-binary-artifact-responses.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ Agent A requests native binary artifact mode and receives multiple binary artifa
1616
### End-to-End Flow
1717

1818
1. Agent A publishes one request to:
19-
- `a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
19+
- `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
2020
- QoS: `1` (recommended)
2121
- MQTT v5 properties:
22-
- `Response Topic`: `a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
22+
- `Response Topic`: `$a2a/v1/reply/{org_id}/{unit_id}/{agent_id}/{reply_suffix}`
2323
- `Correlation Data`: unique request correlation bytes
2424
- User Property key: `a2a-artifact-mode`
2525
- User Property value: `binary`

a2a-over-mqtt/user-stories/05-shared-pool-dispatch.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ Agent A sends a request to a unit-level shared pool topic. Multiple compatible a
1212

1313
- Compatible responder agents are registered under the same unit and support the same service contract.
1414
- Responders subscribe with the same shared group:
15-
- `$share/{group_id}/a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
15+
- `$share/{group_id}/$a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
1616
- Agent A has a subscribed reply topic and can publish to the pool request topic.
1717

1818
### End-to-End Flow
1919

2020
1. Agent A publishes request to:
21-
- `a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
21+
- `$a2a/v1/request/{org_id}/{unit_id}/pool/{pool_id}`
2222
- QoS: `1` (recommended)
2323
- MQTT v5 properties:
24-
- `Response Topic`: `a2a/v1/reply/{org_id}/{unit_id}/{client_agent_id}/{reply_suffix}`
24+
- `Response Topic`: `$a2a/v1/reply/{org_id}/{unit_id}/{client_agent_id}/{reply_suffix}`
2525
- `Correlation Data`: unique request correlation bytes
2626
2. Broker delivers the request to one responder in the shared group.
2727
3. Selected responder processes request and publishes reply to `Response Topic`:
@@ -34,7 +34,7 @@ Agent A sends a request to a unit-level shared pool topic. Multiple compatible a
3434
- `Task.id`
3535
- `a2a-responder-agent-id`
3636
6. Agent A sends follow-up task operations to the concrete responder direct topic:
37-
- `a2a/v1/request/{org_id}/{unit_id}/{a2a-responder-agent-id}`
37+
- `$a2a/v1/request/{org_id}/{unit_id}/{a2a-responder-agent-id}`
3838

3939
### SDK Requirements Checklist
4040

a2a-over-mqtt/user-stories/06-untrusted-broker-security-profile.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ Agent A and Agent B exchange request/reply/stream payloads over MQTT where broke
2020
1. Agent A discovers Agent B and resolves Agent B encryption key from trusted metadata.
2121
2. Agent A builds a JSON-RPC request payload and encrypts it as JWE.
2222
3. Agent A publishes request to:
23-
- `a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
23+
- `$a2a/v1/request/{org_id}/{unit_id}/{agent_id}`
2424
- QoS: `1` (recommended)
2525
- MQTT `Content Type`: `application/jose+json` (or `application/jose`)
2626
- MQTT v5 properties:
27-
- `Response Topic`: `a2a/v1/reply/{org_id}/{unit_id}/{client_agent_id}/{reply_suffix}`
27+
- `Response Topic`: `$a2a/v1/reply/{org_id}/{unit_id}/{client_agent_id}/{reply_suffix}`
2828
- `Correlation Data`: unique request correlation bytes
2929
- `a2a-security-profile=ubsp-v1`
3030
- `a2a-requester-agent-id=<requester_agent_id>`

0 commit comments

Comments
 (0)