dashboard: hide forge links instead of guessing <hostname>:3000

Adds services.hyperhive.forge.publicUrl (defaults to the gateway vhost
URL when behindGateway=true, null otherwise). HIVE_FORGE_PUBLIC_URL is
now sourced from it instead of hardcoding https://${forge.domain}
whenever behindGateway is on.

The 4 frontend call sites that built a forge link from
state.forge_public_url now hide the link when that's absent, rather
than guessing http://<browser-hostname>:3000 — a guess that's only
correct by accident once the operator isn't on plain localhost. Fixes
the dashboard H0M3 tile, per-agent-row forge links + agent menu, the
approval-queue PR link, and the per-agent page's own meta-nav forge
link (found during this pass, same defect, not in the original
3-site inventory).

Docs + doc-comments updated to match.
This commit is contained in:
iris 2026-08-03 00:30:22 +02:00 committed by mara
commit 3512e4b019
10 changed files with 96 additions and 42 deletions

View file

@ -30,14 +30,16 @@ async function init() {
if (tile) tile.hidden = false;
}
// Forge tile: reveal + point at the live forge only when the
// hive-forge container is up. Prefer the gateway-served public URL
// (set when forge.behindGateway=true), fall back to the direct :3000
// port — same precedence the dashboard uses for forge links.
if (state.forge_present) {
// Forge tile: reveal only when the hive-forge container is up AND
// the operator has stated a public URL for it
// (services.hyperhive.forge.publicUrl, surfaced as
// state.forge_public_url) — hidden rather than guessed from
// `location.hostname` + the direct :3000 port, which is only
// correct by accident on deployments that aren't plain localhost.
if (state.forge_present && state.forge_public_url) {
const tile = $('home-tile-forge');
if (tile) {
tile.href = state.forge_public_url || `http://${location.hostname}:3000`;
tile.href = state.forge_public_url;
tile.hidden = false;
}
}