diff --git a/frontend-modern/src/components/Settings/ConnectionsExplainer.tsx b/frontend-modern/src/components/Settings/ConnectionsExplainer.tsx index ace826319..e614e0001 100644 --- a/frontend-modern/src/components/Settings/ConnectionsExplainer.tsx +++ b/frontend-modern/src/components/Settings/ConnectionsExplainer.tsx @@ -1,4 +1,4 @@ -import { Component, Show, createSignal } from 'solid-js'; +import { Component, For, Show, createSignal } from 'solid-js'; import { Cloud, Cpu, X } from 'lucide-solid'; const DISMISS_KEY = 'pulse.infrastructure.explainer.dismissed.v1'; @@ -21,6 +21,19 @@ const persistDismissed = () => { } }; +const AGENT_CAPABILITIES = [ + 'Hardware telemetry', + 'Assistant commands', + 'Patrol remediation', +]; + +const AGENT_FACTS = [ + 'Single Go binary', + '~13 MB download', + 'No runtime dependencies', + 'Open source', +]; + export const ConnectionsExplainer: Component = () => { const [dismissed, setDismissed] = createSignal(readDismissed()); @@ -33,61 +46,104 @@ export const ConnectionsExplainer: Component = () => {
- + -
-

- Two ways to connect infrastructure -

-

- Pick whichever fits the target. You can mix both on the same host. -

-
+
+

+ Two ways to connect infrastructure +

+

+ Pick whichever fits the target. You can mix both on the same host. +

+
-
-
- -
-
Platform API
-

+

+
+
+ +
+
Platform API
+
Polled from the platform
+
+
+

Pulse polls the platform's own API (Proxmox VE / PBS / PMG, VMware, TrueNAS). Fastest to set up; coverage matches what the platform exposes.

-
-
- -
-
Pulse Unified Agent
-

+

+
-
); diff --git a/frontend-modern/src/components/Settings/__tests__/ConnectionsExplainer.test.tsx b/frontend-modern/src/components/Settings/__tests__/ConnectionsExplainer.test.tsx index 5ec4af30c..027bd63c5 100644 --- a/frontend-modern/src/components/Settings/__tests__/ConnectionsExplainer.test.tsx +++ b/frontend-modern/src/components/Settings/__tests__/ConnectionsExplainer.test.tsx @@ -21,6 +21,17 @@ describe('ConnectionsExplainer', () => { expect(screen.getByText('Pulse Unified Agent')).toBeInTheDocument(); }); + it('surfaces concrete agent capabilities and trust facts users care about', () => { + render(() => ); + + for (const capability of ['Hardware telemetry', 'Assistant commands', 'Patrol remediation']) { + expect(screen.getByText(capability)).toBeInTheDocument(); + } + for (const fact of ['Single Go binary', '~13 MB download', 'No runtime dependencies', 'Open source']) { + expect(screen.getByText(fact)).toBeInTheDocument(); + } + }); + it('hides itself and persists dismissal to localStorage when closed', () => { const { container } = render(() => );