dashboard: build same-origin /agent/<name>/ links when gateway is up (closes #842)
When `services.hyperhive.gateway.enable` is on (default), the c0re NixOS module now sets `HIVE_GATEWAY_ENABLED=1` on the service env. `/api/state` exposes the flag as `gateway_enabled`; the SW4RM tab's container-row renderer flips three link sites (primary agent-name link, favicon fetch, `container`-kind nav-strip links) from the legacy `http://<host>:<port>/` direct TCP shape to same-origin `/agent/<name>/` URLs — the gateway proxies them to the per-agent harness via `agent-ports.json` or `agent-sockets.json` (#784 / #815). Gateway-off deploys keep the direct TCP fallback so local-dev / operator opt-out keeps working. `forge`-kind nav-strip links still resolve against `:3000` (separate sub-domain transition, tracked by `forge.behindGateway`); `external`-kind links are already absolute. Mirrors the `HIVE_MATRIX_GUI_ENABLED` env→snapshot-flag pattern. Docs updated: `docs/web-ui.md::Container row` + new `docs/gateway.md::Dashboard link shape` section.
This commit is contained in:
parent
b50f182396
commit
fbc41d42a6
5 changed files with 72 additions and 4 deletions
|
|
@ -471,6 +471,13 @@ window.marked = marked;
|
|||
}
|
||||
|
||||
const hostname = (s && s.hostname) || window.location.hostname;
|
||||
// When hive-gateway is in front of the dashboard, build same-origin
|
||||
// `/agent/<name>/` URLs instead of the direct `http://<host>:<port>/`
|
||||
// TCP fallback — the gateway proxies the prefix to the per-agent
|
||||
// harness (TCP via `agent-ports.json` or unix-domain via
|
||||
// `agent-sockets.json` per #784 / #815). See
|
||||
// `docs/web-ui.md::Container row` + `docs/gateway.md::Vhost map`.
|
||||
const gatewayLinks = !!(s && s.gateway_enabled);
|
||||
const ul = el('ul', { class: 'containers' });
|
||||
const tree = buildAgentTree(containers);
|
||||
// In-flight rebuild / meta-update / destroy ops per agent name —
|
||||
|
|
@ -480,7 +487,9 @@ window.marked = marked;
|
|||
const inFlight = inFlightOpsByAgent();
|
||||
for (const node of tree) {
|
||||
const c = node.container;
|
||||
const url = `http://${hostname}:${c.port}/`;
|
||||
const url = gatewayLinks
|
||||
? `/agent/${encodeURIComponent(c.name)}/`
|
||||
: `http://${hostname}:${c.port}/`;
|
||||
// Pending-state derivation + queued-vs-running split — see
|
||||
// docs/web-ui.md::Container row for the transient → in-flight
|
||||
// queue priority order and the opRunning rationale.
|
||||
|
|
@ -572,7 +581,13 @@ window.marked = marked;
|
|||
const navStrip = el('span', { class: 'nav-strip' });
|
||||
head.append(navStrip);
|
||||
const forgeBase = `http://${hostname}:3000`;
|
||||
const containerBase = `http://${hostname}:${c.port}`;
|
||||
// Container nav-strip links resolve against the same base as the
|
||||
// primary `name` link — gateway-prefixed when the gateway is in
|
||||
// front, direct TCP otherwise. Strips the trailing slash so
|
||||
// `lnk.url` starting with `/` concatenates cleanly.
|
||||
const containerBase = gatewayLinks
|
||||
? `/agent/${encodeURIComponent(c.name)}`
|
||||
: `http://${hostname}:${c.port}`;
|
||||
if (c.running) {
|
||||
fetch(`/api/agent/${encodeURIComponent(c.name)}/links`)
|
||||
.then((r) => (r.ok ? r.json() : []))
|
||||
|
|
|
|||
Loading…
Reference in a new issue