From 5e6d7f9709f078d75092a410540317a72dfe9a9b Mon Sep 17 00:00:00 2001 From: DeskClaw Bot Date: Tue, 21 Apr 2026 17:44:01 +0000 Subject: [PATCH] feat: backend selector setting --- electron/main/index.ts | 5 ++++- electron/utils/store.ts | 2 ++ src/pages/Settings/index.tsx | 21 +++++++++++++++++++++ src/stores/settings.ts | 11 +++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/electron/main/index.ts b/electron/main/index.ts index 49550b44d..f115da0c1 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -474,8 +474,9 @@ async function initialize(): Promise { }); // Start Gateway automatically (this seeds missing bootstrap files with full templates) + const gatewayBackend = await getSetting('gatewayBackend'); const gatewayAutoStart = await getSetting('gatewayAutoStart'); - if (!isE2EMode && gatewayAutoStart) { + if (!isE2EMode && gatewayBackend === 'openclaw' && gatewayAutoStart) { try { await syncAllProviderAuthToRuntime(); logger.debug('Auto-starting Gateway...'); @@ -487,6 +488,8 @@ async function initialize(): Promise { } } else if (isE2EMode) { logger.info('Gateway auto-start skipped in E2E mode'); + } else if (gatewayBackend !== 'openclaw') { + logger.info(`Gateway auto-start skipped (backend=${gatewayBackend})`); } else { logger.info('Gateway auto-start disabled in settings'); } diff --git a/electron/utils/store.ts b/electron/utils/store.ts index 4d8bb8a9b..ea21f5506 100644 --- a/electron/utils/store.ts +++ b/electron/utils/store.ts @@ -35,6 +35,7 @@ export interface AppSettings { gatewayAutoStart: boolean; gatewayPort: number; gatewayToken: string; + gatewayBackend: 'openclaw' | 'hermes'; proxyEnabled: boolean; proxyServer: string; proxyHttpServer: string; @@ -86,6 +87,7 @@ function createDefaultSettings(): AppSettings { gatewayAutoStart: true, gatewayPort: 18789, gatewayToken: generateToken(), + gatewayBackend: 'openclaw', proxyEnabled: false, proxyServer: '', proxyHttpServer: '', diff --git a/src/pages/Settings/index.tsx b/src/pages/Settings/index.tsx index c47f69424..a714f3e6c 100644 --- a/src/pages/Settings/index.tsx +++ b/src/pages/Settings/index.tsx @@ -18,6 +18,7 @@ import { Switch } from '@/components/ui/switch'; import { Separator } from '@/components/ui/separator'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; +import { Select } from '@/components/ui/select'; import { toast } from 'sonner'; import { useSettingsStore } from '@/stores/settings'; import { useGatewayStore } from '@/stores/gateway'; @@ -57,6 +58,8 @@ export function Settings() { setLaunchAtStartup, gatewayAutoStart, setGatewayAutoStart, + gatewayBackend, + setGatewayBackend, proxyEnabled, proxyServer, proxyHttpServer, @@ -627,6 +630,24 @@ export function Settings() { /> +
+
+ +

+ OpenClaw is the built-in gateway. Hermes requires WSL2 on Windows. +

+
+
+ +
+
+
diff --git a/src/stores/settings.ts b/src/stores/settings.ts index 7c89e410d..17d9997b5 100644 --- a/src/stores/settings.ts +++ b/src/stores/settings.ts @@ -10,6 +10,7 @@ import { resolveSupportedLanguage } from '../../shared/language'; type Theme = 'light' | 'dark' | 'system'; type UpdateChannel = 'stable' | 'beta' | 'dev'; +type GatewayBackend = 'openclaw' | 'hermes'; interface SettingsState { // General @@ -22,6 +23,7 @@ interface SettingsState { // Gateway gatewayAutoStart: boolean; gatewayPort: number; + gatewayBackend: GatewayBackend; proxyEnabled: boolean; proxyServer: string; proxyHttpServer: string; @@ -50,6 +52,7 @@ interface SettingsState { setTelemetryEnabled: (value: boolean) => void; setGatewayAutoStart: (value: boolean) => void; setGatewayPort: (port: number) => void; + setGatewayBackend: (value: GatewayBackend) => void; setProxyEnabled: (value: boolean) => void; setProxyServer: (value: string) => void; setProxyHttpServer: (value: string) => void; @@ -73,6 +76,7 @@ const defaultSettings = { telemetryEnabled: true, gatewayAutoStart: true, gatewayPort: 18789, + gatewayBackend: 'openclaw' as GatewayBackend, proxyEnabled: false, proxyServer: '', proxyHttpServer: '', @@ -157,6 +161,13 @@ export const useSettingsStore = create()( body: JSON.stringify({ value: gatewayPort }), }).catch(() => { }); }, + setGatewayBackend: (gatewayBackend) => { + set({ gatewayBackend }); + void hostApiFetch('/api/settings/gatewayBackend', { + method: 'PUT', + body: JSON.stringify({ value: gatewayBackend }), + }).catch(() => { }); + }, setProxyEnabled: (proxyEnabled) => set({ proxyEnabled }), setProxyServer: (proxyServer) => set({ proxyServer }), setProxyHttpServer: (proxyHttpServer) => set({ proxyHttpServer }),