nginx proxied `<hive>/` straight to hive-c0re:7000, and hive-c0re served the dashboard dist itself via `tower_http::ServeDir` (from `HIVE_STATIC_DIR` baked into its service env). So a frontend-only change rebuilt the hive-c0re unit and restarted the core daemon — every operator session dropped its SSE stream for a pure CSS/JS change. The gateway nginx now static-serves the dashboard dist directly; hive-c0re's dashboard router is API-only. The split uses the Accept-header SPA fallback (the same `map $http_accept` pattern the matrix/agent vhosts already use), so no backend prefix has to be enumerated: a browser navigation (Accept: text/html) whose path is not an on-disk asset gets the SPA index.html; everything else (every /api route, the bare action/mutation routes, the two SSE streams, the knowledge webhook — all Accept != text/html) falls through `try_files` to the `@c0re` named location and is reverse-proxied to hive-c0re. A new c0re route needs no gateway change. - hive-c0re.nix: expose the themed dist as a new internal read-only option `services.hyperhive.c0re.servedFrontend`; drop `HIVE_STATIC_DIR` from the service env (the router no longer serves files). - hive-gateway.nix: read that option in host-module scope (dashboardDist), static-serve `dashboard/` with the Accept-header `try_files ... @c0re` split; `@c0re` carries `proxy_buffering off` + a 1d read timeout for the SSE streams and a duplicated auth_basic block (named locations do not inherit it). The dashboard map is unconditional; the matrix map stays gated on the matrix GUI. - dashboard.rs: drop the ServeDir fallback + the HIVE_STATIC_DIR resolution; the router 404s unmatched paths (the gateway only proxies non-static requests). - hive-c0re/Cargo.toml: drop the now-unused tower-http dependency. - docs/gateway.md: document the dashboard static split + the `@c0re` fall-through. The store path is reachable inside the gateway nspawn container (shared /nix/store), mirroring how HIVE_AGENT_FRONTEND_DIR already exposes the per-agent UIs. The gateway and c0re changes must land together (atomic cutover) or the dashboard 404s — this needs a watched gateway + c0re rebuild.
29 lines
605 B
TOML
29 lines
605 B
TOML
[package]
|
|
name = "hive-c0re"
|
|
edition.workspace = true
|
|
version.workspace = true
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
anyhow.workspace = true
|
|
axum.workspace = true
|
|
base64.workspace = true
|
|
bcrypt.workspace = true
|
|
reqwest.workspace = true
|
|
clap.workspace = true
|
|
clap_complete.workspace = true
|
|
clap-markdown = "0.1"
|
|
hive-sh4re.workspace = true
|
|
libc.workspace = true
|
|
listenfd = "1"
|
|
rusqlite.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
tokio.workspace = true
|
|
tokio-stream.workspace = true
|
|
tracing.workspace = true
|
|
tracing-subscriber.workspace = true
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|