hermes-agent/apps/desktop/electron
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
..
backend-command.cjs fix(desktop): route old runtimes through dashboard when serve is absent 2026-06-28 22:10:42 -05:00
backend-command.test.cjs fix(desktop): route old runtimes through dashboard when serve is absent 2026-06-28 22:10:42 -05:00
backend-env.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
backend-env.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
backend-probes.cjs fix(desktop): probe venv runtime health before trusting bootstrap marker 2026-06-28 02:40:37 -07:00
backend-probes.test.cjs fix(desktop): probe venv runtime health before trusting bootstrap marker 2026-06-28 02:40:37 -07:00
backend-ready.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
backend-ready.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
bootstrap-platform.cjs chore(desktop): zero eslint/typecheck debt + prettier pass (#39100) 2026-06-04 14:10:38 +00:00
bootstrap-platform.test.cjs chore(desktop): zero eslint/typecheck debt + prettier pass (#39100) 2026-06-04 14:10:38 +00:00
bootstrap-runner.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
bootstrap-runner.test.cjs fix(desktop): bootstrap falls back to installed agent install.sh on GitHub 404 2026-06-07 03:46:12 -07:00
connection-config.cjs feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
connection-config.test.cjs feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
dashboard-token.cjs refactor(desktop): use native fetch in dashboard-token 2026-06-11 18:41:16 -05:00
dashboard-token.test.cjs refactor(desktop): fold served-token adoption + foreign-backend refusal into one helper 2026-06-11 18:33:05 -05:00
desktop-uninstall.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
desktop-uninstall.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
embed-referer.cjs feat(desktop): lazy embed renderers + fenced diagrams/alerts 2026-06-26 03:22:08 -05:00
entitlements.mac.inherit.plist fix(desktop): inherit microphone entitlement for macOS helpers 2026-06-03 07:32:00 +07:00
entitlements.mac.plist Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
fs-read-dir.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
fs-read-dir.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
gateway-ws-probe.cjs test(desktop): add injectable gateway WebSocket probe + unit tests 2026-06-04 19:49:06 -07:00
gateway-ws-probe.test.cjs test(desktop): add injectable gateway WebSocket probe + unit tests 2026-06-04 19:49:06 -07:00
git-repo-scan.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
git-review-ops.cjs fix(desktop): stop hermes desktop from clobbering tracked main.cjs (#52735) 2026-06-28 01:30:09 -04:00
git-review-ops.test.cjs feat(desktop): add git worktree and review IPC 2026-06-25 16:40:27 -05:00
git-root.cjs fix(desktop): Harden local file tree paths (#43618) 2026-06-11 10:05:59 -04:00
git-root.test.cjs fix(desktop): Harden local file tree paths (#43618) 2026-06-11 10:05:59 -04:00
git-worktree-ops.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
git-worktree-ops.test.cjs fix(desktop): clarify branch convert actions 2026-06-25 17:19:36 -05:00
hardening.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
hardening.test.cjs feat(desktop): composer status stack, live subagent windows, editable prompts (#44630) 2026-06-12 08:30:06 -05:00
link-title-window.cjs fix(desktop): mute hidden link-title window so historical links don't autoplay audio 2026-06-20 14:53:05 +05:30
link-title-window.test.cjs test(desktop): cover link-title window audio muting 2026-06-20 14:53:05 +05:30
main.cjs feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
oauth-net-request.cjs fix(desktop): avoid restricted oauth request header 2026-06-05 18:04:45 -07:00
oauth-net-request.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
preload.cjs feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
session-windows.cjs fix(desktop): keep streaming painting in unfocused secondary chat windows (#47919) 2026-06-17 14:40:13 -04:00
session-windows.test.cjs fix(desktop): keep streaming painting in unfocused secondary chat windows (#47919) 2026-06-17 14:40:13 -04:00
titlebar-overlay-width.cjs fix(desktop): reserve WCO width on plain Linux + author map 2026-06-27 22:05:33 -07:00
titlebar-overlay-width.test.cjs fix(desktop): reserve WCO width on plain Linux + author map 2026-06-27 22:05:33 -07:00
update-count.cjs fix(desktop): skip the rev-list count when it is discarded anyway 2026-06-24 19:12:09 -05:00
update-count.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
update-marker.cjs fix(desktop/windows): stop in-app update from cascading into a backend restart loop (#50381) 2026-06-21 13:10:32 -07:00
update-marker.test.cjs fix(desktop/windows): stop in-app update from cascading into a backend restart loop (#50381) 2026-06-21 13:10:32 -07:00
update-rebuild.cjs fix(desktop): retry the self-update rebuild once so the app relaunches (#48122) 2026-06-17 19:33:27 -05:00
update-rebuild.test.cjs fix(desktop): retry the self-update rebuild once so the app relaunches (#48122) 2026-06-17 19:33:27 -05:00
update-relaunch.cjs fix(desktop): relaunch on Linux after in-app update instead of hanging (#45205) 2026-06-21 17:04:52 -07:00
update-relaunch.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
update-remote.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
update-remote.test.cjs test(desktop): cover official-SSH remote detection for passive updates 2026-06-11 12:53:19 +05:30
vscode-marketplace.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
vscode-marketplace.test.cjs feat(desktop): install any VS Code theme from the Marketplace 2026-06-09 23:06:44 -05:00
window-state.cjs feat(desktop): remember window size/position/maximized across launches (salvage #39154) 2026-06-24 13:32:05 -05:00
window-state.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
windows-child-process.test.cjs test(desktop): match multiline spawn(ps, fullArgs) via regex like sibling sites 2026-06-28 23:59:32 -07:00
windows-hermes-resolution.test.cjs fix(desktop/windows): resolve real hermes over extensionless shim + prefer --update on recovery 2026-06-28 02:40:37 -07:00
windows-user-env.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
windows-user-env.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
workspace-cwd.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
workspace-cwd.test.cjs style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
wsl-clipboard-image.cjs fix(desktop): WSL2 clipboard image paste + Linux titlebar overlay 2026-06-25 23:50:59 -05:00
wsl-clipboard-image.test.cjs fix(desktop): WSL2 clipboard image paste + Linux titlebar overlay 2026-06-25 23:50:59 -05:00