import { useEffect, useState } from 'react' import { Sidebar } from './Sidebar' import { ContentRouter } from './ContentRouter' import { ToastContainer } from '../shared/Toast' import { useSettingsStore } from '../../stores/settingsStore' import { useKeyboardShortcuts } from '../../hooks/useKeyboardShortcuts' import { initializeDesktopServerUrl } from '../../lib/desktopRuntime' import { TabBar } from './TabBar' import { useTabStore } from '../../stores/tabStore' import { useChatStore } from '../../stores/chatStore' export function AppShell() { const fetchSettings = useSettingsStore((s) => s.fetchAll) const [ready, setReady] = useState(false) const [startupError, setStartupError] = useState(null) useEffect(() => { let cancelled = false const bootstrap = async () => { try { await initializeDesktopServerUrl() await fetchSettings() // Restore tabs from localStorage await useTabStore.getState().restoreTabs() const activeId = useTabStore.getState().activeTabId if (activeId) { useChatStore.getState().connectToSession(activeId) } if (!cancelled) { setReady(true) } } catch (error) { if (!cancelled) { setStartupError(error instanceof Error ? error.message : String(error)) setReady(false) } } } void bootstrap() return () => { cancelled = true } }, [fetchSettings]) useKeyboardShortcuts() if (startupError) { return (

Local server failed to start

{startupError}

) } if (!ready) { return (
Launching local workspace...
) } return (
) }