@crestapps/ai-chat-ui 2.0.0-preview.190 → 2.0.0-preview.193

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","coreAIChatManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","copiedTitle","codeCopiedText","copyResetDelayMs","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","_normalized$isGenerat","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isGenerated","IsGenerated","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","getCitationLabel","buildCitationDisplay","content","processedContent","messageReferences","referenceEntries","citations","citedRefs","filter","_ref6","_ref7","includes","generatedRefs","_ref8","_ref9","sort","_ref0","_ref1","_ref10","_ref11","b","_ref12","_ref13","_ref14","_ref15","displayIndex","_iterator","_step","_step$value","placeholder","concat","replaceAll","referenceKey","label","isDownload","err","_i2","_citations","citation","_iterator2","_step2","_step2$value","map","_ref16","_excluded","buildCopyContent","copyContent","_iterator3","_step3","_iterator4","_step4","trimEnd","updateMessagePresentation","message","rawContent","citationDisplay","displayContent","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","data","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","charts","requestAnimationFrame","_iterator5","_step5","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","keys","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","resolveIndicatorTemplate","template","encodedAssistantLabel","replace","initialize","instanceConfig","normalizedInstanceConfig","normalizedWidgetConfig","hasWidgetConfig","widgetBehavior","coreAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","realtimeEnabled","realtimeWebRtcEnabled","RTCPeerConnection","realtimeWebRtcIceServers","realtimeVoiceName","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","closest","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","queueDocumentOperation","operation","self","previousOperation","nextOperation","_callee","_context","_this","_callee3","filesToUpload","_context3","uploadDocumentUrl","_callee2","sessionId","profileId","formData","response","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","ok","extractReadableErrorMessage","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","removeError","_t3","_context4","headers","stringify","itemId","documentId","splice","status","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","querySelectorAll","j","addEventListener","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","div","fallbackMessage","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forceStopActiveVoice","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","stopRecording","rejectPendingSessionRequest","hideTypingIndicator","handleReceiveError","getErrorMessage","reason","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","turnId","_realtimePendingTurns","pending","stopAudio","fillRealtimePendingTurn","_conversationAssistantMessage","at","userMsg","responseId","_conversationAssistantResponseId","prev","msgIndex","newMessage","base64Audio","contentType","binaryString","atob","Uint8Array","charCodeAt","realtimeController","receivePcm","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","stopRealtimeConversation","onreconnected","info","onclose","ensureConnectionStarted","_this4","_callee7","states","_t5","_context7","HubConnectionState","state","Connected","Disconnected","settle","clearTimeout","timeoutId","clearInterval","intervalId","setTimeout","setInterval","addMessageInternal","_this5","fireEvent","CustomEvent","_this6","_message$rawContent","addMessages","_this7","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","sendMessage","trimmedPrompt","streamMessage","startRecording","_this8","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","subject","Subject","_sttCapture","_createPcmCapture","base64","_sttSubject","rate","sampleRate","documentElement","send","updateMicButton","_stopPcmCapture","complete","onChunk","AudioCtx","AudioContext","webkitAudioContext","audioContext","srcRate","createMediaStreamSource","processor","createScriptProcessor","onaudioprocess","input","inputBuffer","getChannelData","pcm16","_downsampleToInt16","sum","rms","sqrt","buffer","binary","String","fromCharCode","btoa","connect","destination","capture","disconnect","getTracks","stop","close","dstRate","same","Int16Array","ratio","newLen","floor","out","i0","i1","frac","toggleRecording","sessionProfileId","_this9","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this9$stream","processReferences","streamingFinished","synthesizeSpeech","_this9$stream2","getServiceDownMessage","_this0","_ref22","_message$rawContent2","stopIcon","setAttribute","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this1","buttons","button","buttonIndex","isPlaying","toggle","updateCopyButtons","_this10","isCopied","iconHtml","setCopyButtonState","cacheIndex","_this11","_ttsCacheIndex","invoke","toggleMessageTts","_this12","playAudioBlob","_this13","totalLength","reduce","combined","offset","_iterator6","_step6","set","blob","Blob","_this14","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this15","nextBlob","shift","conversationModeOnAudioEnded","_this16","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","startRealtimeConversation","setupRealtimeController","CoreAIRealtime","attach","ensureConnected","connected","Error","sendStart","voice","silenceMs","vadThreshold","allowInterruption","webRtcEnabled","sendStartWebRtc","offerSdp","webRtcIceServers","voiceName","getVoiceName","selectors","realtimeButton","conversationButtonElementSelector","sendButton","micButtonElementSelector","onActivate","onDeactivate","finishRealtimeConversationCleanup","onUserTurnPending","addRealtimePendingTurn","onUserTurnDropped","dropRealtimePendingTurn","dismissible","autoDismissMs","emptyAt","dropped","_this17","updateConversationButton","_conversationSubject","_conversationStream","interruptRmsThreshold","_conversationCapture","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","location","origin","searchParams","originalLength","removedCount","_this18","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this19","timerId","dismissNotification","handleNotificationAction","actionName","_this20","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","sessionRating","onSessionReset","startNewSession","requestNewSession","_this21","_callee8","_context8","_this22","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this23","placeholderElementSelector","loadSession","documentBarSelector","className","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","force","onSessionInitialized","sessionUrlTemplate","history","replaceState","sessionUrl","encodeURIComponent","resolveSessionId","clearCopiedMessageState","copyResponse","_ref23","_message$copyContent","_event$target","_event$target$closest","_this24","currentTarget","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","_this25","active","mounted","_this26","_callee9","isInitialized","_context9","onMounted","fontAwesomeObserver","beforeUnmount","onBeforeUnmount","app","Vue","createApp","mount","autoInitializeSelector","getAttributeValue","attributeName","parseBooleanAttributeValue","parseJsonAttribute","description","rawValue","buildConfigFromDataAttributes","_parseJsonAttribute","_parseJsonAttribute2","settings","hasAttribute","allowWidgetHost","booleanAttributes","buildConfigFromElement","jsonConfig","attributeConfig","initializeFromElement","dataset","coreAiChatInitialized","__coreAIChatApp","scanForAutoInitialization","startAutoInitialization","readyState","once","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["window.coreAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n codeCopiedText: 'Copied!',\n copyResetDelayMs: 2000,\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-message-heading ai-chat-message-heading-user\">\n <span class=\"ai-chat-msg-role ai-chat-msg-role-user\">{{ userLabel }}</span>\n </div>\n <div v-else-if=\"message.role !== 'indicator'\" class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n <span class=\"ai-chat-message-role-label\">{{ getAssistantLabel(message) }}</span>\n </div>\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button type=\"button\" class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <i class=\"fa-regular fa-thumbs-up\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <i class=\"fa-regular fa-thumbs-down\"></i>\n </button>\n </span>\n </template>\n <button type=\"button\" v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link p-0 button-message-toolbox ai-response-copy-btn\" :class=\"copiedMessageIndex === index ? 'text-success' : 'text-secondary'\" :data-copy-message-index=\"index\" @click=\"copyResponse(message, index, $event)\" :title=\"copiedMessageIndex === index ? copiedTitle : copyTitle\">\n <i :class=\"copiedMessageIndex === index ? 'fa-solid fa-check' : 'fa-solid fa-copy'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button type=\"button\" v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button type=\"button\" v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n <span class=\"ai-chat-message-role-label\">Assistant</span>\n </div>\n </div>\n `\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n normalized.isGenerated = (normalized.isGenerated ?? normalized.IsGenerated) === true;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n function buildCitationDisplay(content, references) {\n let processedContent = (content || '').trim();\n const messageReferences = normalizeReferences(references);\n const referenceEntries = Object.entries(messageReferences);\n\n if (!referenceEntries.length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = referenceEntries.filter(([key]) => processedContent.includes(key));\n const generatedRefs = referenceEntries.filter(([key, value]) => value.isGenerated && !processedContent.includes(key));\n\n if (!citedRefs.length && !generatedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n generatedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${displayIndex}_${value.index || displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: isDownloadCitationReference(value),\n placeholder: placeholder,\n });\n\n displayIndex++;\n }\n\n for (const citation of citations) {\n processedContent = processedContent.replaceAll(citation.placeholder, `<sup>${citation.displayIndex}</sup>`);\n }\n\n processedContent = processedContent.replaceAll('</sup><sup>', '</sup><sup>,</sup><sup>');\n\n // Generated files (such as exported tabular data) are always offered as a download even when\n // the model does not cite them inline, so the user never loses access to the produced file.\n for (const [key, value] of generatedRefs) {\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: true,\n placeholder: null,\n });\n\n displayIndex++;\n }\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n for (const citation of citations) {\n copyContent = copyContent.replaceAll(citation.referenceKey, `[${citation.displayIndex}]`);\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n const citationDisplay = buildCitationDisplay(rawContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n message.copyContent = buildCopyContent(rawContent, citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map: any page (e.g., Chat Interactions) that uses\n // the shared marked instance can call window.renderPendingCharts() after\n // its DOM update to render charts it didn't create itself.\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n renderChartOnCanvas(c.chartId, c.config);\n }\n });\n }\n\n function renderChartOnCanvas(chartId, config) {\n const canvas = document.getElementById(chartId);\n if (!canvas) {\n return false;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n return false;\n }\n\n // When the canvas is inside a hidden container (e.g., a widget panel with\n // display:none), it has zero dimensions and Chart.js cannot render correctly.\n // Keep the config in __chartConfigs so renderPendingCharts() can retry later\n // once the container becomes visible.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[chartId] = config;\n return false;\n }\n\n try {\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof config === 'string' ? JSON.parse(config) : config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n delete window.__chartConfigs[chartId];\n return true;\n } catch (e) {\n console.error('Error creating chart:', e);\n return false;\n }\n }\n\n // Global function: renders any chart canvases whose configs are in the\n // global __chartConfigs map. Called by pages (e.g., Chat Interactions)\n // that share the marked instance but have their own rendering pipeline.\n window.renderPendingCharts = function () {\n if (typeof Chart === 'undefined') {\n return;\n }\n\n const configs = window.__chartConfigs;\n if (!configs) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const chartId of Object.keys(configs)) {\n renderChartOnCanvas(chartId, configs[chartId]);\n }\n });\n };\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n function compactObject(source) {\n if (!source || typeof source !== 'object') {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(source).filter(([, value]) => value !== undefined)\n );\n }\n\n function resolveIndicatorTemplate(template, assistantLabel) {\n if (!template) {\n return template;\n }\n\n const encodedAssistantLabel = escapeHtmlEntities(assistantLabel || 'Assistant');\n return template.replace(/\\{\\{\\s*assistantLabel\\s*\\}\\}/g, encodedAssistantLabel);\n }\n\n const initialize = (instanceConfig) => {\n const normalizedInstanceConfig = compactObject(instanceConfig);\n const normalizedWidgetConfig = compactObject(normalizedInstanceConfig.widget);\n const config = Object.assign({}, defaultConfig, normalizedInstanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, normalizedWidgetConfig);\n config.indicatorTemplate = resolveIndicatorTemplate(config.indicatorTemplate, config.assistantLabel);\n const hasWidgetConfig = !!(normalizedWidgetConfig.chatWidgetContainer && normalizedWidgetConfig.chatWidgetStateName);\n const widgetBehavior = window.coreAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n realtimeEnabled: !!config.realtimeEnabled,\n // Server-relay WebRTC transport: primary when advertised and supported; the client falls back\n // to the WebSocket path below if the peer cannot connect.\n realtimeWebRtcEnabled: config.realtimeWebRtcEnabled === true && typeof window.RTCPeerConnection === 'function',\n // A host-supplied override. Normally the servers are fetched from the hub right before the\n // peer is created (resolveRealtimeIceServers) so configured TURN relays — and their\n // short-lived credentials — are actually used instead of a public STUN server.\n realtimeWebRtcIceServers: (Array.isArray(config.realtimeWebRtcIceServers) && config.realtimeWebRtcIceServers.length)\n ? config.realtimeWebRtcIceServers\n : null,\n realtimeVoiceName: config.realtimeVoiceName || null,\n conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n copiedMessageIndex: -1,\n copyResetTimeoutId: null,\n activeCopyButton: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var result = await response.json();\n\n if (result.sessionId && result.sessionId !== this.getSessionId()) {\n this.initializeSession(result.sessionId);\n }\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else if (result.uploaded && result.uploaded.length > 0) {\n this.documents = this.documents.concat(result.uploaded);\n }\n\n if (result.failed && result.failed.length > 0) {\n this.uploadErrors = result.failed;\n }\n } catch (err) {\n console.error('Upload error:', err);\n this.uploadErrors = [{ fileName: '', error: 'Upload failed. Please try again.' }];\n\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n });\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\n return this.queueDocumentOperation(async () => {\n try {\n var sessionId = this.getSessionId();\n var response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ itemId: sessionId, documentId: doc.documentId })\n });\n\n if (response.ok) {\n var result = await response.json();\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else {\n var idx = this.documents.indexOf(doc);\n if (idx > -1) {\n this.documents.splice(idx, 1);\n }\n }\n } else {\n var errorText = await response.text();\n var removeError = this.extractReadableErrorMessage(errorText, 'Failed to remove document. Please try again.');\n console.error('Failed to remove document:', response.status, errorText);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: removeError }];\n if (sessionId) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n } catch (err) {\n console.error('Remove document error:', err);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: 'Failed to remove document. Please try again.' }];\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n });\n },\n formatFileSize(bytes) {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n },\n renderDocumentBar() {\n if (!this.documentBar) return;\n\n if (!config.sessionDocumentsEnabled) {\n this.documentBar.classList.add('d-none');\n return;\n }\n\n this.documentBar.classList.remove('d-none');\n\n var html = '<div class=\"ai-chat-doc-bar p-2\">';\n html += '<div class=\"d-flex flex-wrap align-items-center gap-1\">';\n\n for (var i = 0; i < this.documents.length; i++) {\n var doc = this.documents[i];\n var name = doc.fileName || 'Document';\n if (name.length > 20) name = name.substring(0, 17) + '...';\n html += '<span class=\"badge bg-secondary bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml(doc.fileName || '') + '\">';\n html += '<i class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n if (failedName.length > 15) failedName = failedName.substring(0, 12) + '...';\n html += '<span class=\"badge bg-danger bg-opacity-25 text-danger d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml((failedItem.fileName || '') + ': ' + errorMsg) + '\">';\n html += '<i class=\"fa-solid fa-circle-exclamation\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(failedName);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-error-index=\"' + m + '\" aria-label=\"Dismiss\"></button>';\n html += '</span>';\n }\n\n if (this.isUploading) {\n html += '<span class=\"badge bg-info bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\">';\n html += '<span class=\"spinner-border spinner-border-sm\" style=\"width: 0.7rem; height: 0.7rem;\"></span> Uploading...';\n html += '</span>';\n }\n\n html += '<button type=\"button\" class=\"btn btn-sm btn-outline-secondary rounded-pill ai-chat-doc-add-btn d-inline-flex align-items-center gap-1\" style=\"font-size: 0.75rem; padding: 0.15rem 0.5rem;\" title=\"Attach documents\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '>';\n html += '<i class=\"fa-solid fa-paperclip\"></i>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n // Switching to another session must not leave a prior realtime/voice session running.\n this.forceStopActiveVoice();\n this.initializeSession(data.sessionId, true);\n this.messages = [];\n this.documents = data.documents || [];\n this.uploadErrors = [];\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n\n // Update feedback icons in the DOM after all messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // When the session is new (no messages) and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n });\n\n // Realtime lifecycle events (ReceiveRealtimeEvent, and ReceiveError while a voice session is\n // live) are handled by the shared CoreAIRealtime module — see setupRealtimeController.\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // A server-side error (for example a session-start rate-limit rejection) ends the\n // in-flight request. Reject any pending new-session promise so the UI stops waiting\n // until it times out, and clear the typing indicator that a send may have shown.\n this.rejectPendingSessionRequest(error);\n this.hideTypingIndicator();\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\n } else if (!this.isNavigatingAway) {\n // Surface the message to the user instead of failing silently.\n this.addMessage(this.getErrorMessage(error));\n }\n });\n\n this.connection.on(\"ReceiveSessionStartRejected\", (reason) => {\n // A rate-limit rejection is a definitive \"wait and retry\", not a recoverable\n // session/connection error. Unblock any pending new-session request, clear the\n // typing indicator, and show the message for every host (main app and widget)\n // without triggering the widget's clear-and-retry recovery, which would wipe the\n // visitor's state and fire another throttled StartSession.\n this.rejectPendingSessionRequest(reason);\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getErrorMessage(reason));\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, turnId, text) => {\n // Realtime creates the chat session server-side; adopt its id (and update the page URL)\n // on the first turn so a refresh reloads the conversation instead of starting fresh.\n if (sessionId && this.getSessionId() !== sessionId) {\n this.initializeSession(sessionId);\n }\n\n // Realtime: a placeholder for this turn was already inserted in the right position when\n // the utterance was captured (see user_turn_pending), so just fill in its text.\n if (turnId && this._realtimePendingTurns && this._realtimePendingTurns[turnId]) {\n var pending = this._realtimePendingTurns[turnId];\n delete this._realtimePendingTurns[turnId];\n this.stopAudio();\n this.fillRealtimePendingTurn(pending, text);\n\n return;\n }\n\n if (text) {\n this.stopAudio();\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else if (this._conversationAssistantMessage) {\n // Realtime: the user's transcript lags the assistant's reply for the SAME turn (the\n // model answers the audio before speech-to-text finishes). Insert the user message\n // just before the streaming assistant message so the order stays You -> Assistant,\n // and keep that message streaming — ending it here split one reply into two bubbles\n // above the prompt.\n var at = this._conversationAssistantMessage.index;\n var userMsg = { role: 'user', content: text, rawContent: text, userRating: null, references: {} };\n updateMessagePresentation(userMsg, userMsg.references);\n this.messages.splice(at, 0, userMsg);\n this._conversationAssistantMessage.index = at + 1;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n // A new response id means a new turn — finalize the previous assistant message so two replies\n // never merge into one bubble (also covers barge-in, which starts a fresh response).\n if (this._conversationAssistantMessage && this._conversationAssistantResponseId && responseId && this._conversationAssistantResponseId !== responseId) {\n var prev = this.messages[this._conversationAssistantMessage.index];\n if (prev) { prev.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n this._conversationAssistantResponseId = responseId;\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n this._conversationAssistantResponseId = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (!base64Audio) {\n return;\n }\n\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Realtime audio arrives as raw PCM16 (WebSocket transport) and is scheduled for immediate\n // playback by the shared module; conversation/TTS audio (mp3/wav) is collected and played on\n // complete.\n if (contentType === 'audio/pcm') {\n if (this.realtimeController) { this.realtimeController.receivePcm(bytes); }\n } else {\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (sessionId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n\n // The realtime session lived inside the dropped connection; it cannot survive a reconnect.\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n async ensureConnectionStarted() {\n if (!this.connection) {\n return false;\n }\n\n var states = signalR.HubConnectionState;\n if (this.connection.state === states.Connected) {\n return true;\n }\n\n // If the initial start failed or has not begun, start it now.\n if (this.connection.state === states.Disconnected) {\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n\n return this.connection.state === states.Connected;\n }\n\n // The connection is still Connecting or Reconnecting: wait for it to settle so callers\n // (e.g. starting a realtime session) do not send before the socket is ready.\n return await new Promise((resolve) => {\n var settle = (value) => {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(value);\n };\n var timeoutId = setTimeout(() => settle(this.connection.state === states.Connected), 10000);\n var intervalId = setInterval(() => {\n if (this.connection.state === states.Connected) {\n settle(true);\n } else if (this.connection.state === states.Disconnected) {\n settle(false);\n }\n }, 100);\n });\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingCoreAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedCoreAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n addMessages(messages) {\n\n for (let i = 0; i < messages.length; i++) {\n this.addMessageInternal(messages[i]);\n }\n\n this.hidePlaceholder();\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n isOrchestratorAvailable() {\n return config.isOrchestratorAvailable !== false;\n },\n applyOrchestratorAvailability() {\n if (this.isOrchestratorAvailable()) {\n return true;\n }\n\n const unavailableMessage = config.orchestratorUnavailableMessage || \"This orchestrator is not currently available.\";\n\n if (this.inputElement) {\n this.inputElement.disabled = true;\n this.inputElement.value = '';\n this.inputElement.placeholder = unavailableMessage;\n }\n\n if (this.buttonElement) {\n this.buttonElement.disabled = true;\n }\n\n if (this.micButtonElement) {\n this.micButtonElement.disabled = true;\n this.micButtonElement.style.display = 'none';\n }\n\n if (this.conversationButtonElement) {\n this.conversationButtonElement.disabled = true;\n this.conversationButtonElement.style.display = 'none';\n }\n\n return false;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n sendMessage() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // In single-response mode, clear all previous messages.\n if (this.singleResponseMode) {\n this.messages.splice(0, this.messages.length);\n }\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n this.streamMessage(this.getProfileId(), trimmedPrompt, null);\n this.inputElement.value = '';\n this.prompt = '';\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder.\n // Browsers only agree on WebM/Opus for MediaRecorder, and Azure's speech SDK cannot\n // demux that container from a streaming push (it fails inside GStreamer). Raw PCM is\n // decoded natively with no GStreamer and is produced identically by every browser.\n this._sttCapture = this._createPcmCapture(stream, (base64) => {\n try { subject.next(base64); } catch (err) { /* completed */ }\n });\n this._sttSubject = subject;\n\n var rate = (this._sttCapture && this._sttCapture.sampleRate) || 16000;\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording) {\n return;\n }\n\n this._stopPcmCapture(this._sttCapture);\n this._sttCapture = null;\n if (this._sttSubject) {\n try { this._sttSubject.complete(); } catch (err) { /* already completed */ }\n this._sttSubject = null;\n }\n this.isRecording = false;\n this.updateMicButton();\n },\n // Captures microphone audio as raw 16 kHz, 16-bit mono PCM using Web Audio and invokes\n // onChunk(base64Pcm, rms) for each block. Returns a handle for _stopPcmCapture. This replaces\n // MediaRecorder so every browser streams a format Azure decodes without GStreamer.\n _createPcmCapture(stream, onChunk) {\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n // Ask the browser to resample the mic to 16 kHz; fall back to manual resampling if it will not.\n var audioContext;\n try {\n audioContext = new AudioCtx({ sampleRate: 16000 });\n } catch (e) {\n audioContext = new AudioCtx();\n }\n var srcRate = audioContext.sampleRate;\n var source = audioContext.createMediaStreamSource(stream);\n var processor = audioContext.createScriptProcessor(4096, 1, 1);\n var self = this;\n processor.onaudioprocess = function (e) {\n var input = e.inputBuffer.getChannelData(0);\n var pcm16 = self._downsampleToInt16(input, srcRate, 16000);\n if (!pcm16 || pcm16.length === 0) {\n return;\n }\n var sum = 0;\n for (var i = 0; i < pcm16.length; i++) {\n var v = pcm16[i] / 32768;\n sum += v * v;\n }\n var rms = Math.sqrt(sum / pcm16.length);\n var bytes = new Uint8Array(pcm16.buffer);\n var binary = '';\n for (var j = 0; j < bytes.length; j++) {\n binary += String.fromCharCode(bytes[j]);\n }\n onChunk(btoa(binary), rms);\n };\n source.connect(processor);\n // Some browsers only fire onaudioprocess while the node is connected to a destination.\n processor.connect(audioContext.destination);\n return { audioContext: audioContext, source: source, processor: processor, stream: stream, sampleRate: 16000 };\n },\n _stopPcmCapture(capture) {\n if (!capture) {\n return;\n }\n try { if (capture.processor) { capture.processor.onaudioprocess = null; capture.processor.disconnect(); } } catch (e) { }\n try { if (capture.source) { capture.source.disconnect(); } } catch (e) { }\n try { if (capture.stream) { capture.stream.getTracks().forEach(function (t) { t.stop(); }); } } catch (e) { }\n try { if (capture.audioContext) { capture.audioContext.close(); } } catch (e) { }\n },\n // Converts a Float32 sample block to 16-bit PCM, resampling from srcRate to dstRate when needed.\n _downsampleToInt16(input, srcRate, dstRate) {\n var s, i;\n if (!(dstRate < srcRate)) {\n var same = new Int16Array(input.length);\n for (i = 0; i < input.length; i++) {\n s = Math.max(-1, Math.min(1, input[i]));\n same[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return same;\n }\n var ratio = srcRate / dstRate;\n var newLen = Math.floor(input.length / ratio);\n var out = new Int16Array(newLen);\n for (var j = 0; j < newLen; j++) {\n var idx = j * ratio;\n var i0 = Math.floor(idx);\n var i1 = (i0 + 1 < input.length) ? i0 + 1 : input.length - 1;\n var frac = idx - i0;\n s = input[i0] * (1 - frac) + input[i1] * frac;\n s = Math.max(-1, Math.min(1, s));\n out[j] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return out;\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n let newMessage = {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n\n return newMessage;\n },\n getErrorMessage(error) {\n var content = (typeof error === 'string' && error.trim())\n ? error\n : \"Something went wrong. Please try again.\";\n\n return {\n role: \"assistant\",\n content: content,\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.setAttribute('disabled', 'disabled');\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.removeAttribute('disabled');\n this.inputElement.focus();\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n });\n },\n updateCopyButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-copy-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-copy-message-index'));\n var isCopied = buttonIndex === this.copiedMessageIndex;\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n setCopyButtonState(button, isCopied) {\n if (!button) {\n return;\n }\n\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.realtimeEnabled) {\n // Realtime is driven by the shared module, which owns the button; this only exists for\n // callers that toggle programmatically.\n if (this.realtimeController) { this.realtimeController.toggle(); }\n\n return;\n }\n\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n // Force-stop any in-progress voice/realtime session (mic, playback, and the streamed audio),\n // e.g. before starting a new chat or switching sessions, so it never keeps running in the background.\n forceStopActiveVoice() {\n if (!this.isConversationMode) {\n return;\n }\n if (this.realtimeEnabled) {\n this.stopRealtimeConversation();\n } else {\n this.stopConversationMode();\n }\n },\n startRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.start(); }\n },\n stopRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.stop(); }\n },\n // Realtime (speech-to-speech) is the shared CoreAIRealtime module (realtime-audio.js): microphone\n // capture and gating, the WebRTC transport with its WebSocket fallback, playback, the settings\n // popover, push-to-talk, and the server-driven session lifecycle all live there, so this app and the\n // chat-interaction client cannot drift apart. What is wired here is only how the module reaches this\n // app's hub and transcript.\n setupRealtimeController(config) {\n if (this.realtimeController || !this.conversationButton) { return; }\n if (!window.CoreAIRealtime || typeof window.CoreAIRealtime.attach !== 'function') {\n console.error('realtime-audio.js is not loaded; realtime voice is unavailable on this page.');\n\n return;\n }\n\n var self = this;\n this.realtimeController = window.CoreAIRealtime.attach({\n connection: this.connection,\n ensureConnected: function () {\n return self.ensureConnectionStarted().then(function (connected) {\n if (!connected) { throw new Error('The chat connection is not available.'); }\n\n return connected;\n });\n },\n sendStart: function (subject, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeConversation', self.getProfileId(), self.getSessionId() || '', subject, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcEnabled: this.realtimeWebRtcEnabled,\n sendStartWebRtc: function (offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeWebRtc', self.getProfileId(), self.getSessionId() || '', offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcIceServers: this.realtimeWebRtcIceServers || undefined,\n voiceName: this.realtimeVoiceName || '',\n getVoiceName: function () { return self.realtimeVoiceName || ''; },\n realtimeEnabled: true,\n // The conversation button doubles as the realtime button on this host; the module owns its\n // click, label and state from here on. The text controls are handed over too so the module\n // hides them: realtime is audio-only, and a message box that plays no part in a spoken\n // conversation only invites the user to type into it.\n //\n // conversationButton is deliberately not passed. It is the same element as the realtime\n // button here, and the module hides the conversation button before showing the realtime\n // one -- naming it twice would ask it to hide the control it then has to show.\n selectors: {\n realtimeButton: config.conversationButtonElementSelector,\n input: config.inputElementSelector,\n sendButton: config.sendButtonElementSelector,\n micButton: config.micButtonElementSelector\n },\n onActivate: function () {\n self.isConversationMode = true;\n self._conversationAssistantMessage = null;\n self._conversationPartialMessage = null;\n self.removeNotification('conversation-ended');\n },\n onDeactivate: function () {\n self.isConversationMode = false;\n self.finishRealtimeConversationCleanup();\n },\n onUserTurnPending: function (turnId) { self.addRealtimePendingTurn(turnId); },\n onUserTurnDropped: function (turnId) { self.dropRealtimePendingTurn(turnId); }\n });\n },\n // Shared teardown tail: clears any in-flight streaming state and shows the conversation-ended\n // notification.\n finishRealtimeConversationCleanup() {\n if (this._conversationAssistantMessage) {\n var m = this.messages[this._conversationAssistantMessage.index];\n if (m) { m.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) { this.messages[i].isStreaming = false; }\n }\n\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n // The utterance has been captured but not transcribed yet. Showing a placeholder now puts the\n // prompt above the reply it produces: transcription lags the spoken answer, so a bubble added only\n // when the text arrives lands underneath its own reply.\n addRealtimePendingTurn(turnId) {\n if (!turnId) { return; }\n this._realtimePendingTurns = this._realtimePendingTurns || {};\n var index = this.messages.length;\n this.addMessage({ role: 'user', content: '', isPartial: true });\n this._realtimePendingTurns[turnId] = this.messages[index];\n },\n fillRealtimePendingTurn(pending, text) {\n if (!pending) { return; }\n if (!text) {\n var emptyAt = this.messages.indexOf(pending);\n if (emptyAt >= 0) { this.messages.splice(emptyAt, 1); }\n\n return;\n }\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n pending.content = text;\n pending.htmlContent = '<p>' + escaped + '</p>';\n pending.isPartial = false;\n },\n dropRealtimePendingTurn(turnId) {\n if (!turnId || !this._realtimePendingTurns) { return; }\n var dropped = this._realtimePendingTurns[turnId];\n if (!dropped) { return; }\n delete this._realtimePendingTurns[turnId];\n var at = this.messages.indexOf(dropped);\n if (at >= 0) { this.messages.splice(at, 1); }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // RMS (0..1) above which speech during TTS playback counts as an interrupt.\n var interruptRmsThreshold = 0.12;\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder — see\n // startRecording for why WebM/Opus is avoided. The per-block RMS drives interrupt\n // detection during TTS playback, replacing the previous AnalyserNode.\n this._conversationCapture = this._createPcmCapture(stream, (base64, rms) => {\n if (this.isPlayingAudio && rms >= interruptRmsThreshold) {\n // User is speaking over TTS — interrupt playback.\n this.stopAudio();\n }\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n var rate = (this._conversationCapture && this._conversationCapture.sampleRate) || 16000;\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording) {\n this._stopPcmCapture(this._conversationCapture);\n this._conversationCapture = null;\n if (this._conversationSubject) {\n try { this._conversationSubject.complete(); } catch (err) { /* already completed */ }\n }\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, audio playback continuation\n // is handled by the persistent stream. This method is only\n // called from playCollectedAudio for non-conversation TTS.\n },\n generatePrompt(element) {\n if (!element) {\n console.error('The element paramter is required.');\n\n return;\n }\n\n let templateProfileId = element.getAttribute('data-profile-id');\n let sessionId = this.getSessionId();\n let sessionProfileId = this.getProfileId();\n\n if (!templateProfileId || !sessionId) {\n\n console.error('The given element is missing data-profile-id or the session has not yet started.');\n return;\n }\n\n // streamMessage() already shows the typing indicator.\n this.streamMessage(templateProfileId, null, sessionProfileId);\n },\n createSessionUrl(baseUrl, param, value) {\n\n const fullUrl = baseUrl.toLowerCase().startsWith('http') ? baseUrl : window.location.origin + baseUrl;\n const url = new URL(fullUrl);\n\n url.searchParams.set(param, value);\n\n return url.toString();\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n this.scheduleNotificationDismiss(notification);\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var sessionId = this.getSessionId();\n this.connection.invoke(\"HandleNotificationAction\", sessionId, notificationType, actionName).catch(function (err) {\n console.error(\"Error handling notification action:\", err);\n });\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getProfileId() {\n return this.inputElement\n ? this.inputElement.getAttribute('data-profile-id')\n : null;\n },\n setSessionId(sessionId) {\n if (!this.inputElement) {\n return;\n }\n\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n // Force-stop an in-progress voice/realtime conversation so it doesn't keep running under the new session.\n this.forceStopActiveVoice();\n this.stopRecording();\n this.rejectPendingSessionRequest('Session was reset.');\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n\n // When an initial prompt is configured, show it as the first\n // assistant message instead of the generic placeholder.\n if (config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n } else {\n this.showPlaceholder();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onSessionReset === 'function') {\n widgetBehavior.onSessionReset(this, config);\n }\n },\n startNewSession() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n const profileId = this.getProfileId();\n if (!profileId || !this.connection) {\n return;\n }\n\n // Force-stop any live voice/realtime session before starting a new chat.\n this.forceStopActiveVoice();\n this.requestNewSession(profileId).catch(err => console.error(err));\n },\n async ensureSessionForDocuments(profileId) {\n var sessionId = this.getSessionId();\n if (sessionId) {\n return sessionId;\n }\n\n if (!profileId || !this.connection) {\n return null;\n }\n\n return await this.requestNewSession(profileId);\n },\n requestNewSession(profileId) {\n if (this.pendingSessionPromise) {\n return this.pendingSessionPromise;\n }\n\n if (!profileId || !this.connection) {\n return Promise.resolve(null);\n }\n\n this.pendingSessionPromise = new Promise((resolve, reject) => {\n this.pendingSessionResolver = resolve;\n this.pendingSessionRejector = reject;\n this.pendingSessionTimeoutId = window.setTimeout(() => {\n this.rejectPendingSessionRequest('Timed out while creating a chat session.');\n }, 15000);\n });\n\n this.connection.invoke(\"StartSession\", profileId, null).catch(err => {\n this.rejectPendingSessionRequest(err);\n });\n\n return this.pendingSessionPromise;\n },\n resolvePendingSessionRequest(sessionId) {\n if (this.pendingSessionResolver) {\n this.pendingSessionResolver(sessionId);\n }\n\n this.clearPendingSessionRequest();\n },\n rejectPendingSessionRequest(error) {\n if (this.pendingSessionRejector) {\n this.pendingSessionRejector(error);\n }\n\n this.clearPendingSessionRequest();\n },\n clearPendingSessionRequest() {\n if (this.pendingSessionTimeoutId) {\n window.clearTimeout(this.pendingSessionTimeoutId);\n }\n\n this.pendingSessionPromise = null;\n this.pendingSessionResolver = null;\n this.pendingSessionRejector = null;\n this.pendingSessionTimeoutId = null;\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n if (!this.inputElement || !this.buttonElement || !this.chatContainer || !this.placeholder) {\n console.error('AI chat app could not initialize because one or more required elements were not found.', {\n inputElementSelector: config.inputElementSelector,\n sendButtonElementSelector: config.sendButtonElementSelector,\n chatContainerElementSelector: config.chatContainerElementSelector,\n placeholderElementSelector: config.placeholderElementSelector\n });\n\n return false;\n }\n\n this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n }\n\n // Initialize document bar if enabled.\n if (config.sessionDocumentsEnabled && config.documentBarSelector) {\n this.documentBar = document.querySelector(config.documentBarSelector);\n if (this.documentBar) {\n this.renderDocumentBar();\n\n // Create hidden file input for document uploads.\n var fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.id = 'ai-chat-doc-input';\n fileInput.className = 'd-none';\n fileInput.multiple = true;\n if (config.allowedExtensions) {\n fileInput.accept = config.allowedExtensions;\n }\n fileInput.addEventListener('change', (e) => this.handleFileInputChange(e));\n this.documentBar.parentElement.appendChild(fileInput);\n\n // Set up drag-and-drop on the input area.\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) {\n inputArea.addEventListener('dragover', (e) => this.handleDragOver(e));\n inputArea.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n inputArea.addEventListener('drop', (e) => this.handleDrop(e));\n }\n }\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keydown', event => {\n\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.buttonElement.addEventListener('click', () => {\n\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const promptGenerators = document.getElementsByClassName('profile-generated-prompt');\n\n for (var i = 0; i < promptGenerators.length; i++) {\n promptGenerators[i].addEventListener('click', (e) => {\n e.preventDefault();\n this.generatePrompt(e.target);\n });\n }\n\n const chatSessions = document.getElementsByClassName('chat-session-history-item');\n\n for (var i = 0; i < chatSessions.length; i++) {\n chatSessions[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var sessionId = e.target.getAttribute('data-session-id');\n\n if (!sessionId) {\n console.error('an element with the class chat-session-history-item with no data-session-id set.');\n\n return;\n }\n\n this.loadSession(sessionId);\n this.showChatScreen();\n });\n }\n\n const initialMessages = Array.isArray(config.messages) ? config.messages : [];\n\n for (let i = 0; i < initialMessages.length; i++) {\n this.addMessage(initialMessages[i]);\n }\n\n // When no messages were loaded and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button (used for both STT/TTS conversation and realtime).\n if ((this.conversationModeEnabled || this.realtimeEnabled) && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n if (this.realtimeEnabled) {\n // The shared realtime module owns the button (click, label, state) and adds the\n // voice settings popover next to it.\n this.setupRealtimeController(config);\n } else {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n }\n\n return true;\n },\n loadSession(sessionId) {\n this.connection.invoke(\"LoadSession\", sessionId).catch(err => console.error(err));\n },\n reloadCurrentSession() {\n\n var sessionId = this.getSessionId();\n if (sessionId) {\n this.loadSession(sessionId);\n }\n },\n initializeSession(sessionId, force) {\n if (this.isSessionStarted && !force) {\n if (sessionId && this.getSessionId() === sessionId) {\n this.resolvePendingSessionRequest(sessionId);\n }\n\n return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionCoreAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n\n // For non-widget pages, update the browser URL so that a page\n // refresh reloads the correct session instead of starting fresh.\n if (!hasWidgetConfig && sessionId && config.sessionUrlTemplate && typeof history !== 'undefined' && history.replaceState) {\n var sessionUrl = config.sessionUrlTemplate.replace('{sessionId}', encodeURIComponent(sessionId));\n history.replaceState(null, '', sessionUrl);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n clearCopiedMessageState() {\n if (this.copyResetTimeoutId) {\n window.clearTimeout(this.copyResetTimeoutId);\n this.copyResetTimeoutId = null;\n }\n\n if (this.activeCopyButton) {\n this.setCopyButtonState(this.activeCopyButton, false);\n this.activeCopyButton = null;\n }\n\n this.copiedMessageIndex = -1;\n },\n copyResponse(message, index, event) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n const button = event?.currentTarget || event?.target?.closest?.('[data-copy-message-index]') || null;\n\n navigator.clipboard.writeText(text)\n .then(() => {\n this.clearCopiedMessageState();\n this.copiedMessageIndex = typeof index === 'number' ? index : -1;\n this.activeCopyButton = button;\n\n if (button) {\n this.setCopyButtonState(button, true);\n } else {\n this.$nextTick(() => this.updateCopyButtons());\n }\n\n this.copyResetTimeoutId = window.setTimeout(() => {\n this.clearCopiedMessageState();\n this.$nextTick(() => this.updateCopyButtons());\n }, Number(config.copyResetDelayMs) || 2000);\n })\n .catch(err => console.error('Failed to copy response:', err));\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n },\n isConversationMode(active) {\n // Hide/show mic button.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // Hide/show send button.\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n // Disable/enable textarea.\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n\n this.$nextTick(() => {\n this.updateCopyButtons();\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.clearCopiedMessageState();\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n const autoInitializeSelector = '[data-coreai-chat-config],[data-coreai-chat-app-element-selector]';\n\n function getAttributeValue(element, attributeName) {\n const value = element.getAttribute(attributeName);\n return value === null || value === '' ? null : value;\n }\n\n function parseBooleanAttributeValue(value) {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n\n return null;\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = getAttributeValue(element, attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n console.error('Failed to parse ' + description + ' JSON.', error);\n return null;\n }\n }\n\n function buildConfigFromDataAttributes(element, options) {\n const settings = options || {};\n\n if (element.hasAttribute('data-coreai-chat-widget-container-selector') && settings.allowWidgetHost !== true) {\n return null;\n }\n\n const appElementSelector = getAttributeValue(element, 'data-coreai-chat-app-element-selector');\n if (!appElementSelector) {\n return null;\n }\n\n const config = {\n signalRHubUrl: getAttributeValue(element, 'data-coreai-chat-signalr-hub-url'),\n appElementSelector: appElementSelector,\n chatContainerElementSelector: getAttributeValue(element, 'data-coreai-chat-container-element-selector'),\n inputElementSelector: getAttributeValue(element, 'data-coreai-chat-input-element-selector'),\n sendButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-send-button-element-selector'),\n placeholderElementSelector: getAttributeValue(element, 'data-coreai-chat-placeholder-element-selector'),\n messages: parseJsonAttribute(element, 'data-coreai-chat-messages', 'CoreAI chat messages') ?? undefined,\n chatMode: getAttributeValue(element, 'data-coreai-chat-mode'),\n micButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-mic-button-element-selector'),\n conversationButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-conversation-button-element-selector'),\n ttsVoiceName: getAttributeValue(element, 'data-coreai-chat-tts-voice-name'),\n realtimeVoiceName: getAttributeValue(element, 'data-coreai-chat-realtime-voice-name'),\n documentBarSelector: getAttributeValue(element, 'data-coreai-chat-document-bar-selector'),\n uploadDocumentUrl: getAttributeValue(element, 'data-coreai-chat-upload-document-url'),\n removeDocumentUrl: getAttributeValue(element, 'data-coreai-chat-remove-document-url'),\n allowedExtensions: getAttributeValue(element, 'data-coreai-chat-allowed-extensions'),\n supportedExtensionsText: getAttributeValue(element, 'data-coreai-chat-supported-extensions-text'),\n existingDocuments: parseJsonAttribute(element, 'data-coreai-chat-existing-documents', 'CoreAI chat existing documents') ?? undefined,\n initialPrompt: getAttributeValue(element, 'data-coreai-chat-initial-prompt'),\n sessionUrlTemplate: getAttributeValue(element, 'data-coreai-chat-session-url-template'),\n userLabel: getAttributeValue(element, 'data-coreai-chat-user-label'),\n assistantLabel: getAttributeValue(element, 'data-coreai-chat-assistant-label'),\n copyTitle: getAttributeValue(element, 'data-coreai-chat-copy-title'),\n copiedTitle: getAttributeValue(element, 'data-coreai-chat-copied-title'),\n };\n\n const booleanAttributes = {\n metricsEnabled: 'data-coreai-chat-metrics-enabled',\n textToSpeechEnabled: 'data-coreai-chat-text-to-speech-enabled',\n sessionDocumentsEnabled: 'data-coreai-chat-session-documents-enabled',\n singleResponseMode: 'data-coreai-chat-single-response-mode',\n realtimeEnabled: 'data-coreai-chat-realtime-enabled',\n realtimeWebRtcEnabled: 'data-coreai-chat-realtime-webrtc-enabled',\n };\n\n Object.keys(booleanAttributes).forEach(key => {\n const parsed = parseBooleanAttributeValue(getAttributeValue(element, booleanAttributes[key]));\n if (parsed !== null) {\n config[key] = parsed;\n }\n });\n\n return compactObject(config);\n }\n\n function buildConfigFromElement(element, options) {\n const jsonConfig = parseJsonAttribute(element, 'data-coreai-chat-config', 'CoreAI chat config');\n const attributeConfig = buildConfigFromDataAttributes(element, options);\n\n if (!jsonConfig && !attributeConfig) {\n return null;\n }\n\n return Object.assign({}, jsonConfig || {}, attributeConfig || {});\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.coreAiChatInitialized === 'true') {\n return element ? element.__coreAIChatApp || null : null;\n }\n\n const config = buildConfigFromElement(element);\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.coreAiChatInitialized = 'true';\n element.__coreAIChatApp = app;\n\n return app;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches(autoInitializeSelector)) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll(autoInitializeSelector).forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n\n return {\n initialize: initialize,\n initializeFromElement: initializeFromElement,\n buildConfigFromElement: buildConfigFromElement,\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
1
+ {"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","coreAIChatManager","_window$CoreAIChatMar","_window$CoreAIChatMar2","_window$CoreAIChatMar3","_window$CoreAIChatMar4","_window$CoreAIChatMar5","_window$CoreAIChatMar6","_window$CoreAIChatMar7","_window$CoreAIChatMar8","_window$CoreAIChatMar9","_window$CoreAIChatMar0","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","copiedTitle","codeCopiedText","copyResetDelayMs","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","_normalized$isGenerat","_normalized$isImage","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isGenerated","IsGenerated","isImage","IsImage","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","readJsonResponse","_x","_x2","_readJsonResponse","_callee0","response","fallbackMessage","contentType","message","_t6","_t7","_context0","headers","get","redirected","ok","data","json","expandImageMarkers","CoreAIChatMarkers","getCitationLabel","unmergedCitationCount","citationIdentity","concat","splitCombinedCitations","content","collapseRepeatedCitations","html","separateAdjacentCitations","citationMarkerHtml","displayIndex","buildCitationDisplay","processedContent","messageReferences","referenceEntries","citations","citedRefs","filter","_ref6","_ref7","includes","generatedRefs","_ref8","_ref9","sort","_ref0","_ref1","_ref10","_ref11","b","_ref12","_ref13","_ref14","_ref15","citationsByIdentity","Map","placeholders","_iterator","_step","_step$value","label","identity","citation","referenceKey","referenceKeys","isDownload","set","placeholder","replaceAll","err","_i2","_placeholders","entry","_iterator2","_step2","_step2$value","map","_ref16","_excluded","buildCopyContent","copyContent","_iterator3","_step3","_citation$referenceKe","_iterator5","_step5","_iterator4","_step4","trimEnd","updateMessagePresentation","rawContent","displayContent","citationDisplay","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","findChartMarker","use","extensions","level","start","idx","undefined","tokenizer","extracted","startIndex","type","raw","substring","endIndex","token","config","markBrokenImagesInMessage","requestAnimationFrame","wireBrokenImageHandlers","images","querySelectorAll","_iterator6","_step6","_loop","setAttribute","addEventListener","container","closest","dataset","brokenHandled","hidden","note","className","insertAdjacentElement","once","renderMessageMedia","charts","_iterator7","_step7","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","keys","styleMarkdownTables","replace","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","resolveIndicatorTemplate","template","encodedAssistantLabel","initialize","instanceConfig","normalizedInstanceConfig","normalizedWidgetConfig","hasWidgetConfig","widgetBehavior","coreAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","realtimeEnabled","realtimeWebRtcEnabled","RTCPeerConnection","realtimeWebRtcIceServers","realtimeVoiceName","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","queueDocumentOperation","operation","self","previousOperation","nextOperation","_callee","_context","_this","_callee3","filesToUpload","_context3","uploadDocumentUrl","_callee2","sessionId","profileId","formData","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","extractReadableErrorMessage","status","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","secondParsed","removeError","_t3","_context4","stringify","itemId","documentId","splice","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","j","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","div","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forceStopActiveVoice","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","stopRecording","rejectPendingSessionRequest","hideTypingIndicator","handleReceiveError","getErrorMessage","reason","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","turnId","_realtimePendingTurns","pending","stopAudio","fillRealtimePendingTurn","_conversationAssistantMessage","at","userMsg","responseId","_conversationAssistantResponseId","prev","msgIndex","newMessage","base64Audio","binaryString","atob","Uint8Array","charCodeAt","realtimeController","receivePcm","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","stopRealtimeConversation","onreconnected","info","onclose","ensureConnectionStarted","_this4","_callee7","states","_t5","_context7","HubConnectionState","state","Connected","Disconnected","settle","clearTimeout","timeoutId","clearInterval","intervalId","setTimeout","setInterval","addMessageInternal","_this5","fireEvent","CustomEvent","_this6","_message$rawContent","addMessages","_this7","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","sendMessage","trimmedPrompt","streamMessage","startRecording","_this8","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","subject","Subject","_sttCapture","_createPcmCapture","base64","_sttSubject","rate","sampleRate","documentElement","send","updateMicButton","_stopPcmCapture","complete","onChunk","AudioCtx","AudioContext","webkitAudioContext","audioContext","srcRate","createMediaStreamSource","processor","createScriptProcessor","onaudioprocess","input","inputBuffer","getChannelData","pcm16","_downsampleToInt16","sum","rms","sqrt","buffer","binary","String","fromCharCode","btoa","connect","destination","capture","disconnect","getTracks","stop","close","dstRate","same","Int16Array","ratio","newLen","floor","out","i0","i1","frac","toggleRecording","sessionProfileId","_this9","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this9$stream","processReferences","streamingFinished","synthesizeSpeech","_this9$stream2","getServiceDownMessage","_this0","_ref22","_message$rawContent2","stopIcon","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this1","buttons","button","buttonIndex","isPlaying","toggle","updateCopyButtons","_this10","isCopied","iconHtml","setCopyButtonState","cacheIndex","_this11","_ttsCacheIndex","invoke","toggleMessageTts","_this12","playAudioBlob","_this13","totalLength","reduce","combined","offset","_iterator8","_step8","blob","Blob","_this14","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this15","nextBlob","shift","conversationModeOnAudioEnded","_this16","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","startRealtimeConversation","setupRealtimeController","CoreAIRealtime","attach","ensureConnected","connected","Error","sendStart","voice","silenceMs","vadThreshold","allowInterruption","webRtcEnabled","sendStartWebRtc","offerSdp","webRtcIceServers","voiceName","getVoiceName","selectors","realtimeButton","conversationButtonElementSelector","sendButton","micButtonElementSelector","onActivate","onDeactivate","finishRealtimeConversationCleanup","onUserTurnPending","addRealtimePendingTurn","onUserTurnDropped","dropRealtimePendingTurn","dismissible","autoDismissMs","emptyAt","dropped","_this17","updateConversationButton","_conversationSubject","_conversationStream","interruptRmsThreshold","_conversationCapture","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","location","origin","searchParams","originalLength","removedCount","_this18","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this19","timerId","dismissNotification","handleNotificationAction","actionName","_this20","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","sessionRating","onSessionReset","startNewSession","requestNewSession","_this21","_callee8","_context8","_this22","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this23","placeholderElementSelector","loadSession","documentBarSelector","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","force","onSessionInitialized","sessionUrlTemplate","history","replaceState","sessionUrl","encodeURIComponent","resolveSessionId","clearCopiedMessageState","copyResponse","_ref23","_message$copyContent","_event$target","_event$target$closest","_this24","currentTarget","updateFeedbackIcons","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","_this25","active","mounted","_this26","_callee9","isInitialized","_context9","onMounted","fontAwesomeObserver","beforeUnmount","onBeforeUnmount","app","Vue","createApp","mount","autoInitializeSelector","getAttributeValue","attributeName","parseBooleanAttributeValue","parseJsonAttribute","description","rawValue","buildConfigFromDataAttributes","_parseJsonAttribute","_parseJsonAttribute2","settings","hasAttribute","allowWidgetHost","booleanAttributes","buildConfigFromElement","jsonConfig","attributeConfig","initializeFromElement","coreAiChatInitialized","__coreAIChatApp","scanForAutoInitialization","startAutoInitialization","readyState","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["/*\n * Figure markers: the short labels the model writes, turned into pictures by the host.\n *\n * Retrieval hands the model a label -- [fig:1] -- and keeps the picture's real link in the message's reference\n * map, the same way a text citation keeps its source behind \"[doc:1]\". A model asked to reproduce a long opaque\n * identifier does not reproduce it: it copies the shape and substitutes ordinals, so links to figures that were\n * never in the results came back as 404s. A label short enough to be written exactly, with the link put back\n * here where the model cannot reach it, is what stops that.\n *\n * It sits on window rather than inside the manager below so the host can reach it, and so its rules can be\n * exercised in a bare sandbox with no browser and no DOM -- see tests/realtime-client/figure-markers.test.js --\n * exactly as window.CoreAIRealtime exposes the microphone gate's rules.\n *\n * The same block sits at the top of chat-interaction.js: the two chat clients are separate bundles that share no\n * module of their own, and both render the same markdown. Change one, change the other.\n */\n// CoreAIChatMarkers lives in chat-markers.js, which every chat surface loads before this file.\n\nwindow.coreAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n codeCopiedText: 'Copied!',\n copyResetDelayMs: 2000,\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-message-heading ai-chat-message-heading-user\">\n <span class=\"ai-chat-msg-role ai-chat-msg-role-user\">{{ userLabel }}</span>\n </div>\n <div v-else-if=\"message.role !== 'indicator'\" class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n <span class=\"ai-chat-message-role-label\">{{ getAssistantLabel(message) }}</span>\n </div>\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button type=\"button\" class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <i class=\"fa-regular fa-thumbs-up\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <i class=\"fa-regular fa-thumbs-down\"></i>\n </button>\n </span>\n </template>\n <button type=\"button\" v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link p-0 button-message-toolbox ai-response-copy-btn\" :class=\"copiedMessageIndex === index ? 'text-success' : 'text-secondary'\" :data-copy-message-index=\"index\" @click=\"copyResponse(message, index, $event)\" :title=\"copiedMessageIndex === index ? copiedTitle : copyTitle\">\n <i :class=\"copiedMessageIndex === index ? 'fa-solid fa-check' : 'fa-solid fa-copy'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button type=\"button\" v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button type=\"button\" v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n <span class=\"ai-chat-message-role-label\">Assistant</span>\n </div>\n </div>\n `\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n normalized.isGenerated = (normalized.isGenerated ?? normalized.IsGenerated) === true;\n normalized.isImage = (normalized.isImage ?? normalized.IsImage) === true;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n // Installed at the top of this file so it can be unit tested without a browser; see the comment there.\n\n /*\n * Reads a JSON response body, or explains why it is not JSON.\n *\n * fetch follows a redirect silently and reports the page it landed on as a success, so an endpoint that\n * answers \"forbidden\" with a redirect to a sign-in page arrives here as response.ok with HTML in it.\n * Calling response.json() on that throws \"unexpected character at line 1 column 1\", which is what the\n * reader was shown instead of being told they are not allowed to upload.\n *\n * Returns { ok, data, message }. A caller shows message when ok is false; it is never a parser error.\n */\n async function readJsonResponse(response, fallbackMessage) {\n const contentType = (response.headers && response.headers.get('content-type')) || '';\n\n if (contentType.toLowerCase().indexOf('json') < 0) {\n // A redirect that landed somewhere else is the common case and worth naming, because the endpoint\n // did not refuse -- something in front of it did.\n const message = response.redirected\n ? 'You may not be signed in, or you do not have permission for this. Please reload and try again.'\n : fallbackMessage;\n\n return { ok: false, data: null, message: message };\n }\n\n try {\n return { ok: true, data: await response.json(), message: null };\n } catch (error) {\n return { ok: false, data: null, message: fallbackMessage };\n }\n }\n\n const expandImageMarkers = window.CoreAIChatMarkers.expandImageMarkers;\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n // Which references are one citation, and how a repeated marker reads, are statements about strings and\n // live in chat-markers.js so every chat surface numbers them the same way. Without the module each\n // reference keeps an identity of its own and nothing merges, which is the numbering this script had\n // before it.\n let unmergedCitationCount = 0;\n const citationIdentity = window.CoreAIChatMarkers?.citationIdentity\n ?? (() => `unmerged-${++unmergedCitationCount}`);\n const splitCombinedCitations = window.CoreAIChatMarkers?.splitCombinedCitations\n ?? (content => content);\n const collapseRepeatedCitations = window.CoreAIChatMarkers?.collapseRepeatedCitations\n ?? (html => html);\n const separateAdjacentCitations = window.CoreAIChatMarkers?.separateAdjacentCitations\n ?? (html => html);\n const citationMarkerHtml = window.CoreAIChatMarkers?.citationMarkerHtml\n ?? (displayIndex => `<sup>${displayIndex}</sup>`);\n\n function buildCitationDisplay(content, references) {\n // Before anything looks for a reference key, the combined form the model tends to write is split into\n // the keys it means. A key that is not found is not replaced, and an unreplaced key reaches the reader\n // as a raw marker mid-sentence.\n let processedContent = splitCombinedCitations((content || '').trim());\n const messageReferences = normalizeReferences(references);\n const referenceEntries = Object.entries(messageReferences);\n\n if (!referenceEntries.length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = referenceEntries.filter(([key]) => processedContent.includes(key));\n const generatedRefs = referenceEntries.filter(([key, value]) => value.isGenerated && !processedContent.includes(key));\n\n if (!citedRefs.length && !generatedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n generatedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n const citationsByIdentity = new Map();\n const placeholders = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const label = getCitationLabel(value, key);\n const link = value.link || null;\n const identity = citationIdentity(label, link);\n let citation = citationsByIdentity.get(identity);\n\n // Every reference still has its key replaced, so the text never keeps a raw key; what the merge\n // changes is only how many numbers the reader is given for them.\n if (!citation) {\n citation = {\n referenceKey: key,\n referenceKeys: [],\n displayIndex: displayIndex++,\n label: label,\n link: link,\n isDownload: isDownloadCitationReference(value),\n };\n\n citationsByIdentity.set(identity, citation);\n citations.push(citation);\n }\n\n citation.referenceKeys.push(key);\n\n const placeholder = `__CITE_${citation.displayIndex}_${value.index || citation.displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n placeholders.push({ placeholder, displayIndex: citation.displayIndex, label: citation.label });\n }\n\n for (const entry of placeholders) {\n processedContent = processedContent.replaceAll(entry.placeholder, citationMarkerHtml(entry.displayIndex, entry.label));\n }\n\n // Merged citations can leave the same number twice over a sentence; that is collapsed before the\n // commas go in, or the reader is given \"1,1\".\n processedContent = collapseRepeatedCitations(processedContent);\n processedContent = separateAdjacentCitations(processedContent);\n\n // Generated files (such as exported tabular data) are always offered as a download even when\n // the model does not cite them inline, so the user never loses access to the produced file.\n for (const [key, value] of generatedRefs) {\n citations.push({\n referenceKey: key,\n referenceKeys: [key],\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: true,\n placeholder: null,\n });\n\n displayIndex++;\n }\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n // Every key the citation absorbed is replaced, not just the first: a merged key left behind would\n // reach the clipboard as the raw reference token the reader never saw on the page.\n for (const citation of citations) {\n for (const key of (citation.referenceKeys?.length ? citation.referenceKeys : [citation.referenceKey])) {\n copyContent = copyContent.replaceAll(key, `[${citation.displayIndex}]`);\n }\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n // Figure markers become images before anything else reads the content: the citation pass looks for its\n // own keys in what is left, and the markdown parser then sees an ordinary image.\n const displayContent = expandImageMarkers(rawContent, messageReferences);\n const citationDisplay = buildCitationDisplay(displayContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n // Copied from the expanded content, so a copied answer carries the picture's link rather than a label\n // that means nothing outside this page.\n // Split here too: the copy is built from the expanded content rather than the display path's output,\n // so a combined marker would otherwise survive into the clipboard as a raw key.\n message.copyContent = buildCopyContent(splitCombinedCitations(displayContent), citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n // Spans, not divs. A figure marker is often written mid-sentence -- \"Figures [fig:1], [fig:2] and\n // [fig:3] show...\" -- and a block element cannot sit inside a paragraph: the browser closes the <p>\n // at the first one, so the sentence is torn into fragments and the commas between the markers are\n // left stranded on their own lines. Inline-block keeps the figure looking exactly the same while\n // remaining something a paragraph can legally contain.\n return `<span class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <span class=\"mt-2 d-block\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </span>\n </span>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map: any page (e.g., Chat Interactions) that uses\n // the shared marked instance can call window.renderPendingCharts() after\n // its DOM update to render charts it didn't create itself.\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // The marker itself is read by chat-markers.js, shared with every other chat surface, so the three of them\n // cannot disagree about what a marker is. Everything below -- the container, the id scheme, the Chart.js\n // call -- is this surface's own and legitimately differs from the others.\n const findChartMarker = window.CoreAIChatMarkers.findChartMarker;\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = findChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // An image the assistant named but the server will not serve. The address is written by a language\n // model from what retrieval handed it, so a mistyped or invented one is possible, and the browser's\n // default for that is a broken-image icon captioned with the alt text -- which reads as a real picture\n // that failed to arrive. Saying plainly that it could not be loaded is both truer and quieter.\n //\n // Wired here rather than as an inline onerror attribute because message bodies go through DOMPurify,\n // which strips event-handler attributes.\n function markBrokenImagesInMessage() {\n // Scanning the document rather than one message, because the value threaded through the render\n // path is the message DATA object -- the thing carrying content, references and pending charts --\n // and not the element it was rendered into. Wiring is idempotent via the data-broken-wired mark,\n // so re-scanning after each render costs a query over the handful of images already handled.\n if (typeof document === 'undefined' || typeof requestAnimationFrame !== 'function') {\n return;\n }\n\n // Deferred for the same reason the charts below are: the render that produced these elements has\n // not necessarily been flushed to the DOM when this runs.\n requestAnimationFrame(wireBrokenImageHandlers);\n }\n\n function wireBrokenImageHandlers() {\n const images = document.querySelectorAll('.generated-image-container img:not([data-broken-wired])');\n\n for (const image of images) {\n image.setAttribute('data-broken-wired', 'true');\n image.addEventListener('error', function () {\n const container = image.closest('.generated-image-container');\n\n if (!container || container.dataset.brokenHandled) {\n return;\n }\n\n container.dataset.brokenHandled = 'true';\n container.hidden = true;\n\n const note = document.createElement('p');\n note.className = 'text-muted small fst-italic mb-2';\n note.textContent = image.alt\n ? `(the picture \"${image.alt}\" could not be loaded)`\n : '(that picture could not be loaded)';\n container.insertAdjacentElement('afterend', note);\n }, { once: true });\n }\n }\n\n function renderMessageMedia(message) {\n markBrokenImagesInMessage();\n\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n renderChartOnCanvas(c.chartId, c.config);\n }\n });\n }\n\n function renderChartOnCanvas(chartId, config) {\n const canvas = document.getElementById(chartId);\n if (!canvas) {\n return false;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n return false;\n }\n\n // When the canvas is inside a hidden container (e.g., a widget panel with\n // display:none), it has zero dimensions and Chart.js cannot render correctly.\n // Keep the config in __chartConfigs so renderPendingCharts() can retry later\n // once the container becomes visible.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[chartId] = config;\n return false;\n }\n\n try {\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof config === 'string' ? JSON.parse(config) : config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n delete window.__chartConfigs[chartId];\n return true;\n } catch (e) {\n console.error('Error creating chart:', e);\n return false;\n }\n }\n\n // Global function: renders any chart canvases whose configs are in the\n // global __chartConfigs map. Called by pages (e.g., Chat Interactions)\n // that share the marked instance but have their own rendering pipeline.\n window.renderPendingCharts = function () {\n if (typeof Chart === 'undefined') {\n return;\n }\n\n const configs = window.__chartConfigs;\n if (!configs) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const chartId of Object.keys(configs)) {\n renderChartOnCanvas(chartId, configs[chartId]);\n }\n });\n };\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n // A markdown table becomes a bare <table>, which Bootstrap leaves completely unstyled: it renders\n // as cramped, borderless text that reads as plain output rather than a table. Adding the framework's\n // own classes styles it wherever Bootstrap is loaded, and the wrapper lets a wide table scroll on\n // its own instead of stretching the conversation. Markdown tables cannot nest, so the plain\n // replacement is safe.\n function styleMarkdownTables(html) {\n return html\n .replace(/<table>/g, '<div class=\"table-responsive\"><table class=\"table table-sm table-bordered table-striped align-middle\">')\n .replace(/<\\/table>/g, '</table></div>');\n }\n\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = styleMarkdownTables(marked.parse(content, { renderer }));\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n function compactObject(source) {\n if (!source || typeof source !== 'object') {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(source).filter(([, value]) => value !== undefined)\n );\n }\n\n function resolveIndicatorTemplate(template, assistantLabel) {\n if (!template) {\n return template;\n }\n\n const encodedAssistantLabel = escapeHtmlEntities(assistantLabel || 'Assistant');\n return template.replace(/\\{\\{\\s*assistantLabel\\s*\\}\\}/g, encodedAssistantLabel);\n }\n\n const initialize = (instanceConfig) => {\n const normalizedInstanceConfig = compactObject(instanceConfig);\n const normalizedWidgetConfig = compactObject(normalizedInstanceConfig.widget);\n const config = Object.assign({}, defaultConfig, normalizedInstanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, normalizedWidgetConfig);\n config.indicatorTemplate = resolveIndicatorTemplate(config.indicatorTemplate, config.assistantLabel);\n const hasWidgetConfig = !!(normalizedWidgetConfig.chatWidgetContainer && normalizedWidgetConfig.chatWidgetStateName);\n const widgetBehavior = window.coreAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n realtimeEnabled: !!config.realtimeEnabled,\n // Server-relay WebRTC transport: primary when advertised and supported; the client falls back\n // to the WebSocket path below if the peer cannot connect.\n realtimeWebRtcEnabled: config.realtimeWebRtcEnabled === true && typeof window.RTCPeerConnection === 'function',\n // A host-supplied override. Normally the servers are fetched from the hub right before the\n // peer is created (resolveRealtimeIceServers) so configured TURN relays — and their\n // short-lived credentials — are actually used instead of a public STUN server.\n realtimeWebRtcIceServers: (Array.isArray(config.realtimeWebRtcIceServers) && config.realtimeWebRtcIceServers.length)\n ? config.realtimeWebRtcIceServers\n : null,\n realtimeVoiceName: config.realtimeVoiceName || null,\n conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n copiedMessageIndex: -1,\n copyResetTimeoutId: null,\n activeCopyButton: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var parsed = await readJsonResponse(response, 'Upload failed. Please try again.');\n\n if (!parsed.ok) {\n console.error('Upload failed: response was not JSON.', { status: response.status, redirected: response.redirected });\n this.uploadErrors = [{ fileName: '', error: parsed.message }];\n\n return;\n }\n\n var result = parsed.data;\n\n if (result.sessionId && result.sessionId !== this.getSessionId()) {\n this.initializeSession(result.sessionId);\n }\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else if (result.uploaded && result.uploaded.length > 0) {\n this.documents = this.documents.concat(result.uploaded);\n }\n\n if (result.failed && result.failed.length > 0) {\n this.uploadErrors = result.failed;\n }\n } catch (err) {\n console.error('Upload error:', err);\n this.uploadErrors = [{ fileName: '', error: 'Upload failed. Please try again.' }];\n\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n });\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\n return this.queueDocumentOperation(async () => {\n try {\n var sessionId = this.getSessionId();\n var response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ itemId: sessionId, documentId: doc.documentId })\n });\n\n if (response.ok) {\n var secondParsed = await readJsonResponse(response, 'The request could not be completed.');\n\n if (!secondParsed.ok) {\n console.error('Response was not JSON.', { status: response.status, redirected: response.redirected });\n\n return;\n }\n\n var result = secondParsed.data;\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else {\n var idx = this.documents.indexOf(doc);\n if (idx > -1) {\n this.documents.splice(idx, 1);\n }\n }\n } else {\n var errorText = await response.text();\n var removeError = this.extractReadableErrorMessage(errorText, 'Failed to remove document. Please try again.');\n console.error('Failed to remove document:', response.status, errorText);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: removeError }];\n if (sessionId) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n } catch (err) {\n console.error('Remove document error:', err);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: 'Failed to remove document. Please try again.' }];\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n });\n },\n formatFileSize(bytes) {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n },\n renderDocumentBar() {\n if (!this.documentBar) return;\n\n if (!config.sessionDocumentsEnabled) {\n this.documentBar.classList.add('d-none');\n return;\n }\n\n this.documentBar.classList.remove('d-none');\n\n var html = '<div class=\"ai-chat-doc-bar p-2\">';\n html += '<div class=\"d-flex flex-wrap align-items-center gap-1\">';\n\n for (var i = 0; i < this.documents.length; i++) {\n var doc = this.documents[i];\n var name = doc.fileName || 'Document';\n if (name.length > 20) name = name.substring(0, 17) + '...';\n html += '<span class=\"badge bg-secondary bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml(doc.fileName || '') + '\">';\n html += '<i class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n // The reason is shown, not hidden behind a tooltip. A pill reading \"quarterly-report-2...\"\n // tells a reader their upload failed and nothing about why, and a title attribute is\n // unreachable on a touch device -- so the one sentence that tells them what to do next\n // was the one thing the widget would not display.\n html += '<span class=\"alert alert-danger d-flex align-items-start gap-2 w-100 mb-1 py-1 px-2\" role=\"alert\" style=\"font-size: 0.8rem;\">';\n html += '<i class=\"fa-solid fa-circle-exclamation mt-1\" style=\"font-size: 0.7rem;\"></i>';\n html += '<span class=\"flex-grow-1\">';\n\n if (failedItem.fileName) {\n html += '<strong>' + this.escapeHtml(failedItem.fileName) + '</strong>: ';\n }\n\n html += this.escapeHtml(errorMsg);\n html += '</span>';\n html += '<button type=\"button\" class=\"btn-close btn-close-sm\" style=\"font-size: 0.5rem;\" data-error-index=\"' + m + '\" aria-label=\"Dismiss\"></button>';\n html += '</span>';\n }\n\n if (this.isUploading) {\n html += '<span class=\"badge bg-info bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\">';\n html += '<span class=\"spinner-border spinner-border-sm\" style=\"width: 0.7rem; height: 0.7rem;\"></span> Uploading...';\n html += '</span>';\n }\n\n html += '<button type=\"button\" class=\"btn btn-sm btn-outline-secondary rounded-pill ai-chat-doc-add-btn d-inline-flex align-items-center gap-1\" style=\"font-size: 0.75rem; padding: 0.15rem 0.5rem;\" title=\"Attach documents\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '>';\n html += '<i class=\"fa-solid fa-paperclip\"></i>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n // Switching to another session must not leave a prior realtime/voice session running.\n this.forceStopActiveVoice();\n this.initializeSession(data.sessionId, true);\n this.messages = [];\n this.documents = data.documents || [];\n this.uploadErrors = [];\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderMessageMedia(msg);\n });\n });\n\n // Update feedback icons in the DOM after all messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // When the session is new (no messages) and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n });\n\n // Realtime lifecycle events (ReceiveRealtimeEvent, and ReceiveError while a voice session is\n // live) are handled by the shared CoreAIRealtime module — see setupRealtimeController.\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // A server-side error (for example a session-start rate-limit rejection) ends the\n // in-flight request. Reject any pending new-session promise so the UI stops waiting\n // until it times out, and clear the typing indicator that a send may have shown.\n this.rejectPendingSessionRequest(error);\n this.hideTypingIndicator();\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\n } else if (!this.isNavigatingAway) {\n // Surface the message to the user instead of failing silently.\n this.addMessage(this.getErrorMessage(error));\n }\n });\n\n this.connection.on(\"ReceiveSessionStartRejected\", (reason) => {\n // A rate-limit rejection is a definitive \"wait and retry\", not a recoverable\n // session/connection error. Unblock any pending new-session request, clear the\n // typing indicator, and show the message for every host (main app and widget)\n // without triggering the widget's clear-and-retry recovery, which would wipe the\n // visitor's state and fire another throttled StartSession.\n this.rejectPendingSessionRequest(reason);\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getErrorMessage(reason));\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, turnId, text) => {\n // Realtime creates the chat session server-side; adopt its id (and update the page URL)\n // on the first turn so a refresh reloads the conversation instead of starting fresh.\n if (sessionId && this.getSessionId() !== sessionId) {\n this.initializeSession(sessionId);\n }\n\n // Realtime: a placeholder for this turn was already inserted in the right position when\n // the utterance was captured (see user_turn_pending), so just fill in its text.\n if (turnId && this._realtimePendingTurns && this._realtimePendingTurns[turnId]) {\n var pending = this._realtimePendingTurns[turnId];\n delete this._realtimePendingTurns[turnId];\n this.stopAudio();\n this.fillRealtimePendingTurn(pending, text);\n\n return;\n }\n\n if (text) {\n this.stopAudio();\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else if (this._conversationAssistantMessage) {\n // Realtime: the user's transcript lags the assistant's reply for the SAME turn (the\n // model answers the audio before speech-to-text finishes). Insert the user message\n // just before the streaming assistant message so the order stays You -> Assistant,\n // and keep that message streaming — ending it here split one reply into two bubbles\n // above the prompt.\n var at = this._conversationAssistantMessage.index;\n var userMsg = { role: 'user', content: text, rawContent: text, userRating: null, references: {} };\n updateMessagePresentation(userMsg, userMsg.references);\n this.messages.splice(at, 0, userMsg);\n this._conversationAssistantMessage.index = at + 1;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n // A new response id means a new turn — finalize the previous assistant message so two replies\n // never merge into one bubble (also covers barge-in, which starts a fresh response).\n if (this._conversationAssistantMessage && this._conversationAssistantResponseId && responseId && this._conversationAssistantResponseId !== responseId) {\n var prev = this.messages[this._conversationAssistantMessage.index];\n if (prev) { prev.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n this._conversationAssistantResponseId = responseId;\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderMessageMedia(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n this._conversationAssistantResponseId = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (!base64Audio) {\n return;\n }\n\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Realtime audio arrives as raw PCM16 (WebSocket transport) and is scheduled for immediate\n // playback by the shared module; conversation/TTS audio (mp3/wav) is collected and played on\n // complete.\n if (contentType === 'audio/pcm') {\n if (this.realtimeController) { this.realtimeController.receivePcm(bytes); }\n } else {\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (sessionId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n\n // The realtime session lived inside the dropped connection; it cannot survive a reconnect.\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n async ensureConnectionStarted() {\n if (!this.connection) {\n return false;\n }\n\n var states = signalR.HubConnectionState;\n if (this.connection.state === states.Connected) {\n return true;\n }\n\n // If the initial start failed or has not begun, start it now.\n if (this.connection.state === states.Disconnected) {\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n\n return this.connection.state === states.Connected;\n }\n\n // The connection is still Connecting or Reconnecting: wait for it to settle so callers\n // (e.g. starting a realtime session) do not send before the socket is ready.\n return await new Promise((resolve) => {\n var settle = (value) => {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(value);\n };\n var timeoutId = setTimeout(() => settle(this.connection.state === states.Connected), 10000);\n var intervalId = setInterval(() => {\n if (this.connection.state === states.Connected) {\n settle(true);\n } else if (this.connection.state === states.Disconnected) {\n settle(false);\n }\n }, 100);\n });\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingCoreAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedCoreAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n },\n addMessages(messages) {\n\n for (let i = 0; i < messages.length; i++) {\n this.addMessageInternal(messages[i]);\n }\n\n this.hidePlaceholder();\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n isOrchestratorAvailable() {\n return config.isOrchestratorAvailable !== false;\n },\n applyOrchestratorAvailability() {\n if (this.isOrchestratorAvailable()) {\n return true;\n }\n\n const unavailableMessage = config.orchestratorUnavailableMessage || \"This orchestrator is not currently available.\";\n\n if (this.inputElement) {\n this.inputElement.disabled = true;\n this.inputElement.value = '';\n this.inputElement.placeholder = unavailableMessage;\n }\n\n if (this.buttonElement) {\n this.buttonElement.disabled = true;\n }\n\n if (this.micButtonElement) {\n this.micButtonElement.disabled = true;\n this.micButtonElement.style.display = 'none';\n }\n\n if (this.conversationButtonElement) {\n this.conversationButtonElement.disabled = true;\n this.conversationButtonElement.style.display = 'none';\n }\n\n return false;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n sendMessage() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // In single-response mode, clear all previous messages.\n if (this.singleResponseMode) {\n this.messages.splice(0, this.messages.length);\n }\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n this.streamMessage(this.getProfileId(), trimmedPrompt, null);\n this.inputElement.value = '';\n this.prompt = '';\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder.\n // Browsers only agree on WebM/Opus for MediaRecorder, and Azure's speech SDK cannot\n // demux that container from a streaming push (it fails inside GStreamer). Raw PCM is\n // decoded natively with no GStreamer and is produced identically by every browser.\n this._sttCapture = this._createPcmCapture(stream, (base64) => {\n try { subject.next(base64); } catch (err) { /* completed */ }\n });\n this._sttSubject = subject;\n\n var rate = (this._sttCapture && this._sttCapture.sampleRate) || 16000;\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording) {\n return;\n }\n\n this._stopPcmCapture(this._sttCapture);\n this._sttCapture = null;\n if (this._sttSubject) {\n try { this._sttSubject.complete(); } catch (err) { /* already completed */ }\n this._sttSubject = null;\n }\n this.isRecording = false;\n this.updateMicButton();\n },\n // Captures microphone audio as raw 16 kHz, 16-bit mono PCM using Web Audio and invokes\n // onChunk(base64Pcm, rms) for each block. Returns a handle for _stopPcmCapture. This replaces\n // MediaRecorder so every browser streams a format Azure decodes without GStreamer.\n _createPcmCapture(stream, onChunk) {\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n // Ask the browser to resample the mic to 16 kHz; fall back to manual resampling if it will not.\n var audioContext;\n try {\n audioContext = new AudioCtx({ sampleRate: 16000 });\n } catch (e) {\n audioContext = new AudioCtx();\n }\n var srcRate = audioContext.sampleRate;\n var source = audioContext.createMediaStreamSource(stream);\n var processor = audioContext.createScriptProcessor(4096, 1, 1);\n var self = this;\n processor.onaudioprocess = function (e) {\n var input = e.inputBuffer.getChannelData(0);\n var pcm16 = self._downsampleToInt16(input, srcRate, 16000);\n if (!pcm16 || pcm16.length === 0) {\n return;\n }\n var sum = 0;\n for (var i = 0; i < pcm16.length; i++) {\n var v = pcm16[i] / 32768;\n sum += v * v;\n }\n var rms = Math.sqrt(sum / pcm16.length);\n var bytes = new Uint8Array(pcm16.buffer);\n var binary = '';\n for (var j = 0; j < bytes.length; j++) {\n binary += String.fromCharCode(bytes[j]);\n }\n onChunk(btoa(binary), rms);\n };\n source.connect(processor);\n // Some browsers only fire onaudioprocess while the node is connected to a destination.\n processor.connect(audioContext.destination);\n return { audioContext: audioContext, source: source, processor: processor, stream: stream, sampleRate: 16000 };\n },\n _stopPcmCapture(capture) {\n if (!capture) {\n return;\n }\n try { if (capture.processor) { capture.processor.onaudioprocess = null; capture.processor.disconnect(); } } catch (e) { }\n try { if (capture.source) { capture.source.disconnect(); } } catch (e) { }\n try { if (capture.stream) { capture.stream.getTracks().forEach(function (t) { t.stop(); }); } } catch (e) { }\n try { if (capture.audioContext) { capture.audioContext.close(); } } catch (e) { }\n },\n // Converts a Float32 sample block to 16-bit PCM, resampling from srcRate to dstRate when needed.\n _downsampleToInt16(input, srcRate, dstRate) {\n var s, i;\n if (!(dstRate < srcRate)) {\n var same = new Int16Array(input.length);\n for (i = 0; i < input.length; i++) {\n s = Math.max(-1, Math.min(1, input[i]));\n same[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return same;\n }\n var ratio = srcRate / dstRate;\n var newLen = Math.floor(input.length / ratio);\n var out = new Int16Array(newLen);\n for (var j = 0; j < newLen; j++) {\n var idx = j * ratio;\n var i0 = Math.floor(idx);\n var i1 = (i0 + 1 < input.length) ? i0 + 1 : input.length - 1;\n var frac = idx - i0;\n s = input[i0] * (1 - frac) + input[i1] * frac;\n s = Math.max(-1, Math.min(1, s));\n out[j] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return out;\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n let newMessage = {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n\n return newMessage;\n },\n getErrorMessage(error) {\n var content = (typeof error === 'string' && error.trim())\n ? error\n : \"Something went wrong. Please try again.\";\n\n return {\n role: \"assistant\",\n content: content,\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.setAttribute('disabled', 'disabled');\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.removeAttribute('disabled');\n this.inputElement.focus();\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n });\n },\n updateCopyButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-copy-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-copy-message-index'));\n var isCopied = buttonIndex === this.copiedMessageIndex;\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n setCopyButtonState(button, isCopied) {\n if (!button) {\n return;\n }\n\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.realtimeEnabled) {\n // Realtime is driven by the shared module, which owns the button; this only exists for\n // callers that toggle programmatically.\n if (this.realtimeController) { this.realtimeController.toggle(); }\n\n return;\n }\n\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n // Force-stop any in-progress voice/realtime session (mic, playback, and the streamed audio),\n // e.g. before starting a new chat or switching sessions, so it never keeps running in the background.\n forceStopActiveVoice() {\n if (!this.isConversationMode) {\n return;\n }\n if (this.realtimeEnabled) {\n this.stopRealtimeConversation();\n } else {\n this.stopConversationMode();\n }\n },\n startRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.start(); }\n },\n stopRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.stop(); }\n },\n // Realtime (speech-to-speech) is the shared CoreAIRealtime module (realtime-audio.js): microphone\n // capture and gating, the WebRTC transport with its WebSocket fallback, playback, the settings\n // popover, push-to-talk, and the server-driven session lifecycle all live there, so this app and the\n // chat-interaction client cannot drift apart. What is wired here is only how the module reaches this\n // app's hub and transcript.\n setupRealtimeController(config) {\n if (this.realtimeController || !this.conversationButton) { return; }\n if (!window.CoreAIRealtime || typeof window.CoreAIRealtime.attach !== 'function') {\n console.error('realtime-audio.js is not loaded; realtime voice is unavailable on this page.');\n\n return;\n }\n\n var self = this;\n this.realtimeController = window.CoreAIRealtime.attach({\n connection: this.connection,\n ensureConnected: function () {\n return self.ensureConnectionStarted().then(function (connected) {\n if (!connected) { throw new Error('The chat connection is not available.'); }\n\n return connected;\n });\n },\n sendStart: function (subject, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeConversation', self.getProfileId(), self.getSessionId() || '', subject, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcEnabled: this.realtimeWebRtcEnabled,\n sendStartWebRtc: function (offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeWebRtc', self.getProfileId(), self.getSessionId() || '', offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcIceServers: this.realtimeWebRtcIceServers || undefined,\n voiceName: this.realtimeVoiceName || '',\n getVoiceName: function () { return self.realtimeVoiceName || ''; },\n realtimeEnabled: true,\n // The conversation button doubles as the realtime button on this host; the module owns its\n // click, label and state from here on. The text controls are handed over too so the module\n // hides them: realtime is audio-only, and a message box that plays no part in a spoken\n // conversation only invites the user to type into it.\n //\n // conversationButton is deliberately not passed. It is the same element as the realtime\n // button here, and the module hides the conversation button before showing the realtime\n // one -- naming it twice would ask it to hide the control it then has to show.\n selectors: {\n realtimeButton: config.conversationButtonElementSelector,\n input: config.inputElementSelector,\n sendButton: config.sendButtonElementSelector,\n micButton: config.micButtonElementSelector\n },\n onActivate: function () {\n self.isConversationMode = true;\n self._conversationAssistantMessage = null;\n self._conversationPartialMessage = null;\n self.removeNotification('conversation-ended');\n },\n onDeactivate: function () {\n self.isConversationMode = false;\n self.finishRealtimeConversationCleanup();\n },\n onUserTurnPending: function (turnId) { self.addRealtimePendingTurn(turnId); },\n onUserTurnDropped: function (turnId) { self.dropRealtimePendingTurn(turnId); }\n });\n },\n // Shared teardown tail: clears any in-flight streaming state and shows the conversation-ended\n // notification.\n finishRealtimeConversationCleanup() {\n if (this._conversationAssistantMessage) {\n var m = this.messages[this._conversationAssistantMessage.index];\n if (m) { m.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) { this.messages[i].isStreaming = false; }\n }\n\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n // The utterance has been captured but not transcribed yet. Showing a placeholder now puts the\n // prompt above the reply it produces: transcription lags the spoken answer, so a bubble added only\n // when the text arrives lands underneath its own reply.\n addRealtimePendingTurn(turnId) {\n if (!turnId) { return; }\n this._realtimePendingTurns = this._realtimePendingTurns || {};\n var index = this.messages.length;\n this.addMessage({ role: 'user', content: '', isPartial: true });\n this._realtimePendingTurns[turnId] = this.messages[index];\n },\n fillRealtimePendingTurn(pending, text) {\n if (!pending) { return; }\n if (!text) {\n var emptyAt = this.messages.indexOf(pending);\n if (emptyAt >= 0) { this.messages.splice(emptyAt, 1); }\n\n return;\n }\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n pending.content = text;\n pending.htmlContent = '<p>' + escaped + '</p>';\n pending.isPartial = false;\n },\n dropRealtimePendingTurn(turnId) {\n if (!turnId || !this._realtimePendingTurns) { return; }\n var dropped = this._realtimePendingTurns[turnId];\n if (!dropped) { return; }\n delete this._realtimePendingTurns[turnId];\n var at = this.messages.indexOf(dropped);\n if (at >= 0) { this.messages.splice(at, 1); }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // RMS (0..1) above which speech during TTS playback counts as an interrupt.\n var interruptRmsThreshold = 0.12;\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder — see\n // startRecording for why WebM/Opus is avoided. The per-block RMS drives interrupt\n // detection during TTS playback, replacing the previous AnalyserNode.\n this._conversationCapture = this._createPcmCapture(stream, (base64, rms) => {\n if (this.isPlayingAudio && rms >= interruptRmsThreshold) {\n // User is speaking over TTS — interrupt playback.\n this.stopAudio();\n }\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n var rate = (this._conversationCapture && this._conversationCapture.sampleRate) || 16000;\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording) {\n this._stopPcmCapture(this._conversationCapture);\n this._conversationCapture = null;\n if (this._conversationSubject) {\n try { this._conversationSubject.complete(); } catch (err) { /* already completed */ }\n }\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, audio playback continuation\n // is handled by the persistent stream. This method is only\n // called from playCollectedAudio for non-conversation TTS.\n },\n generatePrompt(element) {\n if (!element) {\n console.error('The element paramter is required.');\n\n return;\n }\n\n let templateProfileId = element.getAttribute('data-profile-id');\n let sessionId = this.getSessionId();\n let sessionProfileId = this.getProfileId();\n\n if (!templateProfileId || !sessionId) {\n\n console.error('The given element is missing data-profile-id or the session has not yet started.');\n return;\n }\n\n // streamMessage() already shows the typing indicator.\n this.streamMessage(templateProfileId, null, sessionProfileId);\n },\n createSessionUrl(baseUrl, param, value) {\n\n const fullUrl = baseUrl.toLowerCase().startsWith('http') ? baseUrl : window.location.origin + baseUrl;\n const url = new URL(fullUrl);\n\n url.searchParams.set(param, value);\n\n return url.toString();\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n this.scheduleNotificationDismiss(notification);\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var sessionId = this.getSessionId();\n this.connection.invoke(\"HandleNotificationAction\", sessionId, notificationType, actionName).catch(function (err) {\n console.error(\"Error handling notification action:\", err);\n });\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getProfileId() {\n return this.inputElement\n ? this.inputElement.getAttribute('data-profile-id')\n : null;\n },\n setSessionId(sessionId) {\n if (!this.inputElement) {\n return;\n }\n\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n // Force-stop an in-progress voice/realtime conversation so it doesn't keep running under the new session.\n this.forceStopActiveVoice();\n this.stopRecording();\n this.rejectPendingSessionRequest('Session was reset.');\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n\n // When an initial prompt is configured, show it as the first\n // assistant message instead of the generic placeholder.\n if (config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n } else {\n this.showPlaceholder();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onSessionReset === 'function') {\n widgetBehavior.onSessionReset(this, config);\n }\n },\n startNewSession() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n const profileId = this.getProfileId();\n if (!profileId || !this.connection) {\n return;\n }\n\n // Force-stop any live voice/realtime session before starting a new chat.\n this.forceStopActiveVoice();\n this.requestNewSession(profileId).catch(err => console.error(err));\n },\n async ensureSessionForDocuments(profileId) {\n var sessionId = this.getSessionId();\n if (sessionId) {\n return sessionId;\n }\n\n if (!profileId || !this.connection) {\n return null;\n }\n\n return await this.requestNewSession(profileId);\n },\n requestNewSession(profileId) {\n if (this.pendingSessionPromise) {\n return this.pendingSessionPromise;\n }\n\n if (!profileId || !this.connection) {\n return Promise.resolve(null);\n }\n\n this.pendingSessionPromise = new Promise((resolve, reject) => {\n this.pendingSessionResolver = resolve;\n this.pendingSessionRejector = reject;\n this.pendingSessionTimeoutId = window.setTimeout(() => {\n this.rejectPendingSessionRequest('Timed out while creating a chat session.');\n }, 15000);\n });\n\n this.connection.invoke(\"StartSession\", profileId, null).catch(err => {\n this.rejectPendingSessionRequest(err);\n });\n\n return this.pendingSessionPromise;\n },\n resolvePendingSessionRequest(sessionId) {\n if (this.pendingSessionResolver) {\n this.pendingSessionResolver(sessionId);\n }\n\n this.clearPendingSessionRequest();\n },\n rejectPendingSessionRequest(error) {\n if (this.pendingSessionRejector) {\n this.pendingSessionRejector(error);\n }\n\n this.clearPendingSessionRequest();\n },\n clearPendingSessionRequest() {\n if (this.pendingSessionTimeoutId) {\n window.clearTimeout(this.pendingSessionTimeoutId);\n }\n\n this.pendingSessionPromise = null;\n this.pendingSessionResolver = null;\n this.pendingSessionRejector = null;\n this.pendingSessionTimeoutId = null;\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n if (!this.inputElement || !this.buttonElement || !this.chatContainer || !this.placeholder) {\n console.error('AI chat app could not initialize because one or more required elements were not found.', {\n inputElementSelector: config.inputElementSelector,\n sendButtonElementSelector: config.sendButtonElementSelector,\n chatContainerElementSelector: config.chatContainerElementSelector,\n placeholderElementSelector: config.placeholderElementSelector\n });\n\n return false;\n }\n\n this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n }\n\n // Initialize document bar if enabled.\n if (config.sessionDocumentsEnabled && config.documentBarSelector) {\n this.documentBar = document.querySelector(config.documentBarSelector);\n if (this.documentBar) {\n this.renderDocumentBar();\n\n // Create hidden file input for document uploads.\n var fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.id = 'ai-chat-doc-input';\n fileInput.className = 'd-none';\n fileInput.multiple = true;\n if (config.allowedExtensions) {\n fileInput.accept = config.allowedExtensions;\n }\n fileInput.addEventListener('change', (e) => this.handleFileInputChange(e));\n this.documentBar.parentElement.appendChild(fileInput);\n\n // Set up drag-and-drop on the input area.\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) {\n inputArea.addEventListener('dragover', (e) => this.handleDragOver(e));\n inputArea.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n inputArea.addEventListener('drop', (e) => this.handleDrop(e));\n }\n }\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keydown', event => {\n\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.buttonElement.addEventListener('click', () => {\n\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const promptGenerators = document.getElementsByClassName('profile-generated-prompt');\n\n for (var i = 0; i < promptGenerators.length; i++) {\n promptGenerators[i].addEventListener('click', (e) => {\n e.preventDefault();\n this.generatePrompt(e.target);\n });\n }\n\n const chatSessions = document.getElementsByClassName('chat-session-history-item');\n\n for (var i = 0; i < chatSessions.length; i++) {\n chatSessions[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var sessionId = e.target.getAttribute('data-session-id');\n\n if (!sessionId) {\n console.error('an element with the class chat-session-history-item with no data-session-id set.');\n\n return;\n }\n\n this.loadSession(sessionId);\n this.showChatScreen();\n });\n }\n\n const initialMessages = Array.isArray(config.messages) ? config.messages : [];\n\n for (let i = 0; i < initialMessages.length; i++) {\n this.addMessage(initialMessages[i]);\n }\n\n // When no messages were loaded and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button (used for both STT/TTS conversation and realtime).\n if ((this.conversationModeEnabled || this.realtimeEnabled) && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n if (this.realtimeEnabled) {\n // The shared realtime module owns the button (click, label, state) and adds the\n // voice settings popover next to it.\n this.setupRealtimeController(config);\n } else {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n }\n\n return true;\n },\n loadSession(sessionId) {\n this.connection.invoke(\"LoadSession\", sessionId).catch(err => console.error(err));\n },\n reloadCurrentSession() {\n\n var sessionId = this.getSessionId();\n if (sessionId) {\n this.loadSession(sessionId);\n }\n },\n initializeSession(sessionId, force) {\n if (this.isSessionStarted && !force) {\n if (sessionId && this.getSessionId() === sessionId) {\n this.resolvePendingSessionRequest(sessionId);\n }\n\n return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionCoreAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n\n // For non-widget pages, update the browser URL so that a page\n // refresh reloads the correct session instead of starting fresh.\n if (!hasWidgetConfig && sessionId && config.sessionUrlTemplate && typeof history !== 'undefined' && history.replaceState) {\n var sessionUrl = config.sessionUrlTemplate.replace('{sessionId}', encodeURIComponent(sessionId));\n history.replaceState(null, '', sessionUrl);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n clearCopiedMessageState() {\n if (this.copyResetTimeoutId) {\n window.clearTimeout(this.copyResetTimeoutId);\n this.copyResetTimeoutId = null;\n }\n\n if (this.activeCopyButton) {\n this.setCopyButtonState(this.activeCopyButton, false);\n this.activeCopyButton = null;\n }\n\n this.copiedMessageIndex = -1;\n },\n copyResponse(message, index, event) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n const button = event?.currentTarget || event?.target?.closest?.('[data-copy-message-index]') || null;\n\n navigator.clipboard.writeText(text)\n .then(() => {\n this.clearCopiedMessageState();\n this.copiedMessageIndex = typeof index === 'number' ? index : -1;\n this.activeCopyButton = button;\n\n if (button) {\n this.setCopyButtonState(button, true);\n } else {\n this.$nextTick(() => this.updateCopyButtons());\n }\n\n this.copyResetTimeoutId = window.setTimeout(() => {\n this.clearCopiedMessageState();\n this.$nextTick(() => this.updateCopyButtons());\n }, Number(config.copyResetDelayMs) || 2000);\n })\n .catch(err => console.error('Failed to copy response:', err));\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n },\n isConversationMode(active) {\n // Hide/show mic button.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // Hide/show send button.\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n // Disable/enable textarea.\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n\n this.$nextTick(() => {\n this.updateCopyButtons();\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.clearCopiedMessageState();\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n const autoInitializeSelector = '[data-coreai-chat-config],[data-coreai-chat-app-element-selector]';\n\n function getAttributeValue(element, attributeName) {\n const value = element.getAttribute(attributeName);\n return value === null || value === '' ? null : value;\n }\n\n function parseBooleanAttributeValue(value) {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n\n return null;\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = getAttributeValue(element, attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n console.error('Failed to parse ' + description + ' JSON.', error);\n return null;\n }\n }\n\n function buildConfigFromDataAttributes(element, options) {\n const settings = options || {};\n\n if (element.hasAttribute('data-coreai-chat-widget-container-selector') && settings.allowWidgetHost !== true) {\n return null;\n }\n\n const appElementSelector = getAttributeValue(element, 'data-coreai-chat-app-element-selector');\n if (!appElementSelector) {\n return null;\n }\n\n const config = {\n signalRHubUrl: getAttributeValue(element, 'data-coreai-chat-signalr-hub-url'),\n appElementSelector: appElementSelector,\n chatContainerElementSelector: getAttributeValue(element, 'data-coreai-chat-container-element-selector'),\n inputElementSelector: getAttributeValue(element, 'data-coreai-chat-input-element-selector'),\n sendButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-send-button-element-selector'),\n placeholderElementSelector: getAttributeValue(element, 'data-coreai-chat-placeholder-element-selector'),\n messages: parseJsonAttribute(element, 'data-coreai-chat-messages', 'CoreAI chat messages') ?? undefined,\n chatMode: getAttributeValue(element, 'data-coreai-chat-mode'),\n micButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-mic-button-element-selector'),\n conversationButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-conversation-button-element-selector'),\n ttsVoiceName: getAttributeValue(element, 'data-coreai-chat-tts-voice-name'),\n realtimeVoiceName: getAttributeValue(element, 'data-coreai-chat-realtime-voice-name'),\n documentBarSelector: getAttributeValue(element, 'data-coreai-chat-document-bar-selector'),\n uploadDocumentUrl: getAttributeValue(element, 'data-coreai-chat-upload-document-url'),\n removeDocumentUrl: getAttributeValue(element, 'data-coreai-chat-remove-document-url'),\n allowedExtensions: getAttributeValue(element, 'data-coreai-chat-allowed-extensions'),\n supportedExtensionsText: getAttributeValue(element, 'data-coreai-chat-supported-extensions-text'),\n existingDocuments: parseJsonAttribute(element, 'data-coreai-chat-existing-documents', 'CoreAI chat existing documents') ?? undefined,\n initialPrompt: getAttributeValue(element, 'data-coreai-chat-initial-prompt'),\n sessionUrlTemplate: getAttributeValue(element, 'data-coreai-chat-session-url-template'),\n userLabel: getAttributeValue(element, 'data-coreai-chat-user-label'),\n assistantLabel: getAttributeValue(element, 'data-coreai-chat-assistant-label'),\n copyTitle: getAttributeValue(element, 'data-coreai-chat-copy-title'),\n copiedTitle: getAttributeValue(element, 'data-coreai-chat-copied-title'),\n };\n\n const booleanAttributes = {\n metricsEnabled: 'data-coreai-chat-metrics-enabled',\n textToSpeechEnabled: 'data-coreai-chat-text-to-speech-enabled',\n sessionDocumentsEnabled: 'data-coreai-chat-session-documents-enabled',\n singleResponseMode: 'data-coreai-chat-single-response-mode',\n realtimeEnabled: 'data-coreai-chat-realtime-enabled',\n realtimeWebRtcEnabled: 'data-coreai-chat-realtime-webrtc-enabled',\n };\n\n Object.keys(booleanAttributes).forEach(key => {\n const parsed = parseBooleanAttributeValue(getAttributeValue(element, booleanAttributes[key]));\n if (parsed !== null) {\n config[key] = parsed;\n }\n });\n\n return compactObject(config);\n }\n\n function buildConfigFromElement(element, options) {\n const jsonConfig = parseJsonAttribute(element, 'data-coreai-chat-config', 'CoreAI chat config');\n const attributeConfig = buildConfigFromDataAttributes(element, options);\n\n if (!jsonConfig && !attributeConfig) {\n return null;\n }\n\n return Object.assign({}, jsonConfig || {}, attributeConfig || {});\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.coreAiChatInitialized === 'true') {\n return element ? element.__coreAIChatApp || null : null;\n }\n\n const config = buildConfigFromElement(element);\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.coreAiChatInitialized = 'true';\n element.__coreAIChatApp = app;\n\n return app;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches(autoInitializeSelector)) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll(autoInitializeSelector).forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n\n return {\n initialize: initialize,\n initializeFromElement: initializeFromElement,\n buildConfigFromElement: buildConfigFromElement,\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}