@devicai/ui 0.10.2 → 0.10.4
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/cjs/api/client.js +6 -1
- package/dist/cjs/api/client.js.map +1 -1
- package/dist/cjs/components/ChatDrawer/ChatDrawer.js +2 -0
- package/dist/cjs/components/ChatDrawer/ChatDrawer.js.map +1 -1
- package/dist/cjs/components/ChatDrawer/HandoffSubagentWidget.js +9 -6
- package/dist/cjs/components/ChatDrawer/HandoffSubagentWidget.js.map +1 -1
- package/dist/cjs/components/ThreadStateTag/ThreadStateTag.js +1 -1
- package/dist/cjs/components/ThreadStateTag/ThreadStateTag.js.map +1 -1
- package/dist/cjs/hooks/useDevicChat.js +89 -27
- package/dist/cjs/hooks/useDevicChat.js.map +1 -1
- package/dist/cjs/hooks/usePolling.js +16 -12
- package/dist/cjs/hooks/usePolling.js.map +1 -1
- package/dist/cjs/provider/DevicProvider.js +3 -2
- package/dist/cjs/provider/DevicProvider.js.map +1 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/logger.js +17 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/esm/api/client.js +6 -1
- package/dist/esm/api/client.js.map +1 -1
- package/dist/esm/components/ChatDrawer/ChatDrawer.js +2 -0
- package/dist/esm/components/ChatDrawer/ChatDrawer.js.map +1 -1
- package/dist/esm/components/ChatDrawer/ChatDrawer.types.d.ts +6 -0
- package/dist/esm/components/ChatDrawer/HandoffSubagentWidget.js +10 -7
- package/dist/esm/components/ChatDrawer/HandoffSubagentWidget.js.map +1 -1
- package/dist/esm/components/ThreadStateTag/ThreadStateTag.js +1 -1
- package/dist/esm/components/ThreadStateTag/ThreadStateTag.js.map +1 -1
- package/dist/esm/hooks/useDevicChat.d.ts +6 -0
- package/dist/esm/hooks/useDevicChat.js +90 -28
- package/dist/esm/hooks/useDevicChat.js.map +1 -1
- package/dist/esm/hooks/usePolling.d.ts +5 -0
- package/dist/esm/hooks/usePolling.js +17 -13
- package/dist/esm/hooks/usePolling.js.map +1 -1
- package/dist/esm/provider/DevicProvider.d.ts +1 -1
- package/dist/esm/provider/DevicProvider.js +3 -2
- package/dist/esm/provider/DevicProvider.js.map +1 -1
- package/dist/esm/provider/types.d.ts +9 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/logger.d.ts +10 -0
- package/dist/esm/utils/logger.js +15 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatDrawer.js","sources":["../../../../src/components/ChatDrawer/ChatDrawer.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, useRef, forwardRef, useImperativeHandle } from 'react';\nimport { useDevicChat } from '../../hooks/useDevicChat';\nimport { useOptionalDevicContext } from '../../provider';\nimport { DevicApiClient } from '../../api/client';\nimport { ChatMessages } from './ChatMessages';\nimport { ChatInput } from './ChatInput';\nimport { ConversationSelector } from './ConversationSelector';\nimport { ChatDrawerErrorBoundary } from './ErrorBoundary';\nimport type { ChatDrawerProps, ChatDrawerOptions, ChatDrawerHandle } from './ChatDrawer.types';\nimport './styles.css';\n\nconst DEFAULT_OPTIONS: Required<ChatDrawerOptions> = {\n position: 'right',\n width: '100%',\n defaultOpen: false,\n color: '#1890ff',\n welcomeMessage: '',\n suggestedMessages: [],\n enableFileUploads: false,\n allowedFileTypes: { images: true, documents: true },\n maxFileSize: 10 * 1024 * 1024,\n inputPlaceholder: 'Type a message...',\n title: 'Chat',\n showAvatar: false,\n showToolTimeline: true,\n zIndex: 1000,\n borderRadius: 0,\n resizable: false,\n minWidth: 300,\n maxWidth: 800,\n style: {},\n fontFamily: undefined as any,\n backgroundColor: undefined as any,\n textColor: undefined as any,\n secondaryBackgroundColor: undefined as any,\n borderColor: undefined as any,\n userBubbleColor: undefined as any,\n userBubbleTextColor: undefined as any,\n assistantBubbleColor: undefined as any,\n assistantBubbleTextColor: undefined as any,\n sendButtonColor: undefined as any,\n loadingIndicator: undefined as any,\n sendButtonContent: undefined as any,\n toolRenderers: undefined as any,\n toolIcons: undefined as any,\n showFeedback: true,\n handoffWidgetRenderer: undefined as any,\n toolGroups: undefined as any,\n stopButtonContent: undefined as any,\n};\n\n/**\n * Chat drawer component for Devic assistants\n *\n * @example\n * ```tsx\n * <ChatDrawer\n * ref={drawerRef}\n * assistantId=\"my-assistant\"\n * options={{\n * position: 'right',\n * width: 400,\n * welcomeMessage: 'Hello! How can I help you?',\n * suggestedMessages: ['Help me with...', 'Tell me about...'],\n * }}\n * modelInterfaceTools={[\n * {\n * toolName: 'get_user_location',\n * schema: { ... },\n * callback: async () => ({ lat: 40.7, lng: -74.0 })\n * }\n * ]}\n * onMessageReceived={(msg) => console.log('Received:', msg)}\n * />\n * ```\n */\nexport const ChatDrawer = forwardRef<ChatDrawerHandle, ChatDrawerProps>(\n function ChatDrawer(props, ref) {\n return (\n <ChatDrawerErrorBoundary>\n <ChatDrawerInner {...props} forwardedRef={ref} />\n </ChatDrawerErrorBoundary>\n );\n }\n);\n\ninterface ChatDrawerInnerProps extends ChatDrawerProps {\n forwardedRef?: React.Ref<ChatDrawerHandle>;\n}\n\nfunction ChatDrawerInner({\n assistantId,\n chatUid: initialChatUid,\n options = {},\n enabledTools,\n modelInterfaceTools,\n tenantId,\n tenantMetadata,\n apiKey,\n baseUrl,\n onMessageSent,\n onMessageReceived,\n onToolCall,\n onError,\n onChatCreated,\n onOpen,\n onClose,\n isOpen: controlledIsOpen,\n className,\n mode = 'drawer',\n onConversationChange,\n forwardedRef,\n}: ChatDrawerInnerProps): JSX.Element {\n // Merge options with defaults\n const mergedOptions = useMemo(\n () => ({ ...DEFAULT_OPTIONS, ...options }),\n [options]\n );\n\n // Drawer open state (can be controlled or uncontrolled; inline mode is always open)\n const [internalIsOpen, setInternalIsOpen] = useState(mergedOptions.defaultOpen);\n const isInline = mode === 'inline';\n const isOpen = isInline ? true : (controlledIsOpen ?? internalIsOpen);\n\n // Use chat hook\n const chat = useDevicChat({\n assistantId,\n chatUid: initialChatUid,\n apiKey,\n baseUrl,\n tenantId,\n tenantMetadata,\n enabledTools,\n modelInterfaceTools,\n onMessageSent,\n onMessageReceived,\n onToolCall,\n onError,\n onChatCreated,\n });\n\n // Fetch assistant avatar when showAvatar is enabled\n const context = useOptionalDevicContext();\n const resolvedApiKey = apiKey || context?.apiKey;\n const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';\n const [avatarUrl, setAvatarUrl] = useState<string | null>(null);\n const avatarFetchedRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!mergedOptions.showAvatar || !resolvedApiKey || avatarFetchedRef.current === assistantId) return;\n avatarFetchedRef.current = assistantId;\n const client = new DevicApiClient({ apiKey: resolvedApiKey, baseUrl: resolvedBaseUrl });\n client.getAssistant(assistantId).then((a) => {\n if (a.imgUrl) setAvatarUrl(a.imgUrl);\n }).catch(() => {});\n }, [mergedOptions.showAvatar, assistantId, resolvedApiKey, resolvedBaseUrl]);\n\n // Handle open/close\n const handleOpen = useCallback(() => {\n setInternalIsOpen(true);\n onOpen?.();\n }, [onOpen]);\n\n const handleClose = useCallback(() => {\n setInternalIsOpen(false);\n onClose?.();\n }, [onClose]);\n\n const handleToggle = useCallback(() => {\n setInternalIsOpen((prev) => !prev);\n }, []);\n\n // Expose handle for programmatic control\n useImperativeHandle(forwardedRef, () => ({\n open: handleOpen,\n close: handleClose,\n toggle: handleToggle,\n setChatUid: (chatUid: string) => {\n chat.loadChat(chatUid);\n },\n sendMessage: (message: string) => {\n chat.sendMessage(message);\n },\n }), [handleOpen, handleClose, handleToggle, chat]);\n\n // Handle send message\n const handleSend = useCallback(\n (message: string, files?: any[]) => {\n chat.sendMessage(message, { files });\n },\n [chat]\n );\n\n // Handle conversation selection\n const handleConversationSelect = useCallback(\n (chatUid: string) => {\n chat.loadChat(chatUid);\n onConversationChange?.(chatUid);\n },\n [chat, onConversationChange]\n );\n\n const handleNewChat = useCallback(() => {\n chat.clearChat();\n }, [chat]);\n\n // Handle suggested message click\n const handleSuggestedClick = useCallback(\n (message: string) => {\n chat.sendMessage(message);\n },\n [chat]\n );\n\n // Feedback state\n const [feedbackMap, setFeedbackMap] = useState<Map<string, 'positive' | 'negative'>>(new Map());\n const feedbackClientRef = useRef<DevicApiClient | null>(null);\n\n // Initialize feedback client\n useEffect(() => {\n if (resolvedApiKey && !feedbackClientRef.current) {\n feedbackClientRef.current = new DevicApiClient({\n apiKey: resolvedApiKey,\n baseUrl: resolvedBaseUrl,\n });\n }\n }, [resolvedApiKey, resolvedBaseUrl]);\n\n // Load existing feedback when chat changes\n useEffect(() => {\n if (!chat.chatUid || !feedbackClientRef.current || !mergedOptions.showFeedback) return;\n\n feedbackClientRef.current.getChatFeedback(assistantId, chat.chatUid)\n .then((entries) => {\n const newMap = new Map<string, 'positive' | 'negative'>();\n for (const entry of entries) {\n if (entry.feedback !== undefined) {\n newMap.set(entry.requestId, entry.feedback ? 'positive' : 'negative');\n }\n }\n setFeedbackMap(newMap);\n })\n .catch(() => {\n // Silently ignore feedback loading errors\n });\n }, [chat.chatUid, assistantId, mergedOptions.showFeedback]);\n\n // Handle feedback submission\n const handleFeedback = useCallback(\n async (messageId: string, positive: boolean, comment?: string) => {\n if (!chat.chatUid || !feedbackClientRef.current) return;\n\n try {\n await feedbackClientRef.current.submitChatFeedback(assistantId, chat.chatUid, {\n messageId,\n feedback: positive,\n feedbackComment: comment,\n });\n\n setFeedbackMap((prev) => {\n const newMap = new Map(prev);\n newMap.set(messageId, positive ? 'positive' : 'negative');\n return newMap;\n });\n } catch (err) {\n console.error('Failed to submit feedback:', err);\n throw err;\n }\n },\n [chat.chatUid, assistantId]\n );\n\n // Apply CSS variables for theming on the drawer element itself\n // (must target the component root so they override the defaults defined on .devic-chat-drawer)\n const drawerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const el = drawerRef.current;\n if (!el) return;\n const vars: [string, string | undefined][] = [\n ['--devic-primary', mergedOptions.color !== DEFAULT_OPTIONS.color ? mergedOptions.color : undefined],\n ['--devic-font-family', mergedOptions.fontFamily],\n ['--devic-bg', mergedOptions.backgroundColor],\n ['--devic-text', mergedOptions.textColor],\n ['--devic-bg-secondary', mergedOptions.secondaryBackgroundColor],\n ['--devic-border', mergedOptions.borderColor],\n ['--devic-user-bubble', mergedOptions.userBubbleColor],\n ['--devic-user-bubble-text', mergedOptions.userBubbleTextColor],\n ['--devic-assistant-bubble', mergedOptions.assistantBubbleColor],\n ['--devic-assistant-bubble-text', mergedOptions.assistantBubbleTextColor],\n ['--devic-send-btn', mergedOptions.sendButtonColor],\n ];\n for (const [name, value] of vars) {\n if (value) {\n el.style.setProperty(name, value);\n } else {\n el.style.removeProperty(name);\n }\n }\n }, [mergedOptions.color, mergedOptions.fontFamily, mergedOptions.backgroundColor, mergedOptions.textColor, mergedOptions.secondaryBackgroundColor, mergedOptions.borderColor, mergedOptions.userBubbleColor, mergedOptions.userBubbleTextColor, mergedOptions.assistantBubbleColor, mergedOptions.assistantBubbleTextColor, mergedOptions.sendButtonColor]);\n\n // Resizable drawer\n const [resizedWidth, setResizedWidth] = useState<number | null>(null);\n\n const handleResizeStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const startX = e.clientX;\n const startWidth = drawerRef.current?.offsetWidth ?? 0;\n const isLeft = mergedOptions.position === 'left';\n\n const onMove = (ev: MouseEvent) => {\n const delta = ev.clientX - startX;\n const newWidth = startWidth + (isLeft ? delta : -delta);\n const clamped = Math.min(\n mergedOptions.maxWidth,\n Math.max(mergedOptions.minWidth, newWidth)\n );\n setResizedWidth(clamped);\n };\n\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n },\n [mergedOptions.position, mergedOptions.minWidth, mergedOptions.maxWidth]\n );\n\n // Build style object\n const baseWidth = resizedWidth\n ? `${resizedWidth}px`\n : typeof mergedOptions.width === 'number'\n ? `${mergedOptions.width}px`\n : mergedOptions.width;\n\n const drawerStyle = useMemo(\n () => ({\n width: baseWidth,\n zIndex: mergedOptions.zIndex,\n borderRadius: typeof mergedOptions.borderRadius === 'number'\n ? `${mergedOptions.borderRadius}px`\n : mergedOptions.borderRadius,\n ...mergedOptions.style,\n }),\n [baseWidth, mergedOptions.zIndex, mergedOptions.borderRadius, mergedOptions.style]\n );\n\n const overlayStyle = useMemo(\n () => ({\n zIndex: mergedOptions.zIndex - 1,\n }),\n [mergedOptions.zIndex]\n );\n\n const triggerStyle = useMemo(\n () => ({\n zIndex: mergedOptions.zIndex - 1,\n [mergedOptions.position]: 20,\n bottom: 20,\n }),\n [mergedOptions.zIndex, mergedOptions.position]\n );\n\n return (\n <>\n {/* Overlay (drawer mode only) */}\n {!isInline && (\n <div\n className=\"devic-drawer-overlay\"\n data-open={isOpen}\n style={overlayStyle}\n onClick={handleClose}\n />\n )}\n\n {/* Drawer */}\n <div\n ref={drawerRef}\n className={`devic-chat-drawer ${className || ''}`}\n data-position={mergedOptions.position}\n data-open={isOpen}\n data-mode={mode}\n style={drawerStyle}\n >\n {/* Resize handle */}\n {mergedOptions.resizable && (\n <div\n className=\"devic-resize-handle\"\n data-position={mergedOptions.position}\n onMouseDown={handleResizeStart}\n />\n )}\n\n {/* Header */}\n <div className=\"devic-drawer-header\">\n {avatarUrl && (\n <img\n className=\"devic-drawer-avatar\"\n src={avatarUrl}\n alt=\"\"\n aria-hidden=\"true\"\n />\n )}\n <h2 className=\"devic-drawer-title\">{mergedOptions.title}</h2>\n <ConversationSelector\n assistantId={assistantId}\n currentChatUid={chat.chatUid}\n onSelect={handleConversationSelect}\n onNewChat={handleNewChat}\n apiKey={apiKey}\n baseUrl={baseUrl}\n tenantId={tenantId}\n />\n <div className=\"devic-drawer-header-actions\">\n <button\n className=\"devic-new-chat-btn\"\n onClick={handleNewChat}\n type=\"button\"\n aria-label=\"New chat\"\n title=\"New chat\"\n >\n <PlusIcon />\n </button>\n {!isInline && (\n <button\n className=\"devic-drawer-close\"\n onClick={handleClose}\n type=\"button\"\n aria-label=\"Close chat\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n\n {/* Error display */}\n {chat.error && (\n <div className=\"devic-error\">\n {chat.error.message}\n </div>\n )}\n\n {/* Messages */}\n <ChatMessages\n messages={chat.messages}\n allMessages={chat.messages}\n isLoading={chat.isLoading}\n welcomeMessage={mergedOptions.welcomeMessage}\n suggestedMessages={mergedOptions.suggestedMessages}\n onSuggestedClick={handleSuggestedClick}\n showToolTimeline={mergedOptions.showToolTimeline}\n toolRenderers={mergedOptions.toolRenderers}\n toolIcons={mergedOptions.toolIcons}\n loadingIndicator={mergedOptions.loadingIndicator}\n showFeedback={mergedOptions.showFeedback}\n feedbackMap={feedbackMap}\n onFeedback={handleFeedback}\n handedOffSubThreadId={chat.handedOffSubThreadId || undefined}\n onHandoffCompleted={chat.onHandoffCompleted}\n handoffWidgetRenderer={mergedOptions.handoffWidgetRenderer}\n toolGroups={mergedOptions.toolGroups}\n apiKey={resolvedApiKey}\n baseUrl={resolvedBaseUrl}\n />\n\n {/* Input */}\n <ChatInput\n onSend={handleSend}\n disabled={chat.isLoading || chat.handedOff}\n placeholder={mergedOptions.inputPlaceholder}\n enableFileUploads={mergedOptions.enableFileUploads}\n allowedFileTypes={mergedOptions.allowedFileTypes}\n maxFileSize={mergedOptions.maxFileSize}\n sendButtonContent={mergedOptions.sendButtonContent}\n disabledMessage={chat.handedOff ? 'Waiting for subagent to complete' : undefined}\n isProcessing={chat.isLoading && !chat.handedOff}\n onStop={chat.stopChat}\n stopButtonContent={mergedOptions.stopButtonContent}\n />\n </div>\n\n {/* Trigger button (drawer mode only, when closed) */}\n {!isInline && !isOpen && (\n <button\n className=\"devic-trigger\"\n onClick={handleOpen}\n style={triggerStyle}\n type=\"button\"\n aria-label=\"Open chat\"\n >\n <ChatIcon />\n </button>\n )}\n </>\n );\n}\n\n/**\n * Close icon\n */\nfunction CloseIcon(): JSX.Element {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n/**\n * Plus icon for new chat button\n */\nfunction PlusIcon(): JSX.Element {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\n/**\n * Chat icon for trigger button\n */\nfunction ChatIcon(): JSX.Element {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\" />\n </svg>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatDrawer.js","sources":["../../../../src/components/ChatDrawer/ChatDrawer.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, useRef, forwardRef, useImperativeHandle } from 'react';\nimport { useDevicChat } from '../../hooks/useDevicChat';\nimport { useOptionalDevicContext } from '../../provider';\nimport { DevicApiClient } from '../../api/client';\nimport { ChatMessages } from './ChatMessages';\nimport { ChatInput } from './ChatInput';\nimport { ConversationSelector } from './ConversationSelector';\nimport { ChatDrawerErrorBoundary } from './ErrorBoundary';\nimport type { ChatDrawerProps, ChatDrawerOptions, ChatDrawerHandle } from './ChatDrawer.types';\nimport './styles.css';\n\nconst DEFAULT_OPTIONS: Required<ChatDrawerOptions> = {\n position: 'right',\n width: '100%',\n defaultOpen: false,\n color: '#1890ff',\n welcomeMessage: '',\n suggestedMessages: [],\n enableFileUploads: false,\n allowedFileTypes: { images: true, documents: true },\n maxFileSize: 10 * 1024 * 1024,\n inputPlaceholder: 'Type a message...',\n title: 'Chat',\n showAvatar: false,\n showToolTimeline: true,\n zIndex: 1000,\n borderRadius: 0,\n resizable: false,\n minWidth: 300,\n maxWidth: 800,\n style: {},\n fontFamily: undefined as any,\n backgroundColor: undefined as any,\n textColor: undefined as any,\n secondaryBackgroundColor: undefined as any,\n borderColor: undefined as any,\n userBubbleColor: undefined as any,\n userBubbleTextColor: undefined as any,\n assistantBubbleColor: undefined as any,\n assistantBubbleTextColor: undefined as any,\n sendButtonColor: undefined as any,\n loadingIndicator: undefined as any,\n sendButtonContent: undefined as any,\n toolRenderers: undefined as any,\n toolIcons: undefined as any,\n showFeedback: true,\n handoffWidgetRenderer: undefined as any,\n toolGroups: undefined as any,\n stopButtonContent: undefined as any,\n debug: false,\n};\n\n/**\n * Chat drawer component for Devic assistants\n *\n * @example\n * ```tsx\n * <ChatDrawer\n * ref={drawerRef}\n * assistantId=\"my-assistant\"\n * options={{\n * position: 'right',\n * width: 400,\n * welcomeMessage: 'Hello! How can I help you?',\n * suggestedMessages: ['Help me with...', 'Tell me about...'],\n * }}\n * modelInterfaceTools={[\n * {\n * toolName: 'get_user_location',\n * schema: { ... },\n * callback: async () => ({ lat: 40.7, lng: -74.0 })\n * }\n * ]}\n * onMessageReceived={(msg) => console.log('Received:', msg)}\n * />\n * ```\n */\nexport const ChatDrawer = forwardRef<ChatDrawerHandle, ChatDrawerProps>(\n function ChatDrawer(props, ref) {\n return (\n <ChatDrawerErrorBoundary>\n <ChatDrawerInner {...props} forwardedRef={ref} />\n </ChatDrawerErrorBoundary>\n );\n }\n);\n\ninterface ChatDrawerInnerProps extends ChatDrawerProps {\n forwardedRef?: React.Ref<ChatDrawerHandle>;\n}\n\nfunction ChatDrawerInner({\n assistantId,\n chatUid: initialChatUid,\n options = {},\n enabledTools,\n modelInterfaceTools,\n tenantId,\n tenantMetadata,\n apiKey,\n baseUrl,\n onMessageSent,\n onMessageReceived,\n onToolCall,\n onError,\n onChatCreated,\n onOpen,\n onClose,\n isOpen: controlledIsOpen,\n className,\n mode = 'drawer',\n onConversationChange,\n forwardedRef,\n}: ChatDrawerInnerProps): JSX.Element {\n // Merge options with defaults\n const mergedOptions = useMemo(\n () => ({ ...DEFAULT_OPTIONS, ...options }),\n [options]\n );\n\n // Drawer open state (can be controlled or uncontrolled; inline mode is always open)\n const [internalIsOpen, setInternalIsOpen] = useState(mergedOptions.defaultOpen);\n const isInline = mode === 'inline';\n const isOpen = isInline ? true : (controlledIsOpen ?? internalIsOpen);\n\n // Use chat hook\n const chat = useDevicChat({\n assistantId,\n chatUid: initialChatUid,\n apiKey,\n baseUrl,\n tenantId,\n tenantMetadata,\n enabledTools,\n modelInterfaceTools,\n onMessageSent,\n onMessageReceived,\n onToolCall,\n onError,\n onChatCreated,\n debug: mergedOptions.debug,\n });\n\n // Fetch assistant avatar when showAvatar is enabled\n const context = useOptionalDevicContext();\n const resolvedApiKey = apiKey || context?.apiKey;\n const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';\n const [avatarUrl, setAvatarUrl] = useState<string | null>(null);\n const avatarFetchedRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!mergedOptions.showAvatar || !resolvedApiKey || avatarFetchedRef.current === assistantId) return;\n avatarFetchedRef.current = assistantId;\n const client = new DevicApiClient({ apiKey: resolvedApiKey, baseUrl: resolvedBaseUrl });\n client.getAssistant(assistantId).then((a) => {\n if (a.imgUrl) setAvatarUrl(a.imgUrl);\n }).catch(() => {});\n }, [mergedOptions.showAvatar, assistantId, resolvedApiKey, resolvedBaseUrl]);\n\n // Handle open/close\n const handleOpen = useCallback(() => {\n setInternalIsOpen(true);\n onOpen?.();\n }, [onOpen]);\n\n const handleClose = useCallback(() => {\n setInternalIsOpen(false);\n onClose?.();\n }, [onClose]);\n\n const handleToggle = useCallback(() => {\n setInternalIsOpen((prev) => !prev);\n }, []);\n\n // Expose handle for programmatic control\n useImperativeHandle(forwardedRef, () => ({\n open: handleOpen,\n close: handleClose,\n toggle: handleToggle,\n setChatUid: (chatUid: string) => {\n chat.loadChat(chatUid);\n },\n sendMessage: (message: string) => {\n chat.sendMessage(message);\n },\n }), [handleOpen, handleClose, handleToggle, chat]);\n\n // Handle send message\n const handleSend = useCallback(\n (message: string, files?: any[]) => {\n chat.sendMessage(message, { files });\n },\n [chat]\n );\n\n // Handle conversation selection\n const handleConversationSelect = useCallback(\n (chatUid: string) => {\n chat.loadChat(chatUid);\n onConversationChange?.(chatUid);\n },\n [chat, onConversationChange]\n );\n\n const handleNewChat = useCallback(() => {\n chat.clearChat();\n }, [chat]);\n\n // Handle suggested message click\n const handleSuggestedClick = useCallback(\n (message: string) => {\n chat.sendMessage(message);\n },\n [chat]\n );\n\n // Feedback state\n const [feedbackMap, setFeedbackMap] = useState<Map<string, 'positive' | 'negative'>>(new Map());\n const feedbackClientRef = useRef<DevicApiClient | null>(null);\n\n // Initialize feedback client\n useEffect(() => {\n if (resolvedApiKey && !feedbackClientRef.current) {\n feedbackClientRef.current = new DevicApiClient({\n apiKey: resolvedApiKey,\n baseUrl: resolvedBaseUrl,\n });\n }\n }, [resolvedApiKey, resolvedBaseUrl]);\n\n // Load existing feedback when chat changes\n useEffect(() => {\n if (!chat.chatUid || !feedbackClientRef.current || !mergedOptions.showFeedback) return;\n\n feedbackClientRef.current.getChatFeedback(assistantId, chat.chatUid)\n .then((entries) => {\n const newMap = new Map<string, 'positive' | 'negative'>();\n for (const entry of entries) {\n if (entry.feedback !== undefined) {\n newMap.set(entry.requestId, entry.feedback ? 'positive' : 'negative');\n }\n }\n setFeedbackMap(newMap);\n })\n .catch(() => {\n // Silently ignore feedback loading errors\n });\n }, [chat.chatUid, assistantId, mergedOptions.showFeedback]);\n\n // Handle feedback submission\n const handleFeedback = useCallback(\n async (messageId: string, positive: boolean, comment?: string) => {\n if (!chat.chatUid || !feedbackClientRef.current) return;\n\n try {\n await feedbackClientRef.current.submitChatFeedback(assistantId, chat.chatUid, {\n messageId,\n feedback: positive,\n feedbackComment: comment,\n });\n\n setFeedbackMap((prev) => {\n const newMap = new Map(prev);\n newMap.set(messageId, positive ? 'positive' : 'negative');\n return newMap;\n });\n } catch (err) {\n console.error('Failed to submit feedback:', err);\n throw err;\n }\n },\n [chat.chatUid, assistantId]\n );\n\n // Apply CSS variables for theming on the drawer element itself\n // (must target the component root so they override the defaults defined on .devic-chat-drawer)\n const drawerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const el = drawerRef.current;\n if (!el) return;\n const vars: [string, string | undefined][] = [\n ['--devic-primary', mergedOptions.color !== DEFAULT_OPTIONS.color ? mergedOptions.color : undefined],\n ['--devic-font-family', mergedOptions.fontFamily],\n ['--devic-bg', mergedOptions.backgroundColor],\n ['--devic-text', mergedOptions.textColor],\n ['--devic-bg-secondary', mergedOptions.secondaryBackgroundColor],\n ['--devic-border', mergedOptions.borderColor],\n ['--devic-user-bubble', mergedOptions.userBubbleColor],\n ['--devic-user-bubble-text', mergedOptions.userBubbleTextColor],\n ['--devic-assistant-bubble', mergedOptions.assistantBubbleColor],\n ['--devic-assistant-bubble-text', mergedOptions.assistantBubbleTextColor],\n ['--devic-send-btn', mergedOptions.sendButtonColor],\n ];\n for (const [name, value] of vars) {\n if (value) {\n el.style.setProperty(name, value);\n } else {\n el.style.removeProperty(name);\n }\n }\n }, [mergedOptions.color, mergedOptions.fontFamily, mergedOptions.backgroundColor, mergedOptions.textColor, mergedOptions.secondaryBackgroundColor, mergedOptions.borderColor, mergedOptions.userBubbleColor, mergedOptions.userBubbleTextColor, mergedOptions.assistantBubbleColor, mergedOptions.assistantBubbleTextColor, mergedOptions.sendButtonColor]);\n\n // Resizable drawer\n const [resizedWidth, setResizedWidth] = useState<number | null>(null);\n\n const handleResizeStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const startX = e.clientX;\n const startWidth = drawerRef.current?.offsetWidth ?? 0;\n const isLeft = mergedOptions.position === 'left';\n\n const onMove = (ev: MouseEvent) => {\n const delta = ev.clientX - startX;\n const newWidth = startWidth + (isLeft ? delta : -delta);\n const clamped = Math.min(\n mergedOptions.maxWidth,\n Math.max(mergedOptions.minWidth, newWidth)\n );\n setResizedWidth(clamped);\n };\n\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n },\n [mergedOptions.position, mergedOptions.minWidth, mergedOptions.maxWidth]\n );\n\n // Build style object\n const baseWidth = resizedWidth\n ? `${resizedWidth}px`\n : typeof mergedOptions.width === 'number'\n ? `${mergedOptions.width}px`\n : mergedOptions.width;\n\n const drawerStyle = useMemo(\n () => ({\n width: baseWidth,\n zIndex: mergedOptions.zIndex,\n borderRadius: typeof mergedOptions.borderRadius === 'number'\n ? `${mergedOptions.borderRadius}px`\n : mergedOptions.borderRadius,\n ...mergedOptions.style,\n }),\n [baseWidth, mergedOptions.zIndex, mergedOptions.borderRadius, mergedOptions.style]\n );\n\n const overlayStyle = useMemo(\n () => ({\n zIndex: mergedOptions.zIndex - 1,\n }),\n [mergedOptions.zIndex]\n );\n\n const triggerStyle = useMemo(\n () => ({\n zIndex: mergedOptions.zIndex - 1,\n [mergedOptions.position]: 20,\n bottom: 20,\n }),\n [mergedOptions.zIndex, mergedOptions.position]\n );\n\n return (\n <>\n {/* Overlay (drawer mode only) */}\n {!isInline && (\n <div\n className=\"devic-drawer-overlay\"\n data-open={isOpen}\n style={overlayStyle}\n onClick={handleClose}\n />\n )}\n\n {/* Drawer */}\n <div\n ref={drawerRef}\n className={`devic-chat-drawer ${className || ''}`}\n data-position={mergedOptions.position}\n data-open={isOpen}\n data-mode={mode}\n style={drawerStyle}\n >\n {/* Resize handle */}\n {mergedOptions.resizable && (\n <div\n className=\"devic-resize-handle\"\n data-position={mergedOptions.position}\n onMouseDown={handleResizeStart}\n />\n )}\n\n {/* Header */}\n <div className=\"devic-drawer-header\">\n {avatarUrl && (\n <img\n className=\"devic-drawer-avatar\"\n src={avatarUrl}\n alt=\"\"\n aria-hidden=\"true\"\n />\n )}\n <h2 className=\"devic-drawer-title\">{mergedOptions.title}</h2>\n <ConversationSelector\n assistantId={assistantId}\n currentChatUid={chat.chatUid}\n onSelect={handleConversationSelect}\n onNewChat={handleNewChat}\n apiKey={apiKey}\n baseUrl={baseUrl}\n tenantId={tenantId}\n />\n <div className=\"devic-drawer-header-actions\">\n <button\n className=\"devic-new-chat-btn\"\n onClick={handleNewChat}\n type=\"button\"\n aria-label=\"New chat\"\n title=\"New chat\"\n >\n <PlusIcon />\n </button>\n {!isInline && (\n <button\n className=\"devic-drawer-close\"\n onClick={handleClose}\n type=\"button\"\n aria-label=\"Close chat\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n\n {/* Error display */}\n {chat.error && (\n <div className=\"devic-error\">\n {chat.error.message}\n </div>\n )}\n\n {/* Messages */}\n <ChatMessages\n messages={chat.messages}\n allMessages={chat.messages}\n isLoading={chat.isLoading}\n welcomeMessage={mergedOptions.welcomeMessage}\n suggestedMessages={mergedOptions.suggestedMessages}\n onSuggestedClick={handleSuggestedClick}\n showToolTimeline={mergedOptions.showToolTimeline}\n toolRenderers={mergedOptions.toolRenderers}\n toolIcons={mergedOptions.toolIcons}\n loadingIndicator={mergedOptions.loadingIndicator}\n showFeedback={mergedOptions.showFeedback}\n feedbackMap={feedbackMap}\n onFeedback={handleFeedback}\n handedOffSubThreadId={chat.handedOffSubThreadId || undefined}\n onHandoffCompleted={chat.onHandoffCompleted}\n handoffWidgetRenderer={mergedOptions.handoffWidgetRenderer}\n toolGroups={mergedOptions.toolGroups}\n apiKey={resolvedApiKey}\n baseUrl={resolvedBaseUrl}\n />\n\n {/* Input */}\n <ChatInput\n onSend={handleSend}\n disabled={chat.isLoading || chat.handedOff}\n placeholder={mergedOptions.inputPlaceholder}\n enableFileUploads={mergedOptions.enableFileUploads}\n allowedFileTypes={mergedOptions.allowedFileTypes}\n maxFileSize={mergedOptions.maxFileSize}\n sendButtonContent={mergedOptions.sendButtonContent}\n disabledMessage={chat.handedOff ? 'Waiting for subagent to complete' : undefined}\n isProcessing={chat.isLoading && !chat.handedOff}\n onStop={chat.stopChat}\n stopButtonContent={mergedOptions.stopButtonContent}\n />\n </div>\n\n {/* Trigger button (drawer mode only, when closed) */}\n {!isInline && !isOpen && (\n <button\n className=\"devic-trigger\"\n onClick={handleOpen}\n style={triggerStyle}\n type=\"button\"\n aria-label=\"Open chat\"\n >\n <ChatIcon />\n </button>\n )}\n </>\n );\n}\n\n/**\n * Close icon\n */\nfunction CloseIcon(): JSX.Element {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n/**\n * Plus icon for new chat button\n */\nfunction PlusIcon(): JSX.Element {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\n/**\n * Chat icon for trigger button\n */\nfunction ChatIcon(): JSX.Element {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\" />\n </svg>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -187,6 +187,12 @@ export interface ChatDrawerOptions {
|
|
|
187
187
|
* If not provided, a default square stop icon is rendered.
|
|
188
188
|
*/
|
|
189
189
|
stopButtonContent?: React.ReactNode;
|
|
190
|
+
/**
|
|
191
|
+
* Enable debug logging to the browser console.
|
|
192
|
+
* Overrides the provider-level debug setting when provided.
|
|
193
|
+
* @default false
|
|
194
|
+
*/
|
|
195
|
+
debug?: boolean;
|
|
190
196
|
}
|
|
191
197
|
/**
|
|
192
198
|
* Props for the ChatDrawer component
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
2
|
+
import { useMemo, useState, useRef, useCallback, useEffect } from 'react';
|
|
3
3
|
import { useOptionalDevicContext } from '../../provider/DevicContext.js';
|
|
4
4
|
import { DevicApiClient } from '../../api/client.js';
|
|
5
5
|
import { AgentThreadState } from '../../api/types.js';
|
|
6
6
|
import { ThreadStateTag } from '../ThreadStateTag/ThreadStateTag.js';
|
|
7
|
+
import { createLogger } from '../../utils/logger.js';
|
|
7
8
|
|
|
8
9
|
const TERMINAL_STATES = [
|
|
9
10
|
AgentThreadState.COMPLETED,
|
|
@@ -20,6 +21,8 @@ function HandoffSubagentWidget({ subThreadId, onCompleted, apiKey, baseUrl, rend
|
|
|
20
21
|
const context = useOptionalDevicContext();
|
|
21
22
|
const resolvedApiKey = apiKey || context?.apiKey;
|
|
22
23
|
const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';
|
|
24
|
+
const debug = context?.debug ?? false;
|
|
25
|
+
const log = useMemo(() => createLogger(debug), [debug]);
|
|
23
26
|
const [thread, setThread] = useState(null);
|
|
24
27
|
const [agent, setAgent] = useState(null);
|
|
25
28
|
const [elapsedSeconds, setElapsedSeconds] = useState(0);
|
|
@@ -38,7 +41,7 @@ function HandoffSubagentWidget({ subThreadId, onCompleted, apiKey, baseUrl, rend
|
|
|
38
41
|
return;
|
|
39
42
|
try {
|
|
40
43
|
const data = await client.getThreadById(subThreadId, true);
|
|
41
|
-
|
|
44
|
+
log.log('[HandoffSubagentWidget] Thread loaded:', {
|
|
42
45
|
id: data._id,
|
|
43
46
|
agentId: data.agentId,
|
|
44
47
|
parentAgentId: data.parentAgentId,
|
|
@@ -54,7 +57,7 @@ function HandoffSubagentWidget({ subThreadId, onCompleted, apiKey, baseUrl, rend
|
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
catch (err) {
|
|
57
|
-
|
|
60
|
+
log.error('[HandoffSubagentWidget] Error fetching thread:', err);
|
|
58
61
|
}
|
|
59
62
|
}, [subThreadId, getClient, onCompleted]);
|
|
60
63
|
// Initial fetch + polling
|
|
@@ -73,15 +76,15 @@ function HandoffSubagentWidget({ subThreadId, onCompleted, apiKey, baseUrl, rend
|
|
|
73
76
|
return;
|
|
74
77
|
const client = getClient();
|
|
75
78
|
if (!client) {
|
|
76
|
-
|
|
79
|
+
log.warn('[HandoffSubagentWidget] No API client available (missing apiKey?)');
|
|
77
80
|
return;
|
|
78
81
|
}
|
|
79
|
-
|
|
82
|
+
log.log('[HandoffSubagentWidget] Fetching agent details for:', agentIdToFetch);
|
|
80
83
|
client.getAgentDetails(agentIdToFetch).then((data) => {
|
|
81
|
-
|
|
84
|
+
log.log('[HandoffSubagentWidget] Agent details loaded:', data?.name);
|
|
82
85
|
setAgent(data);
|
|
83
86
|
}).catch((err) => {
|
|
84
|
-
|
|
87
|
+
log.warn('[HandoffSubagentWidget] Could not fetch agent details:', err);
|
|
85
88
|
});
|
|
86
89
|
}, [agentIdToFetch, agent, getClient]);
|
|
87
90
|
// Stop polling on terminal state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandoffSubagentWidget.js","sources":["../../../../src/components/ChatDrawer/HandoffSubagentWidget.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { useOptionalDevicContext } from '../../provider';\nimport { DevicApiClient } from '../../api/client';\nimport { AgentThreadState } from '../../api/types';\nimport type { AgentThreadDto, AgentDto } from '../../api/types';\nimport { ThreadStateTag } from '../ThreadStateTag';\n\nconst TERMINAL_STATES: AgentThreadState[] = [\n AgentThreadState.COMPLETED,\n AgentThreadState.FAILED,\n AgentThreadState.TERMINATED,\n];\n\nconst POLL_INTERVAL_MS = 5000;\n\nexport interface HandoffSubagentWidgetProps {\n /**\n * The subthread ID to monitor\n */\n subThreadId: string;\n\n /**\n * Called when the subthread reaches a terminal state\n */\n onCompleted?: () => void;\n\n /**\n * API key (overrides provider context)\n */\n apiKey?: string;\n\n /**\n * Base URL (overrides provider context)\n */\n baseUrl?: string;\n\n /**\n * Custom renderer to replace the entire widget content.\n * Receives the thread and agent data.\n */\n renderWidget?: (props: {\n thread: AgentThreadDto | null;\n agent: AgentDto | null;\n elapsedSeconds: number;\n isTerminal: boolean;\n }) => React.ReactNode;\n}\n\nfunction formatElapsed(seconds: number): string {\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return m > 0 ? `${m}m ${s}s` : `${s}s`;\n}\n\nexport function HandoffSubagentWidget({\n subThreadId,\n onCompleted,\n apiKey,\n baseUrl,\n renderWidget,\n}: HandoffSubagentWidgetProps): JSX.Element {\n const context = useOptionalDevicContext();\n const resolvedApiKey = apiKey || context?.apiKey;\n const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';\n\n const [thread, setThread] = useState<AgentThreadDto | null>(null);\n const [agent, setAgent] = useState<AgentDto | null>(null);\n const [elapsedSeconds, setElapsedSeconds] = useState(0);\n\n const pollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const hasCalledCompleted = useRef(false);\n const startTimeRef = useRef(Date.now());\n\n const getClient = useCallback((): DevicApiClient | null => {\n if (!resolvedApiKey) return null;\n return new DevicApiClient({ apiKey: resolvedApiKey, baseUrl: resolvedBaseUrl });\n }, [resolvedApiKey, resolvedBaseUrl]);\n\n const fetchThread = useCallback(async () => {\n const client = getClient();\n if (!client) return;\n\n try {\n const data = await client.getThreadById(subThreadId, true);\n console.log('[HandoffSubagentWidget] Thread loaded:', {\n id: data._id,\n agentId: data.agentId,\n parentAgentId: data.parentAgentId,\n name: data.name,\n state: data.state,\n });\n setThread(data);\n\n if (\n data.state &&\n TERMINAL_STATES.includes(data.state) &&\n !hasCalledCompleted.current\n ) {\n hasCalledCompleted.current = true;\n onCompleted?.();\n }\n } catch (err) {\n console.error('[HandoffSubagentWidget] Error fetching thread:', err);\n }\n }, [subThreadId, getClient, onCompleted]);\n\n // Initial fetch + polling\n useEffect(() => {\n fetchThread();\n pollRef.current = setInterval(fetchThread, POLL_INTERVAL_MS);\n return () => {\n if (pollRef.current) clearInterval(pollRef.current);\n };\n }, [fetchThread]);\n\n // Fetch agent details once we have a thread with an agent ID\n const agentIdToFetch = thread?.agentId || thread?.parentAgentId;\n useEffect(() => {\n if (!agentIdToFetch || agent) return;\n const client = getClient();\n if (!client) {\n console.warn('[HandoffSubagentWidget] No API client available (missing apiKey?)');\n return;\n }\n\n console.log('[HandoffSubagentWidget] Fetching agent details for:', agentIdToFetch);\n client.getAgentDetails(agentIdToFetch).then((data) => {\n console.log('[HandoffSubagentWidget] Agent details loaded:', data?.name);\n setAgent(data);\n }).catch((err) => {\n console.warn('[HandoffSubagentWidget] Could not fetch agent details:', err);\n });\n }, [agentIdToFetch, agent, getClient]);\n\n // Stop polling on terminal state\n useEffect(() => {\n if (thread?.state && TERMINAL_STATES.includes(thread.state)) {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n }\n }, [thread?.state]);\n\n // Elapsed timer\n useEffect(() => {\n startTimeRef.current = Date.now();\n timerRef.current = setInterval(() => {\n setElapsedSeconds(Math.floor((Date.now() - startTimeRef.current) / 1000));\n }, 1000);\n return () => {\n if (timerRef.current) clearInterval(timerRef.current);\n };\n }, []);\n\n // Stop timer on terminal\n useEffect(() => {\n if (thread?.state && TERMINAL_STATES.includes(thread.state)) {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n }\n }, [thread?.state]);\n\n // Computed\n const isTerminal = !!(thread?.state && TERMINAL_STATES.includes(thread.state));\n const isProcessing = thread?.state === AgentThreadState.PROCESSING || thread?.state === AgentThreadState.HANDED_OFF;\n const totalTasks = thread?.tasks?.length || 0;\n const completedTasks = thread?.tasks?.filter((t) => t.completed).length || 0;\n const taskPercentage = totalTasks ? Math.round((completedTasks / totalTasks) * 100) : 0;\n\n const lastMessage = thread?.threadContent?.[thread.threadContent.length - 1];\n const lastSummary = lastMessage?.summary;\n\n // Custom renderer\n if (renderWidget) {\n return <>{renderWidget({ thread, agent, elapsedSeconds, isTerminal })}</>;\n }\n\n return (\n <div className=\"devic-handoff-widget\">\n {/* Header: Agent avatar + name */}\n <div className=\"devic-handoff-header\">\n <div className=\"devic-handoff-agent-avatar\">\n {agent?.imgUrl ? (\n <img src={agent.imgUrl} alt=\"\" className=\"devic-handoff-avatar-img\" />\n ) : (\n <RobotFallbackIcon />\n )}\n </div>\n <span className=\"devic-handoff-agent-name\">\n {agent?.name || thread?.name || 'Subagent'}\n </span>\n </div>\n\n {/* State tag */}\n {thread?.state && (\n <div className=\"devic-handoff-state-row\">\n <ThreadStateTag\n state={thread.state}\n threadId={thread._id || subThreadId}\n agentName={agent?.name || thread?.name || 'Subagent'}\n pausedReason={thread.pausedReason}\n finishReason={thread.finishReason}\n pauseUntil={thread.pauseUntil}\n interactive={true}\n apiKey={resolvedApiKey}\n baseUrl={resolvedBaseUrl}\n />\n </div>\n )}\n\n {/* Progress bar */}\n {totalTasks > 0 && (\n <div className=\"devic-handoff-progress\">\n <div className=\"devic-handoff-progress-bar\">\n <div\n className=\"devic-handoff-progress-fill\"\n data-status={thread?.state === AgentThreadState.FAILED ? 'error' : isTerminal ? 'success' : 'active'}\n style={{ width: `${taskPercentage}%` }}\n />\n </div>\n <span className=\"devic-handoff-progress-text\">\n {completedTasks}/{totalTasks}\n </span>\n </div>\n )}\n\n {/* Indeterminate progress when no tasks */}\n {totalTasks === 0 && isProcessing && (\n <div className=\"devic-handoff-progress\">\n <div className=\"devic-handoff-progress-bar\">\n <div className=\"devic-handoff-progress-indeterminate\" />\n </div>\n </div>\n )}\n\n {/* Last message summary */}\n {lastSummary && (\n <div className={`devic-handoff-summary ${isProcessing ? 'devic-handoff-summary-active' : ''}`}>\n {lastSummary}\n </div>\n )}\n\n {/* Elapsed time */}\n {isProcessing && (\n <div className=\"devic-handoff-elapsed\">\n <ClockSmallIcon />\n <span>{formatElapsed(elapsedSeconds)}</span>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Icons ── */\n\nfunction RobotFallbackIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#999\">\n <rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"2\" />\n <circle cx=\"9\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <circle cx=\"15\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8\" stroke=\"#999\" strokeWidth=\"2\" />\n <circle cx=\"12\" cy=\"2\" r=\"1.5\" />\n </svg>\n );\n}\n\nfunction ClockSmallIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12,6 12,12 16,14\" />\n </svg>\n );\n}\n"],"names":["_jsx","_Fragment","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HandoffSubagentWidget.js","sources":["../../../../src/components/ChatDrawer/HandoffSubagentWidget.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport { useOptionalDevicContext } from '../../provider';\nimport { DevicApiClient } from '../../api/client';\nimport { AgentThreadState } from '../../api/types';\nimport type { AgentThreadDto, AgentDto } from '../../api/types';\nimport { ThreadStateTag } from '../ThreadStateTag';\nimport { createLogger } from '../../utils/logger';\n\nconst TERMINAL_STATES: AgentThreadState[] = [\n AgentThreadState.COMPLETED,\n AgentThreadState.FAILED,\n AgentThreadState.TERMINATED,\n];\n\nconst POLL_INTERVAL_MS = 5000;\n\nexport interface HandoffSubagentWidgetProps {\n /**\n * The subthread ID to monitor\n */\n subThreadId: string;\n\n /**\n * Called when the subthread reaches a terminal state\n */\n onCompleted?: () => void;\n\n /**\n * API key (overrides provider context)\n */\n apiKey?: string;\n\n /**\n * Base URL (overrides provider context)\n */\n baseUrl?: string;\n\n /**\n * Custom renderer to replace the entire widget content.\n * Receives the thread and agent data.\n */\n renderWidget?: (props: {\n thread: AgentThreadDto | null;\n agent: AgentDto | null;\n elapsedSeconds: number;\n isTerminal: boolean;\n }) => React.ReactNode;\n}\n\nfunction formatElapsed(seconds: number): string {\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return m > 0 ? `${m}m ${s}s` : `${s}s`;\n}\n\nexport function HandoffSubagentWidget({\n subThreadId,\n onCompleted,\n apiKey,\n baseUrl,\n renderWidget,\n}: HandoffSubagentWidgetProps): JSX.Element {\n const context = useOptionalDevicContext();\n const resolvedApiKey = apiKey || context?.apiKey;\n const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';\n const debug = context?.debug ?? false;\n const log = useMemo(() => createLogger(debug), [debug]);\n\n const [thread, setThread] = useState<AgentThreadDto | null>(null);\n const [agent, setAgent] = useState<AgentDto | null>(null);\n const [elapsedSeconds, setElapsedSeconds] = useState(0);\n\n const pollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const hasCalledCompleted = useRef(false);\n const startTimeRef = useRef(Date.now());\n\n const getClient = useCallback((): DevicApiClient | null => {\n if (!resolvedApiKey) return null;\n return new DevicApiClient({ apiKey: resolvedApiKey, baseUrl: resolvedBaseUrl });\n }, [resolvedApiKey, resolvedBaseUrl]);\n\n const fetchThread = useCallback(async () => {\n const client = getClient();\n if (!client) return;\n\n try {\n const data = await client.getThreadById(subThreadId, true);\n log.log('[HandoffSubagentWidget] Thread loaded:', {\n id: data._id,\n agentId: data.agentId,\n parentAgentId: data.parentAgentId,\n name: data.name,\n state: data.state,\n });\n setThread(data);\n\n if (\n data.state &&\n TERMINAL_STATES.includes(data.state) &&\n !hasCalledCompleted.current\n ) {\n hasCalledCompleted.current = true;\n onCompleted?.();\n }\n } catch (err) {\n log.error('[HandoffSubagentWidget] Error fetching thread:', err);\n }\n }, [subThreadId, getClient, onCompleted]);\n\n // Initial fetch + polling\n useEffect(() => {\n fetchThread();\n pollRef.current = setInterval(fetchThread, POLL_INTERVAL_MS);\n return () => {\n if (pollRef.current) clearInterval(pollRef.current);\n };\n }, [fetchThread]);\n\n // Fetch agent details once we have a thread with an agent ID\n const agentIdToFetch = thread?.agentId || thread?.parentAgentId;\n useEffect(() => {\n if (!agentIdToFetch || agent) return;\n const client = getClient();\n if (!client) {\n log.warn('[HandoffSubagentWidget] No API client available (missing apiKey?)');\n return;\n }\n\n log.log('[HandoffSubagentWidget] Fetching agent details for:', agentIdToFetch);\n client.getAgentDetails(agentIdToFetch).then((data) => {\n log.log('[HandoffSubagentWidget] Agent details loaded:', data?.name);\n setAgent(data);\n }).catch((err) => {\n log.warn('[HandoffSubagentWidget] Could not fetch agent details:', err);\n });\n }, [agentIdToFetch, agent, getClient]);\n\n // Stop polling on terminal state\n useEffect(() => {\n if (thread?.state && TERMINAL_STATES.includes(thread.state)) {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n }\n }, [thread?.state]);\n\n // Elapsed timer\n useEffect(() => {\n startTimeRef.current = Date.now();\n timerRef.current = setInterval(() => {\n setElapsedSeconds(Math.floor((Date.now() - startTimeRef.current) / 1000));\n }, 1000);\n return () => {\n if (timerRef.current) clearInterval(timerRef.current);\n };\n }, []);\n\n // Stop timer on terminal\n useEffect(() => {\n if (thread?.state && TERMINAL_STATES.includes(thread.state)) {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n }\n }, [thread?.state]);\n\n // Computed\n const isTerminal = !!(thread?.state && TERMINAL_STATES.includes(thread.state));\n const isProcessing = thread?.state === AgentThreadState.PROCESSING || thread?.state === AgentThreadState.HANDED_OFF;\n const totalTasks = thread?.tasks?.length || 0;\n const completedTasks = thread?.tasks?.filter((t) => t.completed).length || 0;\n const taskPercentage = totalTasks ? Math.round((completedTasks / totalTasks) * 100) : 0;\n\n const lastMessage = thread?.threadContent?.[thread.threadContent.length - 1];\n const lastSummary = lastMessage?.summary;\n\n // Custom renderer\n if (renderWidget) {\n return <>{renderWidget({ thread, agent, elapsedSeconds, isTerminal })}</>;\n }\n\n return (\n <div className=\"devic-handoff-widget\">\n {/* Header: Agent avatar + name */}\n <div className=\"devic-handoff-header\">\n <div className=\"devic-handoff-agent-avatar\">\n {agent?.imgUrl ? (\n <img src={agent.imgUrl} alt=\"\" className=\"devic-handoff-avatar-img\" />\n ) : (\n <RobotFallbackIcon />\n )}\n </div>\n <span className=\"devic-handoff-agent-name\">\n {agent?.name || thread?.name || 'Subagent'}\n </span>\n </div>\n\n {/* State tag */}\n {thread?.state && (\n <div className=\"devic-handoff-state-row\">\n <ThreadStateTag\n state={thread.state}\n threadId={thread._id || subThreadId}\n agentName={agent?.name || thread?.name || 'Subagent'}\n pausedReason={thread.pausedReason}\n finishReason={thread.finishReason}\n pauseUntil={thread.pauseUntil}\n interactive={true}\n apiKey={resolvedApiKey}\n baseUrl={resolvedBaseUrl}\n />\n </div>\n )}\n\n {/* Progress bar */}\n {totalTasks > 0 && (\n <div className=\"devic-handoff-progress\">\n <div className=\"devic-handoff-progress-bar\">\n <div\n className=\"devic-handoff-progress-fill\"\n data-status={thread?.state === AgentThreadState.FAILED ? 'error' : isTerminal ? 'success' : 'active'}\n style={{ width: `${taskPercentage}%` }}\n />\n </div>\n <span className=\"devic-handoff-progress-text\">\n {completedTasks}/{totalTasks}\n </span>\n </div>\n )}\n\n {/* Indeterminate progress when no tasks */}\n {totalTasks === 0 && isProcessing && (\n <div className=\"devic-handoff-progress\">\n <div className=\"devic-handoff-progress-bar\">\n <div className=\"devic-handoff-progress-indeterminate\" />\n </div>\n </div>\n )}\n\n {/* Last message summary */}\n {lastSummary && (\n <div className={`devic-handoff-summary ${isProcessing ? 'devic-handoff-summary-active' : ''}`}>\n {lastSummary}\n </div>\n )}\n\n {/* Elapsed time */}\n {isProcessing && (\n <div className=\"devic-handoff-elapsed\">\n <ClockSmallIcon />\n <span>{formatElapsed(elapsedSeconds)}</span>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Icons ── */\n\nfunction RobotFallbackIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#999\">\n <rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"2\" />\n <circle cx=\"9\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <circle cx=\"15\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8\" stroke=\"#999\" strokeWidth=\"2\" />\n <circle cx=\"12\" cy=\"2\" r=\"1.5\" />\n </svg>\n );\n}\n\nfunction ClockSmallIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12,6 12,12 16,14\" />\n </svg>\n );\n}\n"],"names":["_jsx","_Fragment","_jsxs"],"mappings":"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"}
|
|
@@ -120,7 +120,7 @@ function StateIcon({ iconType }) {
|
|
|
120
120
|
function Modal({ open, onClose, title, titleIcon, children, footer, }) {
|
|
121
121
|
if (!open)
|
|
122
122
|
return null;
|
|
123
|
-
return (jsx("div", { className: "devic-state-modal-overlay", onClick: onClose, children: jsxs("div", { className: "devic-state-modal", onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: "devic-state-modal-header", children: [jsxs("h3", { className: "devic-state-modal-title", children: [titleIcon, title] }), jsx("button", { className: "devic-state-modal-close", onClick: onClose, type: "button", children: jsx(CloseIcon, {}) })] }), jsx("div", { className: "devic-state-modal-body", children: children }), footer && (jsx("div", { className: "devic-state-modal-footer", children: footer }))] }) }));
|
|
123
|
+
return createPortal(jsx("div", { className: "devic-state-modal-overlay", onClick: onClose, children: jsxs("div", { className: "devic-state-modal", onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: "devic-state-modal-header", children: [jsxs("h3", { className: "devic-state-modal-title", children: [titleIcon, title] }), jsx("button", { className: "devic-state-modal-close", onClick: onClose, type: "button", children: jsx(CloseIcon, {}) })] }), jsx("div", { className: "devic-state-modal-body", children: children }), footer && (jsx("div", { className: "devic-state-modal-footer", children: footer }))] }) }), document.body);
|
|
124
124
|
}
|
|
125
125
|
/* ── Explain Modal with typing effect ── */
|
|
126
126
|
function ExplainModal({ open, onClose, explanation, isLoading, agentName, }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadStateTag.js","sources":["../../../../src/components/ThreadStateTag/ThreadStateTag.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useOptionalDevicContext } from '../../provider';\nimport { DevicApiClient } from '../../api/client';\nimport { AgentThreadState } from '../../api/types';\nimport type { ThreadStateTagProps, StateConfig } from './ThreadStateTag.types';\nimport './ThreadStateTag.css';\n\n/* ── State configuration map ── */\n\nfunction getStateConfig(state: string, subthreadCount?: number): StateConfig {\n const configs: Record<string, StateConfig> = {\n [AgentThreadState.QUEUED]: {\n color: 'gold', bgColor: '#fffbe6', borderColor: '#ffe58f',\n text: 'Queued', iconType: null,\n },\n [AgentThreadState.PROCESSING]: {\n color: 'processing', bgColor: '#e6f4ff', borderColor: '#91caff',\n text: 'Processing', iconType: 'spinner',\n },\n [AgentThreadState.COMPLETED]: {\n color: 'success', bgColor: '#f6ffed', borderColor: '#b7eb8f',\n text: 'Completed', iconType: null,\n },\n [AgentThreadState.FAILED]: {\n color: 'error', bgColor: '#fff2f0', borderColor: '#ffa39e',\n text: 'Failed', iconType: null,\n },\n [AgentThreadState.TERMINATED]: {\n color: 'default', bgColor: '#fafafa', borderColor: '#d9d9d9',\n text: 'Terminated', iconType: null,\n },\n [AgentThreadState.GUARDRAIL_TRIGGER]: {\n color: 'error', bgColor: '#fff2f0', borderColor: '#ffa39e',\n text: 'Guardrail Triggered', iconType: 'shield',\n },\n [AgentThreadState.PAUSED]: {\n color: 'purple', bgColor: '#f9f0ff', borderColor: '#d3adf7',\n text: 'Paused', iconType: 'pause',\n },\n [AgentThreadState.PAUSED_FOR_APPROVAL]: {\n color: 'gold', bgColor: '#fffbe6', borderColor: '#ffe58f',\n text: 'Waiting for approval', iconType: 'warning',\n },\n [AgentThreadState.APPROVAL_REJECTED]: {\n color: 'error', bgColor: '#fff2f0', borderColor: '#ffa39e',\n text: 'Approval rejected', iconType: null,\n },\n [AgentThreadState.WAITING_FOR_RESPONSE]: {\n color: 'gold', bgColor: '#fffbe6', borderColor: '#ffe58f',\n text: 'Waiting for response', iconType: 'envelope',\n },\n [AgentThreadState.PAUSED_FOR_RESUME]: {\n color: 'blue', bgColor: '#e6f4ff', borderColor: '#91caff',\n text: 'Resume scheduled', iconType: 'clock',\n },\n [AgentThreadState.HANDED_OFF]: {\n color: 'blue', bgColor: '#e6f4ff', borderColor: '#91caff',\n text: subthreadCount && subthreadCount > 1 ? `Handed off (${subthreadCount})` : 'Handed off',\n iconType: 'handoff',\n },\n };\n\n return configs[state] || { color: 'default', bgColor: '#fafafa', borderColor: '#d9d9d9', text: 'Unknown', iconType: null };\n}\n\n/* ── SVG Icons ── */\n\nfunction SpinnerIcon(): JSX.Element {\n return (\n <svg className=\"devic-state-spinner\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <path d=\"M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83\" />\n </svg>\n );\n}\n\nfunction PauseIcon(): JSX.Element {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n </svg>\n );\n}\n\nfunction PlayIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n );\n}\n\nfunction WarningIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n );\n}\n\nfunction EnvelopeIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"M22 7l-10 7L2 7\" />\n </svg>\n );\n}\n\nfunction ClockIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12,6 12,12 16,14\" />\n </svg>\n );\n}\n\nfunction ShieldIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n}\n\nfunction HandoffIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4zm-1 6h2a3 3 0 0 1 3 3v3h-2v-3a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v3H8v-3a3 3 0 0 1 3-3z\" />\n <path d=\"M16 16l4-2-4-2v4z\" opacity=\"0.8\" />\n </svg>\n );\n}\n\nfunction CaretDownIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"5 8 14 9\" fill=\"currentColor\">\n <path d=\"M7 10l5 5 5-5z\" />\n </svg>\n );\n}\n\nfunction WrenchIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n );\n}\n\nfunction EyeIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction LightbulbIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"#FFC000\" stroke=\"#FFC000\" strokeWidth=\"1\">\n <path d=\"M9 21h6M12 3a6 6 0 0 0-4 10.5V17h8v-3.5A6 6 0 0 0 12 3z\" fill=\"#FFC000\" stroke=\"none\" />\n </svg>\n );\n}\n\nfunction RobotIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"2\" />\n <circle cx=\"9\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <circle cx=\"15\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <circle cx=\"12\" cy=\"2\" r=\"1.5\" />\n </svg>\n );\n}\n\nfunction UserIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n );\n}\n\nfunction CloseIcon(): JSX.Element {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nfunction InfoIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n );\n}\n\n/* ── Helper: render icon by type ── */\n\nfunction StateIcon({ iconType }: { iconType: string | null }): JSX.Element | null {\n switch (iconType) {\n case 'spinner': return <SpinnerIcon />;\n case 'pause': return <PauseIcon />;\n case 'warning': return <WarningIcon />;\n case 'envelope': return <EnvelopeIcon />;\n case 'clock': return <ClockIcon />;\n case 'shield': return <ShieldIcon />;\n case 'handoff': return <HandoffIcon />;\n default: return null;\n }\n}\n\n/* ── Modal component ── */\n\nfunction Modal({\n open,\n onClose,\n title,\n titleIcon,\n children,\n footer,\n}: {\n open: boolean;\n onClose: () => void;\n title: string;\n titleIcon?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}): JSX.Element | null {\n if (!open) return null;\n\n return (\n <div className=\"devic-state-modal-overlay\" onClick={onClose}>\n <div className=\"devic-state-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"devic-state-modal-header\">\n <h3 className=\"devic-state-modal-title\">\n {titleIcon}\n {title}\n </h3>\n <button className=\"devic-state-modal-close\" onClick={onClose} type=\"button\">\n <CloseIcon />\n </button>\n </div>\n <div className=\"devic-state-modal-body\">\n {children}\n </div>\n {footer && (\n <div className=\"devic-state-modal-footer\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Explain Modal with typing effect ── */\n\nfunction ExplainModal({\n open,\n onClose,\n explanation,\n isLoading,\n agentName,\n}: {\n open: boolean;\n onClose: () => void;\n explanation: string | null;\n isLoading: boolean;\n agentName: string;\n}): JSX.Element | null {\n const [displayedText, setDisplayedText] = useState('');\n const [fullTextDisplayed, setFullTextDisplayed] = useState(false);\n const charIndexRef = useRef(0);\n\n useEffect(() => {\n if (!explanation || isLoading) {\n setDisplayedText('');\n charIndexRef.current = 0;\n setFullTextDisplayed(false);\n return;\n }\n\n if (charIndexRef.current < explanation.length) {\n const timer = setTimeout(() => {\n charIndexRef.current++;\n setDisplayedText(explanation.slice(0, charIndexRef.current));\n if (charIndexRef.current >= explanation.length) {\n setFullTextDisplayed(true);\n }\n }, 20);\n return () => clearTimeout(timer);\n }\n }, [explanation, isLoading, displayedText]);\n\n const handleClose = () => {\n setDisplayedText('');\n charIndexRef.current = 0;\n setFullTextDisplayed(false);\n onClose();\n };\n\n return (\n <Modal\n open={open}\n onClose={handleClose}\n title={`Thread execution description of \"${agentName}\"`}\n titleIcon={<LightbulbIcon />}\n >\n {isLoading ? (\n <div className=\"devic-state-loading\">\n <div className=\"devic-state-loading-spinner\" />\n </div>\n ) : (\n <div className=\"devic-explain-content\">\n {displayedText}\n {!fullTextDisplayed && <span className=\"devic-typing-cursor\">|</span>}\n </div>\n )}\n </Modal>\n );\n}\n\n/* ── Approval Modal ── */\n\nfunction ApprovalModal({\n open,\n onClose,\n onApprove,\n isLoading,\n pausedReason,\n}: {\n open: boolean;\n onClose: () => void;\n onApprove: (action: 'approved' | 'rejected', retry: boolean, message?: string) => void;\n isLoading: boolean;\n pausedReason?: string;\n}): JSX.Element | null {\n const [feedback, setFeedback] = useState('');\n\n const handleClose = () => {\n setFeedback('');\n onClose();\n };\n\n return (\n <Modal\n open={open}\n onClose={handleClose}\n title=\"Review Agent Request\"\n titleIcon={<EyeIcon />}\n >\n <div className=\"devic-approval-layout\">\n <div className=\"devic-approval-request\">\n <div style={{ fontWeight: 600, marginBottom: 8, fontSize: 13 }}>Agent's request:</div>\n <div style={{ whiteSpace: 'pre-wrap' }}>{pausedReason || 'Agent is waiting for approval to resume execution.'}</div>\n </div>\n <div className=\"devic-approval-actions\">\n <div style={{ fontWeight: 600, fontSize: 13 }}>Your feedback:</div>\n <textarea\n className=\"devic-approval-textarea\"\n value={feedback}\n onChange={(e) => setFeedback(e.target.value)}\n placeholder=\"Optional feedback for the agent...\"\n />\n <div className=\"devic-approval-buttons\">\n <button\n className=\"devic-state-btn devic-state-btn-danger\"\n onClick={() => onApprove('rejected', false, feedback)}\n disabled={isLoading}\n type=\"button\"\n >\n Reject and finish\n </button>\n <button\n className=\"devic-state-btn devic-state-btn-primary\"\n onClick={() => onApprove('rejected', true, feedback)}\n disabled={isLoading || !feedback.trim()}\n type=\"button\"\n >\n Continue with feedback\n </button>\n <button\n className=\"devic-state-btn devic-state-btn-success\"\n onClick={() => onApprove('approved', false)}\n disabled={isLoading}\n type=\"button\"\n >\n Approve\n </button>\n </div>\n </div>\n </div>\n </Modal>\n );\n}\n\n/* ── Complete Thread Modal ── */\n\nfunction CompleteModal({\n open,\n onClose,\n onComplete,\n}: {\n open: boolean;\n onClose: () => void;\n onComplete: (state: string) => void;\n}): JSX.Element | null {\n const [completionState, setCompletionState] = useState('terminated');\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title=\"Complete Execution Manually\"\n titleIcon={<WrenchIcon />}\n footer={\n <>\n <button className=\"devic-state-btn\" onClick={onClose} type=\"button\">Cancel</button>\n <button className=\"devic-state-btn devic-state-btn-danger\" onClick={() => onComplete(completionState)} type=\"button\">\n Complete\n </button>\n </>\n }\n >\n <div style={{ marginBottom: 12 }}>\n <div style={{ fontWeight: 600, marginBottom: 4 }}>Confirm Manual Completion</div>\n <p style={{ margin: '4px 0 12px', color: '#666', fontSize: 13 }}>\n You are about to manually complete this agent's execution.\n </p>\n <div style={{ marginBottom: 12 }}>\n <div style={{ fontWeight: 500, marginBottom: 6, fontSize: 13 }}>Complete as:</div>\n <select\n className=\"devic-completion-select\"\n value={completionState}\n onChange={(e) => setCompletionState(e.target.value)}\n >\n <option value=\"terminated\">Terminated - Finish thread as manually terminated</option>\n <option value=\"completed\">Completed - Finish thread as successfully completed</option>\n <option value=\"failed\">Failed - Finish thread as failed or with errors</option>\n </select>\n </div>\n <div className=\"devic-state-warning\">\n <InfoIcon />\n <span>This action will immediately terminate all ongoing processes. The execution cannot be resumed after completion.</span>\n </div>\n </div>\n </Modal>\n );\n}\n\n/* ── Confirm Modal (Pause/Resume) ── */\n\nfunction ConfirmModal({\n open,\n onClose,\n onConfirm,\n title,\n icon,\n message,\n confirmText,\n}: {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n icon: React.ReactNode;\n message: string;\n confirmText: string;\n}): JSX.Element | null {\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={title}\n titleIcon={icon}\n footer={\n <>\n <button className=\"devic-state-btn\" onClick={onClose} type=\"button\">Cancel</button>\n <button className=\"devic-state-btn devic-state-btn-primary\" onClick={onConfirm} type=\"button\">\n {confirmText}\n </button>\n </>\n }\n >\n <p style={{ margin: 0, color: '#666', fontSize: 14 }}>{message}</p>\n </Modal>\n );\n}\n\n/* ── Main ThreadStateTag ── */\n\nexport function ThreadStateTag({\n state,\n threadId,\n agentName,\n showIcon = true,\n customIcon,\n pausedReason,\n approvalRejectedMessage,\n finishReason,\n onActionComplete,\n pauseUntil,\n subthreadCount,\n showAdminActions = false,\n apiKey,\n baseUrl,\n interactive = true,\n}: ThreadStateTagProps): JSX.Element {\n const context = useOptionalDevicContext();\n const resolvedApiKey = apiKey || context?.apiKey;\n const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';\n\n // State\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [showTooltip, setShowTooltip] = useState(false);\n const [explainModalOpen, setExplainModalOpen] = useState(false);\n const [threadExplanation, setThreadExplanation] = useState<string | null>(null);\n const [isLoadingExplanation, setIsLoadingExplanation] = useState(false);\n const [pauseModalOpen, setPauseModalOpen] = useState(false);\n const [resumeModalOpen, setResumeModalOpen] = useState(false);\n const [reviewModalOpen, setReviewModalOpen] = useState(false);\n const [isLoadingApproval, setIsLoadingApproval] = useState(false);\n const [completeModalOpen, setCompleteModalOpen] = useState(false);\n\n const tagRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [tooltipStyle, setTooltipStyle] = useState<React.CSSProperties>({});\n const [dropdownStyle, setDropdownStyle] = useState<React.CSSProperties>({});\n\n // Close dropdown on click outside\n useEffect(() => {\n if (!dropdownOpen) return;\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n tagRef.current && !tagRef.current.contains(target) &&\n (!dropdownRef.current || !dropdownRef.current.contains(target))\n ) {\n setDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [dropdownOpen]);\n\n // API client\n const getClient = useCallback((): DevicApiClient | null => {\n if (!resolvedApiKey) return null;\n return new DevicApiClient({ apiKey: resolvedApiKey, baseUrl: resolvedBaseUrl });\n }, [resolvedApiKey, resolvedBaseUrl]);\n\n // Config\n const config = getStateConfig(state, subthreadCount);\n\n if (!state) {\n return <span className=\"devic-state-tag\" data-color=\"default\">Unknown</span>;\n }\n\n // Icon\n const renderIcon = () => {\n if (!showIcon) return null;\n if (customIcon) return <span className=\"devic-state-tag-icon\">{customIcon}</span>;\n const icon = <StateIcon iconType={config.iconType} />;\n return icon ? <span className=\"devic-state-tag-icon\">{icon}</span> : null;\n };\n\n // Tooltip content\n const getTooltipContent = (): string | null => {\n switch (state) {\n case AgentThreadState.PAUSED_FOR_APPROVAL:\n return 'Agent is waiting for approval to resume execution';\n case AgentThreadState.PAUSED_FOR_RESUME:\n if (pauseUntil) {\n const timeDiff = new Date(pauseUntil).getTime() - Date.now();\n const hours = Math.floor(timeDiff / 3600000);\n const minutes = Math.floor(timeDiff / 60000);\n const timeStr = hours > 0 ? `${hours} hours` : `${minutes} minutes`;\n return `Agent paused, will resume at ${new Date(pauseUntil).toLocaleString()} (${timeStr})`;\n }\n return 'Agent paused, will resume at a scheduled time';\n case AgentThreadState.WAITING_FOR_RESPONSE:\n return pausedReason || 'Agent is waiting for response';\n case AgentThreadState.COMPLETED:\n case AgentThreadState.FAILED:\n case AgentThreadState.TERMINATED:\n return finishReason || 'Manually finished thread';\n case AgentThreadState.APPROVAL_REJECTED:\n return approvalRejectedMessage || 'Approval was rejected';\n case AgentThreadState.GUARDRAIL_TRIGGER:\n return 'Agent execution paused due to guardrail trigger';\n default:\n return null;\n }\n };\n\n // Handlers\n const handleExplain = async () => {\n setDropdownOpen(false);\n setExplainModalOpen(true);\n setIsLoadingExplanation(true);\n setThreadExplanation(null);\n\n const client = getClient();\n if (!client) {\n setThreadExplanation('API key not configured.');\n setIsLoadingExplanation(false);\n return;\n }\n\n try {\n const explanation = await client.explainAgentThread(threadId);\n setThreadExplanation(explanation);\n } catch {\n setThreadExplanation('Could not obtain the thread explanation.');\n } finally {\n setIsLoadingExplanation(false);\n }\n };\n\n const handlePause = async () => {\n const client = getClient();\n if (!client) return;\n try {\n await client.pauseResumeThread(threadId, 'paused');\n setPauseModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error pausing thread:', err);\n }\n };\n\n const handleResume = async () => {\n const client = getClient();\n if (!client) return;\n try {\n await client.pauseResumeThread(threadId, 'queued');\n setResumeModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error resuming thread:', err);\n }\n };\n\n const handleApproval = async (action: 'approved' | 'rejected', retry: boolean, message?: string) => {\n const client = getClient();\n if (!client) return;\n setIsLoadingApproval(true);\n try {\n await client.handleThreadApproval(threadId, action === 'approved', retry, message || '');\n setReviewModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error handling thread approval:', err);\n } finally {\n setIsLoadingApproval(false);\n }\n };\n\n const handleComplete = async (completionState: string) => {\n const client = getClient();\n if (!client) return;\n try {\n await client.completeThread(threadId, completionState);\n setCompleteModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error completing thread:', err);\n }\n };\n\n // Build dropdown items\n const dropdownItems: Array<{ key: string; icon: React.ReactNode; label: string; onClick: () => void }> = [];\n\n if (showAdminActions && [AgentThreadState.PROCESSING, AgentThreadState.QUEUED, AgentThreadState.WAITING_FOR_RESPONSE].includes(state as AgentThreadState)) {\n dropdownItems.push({\n key: 'complete',\n icon: <WrenchIcon />,\n label: 'Complete manually',\n onClick: () => { setDropdownOpen(false); setCompleteModalOpen(true); },\n });\n }\n\n if (state === AgentThreadState.QUEUED) {\n dropdownItems.push({\n key: 'pause',\n icon: <PauseIcon />,\n label: 'Pause',\n onClick: () => { setDropdownOpen(false); setPauseModalOpen(true); },\n });\n }\n\n if (state === AgentThreadState.PAUSED || state === AgentThreadState.PAUSED_FOR_RESUME) {\n dropdownItems.push({\n key: 'resume',\n icon: <PlayIcon />,\n label: 'Resume',\n onClick: () => { setDropdownOpen(false); setResumeModalOpen(true); },\n });\n }\n\n if (state === AgentThreadState.PAUSED_FOR_APPROVAL) {\n dropdownItems.push({\n key: 'review',\n icon: <EyeIcon />,\n label: 'Review',\n onClick: () => { setDropdownOpen(false); setReviewModalOpen(true); },\n });\n }\n\n dropdownItems.push({\n key: 'explain',\n icon: <LightbulbIcon />,\n label: 'Explain thread...',\n onClick: handleExplain,\n });\n\n const canInteract = interactive && threadId;\n const tooltipContent = getTooltipContent();\n\n return (\n <>\n <div\n ref={tagRef}\n className=\"devic-state-tag\"\n data-color={config.color}\n data-interactive={String(!!canInteract)}\n data-dropdown-open={String(dropdownOpen)}\n onClick={canInteract ? () => {\n if (!dropdownOpen) {\n const rect = tagRef.current?.getBoundingClientRect();\n if (rect) {\n setDropdownStyle({\n position: 'fixed',\n top: rect.bottom + 4,\n right: window.innerWidth - rect.right,\n });\n }\n }\n setDropdownOpen(!dropdownOpen);\n } : undefined}\n onMouseEnter={() => {\n if (!dropdownOpen && tooltipContent) {\n const rect = tagRef.current?.getBoundingClientRect();\n if (rect) {\n setTooltipStyle({\n position: 'fixed',\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n transform: 'translate(-50%, -100%)',\n });\n }\n setShowTooltip(true);\n }\n }}\n onMouseLeave={() => setShowTooltip(false)}\n >\n {renderIcon()}\n {config.text}\n {canInteract && (\n <span className=\"devic-state-tag-caret\">\n <CaretDownIcon />\n </span>\n )}\n\n </div>\n\n {/* Tooltip - portal to escape overflow/transform containers */}\n {showTooltip && tooltipContent && !dropdownOpen && createPortal(\n <div className=\"devic-state-tooltip-portal\" style={tooltipStyle}>{tooltipContent}</div>,\n document.body\n )}\n\n {/* Dropdown - portal to escape overflow/transform containers */}\n {dropdownOpen && canInteract && createPortal(\n <div ref={dropdownRef} className=\"devic-state-dropdown-portal\" style={dropdownStyle}>\n {dropdownItems.map((item) => (\n <button\n key={item.key}\n className=\"devic-state-dropdown-item\"\n onClick={(e) => { e.stopPropagation(); item.onClick(); }}\n type=\"button\"\n >\n <span className=\"devic-state-dropdown-item-icon\">{item.icon}</span>\n {item.label}\n </button>\n ))}\n </div>,\n document.body\n )}\n\n {/* Modals */}\n <ExplainModal\n open={explainModalOpen}\n onClose={() => setExplainModalOpen(false)}\n explanation={threadExplanation}\n isLoading={isLoadingExplanation}\n agentName={agentName}\n />\n\n <CompleteModal\n open={completeModalOpen}\n onClose={() => setCompleteModalOpen(false)}\n onComplete={handleComplete}\n />\n\n <ConfirmModal\n open={pauseModalOpen}\n onClose={() => setPauseModalOpen(false)}\n onConfirm={handlePause}\n title=\"Pause Thread\"\n icon={<PauseIcon />}\n message=\"You are about to pause this queued thread. It can be resumed later.\"\n confirmText=\"Pause\"\n />\n\n <ConfirmModal\n open={resumeModalOpen}\n onClose={() => setResumeModalOpen(false)}\n onConfirm={handleResume}\n title=\"Resume Thread\"\n icon={<PlayIcon />}\n message=\"You are about to resume this thread. It will go back to the queue and be processed when possible.\"\n confirmText=\"Resume\"\n />\n\n <ApprovalModal\n open={reviewModalOpen}\n onClose={() => setReviewModalOpen(false)}\n onApprove={handleApproval}\n isLoading={isLoadingApproval}\n pausedReason={pausedReason}\n />\n </>\n );\n}\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadStateTag.js","sources":["../../../../src/components/ThreadStateTag/ThreadStateTag.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useOptionalDevicContext } from '../../provider';\nimport { DevicApiClient } from '../../api/client';\nimport { AgentThreadState } from '../../api/types';\nimport type { ThreadStateTagProps, StateConfig } from './ThreadStateTag.types';\nimport './ThreadStateTag.css';\n\n/* ── State configuration map ── */\n\nfunction getStateConfig(state: string, subthreadCount?: number): StateConfig {\n const configs: Record<string, StateConfig> = {\n [AgentThreadState.QUEUED]: {\n color: 'gold', bgColor: '#fffbe6', borderColor: '#ffe58f',\n text: 'Queued', iconType: null,\n },\n [AgentThreadState.PROCESSING]: {\n color: 'processing', bgColor: '#e6f4ff', borderColor: '#91caff',\n text: 'Processing', iconType: 'spinner',\n },\n [AgentThreadState.COMPLETED]: {\n color: 'success', bgColor: '#f6ffed', borderColor: '#b7eb8f',\n text: 'Completed', iconType: null,\n },\n [AgentThreadState.FAILED]: {\n color: 'error', bgColor: '#fff2f0', borderColor: '#ffa39e',\n text: 'Failed', iconType: null,\n },\n [AgentThreadState.TERMINATED]: {\n color: 'default', bgColor: '#fafafa', borderColor: '#d9d9d9',\n text: 'Terminated', iconType: null,\n },\n [AgentThreadState.GUARDRAIL_TRIGGER]: {\n color: 'error', bgColor: '#fff2f0', borderColor: '#ffa39e',\n text: 'Guardrail Triggered', iconType: 'shield',\n },\n [AgentThreadState.PAUSED]: {\n color: 'purple', bgColor: '#f9f0ff', borderColor: '#d3adf7',\n text: 'Paused', iconType: 'pause',\n },\n [AgentThreadState.PAUSED_FOR_APPROVAL]: {\n color: 'gold', bgColor: '#fffbe6', borderColor: '#ffe58f',\n text: 'Waiting for approval', iconType: 'warning',\n },\n [AgentThreadState.APPROVAL_REJECTED]: {\n color: 'error', bgColor: '#fff2f0', borderColor: '#ffa39e',\n text: 'Approval rejected', iconType: null,\n },\n [AgentThreadState.WAITING_FOR_RESPONSE]: {\n color: 'gold', bgColor: '#fffbe6', borderColor: '#ffe58f',\n text: 'Waiting for response', iconType: 'envelope',\n },\n [AgentThreadState.PAUSED_FOR_RESUME]: {\n color: 'blue', bgColor: '#e6f4ff', borderColor: '#91caff',\n text: 'Resume scheduled', iconType: 'clock',\n },\n [AgentThreadState.HANDED_OFF]: {\n color: 'blue', bgColor: '#e6f4ff', borderColor: '#91caff',\n text: subthreadCount && subthreadCount > 1 ? `Handed off (${subthreadCount})` : 'Handed off',\n iconType: 'handoff',\n },\n };\n\n return configs[state] || { color: 'default', bgColor: '#fafafa', borderColor: '#d9d9d9', text: 'Unknown', iconType: null };\n}\n\n/* ── SVG Icons ── */\n\nfunction SpinnerIcon(): JSX.Element {\n return (\n <svg className=\"devic-state-spinner\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <path d=\"M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83\" />\n </svg>\n );\n}\n\nfunction PauseIcon(): JSX.Element {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n </svg>\n );\n}\n\nfunction PlayIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n );\n}\n\nfunction WarningIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n );\n}\n\nfunction EnvelopeIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"M22 7l-10 7L2 7\" />\n </svg>\n );\n}\n\nfunction ClockIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12,6 12,12 16,14\" />\n </svg>\n );\n}\n\nfunction ShieldIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n}\n\nfunction HandoffIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4zm-1 6h2a3 3 0 0 1 3 3v3h-2v-3a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v3H8v-3a3 3 0 0 1 3-3z\" />\n <path d=\"M16 16l4-2-4-2v4z\" opacity=\"0.8\" />\n </svg>\n );\n}\n\nfunction CaretDownIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"5 8 14 9\" fill=\"currentColor\">\n <path d=\"M7 10l5 5 5-5z\" />\n </svg>\n );\n}\n\nfunction WrenchIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n );\n}\n\nfunction EyeIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction LightbulbIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"#FFC000\" stroke=\"#FFC000\" strokeWidth=\"1\">\n <path d=\"M9 21h6M12 3a6 6 0 0 0-4 10.5V17h8v-3.5A6 6 0 0 0 12 3z\" fill=\"#FFC000\" stroke=\"none\" />\n </svg>\n );\n}\n\nfunction RobotIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"2\" />\n <circle cx=\"9\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <circle cx=\"15\" cy=\"14\" r=\"2\" fill=\"#fff\" />\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <circle cx=\"12\" cy=\"2\" r=\"1.5\" />\n </svg>\n );\n}\n\nfunction UserIcon(): JSX.Element {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n );\n}\n\nfunction CloseIcon(): JSX.Element {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nfunction InfoIcon(): JSX.Element {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n );\n}\n\n/* ── Helper: render icon by type ── */\n\nfunction StateIcon({ iconType }: { iconType: string | null }): JSX.Element | null {\n switch (iconType) {\n case 'spinner': return <SpinnerIcon />;\n case 'pause': return <PauseIcon />;\n case 'warning': return <WarningIcon />;\n case 'envelope': return <EnvelopeIcon />;\n case 'clock': return <ClockIcon />;\n case 'shield': return <ShieldIcon />;\n case 'handoff': return <HandoffIcon />;\n default: return null;\n }\n}\n\n/* ── Modal component ── */\n\nfunction Modal({\n open,\n onClose,\n title,\n titleIcon,\n children,\n footer,\n}: {\n open: boolean;\n onClose: () => void;\n title: string;\n titleIcon?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}): JSX.Element | null {\n if (!open) return null;\n\n return createPortal(\n <div className=\"devic-state-modal-overlay\" onClick={onClose}>\n <div className=\"devic-state-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"devic-state-modal-header\">\n <h3 className=\"devic-state-modal-title\">\n {titleIcon}\n {title}\n </h3>\n <button className=\"devic-state-modal-close\" onClick={onClose} type=\"button\">\n <CloseIcon />\n </button>\n </div>\n <div className=\"devic-state-modal-body\">\n {children}\n </div>\n {footer && (\n <div className=\"devic-state-modal-footer\">\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n}\n\n/* ── Explain Modal with typing effect ── */\n\nfunction ExplainModal({\n open,\n onClose,\n explanation,\n isLoading,\n agentName,\n}: {\n open: boolean;\n onClose: () => void;\n explanation: string | null;\n isLoading: boolean;\n agentName: string;\n}): JSX.Element | null {\n const [displayedText, setDisplayedText] = useState('');\n const [fullTextDisplayed, setFullTextDisplayed] = useState(false);\n const charIndexRef = useRef(0);\n\n useEffect(() => {\n if (!explanation || isLoading) {\n setDisplayedText('');\n charIndexRef.current = 0;\n setFullTextDisplayed(false);\n return;\n }\n\n if (charIndexRef.current < explanation.length) {\n const timer = setTimeout(() => {\n charIndexRef.current++;\n setDisplayedText(explanation.slice(0, charIndexRef.current));\n if (charIndexRef.current >= explanation.length) {\n setFullTextDisplayed(true);\n }\n }, 20);\n return () => clearTimeout(timer);\n }\n }, [explanation, isLoading, displayedText]);\n\n const handleClose = () => {\n setDisplayedText('');\n charIndexRef.current = 0;\n setFullTextDisplayed(false);\n onClose();\n };\n\n return (\n <Modal\n open={open}\n onClose={handleClose}\n title={`Thread execution description of \"${agentName}\"`}\n titleIcon={<LightbulbIcon />}\n >\n {isLoading ? (\n <div className=\"devic-state-loading\">\n <div className=\"devic-state-loading-spinner\" />\n </div>\n ) : (\n <div className=\"devic-explain-content\">\n {displayedText}\n {!fullTextDisplayed && <span className=\"devic-typing-cursor\">|</span>}\n </div>\n )}\n </Modal>\n );\n}\n\n/* ── Approval Modal ── */\n\nfunction ApprovalModal({\n open,\n onClose,\n onApprove,\n isLoading,\n pausedReason,\n}: {\n open: boolean;\n onClose: () => void;\n onApprove: (action: 'approved' | 'rejected', retry: boolean, message?: string) => void;\n isLoading: boolean;\n pausedReason?: string;\n}): JSX.Element | null {\n const [feedback, setFeedback] = useState('');\n\n const handleClose = () => {\n setFeedback('');\n onClose();\n };\n\n return (\n <Modal\n open={open}\n onClose={handleClose}\n title=\"Review Agent Request\"\n titleIcon={<EyeIcon />}\n >\n <div className=\"devic-approval-layout\">\n <div className=\"devic-approval-request\">\n <div style={{ fontWeight: 600, marginBottom: 8, fontSize: 13 }}>Agent's request:</div>\n <div style={{ whiteSpace: 'pre-wrap' }}>{pausedReason || 'Agent is waiting for approval to resume execution.'}</div>\n </div>\n <div className=\"devic-approval-actions\">\n <div style={{ fontWeight: 600, fontSize: 13 }}>Your feedback:</div>\n <textarea\n className=\"devic-approval-textarea\"\n value={feedback}\n onChange={(e) => setFeedback(e.target.value)}\n placeholder=\"Optional feedback for the agent...\"\n />\n <div className=\"devic-approval-buttons\">\n <button\n className=\"devic-state-btn devic-state-btn-danger\"\n onClick={() => onApprove('rejected', false, feedback)}\n disabled={isLoading}\n type=\"button\"\n >\n Reject and finish\n </button>\n <button\n className=\"devic-state-btn devic-state-btn-primary\"\n onClick={() => onApprove('rejected', true, feedback)}\n disabled={isLoading || !feedback.trim()}\n type=\"button\"\n >\n Continue with feedback\n </button>\n <button\n className=\"devic-state-btn devic-state-btn-success\"\n onClick={() => onApprove('approved', false)}\n disabled={isLoading}\n type=\"button\"\n >\n Approve\n </button>\n </div>\n </div>\n </div>\n </Modal>\n );\n}\n\n/* ── Complete Thread Modal ── */\n\nfunction CompleteModal({\n open,\n onClose,\n onComplete,\n}: {\n open: boolean;\n onClose: () => void;\n onComplete: (state: string) => void;\n}): JSX.Element | null {\n const [completionState, setCompletionState] = useState('terminated');\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title=\"Complete Execution Manually\"\n titleIcon={<WrenchIcon />}\n footer={\n <>\n <button className=\"devic-state-btn\" onClick={onClose} type=\"button\">Cancel</button>\n <button className=\"devic-state-btn devic-state-btn-danger\" onClick={() => onComplete(completionState)} type=\"button\">\n Complete\n </button>\n </>\n }\n >\n <div style={{ marginBottom: 12 }}>\n <div style={{ fontWeight: 600, marginBottom: 4 }}>Confirm Manual Completion</div>\n <p style={{ margin: '4px 0 12px', color: '#666', fontSize: 13 }}>\n You are about to manually complete this agent's execution.\n </p>\n <div style={{ marginBottom: 12 }}>\n <div style={{ fontWeight: 500, marginBottom: 6, fontSize: 13 }}>Complete as:</div>\n <select\n className=\"devic-completion-select\"\n value={completionState}\n onChange={(e) => setCompletionState(e.target.value)}\n >\n <option value=\"terminated\">Terminated - Finish thread as manually terminated</option>\n <option value=\"completed\">Completed - Finish thread as successfully completed</option>\n <option value=\"failed\">Failed - Finish thread as failed or with errors</option>\n </select>\n </div>\n <div className=\"devic-state-warning\">\n <InfoIcon />\n <span>This action will immediately terminate all ongoing processes. The execution cannot be resumed after completion.</span>\n </div>\n </div>\n </Modal>\n );\n}\n\n/* ── Confirm Modal (Pause/Resume) ── */\n\nfunction ConfirmModal({\n open,\n onClose,\n onConfirm,\n title,\n icon,\n message,\n confirmText,\n}: {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n icon: React.ReactNode;\n message: string;\n confirmText: string;\n}): JSX.Element | null {\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={title}\n titleIcon={icon}\n footer={\n <>\n <button className=\"devic-state-btn\" onClick={onClose} type=\"button\">Cancel</button>\n <button className=\"devic-state-btn devic-state-btn-primary\" onClick={onConfirm} type=\"button\">\n {confirmText}\n </button>\n </>\n }\n >\n <p style={{ margin: 0, color: '#666', fontSize: 14 }}>{message}</p>\n </Modal>\n );\n}\n\n/* ── Main ThreadStateTag ── */\n\nexport function ThreadStateTag({\n state,\n threadId,\n agentName,\n showIcon = true,\n customIcon,\n pausedReason,\n approvalRejectedMessage,\n finishReason,\n onActionComplete,\n pauseUntil,\n subthreadCount,\n showAdminActions = false,\n apiKey,\n baseUrl,\n interactive = true,\n}: ThreadStateTagProps): JSX.Element {\n const context = useOptionalDevicContext();\n const resolvedApiKey = apiKey || context?.apiKey;\n const resolvedBaseUrl = baseUrl || context?.baseUrl || 'https://api.devic.ai';\n\n // State\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [showTooltip, setShowTooltip] = useState(false);\n const [explainModalOpen, setExplainModalOpen] = useState(false);\n const [threadExplanation, setThreadExplanation] = useState<string | null>(null);\n const [isLoadingExplanation, setIsLoadingExplanation] = useState(false);\n const [pauseModalOpen, setPauseModalOpen] = useState(false);\n const [resumeModalOpen, setResumeModalOpen] = useState(false);\n const [reviewModalOpen, setReviewModalOpen] = useState(false);\n const [isLoadingApproval, setIsLoadingApproval] = useState(false);\n const [completeModalOpen, setCompleteModalOpen] = useState(false);\n\n const tagRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [tooltipStyle, setTooltipStyle] = useState<React.CSSProperties>({});\n const [dropdownStyle, setDropdownStyle] = useState<React.CSSProperties>({});\n\n // Close dropdown on click outside\n useEffect(() => {\n if (!dropdownOpen) return;\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n tagRef.current && !tagRef.current.contains(target) &&\n (!dropdownRef.current || !dropdownRef.current.contains(target))\n ) {\n setDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [dropdownOpen]);\n\n // API client\n const getClient = useCallback((): DevicApiClient | null => {\n if (!resolvedApiKey) return null;\n return new DevicApiClient({ apiKey: resolvedApiKey, baseUrl: resolvedBaseUrl });\n }, [resolvedApiKey, resolvedBaseUrl]);\n\n // Config\n const config = getStateConfig(state, subthreadCount);\n\n if (!state) {\n return <span className=\"devic-state-tag\" data-color=\"default\">Unknown</span>;\n }\n\n // Icon\n const renderIcon = () => {\n if (!showIcon) return null;\n if (customIcon) return <span className=\"devic-state-tag-icon\">{customIcon}</span>;\n const icon = <StateIcon iconType={config.iconType} />;\n return icon ? <span className=\"devic-state-tag-icon\">{icon}</span> : null;\n };\n\n // Tooltip content\n const getTooltipContent = (): string | null => {\n switch (state) {\n case AgentThreadState.PAUSED_FOR_APPROVAL:\n return 'Agent is waiting for approval to resume execution';\n case AgentThreadState.PAUSED_FOR_RESUME:\n if (pauseUntil) {\n const timeDiff = new Date(pauseUntil).getTime() - Date.now();\n const hours = Math.floor(timeDiff / 3600000);\n const minutes = Math.floor(timeDiff / 60000);\n const timeStr = hours > 0 ? `${hours} hours` : `${minutes} minutes`;\n return `Agent paused, will resume at ${new Date(pauseUntil).toLocaleString()} (${timeStr})`;\n }\n return 'Agent paused, will resume at a scheduled time';\n case AgentThreadState.WAITING_FOR_RESPONSE:\n return pausedReason || 'Agent is waiting for response';\n case AgentThreadState.COMPLETED:\n case AgentThreadState.FAILED:\n case AgentThreadState.TERMINATED:\n return finishReason || 'Manually finished thread';\n case AgentThreadState.APPROVAL_REJECTED:\n return approvalRejectedMessage || 'Approval was rejected';\n case AgentThreadState.GUARDRAIL_TRIGGER:\n return 'Agent execution paused due to guardrail trigger';\n default:\n return null;\n }\n };\n\n // Handlers\n const handleExplain = async () => {\n setDropdownOpen(false);\n setExplainModalOpen(true);\n setIsLoadingExplanation(true);\n setThreadExplanation(null);\n\n const client = getClient();\n if (!client) {\n setThreadExplanation('API key not configured.');\n setIsLoadingExplanation(false);\n return;\n }\n\n try {\n const explanation = await client.explainAgentThread(threadId);\n setThreadExplanation(explanation);\n } catch {\n setThreadExplanation('Could not obtain the thread explanation.');\n } finally {\n setIsLoadingExplanation(false);\n }\n };\n\n const handlePause = async () => {\n const client = getClient();\n if (!client) return;\n try {\n await client.pauseResumeThread(threadId, 'paused');\n setPauseModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error pausing thread:', err);\n }\n };\n\n const handleResume = async () => {\n const client = getClient();\n if (!client) return;\n try {\n await client.pauseResumeThread(threadId, 'queued');\n setResumeModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error resuming thread:', err);\n }\n };\n\n const handleApproval = async (action: 'approved' | 'rejected', retry: boolean, message?: string) => {\n const client = getClient();\n if (!client) return;\n setIsLoadingApproval(true);\n try {\n await client.handleThreadApproval(threadId, action === 'approved', retry, message || '');\n setReviewModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error handling thread approval:', err);\n } finally {\n setIsLoadingApproval(false);\n }\n };\n\n const handleComplete = async (completionState: string) => {\n const client = getClient();\n if (!client) return;\n try {\n await client.completeThread(threadId, completionState);\n setCompleteModalOpen(false);\n onActionComplete?.();\n } catch (err) {\n console.error('Error completing thread:', err);\n }\n };\n\n // Build dropdown items\n const dropdownItems: Array<{ key: string; icon: React.ReactNode; label: string; onClick: () => void }> = [];\n\n if (showAdminActions && [AgentThreadState.PROCESSING, AgentThreadState.QUEUED, AgentThreadState.WAITING_FOR_RESPONSE].includes(state as AgentThreadState)) {\n dropdownItems.push({\n key: 'complete',\n icon: <WrenchIcon />,\n label: 'Complete manually',\n onClick: () => { setDropdownOpen(false); setCompleteModalOpen(true); },\n });\n }\n\n if (state === AgentThreadState.QUEUED) {\n dropdownItems.push({\n key: 'pause',\n icon: <PauseIcon />,\n label: 'Pause',\n onClick: () => { setDropdownOpen(false); setPauseModalOpen(true); },\n });\n }\n\n if (state === AgentThreadState.PAUSED || state === AgentThreadState.PAUSED_FOR_RESUME) {\n dropdownItems.push({\n key: 'resume',\n icon: <PlayIcon />,\n label: 'Resume',\n onClick: () => { setDropdownOpen(false); setResumeModalOpen(true); },\n });\n }\n\n if (state === AgentThreadState.PAUSED_FOR_APPROVAL) {\n dropdownItems.push({\n key: 'review',\n icon: <EyeIcon />,\n label: 'Review',\n onClick: () => { setDropdownOpen(false); setReviewModalOpen(true); },\n });\n }\n\n dropdownItems.push({\n key: 'explain',\n icon: <LightbulbIcon />,\n label: 'Explain thread...',\n onClick: handleExplain,\n });\n\n const canInteract = interactive && threadId;\n const tooltipContent = getTooltipContent();\n\n return (\n <>\n <div\n ref={tagRef}\n className=\"devic-state-tag\"\n data-color={config.color}\n data-interactive={String(!!canInteract)}\n data-dropdown-open={String(dropdownOpen)}\n onClick={canInteract ? () => {\n if (!dropdownOpen) {\n const rect = tagRef.current?.getBoundingClientRect();\n if (rect) {\n setDropdownStyle({\n position: 'fixed',\n top: rect.bottom + 4,\n right: window.innerWidth - rect.right,\n });\n }\n }\n setDropdownOpen(!dropdownOpen);\n } : undefined}\n onMouseEnter={() => {\n if (!dropdownOpen && tooltipContent) {\n const rect = tagRef.current?.getBoundingClientRect();\n if (rect) {\n setTooltipStyle({\n position: 'fixed',\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n transform: 'translate(-50%, -100%)',\n });\n }\n setShowTooltip(true);\n }\n }}\n onMouseLeave={() => setShowTooltip(false)}\n >\n {renderIcon()}\n {config.text}\n {canInteract && (\n <span className=\"devic-state-tag-caret\">\n <CaretDownIcon />\n </span>\n )}\n\n </div>\n\n {/* Tooltip - portal to escape overflow/transform containers */}\n {showTooltip && tooltipContent && !dropdownOpen && createPortal(\n <div className=\"devic-state-tooltip-portal\" style={tooltipStyle}>{tooltipContent}</div>,\n document.body\n )}\n\n {/* Dropdown - portal to escape overflow/transform containers */}\n {dropdownOpen && canInteract && createPortal(\n <div ref={dropdownRef} className=\"devic-state-dropdown-portal\" style={dropdownStyle}>\n {dropdownItems.map((item) => (\n <button\n key={item.key}\n className=\"devic-state-dropdown-item\"\n onClick={(e) => { e.stopPropagation(); item.onClick(); }}\n type=\"button\"\n >\n <span className=\"devic-state-dropdown-item-icon\">{item.icon}</span>\n {item.label}\n </button>\n ))}\n </div>,\n document.body\n )}\n\n {/* Modals */}\n <ExplainModal\n open={explainModalOpen}\n onClose={() => setExplainModalOpen(false)}\n explanation={threadExplanation}\n isLoading={isLoadingExplanation}\n agentName={agentName}\n />\n\n <CompleteModal\n open={completeModalOpen}\n onClose={() => setCompleteModalOpen(false)}\n onComplete={handleComplete}\n />\n\n <ConfirmModal\n open={pauseModalOpen}\n onClose={() => setPauseModalOpen(false)}\n onConfirm={handlePause}\n title=\"Pause Thread\"\n icon={<PauseIcon />}\n message=\"You are about to pause this queued thread. It can be resumed later.\"\n confirmText=\"Pause\"\n />\n\n <ConfirmModal\n open={resumeModalOpen}\n onClose={() => setResumeModalOpen(false)}\n onConfirm={handleResume}\n title=\"Resume Thread\"\n icon={<PlayIcon />}\n message=\"You are about to resume this thread. It will go back to the queue and be processed when possible.\"\n confirmText=\"Resume\"\n />\n\n <ApprovalModal\n open={reviewModalOpen}\n onClose={() => setReviewModalOpen(false)}\n onApprove={handleApproval}\n isLoading={isLoadingApproval}\n pausedReason={pausedReason}\n />\n </>\n );\n}\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|