From c83f85abe69e1dcbc9ab7c78a7d479a1d0252b51 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 8 Jul 2026 10:07:14 +1000 Subject: [PATCH] =?UTF-8?q?revert(desktop):=20remove=20the=20BETA=20gate?= =?UTF-8?q?=20=E2=80=94=20ship=20Hermes=20Cloud=20selector=20by=20default?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts the beta gating from 34d7d3f. The Hermes Cloud ModeCard in Settings → Gateway now renders unconditionally alongside Local and Remote; no BETA env var is consulted. Not a clean `git revert`: commit 1b54d38 (the org-persist / stale-closure fix) landed after the beta commit and edited the same useState block in gateway-settings.tsx, so the revert conflicted there. Resolved by keeping 1b54d38's cloudOrgRef/setCloudOrg wrapper and dropping only the cloudBetaEnabled state + its betaEnabled() useEffect. Everything else (the sm:grid-cols-3 grid, the unconditional ModeCard, main.cjs/preload.cjs/ global.d.ts beta IPC) reverted automatically. - main.cjs: drop betaFeaturesEnabled() + hermes:cloud:beta-enabled IPC - preload.cjs / global.d.ts: drop the cloud.betaEnabled() bridge + type - gateway-settings.tsx: drop the beta fetch/state; ModeCard renders unconditionally; grid back to sm:grid-cols-3 No test referenced the flag, so no test fallout. tsc clean; eslint clean on all touched files. --- apps/desktop/electron/main.cjs | 11 ----- apps/desktop/electron/preload.cjs | 1 - .../src/app/settings/gateway-settings.tsx | 48 ++++--------------- apps/desktop/src/global.d.ts | 2 - 4 files changed, 9 insertions(+), 53 deletions(-) diff --git a/apps/desktop/electron/main.cjs b/apps/desktop/electron/main.cjs index b321189c521..3172ae0ea99 100644 --- a/apps/desktop/electron/main.cjs +++ b/apps/desktop/electron/main.cjs @@ -6628,17 +6628,6 @@ ipcMain.handle('hermes:cloud:status', async () => ({ portalBaseUrl: resolvePortalBaseUrl(), signedIn: await hasLivePortalSession() })) - -// Whether the Hermes Cloud gateway selector is enabled — gated behind a BETA -// env flag while the feature is in beta. Truthy values: '1', 'true', 'yes', -// 'on' (case-insensitive). Absent, empty, 'false', '0', etc. → disabled, so the -// renderer hides the Cloud ModeCard entirely. -function betaFeaturesEnabled() { - const raw = String(process.env.BETA ?? '').trim().toLowerCase() - return raw === '1' || raw === 'true' || raw === 'yes' || raw === 'on' -} - -ipcMain.handle('hermes:cloud:beta-enabled', async () => betaFeaturesEnabled()) ipcMain.handle('hermes:cloud:login', async () => { await openPortalLoginWindow() return { ok: true, signedIn: await hasLivePortalSession() } diff --git a/apps/desktop/electron/preload.cjs b/apps/desktop/electron/preload.cjs index 17b4da9995a..a4bfeddd30a 100644 --- a/apps/desktop/electron/preload.cjs +++ b/apps/desktop/electron/preload.cjs @@ -45,7 +45,6 @@ contextBridge.exposeInMainWorld('hermesDesktop', { // (cloud-auto-discovery Phase 3). cloud: { status: () => ipcRenderer.invoke('hermes:cloud:status'), - betaEnabled: () => ipcRenderer.invoke('hermes:cloud:beta-enabled'), login: () => ipcRenderer.invoke('hermes:cloud:login'), logout: () => ipcRenderer.invoke('hermes:cloud:logout'), discover: org => ipcRenderer.invoke('hermes:cloud:discover', org), diff --git a/apps/desktop/src/app/settings/gateway-settings.tsx b/apps/desktop/src/app/settings/gateway-settings.tsx index 0ff4244a35b..e00f3d1de2d 100644 --- a/apps/desktop/src/app/settings/gateway-settings.tsx +++ b/apps/desktop/src/app/settings/gateway-settings.tsx @@ -141,34 +141,6 @@ export function GatewaySettings() { setCloudOrgState(value) } - // Hermes Cloud is beta-gated: the selector ModeCard only appears when the main - // process reports the BETA env flag is enabled. Default hidden until the async - // check resolves, so it never flashes in for non-beta users. - const [cloudBetaEnabled, setCloudBetaEnabled] = useState(false) - useEffect(() => { - const desktop = window.hermesDesktop - - if (!desktop?.cloud?.betaEnabled) { - return - } - - let cancelled = false - desktop.cloud - .betaEnabled() - .then(enabled => { - if (!cancelled) { - setCloudBetaEnabled(Boolean(enabled)) - } - }) - .catch(() => { - if (!cancelled) { - setCloudBetaEnabled(false) - } - }) - - return () => void (cancelled = true) - }, []) - // Connection scope: null = the global/default connection (the original // behavior); a profile name = that profile's per-profile remote override, so // each profile can point at its own backend. @@ -773,7 +745,7 @@ export function GatewaySettings() { ) : null} -
+
setState(current => ({ ...current, mode: 'local' }))} title={g.localTitle} /> - {cloudBetaEnabled ? ( - setState(current => ({ ...current, mode: 'cloud' }))} - title={g.cloudTitle} - /> - ) : null} + setState(current => ({ ...current, mode: 'cloud' }))} + title={g.cloudTitle} + /> Promise - // Whether the BETA env flag enables the Hermes Cloud gateway selector. - betaEnabled: () => Promise login: () => Promise logout: () => Promise discover: (org?: string) => Promise