| Filename | Latest commit message | Latest commit date |
|---|---|---|
per mara on #443: "dont show all the restart buttons etc., just show state and links. instead, clicking an agent icon selects that agent. you can select as many as you like. then you can run an action on all of them." selection model - module-level selectionState = Set<string> of agent logical names. clicking a container-row icon toggles membership; Esc clears the whole set (ignored when an editable element has focus so typing in compose / answer / journal-search isn't intercepted). - icon now has role="button" + tabindex="0" so it's keyboard-accessible; aria-pressed reflects the toggle state. hover + focus-visible get a mauve ring. - selected rows get a .selected class — mauve outline + faint mauve wash on the row, brighter ring on the icon. - on every renderContainers pass, stale selections (agents destroyed while selected) are pruned defensively. sticky action bar - new #selection-bar in index.html — fixed bottom strip with count chip, name list, action buttons, clear button. hidden when selection empty. styled to match the flow composer's frosted-mauve chrome (vibecore family). - per mara's option B answer: every action button is visible; buttons that don't apply to the whole selection are disabled with a tooltip explaining WHY ("iris is already stopped" etc). .btn:disabled styling added. - actions: R3ST4RT / ST0P / ST4RT / R3BU1LD / DESTR0Y / PURG3. per-action confirm prompt lists the names being acted on. when the selection includes the manager the ST0P prompt calls out the consequence (approvals + meta operations pause until manager is restarted). DESTR0Y/PURG3 stay sub-agent-only; including the manager disables them with a clear tooltip. - actions POST per agent in a loop to the existing endpoints (/restart/{name}, /kill/{name}, etc.); no new backend wire surface. event-driven derived stores (containersState, rebuildQueueState) already update live via SSE — no manual refetch. - failures from any individual POST surface in a single alert at the end rather than spamming dialogs mid-loop. per-card actions removed - the in-card R3ST4RT / ST0P / ST4RT / R3BU1LD / DESTR0Y / PURG3 block is gone. cards now show identity / state / nav-strip / status text / drill-ins only — "state and links" per mara. the contextual needs-update chip in the head row stays. manager stop - the "also make manager stoppable" half of #443 ships as PR #445 (separate small backend change). this PR depends on #445 for the bulk-stop button to actually work on selections containing the manager; until #445 merges, ST0P on a manager-included selection will fail individually with a 500 for the manager (other selected agents are still stopped; failures bucket into the end-of-loop alert). build clean: npm run build --workspace=@hive/dashboard. no backend changes here. |
||
| .. | ||
| packages | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
hyperhive frontend
npm workspaces project for the hyperhive browser-facing assets:
packages/shared/— shared modules used by both surfaces (terminal pane, Catppuccin palette + body typography).packages/dashboard/— the hive-c0re dashboard SPA.packages/agent/— the per-container web UI (default agent page, stats, screen).
Build
npm install # one-off; uses the checked-in package-lock.json
npm run build # builds every workspace into packages/*/dist/
The Rust binaries serve packages/dashboard/dist/ and
packages/agent/dist/ via tower_http::ServeDir at runtime; the
build derivation is wired up in nix/modules/frontend.nix. Per-agent
additions are layered on top of the default agent dist via the
hyperhive.frontend.extraFiles option in agent.nix.
Why npm + esbuild
- Hermetic: dependencies vendored via the checked-in lockfile;
buildNpmPackagein nix uses it as the source-of-truth so the output is reproducible without network access at build time. - esbuild: vanilla-JS bundler, no framework runtime overhead.
Each workspace's
build.mjsis ~30 lines. - Single-PR migration: see issue #273 for the design proposal and the four-commit shape (npm scaffold → nix derivations → container plumbing → Rust cutover).