The swarm lives in the swarm UI; this tab lists the hive's agents. The tab is 4G3NTS at #agents, its pane and count pill follow, and the module that renders the containers is agents.js. Comments and docs that named SW4RM or swarm.js follow.
341 lines
14 KiB
HTML
341 lines
14 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">
|
|
<!-- Back to the H0M3 menu hub (served at /). Sub-pages and the
|
|
dashboard all link back to the landing page rather than to each
|
|
other — H0M3 is the single navigation hub. -->
|
|
<a class="dash-home-back" href="/" title="back to the H0M3 menu"
|
|
>← home</a
|
|
>
|
|
<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>
|
|
<span class="tab-count" id="tab-count-agents" hidden></span>
|
|
</a>
|
|
<!-- SYST3M moved to its own standalone page (/core.html, "C0R3"),
|
|
reached from the H0M3 hub — keeps the dashboard tab strip lean.
|
|
The build lifecycle is three tabs here (builds.js): the rebuild
|
|
queue with its live log, the meta flake inputs, and the build log
|
|
history. -->
|
|
<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>
|
|
<span class="tab-count" id="tab-count-rebuild" hidden></span>
|
|
</a>
|
|
<a
|
|
class="tab"
|
|
id="tab-meta"
|
|
href="#meta"
|
|
role="tab"
|
|
aria-controls="tab-pane-meta"
|
|
data-tab="meta"
|
|
>
|
|
<span class="tab-label">◆ M3T4 1NPUTS ◆</span>
|
|
</a>
|
|
<a
|
|
class="tab"
|
|
id="tab-buildlogs"
|
|
href="#buildlogs"
|
|
role="tab"
|
|
aria-controls="tab-pane-buildlogs"
|
|
data-tab="buildlogs"
|
|
>
|
|
<span class="tab-label">◆ BUILD L0GS ◆</span>
|
|
</a>
|
|
<!-- P3RM1SS10NS: per-agent capability grants and tool-group
|
|
assignments. Both tables are fetched on tab activation. -->
|
|
<a
|
|
class="tab"
|
|
id="tab-permissions"
|
|
href="#permissions"
|
|
role="tab"
|
|
aria-controls="tab-pane-permissions"
|
|
data-tab="permissions"
|
|
>
|
|
<span class="tab-label">◆ P3RM1SS10NS ◆</span>
|
|
</a>
|
|
|
|
<!-- ST4TS lives on its own page now (`/stats.html`), reached from
|
|
the H0M3 hub — the hive-wide rollup is a standalone read-only
|
|
view, not part of the operational tab strip. -->
|
|
|
|
<!-- (Peer hives are no longer a tab — they render as a headline
|
|
under 4G3NTS. See tab-pane-agents.) -->
|
|
|
|
<!-- FL0W and the other standalone pages are reachable from the
|
|
H0M3 hub (served at /), not from the dashboard tab strip —
|
|
the strip holds only in-page tabs. -->
|
|
</nav>
|
|
</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, meta-updates, 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, meta-updates, and first-spawns. one runs
|
|
at a time; meta-update cascades nest under their parent. dedup:
|
|
re-enqueueing a still-queued op collapses into the existing entry.
|
|
</p>
|
|
<div id="rebuild-queue-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
<!-- Live build log of the currently-running rebuild (one runs at a
|
|
time). Managed by renderRebuildLiveLog in builds.js, separate from
|
|
rebuild-queue-section so the queue's row re-render never disturbs
|
|
the open poll. -->
|
|
<div id="rebuild-live-log" class="rebuild-live-log" hidden></div>
|
|
</section>
|
|
|
|
<!-- M3T4 1NPUTS: select inputs to nix flake update in /meta/. -->
|
|
<section
|
|
class="tab-pane"
|
|
id="tab-pane-meta"
|
|
data-tab-pane="meta"
|
|
hidden
|
|
role="tabpanel"
|
|
aria-labelledby="tab-meta"
|
|
>
|
|
<p class="meta">
|
|
select inputs to <code>nix flake update</code> in
|
|
<code>/meta/</code>. selected agents rebuild in sequence after the
|
|
lock bump; the submitting agent learns each outcome via the usual
|
|
<code>rebuilt</code> system event.
|
|
</p>
|
|
<div id="meta-inputs-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- BUILD L0GS: all-agents build log history. Click a row to expand
|
|
stdout + stderr. Live builds stream in real time. Lazy-loaded the
|
|
first time the tab is shown; auto-refreshes when
|
|
rebuild_queue_changed fires. Deep-link: ?id=N#buildlogs. -->
|
|
<section
|
|
class="tab-pane"
|
|
id="tab-pane-buildlogs"
|
|
data-tab-pane="buildlogs"
|
|
hidden
|
|
role="tabpanel"
|
|
aria-labelledby="tab-buildlogs"
|
|
>
|
|
<p class="meta">
|
|
all-agents build log history. click a row to expand stdout + stderr.
|
|
live builds stream in real time.
|
|
</p>
|
|
<div class="logs-toolbar">
|
|
<button type="button" class="btn btn-restart" id="build-refresh">
|
|
↻ refresh
|
|
</button>
|
|
</div>
|
|
<div id="build-list"><p class="meta">loading…</p></div>
|
|
</section>
|
|
|
|
<!-- P3RM1SS10NS: per-agent capability grants + tool-group
|
|
assignments. Both tables are column-driven from the backend
|
|
(GET /api/capabilities, GET /api/tool-groups) so new entries
|
|
require no UI change. Edits stage in-browser across both
|
|
matrices; the single page-level "save all" button POSTs every
|
|
changed agent to /api/permissions in one atomic batch (caps +
|
|
groups coalesce into one rebuild per agent). -->
|
|
<section
|
|
class="tab-pane"
|
|
id="tab-pane-permissions"
|
|
data-tab-pane="permissions"
|
|
hidden
|
|
role="tabpanel"
|
|
aria-labelledby="tab-permissions"
|
|
>
|
|
<h2>◆ C4P4B1L1T13S ◆</h2>
|
|
<div class="divider">
|
|
══════════════════════════════════════════════════════════════
|
|
</div>
|
|
<p class="meta">
|
|
per-agent capability grants. capabilities unlock gated MCP tools and
|
|
system access. toggle any cells across both tables, then hit "save
|
|
all" at the bottom — each changed agent rebuilds exactly once.
|
|
</p>
|
|
<div id="capabilities-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
|
|
<!-- T00L GR0UPS: per-agent tool-group permission matrix. Rows = agents,
|
|
cols = tool groups fetched from GET /api/tool-groups.
|
|
Checking / unchecking is staged in the UI; the single page-level
|
|
"save all" button POSTs every changed agent to
|
|
/api/permissions in one atomic batch, coalescing caps + groups
|
|
per agent into one rebuild each.
|
|
Absent agents default to the role default (shown in parens). -->
|
|
<h2>◆ T00L GR0UPS ◆</h2>
|
|
<div class="divider">
|
|
══════════════════════════════════════════════════════════════
|
|
</div>
|
|
<p class="meta">
|
|
per-agent tool-group permissions. columns are filled from the
|
|
backend — adding a new group requires no UI change. agents without
|
|
an explicit entry use the role default (agents: messaging, meta,
|
|
inbox, execution).
|
|
</p>
|
|
<div id="tool-groups-section">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
|
|
<!-- Page-level save bar (save-all issue): one button for the whole
|
|
permissions page. Staged checkbox edits across BOTH matrices are
|
|
diffed against their render-time baselines and POSTed together to
|
|
/api/permissions; caps + groups for one agent coalesce into a
|
|
single rebuild. Disabled until something is dirty. The atomic
|
|
batch either fully lands (queued ✓ → rebuilding) or fully fails
|
|
(error note, nothing applied). -->
|
|
<div class="perm-save-bar">
|
|
<button
|
|
type="button"
|
|
id="perm-save-all"
|
|
class="btn btn-approve"
|
|
disabled
|
|
>
|
|
save all
|
|
</button>
|
|
<span id="perm-save-note" class="meta"></span>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ST4TS: hive-wide turn-stats aggregate lives on its own page now
|
|
(`/stats.html`), reached from the H0M3 hub. The markup + the
|
|
hive-stats render JS moved there; when tabs.js boots on the
|
|
dashboard the renderers are simply gone (no stats tab to
|
|
activate). -->
|
|
|
|
<!-- FL0W: lives on its own page now (`/flow.html`). The
|
|
message-flow + inbox + compose 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>
|
|
</footer>
|
|
|
|
<!-- Slide-in detail panel (clicked file previews, applied config)
|
|
is a <hive-side-panel> element
|
|
(@hive/shared/side-panel.js) — the Panel singleton in common.js
|
|
creates + appends it to <body> lazily on first use, so nothing
|
|
needs to be pre-declared here. -->
|
|
|
|
<!-- 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;
|
|
flow.html has its own flow.js bundle. esbuild folds
|
|
@hive/shared/terminal.js and the marked npm package into
|
|
tabs.js. -->
|
|
<script type="module" src="/static/tabs.js" defer></script>
|
|
</body>
|
|
</html>
|