@burtson-labs/bandit-engine 2.0.52 → 2.0.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -12
- package/dist/{aiProviderStore-3N3VE6D4.mjs → aiProviderStore-337QNQB3.mjs} +2 -2
- package/dist/{chat-YWYLVKXX.mjs → chat-IDE6Z4Q4.mjs} +6 -6
- package/dist/chat-provider.js +17 -9
- package/dist/chat-provider.js.map +1 -1
- package/dist/chat-provider.mjs +4 -4
- package/dist/{chunk-QX6CO7TJ.mjs → chunk-557E5VZ2.mjs} +3 -3
- package/dist/{chunk-MH7WFWCP.mjs → chunk-AVV7HDGR.mjs} +3 -3
- package/dist/{chunk-BENL3EF2.mjs → chunk-H3BYFEIE.mjs} +18 -10
- package/dist/chunk-H3BYFEIE.mjs.map +1 -0
- package/dist/{chunk-YZ2HJFPQ.mjs → chunk-KM7FUWCM.mjs} +4 -4
- package/dist/chunk-KM7FUWCM.mjs.map +1 -0
- package/dist/{chunk-M3BEAMCC.mjs → chunk-KNBWR4DS.mjs} +775 -488
- package/dist/chunk-KNBWR4DS.mjs.map +1 -0
- package/dist/{chunk-Y5N3NSTU.mjs → chunk-NP2OHTTX.mjs} +116 -152
- package/dist/chunk-NP2OHTTX.mjs.map +1 -0
- package/dist/{chunk-TSQCNHOX.mjs → chunk-TLY6A6XL.mjs} +123 -147
- package/dist/chunk-TLY6A6XL.mjs.map +1 -0
- package/dist/{chunk-37PEP5JK.mjs → chunk-UFSEYVRS.mjs} +3 -3
- package/dist/{chunk-RSSJADDD.mjs → chunk-WL7NV4WJ.mjs} +28 -32
- package/dist/chunk-WL7NV4WJ.mjs.map +1 -0
- package/dist/index.d.mts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +4097 -4045
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -15
- package/dist/index.mjs.map +1 -1
- package/dist/management/management.js +4068 -4016
- package/dist/management/management.js.map +1 -1
- package/dist/management/management.mjs +7 -7
- package/dist/modals/chat-modal/chat-modal.js +1401 -1279
- package/dist/modals/chat-modal/chat-modal.js.map +1 -1
- package/dist/modals/chat-modal/chat-modal.mjs +4 -4
- package/dist/{gateway-oScD5tvE.d.mts → public-BzsEWB08.d.mts} +11 -122
- package/dist/{gateway-oScD5tvE.d.ts → public-BzsEWB08.d.ts} +11 -122
- package/dist/public-types.d.mts +2 -32
- package/dist/public-types.d.ts +2 -32
- package/package.json +3 -11
- package/dist/chunk-BENL3EF2.mjs.map +0 -1
- package/dist/chunk-M3BEAMCC.mjs.map +0 -1
- package/dist/chunk-RSSJADDD.mjs.map +0 -1
- package/dist/chunk-TSQCNHOX.mjs.map +0 -1
- package/dist/chunk-Y5N3NSTU.mjs.map +0 -1
- package/dist/chunk-YZ2HJFPQ.mjs.map +0 -1
- package/dist/cli.js +0 -4084
- package/dist/cli.js.map +0 -1
- /package/dist/{aiProviderStore-3N3VE6D4.mjs.map → aiProviderStore-337QNQB3.mjs.map} +0 -0
- /package/dist/{chat-YWYLVKXX.mjs.map → chat-IDE6Z4Q4.mjs.map} +0 -0
- /package/dist/{chunk-QX6CO7TJ.mjs.map → chunk-557E5VZ2.mjs.map} +0 -0
- /package/dist/{chunk-MH7WFWCP.mjs.map → chunk-AVV7HDGR.mjs.map} +0 -0
- /package/dist/{chunk-37PEP5JK.mjs.map → chunk-UFSEYVRS.mjs.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modals/chat-modal/chat-modal.tsx","../src/modals/chat-modal/draggable-box.tsx","../src/modals/chat-modal/modal-header.tsx","../src/modals/chat-modal/query-input.tsx","../src/modals/chat-modal/chat-drawer.tsx","../src/shared/generic-loader.tsx","../src/hooks/useAiChat.ts","../src/hooks/useDraggable.ts"],"sourcesContent":["/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-4E6D-74941D\nconst __banditFingerprint_chatmodal_chatmodaltsx = 'BL-FP-1AAA0B-D0A0';\nconst __auditTrail_chatmodal_chatmodaltsx = 'BL-AU-MGOIKVVN-K5Z2';\n// File: chat-modal.tsx | Path: src/modals/chat-modal/chat-modal.tsx | Hash: 4e6dd0a0\n\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n Modal,\n InputAdornment,\n Tooltip,\n IconButton,\n Box,\n Avatar,\n Menu,\n MenuItem,\n ThemeProvider,\n Typography,\n} from \"@mui/material\";\nimport { useNavigate, type NavigateFunction } from \"react-router-dom\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport SendIcon from \"@mui/icons-material/Send\";\nimport RecordVoiceOverIcon from \"@mui/icons-material/RecordVoiceOver\";\nimport DraggableBox from \"./draggable-box\";\nimport ModalHeader from \"./modal-header\";\nimport QueryInput from \"./query-input\";\nimport AIResponseTextField from \"./ai-response-text-field\";\nimport indexedDBService from \"../../services/indexedDB/indexedDBService\";\nimport AIQueriesDrawer from \"./chat-drawer\";\nimport GenericLoader from \"../../shared/generic-loader\";\nimport { FeedbackButton } from \"../../components/feedback/FeedbackButton\";\nimport useAIChat from \"../../hooks/useAiChat\";\nimport useDraggable from \"../../hooks/useDraggable\";\nimport { useAIQueryStore } from \"../../store/aiQueryStore\";\nimport { useModelStore } from \"../../store/modelStore\";\nimport { useVoiceStore } from \"../../store/voiceStore\";\nimport { usePreferencesStore } from \"../../store/preferencesStore\";\nimport { usePackageSettingsStore } from \"../../store/packageSettingsStore\";\nimport { useNotificationService } from \"../../hooks/useNotificationService\";\nimport { useAIProviderStore } from \"../../store/aiProviderStore\";\nimport brandingService from \"../../services/branding/brandingService\";\nimport { debugLogger } from \"../../services/logging/debugLogger\";\nimport { banditDarkTheme } from \"../../theme/banditTheme\";\nimport themeMap from \"../../theme/themeMap\";\nimport { useTTS } from \"../../hooks/useTTS\";\nimport { Subscription } from \"rxjs\";\n\nexport const FULL_SCREEN_THRESHOLD = 100;\nexport const MIN_WINDOWED_HEIGHT = 400;\nexport const MAX_WINDOWED_HEIGHT = 600;\n\nconst CDN_BASE = \"https://cdn.burtson.ai/\";\nconst banditHead = `${CDN_BASE}/images/bandit-head.png`;\n\nconst modelAvatars: Record<string, string> = {\n \"Bandit-Core\": `${CDN_BASE}/avatars/core-avatar.png`,\n \"Bandit-Muse\": `${CDN_BASE}/avatars/muse-avatar.png`,\n \"Bandit-Logic\": `${CDN_BASE}/avatars/logic-avatar.png`,\n \"Bandit-D1VA\": `${CDN_BASE}/avatars/d1va-avatar.png`,\n \"Bandit-Exec\": `${CDN_BASE}/avatars/exec-avatar.png`,\n};\n\nconst useOptionalNavigate = (): NavigateFunction | null => {\n const hasLoggedRef = useRef(false);\n\n try {\n return useNavigate();\n } catch (error) {\n if (!hasLoggedRef.current) {\n debugLogger.debug(\"Navigation not available in ChatModal context\", { error });\n hasLoggedRef.current = true;\n }\n return null;\n }\n};\n\nexport interface ChatModalProps {\n /**\n * Controls whether the modal is rendered. When `true`, the modal\n * mounts and begins loading the latest conversation context.\n */\n open: boolean;\n /**\n * Invoked when the user clicks the close button or presses escape.\n * Consumers should toggle their `open` state off in this handler.\n */\n onClose: () => void;\n}\n\nconst ChatModal: React.FC<ChatModalProps> = ({\n open,\n onClose,\n}) => {\n const navigate = useOptionalNavigate();\n\n const getOptimalLogo = async (): Promise<string> => {\n const banditAiLogo = \"https://cdn.burtson.ai/logos/bandit-ai-logo.png\";\n\n try {\n // Try branding logo first\n const branding = await brandingService.getBranding();\n if (branding?.logoBase64) {\n return branding.logoBase64;\n }\n\n // Fallback to Bandit AI logo\n return banditAiLogo;\n } catch (error) {\n debugLogger.error(\"Failed to get optimal logo\", { error });\n return banditAiLogo;\n }\n };\n\n const {\n inputValue,\n response,\n previousQuestion,\n componentStatus,\n apiKey,\n history,\n setInputValue,\n setApiKey,\n } = useAIQueryStore();\n\n const {\n fullScreen,\n setFullScreen,\n drawerOpen,\n setDrawerOpen,\n showSettings,\n setShowSettings,\n handleSend,\n } = useAIChat();\n\n const { modalRef, position, setPosition, handleDrag, handleHeaderMouseDown } =\n useDraggable();\n\n const [pastedImages, setPastedImages] = useState<string[]>([]);\n const [responseStarted, setResponseStarted] = useState(false);\n const [modalLogo, setModalLogo] = useState<string>(\"https://cdn.burtson.ai/logos/bandit-ai-logo.png\");\n const [modelAnchorEl, setModelAnchorEl] = useState<null | HTMLElement>(null);\n const [voiceAnchorEl, setVoiceAnchorEl] = useState<null | HTMLElement>(null);\n const [audioSub, setAudioSub] = useState<Subscription>(new Subscription());\n const [selectedTheme, setSelectedTheme] = useState<string | null>(null);\n const [themeLoading, setThemeLoading] = useState(true);\n const [autoFullscreenTriggered, setAutoFullscreenTriggered] = useState(false);\n const [userHasDragged, setUserHasDragged] = useState(false);\n const [manualFullscreenToggleTime, setManualFullscreenToggleTime] = useState<number>(0);\n\n // Function to center modal when exiting fullscreen\n const handleExitFullscreen = () => {\n // Center the modal when exiting fullscreen\n setPosition({\n x: Math.max(0, window.innerWidth / 2 - 300),\n y: Math.max(0, window.innerHeight / 2 - 300),\n });\n // Reset drag tracking since we're repositioning\n setUserHasDragged(false);\n };\n\n // Custom drag handler that tracks user interaction\n const handleCustomDrag = (e: MouseEvent) => {\n handleDrag(e);\n setUserHasDragged(true); // Mark that user has manually positioned the modal\n };\n\n // Get the active theme based on what's saved in IndexedDB\n const activeTheme = themeMap[selectedTheme ?? \"bandit-dark\"] || banditDarkTheme;\n\n const { availableModels, selectedModel, setSelectedModel } = useModelStore();\n const SYSTEM_PROMPT = useModelStore((state) => state.systemPrompt);\n\n // Voice Store\n const { availableVoices, selectedVoice, setSelectedVoice } = useVoiceStore();\n \n // TTS functionality\n const { speak: ttsSpeak, stop: ttsStop, isAvailable: isTTSAvailable } = useTTS();\n\n // Other stores\n const { preferences } = usePreferencesStore();\n const { settings: packageSettings } = usePackageSettingsStore();\n const provider = useAIProviderStore((state) => state.provider);\n const notificationService = useNotificationService();\n\n // Get current model info\n const currentModel = availableModels.find(m => m.name === selectedModel);\n const currentAvatar = currentModel?.avatarBase64 || modelAvatars[selectedModel] || banditHead;\n\n const removeImage = (index: number) => {\n setPastedImages((prev) => prev.filter((_, i) => i !== index));\n };\n\n // Voice change handler - same as in chat.tsx\n const handleVoiceChange = async (newVoice: string) => {\n // Stop any current TTS playback FIRST\n ttsStop();\n \n // Force immediate voice change with cache clearing\n setSelectedVoice(newVoice);\n \n // Add a small delay to ensure voice store is updated\n await new Promise(resolve => setTimeout(resolve, 50));\n \n const voiceName = newVoice.split(\"-\")[1];\n const defaultModel = packageSettings?.defaultModel;\n\n // Get the friendly display name for the personality (use selectedModel which is the Bandit personality)\n const currentModelConfig = availableModels.find(m => m.name === selectedModel);\n const personalityName = currentModelConfig ? currentModelConfig.name.replace(\"Bandit-\", \"Bandit \") : (selectedModel || defaultModel || \"Bandit\");\n\n if (isTTSAvailable) {\n try {\n // Create the greeting directly - no AI generation needed\n const greetingText = `Hi, I'm ${personalityName} speaking with ${voiceName}'s voice.`;\n \n // Speak the greeting directly\n await ttsSpeak(greetingText, { useStreaming: true });\n \n } catch (ttsError) {\n debugLogger.error('TTS failed for voice greeting:', { error: ttsError instanceof Error ? ttsError.message : String(ttsError) });\n }\n }\n };\n\n // Helper function to capitalize voice names\n const toTitleCase = (str: string) => {\n return str.replace(/\\w\\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());\n };\n\n useEffect(() => {\n if (!SYSTEM_PROMPT) {\n const defaultModel = availableModels.length > 0 ? availableModels[0] : null;\n if (defaultModel) {\n setSelectedModel(defaultModel.name);\n }\n }\n }, [SYSTEM_PROMPT, availableModels, setSelectedModel]);\n\n // Cleanup audio subscription on unmount\n useEffect(() => {\n return () => {\n audioSub.unsubscribe();\n };\n }, [audioSub]);\n\n useEffect(() => {\n if (open) {\n // Always center the modal when it opens and reset drag tracking\n setPosition({\n x: Math.max(0, window.innerWidth / 2 - 300),\n y: Math.max(0, window.innerHeight / 2 - 300),\n });\n // Reset tracking states when modal opens\n setAutoFullscreenTriggered(false);\n setUserHasDragged(false);\n setManualFullscreenToggleTime(0);\n // Load optimal logo when modal opens\n getOptimalLogo().then(setModalLogo);\n }\n }, [open, setPosition]);\n\n // Load theme from IndexedDB (only when modal is open to avoid conflicts)\n useEffect(() => {\n if (!open) return; // Only load when modal is actually open\n \n const fetchTheme = async () => {\n try {\n const config = await indexedDBService.get<{ branding?: { theme?: string } }>(\n 'banditConfig',\n 1,\n 'config',\n 'main',\n [{ name: 'config', keyPath: 'id' }]\n );\n\n if (config?.branding?.theme) {\n setSelectedTheme(config.branding.theme);\n } else {\n // No theme saved, use default\n setSelectedTheme(\"bandit-dark\");\n }\n } catch (err) {\n debugLogger.error(\"Failed to load theme from IndexedDB:\", { error: err });\n // Fallback to default on error\n setSelectedTheme(\"bandit-dark\");\n } finally {\n setThemeLoading(false);\n }\n };\n\n fetchTheme();\n\n // Listen for custom theme change events only when modal is open\n const handleThemeChange = () => {\n if (open) { // Only handle theme changes when modal is open\n fetchTheme();\n }\n };\n\n window.addEventListener('bandit-theme-changed', handleThemeChange);\n\n return () => {\n window.removeEventListener('bandit-theme-changed', handleThemeChange);\n };\n }, [open]); // Depend on open state\n\n useLayoutEffect(() => {\n // Only auto-trigger fullscreen if:\n // 1. Modal has content (response exists)\n // 2. Not already in fullscreen\n // 3. Auto fullscreen hasn't been triggered yet (to prevent re-triggering)\n // 4. User hasn't manually toggled fullscreen recently (within 5 seconds)\n const timeSinceManualToggle = Date.now() - manualFullscreenToggleTime;\n const manualToggleRecentlyUsed = timeSinceManualToggle < 5000; // 5 seconds\n\n if (modalRef.current && response && !fullScreen && !autoFullscreenTriggered && !manualToggleRecentlyUsed) {\n // Get the modal's actual content height\n const modal = modalRef.current;\n\n // Use requestAnimationFrame to ensure DOM has updated\n requestAnimationFrame(() => {\n if (!modal) return;\n\n const modalHeight = modal.scrollHeight;\n const viewportHeight = window.innerHeight;\n const maxAllowedHeight = viewportHeight * 0.75; // 75% of viewport height (reduced from 80%)\n\n // Check if content is overflowing significantly\n if (modalHeight > maxAllowedHeight + FULL_SCREEN_THRESHOLD) {\n setFullScreen(true);\n setAutoFullscreenTriggered(true); // Mark that auto fullscreen was triggered\n }\n });\n }\n }, [\n response,\n fullScreen,\n autoFullscreenTriggered,\n manualFullscreenToggleTime,\n modalRef,\n setFullScreen,\n setAutoFullscreenTriggered,\n ]);\n\n useEffect(() => {\n const handlePaste = (e: ClipboardEvent) => {\n const items = e.clipboardData?.items;\n if (items) {\n for (const item of items) {\n if (item.type.startsWith(\"image/\")) {\n const file = item.getAsFile();\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n if (event.target?.result) {\n setPastedImages((prev) => [...prev, event.target!.result as string]);\n }\n };\n reader.readAsDataURL(file);\n }\n }\n }\n }\n };\n\n document.addEventListener(\"paste\", handlePaste);\n return () => {\n document.removeEventListener(\"paste\", handlePaste);\n };\n }, []);\n\n useEffect(() => {\n if (response && !responseStarted) {\n setResponseStarted(true);\n }\n }, [response, responseStarted]);\n\n const handleDrawerClose = () => setDrawerOpen(false);\n const handleClose = () => {\n // Reset fullscreen state when modal closes (unless on mobile)\n const isMobile = window.innerWidth < 600; // Simple mobile check\n if (!isMobile) {\n setFullScreen(false);\n }\n // Reset auto fullscreen tracking when modal closes\n setAutoFullscreenTriggered(false);\n // Reset theme loading state when modal closes\n setThemeLoading(true);\n onClose();\n };\n\n const onSend = (e: React.MouseEvent | React.KeyboardEvent, value: string) => {\n setResponseStarted(false);\n handleSend();\n };\n\n // Don't render until theme is loaded\n if (themeLoading) {\n return null;\n }\n\n return (\n <ThemeProvider theme={activeTheme}>\n <Modal open={open} onClose={handleClose}>\n <DraggableBox\n ref={modalRef}\n position={position}\n setPosition={setPosition}\n fullScreen={fullScreen}\n onDrag={handleCustomDrag}\n >\n <ModalHeader\n fullScreen={fullScreen}\n setFullScreen={setFullScreen}\n onClose={handleClose}\n onDrawerOpen={() => setDrawerOpen(true)}\n onMouseDown={handleHeaderMouseDown}\n logo={modalLogo}\n historyCount={history.length}\n onManualFullscreenToggle={() => {\n setAutoFullscreenTriggered(false);\n setManualFullscreenToggleTime(Date.now());\n }}\n onExitFullscreen={handleExitFullscreen}\n />\n\n {/* Scrollable content area */}\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\", // Let child handle scrolling\n minHeight: 0, // Important for flex scrolling\n }}\n >\n <Box\n sx={{\n flex: 1,\n overflow: \"auto\", // Enable scrolling here\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n // Ensure proper height calculation for both fullscreen and windowed\n height: fullScreen ? \"auto\" : \"100%\",\n maxHeight: fullScreen ? \"none\" : \"100%\",\n // Custom scrollbar styling\n \"&::-webkit-scrollbar\": {\n width: \"8px\",\n },\n \"&::-webkit-scrollbar-track\": {\n background: activeTheme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n borderRadius: \"4px\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n background: activeTheme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.2)\" : \"rgba(0,0,0,0.2)\",\n borderRadius: \"4px\",\n \"&:hover\": {\n background: activeTheme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.3)\" : \"rgba(0,0,0,0.3)\",\n },\n },\n }}\n >\n <QueryInput\n inputValue={inputValue}\n onChange={setInputValue}\n onSend={onSend}\n apiKey={apiKey}\n showSettings={showSettings}\n setShowSettings={setShowSettings}\n setApiKey={setApiKey}\n startAdornment={\n <InputAdornment position=\"start\" sx={{ gap: 1 }}>\n {/* Model selector with avatar */}\n <Tooltip title={`Current AI: ${selectedModel.replace(\"Bandit-\", \"\")}`} arrow>\n <IconButton\n onClick={(e) => setModelAnchorEl(e.currentTarget)}\n sx={{\n p: 0.5,\n borderRadius: \"8px\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n backgroundColor: activeTheme.palette.action.hover,\n transform: \"scale(1.05)\",\n },\n }}\n >\n <Avatar\n src={currentAvatar}\n alt={selectedModel}\n sx={{\n width: 32,\n height: 32,\n filter: \"brightness(1.7)\",\n border: `2px solid ${activeTheme.palette.primary.main}30`,\n transition: \"all 0.2s ease-in-out\",\n }}\n />\n </IconButton>\n </Tooltip>\n\n {/* Enhanced Model selection menu */}\n <Menu\n anchorEl={modelAnchorEl}\n open={Boolean(modelAnchorEl)}\n onClose={() => setModelAnchorEl(null)}\n transformOrigin={{ horizontal: 'left', vertical: 'top' }}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n PaperProps={{\n sx: {\n bgcolor: activeTheme.palette.background.paper,\n color: activeTheme.palette.text.primary,\n fontSize: \"0.875rem\",\n zIndex: 20000,\n maxHeight: 300,\n minWidth: 200,\n border: `1px solid ${activeTheme.palette.divider}`,\n borderRadius: \"12px\",\n boxShadow: activeTheme.palette.mode === \"dark\"\n ? \"0 8px 32px rgba(0,0,0,0.5)\"\n : \"0 8px 32px rgba(0,0,0,0.2)\",\n \"& .MuiMenuItem-root\": {\n borderRadius: \"8px\",\n margin: \"4px 8px\",\n transition: \"all 0.15s ease-in-out\",\n \"&:hover\": {\n bgcolor: activeTheme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.08)\" : \"rgba(0,0,0,0.04)\",\n transform: \"translateX(2px)\",\n },\n \"&.Mui-selected\": {\n bgcolor: activeTheme.palette.primary.main + \"20\",\n color: activeTheme.palette.primary.main,\n \"&:hover\": {\n bgcolor: activeTheme.palette.primary.main + \"30\",\n },\n },\n },\n },\n }}\n >\n {availableModels.map((model) => (\n <MenuItem\n key={model.name}\n selected={model.name === selectedModel}\n onClick={() => {\n setSelectedModel(model.name);\n useModelStore.getState().setSelectedModel(model.name);\n setModelAnchorEl(null);\n }}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n minHeight: 48,\n px: 2,\n }}\n >\n <Avatar\n src={\n model.avatarBase64 ||\n modelAvatars[model.name] ||\n banditHead\n }\n alt={model.name}\n sx={{\n width: 28,\n height: 28,\n filter: \"brightness(1.7)\",\n transition: \"all 0.2s ease-in-out\",\n }}\n />\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\n {model.name.replace(\"Bandit-\", \"\")}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: activeTheme.palette.text.secondary }}>\n {model.name === selectedModel ? \"Currently active\" : \"Switch to this AI\"}\n </Typography>\n </Box>\n {model.name === selectedModel && (\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n bgcolor: activeTheme.palette.primary.main,\n }}\n />\n )}\n </MenuItem>\n ))}\n </Menu>\n\n {/* Voice selector - only show if TTS is available */}\n {isTTSAvailable && (\n <>\n <Tooltip title={`Voice: ${selectedVoice ? toTitleCase(selectedVoice.split(\"-\")[1]) : \"Default\"}`} arrow>\n <IconButton\n onClick={(e) => setVoiceAnchorEl(e.currentTarget)}\n sx={{\n p: 0.5,\n borderRadius: \"8px\",\n bgcolor: activeTheme.palette.info.main + \"20\",\n color: activeTheme.palette.info.main,\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n backgroundColor: activeTheme.palette.info.main + \"30\",\n transform: \"scale(1.05)\",\n },\n }}\n aria-label={`Change voice. Currently using ${selectedVoice ? toTitleCase(selectedVoice.split(\"-\")[1]) : \"default\"}`}\n >\n <RecordVoiceOverIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Menu\n anchorEl={voiceAnchorEl}\n open={Boolean(voiceAnchorEl)}\n onClose={() => setVoiceAnchorEl(null)}\n transformOrigin={{ horizontal: 'left', vertical: 'top' }}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n PaperProps={{\n sx: {\n bgcolor: activeTheme.palette.background.paper,\n color: activeTheme.palette.text.primary,\n fontSize: \"0.875rem\",\n zIndex: 20000,\n borderRadius: 2,\n border: `1px solid ${activeTheme.palette.divider}`,\n boxShadow: activeTheme.palette.mode === \"dark\"\n ? \"0 8px 32px rgba(0,0,0,0.5)\"\n : \"0 8px 32px rgba(0,0,0,0.2)\",\n \"& .MuiMenuItem-root\": {\n borderRadius: \"8px\",\n margin: \"4px 8px\",\n transition: \"all 0.15s ease-in-out\",\n \"&:hover\": {\n bgcolor: activeTheme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.08)\" : \"rgba(0,0,0,0.04)\",\n },\n \"&.Mui-selected\": {\n bgcolor: activeTheme.palette.info.main + \"20\",\n color: activeTheme.palette.info.main,\n \"&:hover\": {\n bgcolor: activeTheme.palette.info.main + \"30\",\n },\n },\n },\n },\n }}\n >\n {availableVoices.length > 0 ? (\n availableVoices.map((voice) => (\n <MenuItem\n key={voice}\n selected={voice === selectedVoice}\n onClick={() => {\n handleVoiceChange(voice);\n setVoiceAnchorEl(null);\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, width: \"100%\" }}>\n <RecordVoiceOverIcon fontSize=\"small\" sx={{ color: activeTheme.palette.text.secondary }} />\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"body2\">\n {toTitleCase(voice.split(\"-\")[1])}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: activeTheme.palette.text.secondary }}>\n {voice === selectedVoice ? \"Currently active\" : \"Switch to this voice\"}\n </Typography>\n </Box>\n {voice === selectedVoice && (\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n bgcolor: activeTheme.palette.info.main,\n }}\n />\n )}\n </Box>\n </MenuItem>\n ))\n ) : (\n <MenuItem disabled>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No voices available\n </Typography>\n </MenuItem>\n )}\n </Menu>\n </>\n )}\n\n {/* Enhanced Pasted images */}\n {pastedImages.map((img, idx) => (\n <Box\n key={idx}\n sx={{\n position: \"relative\",\n transition: \"all 0.15s ease-out\",\n \"&:hover\": {\n // Removed transform to prevent jitter\n },\n }}\n >\n <Avatar\n src={img}\n variant=\"rounded\"\n sx={{\n width: 32,\n height: 32,\n borderRadius: \"8px\",\n border: `2px solid ${activeTheme.palette.primary.main}30`,\n cursor: \"pointer\",\n }}\n />\n <Tooltip title=\"Remove image\" arrow>\n <IconButton\n size=\"small\"\n onClick={() => removeImage(idx)}\n sx={{\n position: \"absolute\",\n top: -8,\n right: -8,\n width: 20,\n height: 20,\n bgcolor: activeTheme.palette.error.main,\n color: \"white\",\n border: `2px solid ${activeTheme.palette.background.paper}`,\n transition: \"all 0.15s ease-out\",\n \"&:hover\": {\n bgcolor: activeTheme.palette.error.dark,\n // Removed transform to prevent jitter\n },\n }}\n >\n <CloseIcon sx={{ fontSize: 12 }} />\n </IconButton>\n </Tooltip>\n </Box>\n ))}\n </InputAdornment>\n }\n endAdornment={\n <InputAdornment position=\"end\" sx={{ gap: 1 }}>\n {preferences.feedbackEnabled && (\n <FeedbackButton\n inline={true}\n size=\"small\"\n buttonText=\"\"\n />\n )}\n <Tooltip title={inputValue.trim() === \"\" ? \"Type a message first\" : \"Send Message\"} arrow>\n <span>\n <IconButton\n onClick={handleSend}\n disabled={inputValue.trim() === \"\"}\n sx={{\n color: inputValue.trim() !== \"\"\n ? activeTheme.palette.primary.main\n : activeTheme.palette.action.disabled,\n transition: \"all 0.15s ease-out\",\n borderRadius: \"8px\",\n minWidth: \"40px\",\n minHeight: \"40px\",\n \"&:hover\": {\n bgcolor: inputValue.trim() !== \"\"\n ? activeTheme.palette.primary.main + \"15\"\n : \"transparent\",\n // Removed transform to prevent jitter\n },\n \"&:active\": {\n bgcolor: inputValue.trim() !== \"\"\n ? activeTheme.palette.primary.main + \"25\"\n : \"transparent\",\n },\n \"&:disabled\": {\n color: activeTheme.palette.action.disabled,\n },\n }}\n >\n <SendIcon />\n </IconButton>\n </span>\n </Tooltip>\n </InputAdornment>\n }\n />\n\n {!responseStarted && componentStatus === \"Loading\" && <GenericLoader variant=\"dots\" />}\n {responseStarted && response && !showSettings && (\n <AIResponseTextField question={previousQuestion} response={response} />\n )}\n </Box>\n </Box>\n\n <AIQueriesDrawer\n drawerOpen={drawerOpen}\n onClose={handleDrawerClose}\n onClearComplete={handleClose}\n onNavigateToMain={navigate ? () => {\n onClose(); // Close the modal\n navigate('/chat'); // Navigate to main chat\n } : undefined}\n />\n </DraggableBox>\n </Modal>\n </ThemeProvider>\n );\n };\n\nexport default ChatModal;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-454A-7DF312\nconst __banditFingerprint_chatmodal_draggableboxtsx = 'BL-FP-50DD87-AE7B';\nconst __auditTrail_chatmodal_draggableboxtsx = 'BL-AU-MGOIKVVN-95O3';\n// File: draggable-box.tsx | Path: src/modals/chat-modal/draggable-box.tsx | Hash: 454aae7b\n\nimport React, { useEffect, useState } from \"react\";\nimport { Box, useTheme, Fade } from \"@mui/material\";\n\ninterface DraggableBoxProps {\n children: React.ReactNode;\n fullScreen: boolean;\n position: { x: number; y: number };\n setPosition: (pos: { x: number; y: number }) => void;\n onDrag: (e: MouseEvent) => void;\n onScrollThresholdExceeded?: () => void;\n}\n\nconst SCROLLABLE_THRESHOLD = 200;\n\nconst DraggableBox = React.forwardRef<HTMLDivElement, DraggableBoxProps>(\n (\n { children, fullScreen, position, setPosition, onDrag, onScrollThresholdExceeded },\n ref\n ) => {\n const theme = useTheme();\n const [transitionProps, setTransitionProps] = useState(\"all\");\n const [isDragging, setIsDragging] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n \n useEffect(() => {\n if (ref && typeof ref !== \"function\" && ref.current && !fullScreen) {\n const modal = ref.current;\n const contentHeight = modal.scrollHeight;\n const modalHeight = modal.clientHeight;\n const hasOverflow = contentHeight > modalHeight + SCROLLABLE_THRESHOLD;\n \n if (hasOverflow) {\n onScrollThresholdExceeded?.();\n }\n }\n }, [children, fullScreen, onScrollThresholdExceeded, ref]);\n\n return (\n <Fade in timeout={300}>\n <Box\n ref={ref}\n tabIndex={-1}\n onMouseDown={(e) => {\n setTransitionProps(\"none\");\n setIsDragging(true);\n }}\n onMouseUp={(e) => {\n setTransitionProps(\"all\");\n setIsDragging(false);\n }}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n sx={{\n transitionProperty: transitionProps,\n transitionDuration: fullScreen ? \"0.4s\" : \"0.3s\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n position: \"absolute\",\n top: fullScreen ? 0 : position.y,\n left: fullScreen ? 0 : position.x,\n width: fullScreen ? \"calc(100vw)\" : \"90vw\",\n maxWidth: fullScreen ? \"100vw\" : 600,\n height: fullScreen ? \"100vh\" : \"auto\",\n minHeight: fullScreen ? \"100vh\" : \"fit-content\",\n maxHeight: fullScreen ? \"100vh\" : \"85vh\", // Add max height for scrolling\n overflow: \"hidden\", // Prevent modal itself from scrolling\n bgcolor: theme.palette.background.paper,\n borderRadius: fullScreen ? 0 : \"20px\",\n boxShadow: fullScreen \n ? \"none\" \n : isDragging\n ? `0 25px 50px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.7)\" : \"rgba(0,0,0,0.4)\"}`\n : isHovering\n ? `0 16px 32px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.5)\" : \"rgba(0,0,0,0.25)\"}`\n : `0 12px 24px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.4)\" : \"rgba(0,0,0,0.2)\"}`,\n p: fullScreen ? 2 : 3,\n display: \"flex\",\n flexDirection: \"column\",\n outline: \"none\",\n backdropFilter: fullScreen ? \"none\" : \"blur(20px)\",\n border: fullScreen \n ? \"none\" \n : `1px solid ${theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.15)\" : \"rgba(0,0,0,0.15)\"}`,\n // Removed transform to prevent jitter and layout shifts\n \"&:focus\": {\n outline: `2px solid ${theme.palette.primary.main}40`,\n outlineOffset: \"2px\",\n },\n }}\n >\n <Box\n sx={{\n position: 'relative',\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Box>\n </Box>\n </Fade>\n );\n }\n);\n\nexport default DraggableBox;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-9B91-D4125E\nconst __banditFingerprint_chatmodal_modalheadertsx = 'BL-FP-B8B72D-323D';\nconst __auditTrail_chatmodal_modalheadertsx = 'BL-AU-MGOIKVVN-9A3G';\n// File: modal-header.tsx | Path: src/modals/chat-modal/modal-header.tsx | Hash: 9b91323d\n\nimport React, { useState } from \"react\";\nimport {\n Avatar,\n Box,\n IconButton,\n Tooltip,\n useMediaQuery,\n Theme,\n useTheme,\n Typography,\n Chip,\n Fade,\n} from \"@mui/material\";\nimport MinimizeIcon from \"@mui/icons-material/Minimize\";\nimport FullscreenIcon from \"@mui/icons-material/Fullscreen\";\nimport FullscreenExitIcon from \"@mui/icons-material/FullscreenExit\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport HistoryIcon from \"@mui/icons-material/History\";\nimport DragIndicatorIcon from \"@mui/icons-material/DragIndicator\";\n\nconst banditaiLogo = \"https://cdn.burtson.ai/logos/bandit-ai-logo.png\";\nconst banditHead = \"https://cdn.burtson.ai/images/bandit-head.png\";\n\n// Utility function to determine if a color is light or dark\nconst getContrastTextColor = (backgroundColor: string): string => {\n // Convert hex to RGB\n const hex = backgroundColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n // Calculate luminance using the relative luminance formula\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n \n // Return dark text for light backgrounds, light text for dark backgrounds\n return luminance > 0.6 ? '#2f2f2f' : '#ffffff';\n};\n\ninterface ModalHeaderProps {\n fullScreen: boolean;\n setFullScreen: React.Dispatch<React.SetStateAction<boolean>>;\n onClose: () => void;\n onDrawerOpen: () => void;\n onMouseDown: (e: React.MouseEvent) => void;\n logo?: string;\n historyCount?: number;\n onManualFullscreenToggle?: () => void;\n onExitFullscreen?: () => void; // Add callback for exiting fullscreen\n}\n\nconst ModalHeader: React.FC<ModalHeaderProps> = ({\n fullScreen,\n setFullScreen,\n onClose,\n onDrawerOpen,\n onMouseDown,\n logo,\n historyCount = 0,\n onManualFullscreenToggle,\n onExitFullscreen,\n}) => {\n const theme = useTheme();\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down(\"sm\"));\n const displayLogo = logo && logo !== banditaiLogo ? logo : banditHead;\n const [isHovering, setIsHovering] = useState(false);\n\n // Enhanced button styles for modern UX - Fixed jitter\n const buttonStyles = {\n transition: \"all 0.15s ease-out\",\n borderRadius: \"8px\",\n minWidth: \"36px\",\n minHeight: \"36px\",\n \"&:hover\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.08)\" : \"rgba(0,0,0,0.06)\",\n // Removed transform to prevent jitter\n },\n \"&:active\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.08)\",\n },\n };\n\n const handleMinimize = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent drag from interfering\n onClose();\n };\n\n const handleToggleFullScreen = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent drag from interfering\n \n const wasFullScreen = fullScreen;\n \n // When user manually toggles fullscreen, we should respect their choice\n // and not re-trigger auto fullscreen for this session\n setFullScreen((prev) => !prev);\n \n // If exiting fullscreen, trigger repositioning\n if (wasFullScreen && onExitFullscreen) {\n // Use setTimeout to ensure the fullscreen state has updated\n setTimeout(() => {\n onExitFullscreen();\n }, 100);\n }\n \n // Reset auto fullscreen tracking when user manually toggles\n // This prevents auto-fullscreen from interfering with user's choice\n if (onManualFullscreenToggle) {\n onManualFullscreenToggle();\n }\n };\n\n return (\n <Box\n onMouseDown={onMouseDown}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n cursor: \"grab\",\n userSelect: \"none\",\n mb: 2,\n p: 1.5,\n borderRadius: \"16px\",\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.03)\" : \"rgba(0,0,0,0.03)\",\n border: `1px solid ${theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\"}`,\n backdropFilter: \"blur(12px)\",\n transition: \"all 0.2s ease-out\",\n \"&:hover\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.06)\" : \"rgba(0,0,0,0.06)\",\n borderColor: theme.palette.primary.main + \"50\",\n boxShadow: `0 8px 32px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.4)\" : \"rgba(0,0,0,0.15)\"}`,\n // Removed transform to prevent layout shifts\n },\n \"&:active\": {\n cursor: \"grabbing\",\n },\n }}\n >\n {/* Left Section - Avatar and Status */}\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 2, flex: 1 }}>\n <Avatar\n src={displayLogo}\n alt=\"AI Assistant\"\n sx={{ \n width: fullScreen ? 72 : 60,\n height: fullScreen ? 72 : 60,\n bgcolor: theme.palette.mode === \"dark\"\n ? \"rgba(255,255,255,0.06)\"\n : \"rgba(0,0,0,0.04)\",\n border: \"2px solid #a78bfa\",\n boxShadow: \"0 0 8px rgba(167, 139, 250, 0.3)\",\n filter: \"brightness(1.05)\",\n color: \"#fff\",\n transition: \"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n \"&:hover\": {\n backgroundColor: theme.palette.mode === \"dark\" \n ? \"rgba(255,255,255,0.08)\" \n : \"rgba(0,0,0,0.05)\",\n transform: \"scale(1.02)\",\n }\n }}\n />\n \n <Fade in={isHovering && !fullScreen}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <DragIndicatorIcon \n sx={{ \n color: theme.palette.text.secondary, \n fontSize: \"1.2rem\",\n opacity: 0.6,\n }} \n />\n <Typography \n variant=\"caption\" \n sx={{ \n color: theme.palette.text.secondary,\n fontWeight: 500,\n }}\n >\n Drag to move\n </Typography>\n </Box>\n </Fade>\n </Box>\n\n {/* Right Section - Controls */}\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}> \n <Tooltip title=\"Chat History\" arrow>\n <IconButton\n aria-label=\"Open chat history\"\n onClick={(e) => {\n e.stopPropagation();\n onDrawerOpen();\n }}\n sx={{\n ...buttonStyles,\n position: \"relative\",\n color: theme.palette.text.primary,\n }}\n >\n <HistoryIcon />\n {historyCount > 0 && (\n <Chip\n label={historyCount > 99 ? \"99+\" : historyCount}\n size=\"small\"\n sx={{\n position: \"absolute\",\n top: -8,\n right: -8,\n height: 18,\n fontSize: \"0.65rem\",\n bgcolor: theme.palette.primary.main,\n color: \"white\",\n \"& .MuiChip-label\": {\n px: 0.5,\n },\n }}\n />\n )}\n </IconButton>\n </Tooltip>\n \n {!isMobile && (\n <Tooltip title={fullScreen ? \"Exit Fullscreen\" : \"Enter Fullscreen\"} arrow>\n <IconButton\n aria-label={fullScreen ? \"exit fullscreen\" : \"enter fullscreen\"}\n onClick={handleToggleFullScreen}\n sx={{\n ...buttonStyles,\n color: theme.palette.text.primary,\n bgcolor: fullScreen ? theme.palette.primary.main + \"20\" : \"transparent\",\n }}\n >\n {fullScreen ? <FullscreenExitIcon /> : <FullscreenIcon />}\n </IconButton>\n </Tooltip>\n )}\n \n <Tooltip title=\"Minimize\" arrow>\n <IconButton\n aria-label=\"minimize window\"\n onClick={handleMinimize}\n sx={{\n ...buttonStyles,\n color: theme.palette.warning.main,\n }}\n >\n <MinimizeIcon />\n </IconButton>\n </Tooltip>\n \n <Tooltip title=\"Close\" arrow>\n <IconButton \n aria-label=\"close window\" \n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n sx={{\n ...buttonStyles,\n color: theme.palette.error.main,\n \"&:hover\": {\n bgcolor: theme.palette.error.main + \"15\",\n color: theme.palette.error.main,\n // Removed transform to prevent jitter\n },\n }}\n >\n <CloseIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n );\n};\n\nexport default ModalHeader;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-C6A0-891060\nconst __banditFingerprint_chatmodal_queryinputtsx = 'BL-FP-B479CD-6C52';\nconst __auditTrail_chatmodal_queryinputtsx = 'BL-AU-MGOIKVVO-66S9';\n// File: query-input.tsx | Path: src/modals/chat-modal/query-input.tsx | Hash: c6a06c52\n\nimport React, { useRef } from \"react\";\nimport { Box, TextField, IconButton, Tooltip, InputAdornment, useTheme } from \"@mui/material\";\nimport CheckIcon from \"@mui/icons-material/Check\";\n\ninterface QueryInputProps {\n inputValue: string;\n onChange: (val: string) => void;\n onSend: (\n event: React.MouseEvent<HTMLButtonElement | HTMLDivElement> | React.KeyboardEvent<HTMLDivElement | HTMLTextAreaElement>,\n value: string\n ) => void;\n apiKey: string;\n setApiKey: (key: string) => void;\n showSettings: boolean;\n setShowSettings: (val: boolean) => void;\n startAdornment?: React.ReactNode; // Added startAdornment prop\n endAdornment?: React.ReactNode; // Added endAdornment prop\n}\n\nconst QueryInput: React.FC<QueryInputProps> = ({\n inputValue,\n onChange,\n onSend,\n apiKey,\n setApiKey,\n showSettings,\n setShowSettings,\n startAdornment, // Destructure startAdornment\n endAdornment, // Destructure endAdornment\n}) => {\n const theme = useTheme();\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const handleSend = (\n e: React.MouseEvent<HTMLButtonElement | HTMLDivElement> | React.KeyboardEvent<HTMLDivElement | HTMLTextAreaElement>,\n payload: string\n ) => {\n onSend(e, payload);\n };\n const handleKeyPress = (e: React.KeyboardEvent<HTMLDivElement | HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (inputValue.trim() !== \"\") {\n handleSend(e, inputValue);\n }\n }\n };\n\n return (\n <Box onMouseDown={(e) => e.stopPropagation()} sx={{ padding: 2 }}>\n {showSettings ? (\n <TextField\n fullWidth\n variant=\"outlined\"\n label=\"API Key\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n InputProps={{\n sx: { color: theme.palette.text.primary, borderColor: theme.palette.divider },\n startAdornment: (\n <InputAdornment position=\"start\">\n <Tooltip title=\"Toggle Settings\">\n <IconButton\n aria-label=\"settings\"\n onClick={() => setShowSettings(!showSettings)}\n >\n <CheckIcon sx={{ color: showSettings ? theme.palette.primary.main : theme.palette.text.primary }} />\n </IconButton>\n </Tooltip>\n </InputAdornment>\n ),\n }}\n sx={{ bgcolor: theme.palette.background.paper, borderRadius: 1 }}\n />\n ) : (\n <TextField\n fullWidth\n variant=\"outlined\"\n placeholder=\"Ask me anything...\"\n value={inputValue}\n inputRef={inputRef}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyPress}\n multiline\n maxRows={4}\n InputProps={{\n sx: { color: theme.palette.text.primary, borderColor: theme.palette.divider },\n startAdornment: startAdornment, // Use startAdornment prop\n endAdornment: endAdornment, // Use endAdornment prop\n }}\n sx={{\n bgcolor: theme.palette.background.paper,\n borderRadius: 1,\n \"& .MuiOutlinedInput-root\": { padding: \"10px\" },\n }}\n />\n )}\n </Box>\n );\n};\n\nexport default QueryInput;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-3832-E313DD\nconst __banditFingerprint_chatmodal_chatdrawertsx = 'BL-FP-144DC4-8A73';\nconst __auditTrail_chatmodal_chatdrawertsx = 'BL-AU-MGOIKVVM-PKOO';\n// File: chat-drawer.tsx | Path: src/modals/chat-modal/chat-drawer.tsx | Hash: 38328a73\n\nimport React, { useState, useEffect, useMemo } from \"react\";\nimport {\n Drawer,\n Box,\n Typography,\n List,\n ListItem,\n useMediaQuery,\n Theme,\n useTheme,\n Chip,\n IconButton,\n Tooltip,\n Collapse,\n TextField,\n InputAdornment,\n Divider,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n DialogContentText,\n Button,\n MenuItem,\n} from \"@mui/material\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport HistoryIcon from \"@mui/icons-material/History\";\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\nimport RecordVoiceOverIcon from \"@mui/icons-material/RecordVoiceOver\";\nimport MemoryIcon from \"@mui/icons-material/Memory\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport ExpandLessIcon from \"@mui/icons-material/ExpandLess\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport { useAIQueryStore } from \"../../store/aiQueryStore\";\nimport { useConversationStore, type Conversation } from \"../../store/conversationStore\";\nimport { useVoiceStore } from \"../../store/voiceStore\";\nimport { useMemoryStore } from \"../../store/memoryStore\";\nimport { usePreferencesStore } from \"../../store/preferencesStore\";\nimport { usePackageSettingsStore } from \"../../store/packageSettingsStore\";\nimport { useAIProviderStore } from \"../../store/aiProviderStore\";\nimport { useModelStore } from \"../../store/modelStore\";\nimport AIResponseTextField from \"./ai-response-text-field\";\nimport MemoryModal from \"../../chat/memory-modal\";\nimport { speakStream } from \"../../services/tts/streaming-tts\";\nimport { Subscription } from \"rxjs\";\nimport { debugLogger } from \"../../services/logging/debugLogger\";\nimport { toTitleCase } from \"../../util\";\n\ninterface AIQueriesDrawerProps {\n drawerOpen: boolean;\n onClose: () => void;\n onClearComplete?: () => void; // Add callback for when clear is complete\n onNavigateToMain?: () => void; // Add callback for navigating to main chat\n}\n\nconst AIQueriesDrawer: React.FC<AIQueriesDrawerProps> = ({ drawerOpen, onClose, onClearComplete, onNavigateToMain }) => {\n const theme = useTheme();\n const isMobile = useMediaQuery((theme: Theme) =>\n theme.breakpoints.down(\"sm\")\n );\n\n // AI Query Store (local session history)\n const history = useAIQueryStore((state) => state.history);\n const clearHistory = useAIQueryStore((state) => state.clearHistory);\n const setResponse = useAIQueryStore((state) => state.setResponse);\n const setPreviousQuestion = useAIQueryStore((state) => state.setPreviousQuestion);\n const setInputValue = useAIQueryStore((state) => state.setInputValue);\n\n // Main Conversation Store\n const { conversations, currentId, switchConversation, _hasHydrated, hydrate } = useConversationStore();\n\n // Voice Store\n const { availableVoices, selectedVoice, setSelectedVoice, isServiceAvailable, refreshVoices } = useVoiceStore();\n\n // Memory Store\n const { entries: memoryEntries } = useMemoryStore();\n\n // Preferences and Settings\n const { preferences } = usePreferencesStore();\n const { settings: packageSettings } = usePackageSettingsStore();\n\n // AI Provider and Model stores for voice changing\n const provider = useAIProviderStore((state) => state.provider);\n const { selectedModel, availableModels } = useModelStore();\n\n // Local state\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [expandedItems, setExpandedItems] = useState<Set<number>>(new Set());\n const [expandedConversations, setExpandedConversations] = useState<Set<string>>(new Set());\n const [confirmClearOpen, setConfirmClearOpen] = useState(false);\n const [infoDialogOpen, setInfoDialogOpen] = useState(false);\n const [memoryModalOpen, setMemoryModalOpen] = useState(false);\n const [contextMode, setContextMode] = useState<\"local\" | \"main\">(\"local\");\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set([\"history\", \"voice\"]));\n const [audioSub, setAudioSub] = useState<Subscription>(new Subscription());\n const [isContextSwitching, setIsContextSwitching] = useState(false);\n const [isDrawerLoading, setIsDrawerLoading] = useState(false);\n\n // Auto-hydrate conversations when drawer opens\n useEffect(() => {\n if (drawerOpen && !_hasHydrated) {\n hydrate();\n }\n }, [drawerOpen, _hasHydrated, hydrate]);\n\n // Cleanup on drawer close\n useEffect(() => {\n if (!drawerOpen) {\n setIsDrawerLoading(false);\n // Cleanup after close animation completes\n const cleanupTimer = setTimeout(() => {\n setSearchTerm(\"\");\n setExpandedItems(new Set());\n setExpandedConversations(new Set());\n }, 225); // After close animation\n \n return () => clearTimeout(cleanupTimer);\n }\n }, [drawerOpen]);\n\n // Cleanup audio subscription on unmount\n useEffect(() => {\n return () => {\n audioSub.unsubscribe();\n };\n }, [audioSub]);\n\n // Helper functions\n const toggleSection = (section: string) => {\n setExpandedSections((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(section)) {\n newSet.delete(section);\n } else {\n newSet.add(section);\n }\n return newSet;\n });\n };\n\n const handleContextSwitch = async (newMode: \"local\" | \"main\") => {\n if (newMode === contextMode) return;\n\n setIsContextSwitching(true);\n\n try {\n // Use requestAnimationFrame to allow UI updates before heavy operations\n await new Promise(resolve => requestAnimationFrame(resolve));\n\n // If switching to main and store isn't hydrated, wait for hydration\n if (newMode === \"main\" && !_hasHydrated) {\n debugLogger.debug(\"Context switch triggering hydration\", { newMode, hasHydrated: _hasHydrated });\n\n // Break up the hydration process\n await new Promise(resolve => {\n setTimeout(async () => {\n await hydrate();\n resolve(void 0);\n }, 50);\n });\n\n // Additional delay to ensure UI updates\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n\n // Use another frame to ensure smooth transition\n await new Promise(resolve => requestAnimationFrame(resolve));\n\n setContextMode(newMode);\n // Reset expanded states when switching context\n setExpandedItems(new Set());\n setExpandedConversations(new Set());\n\n debugLogger.debug(\"Context switch completed\", { newMode, conversationCount: conversations.length });\n } catch (error) {\n debugLogger.error(\"Error during context switch\", { error: String(error) });\n } finally {\n // Add minimum delay for better UX and ensure loading state shows\n setTimeout(() => setIsContextSwitching(false), 300);\n }\n };\n\n const isVoiceAvailable = isServiceAvailable && preferences.ttsEnabled && !!packageSettings?.gatewayApiUrl;\n const isMemoryAvailable = preferences.memoryEnabled;\n const currentConversation = conversations.find(c => c.id === currentId);\n\n // Loading states\n const isInitialLoading = !_hasHydrated && contextMode === \"main\";\n const isContentLoading = isContextSwitching || isInitialLoading;\n\n // Debug loading states - defer logging to avoid blocking drawer opening\n useEffect(() => {\n if (drawerOpen) {\n // Defer debug logging to avoid blocking drawer animation\n const debugTimer = setTimeout(() => {\n debugLogger.debug(\"Chat drawer loading states\", {\n drawerOpen,\n _hasHydrated,\n isDrawerLoading,\n isContentLoading,\n contextMode,\n storeState: \"modal-chat-drawer-loading\"\n });\n }, 400); // After drawer animation and initial setup\n\n return () => clearTimeout(debugTimer);\n }\n }, [drawerOpen, _hasHydrated, isDrawerLoading, isContentLoading, contextMode]);\n\n // Debug voice availability\n useEffect(() => {\n debugLogger.debug(\"Chat drawer voice availability check\", {\n isServiceAvailable,\n ttsEnabled: preferences.ttsEnabled,\n gatewayApiUrl: !!packageSettings?.gatewayApiUrl,\n isVoiceAvailable,\n availableVoicesCount: availableVoices.length,\n selectedVoice,\n storeState: \"modal-chat-drawer-voice\"\n });\n }, [isServiceAvailable, preferences.ttsEnabled, packageSettings?.gatewayApiUrl, isVoiceAvailable, availableVoices.length, selectedVoice]);\n\n // Get the appropriate history based on context mode\n const activeHistory = useMemo(() => {\n if (contextMode === \"local\") {\n return history;\n }\n\n return currentConversation?.history ?? [];\n }, [contextMode, history, currentConversation]);\n\n // When switching to main context, ensure we have a valid conversation\n const effectiveContextMode = contextMode === \"main\" && (!currentConversation || currentConversation.history.length === 0)\n ? \"local\"\n : contextMode;\n\n // Remove auto-selection - let user choose conversation manually\n // (Auto-selection removed to allow user control over conversation viewing)\n\n // Debug context switching\n useEffect(() => {\n debugLogger.debug(\"Chat drawer context state\", {\n contextMode,\n effectiveContextMode,\n conversationCount: conversations.length,\n currentConversationId: currentId,\n currentConversationName: currentConversation?.name,\n currentConversationHistoryLength: currentConversation?.history.length || 0,\n localHistoryLength: history.length,\n hasHydrated: _hasHydrated,\n storeState: \"modal-chat-drawer\"\n });\n }, [contextMode, effectiveContextMode, conversations.length, currentId, currentConversation, history.length, _hasHydrated]);\n\n // Filter history based on search term and context mode with memoization\n const filteredHistory = useMemo(() => {\n const filtered = activeHistory.filter((entry) =>\n entry.question.toLowerCase().includes(searchTerm.toLowerCase()) ||\n entry.answer.toLowerCase().includes(searchTerm.toLowerCase())\n );\n // Limit to last 20 items for performance\n return filtered.slice(-20);\n }, [activeHistory, searchTerm]);\n\n // Filter conversations based on search term (for main context) with memoization\n const filteredConversations = useMemo<Conversation[]>(() => {\n const filtered = conversations.filter((conversation) =>\n conversation.name.toLowerCase().includes(searchTerm.toLowerCase()) ||\n conversation.history.some(entry =>\n entry.question.toLowerCase().includes(searchTerm.toLowerCase()) ||\n entry.answer.toLowerCase().includes(searchTerm.toLowerCase())\n )\n );\n // Limit to first 20 items for performance\n return filtered.slice(0, 20);\n }, [conversations, searchTerm]);\n\n const toggleExpanded = (index: number) => {\n const newExpanded = new Set(expandedItems);\n if (newExpanded.has(index)) {\n newExpanded.delete(index);\n } else {\n newExpanded.add(index);\n }\n setExpandedItems(newExpanded);\n };\n\n const toggleConversationExpanded = (conversationId: string) => {\n const newExpanded = new Set(expandedConversations);\n if (newExpanded.has(conversationId)) {\n newExpanded.delete(conversationId);\n } else {\n newExpanded.add(conversationId);\n }\n setExpandedConversations(newExpanded);\n };\n\n // Voice change handler - same as in chat.tsx\n const handleVoiceChange = (newVoice: string) => {\n debugLogger.debug(\"Chat drawer voice change initiated\", {\n oldVoice: selectedVoice,\n newVoice,\n storeState: \"modal-chat-drawer-voice-change\"\n });\n\n // Use voice store setter to persist the change\n setSelectedVoice(newVoice);\n const voiceName = newVoice.split(\"-\")[1];\n const defaultModel = packageSettings?.defaultModel;\n\n // Get the friendly display name for the personality (use selectedModel which is the Bandit personality)\n const currentModelConfig = availableModels.find(m => m.name === selectedModel);\n const personalityName = currentModelConfig ? currentModelConfig.name.replace(\"Bandit-\", \"Bandit \") : (selectedModel || defaultModel || \"Bandit\");\n\n // Only play greeting if TTS is available and enabled\n const isTTSAvailable = !!packageSettings?.gatewayApiUrl && preferences.ttsEnabled;\n\n if (isTTSAvailable) {\n debugLogger.debug(\"Playing voice greeting\", { voiceName, personalityName });\n \n // Create the greeting directly - no AI generation needed\n const greetingText = `Hi, I'm ${personalityName} speaking with ${voiceName}'s voice.`;\n \n // Use speakStream directly\n const spoken = speakStream(greetingText, newVoice);\n audioSub.unsubscribe();\n setAudioSub(\n spoken.subscribe({\n next: () => debugLogger.debug(\"Voice greeting played successfully\"),\n error: (err) => {\n debugLogger.error(`Error changing voices: ${err}`);\n }\n })\n );\n } else {\n debugLogger.debug(\"Voice greeting skipped\", {\n hasProvider: !!provider,\n isTTSAvailable,\n hasDefaultModel: !!defaultModel\n });\n }\n };\n\n const handleClearHistory = () => {\n setConfirmClearOpen(true);\n };\n\n const handleConfirmClear = () => {\n // Clear all chat data\n clearHistory();\n setResponse(\"\");\n setPreviousQuestion(\"\");\n setInputValue(\"\");\n\n // Reset local state\n setExpandedItems(new Set());\n setSearchTerm(\"\");\n setConfirmClearOpen(false);\n\n // Close the drawer and notify parent (to close modal)\n onClose();\n if (onClearComplete) {\n onClearComplete();\n }\n };\n\n const handleCancelClear = () => {\n setConfirmClearOpen(false);\n };\n\n return (\n <Drawer\n anchor=\"right\"\n open={drawerOpen}\n onClose={onClose}\n keepMounted={false} // Don't keep mounted when closed to improve performance\n disablePortal={false}\n sx={{\n zIndex: 1400,\n '& .MuiDrawer-paper': {\n width: isMobile ? \"100vw\" : \"50vw\",\n maxWidth: isMobile ? \"100vw\" : \"600px\",\n bgcolor: theme.palette.background.paper,\n borderLeft: `1px solid ${theme.palette.divider}`,\n backdropFilter: \"blur(20px)\",\n boxShadow: theme.palette.mode === \"dark\"\n ? \"0 8px 32px rgba(0,0,0,0.5)\"\n : \"0 8px 32px rgba(0,0,0,0.2)\",\n // Optimize animations\n transition: 'transform 225ms cubic-bezier(0, 0, 0.2, 1) 0ms',\n }\n }}\n transitionDuration={225} // Faster animation\n SlideProps={{\n timeout: 225, // Consistent timing\n }}\n >\n <Box\n sx={{\n height: \"100%\",\n bgcolor: theme.palette.background.paper,\n color: theme.palette.text.primary,\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n }}\n role=\"presentation\"\n >\n {/* Enhanced Header */}\n <Box\n sx={{\n p: 3,\n borderBottom: `1px solid ${theme.palette.divider}`,\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.02)\" : \"rgba(0,0,0,0.02)\",\n backdropFilter: \"blur(10px)\",\n }}\n >\n {/* Title and Context Toggle */}\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 2 }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <HistoryIcon sx={{ color: theme.palette.primary.main }} />\n <Typography variant=\"h6\" sx={{ fontWeight: 600, color: \"text.primary\" }}>\n Chat Control Center\n </Typography>\n <Tooltip title=\"About Chat History\" arrow>\n <IconButton\n onClick={() => setInfoDialogOpen(true)}\n size=\"small\"\n sx={{\n color: theme.palette.info.main,\n \"&:hover\": {\n bgcolor: theme.palette.info.main + \"20\",\n },\n }}\n >\n <InfoOutlinedIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n\n <Tooltip title=\"Refresh Conversations\" arrow>\n <IconButton\n onClick={() => {\n debugLogger.info(\"Manual conversation refresh triggered\", {\n currentConversationCount: conversations.length,\n hasHydrated: _hasHydrated,\n currentId\n });\n hydrate();\n // Also refresh voice store if needed\n if (availableVoices.length === 0) {\n refreshVoices();\n }\n }}\n size=\"small\"\n sx={{\n color: theme.palette.primary.main,\n \"&:hover\": {\n bgcolor: theme.palette.primary.main + \"20\",\n },\n }}\n >\n <RefreshIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n\n <Tooltip title=\"Close\" arrow>\n <IconButton\n onClick={onClose}\n size=\"small\"\n sx={{\n color: theme.palette.text.secondary,\n \"&:hover\": {\n bgcolor: theme.palette.action.hover,\n color: theme.palette.text.primary,\n },\n }}\n >\n <CloseIcon />\n </IconButton>\n </Tooltip>\n </Box>\n\n {/* Context Switching */}\n <Box sx={{ mb: 2 }}>\n <Box\n sx={{\n display: \"flex\",\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n borderRadius: \"12px\",\n p: 0.5,\n border: `1px solid ${theme.palette.divider}`,\n }}\n >\n <Button\n onClick={() => handleContextSwitch(\"local\")}\n variant={contextMode === \"local\" ? \"contained\" : \"text\"}\n disabled={isContextSwitching}\n sx={{\n flex: 1,\n textTransform: \"none\",\n borderRadius: \"8px\",\n fontWeight: 600,\n fontSize: \"0.8rem\",\n position: \"relative\",\n ...(contextMode === \"local\" && {\n bgcolor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n \"&:hover\": {\n bgcolor: theme.palette.primary.dark,\n },\n }),\n }}\n >\n {isContextSwitching && contextMode !== \"local\" ? (\n <Box sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n opacity: 0.7\n }}>\n <Box sx={{\n width: 12,\n height: 12,\n border: '2px solid currentColor',\n borderTop: '2px solid transparent',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n '@keyframes spin': {\n '0%': { transform: 'rotate(0deg)' },\n '100%': { transform: 'rotate(360deg)' }\n }\n }} />\n Loading...\n </Box>\n ) : (\n <>\n Session Context\n <Chip\n label={history.length}\n size=\"small\"\n sx={{\n ml: 1,\n height: \"18px\",\n fontSize: \"0.6rem\",\n bgcolor: contextMode === \"local\"\n ? theme.palette.primary.contrastText + \"20\"\n : theme.palette.primary.main + \"20\",\n color: contextMode === \"local\"\n ? theme.palette.primary.contrastText\n : theme.palette.primary.main,\n }}\n />\n </>\n )}\n </Button>\n <Tooltip title=\"Switch to conversation history\" arrow>\n <Button\n onClick={() => handleContextSwitch(\"main\")}\n variant={contextMode === \"main\" ? \"contained\" : \"text\"}\n disabled={conversations.length === 0 || isContextSwitching}\n sx={{\n flex: 1,\n textTransform: \"none\",\n borderRadius: \"8px\",\n fontWeight: 600,\n fontSize: \"0.8rem\",\n position: \"relative\",\n ...(contextMode === \"main\" && {\n bgcolor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n \"&:hover\": {\n bgcolor: theme.palette.secondary.dark,\n },\n }),\n }}\n >\n {isContextSwitching && contextMode !== \"main\" ? (\n <Box sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n opacity: 0.7\n }}>\n <Box sx={{\n width: 12,\n height: 12,\n border: '2px solid currentColor',\n borderTop: '2px solid transparent',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n '@keyframes spin': {\n '0%': { transform: 'rotate(0deg)' },\n '100%': { transform: 'rotate(360deg)' }\n }\n }} />\n Loading...\n </Box>\n ) : (\n <>\n Main Conversation\n <Chip\n label={conversations.length}\n size=\"small\"\n sx={{\n ml: 1,\n height: \"18px\",\n fontSize: \"0.6rem\",\n bgcolor: contextMode === \"main\"\n ? theme.palette.secondary.contrastText + \"20\"\n : theme.palette.secondary.main + \"20\",\n color: contextMode === \"main\"\n ? theme.palette.secondary.contrastText\n : theme.palette.secondary.main,\n }}\n />\n </>\n )}\n </Button>\n </Tooltip>\n </Box>\n </Box>\n\n {/* Voice Controls Section */}\n {isVoiceAvailable ? (\n <Box sx={{ mb: 2 }}>\n <Box\n onClick={() => toggleSection(\"voice\")}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n p: 1,\n borderRadius: \"8px\",\n \"&:hover\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <RecordVoiceOverIcon sx={{ color: theme.palette.success.main, fontSize: \"1.2rem\" }} />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, color: \"text.primary\" }}>\n Voice Model\n </Typography>\n <Chip\n label={selectedVoice ? toTitleCase(selectedVoice.split(\"-\")[1]) : \"Default\"}\n size=\"small\"\n sx={{\n height: \"18px\",\n fontSize: \"0.6rem\",\n bgcolor: theme.palette.success.main + \"20\",\n color: theme.palette.success.main,\n }}\n />\n <Tooltip title=\"Refresh Voices\" arrow>\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n debugLogger.debug(\"Manual voice refresh triggered from chat drawer\");\n refreshVoices();\n }}\n size=\"small\"\n sx={{\n color: theme.palette.text.secondary,\n \"&:hover\": {\n bgcolor: theme.palette.success.main + \"20\",\n color: theme.palette.success.main,\n },\n }}\n >\n <RefreshIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n {expandedSections.has(\"voice\") ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </Box>\n\n <Collapse in={expandedSections.has(\"voice\")}>\n <Box sx={{ pl: 2, pt: 1 }}>\n {availableVoices.length > 0 ? (\n <TextField\n select\n fullWidth\n size=\"small\"\n label=\"Voice Model\"\n value={selectedVoice}\n onChange={(e) => {\n const newVoice = e.target.value;\n handleVoiceChange(newVoice);\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"8px\",\n },\n }}\n >\n {availableVoices.map((voice) => (\n <MenuItem key={voice} value={voice}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, width: \"100%\" }}>\n <RecordVoiceOverIcon fontSize=\"small\" sx={{ color: theme.palette.text.secondary }} />\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"body2\">\n {toTitleCase(voice.split(\"-\")[1])}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: theme.palette.text.secondary }}>\n {voice === selectedVoice ? \"Currently active\" : \"Switch to this voice\"}\n </Typography>\n </Box>\n {voice === selectedVoice && (\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n bgcolor: theme.palette.success.main,\n }}\n />\n )}\n </Box>\n </MenuItem>\n ))}\n </TextField>\n ) : (\n <Box sx={{ textAlign: \"center\", py: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No voices available\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: \"block\", mt: 1 }}>\n Service: {isServiceAvailable ? \"✓\" : \"✗\"} | TTS: {preferences.ttsEnabled ? \"✓\" : \"✗\"} | Gateway: {!!packageSettings?.gatewayApiUrl ? \"✓\" : \"✗\"}\n </Typography>\n </Box>\n )}\n </Box>\n </Collapse>\n </Box>\n ) : (\n <Box sx={{ mb: 2 }}>\n <Box sx={{ p: 1, borderRadius: \"8px\", bgcolor: theme.palette.warning.main + \"10\" }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <RecordVoiceOverIcon sx={{ color: theme.palette.warning.main, fontSize: \"1.2rem\" }} />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, color: theme.palette.warning.main }}>\n Voice Not Available\n </Typography>\n </Box>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: \"block\", mt: 1, pl: 4 }}>\n Service: {isServiceAvailable ? \"✓\" : \"✗\"} | TTS: {preferences.ttsEnabled ? \"✓\" : \"✗\"} | Gateway: {!!packageSettings?.gatewayApiUrl ? \"✓\" : \"✗\"}\n </Typography>\n </Box>\n </Box>\n )}\n\n {/* Memory Controls Section */}\n {isMemoryAvailable && (\n <Box sx={{ mb: 2 }}>\n <Box\n onClick={() => toggleSection(\"memory\")}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n p: 1,\n borderRadius: \"8px\",\n \"&:hover\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <MemoryIcon sx={{ color: theme.palette.warning.main, fontSize: \"1.2rem\" }} />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, color: \"text.primary\" }}>\n Personal Memory\n </Typography>\n <Chip\n label={memoryEntries.length}\n size=\"small\"\n sx={{\n height: \"18px\",\n fontSize: \"0.6rem\",\n bgcolor: theme.palette.warning.main + \"20\",\n color: theme.palette.warning.main,\n }}\n />\n </Box>\n {expandedSections.has(\"memory\") ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </Box>\n\n <Collapse in={expandedSections.has(\"memory\")}>\n <Box sx={{ pl: 2, pt: 1 }}>\n <Button\n fullWidth\n variant=\"outlined\"\n onClick={() => setMemoryModalOpen(true)}\n startIcon={<MemoryIcon />}\n sx={{\n textTransform: \"none\",\n borderRadius: \"8px\",\n fontWeight: 600,\n fontSize: \"0.8rem\",\n }}\n >\n Manage Memories\n </Button>\n </Box>\n </Collapse>\n </Box>\n )}\n\n {/* History Section Header */}\n <Box\n onClick={() => toggleSection(\"history\")}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n p: 1,\n borderRadius: \"8px\",\n mb: 1,\n \"&:hover\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <HistoryIcon sx={{ color: theme.palette.primary.main, fontSize: \"1.2rem\" }} />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, color: \"text.primary\" }}>\n {contextMode === \"local\" ? \"Session History\" : \"Conversation History\"}\n </Typography>\n <Chip\n label={activeHistory.length}\n size=\"small\"\n sx={{\n height: \"18px\",\n fontSize: \"0.6rem\",\n bgcolor: theme.palette.primary.main + \"20\",\n color: theme.palette.primary.main,\n }}\n />\n {activeHistory.length > 0 && contextMode === \"local\" && (\n <Tooltip title=\"Clear Session History\" arrow>\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n handleClearHistory();\n }}\n size=\"small\"\n sx={{\n color: theme.palette.error.main,\n \"&:hover\": {\n bgcolor: theme.palette.error.main + \"20\",\n },\n }}\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n {expandedSections.has(\"history\") ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </Box>\n\n {/* Search Bar - only show when history section is expanded */}\n <Collapse in={expandedSections.has(\"history\")}>\n <Box sx={{ mb: 1 }}>\n {activeHistory.length > 0 && (\n <TextField\n fullWidth\n size=\"small\"\n placeholder={`Search ${contextMode === \"local\" ? \"session\" : \"conversation\"} history...`}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: theme.palette.text.secondary }} />\n </InputAdornment>\n ),\n sx: {\n borderRadius: \"12px\",\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n \"& .MuiOutlinedInput-notchedOutline\": {\n border: `1px solid ${theme.palette.divider}`,\n },\n \"&:hover .MuiOutlinedInput-notchedOutline\": {\n borderColor: theme.palette.primary.main + \"60\",\n },\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\n borderColor: theme.palette.primary.main,\n },\n },\n }}\n />\n )}\n </Box>\n </Collapse>\n </Box>\n\n {/* Content Area */}\n <Collapse in={expandedSections.has(\"history\")}>\n <Box\n sx={{\n flex: 1,\n overflowY: \"auto\",\n p: 2,\n minHeight: \"200px\", // Reduced minimum height\n maxHeight: \"400px\", // Reduced max height for better performance\n position: \"relative\", // For loading overlay positioning\n // Custom scrollbar\n \"&::-webkit-scrollbar\": {\n width: \"8px\",\n },\n \"&::-webkit-scrollbar-track\": {\n background: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.1)\" : \"rgba(0,0,0,0.1)\",\n borderRadius: \"4px\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n background: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.2)\" : \"rgba(0,0,0,0.2)\",\n borderRadius: \"4px\",\n \"&:hover\": {\n background: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.3)\" : \"rgba(0,0,0,0.3)\",\n },\n },\n // Firefox scrollbar\n scrollbarWidth: \"thin\",\n scrollbarColor: theme.palette.mode === \"dark\"\n ? \"rgba(255,255,255,0.2) rgba(255,255,255,0.1)\"\n : \"rgba(0,0,0,0.2) rgba(0,0,0,0.1)\",\n }}\n >\n {/* Loading Overlay */}\n {isContentLoading && (\n <Box\n sx={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n bgcolor: theme.palette.mode === \"dark\"\n ? \"rgba(0, 0, 0, 0.7)\"\n : \"rgba(255, 255, 255, 0.8)\",\n backdropFilter: \"blur(4px)\",\n zIndex: 10,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 2,\n }}\n >\n <Box sx={{\n width: 40,\n height: 40,\n border: '3px solid currentColor',\n borderTop: '3px solid transparent',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n color: theme.palette.primary.main,\n '@keyframes spin': {\n '0%': { transform: 'rotate(0deg)' },\n '100%': { transform: 'rotate(360deg)' }\n }\n }} />\n <Typography\n variant=\"body2\"\n sx={{\n color: theme.palette.text.primary,\n fontWeight: 500,\n }}\n >\n {isInitialLoading ? \"Loading conversations...\" : \"Switching context...\"}\n </Typography>\n </Box>\n )}\n\n {/* Content - only render when not loading to prevent layout thrashing */}\n {!isContentLoading && (\n contextMode === \"main\" ? (\n // Show conversation list when in main context\n filteredConversations.length === 0 ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"200px\",\n textAlign: \"center\",\n color: theme.palette.text.secondary,\n }}\n >\n <HistoryIcon sx={{ fontSize: \"3rem\", mb: 2, opacity: 0.5 }} />\n <Typography variant=\"h6\" sx={{ mb: 1, fontWeight: 500, color: \"text.primary\" }}>\n {searchTerm ? \"No Matching Conversations\" : \"No Conversations Yet\"}\n </Typography>\n <Typography variant=\"body2\">\n {searchTerm\n ? \"Try adjusting your search terms\"\n : \"Create your first conversation to get started\"\n }\n </Typography>\n </Box>\n ) : (\n <List sx={{ p: 0 }}>\n {filteredConversations.map((conversation, index: number) => {\n const isCurrent = conversation.id === currentId;\n const isExpanded = expandedConversations.has(conversation.id);\n const conversationHistory = conversation.history || [];\n\n return (\n <ListItem\n key={conversation.id}\n sx={{\n display: \"block\",\n p: 0,\n mb: 1,\n }}\n >\n <Box\n sx={{\n bgcolor: isCurrent\n ? theme.palette.primary.main + \"20\"\n : theme.palette.background.default,\n borderRadius: \"8px\",\n border: `1px solid ${isCurrent\n ? theme.palette.primary.main + \"40\"\n : theme.palette.divider}`,\n overflow: \"hidden\",\n transition: \"all 0.2s ease-in-out\",\n }}\n >\n {/* Conversation Header */}\n <Box\n onClick={() => {\n toggleConversationExpanded(conversation.id);\n // Also switch to this conversation as the current one\n switchConversation(conversation.id);\n }}\n sx={{\n p: 2,\n cursor: \"pointer\",\n \"&:hover\": {\n bgcolor: isCurrent\n ? theme.palette.primary.main + \"30\"\n : theme.palette.primary.main + \"10\",\n },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1 }}>\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: 600,\n color: isCurrent\n ? theme.palette.primary.main\n : theme.palette.text.primary,\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {conversation.name}\n </Typography>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n {isCurrent && (\n <Chip\n label=\"Current\"\n size=\"small\"\n sx={{\n height: \"18px\",\n fontSize: \"0.6rem\",\n bgcolor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n }}\n />\n )}\n {isExpanded ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </Box>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: theme.palette.text.secondary,\n }}\n >\n {conversationHistory.length} messages\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{\n color: theme.palette.text.secondary,\n }}\n >\n • Model: {conversation.model}\n </Typography>\n </Box>\n </Box>\n\n {/* Expanded Conversation Messages */}\n <Collapse in={isExpanded}>\n {conversationHistory.length > 0 ? (\n <Box sx={{ borderTop: `1px solid ${theme.palette.divider}`, bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.02)\" : \"rgba(0,0,0,0.02)\" }}>\n {conversationHistory\n .filter((entry) =>\n !searchTerm ||\n entry.question.toLowerCase().includes(searchTerm.toLowerCase()) ||\n entry.answer.toLowerCase().includes(searchTerm.toLowerCase())\n )\n .slice()\n .reverse()\n .map((entry, messageIndex: number) => {\n const isMessageExpanded = expandedItems.has(messageIndex);\n return (\n <Box key={messageIndex} sx={{ borderBottom: `1px solid ${theme.palette.divider}` }}>\n <Box\n onClick={(e) => {\n e.stopPropagation();\n toggleExpanded(messageIndex);\n }}\n sx={{\n p: 2,\n cursor: \"pointer\",\n \"&:hover\": {\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n },\n }}\n >\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: 500,\n color: theme.palette.text.primary,\n mb: 1,\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n }}\n >\n {entry.question}\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{\n color: theme.palette.text.secondary,\n display: \"-webkit-box\",\n WebkitLineClamp: 1,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n }}\n >\n {entry.answer}\n </Typography>\n </Box>\n\n {/* Expanded Message Content */}\n <Collapse in={isMessageExpanded}>\n <Box sx={{ p: 2, pt: 0, bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.02)\" : \"rgba(0,0,0,0.02)\" }}>\n <AIResponseTextField\n question={entry.question}\n response={entry.answer}\n />\n </Box>\n </Collapse>\n </Box>\n );\n })}\n </Box>\n ) : (\n <Box sx={{ p: 2, textAlign: \"center\", color: theme.palette.text.secondary, borderTop: `1px solid ${theme.palette.divider}` }}>\n <Typography variant=\"body2\">\n No messages in this conversation yet\n </Typography>\n </Box>\n )}\n </Collapse>\n </Box>\n </ListItem>\n );\n })}\n </List>\n )\n ) : (\n // Show message history when in local context\n activeHistory.length === 0 ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"200px\",\n textAlign: \"center\",\n color: theme.palette.text.secondary,\n }}\n >\n <HistoryIcon sx={{ fontSize: \"3rem\", mb: 2, opacity: 0.5 }} />\n <Typography variant=\"h6\" sx={{ mb: 1, fontWeight: 500, color: \"text.primary\" }}>\n No Session History Yet\n </Typography>\n <Typography variant=\"body2\">\n Start a conversation to see your session history here\n </Typography>\n </Box>\n ) : filteredHistory.length === 0 ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"200px\",\n textAlign: \"center\",\n color: theme.palette.text.secondary,\n }}\n >\n <SearchIcon sx={{ fontSize: \"3rem\", mb: 2, opacity: 0.5 }} />\n <Typography variant=\"h6\" sx={{ mb: 1, fontWeight: 500, color: \"text.primary\" }}>\n No Results Found\n </Typography>\n <Typography variant=\"body2\">\n Try adjusting your search terms\n </Typography>\n </Box>\n ) : (\n <List sx={{ p: 0 }}>\n {[...filteredHistory].reverse().map((entry, index) => {\n const isExpanded = expandedItems.has(index);\n return (\n <React.Fragment key={index}>\n <ListItem\n sx={{\n display: \"block\",\n p: 0,\n mb: 2,\n }}\n >\n <Box\n onClick={() => toggleExpanded(index)}\n sx={{\n bgcolor: theme.palette.background.default,\n borderRadius: \"12px\",\n border: `1px solid ${theme.palette.divider}`,\n overflow: \"hidden\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n borderColor: theme.palette.primary.main + \"60\",\n boxShadow: `0 4px 12px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.3)\" : \"rgba(0,0,0,0.1)\"}`,\n transform: \"translateY(-1px)\",\n },\n }}\n >\n {/* Preview Header */}\n <Box sx={{ p: 2 }}>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: 500,\n color: theme.palette.text.primary,\n mb: 1,\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n }}\n >\n {entry.question}\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{\n color: theme.palette.text.secondary,\n display: \"-webkit-box\",\n WebkitLineClamp: 1,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n }}\n >\n {entry.answer}\n </Typography>\n </Box>\n\n {/* Expanded Content */}\n <Collapse in={isExpanded}>\n <Divider />\n <Box sx={{ p: 2 }}>\n <AIResponseTextField\n question={entry.question}\n response={entry.answer}\n />\n </Box>\n </Collapse>\n </Box>\n </ListItem>\n </React.Fragment>\n );\n })}\n </List>\n )\n )\n )}\n </Box>\n </Collapse>\n </Box>\n\n {/* Custom Confirmation Modal */}\n <Dialog\n open={confirmClearOpen}\n onClose={handleCancelClear}\n maxWidth=\"sm\"\n fullWidth\n sx={{\n zIndex: 1500, // Higher than drawer (1400)\n }}\n PaperProps={{\n sx: {\n borderRadius: \"16px\",\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(30, 30, 30, 0.95)\" : \"rgba(255, 255, 255, 0.95)\",\n backdropFilter: \"blur(20px)\",\n border: `1px solid ${theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\"}`,\n boxShadow: `0 24px 48px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.5)\" : \"rgba(0,0,0,0.15)\"}`,\n }\n }}\n BackdropProps={{\n sx: {\n bgcolor: \"rgba(0, 0, 0, 0.4)\",\n backdropFilter: \"blur(8px)\",\n }\n }}\n >\n <DialogTitle\n sx={{\n pb: 1,\n fontSize: \"1.5rem\",\n fontWeight: 600,\n color: theme.palette.error.main,\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n }}\n >\n <DeleteIcon sx={{ fontSize: \"1.75rem\" }} />\n Clear Chat History\n </DialogTitle>\n\n <DialogContent sx={{ pb: 2 }}>\n <DialogContentText\n sx={{\n fontSize: \"1rem\",\n color: theme.palette.text.primary,\n mb: 2,\n }}\n >\n Are you sure you want to clear all chat history?\n </DialogContentText>\n <DialogContentText\n sx={{\n fontSize: \"0.9rem\",\n color: theme.palette.text.secondary,\n fontStyle: \"italic\",\n }}\n >\n This action cannot be undone. All your conversation history will be permanently deleted.\n </DialogContentText>\n </DialogContent>\n\n <DialogActions\n sx={{\n p: 3,\n pt: 1,\n gap: 1,\n }}\n >\n <Button\n onClick={handleCancelClear}\n variant=\"outlined\"\n sx={{\n borderRadius: \"12px\",\n textTransform: \"none\",\n fontWeight: 600,\n minWidth: \"100px\",\n border: `2px solid ${theme.palette.text.secondary}`,\n color: theme.palette.text.primary,\n \"&:hover\": {\n border: `2px solid ${theme.palette.text.primary}`,\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.05)\" : \"rgba(0,0,0,0.05)\",\n }\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleConfirmClear}\n variant=\"contained\"\n color=\"error\"\n sx={{\n borderRadius: \"12px\",\n textTransform: \"none\",\n fontWeight: 600,\n minWidth: \"100px\",\n bgcolor: theme.palette.error.main,\n \"&:hover\": {\n bgcolor: theme.palette.error.dark,\n transform: \"translateY(-1px)\",\n boxShadow: `0 6px 20px ${theme.palette.error.main}40`,\n },\n transition: \"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n Clear All\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* Info Dialog */}\n <Dialog\n open={infoDialogOpen}\n onClose={() => setInfoDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n sx={{\n zIndex: 1500, // Higher than drawer (1400)\n }}\n PaperProps={{\n sx: {\n borderRadius: \"16px\",\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(30, 30, 30, 0.95)\" : \"rgba(255, 255, 255, 0.95)\",\n backdropFilter: \"blur(20px)\",\n border: `1px solid ${theme.palette.mode === \"dark\" ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\"}`,\n boxShadow: `0 24px 48px ${theme.palette.mode === \"dark\" ? \"rgba(0,0,0,0.5)\" : \"rgba(0,0,0,0.15)\"}`,\n }\n }}\n BackdropProps={{\n sx: {\n bgcolor: \"rgba(0, 0, 0, 0.4)\",\n backdropFilter: \"blur(8px)\",\n }\n }}\n >\n <DialogTitle\n sx={{\n pb: 2,\n fontSize: \"1.5rem\",\n fontWeight: 600,\n color: theme.palette.info.main,\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n }}\n >\n <InfoOutlinedIcon sx={{ fontSize: \"1.75rem\" }} />\n About Chat Control Center\n </DialogTitle>\n\n <DialogContent sx={{ pb: 2 }}>\n <DialogContentText\n sx={{\n fontSize: \"1rem\",\n color: theme.palette.text.primary,\n mb: 2,\n lineHeight: 1.6,\n }}\n >\n This control center gives you full access to your chat experience and AI capabilities.\n </DialogContentText>\n\n <DialogContentText\n sx={{\n fontSize: \"0.95rem\",\n color: theme.palette.text.secondary,\n mb: 2,\n lineHeight: 1.6,\n }}\n >\n <strong>Context Modes:</strong><br />\n • <strong>Session Context</strong>: Local conversation for this modal session only<br />\n • <strong>Main Conversation</strong>: Your persistent account conversations<br />\n • Switch between them to access different conversation histories<br /><br />\n\n <strong>Additional Features:</strong><br />\n • <strong>Voice Models</strong>: Change AI voice when TTS is enabled<br />\n • <strong>Personal Memory</strong>: Manage what the AI remembers about you<br />\n • <strong>Search & Organization</strong>: Find specific conversations quickly\n </DialogContentText>\n\n <DialogContentText\n sx={{\n fontSize: \"0.9rem\",\n color: theme.palette.info.main,\n fontStyle: \"italic\",\n bgcolor: theme.palette.mode === \"dark\" ? \"rgba(33, 150, 243, 0.1)\" : \"rgba(33, 150, 243, 0.05)\",\n p: 2,\n borderRadius: \"8px\",\n border: `1px solid ${theme.palette.info.main}30`,\n }}\n >\n 💡 <strong>Pro Tip:</strong> Use Session Context for quick experiments and Main Conversation\n for important discussions you want to keep. All features respect your privacy settings!\n </DialogContentText>\n </DialogContent>\n\n <DialogActions\n sx={{\n p: 3,\n pt: 1,\n }}\n >\n <Button\n onClick={() => setInfoDialogOpen(false)}\n variant=\"contained\"\n sx={{\n borderRadius: \"12px\",\n textTransform: \"none\",\n fontWeight: 600,\n minWidth: \"100px\",\n bgcolor: theme.palette.info.main,\n \"&:hover\": {\n bgcolor: theme.palette.info.dark,\n transform: \"translateY(-1px)\",\n boxShadow: `0 6px 20px ${theme.palette.info.main}40`,\n },\n transition: \"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n Got it!\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* Memory Modal */}\n <MemoryModal\n open={memoryModalOpen}\n onClose={() => setMemoryModalOpen(false)}\n />\n </Drawer>\n );\n};\n\nexport default AIQueriesDrawer;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-4E65-64BC92\nconst __banditFingerprint_shared_genericloadertsx = 'BL-FP-FF822C-47BD';\nconst __auditTrail_shared_genericloadertsx = 'BL-AU-MGOIKVW2-FIHQ';\n// File: generic-loader.tsx | Path: src/shared/generic-loader.tsx | Hash: 4e6547bd\n\nimport React from \"react\";\nimport { Box, CircularProgress, useTheme } from \"@mui/material\";\n\ninterface GenericLoaderProps {\n size?: number;\n color?: string;\n variant?: \"dots\" | \"spinner\" | \"pulse\";\n}\n\nconst GenericLoader: React.FC<GenericLoaderProps> = ({ \n size = 40, \n color,\n variant = \"spinner\" \n}) => {\n const theme = useTheme();\n const loaderColor = color || theme.palette.primary.main;\n\n if (variant === \"dots\") {\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 1,\n py: 2,\n \"@keyframes bounce\": {\n \"0%, 80%, 100%\": {\n transform: \"scale(0)\",\n },\n \"40%\": {\n transform: \"scale(1.0)\",\n },\n },\n }}\n >\n {[0, 0.15, 0.3].map((delay, index) => (\n <Box\n key={index}\n sx={{\n width: 8,\n height: 8,\n backgroundColor: loaderColor,\n borderRadius: \"50%\",\n animation: \"bounce 1.4s infinite ease-in-out both\",\n animationDelay: `${delay}s`,\n }}\n />\n ))}\n </Box>\n );\n }\n\n if (variant === \"pulse\") {\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n py: 2,\n \"@keyframes pulse\": {\n \"0%\": {\n transform: \"scale(0.9)\",\n opacity: 1,\n },\n \"50%\": {\n transform: \"scale(1.1)\",\n opacity: 0.7,\n },\n \"100%\": {\n transform: \"scale(0.9)\",\n opacity: 1,\n },\n },\n }}\n >\n <Box\n sx={{\n width: size,\n height: size,\n borderRadius: \"50%\",\n backgroundColor: loaderColor,\n animation: \"pulse 1.5s infinite ease-in-out\",\n }}\n />\n </Box>\n );\n }\n\n // Default spinner variant\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n py: 2,\n }}\n >\n <CircularProgress \n size={size} \n sx={{ color: loaderColor }}\n />\n </Box>\n );\n};\n\nexport default GenericLoader;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-1263-9357C5\nconst __banditFingerprint_hooks_useAiChatts = 'BL-FP-37C953-1858';\nconst __auditTrail_hooks_useAiChatts = 'BL-AU-MGOIKVVD-YXTI';\n// File: useAiChat.ts | Path: src/hooks/useAiChat.ts | Hash: 12631858\n\nimport { useState, useEffect } from \"react\";\nimport { useMediaQuery, Theme } from \"@mui/material\";\nimport { useAIQueryStore } from \"../store/aiQueryStore\";\nimport { useAIProviderStore } from \"../store/aiProviderStore\";\nimport { useModelStore } from \"../store/modelStore\";\nimport { usePackageSettingsStore } from \"../store/packageSettingsStore\";\nimport { debugLogger } from \"../services/logging/debugLogger\";\n\n//TODO: This file can likely be removed and solely use the useAIProvider hook the same way Chat.tsx does\n/**\n * @deprecated This hook will likely be removed in a future version.\n * Please use the new useAIProvider hook instead, which provides better RAG integration,\n * unified provider support, and improved error handling.\n * \n * The Chat component already uses useAIProvider successfully.\n */\n\nconst useAIChat = () => {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down(\"sm\"));\n const provider = useAIProviderStore((state) => state.provider);\n const SYSTEM_PROMPT = useModelStore((state) => state.systemPrompt);\n const OLLAMA_MODEL = usePackageSettingsStore((state) => state.settings?.defaultModel || \"\");\n const [fullScreen, setFullScreen] = useState(isMobile);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [showSettings, setShowSettings] = useState(false);\n const [, setAutoFullscreenTriggered] = useState(false);\n\n const {\n apiKey,\n inputValue,\n setApiKey,\n setInputValue,\n setResponse,\n setPreviousQuestion,\n setComponentStatus,\n addHistory,\n } = useAIQueryStore();\n\n const sendWithAIProvider = () => {\n if (!provider) {\n debugLogger.error(\"No AI provider available for chat\");\n setComponentStatus(\"Error\");\n return;\n }\n\n let message = \"\";\n setComponentStatus(\"Loading\");\n\n const stream = provider.chat({\n model: OLLAMA_MODEL,\n stream: true,\n messages: [\n { role: \"system\", content: SYSTEM_PROMPT },\n { role: \"user\", content: inputValue },\n ],\n });\n\n stream.subscribe({\n next: (data) => {\n message += data.message.content;\n setResponse(message);\n },\n error: (err: unknown) => {\n debugLogger.error(\"Stream error in AI chat\", { error: err });\n setComponentStatus(\"Idle\");\n },\n complete: () => {\n setComponentStatus(\"Idle\");\n setPreviousQuestion(inputValue);\n setResponse(message);\n addHistory({ question: inputValue, answer: message });\n setInputValue(\"\");\n },\n });\n };\n\n const sendWithOpenAI = async () => {\n setComponentStatus(\"Loading\");\n setResponse(\"\");\n setAutoFullscreenTriggered(false);\n\n const history = useAIQueryStore.getState().history;\n const contextMessages = history.slice(-5).flatMap((entry) => [\n { role: \"user\", content: entry.question },\n { role: \"assistant\", content: entry.answer },\n ]);\n\n const payload = {\n model: \"gpt-3.5-turbo\",\n messages: [...contextMessages, { role: \"user\", content: inputValue }],\n temperature: 0.7,\n };\n\n try {\n const res = await fetch(\"https://api.openai.com/v1/chat/completions\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(payload),\n });\n const data = await res.json();\n const stubbedAnswer = data.choices[0].message.content;\n setComponentStatus(\"Idle\");\n setPreviousQuestion(inputValue);\n setResponse(stubbedAnswer);\n addHistory({ question: inputValue, answer: stubbedAnswer });\n setInputValue(\"\");\n } catch (err) {\n debugLogger.error(\"Failed to handle AI chat query\", { error: err });\n setComponentStatus(\"Idle\");\n }\n };\n\n const handleSend = () => {\n if (inputValue.trim() === \"\") return;\n if (apiKey) {\n void sendWithOpenAI();\n return;\n }\n\n sendWithAIProvider();\n };\n\n useEffect(() => {\n setFullScreen(isMobile);\n }, [isMobile]);\n\n return {\n fullScreen,\n setFullScreen,\n drawerOpen,\n setDrawerOpen,\n showSettings,\n setShowSettings,\n handleSend,\n };\n};\n\nexport default useAIChat;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-2334-A1751B\nconst __banditFingerprint_hooks_useDraggablets = 'BL-FP-F62E2B-EAAA';\nconst __auditTrail_hooks_useDraggablets = 'BL-AU-MGOIKVVE-OXKE';\n// File: useDraggable.ts | Path: src/hooks/useDraggable.ts | Hash: 2334eaaa\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nconst useDraggable = () => {\n const modalRef = useRef<HTMLDivElement | null>(null);\n const [dragging, setDragging] = useState(false);\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [position, setPosition] = useState({ x: 0, y: 0 });\n\n const handleHeaderMouseDown = (e: React.MouseEvent) => {\n const rect = modalRef.current?.getBoundingClientRect();\n if (rect) {\n setOffset({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setDragging(true);\n }\n };\n\n const handleHeaderMouseMove = useCallback(\n (e: MouseEvent) => {\n if (dragging) {\n setPosition({ x: e.clientX - offset.x, y: e.clientY - offset.y });\n }\n },\n [dragging, offset]\n );\n\n const handleHeaderMouseUp = () => {\n setDragging(false);\n };\n\n useEffect(() => {\n if (dragging) {\n document.addEventListener(\"mousemove\", handleHeaderMouseMove);\n document.addEventListener(\"mouseup\", handleHeaderMouseUp);\n } else {\n document.removeEventListener(\"mousemove\", handleHeaderMouseMove);\n document.removeEventListener(\"mouseup\", handleHeaderMouseUp);\n }\n return () => {\n document.removeEventListener(\"mousemove\", handleHeaderMouseMove);\n document.removeEventListener(\"mouseup\", handleHeaderMouseUp);\n };\n }, [dragging, handleHeaderMouseMove]);\n\n return {\n modalRef,\n position,\n setPosition,\n handleDrag: handleHeaderMouseMove,\n handleHeaderMouseDown,\n };\n};\n\nexport default useDraggable;\n"],"mappings":"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","names":["useEffect","useRef","useState","InputAdornment","Tooltip","IconButton","Box","Avatar","MenuItem","Typography","CloseIcon","RecordVoiceOverIcon","useState","Box","useTheme","Fade","jsx","useTheme","theme","useState","Box","jsx","Fade","Box","IconButton","Tooltip","useTheme","jsx","useTheme","jsx","Box","Tooltip","IconButton","React","useState","useEffect","Box","Typography","useMediaQuery","useTheme","Chip","IconButton","Tooltip","TextField","InputAdornment","CloseIcon","HistoryIcon","jsx","jsxs","useTheme","useMediaQuery","theme","useState","useEffect","jsxs","Box","jsx","HistoryIcon","Typography","Tooltip","IconButton","CloseIcon","Chip","TextField","InputAdornment","React","Box","useTheme","jsx","useTheme","jsx","Box","useState","useEffect","useMediaQuery","useMediaQuery","useState","useEffect","useEffect","useRef","useState","useRef","useState","useEffect","Subscription","Fragment","jsx","jsxs","banditHead","useRef","useState","Subscription","toTitleCase","useEffect","jsx","jsxs","Box","InputAdornment","Tooltip","IconButton","Avatar","MenuItem","Typography","Fragment","RecordVoiceOverIcon","CloseIcon"]}
|