diff --git a/backend/app/services/sandbox_providers/factory.py b/backend/app/services/sandbox_providers/factory.py index a4d3ee4..68a90ad 100644 --- a/backend/app/services/sandbox_providers/factory.py +++ b/backend/app/services/sandbox_providers/factory.py @@ -51,6 +51,10 @@ def create( return ModalSandboxProvider(api_key=api_key) if provider_type == SandboxProviderType.HOST: + if not settings.DESKTOP_MODE: + raise SandboxException( + "Host provider is only available in the desktop app" + ) host_base_dir = settings.get_host_sandbox_base_dir() return LocalHostProvider( base_dir=host_base_dir, diff --git a/frontend/src/components/settings/tabs/GeneralSettingsTab.tsx b/frontend/src/components/settings/tabs/GeneralSettingsTab.tsx index eb3b51b..60497e7 100644 --- a/frontend/src/components/settings/tabs/GeneralSettingsTab.tsx +++ b/frontend/src/components/settings/tabs/GeneralSettingsTab.tsx @@ -8,6 +8,7 @@ import type { Theme } from '@/types/ui.types'; import { useUIStore } from '@/store/uiStore'; import { SecretInput } from '@/components/settings/inputs/SecretInput'; import { cn } from '@/utils/cn'; +import { isTauri } from '@tauri-apps/api/core'; interface GeneralSettingsTabProps { fields: GeneralSecretFieldConfig[]; @@ -111,7 +112,9 @@ export const GeneralSettingsTab: React.FC = ({ value={settings.sandbox_provider ?? 'docker'} onChange={(val) => onSandboxProviderChange(val as SandboxProviderType)} options={[ - { value: 'host', label: 'Host (Local)', disabled: false }, + ...(isTauri() + ? [{ value: 'host', label: 'Host (Local)', disabled: false }] + : []), { value: 'docker', label: 'Docker (Local)', disabled: false }, { value: 'e2b', label: 'E2B (Cloud)', disabled: !savedSettings?.e2b_api_key }, { value: 'modal', label: 'Modal (Cloud)', disabled: !savedSettings?.modal_api_key },