openoperator / docs /argus /a2a-compatibility.md
OpenOperator Deployer
Deploy source revision ef73a4b421f2d1ececca20f99c9118f4621c5e28
6918275
|
Raw History Blame Contribute Delete
3.79 kB
# OpenTraining compatibility and safe control
This is a client-side compatibility boundary, not an assertion about the currently
deployed OpenTraining. No OpenTraining implementation was changed.
Discovery tries `<A2A base>/.well-known/agent-card.json`, then `agent.json`, using
verified HTTPS, no redirects, finite timeouts and a 1 MiB response cap. A card must
have a name and skills array. Standard `message/send` (nonblocking), `tasks/get`
(history length zero) and artifacts are tentative until the remote accepts them.
Method-not-found marks the logical capability unavailable. Raw remote errors are
never surfaced; safe codes only. No capability is inferred from natural language.
Standard task identity is `result.id`; state is `result.status.state`. Compact
campaign metadata lives at `result.metadata.argus_supervisor`:
`revision`, `stage`, `run_id`, `attempt_id`, `source_sha`, `evidence_revision`,
`evidence_ref`, `blocked`. Ordinary metrics/stdout/history are ignored. Artifacts
are bounded data; file URLs are never followed automatically. A completed task is
an attempt outcome, never proof the entire mission was accepted.
To enable mutation the card must advertise this extension:
```json
{
"uri": "urn:openoperator:campaign-control:v1",
"params": {
"lease_epoch_enforced": true,
"policy_enforced": true,
"operations": {
"claim_control": "campaign/claim_control",
"read_control": "campaign/read_control",
"renew_control": "campaign/renew_control",
"release_control": "campaign/release_control",
"intervene": "campaign/intervene",
"request_status": "campaign/request_status",
"cancel": "tasks/cancel"
}
}
}
```
The remote must also enforce the `constraints` envelope sent with claims and
mutations: remote-only execution and no publication, destructive Git, credential
changes, force push or merge. A model cannot relax that envelope. Advertisement
without both lease and policy enforcement leaves mutation disabled.
Each operation is optional and independently detected. Without read_control and
claim_control the client remains an observer. `read_control` is required beyond
the spec's logical operations because local state alone cannot prove authority.
`request_status` is needed to safely reconcile an ambiguous write; absence never
permits a retry. These are explicit missing remote prerequisites if the service
only implements generic Agent Zero A2A.
Lease objects contain `controller_id`, integer `epoch`, and Unix `expires_at`.
Claim receives campaign ID, controller ID, TTL and unique request ID. The remote
must serialize claims, change epochs monotonically on takeover, enforce expiry
and reject stale epochs on **every** mutation. Renewal/readback must agree.
Renew/release/intervene/cancel carry campaign ID, controller ID, controller epoch,
request ID and operation parameters. Cancellation targets the bound task only.
Submit uses `message/send` with `configuration.blocking=false`, a stable message
ID equal to the request ID, and
`metadata.argus_supervisor={campaign_id,controller_id,controller_epoch,request_id}`.
Optional project selection is also metadata and must be supported remotely.
A successful response must return a durable task ID promptly; no multi-hour
blocking request. Every logical mutation is single-shot locally. The remote must
provide persistent request-ID idempotency and readback if full ambiguous-write
recovery is to be qualified.
`campaign/request_status` receives campaign ID and original request ID. It returns
that exact request ID, `state=applied|not_applied`, and the durable task ID for an
applied submission. Readback clears ambiguity only, never automatically resends
or silently reacquires control. Live remote support is unverified until qualified.