frontend/README.md: - swarm-ui has real pages (HivesPage, AgentsPage, JobsPage, CreateAgentForm, IssueReportPage, account-linking forms, routed in App.tsx) and is served via nix/host-modules/swarm-ui.nix + swarm-controller's swarm-ui-facing endpoints — drop the stale package.json-derived 'no functionality yet' claim - dashboard is a vanilla-JS + custom-element MPA (core.js, common.js, tabs.js, ...) with a couple of Preact-rendered pages (builds.js, swarm.js), not uniformly Preact like agent/swarm-ui - drop the build.mjs line-count guess (actual: agent=93, dashboard=134, swarm-ui=167)
1.6 KiB
1.6 KiB
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,swarm.js);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).