From 96410fd8c49ba1a8fe04b98bbe612e12e3dea42e Mon Sep 17 00:00:00 2001 From: wmantly Date: Sun, 9 Aug 2026 23:24:54 -0700 Subject: [PATCH] fix(ui): site-status modal API, honest agent version fallback, Directory default org name Fresh-install bug report fixes: - 'Master Site' button error 'app.modal.show is not a function': the multi-site status modal used the legacy app.modal.show() signature; the app exposes app.modal.open({title, bodyHtml, size}). The site-status request itself worked -- only the rendering call was wrong. - Agents with no discovery yet showed a fake 'v2.0.0' (three hardcoded fallbacks). Now 'unknown', so a host whose agent never connected isn't presented as an old version. - The default org name (browser tab title) is set by theta-suite's setup.sh; that default is fixed separately there (CFG_ORG -> Theta Directory). --- nodejs/drivers/theta_agent_driver.js | 2 +- nodejs/models/agent.js | 2 +- nodejs/utils/agent_manager.js | 2 +- nodejs/views/directory.ejs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nodejs/drivers/theta_agent_driver.js b/nodejs/drivers/theta_agent_driver.js index b18490b..bb58339 100644 --- a/nodejs/drivers/theta_agent_driver.js +++ b/nodejs/drivers/theta_agent_driver.js @@ -42,7 +42,7 @@ class ThetaAgentDriver extends BaseDriver { status: 'online', driver: this.name, agentId: agent.id, - agentVersion: agent.version || (telemetry && telemetry.version) || 'v2.0.0', + agentVersion: agent.version || (telemetry && telemetry.version) || 'unknown', lastSeen: agent.lastSeen, system: { cpu: telemetry.cpu || null, diff --git a/nodejs/models/agent.js b/nodejs/models/agent.js index 5013c5e..9a2963a 100644 --- a/nodejs/models/agent.js +++ b/nodejs/models/agent.js @@ -100,7 +100,7 @@ class Agent extends Model { delete data.tokenHash; return { ...data, - version: data.version || (data.lastDiscovery && data.lastDiscovery.version) || (data.lastTelemetry && data.lastTelemetry.version) || 'v2.0.0', + version: data.version || (data.lastDiscovery && data.lastDiscovery.version) || (data.lastTelemetry && data.lastTelemetry.version) || 'unknown', lastSeen: data.last_seen ? new Date(data.last_seen * 1000).toISOString() : null, connected: !!(liveState && liveState.connected), // "Online" is a live-connection fact, not a stored one. A row with a diff --git a/nodejs/utils/agent_manager.js b/nodejs/utils/agent_manager.js index e68d681..2390276 100644 --- a/nodejs/utils/agent_manager.js +++ b/nodejs/utils/agent_manager.js @@ -118,7 +118,7 @@ class AgentManager { async handleDiscovery(agent, payload) { const discovery = { - version: payload.version || payload.agent_version || 'v2.0.0', + version: payload.version || payload.agent_version || 'unknown', hostname: payload.hostname || '', ip_addresses: Array.isArray(payload.ip_addresses) ? payload.ip_addresses : [], public_ip: payload.public_ip || '', diff --git a/nodejs/views/directory.ejs b/nodejs/views/directory.ejs index 89933bb..20b1fc2 100644 --- a/nodejs/views/directory.ejs +++ b/nodejs/views/directory.ejs @@ -3360,7 +3360,7 @@ html += ''; - app.modal.show('Multi-Site & Network Gateway Status', html, [], 'modal-lg'); + app.modal.open({ title: 'Multi-Site & Network Gateway Status', bodyHtml: html, size: 'lg' }); } catch (e) { app.messages.toast('Error fetching site status: ' + e.message, 'danger'); }