dashboard: the build pages are tabs of the dashboard
The build lifecycle used to be its own page with three sub-tabs. They are now dashboard tabs (rebuild, meta, buildlogs) beside SW4RM and P3RM1SS10NS: builds.js is a module tabs.js imports, so the dashboard's one tab strip, /api/state snapshot and event stream (plus the meta_inputs_changed and meta_update_running kinds) serve them, and the page, its bundle entry, stylesheet and home tile are gone. The SW4RM banner's "view queue" link points at the #rebuild tab, and the rebuild tab carries a count pill of the rebuilds in flight. An empty tab-count pill drew a "0": its display beat the UA [hidden] rule.
This commit is contained in:
parent
b5053d9a80
commit
ee5c057d8f
22 changed files with 386 additions and 456 deletions
|
|
@ -33,7 +33,7 @@ swarm controller and hive-c0re each build their own graph on it.
|
|||
|
||||
Two views, one per graph, drawn by the same component: the swarm UI's
|
||||
`/jobs` page shows the swarm controller's graph, and the hive dashboard's
|
||||
**BU1LDS** page (R3BU1LD QU3U3 — see
|
||||
**R3BU1LD QU3U3** tab (see
|
||||
[`web-ui/dashboard.md`](../web-ui/dashboard.md)) shows that hive's. Each
|
||||
**row** is one job; the rows nested under it are that job's steps, in
|
||||
order (occasionally a couple run side by side). A step shows one of:
|
||||
|
|
|
|||
|
|
@ -11,21 +11,23 @@ what you actually do here.
|
|||
## Where things are
|
||||
|
||||
Everything starts at the **H0M3 hub**, served at `/` — a grid of tiles
|
||||
linking to every surface (Dashboard, Flow, Logs, Builds, Stats,
|
||||
linking to every surface (Dashboard, Flow, Logs, Stats,
|
||||
Settings, Core). Every page links back to H0M3, so you're
|
||||
never more than one step from the hub.
|
||||
|
||||
The **dashboard** itself (`/dashboard.html`) is where you'll spend most
|
||||
of your time. It's a single page with exactly two tabs:
|
||||
of your time. It's a single page with five tabs:
|
||||
|
||||
- **SW4RM** — every agent, live. This is the default tab and the one
|
||||
you'll check most.
|
||||
- **R3BU1LD QU3U3**, **M3T4 1NPUTS** and **BUILD L0GS** — the build
|
||||
lifecycle: the rebuild queue with a live log of whatever is building,
|
||||
the meta flake inputs you can bump, and the build log history.
|
||||
- **P3RM1SS10NS** — what tools and system-level access each agent has.
|
||||
|
||||
Everything else lives on its own page instead, all reachable from the
|
||||
H0M3 hub: **Flow** (`/flow.html`, the raw live message stream across
|
||||
the whole swarm), **Stats** (`/stats.html`, swarm-wide usage stats),
|
||||
**Builds** (`/builds.html`, the rebuild queue and build history), and
|
||||
the whole swarm), **Stats** (`/stats.html`, swarm-wide usage stats), and
|
||||
**Core** (`/core.html`, tombstones and container resource use).
|
||||
|
||||
Each agent also has its own page — a full terminal view of that
|
||||
|
|
@ -52,7 +54,7 @@ per-agent `⋮` menu on a single row. Rebuilding re-applies that agent's
|
|||
current config; use it whenever an agent
|
||||
shows as "needs update."
|
||||
|
||||
**Watch a build.** BU1LDS shows the rebuild queue live, plus a
|
||||
**Watch a build.** The dashboard's R3BU1LD QU3U3 tab shows the rebuild queue live, plus a
|
||||
streaming log of whatever's currently building. Useful right after
|
||||
merging a config change or bumping a flake input.
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ matrix accounts, the controller's job graph — are on the
|
|||
|
||||
hive-c0re serves the dashboard at `/dashboard.html` (with the home page at `/`).
|
||||
It has a fixed chrome header at the top and a `<main>` that shows exactly
|
||||
one tab pane at a time. The URL hash (`#swarm`,
|
||||
`#permissions`) drives which pane is
|
||||
one tab pane at a time. The URL hash (`#swarm`, `#rebuild`, `#meta`,
|
||||
`#buildlogs`, `#permissions`) drives which pane is
|
||||
active; hash changes don't reload the page. FL0W and the other
|
||||
standalone pages are reachable from the H0M3 hub at `/`, not
|
||||
from the dashboard tab strip.
|
||||
|
|
@ -19,17 +19,18 @@ from the dashboard tab strip.
|
|||
**Chrome header** (fixed, overlays the active tab pane):
|
||||
- **← home back-link**: top-left of the chrome, links to the H0M3 hub
|
||||
at `/`. Every surface links back to the hub rather than to each other.
|
||||
- **Tab strip**: `◆ SW4RM ◆`, `◆ P3RM1SS10NS ◆`. In-page tabs only —
|
||||
- **Tab strip**: `◆ SW4RM ◆`, `◆ R3BU1LD QU3U3 ◆`, `◆ M3T4 1NPUTS ◆`,
|
||||
`◆ BUILD L0GS ◆`, `◆ P3RM1SS10NS ◆`. In-page tabs only —
|
||||
the SYST3M panels live on the
|
||||
standalone **C0R3** page (`/core.html`), and FL0W / ST4TS
|
||||
live on their own pages too, all reachable from the
|
||||
H0M3 hub (not the tab strip). Count pill on SW4RM
|
||||
(container count).
|
||||
H0M3 hub (not the tab strip). Count pills on SW4RM
|
||||
(stale containers) and R3BU1LD QU3U3 (rebuilds in flight).
|
||||
- **Banner-thin** (`░▒▓█▓▒░ HYPERHIVE / HIVE-C0RE / WE ARE THE WIRED ░▒▓█▓▒░`)
|
||||
— sits below the tab strip.
|
||||
- **Server-warnings banner** — a generic, sticky top-of-page strip shown
|
||||
on **every** page (dashboard + every stand-alone page — FL0W,
|
||||
H0M3, C0R3, BU1LDS, ST4TS), injected at the top
|
||||
H0M3, C0R3, ST4TS), injected at the top
|
||||
of `<body>` by `renderServerWarnings` in `common.js`. Driven by
|
||||
`state.server_warnings` — a list of `{ kind, level, message }` — and
|
||||
coloured by `level` (`warn` amber / `crit` red). hive-c0re owns the
|
||||
|
|
@ -73,13 +74,13 @@ agent is stale.
|
|||
|
||||
Passive / rare-interaction state, reached from the **Core** tile on the
|
||||
H0M3 hub (served at
|
||||
`/core.html`), with the same minimal chrome as `/builds.html`: a `← home`
|
||||
back-link and a single pane, **K3PT ST4T3**. The page is its own esbuild
|
||||
bundle (`core.js`) that cold-loads `/api/state` and subscribes to
|
||||
`/api/dashboard/stream` for `tombstones_changed`, `capabilities_changed`,
|
||||
and `tool_groups_changed` (the latter two re-render the stale-perms
|
||||
sub-section when permission data changes). (Rebuild queue and meta inputs
|
||||
live on the BU1LDS page — see below.)
|
||||
`/core.html`), with minimal chrome: a `← home` back-link and a single pane,
|
||||
**K3PT ST4T3**. The page is its own esbuild bundle (`core.js`) that
|
||||
cold-loads `/api/state` and subscribes to `/api/dashboard/stream` for
|
||||
`tombstones_changed`, `capabilities_changed`, and `tool_groups_changed`
|
||||
(the latter two re-render the stale-perms sub-section when permission
|
||||
data changes). (Rebuild queue and meta inputs are dashboard tabs — see
|
||||
below.)
|
||||
|
||||
Per-container CPU, memory and disk load isn't shown in the hive UI. The
|
||||
same figures go out as OTEL metrics and appear in Grafana (see
|
||||
|
|
@ -111,21 +112,23 @@ autorefreshes on `capabilities_changed` + `tool_groups_changed` SSE
|
|||
events. Each ghost agent gets a `✕ clear perms` button
|
||||
(`DELETE /api/permissions/{name}`).
|
||||
|
||||
## BU1LDS page (`/builds.html`)
|
||||
## Build tabs (`#rebuild`, `#meta`, `#buildlogs`)
|
||||
|
||||
The build lifecycle hub — rebuild queue, live build log, meta inputs,
|
||||
and build log history on one page. Standalone page reached from the
|
||||
**Builds** tile on the H0M3 hub, same minimal chrome as `/core.html`.
|
||||
Three sub-tabs: **R3BU1LD QU3U3** (default), **M3T4 1NPUTS**,
|
||||
**BUILD L0GS**. Its own esbuild bundle (`builds.js`); cold-loads
|
||||
`/api/state` and subscribes to `/api/dashboard/stream` for
|
||||
`rebuild_queue_changed`, `meta_inputs_changed`, `meta_update_running`.
|
||||
The SW4RM tab (`/dashboard.html`) does **not** read this endpoint at
|
||||
all, by design — the swarm view stays independent of job-queue
|
||||
internals. Its per-agent pending badges are transient-only, and
|
||||
its queue-summary banner reads the much narrower `GET /api/jobq/rollup`
|
||||
instead (see Container row, below) — a handful of pre-tallied counts,
|
||||
not the graph.
|
||||
The build lifecycle — rebuild queue, live build log, meta inputs, and
|
||||
build log history — is three tabs of the dashboard: **R3BU1LD QU3U3**
|
||||
(`#rebuild`), **M3T4 1NPUTS** (`#meta`) and **BUILD L0GS**
|
||||
(`#buildlogs`). They live in `builds.js`, which `tabs.js` imports: the
|
||||
dashboard's one tab strip, `/api/state` snapshot and
|
||||
`/api/dashboard/stream` subscription serve them, with
|
||||
`rebuild_queue_changed`, `meta_inputs_changed` and `meta_update_running`
|
||||
on the stream alongside the dashboard's other kinds. The count pill on
|
||||
R3BU1LD QU3U3 is the number of rebuilds in flight.
|
||||
The SW4RM tab does **not** read the graph endpoint, by design — the swarm
|
||||
view stays independent of job-queue internals. Its per-agent pending
|
||||
badges are transient-only, and its queue-summary banner reads the much
|
||||
narrower `GET /api/jobq/rollup` instead (see Container row, below) — a
|
||||
handful of pre-tallied counts, not the graph. The banner's "view queue →"
|
||||
link goes to the `#rebuild` tab.
|
||||
|
||||
**R3BU1LD QU3U3** — pending, in-flight, and recently settled container
|
||||
operations: rebuilds, meta-update cascades, and first-spawns. One
|
||||
|
|
@ -394,7 +397,7 @@ re-renders the terminal row. The operator addresses the root agent as `@root`.
|
|||
## H0M3 page (`/`)
|
||||
|
||||
The H0M3 hub is the primary landing page (served at `/` by default). A
|
||||
responsive grid of link tiles — Dashboard, Flow, Builds, Stats,
|
||||
responsive grid of link tiles — Dashboard, Flow, Stats,
|
||||
Core, API — each pointing to their respective
|
||||
surfaces, all unconditionally shown (no gating). The page is a pure
|
||||
portal with no tab-bar or SSE subscriptions. Typography + colours inherit
|
||||
|
|
@ -580,7 +583,7 @@ agent is stale. Banner pulses on each broker SSE event
|
|||
**Build-queue summary banner** — when the job queue has any active
|
||||
work, a compact amber banner sits above the container list: `◐ build
|
||||
queue — N running · M queued — view queue →` (the link goes to the
|
||||
BU1LDS page's R3BU1LD QU3U3). The shared `JobqRollup` Preact component
|
||||
R3BU1LD QU3U3 tab). The shared `JobqRollup` Preact component
|
||||
(`@hive/shared/jobq-rollup.js` — the same one swarm-ui's `/jobs` page
|
||||
mounts, pointed at swarm-controller's own rollup endpoint instead),
|
||||
mounted once into `#jobq-rollup-section` by `swarm.js::initJobqRollup`
|
||||
|
|
@ -711,11 +714,11 @@ below — some endpoints aren't in it yet.
|
|||
404 when the row is missing (vacuum-reaped or stale id).
|
||||
- `GET /api/build-logs/id/{id}/stream` — live SSE stream of
|
||||
stdout+stderr for an in-progress build (newline-delimited JSON
|
||||
frames). Used by the expanding live-row view in BU1LDS. The
|
||||
frames). Used by the expanding live-row view in the BUILD L0GS tab. The
|
||||
stream closes when the build finishes or errors.
|
||||
- `GET /api/build-logs/id/{id}/raw` — raw concatenated
|
||||
stdout+stderr as `text/plain`. Used by the `↓ raw` / `↓ download
|
||||
raw` links in BU1LDS. Works on both finished and in-progress
|
||||
raw` links in the build tabs. Works on both finished and in-progress
|
||||
build logs.
|
||||
- `GET /static/marked.js` serves the vendored `marked` bundle used
|
||||
for markdown previews.
|
||||
|
|
@ -854,10 +857,10 @@ payload):
|
|||
full snapshot of destroyed-but-state-kept agents. Emitted on
|
||||
destroy, purge, and revive. C0R3 K3PT ST4T3 tab subscribes.
|
||||
- `meta_inputs_changed` (seq, inputs: `Vec<MetaInput>`) — full
|
||||
snapshot of `meta/flake.lock` inputs. BU1LDS M3T4 1NPUTS tab
|
||||
snapshot of `meta/flake.lock` inputs. The M3T4 1NPUTS tab
|
||||
subscribes; same shape as `GET /api/meta-inputs`.
|
||||
- `meta_update_running` (running: bool) — emitted when a
|
||||
`nix flake update` ripple starts or completes. BU1LDS M3T4 1NPUTS
|
||||
`nix flake update` ripple starts or completes. The M3T4 1NPUTS
|
||||
tab uses this to show/hide the "⏳ meta-update running" banner.
|
||||
|
||||
<!-- vale write-good.Passive = NO -->
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
CSS bundle per page (`colors.css` + `theme.css` + `common.css`,
|
||||
loaded by every page, plus a page-specific bundle —
|
||||
`dashboard.css` / `flow.css` / `home.css` /
|
||||
`stats.css` / `core.css` / `builds.css`);
|
||||
`stats.css` / `core.css`);
|
||||
`common.css` inlines `@hive/shared`'s
|
||||
`base.css` + `terminal.css` + `tabs.css` + `chrome.css` +
|
||||
`pill.css` via esbuild's `@import` resolution.
|
||||
|
|
|
|||
Loading…
Reference in a new issue