| Filename | Latest commit message | Latest commit date |
|---|---|---|
mara, live: 'login panel still looks like it is behind', 'bottom input row text not aligned / inconsistent sizes', 'can we put the badges on the same row as the links button etc? then the header would be more compact.' - Real fix for the overlap this time, not another band-aid: the header's downstream offset (.agent-status-overlay, .agent-main's scroll padding) was reading a STATIC --agent-header-h guess (6em). Every prior fix on this PR removed one specific contributor to the header wrapping past that guess (meta-nav's inline list, then disconnected badge/pills clusters) but the guess itself was always the actual defect — any content that can wrap an extra line breaks it at whatever width triggers it, and no width is safe to promise. Header.tsx now measures its own rendered height via ResizeObserver and writes it to a new --agent-header-real-h var; downstream consumers prefer that over the static guess. Deliberately a SEPARATE var from --agent-header-h, not an overwrite: .agent-header's own min-height also reads that var, so overwriting it in place created an actual ResizeObserver feedback loop (confirmed live on the first pass of this fix, fixed by splitting the var). - Badges (StatusChips) + pills (inbox/todos/links/overflow) now share one row (.agent-state-row) instead of two visually disconnected clusters (old app.js markup's 3-column layout, which the new page had also carried over) — pills pushed to the row's right edge via a margin-left: auto rule scoped to that nesting, so app.js's own still-live separate-column usage of the same classes is untouched. - Composer text alignment: real cause was .prompt (1em) and .submit-hint (0.8em) each getting a different-sized default line-box under align-items: flex-start, so the same nominal padding-top landed at different absolute offsets. align-items: center sidesteps the whole line-box-size mismatch. This one's shared with app.js too (same markup/classes) — same bug there, now fixed for both. Verified at 480/500/768/1024/1400px — no overlap, no ResizeObserver loop, badges+pills share one row, composer aligned. tsc --noEmit clean, build clean, both pre-push lints clean. |
||
| .. | ||
| 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 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).