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
No sessions open
Click the + button to create a new session
Loading...