import { useState } from "preact/hooks"; import { AgentWorkspace, FeedWorkspace, SwipeWorkspace, useAppPresentation, useSessionDrawerEdgeSwipe, } from "./appShell/presentation"; import { VoiceStatus } from "./components/Controls"; import { SessionDrawer } from "./components/SessionDrawer"; import { WorkbenchOverlay } from "./components/WorkbenchOverlay"; import { useWebRTC } from "./hooks/useWebRTC"; import type { ThemeName, ThemeOption } from "./theme/themes"; import { useThemePreference } from "./theme/useThemePreference"; function AgentPanel({ app, rtc, sessionDrawerOpen, setSessionDrawerOpen, sessionDrawerEdgeGesture, activeTheme, themeOptions, onSelectTheme, }: { app: ReturnType; rtc: ReturnType; sessionDrawerOpen: boolean; setSessionDrawerOpen(open: boolean): void; sessionDrawerEdgeGesture: ReturnType; activeTheme: ThemeName; themeOptions: ThemeOption[]; onSelectTheme(themeName: ThemeName): void; }) { return ( ) : null } logLines={rtc.logLines} connected={rtc.connected} onSendMessage={app.handleSendMessage} effectiveAgentState={app.effectiveAgentState} textStreaming={rtc.textStreaming} connecting={rtc.connecting} audioLevel={app.audioLevel} sessionDrawer={ 0 && !sessionDrawerOpen} sessions={rtc.sessions} activeSessionId={rtc.activeSessionId} busy={rtc.sessionLoading || rtc.textStreaming} onClose={() => setSessionDrawerOpen(false)} onCreate={async () => { await rtc.createSession(); setSessionDrawerOpen(false); }} onSelect={async (chatId) => { await rtc.switchSession(chatId); setSessionDrawerOpen(false); }} onRename={async (chatId, title) => { await rtc.renameSession(chatId, title); }} onDelete={async (chatId) => { await rtc.deleteSession(chatId); setSessionDrawerOpen(false); }} activeTheme={activeTheme} themeOptions={themeOptions} onSelectTheme={onSelectTheme} /> } workbenchOverlay={ } /> ); } function FeedPanel({ app, rtc, }: { app: ReturnType; rtc: ReturnType; }) { return ( ); } export function App() { const rtc = useWebRTC(); const app = useAppPresentation(rtc); const theme = useThemePreference(); const [sessionDrawerOpen, setSessionDrawerOpen] = useState(false); const sessionDrawerEdgeGesture = useSessionDrawerEdgeSwipe({ enabled: app.view === "agent" && !sessionDrawerOpen, onOpen: () => setSessionDrawerOpen(true), }); return ( <> } feedWorkspace={} /> ); }