manager: needs_login / logged_in / needs_update events + update tool

crash_watch grows two more state-axes alongside running/stopped:

- logged-in (claude session dir populated for the agent)
- up-to-date (recorded flake rev matches current)

per-tick transitions emit HelperEvent::NeedsLogin / LoggedIn /
NeedsUpdate. seed-on-first-tick semantics retained — nothing fires
on harness boot for agents that were already in their state. only
needs_update fires the 'stale appeared' direction; the resolved
direction is already covered by Rebuilt.

new mcp__hyperhive__update(name) on the manager surface: idempotent
rebuild via auto_update::rebuild_agent. transient-aware (Rebuilding)
so the dashboard shows the spinner. login intentionally has NO tool
— it's interactive OAuth, only the operator can complete it.

prompts + approvals doc + turn-loop doc updated. todo grows a
'show per-agent applied config in dashboard' entry (separate
follow-up).
This commit is contained in:
müde 2026-05-15 21:42:13 +02:00
parent b374f39b0d
commit 80229c6af9
8 changed files with 230 additions and 34 deletions

View file

@ -44,6 +44,15 @@ Pick anything from here when relevant. Cross-cutting design notes live in
## UI / UX
- **Dashboard: show per-agent applied config.** Surface
`/var/lib/hyperhive/applied/<name>/agent.nix` (the file the
container actually builds from) as a collapsible `<details>`
block on each container row, alongside the journald viewer.
Backend: new `GET /api/agent-config/{name}` returns the file
contents (text/plain). Frontend: lazy-fetch on expand, render
inside a `<pre>` with the same theming as the journal panel.
Useful for spot-checking what `request_apply_commit` produced
without ssh-ing in.
- **xterm.js terminal** embedded per-agent, attached to a PTY exposed by
the harness. Pairs well with the unprivileged-container work — would let
the operator drop into the container without `nixos-container root-login`.