HTTP+JSON routes
ess/http.yaml binds operations of the specification to A2A's HTTP+JSON paths (ess-http/1), and ess generate --kind openapi --http projects it to generated/openapi-http/openapi/a2a-agent.yaml. task check holds that document's (method, path) pairs to upstream/openapi/a2a.openapi.yaml, the paths A2A's a2a.proto declares, and fails on a difference ess/http-unmapped.tsv does not name, or on a named one that no longer differs.
9 of A2A's 22 routes are served at their path. The other 13 are listed below with the reason ESS cannot serve them there, and so are the 12 projected routes that are not A2A's.
Served at A2A's pathโ
| Method | Path | Operation |
|---|---|---|
POST | /message:send | command a2a.tasks.SendMessage |
POST | /message:stream | command a2a.tasks.SendStreamingMessage |
GET | /tasks/{id} | command a2a.tasks.GetTask |
GET | /tasks | view a2a.tasks.Tasks |
POST | /tasks/{taskId}/pushNotificationConfigs | command a2a.tasks.CreateTaskPushNotificationConfig |
GET | /tasks/{taskId}/pushNotificationConfigs/{id} | command a2a.tasks.GetTaskPushNotificationConfig |
GET | /tasks/{taskId}/pushNotificationConfigs | command a2a.tasks.ListTaskPushNotificationConfigs |
DELETE | /tasks/{taskId}/pushNotificationConfigs/{id} | command a2a.tasks.DeleteTaskPushNotificationConfig |
GET | /extendedAgentCard | command a2a.discovery.GetExtendedAgentCard |
More columns: swipe horizontally, or focus the table and use the arrow keys.
A2A routes not served at their pathโ
| Method | Path | Reason |
|---|---|---|
GET | /{tenant}/extendedAgentCard | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment, ESS-HTTP-011 since a literal takes no precedence over a variable: overlaps get /tasks/{id} (ess/http.yaml) |
POST | /{tenant}/message:send | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment (ess/http.yaml) |
POST | /{tenant}/message:stream | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment (ess/http.yaml) |
GET | /{tenant}/tasks | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment, ESS-HTTP-011 since a literal takes no precedence over a variable: overlaps get /tasks/{id} (ess/http.yaml) |
GET | /{tenant}/tasks/{id} | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment, ESS-HTTP-011 since a literal takes no precedence over a variable: overlaps get /tasks/{taskId}/pushNotificationConfigs and get /views/tasks/pushNotificationConfigs (ess/http.yaml) |
POST | /{tenant}/tasks/{id}:cancel | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment, ESS-HTTP-007 {id}:verb is not a whole variable (ess/http.yaml) |
GET | /{tenant}/tasks/{id}:subscribe | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment, ESS-HTTP-007 {id}:verb is not a whole variable (ess/http.yaml) |
GET | /{tenant}/tasks/{taskId}/pushNotificationConfigs | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment, ESS-HTTP-011 since a literal takes no precedence over a variable: overlaps get /tasks/{taskId}/pushNotificationConfigs/{id} (ess/http.yaml) |
POST | /{tenant}/tasks/{taskId}/pushNotificationConfigs | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment (ess/http.yaml) |
GET | /{tenant}/tasks/{taskId}/pushNotificationConfigs/{id} | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment (ess/http.yaml) |
DELETE | /{tenant}/tasks/{taskId}/pushNotificationConfigs/{id} | UNMAPPED (ESS gap): the /{tenant}/ additional binding; ESS-HTTP-005 an operation has one route, ESS-HTTP-009 Optional<String> tenant cannot be a path segment (ess/http.yaml) |
POST | /tasks/{id}:cancel | UNMAPPED (ESS gap): ESS-HTTP-007 a variable is a whole segment, so {id}:verb is refused; served on its derived route (ess/http.yaml) |
GET | /tasks/{id}:subscribe | UNMAPPED (ESS gap): ESS-HTTP-007 a variable is a whole segment, so {id}:verb is refused; served on its derived route (ess/http.yaml) |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Projected routes that are not A2A'sโ
| Method | Path | Reason |
|---|---|---|
POST | /tasks/commands/tasks:cancel | Stand-in for UNMAPPED post /tasks/{id}:cancel: derived route of a2a.tasks.CancelTask (ESS-HTTP-007) |
POST | /tasks/commands/tasks:subscribe | Stand-in for UNMAPPED get /tasks/{id}:subscribe: derived route of a2a.tasks.SubscribeToTask (ESS-HTTP-007) |
POST | /tasks/commands/tasks:complete | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
POST | /tasks/commands/tasks:fail | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
POST | /tasks/commands/tasks:reject | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
POST | /tasks/commands/tasks:require_auth | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
POST | /tasks/commands/tasks:require_input | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
POST | /tasks/commands/tasks:update_artifact | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
POST | /tasks/commands/tasks:work | Not an A2A operation: agent-side lifecycle command (ess/domains/tasks.yaml), on its derived route |
GET | /tasks/views/allPushNotificationConfigs | Not an A2A operation: observation view (ess/domains/tasks.yaml views), on its derived route |
GET | /tasks/views/allTasks | Not an A2A operation: observation view (ess/domains/tasks.yaml views), on its derived route |
GET | /views/tasks/pushNotificationConfigs | Not an A2A operation: view a2a.tasks.TaskPushNotificationConfigs, moved off its derived route, which overlaps get /tasks/{taskId}/pushNotificationConfigs (ESS-HTTP-011) |
More columns: swipe horizontally, or focus the table and use the arrow keys.