docs(agent-team): describe the live pipeline map + /api/state endpoint
This commit is contained in:
parent
4e75a0bf93
commit
505fdeebd3
1 changed files with 24 additions and 7 deletions
|
|
@ -165,12 +165,28 @@ not change to `0.0.0.0`). See the deploy script's step 6 for how to start it.
|
||||||
|
|
||||||
### Status dashboard (optional, LAN/VPN-only, READ-ONLY)
|
### Status dashboard (optional, LAN/VPN-only, READ-ONLY)
|
||||||
|
|
||||||
`agent_team/status_page.py` serves a tiny self-refreshing HTML page showing the
|
`agent_team/status_page.py` serves a **live visual pipeline map** of the
|
||||||
coordinator queue: each task's short `thread_id`, description, current phase and
|
coordinator. The top of the page is a hand-rolled inline-SVG diagram of the
|
||||||
status; which tasks have an **open** pending question (blocked on the human gate)
|
agent-team DAG (`INTAKE → CLARIFY ⇄ human gate → PLAN ⇄ REVIEW →
|
||||||
vs. progressing; active/parked counts; and recent `budget_ledger` spend. It opens
|
[BUILD → VERIFY → DISPATCH] → DONE`); each stage node is labelled with its model
|
||||||
the SQLite ledger **READ-ONLY** (`mode=ro`) and has **no mutating endpoints and
|
role (Claude on subscription for CLARIFY/PLAN/VERIFY, GPT-4.1 cross_reviewer for
|
||||||
no auth**.
|
REVIEW, Gemini for SCAN, DeepSeek fast_coder for BUILD, the Slack owner for the
|
||||||
|
HUMAN GATE) and is colour-coded by live state — idle / active / awaiting-human
|
||||||
|
(an **open** pending question) / parked — with a count badge of tasks in that
|
||||||
|
stage. Hovering (or keyboard-focusing) a node shows what it is working on: the
|
||||||
|
short `thread_id`, description, status, and waiting age of each task there.
|
||||||
|
Below the map, the original detail tables remain: all tasks, the human-gate
|
||||||
|
wait-list, and recent `budget_ledger` spend.
|
||||||
|
|
||||||
|
The page **auto-updates without a full reload**: a `GET /api/state` JSON sidecar
|
||||||
|
returns the same snapshot, and an inline vanilla-JS poller (`fetch()`, no
|
||||||
|
libraries, no CDN) re-paints node states, counts, the cards, the tooltip data,
|
||||||
|
and the "last updated" clock every ~4s in place, so hover/scroll/focus survive.
|
||||||
|
A `<noscript>` 10s meta-refresh is the JS-disabled fallback. Everything
|
||||||
|
(SVG + CSS + JS) is inline in the served document — nothing is fetched from a
|
||||||
|
CDN, because the VM is offline/LAN-only. It opens the SQLite ledger
|
||||||
|
**READ-ONLY** (`mode=ro`), exposes only the two read GETs (`/` and `/api/state`)
|
||||||
|
and **no mutating endpoints and no auth**.
|
||||||
|
|
||||||
It is a **separate, optional process** — `agent-team-status.service` (mirrors the
|
It is a **separate, optional process** — `agent-team-status.service` (mirrors the
|
||||||
coordinator unit's hardening; `User=adam`, `EnvironmentFile=-/home/adam/secrev.env`,
|
coordinator unit's hardening; `User=adam`, `EnvironmentFile=-/home/adam/secrev.env`,
|
||||||
|
|
@ -191,7 +207,8 @@ cd ~/orchestrator/agent-team && . .venv/bin/activate && \
|
||||||
python3 -c "from agent_team.status_page import serve; serve()"
|
python3 -c "from agent_team.status_page import serve; serve()"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then browse `http://10.10.60.120:8770/` from the LAN/VPN.
|
Then browse `http://10.10.60.120:8770/` from the LAN/VPN (the live map polls
|
||||||
|
`http://10.10.60.120:8770/api/state` itself).
|
||||||
|
|
||||||
**Config (env):** `AGENT_TEAM_DB` (default `state/agent_team.sqlite`),
|
**Config (env):** `AGENT_TEAM_DB` (default `state/agent_team.sqlite`),
|
||||||
`AGENT_TEAM_STATUS_HOST` (default `0.0.0.0`), `AGENT_TEAM_STATUS_PORT` (default
|
`AGENT_TEAM_STATUS_HOST` (default `0.0.0.0`), `AGENT_TEAM_STATUS_PORT` (default
|
||||||
|
|
|
||||||
Reference in a new issue