import { useState, useCallback, useEffect } from 'react'; import { AuthProvider, useAuth } from './contexts/AuthContext'; import { HostProvider } from './contexts/HostContext'; import { SettingsProvider } from './contexts/SettingsContext'; import { UIProvider, useUI } from './contexts/UIContext'; import { MessagesProvider } from './contexts/MessagesContext'; import { SessionsProvider, useSessions } from './contexts/SessionsContext'; import { Sidebar } from './components/Sidebar'; import { TabBar } from './components/TabBar'; import { ChatPanel } from './components/ChatPanel'; import { SplitLayout } from './components/SplitLayout'; import { LoginPage } from './components/LoginPage'; import { Menu, Loader2 } from 'lucide-react'; function AppContent() { const { sessions, createSession } = useSessions(); const { tabOrder, splitSessions, focusedSessionId } = useUI(); const [sidebarOpen, setSidebarOpen] = useState(true); // Create initial session if none exists useEffect(() => { if (tabOrder.length === 0) { createSession('neko', '/home/sumdex/projects'); } }, [tabOrder.length, createSession]); const handleToggleSidebar = useCallback(() => { setSidebarOpen(prev => !prev); }, []); // Keyboard shortcuts useEffect(() => { const handleKeyDown = (e) => { // Ctrl+T: New tab if (e.ctrlKey && e.key === 't') { e.preventDefault(); createSession(); } // Ctrl+B: Toggle sidebar if (e.ctrlKey && e.key === 'b') { e.preventDefault(); setSidebarOpen(prev => !prev); } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [createSession]); // Render panel content for a session const renderPanel = useCallback((sessionId) => { return ; }, []); return (
{/* Sidebar */} {/* Main Content */}
{/* Header with TabBar */}
{/* Sidebar toggle for mobile */} {/* Tab Bar */}
{/* Content Area */}
{splitSessions.length > 0 ? ( // Split view mode ) : focusedSessionId ? ( // Single panel mode ) : ( // No session

No sessions open

Click the + button to create a new session

)}
); } // Loading screen while checking auth function LoadingScreen() { return (

Loading...

); } // Auth wrapper - shows login or main app function AuthenticatedApp() { const { isAuthenticated, loading } = useAuth(); if (loading) { return ; } if (!isAuthenticated) { return ; } return ( ); } function App() { return ( ); } export default App;