The ST4TS page (/stats.html), GET /api/stats-hive, hive-c0re's hive_stats rollup and the modelPrices option that only fed its cost estimate are gone. Each agent's own /stats page and the turn-stats database it reads are unchanged. Setting modelPrices now fails evaluation with a message saying so.
195 lines
7.3 KiB
HTML
195 lines
7.3 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.) -->
|
|
</nav>
|
|
<!-- The pages menu and the profile menu, together at the right.
|
|
Pages menu: the API docs and the swarm UI, filled by links-menu.js
|
|
from /api/state. 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>
|
|
</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>
|