@jazzmind/busibox-app 3.0.52 → 3.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/dist/components/account/IntegrationsSettings.d.ts +2 -0
- package/dist/components/account/IntegrationsSettings.d.ts.map +1 -0
- package/dist/components/account/IntegrationsSettings.js +96 -0
- package/dist/components/account/IntegrationsSettings.js.map +1 -0
- package/dist/components/auth/ProtectedRoute.d.ts +1 -1
- package/dist/components/chat/ChatContainer.d.ts.map +1 -1
- package/dist/components/chat/ChatContainer.js +110 -94
- package/dist/components/chat/ChatContainer.js.map +1 -1
- package/dist/components/chat/CitationContext.d.ts +17 -0
- package/dist/components/chat/CitationContext.d.ts.map +1 -0
- package/dist/components/chat/CitationContext.js +19 -0
- package/dist/components/chat/CitationContext.js.map +1 -0
- package/dist/components/chat/MessageList.d.ts +4 -2
- package/dist/components/chat/MessageList.d.ts.map +1 -1
- package/dist/components/chat/MessageList.js +35 -5
- package/dist/components/chat/MessageList.js.map +1 -1
- package/dist/components/chat/ThinkingStream.d.ts +4 -1
- package/dist/components/chat/ThinkingStream.d.ts.map +1 -1
- package/dist/components/chat/ThinkingStream.js +4 -2
- package/dist/components/chat/ThinkingStream.js.map +1 -1
- package/dist/components/chat/chat-utils.d.ts +15 -15
- package/dist/components/documents/DocumentPreviewPanel.d.ts +13 -0
- package/dist/components/documents/DocumentPreviewPanel.d.ts.map +1 -0
- package/dist/components/documents/DocumentPreviewPanel.js +13 -0
- package/dist/components/documents/DocumentPreviewPanel.js.map +1 -0
- package/dist/components/documents/HtmlViewer.d.ts +3 -1
- package/dist/components/documents/HtmlViewer.d.ts.map +1 -1
- package/dist/components/documents/HtmlViewer.js +10 -1
- package/dist/components/documents/HtmlViewer.js.map +1 -1
- package/dist/components/feedback/FeedbackWidget.d.ts +13 -0
- package/dist/components/feedback/FeedbackWidget.d.ts.map +1 -0
- package/dist/components/feedback/FeedbackWidget.js +134 -0
- package/dist/components/feedback/FeedbackWidget.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/lib/agent/stream-event-processor.d.ts +4 -1
- package/dist/lib/agent/stream-event-processor.d.ts.map +1 -1
- package/dist/lib/agent/stream-event-processor.js +21 -1
- package/dist/lib/agent/stream-event-processor.js.map +1 -1
- package/dist/lib/authz/feedback.d.ts +50 -0
- package/dist/lib/authz/feedback.d.ts.map +1 -0
- package/dist/lib/authz/feedback.js +68 -0
- package/dist/lib/authz/feedback.js.map +1 -0
- package/dist/lib/bridge/config.d.ts +8 -2
- package/dist/lib/bridge/config.d.ts.map +1 -1
- package/dist/lib/bridge/config.js +17 -5
- package/dist/lib/bridge/config.js.map +1 -1
- package/dist/lib/data/settings.d.ts.map +1 -1
- package/dist/lib/data/settings.js +40 -22
- package/dist/lib/data/settings.js.map +1 -1
- package/dist/lib/deploy/app-config.d.ts +24 -0
- package/dist/lib/deploy/app-config.d.ts.map +1 -1
- package/dist/lib/deploy/app-config.js +103 -1
- package/dist/lib/deploy/app-config.js.map +1 -1
- package/dist/lib/deploy/deployment-client.d.ts +2 -0
- package/dist/lib/deploy/deployment-client.d.ts.map +1 -1
- package/dist/lib/deploy/deployment-client.js +1 -1
- package/dist/lib/deploy/deployment-client.js.map +1 -1
- package/dist/lib/hooks/useChatStream.d.ts +3 -1
- package/dist/lib/hooks/useChatStream.d.ts.map +1 -1
- package/dist/lib/hooks/useChatStream.js +5 -0
- package/dist/lib/hooks/useChatStream.js.map +1 -1
- package/dist/types/chat.d.ts +7 -0
- package/dist/types/chat.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IntegrationsSettings.d.ts","sourceRoot":"","sources":["../../../src/components/account/IntegrationsSettings.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,oBAAoB,mDAsJnC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { useCrossAppApiPath } from '../../contexts/ApiContext';
|
|
5
|
+
const PROVIDER_INFO = {
|
|
6
|
+
google: {
|
|
7
|
+
label: 'Google',
|
|
8
|
+
icon: '🟢',
|
|
9
|
+
description: 'Access Google Calendar and Gmail (read-only) for meeting prep and email summaries.',
|
|
10
|
+
},
|
|
11
|
+
microsoft: {
|
|
12
|
+
label: 'Microsoft 365',
|
|
13
|
+
icon: '🔵',
|
|
14
|
+
description: 'Access Outlook Calendar and Mail (read-only) for meeting prep and email summaries.',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export function IntegrationsSettings() {
|
|
18
|
+
const resolve = useCrossAppApiPath();
|
|
19
|
+
const [integrations, setIntegrations] = useState([]);
|
|
20
|
+
const [loading, setLoading] = useState(true);
|
|
21
|
+
const [working, setWorking] = useState(null);
|
|
22
|
+
const [error, setError] = useState(null);
|
|
23
|
+
const [message, setMessage] = useState(null);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const params = new URLSearchParams(window.location.search);
|
|
26
|
+
const connected = params.get('integration_connected');
|
|
27
|
+
const integrationError = params.get('integration_error');
|
|
28
|
+
if (connected)
|
|
29
|
+
setMessage(`Successfully connected ${connected}`);
|
|
30
|
+
if (integrationError)
|
|
31
|
+
setError(`Connection failed: ${integrationError}`);
|
|
32
|
+
}, []);
|
|
33
|
+
const loadIntegrations = async () => {
|
|
34
|
+
setLoading(true);
|
|
35
|
+
setError(null);
|
|
36
|
+
try {
|
|
37
|
+
const res = await fetch(resolve('account', '/api/account/integrations'), { cache: 'no-store' });
|
|
38
|
+
const data = await res.json();
|
|
39
|
+
if (!res.ok)
|
|
40
|
+
throw new Error(data.error || 'Failed to load integrations');
|
|
41
|
+
setIntegrations(Array.isArray(data.integrations) ? data.integrations : []);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
const msg = err instanceof Error ? err.message : 'Failed to load integrations';
|
|
45
|
+
setError(msg);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
void loadIntegrations();
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
+
}, []);
|
|
55
|
+
const handleConnect = (provider) => {
|
|
56
|
+
setWorking(provider);
|
|
57
|
+
window.location.href = resolve('account', `/api/account/integrations/${provider}/connect`);
|
|
58
|
+
};
|
|
59
|
+
const handleDisconnect = async (provider) => {
|
|
60
|
+
setWorking(provider);
|
|
61
|
+
setError(null);
|
|
62
|
+
setMessage(null);
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(resolve('account', `/api/account/integrations/${provider}`), {
|
|
65
|
+
method: 'DELETE',
|
|
66
|
+
});
|
|
67
|
+
const data = await res.json();
|
|
68
|
+
if (!res.ok)
|
|
69
|
+
throw new Error(data.error || 'Failed to disconnect');
|
|
70
|
+
setMessage(`Disconnected ${provider}`);
|
|
71
|
+
await loadIntegrations();
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const msg = err instanceof Error ? err.message : 'Failed to disconnect';
|
|
75
|
+
setError(msg);
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
setWorking(null);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
if (loading) {
|
|
82
|
+
return (_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900 mb-4", children: "Connected Integrations" }), _jsx("div", { className: "animate-pulse h-6 bg-gray-200 rounded w-1/3" })] }));
|
|
83
|
+
}
|
|
84
|
+
// If no integrations are available (authz has none configured), show nothing
|
|
85
|
+
if (!loading && integrations.length === 0) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return (_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900 mb-1", children: "Connected Integrations" }), _jsx("p", { className: "text-sm text-gray-500 mb-4", children: "Connect your calendar and email accounts so AI agents can assist with meeting prep, scheduling, and briefings." }), error && (_jsx("div", { className: "mb-3 text-sm text-red-600 bg-red-50 border border-red-200 rounded px-3 py-2", children: error })), message && (_jsx("div", { className: "mb-3 text-sm text-green-700 bg-green-50 border border-green-200 rounded px-3 py-2", children: message })), _jsx("div", { className: "space-y-3", children: integrations.map((integration) => {
|
|
89
|
+
const info = PROVIDER_INFO[integration.provider];
|
|
90
|
+
if (!info)
|
|
91
|
+
return null;
|
|
92
|
+
const isWorking = working === integration.provider;
|
|
93
|
+
return (_jsxs("div", { className: "flex items-start justify-between gap-4 p-4 border border-gray-200 rounded-lg", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("span", { className: "text-2xl leading-none mt-0.5", children: info.icon }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium text-gray-900", children: info.label }), integration.connected && (_jsx("span", { className: "inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800", children: "Connected" }))] }), _jsx("p", { className: "text-xs text-gray-500 mt-0.5", children: info.description }), integration.connected && integration.email && (_jsxs("p", { className: "text-xs text-gray-600 mt-1", children: ["Signed in as ", _jsx("span", { className: "font-medium", children: integration.email })] }))] })] }), _jsx("div", { className: "shrink-0", children: integration.connected ? (_jsx("button", { onClick: () => handleDisconnect(integration.provider), disabled: isWorking, className: "text-sm text-red-600 hover:text-red-700 disabled:opacity-50 font-medium", children: isWorking ? 'Disconnecting…' : 'Disconnect' })) : (_jsx("button", { onClick: () => handleConnect(integration.provider), disabled: isWorking, className: "inline-flex items-center px-3 py-1.5 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50", children: isWorking ? 'Redirecting…' : 'Connect' })) })] }, integration.provider));
|
|
94
|
+
}) })] }));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=IntegrationsSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IntegrationsSettings.js","sourceRoot":"","sources":["../../../src/components/account/IntegrationsSettings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,5 @@ export type ProtectedRouteProps = {
|
|
|
8
8
|
* redirecting to login. Use for inline re-auth flows (e.g. passkey prompt). */
|
|
9
9
|
sessionExpiredFallback?: React.ReactNode;
|
|
10
10
|
};
|
|
11
|
-
export declare function ProtectedRoute({ children, requireAdmin, fallback, loginUrl, homeUrl, sessionExpiredFallback, }: ProtectedRouteProps): string | number | bigint | true | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined
|
|
11
|
+
export declare function ProtectedRoute({ children, requireAdmin, fallback, loginUrl, homeUrl, sessionExpiredFallback, }: ProtectedRouteProps): string | number | bigint | true | import("react/jsx-runtime").JSX.Element | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined>;
|
|
12
12
|
//# sourceMappingURL=ProtectedRoute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContainer.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatContainer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatContainer.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatContainer.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EAIR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAoE5F,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,YAAY,EAAE,CAAC;IACrC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,mBAAmB,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5E,YAAY,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2BAA2B,EAAE,OAAO,CAAC;IACrC,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EAAE,mBAAmB,EACjC,YAAY,EACZ,eAAe,EAAE,mBAA0B,EAC3C,2BAA2B,EAC3B,MAAM,EACN,sBAAuC,EACvC,iBAAwB,EACxB,SAAc,GACf,EAAE,kBAAkB,2CA8oCpB"}
|
|
@@ -17,6 +17,8 @@ import { MessageInput } from './MessageInput';
|
|
|
17
17
|
import { AgentSelectionPanel } from './AgentSelectionPanel';
|
|
18
18
|
import { InsightEditModal } from './InsightEditModal';
|
|
19
19
|
import { stripThinkTags } from './chat-utils';
|
|
20
|
+
import { CitationProvider, useCitation } from './CitationContext';
|
|
21
|
+
import { DocumentPreviewPanel } from '../documents/DocumentPreviewPanel';
|
|
20
22
|
import { useChatStream } from '../../lib/hooks/useChatStream';
|
|
21
23
|
import { useIsMobile } from '../../lib/hooks/useIsMobile';
|
|
22
24
|
import { useCrossAppApiPath } from '../../contexts/ApiContext';
|
|
@@ -42,6 +44,7 @@ function mapConversation(conv) {
|
|
|
42
44
|
* Extracts thoughts from routing_decision.thoughts
|
|
43
45
|
*/
|
|
44
46
|
function mapMessage(msg) {
|
|
47
|
+
const rawCitations = msg.routing_decision?.citations || [];
|
|
45
48
|
return {
|
|
46
49
|
id: msg.id,
|
|
47
50
|
conversationId: msg.conversation_id || msg.conversationId,
|
|
@@ -61,6 +64,12 @@ function mapMessage(msg) {
|
|
|
61
64
|
sizeBytes: a.size_bytes ?? a.sizeBytes,
|
|
62
65
|
addedToLibrary: a.added_to_library ?? a.addedToLibrary,
|
|
63
66
|
})),
|
|
67
|
+
citations: rawCitations.map((c) => ({
|
|
68
|
+
fileId: c.file_id || c.fileId,
|
|
69
|
+
filename: c.filename || '',
|
|
70
|
+
page: c.page_number ?? c.page ?? undefined,
|
|
71
|
+
score: c.score ?? undefined,
|
|
72
|
+
})).filter((c) => !!c.fileId),
|
|
64
73
|
createdAt: msg.created_at ? new Date(msg.created_at) : msg.createdAt,
|
|
65
74
|
};
|
|
66
75
|
}
|
|
@@ -633,100 +642,107 @@ export function ChatContainer({ initialConversations, initialMessages, initialCo
|
|
|
633
642
|
e.stopPropagation();
|
|
634
643
|
handleDeleteConversation(conv.id);
|
|
635
644
|
}, className: "opacity-0 group-hover:opacity-100 p-1 hover:bg-red-100 dark:hover:bg-red-900 rounded text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-all", children: _jsx(Trash2, { className: "w-4 h-4" }) }))] }, conv.id))) })) })] }));
|
|
636
|
-
return (_jsxs("div", { className: `flex h-full overflow-hidden bg-gray-50 dark:bg-gray-900 ${className}`, children: [!isMobile && conversationSidebar, isMobile && mobileSidebarOpen && (_jsxs("div", { className: "fixed inset-0 z-40 flex md:hidden", children: [_jsx("div", { className: "absolute inset-0 bg-black/40", onClick: () => setMobileSidebarOpen(false) }), _jsx("div", { className: "relative z-10", children: conversationSidebar })] })), _jsxs("div", { className: "flex-1 flex flex-col min-w-0 min-h-0 overflow-hidden", children: [_jsx("div", { className: "bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [isMobile && (_jsx("button", { onClick: () => setMobileSidebarOpen(true), className: "md:hidden p-2 rounded-lg border border-gray-300 dark:border-gray-600 text-gray-600 dark:text-gray-300", title: "Open conversations", "aria-label": "Open conversations", children: _jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 6h18M3 12h18M3 18h18" }) }) })), _jsxs("div", { className: "min-w-0", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white truncate", children: currentConversation?.title || 'New Conversation' }), _jsxs("div", { className: "hidden sm:flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400", children: [_jsxs("span", { children: [messages.length, " messages"] }), showAgentSelector && selectedAgents.length > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-gray-300 dark:text-gray-600", children: "\u2022" }), _jsxs("span", { className: "flex items-center gap-1 truncate", children: [selectedAgents.slice(0, 2).map((agentId, idx) => {
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
645
|
+
return (_jsx(CitationProvider, { children: _jsxs("div", { className: `flex h-full overflow-hidden bg-gray-50 dark:bg-gray-900 ${className}`, children: [!isMobile && conversationSidebar, isMobile && mobileSidebarOpen && (_jsxs("div", { className: "fixed inset-0 z-40 flex md:hidden", children: [_jsx("div", { className: "absolute inset-0 bg-black/40", onClick: () => setMobileSidebarOpen(false) }), _jsx("div", { className: "relative z-10", children: conversationSidebar })] })), _jsxs("div", { className: "flex-1 flex flex-col min-w-0 min-h-0 overflow-hidden", children: [_jsx("div", { className: "bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [isMobile && (_jsx("button", { onClick: () => setMobileSidebarOpen(true), className: "md:hidden p-2 rounded-lg border border-gray-300 dark:border-gray-600 text-gray-600 dark:text-gray-300", title: "Open conversations", "aria-label": "Open conversations", children: _jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 6h18M3 12h18M3 18h18" }) }) })), _jsxs("div", { className: "min-w-0", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white truncate", children: currentConversation?.title || 'New Conversation' }), _jsxs("div", { className: "hidden sm:flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400", children: [_jsxs("span", { children: [messages.length, " messages"] }), showAgentSelector && selectedAgents.length > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-gray-300 dark:text-gray-600", children: "\u2022" }), _jsxs("span", { className: "flex items-center gap-1 truncate", children: [selectedAgents.slice(0, 2).map((agentId, idx) => {
|
|
646
|
+
const agent = availableAgents.find(a => a.id === agentId);
|
|
647
|
+
if (!agent)
|
|
648
|
+
return null;
|
|
649
|
+
return (_jsxs("span", { className: "text-blue-600 dark:text-blue-400", children: [agent.display_name || agent.name, idx < Math.min(selectedAgents.length, 2) - 1 ? ',' : ''] }, agentId));
|
|
650
|
+
}), selectedAgents.length > 2 && (_jsxs("span", { className: "text-gray-400 dark:text-gray-500", children: ["+", selectedAgents.length - 2, " more"] }))] })] }))] })] })] }), _jsxs("div", { className: "flex items-center gap-2 flex-shrink-0", children: [showAgentSelector && (_jsxs("button", { onClick: () => {
|
|
651
|
+
setShowAgentPanel(!showAgentPanel);
|
|
652
|
+
if (!showAgentPanel) {
|
|
653
|
+
setShowInsightsPanel(false);
|
|
654
|
+
setShowTasksPanel(false);
|
|
655
|
+
}
|
|
656
|
+
}, disabled: isStreaming, className: `flex items-center gap-2 px-3 py-2 text-sm border rounded-lg transition-colors ${isStreaming
|
|
657
|
+
? 'bg-gray-100 dark:bg-gray-700 text-gray-400 dark:text-gray-500 cursor-not-allowed'
|
|
658
|
+
: showAgentPanel
|
|
659
|
+
? 'bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300 border-blue-300 dark:border-blue-600'
|
|
660
|
+
: selectedAgents.length > 0
|
|
661
|
+
? 'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-700 hover:bg-blue-100 dark:hover:bg-blue-900/50'
|
|
662
|
+
: 'bg-white dark:bg-gray-700 text-gray-600 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600'}`, title: "Select agents", children: [_jsx(Bot, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium hidden sm:inline", children: "Agents" }), selectedAgents.length > 0 && (_jsx("span", { className: "bg-blue-500 text-white text-xs min-w-[1.5rem] px-2 py-0.5 rounded-full text-center", children: selectedAgents.length }))] })), showInsights && insightsEnabled && (_jsxs("button", { onClick: () => {
|
|
663
|
+
const willOpen = !showInsightsPanel;
|
|
664
|
+
setShowInsightsPanel(willOpen);
|
|
665
|
+
if (willOpen) {
|
|
666
|
+
setShowAgentPanel(false);
|
|
667
|
+
setShowTasksPanel(false);
|
|
668
|
+
loadInsights(null, 0, false);
|
|
669
|
+
}
|
|
670
|
+
}, className: `flex items-center gap-2 px-3 py-2 text-sm border rounded-lg transition-colors ${showInsightsPanel
|
|
671
|
+
? 'bg-purple-100 dark:bg-purple-900/50 text-purple-700 dark:text-purple-300 border-purple-300 dark:border-purple-600'
|
|
672
|
+
: 'bg-white dark:bg-gray-700 text-gray-600 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600'}`, title: "View insights and memories", children: [_jsx(Brain, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium hidden sm:inline", children: "Insights" }), insightStats && insightStats.total > 0 && (_jsx("span", { className: "bg-purple-500 text-white text-xs min-w-[1.5rem] px-2 py-0.5 rounded-full text-center", children: insightStats.total }))] })), _jsxs("button", { onClick: () => {
|
|
673
|
+
setShowTasksPanel(!showTasksPanel);
|
|
674
|
+
if (!showTasksPanel) {
|
|
675
|
+
setShowAgentPanel(false);
|
|
676
|
+
setShowInsightsPanel(false);
|
|
677
|
+
}
|
|
678
|
+
}, className: `flex items-center gap-2 px-3 py-2 text-sm border rounded-lg transition-colors ${showTasksPanel
|
|
679
|
+
? 'bg-amber-100 dark:bg-amber-900/50 text-amber-700 dark:text-amber-300 border-amber-300 dark:border-amber-600'
|
|
680
|
+
: 'bg-white dark:bg-gray-700 text-gray-600 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600'}`, title: "View and manage tasks", children: [_jsx(ListTodo, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium hidden sm:inline", children: "Tasks" })] })] })] }) }), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto bg-white dark:bg-gray-800", children: isLoadingMessages ? (_jsx("div", { className: "flex items-center justify-center h-full", children: _jsx("div", { className: "text-gray-500 dark:text-gray-400", children: "Loading messages..." }) })) : (_jsx(MessageList, { messages: messages, streamingContent: streamState.content || undefined, streamingAgentName: streamState.agentName, streamingThoughts: streamState.thoughts, streamingParts: streamState.parts, streamingCitations: streamState.citations, isLoading: isStreaming, onDeleteMessage: handleDeleteMessage, onRetryMessage: handleRetryMessage, onSuggestedAction: (action) => handleSendMessage(action), quickReplies: quickReplies.length > 0
|
|
681
|
+
? quickReplies
|
|
682
|
+
: streamState.promptActive
|
|
683
|
+
? streamState.quickReplies
|
|
684
|
+
: undefined, onQuickReply: (reply) => {
|
|
685
|
+
setQuickReplies([]);
|
|
686
|
+
setPromptActive(false);
|
|
687
|
+
hookCancel();
|
|
688
|
+
setTimeout(() => handleSendMessage(reply), 50);
|
|
689
|
+
}, insightsEnabled: insightsEnabled })) }), _jsx(MessageInput, { onSend: handleSendMessage, onStop: handleStopStreaming, disabled: false, isStreaming: isStreaming, conversationId: currentConversation?.id, onEnsureConversation: ensureConversation })] }), showInsights && showInsightsPanel && (_jsxs("div", { className: "w-80 bg-white dark:bg-gray-800 border-l border-gray-200 dark:border-gray-700 flex flex-col", children: [_jsxs("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700", children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: "Insights" }), _jsx("button", { onClick: () => setShowInsightsPanel(false), className: "p-1 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "w-5 h-5" }) })] }), currentConversation && (_jsxs("div", { className: "flex gap-2 mb-3", children: [_jsxs("button", { onClick: handleForceInsight, className: "flex-1 flex items-center justify-center gap-2 px-3 py-1.5 text-sm bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300 rounded-lg hover:bg-amber-200 dark:hover:bg-amber-800 transition-colors", title: "Manually add an insight", children: [_jsx(Sparkles, { className: "w-4 h-4" }), "Add"] }), _jsxs("button", { onClick: handleGenerateInsights, disabled: isLoadingInsights, className: "flex-1 flex items-center justify-center gap-2 px-3 py-1.5 text-sm bg-purple-100 dark:bg-purple-900 text-purple-700 dark:text-purple-300 rounded-lg hover:bg-purple-200 dark:hover:bg-purple-800 transition-colors disabled:opacity-50", children: [_jsx(Brain, { className: "w-4 h-4" }), "Generate"] })] })), insightStats && (_jsxs("div", { className: "mb-3", children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsxs("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [insightStats.total, " insights"] }), insightCategoryFilter && (_jsx("button", { onClick: () => handleCategoryFilter(null), className: "text-xs text-purple-600 dark:text-purple-400 hover:underline", children: "Clear filter" }))] }), _jsx("div", { className: "flex flex-wrap gap-1", children: Object.entries(insightStats.by_category || {}).map(([category, count]) => (_jsxs("button", { onClick: () => handleCategoryFilter(insightCategoryFilter === category ? null : category), className: `text-xs px-2 py-1 rounded-full transition-colors ${insightCategoryFilter === category
|
|
690
|
+
? category === 'preference'
|
|
691
|
+
? 'bg-blue-500 text-white'
|
|
692
|
+
: category === 'fact'
|
|
693
|
+
? 'bg-green-500 text-white'
|
|
694
|
+
: category === 'goal'
|
|
695
|
+
? 'bg-purple-500 text-white'
|
|
696
|
+
: category === 'context'
|
|
697
|
+
? 'bg-amber-500 text-white'
|
|
698
|
+
: 'bg-gray-500 text-white'
|
|
699
|
+
: category === 'preference'
|
|
700
|
+
? 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300 hover:bg-blue-200 dark:hover:bg-blue-800'
|
|
701
|
+
: category === 'fact'
|
|
702
|
+
? 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300 hover:bg-green-200 dark:hover:bg-green-800'
|
|
703
|
+
: category === 'goal'
|
|
704
|
+
? 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300 hover:bg-purple-200 dark:hover:bg-purple-800'
|
|
705
|
+
: category === 'context'
|
|
706
|
+
? 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300 hover:bg-amber-200 dark:hover:bg-amber-800'
|
|
707
|
+
: 'bg-gray-100 text-gray-700 dark:bg-gray-600 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-500'}`, children: [category, " (", count, ")"] }, category))) })] })), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "text", value: insightSearchQuery, onChange: (e) => setInsightSearchQuery(e.target.value), onKeyDown: (e) => {
|
|
708
|
+
if (e.key === 'Enter')
|
|
709
|
+
handleSearchInsights();
|
|
710
|
+
if (e.key === 'Escape') {
|
|
711
|
+
setInsightSearchQuery('');
|
|
712
|
+
loadInsights(insightCategoryFilter, 0, false);
|
|
646
713
|
}
|
|
647
|
-
},
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
}, insightsEnabled: insightsEnabled })) }), _jsx(MessageInput, { onSend: handleSendMessage, onStop: handleStopStreaming, disabled: false, isStreaming: isStreaming, conversationId: currentConversation?.id, onEnsureConversation: ensureConversation })] }), showInsights && showInsightsPanel && (_jsxs("div", { className: "w-80 bg-white dark:bg-gray-800 border-l border-gray-200 dark:border-gray-700 flex flex-col", children: [_jsxs("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700", children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: "Insights" }), _jsx("button", { onClick: () => setShowInsightsPanel(false), className: "p-1 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "w-5 h-5" }) })] }), currentConversation && (_jsxs("div", { className: "flex gap-2 mb-3", children: [_jsxs("button", { onClick: handleForceInsight, className: "flex-1 flex items-center justify-center gap-2 px-3 py-1.5 text-sm bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300 rounded-lg hover:bg-amber-200 dark:hover:bg-amber-800 transition-colors", title: "Manually add an insight", children: [_jsx(Sparkles, { className: "w-4 h-4" }), "Add"] }), _jsxs("button", { onClick: handleGenerateInsights, disabled: isLoadingInsights, className: "flex-1 flex items-center justify-center gap-2 px-3 py-1.5 text-sm bg-purple-100 dark:bg-purple-900 text-purple-700 dark:text-purple-300 rounded-lg hover:bg-purple-200 dark:hover:bg-purple-800 transition-colors disabled:opacity-50", children: [_jsx(Brain, { className: "w-4 h-4" }), "Generate"] })] })), insightStats && (_jsxs("div", { className: "mb-3", children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsxs("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [insightStats.total, " insights"] }), insightCategoryFilter && (_jsx("button", { onClick: () => handleCategoryFilter(null), className: "text-xs text-purple-600 dark:text-purple-400 hover:underline", children: "Clear filter" }))] }), _jsx("div", { className: "flex flex-wrap gap-1", children: Object.entries(insightStats.by_category || {}).map(([category, count]) => (_jsxs("button", { onClick: () => handleCategoryFilter(insightCategoryFilter === category ? null : category), className: `text-xs px-2 py-1 rounded-full transition-colors ${insightCategoryFilter === category
|
|
681
|
-
? category === 'preference'
|
|
682
|
-
? 'bg-blue-500 text-white'
|
|
683
|
-
: category === 'fact'
|
|
684
|
-
? 'bg-green-500 text-white'
|
|
685
|
-
: category === 'goal'
|
|
686
|
-
? 'bg-purple-500 text-white'
|
|
687
|
-
: category === 'context'
|
|
688
|
-
? 'bg-amber-500 text-white'
|
|
689
|
-
: 'bg-gray-500 text-white'
|
|
690
|
-
: category === 'preference'
|
|
691
|
-
? 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300 hover:bg-blue-200 dark:hover:bg-blue-800'
|
|
692
|
-
: category === 'fact'
|
|
693
|
-
? 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300 hover:bg-green-200 dark:hover:bg-green-800'
|
|
694
|
-
: category === 'goal'
|
|
695
|
-
? 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300 hover:bg-purple-200 dark:hover:bg-purple-800'
|
|
696
|
-
: category === 'context'
|
|
697
|
-
? 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300 hover:bg-amber-200 dark:hover:bg-amber-800'
|
|
698
|
-
: 'bg-gray-100 text-gray-700 dark:bg-gray-600 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-500'}`, children: [category, " (", count, ")"] }, category))) })] })), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "text", value: insightSearchQuery, onChange: (e) => setInsightSearchQuery(e.target.value), onKeyDown: (e) => {
|
|
699
|
-
if (e.key === 'Enter')
|
|
700
|
-
handleSearchInsights();
|
|
701
|
-
if (e.key === 'Escape') {
|
|
702
|
-
setInsightSearchQuery('');
|
|
703
|
-
loadInsights(insightCategoryFilter, 0, false);
|
|
704
|
-
}
|
|
705
|
-
}, placeholder: "Search insights...", className: "flex-1 px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white" }), _jsx("button", { onClick: handleSearchInsights, disabled: isLoadingInsights, className: "p-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors disabled:opacity-50", children: _jsx(Search, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4 space-y-3", onScroll: (e) => {
|
|
706
|
-
const target = e.target;
|
|
707
|
-
if (target.scrollHeight - target.scrollTop - target.clientHeight < 100) {
|
|
708
|
-
loadMoreInsights();
|
|
709
|
-
}
|
|
710
|
-
}, children: insights.length === 0 && !isLoadingInsights ? (_jsxs("div", { className: "text-center text-gray-500 dark:text-gray-400", children: [_jsx(Brain, { className: "w-8 h-8 mx-auto mb-2 text-gray-300 dark:text-gray-600" }), _jsx("p", { className: "text-sm", children: "No insights yet" }), _jsx("p", { className: "text-xs mt-1", children: "Generate insights from conversations" })] })) : (_jsxs(_Fragment, { children: [insights.map((result, index) => (_jsxs("div", { onClick: () => handleInsightClick(result), className: "p-3 bg-gray-50 dark:bg-gray-700 rounded-lg border border-gray-200 dark:border-gray-600 cursor-pointer hover:border-purple-300 dark:hover:border-purple-600 transition-colors", children: [_jsxs("div", { className: "flex items-start justify-between mb-2", children: [_jsx("button", { onClick: (e) => {
|
|
711
|
-
e.stopPropagation();
|
|
712
|
-
handleCategoryFilter(result.insight?.category || 'other');
|
|
713
|
-
}, className: `text-xs px-2 py-0.5 rounded-full cursor-pointer hover:opacity-80 ${result.insight?.category === 'preference'
|
|
714
|
-
? 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300'
|
|
715
|
-
: result.insight?.category === 'fact'
|
|
716
|
-
? 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300'
|
|
717
|
-
: result.insight?.category === 'goal'
|
|
718
|
-
? 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300'
|
|
719
|
-
: result.insight?.category === 'context'
|
|
720
|
-
? 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300'
|
|
721
|
-
: 'bg-gray-100 text-gray-700 dark:bg-gray-600 dark:text-gray-300'}`, children: result.insight?.category || 'other' }), result.score < 1 && (_jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: [(result.score * 100).toFixed(0), "% match"] }))] }), _jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none text-sm text-gray-900 dark:text-white break-words overflow-hidden", children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], components: {
|
|
722
|
-
a: ({ children, href }) => (_jsx("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: "text-purple-600 dark:text-purple-400 hover:underline break-all", onClick: (e) => e.stopPropagation(), children: children })),
|
|
723
|
-
p: ({ children }) => _jsx("p", { className: "mb-1 last:mb-0", children: children }),
|
|
724
|
-
}, children: result.insight?.content || '' }) }), result.insight?.createdAt && (_jsx("p", { className: "text-xs text-gray-400 dark:text-gray-500 mt-2", children: new Date(result.insight.createdAt).toLocaleDateString() }))] }, result.insight?.id || index))), isLoadingInsights && (_jsx("div", { className: "text-center text-gray-500 dark:text-gray-400 py-2", children: "Loading..." })), hasMoreInsights && !isLoadingInsights && (_jsx("button", { onClick: loadMoreInsights, className: "w-full py-2 text-sm text-purple-600 dark:text-purple-400 hover:underline", children: "Load more..." }))] })) })] })), selectedInsight && (_jsx(InsightEditModal, { insight: selectedInsight, onClose: () => setSelectedInsight(null), onSave: handleSaveInsight, onDelete: handleDeleteInsight })), showAgentSelector && showAgentPanel && (_jsx(AgentSelectionPanel, { selectedAgents: selectedAgents, onAgentsChange: setSelectedAgents, availableAgents: availableAgents.filter(a => a.is_active).map(a => ({
|
|
725
|
-
id: a.id,
|
|
726
|
-
name: a.display_name || a.name,
|
|
727
|
-
description: a.description || '',
|
|
728
|
-
enabled: a.is_active,
|
|
729
|
-
capabilities: [],
|
|
730
|
-
})), onClose: () => setShowAgentPanel(false) })), showTasksPanel && (_jsxs("div", { className: "w-80 bg-white dark:bg-gray-800 border-l border-gray-200 dark:border-gray-700 flex flex-col", children: [_jsxs("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700", children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: "Tasks" }), _jsx("button", { onClick: () => setShowTasksPanel(false), className: "p-1 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "w-5 h-5" }) })] }), _jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Manage background tasks and scheduled operations." })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4", children: _jsxs("div", { className: "text-center text-gray-500 dark:text-gray-400", children: [_jsx(ListTodo, { className: "w-12 h-12 mx-auto mb-3 text-gray-300 dark:text-gray-600" }), _jsx("p", { className: "text-sm font-medium", children: "Coming Soon" }), _jsx("p", { className: "text-xs mt-2", children: "Agent tasks feature is under development. Soon you'll be able to:" }), _jsxs("ul", { className: "text-xs mt-3 space-y-1 text-left max-w-[200px] mx-auto", children: [_jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-1.5 h-1.5 bg-amber-500 rounded-full" }), "Schedule recurring tasks"] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-1.5 h-1.5 bg-amber-500 rounded-full" }), "Create background research jobs"] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-1.5 h-1.5 bg-amber-500 rounded-full" }), "Set up automated reports"] })] })] }) })] }))] }));
|
|
714
|
+
}, placeholder: "Search insights...", className: "flex-1 px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white" }), _jsx("button", { onClick: handleSearchInsights, disabled: isLoadingInsights, className: "p-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors disabled:opacity-50", children: _jsx(Search, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4 space-y-3", onScroll: (e) => {
|
|
715
|
+
const target = e.target;
|
|
716
|
+
if (target.scrollHeight - target.scrollTop - target.clientHeight < 100) {
|
|
717
|
+
loadMoreInsights();
|
|
718
|
+
}
|
|
719
|
+
}, children: insights.length === 0 && !isLoadingInsights ? (_jsxs("div", { className: "text-center text-gray-500 dark:text-gray-400", children: [_jsx(Brain, { className: "w-8 h-8 mx-auto mb-2 text-gray-300 dark:text-gray-600" }), _jsx("p", { className: "text-sm", children: "No insights yet" }), _jsx("p", { className: "text-xs mt-1", children: "Generate insights from conversations" })] })) : (_jsxs(_Fragment, { children: [insights.map((result, index) => (_jsxs("div", { onClick: () => handleInsightClick(result), className: "p-3 bg-gray-50 dark:bg-gray-700 rounded-lg border border-gray-200 dark:border-gray-600 cursor-pointer hover:border-purple-300 dark:hover:border-purple-600 transition-colors", children: [_jsxs("div", { className: "flex items-start justify-between mb-2", children: [_jsx("button", { onClick: (e) => {
|
|
720
|
+
e.stopPropagation();
|
|
721
|
+
handleCategoryFilter(result.insight?.category || 'other');
|
|
722
|
+
}, className: `text-xs px-2 py-0.5 rounded-full cursor-pointer hover:opacity-80 ${result.insight?.category === 'preference'
|
|
723
|
+
? 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300'
|
|
724
|
+
: result.insight?.category === 'fact'
|
|
725
|
+
? 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300'
|
|
726
|
+
: result.insight?.category === 'goal'
|
|
727
|
+
? 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300'
|
|
728
|
+
: result.insight?.category === 'context'
|
|
729
|
+
? 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300'
|
|
730
|
+
: 'bg-gray-100 text-gray-700 dark:bg-gray-600 dark:text-gray-300'}`, children: result.insight?.category || 'other' }), result.score < 1 && (_jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: [(result.score * 100).toFixed(0), "% match"] }))] }), _jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none text-sm text-gray-900 dark:text-white break-words overflow-hidden", children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], components: {
|
|
731
|
+
a: ({ children, href }) => (_jsx("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: "text-purple-600 dark:text-purple-400 hover:underline break-all", onClick: (e) => e.stopPropagation(), children: children })),
|
|
732
|
+
p: ({ children }) => _jsx("p", { className: "mb-1 last:mb-0", children: children }),
|
|
733
|
+
}, children: result.insight?.content || '' }) }), result.insight?.createdAt && (_jsx("p", { className: "text-xs text-gray-400 dark:text-gray-500 mt-2", children: new Date(result.insight.createdAt).toLocaleDateString() }))] }, result.insight?.id || index))), isLoadingInsights && (_jsx("div", { className: "text-center text-gray-500 dark:text-gray-400 py-2", children: "Loading..." })), hasMoreInsights && !isLoadingInsights && (_jsx("button", { onClick: loadMoreInsights, className: "w-full py-2 text-sm text-purple-600 dark:text-purple-400 hover:underline", children: "Load more..." }))] })) })] })), selectedInsight && (_jsx(InsightEditModal, { insight: selectedInsight, onClose: () => setSelectedInsight(null), onSave: handleSaveInsight, onDelete: handleDeleteInsight })), showAgentSelector && showAgentPanel && (_jsx(AgentSelectionPanel, { selectedAgents: selectedAgents, onAgentsChange: setSelectedAgents, availableAgents: availableAgents.filter(a => a.is_active).map(a => ({
|
|
734
|
+
id: a.id,
|
|
735
|
+
name: a.display_name || a.name,
|
|
736
|
+
description: a.description || '',
|
|
737
|
+
enabled: a.is_active,
|
|
738
|
+
capabilities: [],
|
|
739
|
+
})), onClose: () => setShowAgentPanel(false) })), showTasksPanel && (_jsxs("div", { className: "w-80 bg-white dark:bg-gray-800 border-l border-gray-200 dark:border-gray-700 flex flex-col", children: [_jsxs("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700", children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: "Tasks" }), _jsx("button", { onClick: () => setShowTasksPanel(false), className: "p-1 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "w-5 h-5" }) })] }), _jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Manage background tasks and scheduled operations." })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4", children: _jsxs("div", { className: "text-center text-gray-500 dark:text-gray-400", children: [_jsx(ListTodo, { className: "w-12 h-12 mx-auto mb-3 text-gray-300 dark:text-gray-600" }), _jsx("p", { className: "text-sm font-medium", children: "Coming Soon" }), _jsx("p", { className: "text-xs mt-2", children: "Agent tasks feature is under development. Soon you'll be able to:" }), _jsxs("ul", { className: "text-xs mt-3 space-y-1 text-left max-w-[200px] mx-auto", children: [_jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-1.5 h-1.5 bg-amber-500 rounded-full" }), "Schedule recurring tasks"] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-1.5 h-1.5 bg-amber-500 rounded-full" }), "Create background research jobs"] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-1.5 h-1.5 bg-amber-500 rounded-full" }), "Set up automated reports"] })] })] }) })] })), _jsx(DocumentCitationPanel, {})] }) }));
|
|
740
|
+
}
|
|
741
|
+
/** Reads CitationContext and renders DocumentPreviewPanel when a citation is active. */
|
|
742
|
+
function DocumentCitationPanel() {
|
|
743
|
+
const citation = useCitation();
|
|
744
|
+
if (!citation?.activeCitation)
|
|
745
|
+
return null;
|
|
746
|
+
return (_jsx(DocumentPreviewPanel, { fileId: citation.activeCitation.fileId, page: citation.activeCitation.page, onClose: citation.closeCitation }));
|
|
731
747
|
}
|
|
732
748
|
//# sourceMappingURL=ChatContainer.js.map
|