docs(web-ui/dashboard): document K3PT ST4T3 stale perms + active model badge

Two undocumented features from recent commits:

feat(core) 6ab0757cc6: K3PT ST4T3 now has two
sub-sections — tombstones (existing) and a new 'stale permission entries'
list showing agents with capability/tool-group JSON entries but no live
container. Lazy-loaded, auto-refreshes on capabilities_changed +
tool_groups_changed; each entry has a 'clear perms' button.

feat(dash) 4375ab6246: container rows show an
active model badge (blue) when the container is running and the harness has
persisted a model name in harness/hyperhive-model. Stale values suppressed
for stopped containers.
This commit is contained in:
iris 2026-07-02 12:22:03 +02:00
commit b63c6c543d
2 changed files with 52 additions and 8 deletions

View file

@ -94,6 +94,13 @@ through. Three flex columns:
`model_changed` events so it stays accurate when the model is
changed from another session. Clicking the already-active model
closes the menu without an extra POST.
A second separator + **effort quick-picker** section labelled
`effort` appears when the backend declares effort levels in
`state.available_efforts`. One button per level (e.g. `medium`,
`high`, `xhigh`); clicking POSTs `/api/effort` (same endpoint as
the `/effort <level>` slash command). The active level's button is
highlighted; `renderEffortChip` keeps the picker in sync with
`StateSnapshot.effort` from the cold-load snapshot.
The popover's display rules are scoped to `:not([hidden])` so the
`[hidden]` HTML attribute's UA `display: none` isn't overridden by
the author CSS's `display: flex` — the popover stays hidden until
@ -152,10 +159,14 @@ messages for this agent are acked, the harness won't receive
wake-prompts for them. A `{ marked: N }` pill surfaces the count.
After the drain the inbox list empties on reload (the filter is
`acked_at IS NULL`, so drained messages disappear). Loose-ends flyout: questions,
approvals, and reminders pending against this agent (`GET /api/loose-ends`);
approvals, reminders, pending inbox messages, and unread matrix
notifications pending against this agent (`GET /api/loose-ends`);
question rows carry an inline answer form that POSTs cross-origin to
the core dashboard's `POST /api/answer-question/{id}` so the operator answers
*as operator* (see `docs/boundary.md`). Tasks flyout: in-flight bash
*as operator* (see `docs/boundary.md`). Pending inbox messages (`✉ inbox
— N pending message(s)`) and unread matrix rooms appear informational
only (not cancellable from the flyout — drain with `recv` / `mark_read`
in-turn). Tasks flyout: in-flight bash
tasks (`GET /api/bash-tasks`); each row shows status (`▶ running` /
`◷ queued`), the task id, elapsed time, and a truncated one-line
command preview. Read-only — kill/inspect lives in the harness, not
@ -251,6 +262,10 @@ Slash commands today:
Takes effect on the next turn; persisted to
`/state/hyperhive-model` so the override survives harness
restart / rebuild.
- `/effort <level>``POST /api/effort` setting the claude effort
level (`medium` / `high` / `xhigh`). Takes effect on the next
turn. The overflow menu surfaces an effort picker that calls the
same endpoint; both stay in sync via `StateSnapshot.effort`.
- `/new-session``POST /api/new-session` (confirms first).
Arms a one-shot on the Bus; next turn runs without
`--continue`, dropping the resume session entirely.
@ -320,8 +335,9 @@ shaped).
- `GET /api/state` — cold-load snapshot (`StateSnapshot`) consumed by
`app.js` on page load and while `status === 'needs_login_in_progress'`.
Includes `turn_state`, `context_window_tokens`, `qualified_label`,
`available_models`, `available_efforts`, `links`, and other fields described inline
throughout this document. All subsequent state updates arrive via SSE.
`available_models`, `effort`, `available_efforts`, `links`, and
other fields described inline throughout this document. All
subsequent state updates arrive via SSE.
- `GET /api/dashboard-state` — lean snapshot of agent-owned fields
fetched once per running agent by the dashboard's container row to
get fresh values without relying on hive-c0re's periodic file-reads.