33 lines
1.3 KiB
Markdown
33 lines
1.3 KiB
Markdown
# 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/packages/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;
|
|
`buildNpmPackage` in 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.mjs` is ~30 lines.
|
|
- **Single-PR migration**: see `$HIVE_FORGE_URL/hyperhive/hyperhive/issues/273` for the design proposal and
|
|
the four-commit shape (npm scaffold → nix derivations → container
|
|
plumbing → Rust cutover).
|