diff --git a/frontend-modern/src/components/Settings/UnifiedAgents.tsx b/frontend-modern/src/components/Settings/UnifiedAgents.tsx index fef9c05..848c8a0 100644 --- a/frontend-modern/src/components/Settings/UnifiedAgents.tsx +++ b/frontend-modern/src/components/Settings/UnifiedAgents.tsx @@ -265,10 +265,16 @@ export const UnifiedAgents: Component = () => { version?: string; lastSeen?: number; isLegacy?: boolean; + linkedNodeId?: string; }>(); - // Process Host Agents + // Process Host Agents (skip those linked to PVE nodes - they're shown merged with the node) hosts.forEach(h => { + // Skip hosts that are linked to a PVE node - they'll appear in the Dashboard merged with the node + if (h.linkedNodeId) { + return; + } + const key = h.hostname || h.id; unified.set(key, { id: h.id, diff --git a/frontend-modern/src/types/api.ts b/frontend-modern/src/types/api.ts index eb82bdc..bceac77 100644 --- a/frontend-modern/src/types/api.ts +++ b/frontend-modern/src/types/api.ts @@ -152,6 +152,7 @@ export interface Node { connectionHealth: string; isClusterMember?: boolean; // True if part of a cluster clusterName?: string; // Name of cluster (empty if standalone) + linkedHostAgentId?: string; // ID of host agent running on this node (for merging) } export interface GuestNetworkInterface { @@ -444,6 +445,10 @@ export interface Host { tokenRevokedAt?: number; tags?: string[]; isLegacy?: boolean; + // Linking: When this host agent is running on a known PVE entity + linkedNodeId?: string; // ID of PVE node this agent is running on + linkedVmId?: string; // ID of VM this agent is running inside + linkedContainerId?: string; // ID of container this agent is running inside } export interface HostNetworkInterface {