OpenOperator Deployer
Deploy source revision ef73a4b421f2d1ececca20f99c9118f4621c5e28
6918275
|
Raw History Blame Contribute Delete
8.84 kB
# Argus Supervisor (Face A)
Native OpenOperator profile and plugin for supervising **remote** OpenTraining
campaigns. Argus owns campaign decisions; Foreman is a bounded evidence sentinel.
Neither this plugin nor Foreman runs Training Master, Colab or Kaggle locally.
The governing specification is [here](../../docs/argus/openoperator_argus_supervisor_spec.md).
The plugin is discoverable by the existing loader but external work is disabled
until `ARGUS_SUPERVISOR_ENABLED=1`. It uses the existing authenticated HTTP service,
startup migration, job loop and DeferredTask owner. No extra listener is started.
The explicit unprefixed plugin name is required by the implementation contract.
## Configuration
Set through environment/Space secrets, never chat task text or tracked files:
| Variable | Meaning/default |
| --- | --- |
| `ARGUS_SUPERVISOR_ENABLED` | `0`; opt in with `1` |
| `OPENTRAINING_A2A_URL` | HTTPS A2A base, such as `https://service.example/a2a`; **no embedded token** |
| `OPENTRAINING_A2A_TOKEN` | Secret; sent as Bearer and X-API-KEY, never to model processes |
| `OPENTRAINING_A2A_PROJECT` | Optional project metadata; remote must support project selection |
| `ARGUS_SUPERVISOR_CONTROLLER_ID` | `argus-openoperator` |
| `ARGUS_SUPERVISOR_HEARTBEAT_SECONDS` | `120`; minimum 60, rounded up by the existing 60-second job-loop cadence |
| `ARGUS_SUPERVISOR_LEASE_TTL_SECONDS` | `600`; bounded 60–3600 |
| `ARGUS_SUPERVISOR_STATE_ROOT` | `/a0/usr/argus-supervisor` |
| `ARGUS_SUPERVISOR_ARGUS_HOME` | `<state root>/argus-home`; must stay under state root |
| `ARGUS_SUPERVISOR_ARGUS_PYTHON` | `/opt/venv-argus/bin/python` |
| `ARGUS_SUPERVISOR_BACKEND` | Required for model decisions; upstream-supported CLI backend, e.g. `codex`; no inferred default |
| `ARGUS_SUPERVISOR_FOREMAN_ENABLED` | `0`; advisory opt in with `1` |
| `ARGUS_SUPERVISOR_FOREMAN_PYTHON` | `/opt/venv-foreman/bin/python` |
Argus is installed at a source SHA into `/opt/argus` and `/opt/venv-argus`;
Foreman into `/opt/foreman` and `/opt/venv-foreman`. `runtime/source-lock.json`
records exact sources; constraint files pin qualified dependencies. The existing
framework venv is untouched by these installers. No runtime installation or sudo.
Argus's `argus` executable exists, but it can launch a cockpit: the bridge instead
calls the pinned Python API (`MemoryBundle`, upstream Manager and LifeSupervisor)
and pure CLI for operator answers. It never starts Argus's Web server or TUI.
Backend/model/credential configuration comes from the supported upstream
`ARGUS_SKILL_*` environment and the selected provider CLI. Configure that backend
before enabling autonomous decisions. Agent Zero's chat-model settings do not
implicitly configure Argus. Model decisions are finite, with a 120-second process
budget and two-round cap; timeout leaves a durable Needs you receipt, not a replay.
Argus logs/state live under its persistent home, not `/opt`.
Foreman uses upstream `JevForemanModel`, `FactoryObservation`, responsibility
registry and `FactoryPolicy`. Configure `TYPESAFE_API_KEY` and the matching
`TYPESAFE_BASE_URL` per upstream documentation (or the provider default).
Only completion, verification, worker health and human escalation are selected;
repository-instruction checks are not invented for an unseen remote repository.
`START_WORKER`, an additional upstream directive, becomes a `STEER_WORKER` planning
hint. No directive has a direct mutation path. FINISH is only candidate completion.
An unavailable sentinel does not block Argus or existing remote execution.
## Native API and workflow
All routes are authenticated POSTs with the existing session/CSRF rules:
- `/api/plugins/argus_supervisor/health`: runtime presence, configured booleans,
pins, last tick and discovered logical capabilities; no credentials/endpoint URL.
- `/api/plugins/argus_supervisor/status`: compact campaigns and visible events.
- `/api/plugins/argus_supervisor/campaigns`: list/get; `action=create` with
`campaign_id`, `objective`, optional `remote_task_id`, `max_attempts` (default 3,
bounded 1–20). An attached remote task is never resubmitted.
- `/api/plugins/argus_supervisor/campaign_action`: `campaign_id`, `action`, arguments.
Actions: observe, mission, claim, release, pause, resume, submit, intervene,
cancel, answer, resolve_intent. `epoch` is mandatory for remote mutations except
an explicit claim. Submit takes `text`; intervene `instruction`; cancel `reason`.
Create/attach → observe → mission (bind real Argus project) → explicitly claim if
remote capabilities support it. Claim never happens implicitly. Most ticks read
compact status only. Revision, stdout, cursor and routine metrics alone do not
wake either model. Significant events use a durable deduplicated outbox. Pure
EVIDENCE_READY with Foreman CONTINUE is retained without waking Argus.
State transitions, blockers, attempt outcomes, evidence and control changes can
wake Argus. Only Needs you, attempt outcomes, stage transitions, mission completion
and critical infrastructure/control loss are returned as public events. APIs
return retained event IDs for consumer deduplication; the job loop never injects
chat messages. There is no new WebUI panel or notification spam.
Every action needs fresh remote readback, a matching unexpired controller epoch,
and advertised remote epoch/policy enforcement. Argus proposals additionally need a fresh independent
Reviewer verdict tied to that event; old reviews and Foreman FINISH cannot authorize
an action. Approved decision IDs are consumed durably before relay. The adapter
adds authority outside task text, never accepts a model-provided epoch or task ID,
and limits submissions to the campaign's configured attempt bound.
A human API action is explicit authenticated operator control. Argus unavailable
means no autonomous proposals are executed; observations continue. Pause stops
polling/renewal; the remote lease expires unless the operator releases first.
Resume only observes/readbacks; it does not claim a lease.
A mutation intent is saved **before** network I/O. Any ambiguous response or
interruption retains it, drops local control and blocks replay. `resolve_intent`
requires authoritative remote request-ID readback (`applied`/`not_applied`) and
never resends or reacquires. If that operation is unsupported, keep observing and
reconcile manually at the remote service. Never delete the journal to force retry.
Interrupted Argus turns also remain durably ambiguous; inspect its local receipt
and upstream backlog rather than replaying the same event. A new operator answer
or new significant event can request another finite decision boundary.
## Remote compatibility contract
See [the public A2A contract](../../docs/openoperator-a2a.md). Standard A2A is
sufficient for tentative `message/send`, `tasks/get` and task evidence; every
mutation is still prohibited without an advertised and verified lease extension.
Skill prose never grants authority. Unsupported methods are reported explicitly.
No remote source is modified by this implementation.
## Recovery and validation
Campaign JSON is the atomic authority for event outbox, remote IDs, lease snapshot,
mission binding, mutation intent and consumed decisions. Separate lease JSON and
event JSONL are diagnostic projections. Nonblocking file locks serialize campaign
transactions across processes and framework/API threads. Corruption fails closed;
it is not silently replaced. Read failures back off to 30 minutes and surface one
critical event at three consecutive failures; they do not invent a failed attempt.
Startup verifies bindings through the real runtime and rechecks remote state and
leases. Local journal ownership alone is insufficient; no startup claim or submit.
Foreman has no execution dependency on the A2A client. Argus/Foreman receive bounded,
redacted UNTRUSTED_REMOTE_DATA envelopes and no OpenTraining credentials. Raw Argus
traces stay in its private local home. This is process/dependency isolation, not an
OS sandbox for a separately configured trusted backend CLI.
Run the framework tests with `python -m pytest plugins/argus_supervisor/tests -q`.
To include real isolated package contracts, set `ARGUS_TEST_ARGUS_PYTHON` and
`ARGUS_TEST_FOREMAN_PYTHON`; without those, those two checks explicitly skip. CI
installs the pinned environments and selects them. Fake endpoint tests use real
loopback HTTP; no model/provider key is required. Follow the qualification report
for live release checks. Heartbeat does not prevent Hugging Face platform sleep.
JSON-RPC requests use the canonical trailing-slash mount root (`/a2a/`); Agent Card
discovery appends its own well-known suffix. The same production client performs
both. No redirect carrying credentials and no alternate client are introduced.