import { useState, useEffect, useCallback } from 'react'; import { TopBar } from './components/Layout/TopBar'; import { CollapsibleSidebar } from './components/Layout/CollapsibleSidebar'; import { SettingsLayout } from './components/Settings/SettingsLayout'; import { AgentLayout } from './components/Agent/AgentLayout'; import { PluginLayout } from './components/Plugin/PluginLayout'; import { LeftPanel } from './components/Chat/LeftPanel'; import { ChatPanel } from './components/Chat/ChatPanel'; import { RightPanel } from './components/Chat/RightPanel'; import { WorkflowListView } from './components/Chat/WorkflowListView'; import { NewWorkflowDialog } from './components/Chat/NewWorkflowDialog'; import { AuthPage } from './components/Auth/AuthPage'; import apiClient from './api/client'; import type { ChatSessionDB } from './types'; export interface Message { id: string; role: 'user' | 'assistant' | 'system'; content: string; timestamp: number; } export interface ChatSession { id: string; title: string; messages: Message[]; updatedAt: number; } function mapSessionFromDB(s: ChatSessionDB): ChatSession { return { id: s.chat_id, title: s.title, messages: [], updatedAt: new Date(s.updated_at).getTime(), }; } function App() { const [isAuthenticated, setIsAuthenticated] = useState(false); const [mode, setMode] = useState<'work' | 'agent'>('work'); const [showSettings, setShowSettings] = useState(false); const [isSidebarOpen, setIsSidebarOpen] = useState(true); const [workTab, setWorkTab] = useState<'chat' | 'workflow'>('chat'); const [selectedWorkflow, setSelectedWorkflow] = useState(null); const [agentTab, setAgentTab] = useState<'plugin' | 'agents'>('plugin'); const [settingsTab, setSettingsTab] = useState('users'); const [innerAgentTab, setInnerAgentTab] = useState('worker'); const [resourceTab, setResourceTab] = useState('skill'); const [chatSessions, setChatSessions] = useState([]); const [activeSessionId, setActiveSessionId] = useState(null); const loadChatSessions = useCallback(async () => { try { const response = await apiClient.get('/api/v1/chat'); const sessions: ChatSessionDB[] = response.data?.sessions || []; setChatSessions(sessions.map(mapSessionFromDB)); } catch (error) { console.error('Failed to load chat sessions', error); } }, []); useEffect(() => { const token = localStorage.getItem('token'); if (token) { setIsAuthenticated(true); } }, []); useEffect(() => { if (isAuthenticated) { loadChatSessions(); } }, [isAuthenticated, loadChatSessions]); if (!isAuthenticated) { return setIsAuthenticated(true)} />; } return (
{showSettings ? ( ) : ( <>
{mode === 'work' && workTab === 'chat' && (
{}} chatSessions={chatSessions} setChatSessions={setChatSessions} activeSessionId={activeSessionId} setActiveSessionId={setActiveSessionId} onSessionsChanged={loadChatSessions} />
)} {mode === 'work' && workTab === 'workflow' && ( <> {selectedWorkflow === 'new' ? ( <> setSelectedWorkflow(null)} onSuccess={(traceId: string) => setSelectedWorkflow(traceId)} /> ) : selectedWorkflow ? ( <> ) : ( )} )} {mode === 'agent' && agentTab === 'agents' && ( )} {mode === 'agent' && agentTab === 'plugin' && ( )}
)}
); } export default App;