| Filename | Latest commit message | Latest commit date |
|---|---|---|
The agents table passed portal so a wanted menu on its last row escaped the table's scroll clip. The table is gone from that page and nothing else passes it, so the prop, its position tracking and the portal render go with it. |
||
| .. | ||
| packages | ||
| .gitignore | ||
| npm-deps-hash | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
hyperhive frontend
npm workspaces project for the hyperhive browser-facing assets:
packages/shared/— shared modules used by every surface (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).packages/swarm-ui/— the swarm-level operator UI shell (hives, agents, jobs, issue-report pages).
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;
nix/packages/frontend.nix wires up the build derivation. The
services.hyperhive.agent.frontend.extraFiles option in agent.nix
layers per-agent additions on top of the default agent dist.
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:
agentandswarm-uiare Preact apps;dashboardis a vanilla-JS + custom-element MPA with a few Preact-rendered pages (builds.js,agents.js, imported by the dashboard entry);sharedholds both kinds of module. No framework runtime beyond Preact where it's used. Each workspace'sbuild.mjsis a short esbuild script. - Single-PR migration: see the tracked design proposal and the four-commit shape (npm scaffold → nix derivations → container plumbing → Rust cutover).