feat(agent-team): LAN-only read-only status dashboard for the coordinator #48

Merged
amoussa1229 merged 7 commits from feat/agent-team-status-page into main 2026-06-23 19:55:02 +00:00

7 commits

Author SHA1 Message Date
505fdeebd3 docs(agent-team): describe the live pipeline map + /api/state endpoint 2026-06-23 15:53:04 -04:00
4e75a0bf93 test(agent-team): cover live pipeline map + /api/state JSON contract
- render_html includes the inline SVG map + inline fetch('/api/state') poller
  + tooltip mount + live clock, stays offline (no CDN), keeps the <noscript>
  meta-refresh fallback, and renders the map even on a not-ok snapshot.
- snapshot_to_dict: expected top-level keys, one entry per STAGE in order,
  per-phase grouping, awaiting-human classification (open pending_question),
  per-node model/agent role labels, summary counts, not-ok serializability.
- Descriptions escaped in BOTH the HTML and the JSON-in-script seed
  (</script><script> breakout neutralised; \u003c form present); the raw
  /api/state JSON round-trips the description for textContent rendering.
- End-to-end snapshot_to_dict over the seeded ledger.
2026-06-23 15:53:04 -04:00
72098ba26e feat(agent-team): live visual pipeline map for the status dashboard
Turn the read-only status page into an auto-updating visual map of the
agent-team DAG (INTAKE -> CLARIFY <-> gate -> PLAN <-> REVIEW ->
[BUILD -> VERIFY -> DISPATCH] -> DONE), rendered as hand-rolled inline
SVG (no CDN/D3 — the R720 is offline/LAN-only).

- Stage model (STAGES) with per-node model/agent role labels (Claude/
  GPT-4.1/Gemini/DeepSeek/Slack owner) and gated/role-node flags.
- Per-stage live state (idle/active/awaiting-human/parked) + count badge,
  grouped by current_phase; awaiting-human = OPEN pending_question.
- GET /api/state JSON sidecar (snapshot_to_dict); inline vanilla-JS poller
  fetches it every 4s and repaints node states/counts/cards/clock/tooltip
  in place (no reload, hover/scroll survive). <noscript> meta-refresh
  fallback retained.
- Hover/focus tooltip per node: short_id, description, status, waiting age.
- Existing table view kept as a detail section below the map.
- Read-only (mode=ro), fail-safe, no secrets; descriptions escaped for both
  HTML and the JSON-in-script seed (< / > -> \uXXXX), DOM via textContent.
2026-06-23 15:53:04 -04:00
bd5bec2f9a docs(agent-team): install/run notes for the read-only status dashboard 2026-06-23 15:53:04 -04:00
de215dfb64 test(agent-team): unit tests for status_page render + read-only reader 2026-06-23 15:53:04 -04:00
97a4befd24 feat(agent-team): systemd unit for the read-only status dashboard 2026-06-23 15:53:04 -04:00
3ddd9ca08c feat(agent-team): read-only LAN status dashboard module (status_page.py) 2026-06-23 15:53:04 -04:00