hermes-agent/apps/desktop/src
Ben 7e06e61fc8 fix(desktop): Hermes Cloud sign-in uses Privy session + multi-org org picker
Two fixes surfaced by the first live end-to-end test of cloud sign-in (both
would have shipped broken — green units + code review did not catch them).

1. Portal session is PRIVY, not Hermes-gateway cookies (Q7). Phase 3 polled for
   hermes_session_at/rt on the portal host, but the Nous portal (NAS) is a
   Privy-authed Next.js app — it sets privy-token (which NAS auth() and the
   /api/agents cookie path both read). The sign-in window therefore never
   detected success and hung. Fix: cookiesHavePrivySession (privy-token + __Host/
   __Secure/legacy privy-session variants) in connection-config.cjs, and
   hasLivePortalSession now checks the Privy cookie on the portal host. The
   per-agent silent cascade still uses the gateway-cookie check (each agent IS a
   Hermes gateway).

2. Multi-org discovery needs an org picker (Q8). A portal session carries no org
   pin, so a user in >1 org got a dead-end 403. Paired with NAS #545 (merged):
   /api/agents now returns 409 org_selection_required + the user's org list, and
   accepts a membership-validated ?org=. discoverCloudAgents(org) appends ?org=,
   and on 409 returns { needsOrgSelection, orgs } instead of throwing; the cloud
   panel shows a 'Choose an organization' picker, then re-runs discovery scoped
   to the chosen org (with a 'Change org' affordance for multi-org users).

Also reverts the ERR_NETWORK_CHANGED retry helper from the prior commit: the
IPv6-churn aborts on Ben's Arch host are a host/network-layer issue, and a
client reload can't safely drive Privy's single-use-code redirect chain
(disable IPv6 for the session is the workaround). Kept out of this feature PR.

Tests: connection-config.test.cjs (57, +5 Privy-cookie cases, proven to fail
without the helper); boot-failure-reauth (16). tsc + eslint clean. Verified live
end-to-end against prod portal: sign-in → org picker → scoped agent list →
silent per-agent connect.

cloud-auto-discovery Phases 3+4 follow-up (decisions.md Q7, Q8).
2026-07-01 09:44:23 +10:00
..
app fix(desktop): Hermes Cloud sign-in uses Privy session + multi-org org picker 2026-07-01 09:44:23 +10:00
components feat(desktop): cloud connection mode plumbing — widen mode, portal login, discovery, silent cascade 2026-06-30 13:45:33 +10:00
fonts fix(desktop): crisp terminal text via opaque xterm canvas 2026-06-12 19:36:30 -05:00
hooks feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
i18n fix(desktop): Hermes Cloud sign-in uses Privy session + multi-org org picker 2026-07-01 09:44:23 +10:00
lib feat(desktop): Hermes Cloud mode card + agent picker in Gateway settings 2026-06-30 13:55:34 +10:00
store feat(desktop): mirror voice.auto_tts into an $autoSpeakReplies store 2026-06-29 15:22:37 -05:00
themes style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
types feat(desktop): type voice.auto_tts in desktop config 2026-06-29 15:22:37 -05:00
global.d.ts fix(desktop): Hermes Cloud sign-in uses Privy session + multi-org org picker 2026-07-01 09:44:23 +10:00
hermes-profile-scope.test.ts fix(desktop): route gateway restart / status / update to the active profile 2026-06-24 19:16:26 -05:00
hermes.test.ts fix(desktop): route profile session reads 2026-06-11 18:09:24 -05:00
hermes.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
main.tsx feat(desktop): floating pet, pop-out overlay + Cmd+K picker 2026-06-20 14:18:40 -05:00
styles.css feat(desktop): add context usage breakdown popover 2026-06-29 09:18:10 -04:00
vite-env.d.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00