hermes-agent/apps/desktop/src/components
Ben 2704e6e39c feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade
Phase 3 (non-UI) of cloud-auto-discovery. Adds the 'cloud' connection mode and
the IPC plumbing for a single portal login that powers both agent discovery and
silent per-agent sign-in. The Phase 4 UI (cloud ModeCard + instance picker)
sits on top of these IPC methods.

Mode widening (Model A, decisions.md Q6): DesktopConnectionConfig.mode and
DesktopConnectionConfigInput.mode widen to 'local'|'remote'|'cloud'. A cloud
entry is a remote-shaped block (remoteUrl = the selected agent's dashboardUrl,
remoteAuthMode 'oauth') tagged mode 'cloud' so settings reopens into the cloud
picker. Every RESOLUTION site treats cloud as remote via the new
modeIsRemoteLike() helper (centralized in connection-config.cjs): readDesktop-
ConnectionConfig, sanitizeConnectionProfiles, sanitizeDesktopConnectionConfig,
coerceDesktopConnectionConfig, profileRemoteOverride, resolveRemoteBackend,
globalRemoteActive, testDesktopConnectionConfig, and isRemoteReauthFailure. The
live resolved HermesConnection.mode stays 'local'|'remote' — cloud never reaches
the boot path or the renderer remote-gating sites.

Cloud mechanics (main.cjs): one portal session in the persist:hermes-remote-oauth
partition does double duty — discoverCloudAgents() GETs {portal}/api/agents over
the partition-bound net (cookie-authed; NAS #542 accepts the cookie), and
cloudAgentSilentSignIn() opens a selected agent's /login in the same partition so
the portal's silent auto-approve 302s back with that agent's session cookie, no
second prompt. Portal base URL resolves via DEFAULT_NOUS_PORTAL_URL +
HERMES_PORTAL_BASE_URL/NOUS_PORTAL_BASE_URL overrides, mirroring the CLI.

IPC: hermes☁️{status,login,logout,discover,agent-sign-in} in main.cjs +
preload.cjs, typed in global.d.ts (DesktopCloudStatus/Agent/DiscoverResult/
AgentSignInResult).

Tests: modeIsRemoteLike + cloud profileRemoteOverride (node --test, 52 pass);
cloud reauth-failure cases (vitest, 16 pass). tsc clean; eslint clean. New tests
verified to fail without the source changes.

cloud-auto-discovery Phase 3 (non-discovery half + discovery/cascade plumbing).
2026-06-30 13:45:33 +10:00
..
assistant-ui feat(desktop): read-only spectator transcript for subagent watch windows 2026-06-29 12:06:25 -05:00
chat style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
pane-shell style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
pet feat(desktop): roaming pet patrols the base of an open overlay 2026-06-29 14:57:26 -05:00
ui feat(desktop): live gateway popout + statusbar/command-center polish 2026-06-28 21:26:15 -05:00
Backdrop.tsx Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
boot-failure-overlay.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
boot-failure-reauth.test.ts feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
boot-failure-reauth.ts feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
brand-mark.tsx docs(desktop): add DESIGN.md design-system guide + close two consistency gaps (#40823) 2026-06-06 22:13:17 +00:00
desktop-install-overlay.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
desktop-onboarding-overlay.test.tsx fix(desktop): collect + persist API key for custom OpenAI endpoints (#43896) 2026-06-12 00:03:55 +00:00
desktop-onboarding-overlay.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
error-boundary.tsx feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
gateway-connecting-overlay.test.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
gateway-connecting-overlay.tsx fix(desktop): keep composer usable during reconnect (#45488) 2026-06-13 02:36:09 -07:00
haptics-provider.tsx perf(desktop): faster session resume & warm AudioContext at idle 2026-06-12 21:07:40 -05:00
language-switcher.test.tsx Add searchable language picker 2026-06-06 07:51:44 -07:00
language-switcher.tsx Add searchable language picker 2026-06-06 07:51:44 -07:00
model-picker.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
model-visibility-dialog.tsx fix(desktop): preserve other providers' hide-all in model visibility dialog 2026-06-21 15:42:26 +05:30
notifications.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
page-loader.tsx Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
prompt-overlays.tsx fix: show desktop approval fallback (#46548) 2026-06-21 18:57:18 -05:00
remote-display-banner.tsx feat(desktop): notify renderer when GPU acceleration is disabled due to remote display 2026-06-19 16:59:47 -07:00
session-picker.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
status-dot.tsx Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00