diff --git a/client/src/pages/CapabilityMap.jsx b/client/src/pages/CapabilityMap.jsx index 5d59f36c21..68d9180317 100644 --- a/client/src/pages/CapabilityMap.jsx +++ b/client/src/pages/CapabilityMap.jsx @@ -108,6 +108,21 @@ export default function CapabilityMap() { Enable at least one runnable AI provider. Networking and other integrations are optional; you can configure them whenever they are useful.

+
+
+

AI provider

+

+ Enable one option you intend to use: an authenticated subscription CLI, a paid API key, or a local runtime with a downloaded model. PortOS never enables a paid provider or starts model work without your action. +

+
+ {providerCapability && } +
+
Subscription CLI
Claude Code, Codex, or Antigravity after local sign-in.
+
API provider
Add a key only for the paid service you chose.
+
Local/private
Ollama or LM Studio with a runnable model.
+
+
+

Optional networking

@@ -133,21 +148,6 @@ export default function CapabilityMap() { {preference === 'none' &&

Networking marked as not desired. You can change this preference at any time.

}
-
-
-

AI provider

-

- Enable one option you intend to use: an authenticated subscription CLI, a paid API key, or a local runtime with a downloaded model. PortOS never enables a paid provider or starts model work without your action. -

-
- {providerCapability && } -
-
Subscription CLI
Claude Code, Codex, or Antigravity after local sign-in.
-
API provider
Add a key only for the paid service you chose.
-
Local/private
Ollama or LM Studio with a runnable model.
-
-
-
diff --git a/client/src/pages/CapabilityMap.test.jsx b/client/src/pages/CapabilityMap.test.jsx index f87b3b137d..8e4c452538 100644 --- a/client/src/pages/CapabilityMap.test.jsx +++ b/client/src/pages/CapabilityMap.test.jsx @@ -46,7 +46,7 @@ import * as api from '../services/api'; import CapabilityMap from './CapabilityMap'; describe('CapabilityMap setup walkthrough', () => { - it('keeps essential network/provider setup above optional capabilities', () => { + it('keeps the essential provider setup above optional networking and capabilities', () => { render(); expect(screen.getByRole('heading', { name: 'Setup & Capabilities' })).toBeInTheDocument(); @@ -57,6 +57,9 @@ describe('CapabilityMap setup walkthrough', () => { 'https://login.tailscale.com/admin/dns', ); expect(screen.getByRole('heading', { name: 'AI provider' })).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: 'AI provider' }).compareDocumentPosition( + screen.getByRole('heading', { name: 'Optional networking' }), + ) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy(); expect(screen.getByText('Subscription CLI')).toBeInTheDocument(); expect(screen.getByRole('heading', { name: 'Optional capabilities' })).toBeInTheDocument(); expect(screen.getByText('Calendar')).toBeInTheDocument();