A build's output and history are the swarm's builds Grafana board now, from the lines hive-c0re logs. Removes the tab and its pane, the live log under the rebuild queue, their styles, the log stream helper and the duration formatter only they used, and the docs; also the tab-counts sentence 5925 missed.
205 lines
7.8 KiB
HTML
205 lines
7.8 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>hyperhive // h1ve-c0re</title>
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
<link rel="stylesheet" href="/static/colors.css" />
|
|
<link rel="stylesheet" href="/static/theme.css" />
|
|
<link rel="stylesheet" href="/static/common.css" />
|
|
<link rel="stylesheet" href="/static/dashboard.css" />
|
|
</head>
|
|
<body class="dashboard-shell">
|
|
<!-- Sticky chrome — just the tab strip. The "WE ARE THE WIRED"
|
|
slug lives at the page footer below `<main>`; chrome is
|
|
navigation only. Tabs route via the URL hash so F5 / back-
|
|
button / shared links keep you on the same view. JS owns
|
|
the show/hide. -->
|
|
<header class="dashboard-chrome">
|
|
<nav class="tabbar" id="tabbar" role="tablist">
|
|
<a
|
|
class="tab"
|
|
id="tab-agents"
|
|
href="#agents"
|
|
role="tab"
|
|
aria-controls="tab-pane-agents"
|
|
data-tab="agents"
|
|
>
|
|
<span class="tab-label">◆ 4G3NTS ◆</span>
|
|
</a>
|
|
<!-- The build lifecycle is two tabs here (builds.js): the rebuild
|
|
queue with its live log, and the build log history. Kept state
|
|
(kept.js) is the third. -->
|
|
<a
|
|
class="tab"
|
|
id="tab-rebuild"
|
|
href="#rebuild"
|
|
role="tab"
|
|
aria-controls="tab-pane-rebuild"
|
|
data-tab="rebuild"
|
|
>
|
|
<span class="tab-label">◆ R3BU1LD QU3U3 ◆</span>
|
|
</a>
|
|
|
|
<a
|
|
class="tab"
|
|
id="tab-kept"
|
|
href="#kept"
|
|
role="tab"
|
|
aria-controls="tab-pane-kept"
|
|
data-tab="kept"
|
|
>
|
|
<span class="tab-label">◆ K3PT ST4T3 ◆</span>
|
|
</a>
|
|
|
|
<!-- (Peer hives are no longer a tab — they render as a headline
|
|
under 4G3NTS. See tab-pane-agents.) -->
|
|
|
|
<!-- ST4TS is a standalone page reached from the pages
|
|
menu at the right of this strip, not tabs — the strip holds only
|
|
in-page tabs. -->
|
|
</nav>
|
|
<!-- The pages menu and the profile menu, together at the right.
|
|
Pages menu: the standalone pages (stats, API docs) and the swarm UI,
|
|
filled by links-menu.js from /api/state; the pages link back to `/`,
|
|
which is this dashboard. Profile menu: the signed-in user, filled by
|
|
user-menu.js. -->
|
|
<div class="dashboard-chrome-actions">
|
|
<div class="links-menu-slot" id="links-menu"></div>
|
|
<div class="user-menu-slot" id="user-menu"></div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Tab panes. createTabStrip (@hive/shared/tabs.js) keeps exactly one
|
|
visible by toggling the `hidden` attribute, resolved from the URL
|
|
hash (default 4G3NTS). Panes start `hidden` to avoid a flash before
|
|
the script runs. -->
|
|
<!-- Padded content wrapper: carries the 1.5em side gutter
|
|
(.page-content, common.css) while <body> stays full-bleed so the
|
|
sticky chrome above + the footer below span the full width. -->
|
|
<div class="page-content">
|
|
<main class="dashboard-main">
|
|
<!-- 4G3NTS: the agents. Container cards (the central thing
|
|
the operator looks at) and rebuild queue / cascade visualisation
|
|
that drives them. No inline `C0NTAINERS` h2 heading + divider
|
|
— the tab label 4G3NTS already says it. -->
|
|
<section
|
|
class="tab-pane"
|
|
id="tab-pane-agents"
|
|
data-tab-pane="agents"
|
|
hidden
|
|
role="tabpanel"
|
|
aria-labelledby="tab-agents"
|
|
>
|
|
<!-- Swarm / hive identity headline. Populated by refreshState from
|
|
hive_name + swarm_name; stays hidden when neither is set. -->
|
|
<h2 id="swarm-identity" hidden></h2>
|
|
<!-- JobqRollup mount point, kept outside #containers-section
|
|
deliberately — that section is wiped + rebuilt on every
|
|
container-list render (see agents.js::renderContainers), which
|
|
would tear down and remount the Preact tree on every
|
|
container-state tick. Mounted once by agents.js::initJobqRollup,
|
|
refreshed via its own handle rather than by re-rendering. -->
|
|
<div id="jobq-rollup-section"></div>
|
|
<div id="containers-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- R3BU1LD QU3U3: pending + running rebuilds and first-spawns. Rendered from GET /api/jobq/graph by the
|
|
`JobqGraph` Preact component (@hive/shared/jobq-graph.js);
|
|
`rebuild_queue_changed` over /api/dashboard/stream is the
|
|
refresh trigger and carries no payload of its own. -->
|
|
<section
|
|
class="tab-pane"
|
|
id="tab-pane-rebuild"
|
|
data-tab-pane="rebuild"
|
|
hidden
|
|
role="tabpanel"
|
|
aria-labelledby="tab-rebuild"
|
|
>
|
|
<p class="meta">
|
|
pending + running rebuilds and first-spawns. one runs at a time.
|
|
dedup: re-enqueueing a still-queued op collapses into the existing
|
|
entry.
|
|
</p>
|
|
<div id="rebuild-queue-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- K3PT ST4T3: kept state from agents whose container is absent,
|
|
with a purge button per row. Rendered by kept.js; refreshed by the
|
|
`tombstones_changed` stream event. -->
|
|
<section
|
|
class="tab-pane"
|
|
id="tab-pane-kept"
|
|
data-tab-pane="kept"
|
|
hidden
|
|
role="tabpanel"
|
|
aria-labelledby="tab-kept"
|
|
>
|
|
<p class="meta">
|
|
kept state from previously tombstoned agents — recreating an agent
|
|
with the same name reuses it.
|
|
</p>
|
|
<div id="tombstones-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ST4TS lives on its own page (`/stats.html`).
|
|
Its DOM only exists there — when tabs.js boots
|
|
on this page the corresponding renderers no-op silently (each
|
|
guard is `if (!el) return`). -->
|
|
</main>
|
|
</div>
|
|
<!-- /.page-content -->
|
|
|
|
<footer>
|
|
<pre class="banner banner-thin">
|
|
░▒▓█▓▒░ HYPERHIVE / HIVE-C0RE / WE ARE THE WIRED ░▒▓█▓▒░</pre
|
|
>
|
|
<div class="divider">
|
|
══════════════════════════════════════════════════════════════
|
|
</div>
|
|
<p>
|
|
▲△▲
|
|
<a href="https://forge.darkest.space/hyperhive/hyperhive">hyperhive</a>
|
|
▲△▲ hive-c0re on this host ▲△▲
|
|
</p>
|
|
<!-- Short build id of the running hive; filled from hyperhive_rev. -->
|
|
<p class="meta" id="hive-rev" hidden></p>
|
|
</footer>
|
|
|
|
<!-- Selection action bar. Sticky-bottom strip that slides into
|
|
view when one or more agent cards is selected (click the icon
|
|
to toggle). See docs/web-ui/dashboard.md::Selection bar for the bulk
|
|
action gating + clear semantics. -->
|
|
<div
|
|
id="selection-bar"
|
|
class="selection-bar"
|
|
hidden
|
|
role="toolbar"
|
|
aria-label="bulk agent actions"
|
|
>
|
|
<span class="selection-count" id="selection-count"></span>
|
|
<span class="selection-names" id="selection-names"></span>
|
|
<span class="selection-actions" id="selection-actions"></span>
|
|
<button
|
|
type="button"
|
|
class="btn selection-clear"
|
|
id="selection-clear"
|
|
title="clear selection (esc)"
|
|
>
|
|
✕ clear
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Single bundled entry — tabs.js is the dashboard tabs surface;
|
|
esbuild folds
|
|
@hive/shared/terminal.js into tabs.js. -->
|
|
<script type="module" src="/static/tabs.js" defer></script>
|
|
</body>
|
|
</html>
|