@aigentyc/chat-sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/JsonRenderResult-Ftw4AKwb.d.cts +18 -0
- package/dist/JsonRenderResult-Ftw4AKwb.d.ts +18 -0
- package/dist/JsonRenderResult-GQOYPLVH.cjs +15 -0
- package/dist/JsonRenderResult-GQOYPLVH.cjs.map +1 -0
- package/dist/JsonRenderResult-ZFJ6VWMS.js +6 -0
- package/dist/JsonRenderResult-ZFJ6VWMS.js.map +1 -0
- package/dist/SlotsContext-CBtt36al.d.ts +148 -0
- package/dist/SlotsContext-CHvISDJT.d.cts +148 -0
- package/dist/VisualizationRenderer-FNFYNN66.js +5 -0
- package/dist/VisualizationRenderer-FNFYNN66.js.map +1 -0
- package/dist/VisualizationRenderer-VKMZXRUX.cjs +20 -0
- package/dist/VisualizationRenderer-VKMZXRUX.cjs.map +1 -0
- package/dist/ai-elements.cjs +4608 -0
- package/dist/ai-elements.cjs.map +1 -0
- package/dist/ai-elements.d.cts +897 -0
- package/dist/ai-elements.d.ts +897 -0
- package/dist/ai-elements.js +4363 -0
- package/dist/ai-elements.js.map +1 -0
- package/dist/chunk-3MP2EGEJ.cjs +270 -0
- package/dist/chunk-3MP2EGEJ.cjs.map +1 -0
- package/dist/chunk-3RW7O444.js +26 -0
- package/dist/chunk-3RW7O444.js.map +1 -0
- package/dist/chunk-42ARGQXE.js +51 -0
- package/dist/chunk-42ARGQXE.js.map +1 -0
- package/dist/chunk-4FBVV64J.js +257 -0
- package/dist/chunk-4FBVV64J.js.map +1 -0
- package/dist/chunk-4QT25AXI.js +21 -0
- package/dist/chunk-4QT25AXI.js.map +1 -0
- package/dist/chunk-525KS5HM.cjs +30 -0
- package/dist/chunk-525KS5HM.cjs.map +1 -0
- package/dist/chunk-5F3O3ZJH.js +299 -0
- package/dist/chunk-5F3O3ZJH.js.map +1 -0
- package/dist/chunk-5QSXB6UL.cjs +259 -0
- package/dist/chunk-5QSXB6UL.cjs.map +1 -0
- package/dist/chunk-5T4FJ2SR.js +664 -0
- package/dist/chunk-5T4FJ2SR.js.map +1 -0
- package/dist/chunk-7BNYTOTE.cjs +67 -0
- package/dist/chunk-7BNYTOTE.cjs.map +1 -0
- package/dist/chunk-AWAJOSFP.cjs +96 -0
- package/dist/chunk-AWAJOSFP.cjs.map +1 -0
- package/dist/chunk-BKDV2H6Z.js +224 -0
- package/dist/chunk-BKDV2H6Z.js.map +1 -0
- package/dist/chunk-FQN6OBGN.cjs +171 -0
- package/dist/chunk-FQN6OBGN.cjs.map +1 -0
- package/dist/chunk-FYPJSHCL.js +190 -0
- package/dist/chunk-FYPJSHCL.js.map +1 -0
- package/dist/chunk-J2H6MLQF.cjs +680 -0
- package/dist/chunk-J2H6MLQF.cjs.map +1 -0
- package/dist/chunk-J2K7EJYP.cjs +198 -0
- package/dist/chunk-J2K7EJYP.cjs.map +1 -0
- package/dist/chunk-JI5KCSOI.cjs +23 -0
- package/dist/chunk-JI5KCSOI.cjs.map +1 -0
- package/dist/chunk-JOO6C3XT.cjs +44 -0
- package/dist/chunk-JOO6C3XT.cjs.map +1 -0
- package/dist/chunk-KBGPBUTI.cjs +78 -0
- package/dist/chunk-KBGPBUTI.cjs.map +1 -0
- package/dist/chunk-MT2AMINB.js +75 -0
- package/dist/chunk-MT2AMINB.js.map +1 -0
- package/dist/chunk-MZQKGNWF.js +4 -0
- package/dist/chunk-MZQKGNWF.js.map +1 -0
- package/dist/chunk-NG7OTWXQ.cjs +226 -0
- package/dist/chunk-NG7OTWXQ.cjs.map +1 -0
- package/dist/chunk-NPJKLYLV.js +68 -0
- package/dist/chunk-NPJKLYLV.js.map +1 -0
- package/dist/chunk-NW2ESHRV.js +685 -0
- package/dist/chunk-NW2ESHRV.js.map +1 -0
- package/dist/chunk-NWF735F5.js +1631 -0
- package/dist/chunk-NWF735F5.js.map +1 -0
- package/dist/chunk-NYQSM3EB.cjs +305 -0
- package/dist/chunk-NYQSM3EB.cjs.map +1 -0
- package/dist/chunk-OU7OROOE.cjs +1643 -0
- package/dist/chunk-OU7OROOE.cjs.map +1 -0
- package/dist/chunk-PS3U7T37.js +42 -0
- package/dist/chunk-PS3U7T37.js.map +1 -0
- package/dist/chunk-Q7T3VAJV.cjs +687 -0
- package/dist/chunk-Q7T3VAJV.cjs.map +1 -0
- package/dist/chunk-QYCEHFAB.js +265 -0
- package/dist/chunk-QYCEHFAB.js.map +1 -0
- package/dist/chunk-RPDJXB3U.js +676 -0
- package/dist/chunk-RPDJXB3U.js.map +1 -0
- package/dist/chunk-UKEL7FWS.js +64 -0
- package/dist/chunk-UKEL7FWS.js.map +1 -0
- package/dist/chunk-VS3NZ7FX.js +164 -0
- package/dist/chunk-VS3NZ7FX.js.map +1 -0
- package/dist/chunk-WZLWAVSS.cjs +73 -0
- package/dist/chunk-WZLWAVSS.cjs.map +1 -0
- package/dist/chunk-X5YEOOPK.cjs +758 -0
- package/dist/chunk-X5YEOOPK.cjs.map +1 -0
- package/dist/chunk-X7R334SB.cjs +5 -0
- package/dist/chunk-X7R334SB.cjs.map +1 -0
- package/dist/chunk-XXNDL5SJ.cjs +432 -0
- package/dist/chunk-XXNDL5SJ.cjs.map +1 -0
- package/dist/chunk-YQELMJW5.js +429 -0
- package/dist/chunk-YQELMJW5.js.map +1 -0
- package/dist/components.cjs +551 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.d.cts +181 -0
- package/dist/components.d.ts +181 -0
- package/dist/components.js +483 -0
- package/dist/components.js.map +1 -0
- package/dist/core.cjs +283 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +455 -0
- package/dist/core.d.ts +455 -0
- package/dist/core.js +241 -0
- package/dist/core.js.map +1 -0
- package/dist/hooks.cjs +324 -0
- package/dist/hooks.cjs.map +1 -0
- package/dist/hooks.d.cts +163 -0
- package/dist/hooks.d.ts +163 -0
- package/dist/hooks.js +277 -0
- package/dist/hooks.js.map +1 -0
- package/dist/i18n.cjs +26 -0
- package/dist/i18n.cjs.map +1 -0
- package/dist/i18n.d.cts +50 -0
- package/dist/i18n.d.ts +50 -0
- package/dist/i18n.js +5 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.cjs +466 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +80 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.js +438 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction-tracker-D9P1Oq4j.d.cts +83 -0
- package/dist/interaction-tracker-D9P1Oq4j.d.ts +83 -0
- package/dist/json-render.cjs +23 -0
- package/dist/json-render.cjs.map +1 -0
- package/dist/json-render.d.cts +857 -0
- package/dist/json-render.d.ts +857 -0
- package/dist/json-render.js +6 -0
- package/dist/json-render.js.map +1 -0
- package/dist/live-chat-transport-4XLOIPOE.js +4 -0
- package/dist/live-chat-transport-4XLOIPOE.js.map +1 -0
- package/dist/live-chat-transport-ALVRGWX7.cjs +13 -0
- package/dist/live-chat-transport-ALVRGWX7.cjs.map +1 -0
- package/dist/select-B4l9yoyn.d.cts +99 -0
- package/dist/select-B4l9yoyn.d.ts +99 -0
- package/dist/styles.css +2 -0
- package/dist/theme.cjs +18 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +55 -0
- package/dist/theme.d.ts +55 -0
- package/dist/theme.js +5 -0
- package/dist/theme.js.map +1 -0
- package/dist/tools.cjs +32 -0
- package/dist/tools.cjs.map +1 -0
- package/dist/tools.d.cts +117 -0
- package/dist/tools.d.ts +117 -0
- package/dist/tools.js +11 -0
- package/dist/tools.js.map +1 -0
- package/dist/types-DKJ_-nbG.d.cts +349 -0
- package/dist/types-DKJ_-nbG.d.ts +349 -0
- package/dist/ui.cjs +667 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.d.cts +95 -0
- package/dist/ui.d.ts +95 -0
- package/dist/ui.js +414 -0
- package/dist/ui.js.map +1 -0
- package/package.json +255 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/LiveChatProvider.tsx","../src/providers/PreviewEmbedProvider.tsx","../src/hooks/use-mobile.ts"],"names":["createContext","useState","useCallback","useMemo","jsx","useContext","useRef","useEffect"],"mappings":"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","file":"chunk-5F3O3ZJH.js","sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport type {\n LiveChatState,\n LiveChatMessage,\n} from \"../core/types\";\nimport { LiveChatTransport } from \"../core/live-chat-transport\";\nimport type { LiveChatConfig as LiveChatTransportConfig } from \"../core/live-chat-transport\";\n\ninterface LiveChatContextValue {\n /** Current live chat state machine state. */\n state: LiveChatState;\n /** Live chat messages. */\n messages: LiveChatMessage[];\n /** Name of the connected operator. */\n operatorName: string;\n /** Current position in queue. */\n queuePosition: number;\n /** Whether to show the visitor identity form. */\n showIdentityForm: boolean;\n /** Initiate a live chat session. */\n initiate: (visitorName?: string, visitorEmail?: string) => Promise<void>;\n /** Send a message in live chat. */\n send: (content: string) => void;\n /** End the live chat session. */\n end: () => void;\n /** Cancel a pending live chat request. */\n cancel: () => void;\n /** Submit a satisfaction rating. */\n submitRating: (rating: \"positive\" | \"negative\", comment?: string) => void;\n /** Return to AI chat mode. */\n returnToAI: () => void;\n /** Request manual handoff (shows identity form). */\n requestManualHandoff: () => void;\n /** Control identity form visibility. */\n setShowIdentityForm: (show: boolean) => void;\n /** Register a getter for AI chat history (used for context handoff). */\n registerAiHistoryGetter: (\n getter: () => Array<{ role: string; content: string }>\n ) => void;\n /** Pre-filled user info. */\n userInfo?: { name?: string; email?: string } | null;\n}\n\nconst LiveChatContext = createContext<LiveChatContextValue | null>(null);\n\n/** Props for the LiveChatProvider. */\nexport interface LiveChatProviderProps {\n children: ReactNode;\n /** Chat service WebSocket URL. */\n chatServiceUrl: string;\n /** API key for authentication. */\n apiKey: string;\n /** Project identifier. */\n projectId: string;\n /** Visitor session ID (typically the AI chat session). */\n sessionId: string;\n /** Pre-filled user info. */\n userInfo?: { name?: string; email?: string } | null;\n}\n\n/**\n * Provides live chat functionality with operators.\n * Manages a state machine: \"ai\" -> \"requesting\" -> \"queued\" -> \"live\" -> \"ended\".\n * Uses a Socket.IO transport that is lazily loaded.\n */\nexport function LiveChatProvider({\n children,\n chatServiceUrl,\n apiKey,\n projectId,\n sessionId,\n userInfo,\n}: LiveChatProviderProps) {\n const [state, setState] = useState<LiveChatState>(\"ai\");\n const [messages, setMessages] = useState<LiveChatMessage[]>([]);\n const [operatorName, setOperatorName] = useState(\"\");\n const [queuePosition, setQueuePosition] = useState(0);\n const [showIdentityForm, setShowIdentityForm] = useState(false);\n const transportRef = useRef<any>(null);\n const aiHistoryGetterRef = useRef<\n (() => Array<{ role: string; content: string }>) | null\n >(null);\n\n const STORAGE_KEY = `livechat-session-${projectId}`;\n\n const registerAiHistoryGetter = useCallback(\n (getter: () => Array<{ role: string; content: string }>) => {\n aiHistoryGetterRef.current = getter;\n },\n []\n );\n\n const resetState = useCallback(() => {\n transportRef.current?.disconnect?.();\n transportRef.current = null;\n setState(\"ai\");\n setMessages([]);\n setOperatorName(\"\");\n setQueuePosition(0);\n setShowIdentityForm(false);\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // Ignore.\n }\n }\n }, [STORAGE_KEY]);\n\n const persistSession = useCallback(\n (liveChatSessionId: string) => {\n if (typeof window === \"undefined\") return;\n try {\n sessionStorage.setItem(STORAGE_KEY, liveChatSessionId);\n } catch {\n // Ignore.\n }\n },\n [STORAGE_KEY]\n );\n\n /** Attach standard event listeners to a transport instance. */\n const attachListeners = useCallback(\n (transport: any) => {\n transport.on(\"state-change\", setState);\n transport.on(\"queued\", (data: any) => {\n setQueuePosition(data.position);\n if (data.liveChatSessionId) persistSession(data.liveChatSessionId);\n });\n transport.on(\"queue-update\", (data: any) =>\n setQueuePosition(data.position)\n );\n transport.on(\"accepted\", (data: any) =>\n setOperatorName(data.operatorName)\n );\n transport.on(\"message\", (data: LiveChatMessage) =>\n setMessages((prev) => [...prev, data])\n );\n transport.on(\"system\", (data: any) => {\n setMessages((prev) => [\n ...prev,\n {\n id: Date.now(),\n content: data.message,\n senderType: \"system\" as const,\n timestamp: new Date().toISOString(),\n systemMessageType: data.type,\n },\n ]);\n });\n transport.on(\"ended\", () => setState(\"ended\"));\n transport.on(\"handback-ai\", () => resetState());\n },\n [persistSession, resetState]\n );\n\n // Attempt to rejoin on mount if there's a stored session\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n let cancelled = false;\n\n const storedSessionId = (() => {\n try {\n return sessionStorage.getItem(STORAGE_KEY);\n } catch {\n return null;\n }\n })();\n\n if (!storedSessionId || transportRef.current) return;\n\n async function rejoin() {\n // Dynamically import the transport to avoid bundling Socket.IO unconditionally\n const { LiveChatTransport } = await import(\"../core/live-chat-transport\");\n if (cancelled || !LiveChatTransport) return;\n\n const transportConfig: LiveChatTransportConfig = {\n chatServiceUrl,\n apiKey,\n projectId,\n visitorSessionId: sessionId,\n };\n\n const transport = new (LiveChatTransport as any)(transportConfig);\n attachListeners(transport);\n\n transport.on(\"rejoin-success\", (data: any) => {\n if (cancelled) return;\n if (data.state === \"live\") {\n setState(\"live\");\n setOperatorName(data.operatorName || \"Operator\");\n } else if (data.state === \"queued\") {\n setState(\"queued\");\n setQueuePosition(data.position || 1);\n }\n if (data.messages?.length) {\n setMessages(data.messages);\n }\n });\n\n transport.on(\"rejoin-failed\", () => {\n if (cancelled) return;\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // Ignore.\n }\n }\n transport.disconnect?.();\n transportRef.current = null;\n });\n\n transportRef.current = transport;\n await transport.connect();\n transport.rejoinSession(storedSessionId!);\n }\n\n rejoin().catch(() => {\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // Ignore.\n }\n }\n });\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const initiate = useCallback(\n async (visitorName?: string, visitorEmail?: string) => {\n if (transportRef.current) return;\n\n try {\n const { LiveChatTransport } = await import(\"../core/live-chat-transport\");\n if (!LiveChatTransport) {\n console.error(\"[LiveChat] LiveChatTransport not available\");\n return;\n }\n\n const transportConfig: LiveChatTransportConfig = {\n chatServiceUrl,\n apiKey,\n projectId,\n visitorSessionId: sessionId,\n };\n\n const transport = new (LiveChatTransport as any)(transportConfig);\n attachListeners(transport);\n\n transportRef.current = transport;\n await transport.connect();\n\n transport.requestHandoff({\n visitorName,\n visitorEmail,\n aiChatHistory: aiHistoryGetterRef.current?.() || [],\n });\n } catch (error) {\n console.error(\"[LiveChat] Failed to initiate:\", error);\n setState(\"ai\");\n }\n },\n [chatServiceUrl, apiKey, projectId, sessionId, attachListeners]\n );\n\n const cancel = useCallback(() => {\n const sid = transportRef.current?.getSessionId?.();\n if (sid) transportRef.current?.cancelRequest?.(sid);\n resetState();\n }, [resetState]);\n\n const end = useCallback(() => {\n transportRef.current?.endChat?.();\n }, []);\n\n const send = useCallback((content: string) => {\n if (!content.trim()) return;\n transportRef.current?.sendMessage?.(content);\n setMessages((prev) => [\n ...prev,\n {\n id: Date.now(),\n content,\n senderType: \"visitor\" as const,\n timestamp: new Date().toISOString(),\n },\n ]);\n }, []);\n\n const submitRating = useCallback(\n (rating: \"positive\" | \"negative\", comment?: string) => {\n transportRef.current?.submitRating?.(rating, comment);\n },\n []\n );\n\n const returnToAI = useCallback(() => {\n resetState();\n }, [resetState]);\n\n const requestManualHandoff = useCallback(() => {\n setShowIdentityForm(true);\n }, []);\n\n const value = useMemo<LiveChatContextValue>(\n () => ({\n state,\n messages,\n operatorName,\n queuePosition,\n showIdentityForm,\n initiate,\n send,\n end,\n cancel,\n submitRating,\n returnToAI,\n requestManualHandoff,\n setShowIdentityForm,\n registerAiHistoryGetter,\n userInfo,\n }),\n [\n state,\n messages,\n operatorName,\n queuePosition,\n showIdentityForm,\n initiate,\n send,\n end,\n cancel,\n submitRating,\n returnToAI,\n requestManualHandoff,\n registerAiHistoryGetter,\n userInfo,\n ]\n );\n\n return (\n <LiveChatContext.Provider value={value}>{children}</LiveChatContext.Provider>\n );\n}\n\n/**\n * Returns the live chat context, or `null` if not within a LiveChatProvider.\n *\n * Live chat is opt-in (`enableLiveChat` on `ChatProvider`), so components that\n * optionally show live-chat UI should handle the null case gracefully.\n */\nexport function useLiveChat(): LiveChatContextValue | null {\n return useContext(LiveChatContext);\n}\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n type ReactNode,\n} from \"react\";\n\n/** Information about a preview to display in an embedded panel. */\nexport interface PreviewInfo {\n /** URL to preview. */\n url: string;\n /** Optional title for the preview. */\n title?: string;\n /** Optional description for the preview. */\n description?: string;\n}\n\ninterface PreviewEmbedContextValue {\n /** Current preview info, or null if no preview is active. */\n preview: PreviewInfo | null;\n /** Open a preview panel with the given info. */\n openPreview: (info: PreviewInfo) => void;\n /** Close the active preview panel. */\n closePreview: () => void;\n}\n\nconst PreviewEmbedContext = createContext<PreviewEmbedContextValue | null>(null);\n\n/** Props for the PreviewEmbedProvider. */\nexport interface PreviewEmbedProviderProps {\n children: ReactNode;\n}\n\n/**\n * Provides state for an embedded preview panel (e.g. in-chat link previews).\n */\nexport function PreviewEmbedProvider({ children }: PreviewEmbedProviderProps) {\n const [preview, setPreview] = useState<PreviewInfo | null>(null);\n\n const openPreview = useCallback(\n (info: PreviewInfo) => setPreview(info),\n []\n );\n\n const closePreview = useCallback(() => setPreview(null), []);\n\n const value = useMemo<PreviewEmbedContextValue>(\n () => ({ preview, openPreview, closePreview }),\n [preview, openPreview, closePreview]\n );\n\n return (\n <PreviewEmbedContext.Provider value={value}>\n {children}\n </PreviewEmbedContext.Provider>\n );\n}\n\n/**\n * Returns the preview embed context.\n * Returns null if used outside a PreviewEmbedProvider (non-throwing for optional usage).\n */\nexport function usePreviewEmbed(): PreviewEmbedContextValue | null {\n return useContext(PreviewEmbedContext);\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef } from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\n/** Get initial mobile state with SSR guard. */\nconst getIsMobile = () =>\n typeof window !== \"undefined\" && window.innerWidth < MOBILE_BREAKPOINT;\n\n/**\n * Detects whether the viewport is mobile-sized.\n * Ignores height-only changes (e.g. virtual keyboard) and only reacts\n * when width actually crosses the breakpoint.\n *\n * SSR-safe: returns false during server rendering.\n */\nexport function useIsMobile(): boolean {\n const [isMobile, setIsMobile] = useState<boolean>(getIsMobile);\n const initialWidthRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (initialWidthRef.current === null) {\n initialWidthRef.current = window.innerWidth;\n }\n\n const checkMobile = () => {\n const currentWidth = window.innerWidth;\n const widthCrossedBreakpoint =\n currentWidth < MOBILE_BREAKPOINT !==\n initialWidthRef.current! < MOBILE_BREAKPOINT ||\n Math.abs(currentWidth - initialWidthRef.current!) > 100;\n\n if (widthCrossedBreakpoint) {\n initialWidthRef.current = currentWidth;\n setIsMobile(currentWidth < MOBILE_BREAKPOINT);\n }\n };\n\n window.addEventListener(\"resize\", checkMobile);\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n return isMobile;\n}\n\nexport default useIsMobile;\n"]}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkNG7OTWXQ_cjs = require('./chunk-NG7OTWXQ.cjs');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var react$1 = require('@ai-sdk/react');
|
|
7
|
+
var ai = require('ai');
|
|
8
|
+
|
|
9
|
+
var SESSION_KEY_PREFIX = "aigentyc-session-";
|
|
10
|
+
var MESSAGE_KEY_PREFIX = "aigentyc-messages-";
|
|
11
|
+
function getOrCreateSessionId(projectId) {
|
|
12
|
+
if (typeof window === "undefined") return crypto.randomUUID();
|
|
13
|
+
const key = SESSION_KEY_PREFIX + projectId;
|
|
14
|
+
try {
|
|
15
|
+
const stored = sessionStorage.getItem(key);
|
|
16
|
+
if (stored) return stored;
|
|
17
|
+
const id = crypto.randomUUID();
|
|
18
|
+
sessionStorage.setItem(key, id);
|
|
19
|
+
return id;
|
|
20
|
+
} catch {
|
|
21
|
+
return crypto.randomUUID();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function loadPersistedMessages(projectId) {
|
|
25
|
+
if (typeof window === "undefined") return [];
|
|
26
|
+
try {
|
|
27
|
+
const raw = localStorage.getItem(MESSAGE_KEY_PREFIX + projectId);
|
|
28
|
+
return raw ? JSON.parse(raw) : [];
|
|
29
|
+
} catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function persistMessages(projectId, messages) {
|
|
34
|
+
if (typeof window === "undefined") return;
|
|
35
|
+
try {
|
|
36
|
+
localStorage.setItem(MESSAGE_KEY_PREFIX + projectId, JSON.stringify(messages));
|
|
37
|
+
} catch {
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function clearPersistedMessages(projectId) {
|
|
41
|
+
if (typeof window === "undefined") return;
|
|
42
|
+
try {
|
|
43
|
+
localStorage.removeItem(MESSAGE_KEY_PREFIX + projectId);
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
var CALLBACK_KEYS = [
|
|
48
|
+
"onReady",
|
|
49
|
+
"onSessionStart",
|
|
50
|
+
"onSessionRestore",
|
|
51
|
+
"onMessageSent",
|
|
52
|
+
"onMessageReceived",
|
|
53
|
+
"onStreamStart",
|
|
54
|
+
"onStreamEnd",
|
|
55
|
+
"onToolCall",
|
|
56
|
+
"onToolResult",
|
|
57
|
+
"onToolAction",
|
|
58
|
+
"onLiveChatRequested",
|
|
59
|
+
"onLiveChatConnected",
|
|
60
|
+
"onLiveChatEnded",
|
|
61
|
+
"onError",
|
|
62
|
+
"onInteraction"
|
|
63
|
+
];
|
|
64
|
+
function pickCallbacks(opts) {
|
|
65
|
+
const out = {};
|
|
66
|
+
for (const key of CALLBACK_KEYS) {
|
|
67
|
+
if (opts[key] !== void 0) out[key] = opts[key];
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
function useAigentycChat(options) {
|
|
72
|
+
const {
|
|
73
|
+
projectId,
|
|
74
|
+
apiEndpoint,
|
|
75
|
+
apiKey,
|
|
76
|
+
enableLiveChat = false,
|
|
77
|
+
chatServiceUrl,
|
|
78
|
+
persistMessages: shouldPersist = true
|
|
79
|
+
} = options;
|
|
80
|
+
const callbacks = pickCallbacks(options);
|
|
81
|
+
const callbacksRef = react.useRef(callbacks);
|
|
82
|
+
callbacksRef.current = callbacks;
|
|
83
|
+
const safeProjectId = projectId || "default";
|
|
84
|
+
const [sessionId, setSessionId] = react.useState(() => getOrCreateSessionId(safeProjectId));
|
|
85
|
+
const chatRef = react.useRef(null);
|
|
86
|
+
const initialMessages = react.useMemo(
|
|
87
|
+
() => shouldPersist ? loadPersistedMessages(safeProjectId) : [],
|
|
88
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89
|
+
[]
|
|
90
|
+
);
|
|
91
|
+
const transport = react.useMemo(
|
|
92
|
+
() => new ai.DefaultChatTransport({
|
|
93
|
+
api: `${apiEndpoint || ""}/api/kb/chat`,
|
|
94
|
+
headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : void 0,
|
|
95
|
+
body: { projectId: safeProjectId, sessionId }
|
|
96
|
+
}),
|
|
97
|
+
[apiEndpoint, apiKey, safeProjectId, sessionId]
|
|
98
|
+
);
|
|
99
|
+
const {
|
|
100
|
+
messages,
|
|
101
|
+
sendMessage: sdkSendMessage,
|
|
102
|
+
status: sdkStatus,
|
|
103
|
+
error,
|
|
104
|
+
stop,
|
|
105
|
+
setMessages
|
|
106
|
+
} = react$1.useChat({
|
|
107
|
+
id: sessionId,
|
|
108
|
+
messages: initialMessages,
|
|
109
|
+
transport,
|
|
110
|
+
onFinish: (message) => {
|
|
111
|
+
callbacksRef.current?.onMessageReceived?.(message);
|
|
112
|
+
},
|
|
113
|
+
onError: (err) => {
|
|
114
|
+
callbacksRef.current?.onError?.(err);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
const status = error ? "error" : sdkStatus === "streaming" || sdkStatus === "submitted" ? "streaming" : "idle";
|
|
118
|
+
react.useEffect(() => {
|
|
119
|
+
if (shouldPersist) persistMessages(safeProjectId, messages);
|
|
120
|
+
}, [messages, safeProjectId, shouldPersist]);
|
|
121
|
+
const activeTools = react.useMemo(() => {
|
|
122
|
+
if (messages.length === 0) return [];
|
|
123
|
+
const last = messages[messages.length - 1];
|
|
124
|
+
if (last.role !== "assistant" || !Array.isArray(last.parts)) return [];
|
|
125
|
+
return last.parts.filter((p) => typeof p.type === "string" && p.type.startsWith("tool-")).map((p) => ({
|
|
126
|
+
toolName: p.toolName || p.type.replace("tool-", ""),
|
|
127
|
+
state: p.state || "output-available",
|
|
128
|
+
args: p.args || {},
|
|
129
|
+
result: p.result,
|
|
130
|
+
renderMode: p.renderMode || "inline"
|
|
131
|
+
}));
|
|
132
|
+
}, [messages]);
|
|
133
|
+
const sendMessage = react.useCallback(
|
|
134
|
+
(content) => {
|
|
135
|
+
if (!content.trim()) return;
|
|
136
|
+
callbacksRef.current?.onMessageSent?.({
|
|
137
|
+
id: crypto.randomUUID(),
|
|
138
|
+
role: "user",
|
|
139
|
+
content
|
|
140
|
+
});
|
|
141
|
+
sdkSendMessage({ text: content });
|
|
142
|
+
},
|
|
143
|
+
[sdkSendMessage]
|
|
144
|
+
);
|
|
145
|
+
const stopGeneration = react.useCallback(() => stop(), [stop]);
|
|
146
|
+
const newConversation = react.useCallback(() => {
|
|
147
|
+
setMessages([]);
|
|
148
|
+
clearPersistedMessages(safeProjectId);
|
|
149
|
+
if (typeof window !== "undefined") {
|
|
150
|
+
try {
|
|
151
|
+
sessionStorage.removeItem(SESSION_KEY_PREFIX + safeProjectId);
|
|
152
|
+
} catch {
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
setSessionId(getOrCreateSessionId(safeProjectId));
|
|
156
|
+
}, [safeProjectId, setMessages]);
|
|
157
|
+
const clearMessages = react.useCallback(() => {
|
|
158
|
+
setMessages([]);
|
|
159
|
+
clearPersistedMessages(safeProjectId);
|
|
160
|
+
}, [safeProjectId, setMessages]);
|
|
161
|
+
const [lcState, setLcState] = react.useState("ai");
|
|
162
|
+
const [lcMessages, setLcMessages] = react.useState([]);
|
|
163
|
+
const [lcOperator, setLcOperator] = react.useState("");
|
|
164
|
+
const [lcQueue, setLcQueue] = react.useState(0);
|
|
165
|
+
const [lcShowIdentity, setLcShowIdentity] = react.useState(false);
|
|
166
|
+
const lcTransportRef = react.useRef(null);
|
|
167
|
+
const lcResetState = react.useCallback(() => {
|
|
168
|
+
lcTransportRef.current?.disconnect?.();
|
|
169
|
+
lcTransportRef.current = null;
|
|
170
|
+
setLcState("ai");
|
|
171
|
+
setLcMessages([]);
|
|
172
|
+
setLcOperator("");
|
|
173
|
+
setLcQueue(0);
|
|
174
|
+
setLcShowIdentity(false);
|
|
175
|
+
}, []);
|
|
176
|
+
const lcInitiate = react.useCallback(
|
|
177
|
+
async (visitorName, visitorEmail) => {
|
|
178
|
+
if (!enableLiveChat || lcTransportRef.current) return;
|
|
179
|
+
const url = chatServiceUrl ?? apiEndpoint;
|
|
180
|
+
if (!url || !apiKey) return;
|
|
181
|
+
try {
|
|
182
|
+
const transport2 = new chunkNG7OTWXQ_cjs.LiveChatTransport({
|
|
183
|
+
chatServiceUrl: url,
|
|
184
|
+
apiKey,
|
|
185
|
+
projectId: safeProjectId,
|
|
186
|
+
visitorSessionId: sessionId
|
|
187
|
+
});
|
|
188
|
+
transport2.on("state-change", (s) => setLcState(s));
|
|
189
|
+
transport2.on("queued", (data) => setLcQueue(data.position));
|
|
190
|
+
transport2.on("queue-update", (data) => setLcQueue(data.position));
|
|
191
|
+
transport2.on("accepted", (data) => setLcOperator(data.operatorName));
|
|
192
|
+
transport2.on(
|
|
193
|
+
"message",
|
|
194
|
+
(data) => setLcMessages((prev) => [...prev, data])
|
|
195
|
+
);
|
|
196
|
+
transport2.on("ended", () => setLcState("ended"));
|
|
197
|
+
lcTransportRef.current = transport2;
|
|
198
|
+
await transport2.connect();
|
|
199
|
+
await transport2.requestHandoff({
|
|
200
|
+
visitorName,
|
|
201
|
+
visitorEmail,
|
|
202
|
+
aiChatHistory: []
|
|
203
|
+
});
|
|
204
|
+
callbacksRef.current?.onLiveChatRequested?.();
|
|
205
|
+
} catch (err) {
|
|
206
|
+
callbacksRef.current?.onError?.(err);
|
|
207
|
+
setLcState("ai");
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
[enableLiveChat, chatServiceUrl, apiEndpoint, apiKey, safeProjectId, sessionId]
|
|
211
|
+
);
|
|
212
|
+
const liveChat = react.useMemo(
|
|
213
|
+
() => ({
|
|
214
|
+
state: lcState,
|
|
215
|
+
messages: lcMessages,
|
|
216
|
+
operatorName: lcOperator,
|
|
217
|
+
queuePosition: lcQueue,
|
|
218
|
+
showIdentityForm: lcShowIdentity,
|
|
219
|
+
initiate: lcInitiate,
|
|
220
|
+
send: (content) => {
|
|
221
|
+
if (!content.trim()) return;
|
|
222
|
+
lcTransportRef.current?.sendMessage?.(content);
|
|
223
|
+
setLcMessages((prev) => [
|
|
224
|
+
...prev,
|
|
225
|
+
{
|
|
226
|
+
id: Date.now(),
|
|
227
|
+
content,
|
|
228
|
+
senderType: "visitor",
|
|
229
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
230
|
+
}
|
|
231
|
+
]);
|
|
232
|
+
},
|
|
233
|
+
end: () => lcTransportRef.current?.endChat?.(),
|
|
234
|
+
cancel: () => lcResetState(),
|
|
235
|
+
submitRating: (rating, comment) => lcTransportRef.current?.submitRating?.(rating, comment),
|
|
236
|
+
returnToAI: () => lcResetState(),
|
|
237
|
+
requestManualHandoff: () => setLcShowIdentity(true),
|
|
238
|
+
setShowIdentityForm: setLcShowIdentity
|
|
239
|
+
}),
|
|
240
|
+
[lcState, lcMessages, lcOperator, lcQueue, lcShowIdentity, lcInitiate, lcResetState]
|
|
241
|
+
);
|
|
242
|
+
return {
|
|
243
|
+
messages,
|
|
244
|
+
status,
|
|
245
|
+
error,
|
|
246
|
+
sessionId,
|
|
247
|
+
sendMessage,
|
|
248
|
+
stopGeneration,
|
|
249
|
+
newConversation,
|
|
250
|
+
clearMessages,
|
|
251
|
+
activeTools,
|
|
252
|
+
liveChat,
|
|
253
|
+
chatRef
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
exports.useAigentycChat = useAigentycChat;
|
|
258
|
+
//# sourceMappingURL=chunk-5QSXB6UL.cjs.map
|
|
259
|
+
//# sourceMappingURL=chunk-5QSXB6UL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-aigentyc-chat.ts"],"names":["useRef","useState","useMemo","DefaultChatTransport","useChat","useEffect","useCallback","transport","LiveChatTransport"],"mappings":"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","file":"chunk-5QSXB6UL.cjs","sourcesContent":["\"use client\";\n\nimport {\n useState,\n useCallback,\n useRef,\n useMemo,\n useEffect,\n type RefObject,\n} from \"react\";\nimport type {\n ChatProviderProps,\n ChatMessage,\n ChatEventCallbacks,\n LiveChatState,\n LiveChatMessage,\n} from \"../core/types\";\n\ntype ChatStatus = \"idle\" | \"streaming\" | \"error\";\n\ninterface ActiveTool {\n toolName: string;\n state: \"partial-call\" | \"call\" | \"output-available\";\n args: Record<string, unknown>;\n result?: unknown;\n renderMode: string;\n}\n// NOTE: @ai-sdk/react and ai are optional peer dependencies.\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport } from \"ai\";\nimport { LiveChatTransport } from \"../core/live-chat-transport\";\n\nconst SESSION_KEY_PREFIX = \"aigentyc-session-\";\nconst MESSAGE_KEY_PREFIX = \"aigentyc-messages-\";\n\nfunction getOrCreateSessionId(projectId: string): string {\n if (typeof window === \"undefined\") return crypto.randomUUID();\n const key = SESSION_KEY_PREFIX + projectId;\n try {\n const stored = sessionStorage.getItem(key);\n if (stored) return stored;\n const id = crypto.randomUUID();\n sessionStorage.setItem(key, id);\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nfunction loadPersistedMessages(projectId: string): ChatMessage[] {\n if (typeof window === \"undefined\") return [];\n try {\n const raw = localStorage.getItem(MESSAGE_KEY_PREFIX + projectId);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction persistMessages(projectId: string, messages: unknown[]): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(MESSAGE_KEY_PREFIX + projectId, JSON.stringify(messages));\n } catch {\n // Ignore.\n }\n}\n\nfunction clearPersistedMessages(projectId: string): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.removeItem(MESSAGE_KEY_PREFIX + projectId);\n } catch {\n // Ignore.\n }\n}\n\n/** Options for the headless `useAigentycChat` hook (same shape as ChatProviderProps). */\nexport type UseAigentycChatOptions = Omit<ChatProviderProps, \"children\" | \"slots\" | \"theme\">;\n\n/** Live chat sub-object returned by the hook. */\nexport interface LiveChatReturn {\n state: LiveChatState;\n messages: LiveChatMessage[];\n operatorName: string;\n queuePosition: number;\n showIdentityForm: boolean;\n initiate: (visitorName?: string, visitorEmail?: string) => Promise<void>;\n send: (content: string) => void;\n end: () => void;\n cancel: () => void;\n submitRating: (rating: \"positive\" | \"negative\", comment?: string) => void;\n returnToAI: () => void;\n requestManualHandoff: () => void;\n setShowIdentityForm: (show: boolean) => void;\n}\n\n/** Return value of `useAigentycChat`. */\nexport interface UseAigentycChatReturn {\n messages: ChatMessage[];\n status: ChatStatus;\n error: Error | undefined;\n sessionId: string;\n sendMessage: (content: string) => void;\n stopGeneration: () => void;\n newConversation: () => void;\n clearMessages: () => void;\n activeTools: ActiveTool[];\n liveChat: LiveChatReturn;\n chatRef: RefObject<HTMLDivElement | null>;\n}\n\nconst CALLBACK_KEYS: (keyof ChatEventCallbacks)[] = [\n \"onReady\",\n \"onSessionStart\",\n \"onSessionRestore\",\n \"onMessageSent\",\n \"onMessageReceived\",\n \"onStreamStart\",\n \"onStreamEnd\",\n \"onToolCall\",\n \"onToolResult\",\n \"onToolAction\",\n \"onLiveChatRequested\",\n \"onLiveChatConnected\",\n \"onLiveChatEnded\",\n \"onError\",\n \"onInteraction\",\n];\n\nfunction pickCallbacks(opts: Record<string, unknown>): ChatEventCallbacks {\n const out: Record<string, unknown> = {};\n for (const key of CALLBACK_KEYS) {\n if (opts[key] !== undefined) out[key] = opts[key];\n }\n return out as ChatEventCallbacks;\n}\n\n/**\n * Standalone headless hook for Aigentyc Chat. No provider needed.\n *\n * Creates its own transport, session, and persistence internally. Use this\n * when you want full control over the UI but still want all SDK features\n * (chat, tools, live chat, persistence).\n */\nexport function useAigentycChat(options: UseAigentycChatOptions): UseAigentycChatReturn {\n const {\n projectId,\n apiEndpoint,\n apiKey,\n enableLiveChat = false,\n chatServiceUrl,\n persistMessages: shouldPersist = true,\n } = options;\n\n const callbacks = pickCallbacks(options as unknown as Record<string, unknown>);\n const callbacksRef = useRef(callbacks);\n callbacksRef.current = callbacks;\n\n const safeProjectId = projectId || \"default\";\n const [sessionId, setSessionId] = useState(() => getOrCreateSessionId(safeProjectId));\n const chatRef = useRef<HTMLDivElement | null>(null);\n\n const initialMessages = useMemo(\n () => (shouldPersist ? loadPersistedMessages(safeProjectId) : []),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const transport = useMemo(\n () =>\n new DefaultChatTransport({\n api: `${apiEndpoint || \"\"}/api/kb/chat`,\n headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,\n body: { projectId: safeProjectId, sessionId },\n }),\n [apiEndpoint, apiKey, safeProjectId, sessionId]\n );\n\n const {\n messages,\n sendMessage: sdkSendMessage,\n status: sdkStatus,\n error,\n stop,\n setMessages,\n } = useChat({\n id: sessionId,\n messages: initialMessages as never,\n transport,\n onFinish: (message) => {\n callbacksRef.current?.onMessageReceived?.(message as unknown as ChatMessage);\n },\n onError: (err) => {\n callbacksRef.current?.onError?.(err);\n },\n });\n\n const status: ChatStatus = error\n ? \"error\"\n : sdkStatus === \"streaming\" || sdkStatus === \"submitted\"\n ? \"streaming\"\n : \"idle\";\n\n // Persist messages\n useEffect(() => {\n if (shouldPersist) persistMessages(safeProjectId, messages);\n }, [messages, safeProjectId, shouldPersist]);\n\n // Derive active tools from the latest assistant message\n const activeTools = useMemo<ActiveTool[]>(() => {\n if (messages.length === 0) return [];\n const last = messages[messages.length - 1] as { role: string; parts?: unknown[] };\n if (last.role !== \"assistant\" || !Array.isArray(last.parts)) return [];\n return (last.parts as Array<Record<string, unknown>>)\n .filter((p) => typeof p.type === \"string\" && (p.type as string).startsWith(\"tool-\"))\n .map((p) => ({\n toolName: (p.toolName as string) || (p.type as string).replace(\"tool-\", \"\"),\n state: (p.state as ActiveTool[\"state\"]) || \"output-available\",\n args: (p.args as Record<string, unknown>) || {},\n result: p.result,\n renderMode: (p.renderMode as string) || \"inline\",\n }));\n }, [messages]);\n\n const sendMessage = useCallback(\n (content: string) => {\n if (!content.trim()) return;\n callbacksRef.current?.onMessageSent?.({\n id: crypto.randomUUID(),\n role: \"user\",\n content,\n } as ChatMessage);\n sdkSendMessage({ text: content });\n },\n [sdkSendMessage]\n );\n\n const stopGeneration = useCallback(() => stop(), [stop]);\n\n const newConversation = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(safeProjectId);\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(SESSION_KEY_PREFIX + safeProjectId);\n } catch {\n // Ignore.\n }\n }\n setSessionId(getOrCreateSessionId(safeProjectId));\n }, [safeProjectId, setMessages]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(safeProjectId);\n }, [safeProjectId, setMessages]);\n\n // --- Live Chat (self-contained) ---\n const [lcState, setLcState] = useState<LiveChatState>(\"ai\");\n const [lcMessages, setLcMessages] = useState<LiveChatMessage[]>([]);\n const [lcOperator, setLcOperator] = useState(\"\");\n const [lcQueue, setLcQueue] = useState(0);\n const [lcShowIdentity, setLcShowIdentity] = useState(false);\n const lcTransportRef = useRef<LiveChatTransport | null>(null);\n\n const lcResetState = useCallback(() => {\n lcTransportRef.current?.disconnect?.();\n lcTransportRef.current = null;\n setLcState(\"ai\");\n setLcMessages([]);\n setLcOperator(\"\");\n setLcQueue(0);\n setLcShowIdentity(false);\n }, []);\n\n const lcInitiate = useCallback(\n async (visitorName?: string, visitorEmail?: string) => {\n if (!enableLiveChat || lcTransportRef.current) return;\n const url = chatServiceUrl ?? apiEndpoint;\n if (!url || !apiKey) return;\n try {\n const transport = new LiveChatTransport({\n chatServiceUrl: url,\n apiKey,\n projectId: safeProjectId,\n visitorSessionId: sessionId,\n });\n transport.on(\"state-change\", (s: LiveChatState) => setLcState(s));\n transport.on(\"queued\", (data: { position: number }) => setLcQueue(data.position));\n transport.on(\"queue-update\", (data: { position: number }) => setLcQueue(data.position));\n transport.on(\"accepted\", (data: { operatorName: string }) => setLcOperator(data.operatorName));\n transport.on(\"message\", (data: LiveChatMessage) =>\n setLcMessages((prev) => [...prev, data])\n );\n transport.on(\"ended\", () => setLcState(\"ended\"));\n lcTransportRef.current = transport;\n await transport.connect();\n await transport.requestHandoff({\n visitorName,\n visitorEmail,\n aiChatHistory: [],\n });\n callbacksRef.current?.onLiveChatRequested?.();\n } catch (err) {\n callbacksRef.current?.onError?.(err as Error);\n setLcState(\"ai\");\n }\n },\n [enableLiveChat, chatServiceUrl, apiEndpoint, apiKey, safeProjectId, sessionId]\n );\n\n const liveChat = useMemo<LiveChatReturn>(\n () => ({\n state: lcState,\n messages: lcMessages,\n operatorName: lcOperator,\n queuePosition: lcQueue,\n showIdentityForm: lcShowIdentity,\n initiate: lcInitiate,\n send: (content: string) => {\n if (!content.trim()) return;\n lcTransportRef.current?.sendMessage?.(content);\n setLcMessages((prev) => [\n ...prev,\n {\n id: Date.now(),\n content,\n senderType: \"visitor\",\n timestamp: new Date().toISOString(),\n },\n ]);\n },\n end: () => lcTransportRef.current?.endChat?.(),\n cancel: () => lcResetState(),\n submitRating: (rating, comment) =>\n lcTransportRef.current?.submitRating?.(rating, comment),\n returnToAI: () => lcResetState(),\n requestManualHandoff: () => setLcShowIdentity(true),\n setShowIdentityForm: setLcShowIdentity,\n }),\n [lcState, lcMessages, lcOperator, lcQueue, lcShowIdentity, lcInitiate, lcResetState]\n );\n\n return {\n messages: messages as unknown as ChatMessage[],\n status,\n error: error as Error | undefined,\n sessionId,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n activeTools,\n liveChat,\n chatRef,\n };\n}\n"]}
|