@crestapps/ai-chat-ui 2.0.0-preview.197 → 2.0.0-preview.203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-chat.css +62 -0
- package/dist/ai-chat.css.map +1 -1
- package/dist/ai-chat.js +59 -19
- package/dist/ai-chat.js.map +1 -1
- package/dist/ai-chat.min.css +1 -1
- package/dist/ai-chat.min.js +1 -1
- package/dist/ai-chat.min.js.map +1 -1
- package/dist/chat-interaction.js +65 -25
- package/dist/chat-interaction.js.map +1 -1
- package/dist/chat-interaction.min.js +1 -1
- package/dist/chat-interaction.min.js.map +1 -1
- package/dist/chat-widget.css +61 -0
- package/dist/chat-widget.css.map +1 -1
- package/dist/chat-widget.min.css +1 -1
- package/dist/realtime-audio.js +99 -5
- package/dist/realtime-audio.js.map +1 -1
- package/dist/realtime-audio.min.js +1 -1
- package/dist/realtime-audio.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat-interaction.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","chatInteractionManager","_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","codeCopiedText","copyTitle","copiedTitle","copyResetDelayMs","assistantLabel","messageTemplate","indicatorTemplate","untitledText","clearHistoryTitle","clearHistoryMessage","clearHistoryOkText","clearHistoryCancelText","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","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","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","get","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","message","rawContent","displayContent","citationDisplay","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","findChartMarker","use","extensions","level","start","idx","undefined","tokenizer","extracted","startIndex","type","raw","substring","endIndex","json","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","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","styleMarkdownTables","replace","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","initialize","instanceConfig","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","isInteractionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","prompt","initialFieldValues","settingsDirty","saveSettingsTimeout","saveIndicatorTimeout","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","Math","random","conversationModeEnabled","conversationButton","isConversationMode","realtimeController","realtimeButton","realtimeEnabled","notifications","notificationDismissTimers","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","computed","lastAssistantIndex","role","methods","handleBeforeUnload","startConnection","_this","_callee","_t","_context","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","initializeInteraction","itemId","titleInput","msg","addMessage","$nextTick","historyItem","showSaveIndicator","stopRecording","isFinal","_conversationPartialTranscript","escaped","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","turnId","_realtimePendingTurns","pending","stopAudio","emptyIndex","splice","_conversationAssistantMessage","at","userMsg","messageId","responseId","appearance","_conversationAssistantResponseId","prev","hideTypingIndicator","j","msgIndex","newMessage","id","normalizeAssistantAppearance","base64Audio","contentType","binaryString","atob","bytes","Uint8Array","charCodeAt","receivePcm","playCollectedAudio","showPlaceholder","clearHistoryBtn","classList","add","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentInteraction","onclose","addMessageInternal","_this2","fireEvent","CustomEvent","detail","_this3","_message$rawContent","remove","event","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","isIndicator","sendMessage","_this4","_callee2","trimmedPrompt","_context2","endActiveVoiceSession","flushPendingSave","streamMessage","_this5","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentItemId","getItemId","subscribe","chunk","sessionId","setItemId","keys","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","complete","_this5$stream","processReferences","streamingFinished","synthesizeSpeech","_this5$stream2","getServiceDownMessage","_this6","_ref19","_message$rawContent2","stopIcon","getAttribute","replaceChildren","RETURN_DOM_FRAGMENT","startIcon","icons","debouncedSaveSettings","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this7","buttons","button","buttonIndex","Number","isPlaying","iconHtml","toggle","updateCopyButtons","_this8","isCopied","setCopyButtonState","cacheIndex","_this9","_ttsCacheIndex","invoke","toggleMessageTts","_this0","playAudioBlob","_this1","totalLength","reduce","sum","combined","offset","_iterator8","_step8","blob","Blob","_this10","URL","createObjectURL","audio","Audio","revokeObjectURL","playNextInQueue","play","_this11","nextBlob","shift","conversationModeOnAudioEnded","_this12","pause","currentTime","setVoiceSessionLive","live","nextElementSibling","audioSettings","toggleConversationMode","stopConversationMode","startConversationMode","isActive","stop","_this13","updateConversationButton","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","_conversationSubject","Subject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","pendingChunk","analyser","interruptVolumeThreshold","size","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee3","uint8Array","base64","_context3","arrayBuffer","str","byte","String","fromCharCode","btoa","getTracks","track","documentElement","send","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","originalLength","removedCount","_this14","setTimeout","scrollTop","scrollHeight","clientHeight","handleUserInput","target","getSaveIndicatorElement","saveIndicatorElementSelector","_this15","indicator","clearTimeout","clearPendingSettingsSave","getFieldLabel","input","_input$closest","setting","getValidationFeedbackElement","feedback","contains","clearSettingValidationError","removeAttribute","setSettingValidationError","getSettingValidationMessage","disabled","number","fieldLabel","isNaN","min","max","validateSettingInput","validateSettings","_this16","isValid","getSettingInputs","queueSettingsSave","explicitInputs","getSelectedGroupValues","groupName","fallbackSelector","explicitSelections","values","checkbox","checkboxes","baseName","hiddenInput","getPromptTemplateSelections","promptTemplates","card","templateIdInput","promptParametersInput","templateId","promptParameters","clearNotificationDismiss","findIndex","scheduleNotificationDismiss","_this17","timerId","dismissNotification","handleNotificationAction","actionName","resetInteraction","initializeApp","_this18","placeholderElementSelector","loadInteraction","threshold","atBottom","shiftKey","click","lastMsg","pop","chatInteractionItems","getElementsByClassName","preventDefault","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","clearHistory","micButtonElementSelector","style","display","toggleRecording","conversationButtonElementSelector","CoreAIRealtime","realtimeButtonElementSelector","attach","ensureConnected","sendStart","subject","voice","silenceMs","vadThreshold","allowInterruption","webRtcEnabled","realtimeWebRtcEnabled","sendStartWebRtc","offerSdp","webRtcIceServers","realtimeWebRtcIceServers","voiceName","realtimeVoiceName","getVoiceName","el","realtimeVoiceSelectElementSelector","capableDeployments","realtimeCapableDeployments","selectors","onSessionStateChanged","active","onActivate","onDeactivate","onEnterRealtimeMode","onUserTurnPending","onUserTurnDropped","dropped","setupRealtimeVoicePicker","realtimeVoicesUrl","voiceSelect","voiceGroup","realtimeVoiceGroupElementSelector","conversationSelect","conversationDeploymentSelectElementSelector","capable","savedVoiceId","self","isRealtimeDeployment","resolveConversationDeployment","defaultRealtimeDeploymentName","loadVoices","_loadVoices","_callee4","deploymentName","realtime","response","result","grouped","_iterator9","_step9","_t2","_context4","applyMode","fetch","encodeURIComponent","credentials","headers","ok","voices","gender","has","localeCompare","optgroup","option","selected","appendChild","clearHistoryConfirmed","confirmDialog","okText","cancelText","callback","confirmed","confirm","_this19","saveSettings","getSelectedToolNames","getSelectedMcpConnectionIds","getSelectedA2AConnectionIds","getSelectedAgentNames","_this20","settings","inputs","match","checked","parseFloat","toolNames","mcpConnectionIds","a2aConnectionIds","agentNames","promptTemplateIds","template","force","clearCopiedMessageState","copyResponse","_ref21","_message$copyContent","_event$target","_event$target$closest","_this21","currentTarget","startRecording","_this22","_callee5","_context5","updateMicButton","watch","_this23","mounted","_this24","_callee6","_context6","$el","fontAwesomeObserver","beforeUnmount","removeEventListener","disconnect","mount","autoInitializeSelector","parseJsonAttribute","element","attributeName","description","rawValue","initializeFromElement","chatInteractionInitialized","__chatInteractionApp","scanForAutoInitialization","startAutoInitialization","body","readyState","chatInteractionDocumentManager","managerStateKey","normalizeDocumentInfo","documentId","DocumentId","fileName","FileName","fileSize","FileSize","formatFileSize","toFixed","getDocumentKey","isDuplicateFile","file","knownKeys","getDocumentsFromDom","chatDocumentId","chatDocumentName","chatDocumentSize","fileInput","documentsList","status","progressContainer","progressBar","uploadQueue","previousState","interactionDocuments","existingDocuments","uploadItems","isUploadingDocuments","createTextElement","tagName","renderDocuments","documentInfo","row","actions","downloadBaseUrl","downloadDocumentBaseUrl","downloadLink","downloadIcon","removeButton","removeIcon","removeDocument","details","prepend","showUploadStatus","showUploadProgress","progress","width","roundedProgress","round","getUploadStatePresentation","state","badgeClass","progressClass","formatUploadMessage","item","renderUploadQueue","presentation","header","fileDetails","badge","progressState","createUploadItem","lastModified","Date","now","updateUploadItem","updates","removeUploadItems","predicate","uploadSingleDocument","itemIdToUpdate","fileIndex","totalFiles","reject","formData","FormData","append","xhr","XMLHttpRequest","open","uploadDocumentUrl","upload","lengthComputable","fileProgress","loaded","total","overallProgress","responseText","Error","uploadDocuments","_x","_uploadDocuments","_callee7","files","filesToUpload","duplicateItems","knownDocumentKeys","pendingItems","uploadedCount","failedUploads","pendingItem","uploaded","failed","missingUploadMessage","failedMessage","errorMessage","_t3","_t4","_context7","Set","join","_x2","_removeDocument","_callee8","serverDocuments","_t5","_t6","_context8","removeDocumentUrl","method","stringify","redirected","documents","onFileInputChange","selectedFiles","chatInteractionDocumentManagerInitialized","download","toDataURL","img","startsWith","res","removeChild"],"mappings":"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","file":"chat-interaction.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 ai-chat.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.chatInteractionManager = 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 codeCopiedText: 'Copied!',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n copyResetDelayMs: 2000,\n assistantLabel: 'Assistant',\n\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">You</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n {{ getAssistantLabel(message) }}\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 <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 <i :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></i>\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 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 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-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 Assistant\n </div>\n `,\n // Localizable strings\n untitledText: 'Untitled',\n clearHistoryTitle: 'Clear History',\n clearHistoryMessage: 'Are you sure you want to clear the chat history? This action cannot be undone. Your documents, parameters, and tools will be preserved.',\n clearHistoryOkText: 'Yes',\n clearHistoryCancelText: 'Cancel'\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 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 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 shared with ai-chat.js\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 const canvas = document.getElementById(c.chartId);\n if (!canvas) {\n continue;\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 continue;\n }\n\n // When the canvas is inside a hidden container (e.g., display:none),\n // it has zero dimensions. Keep the config for later rendering.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[c.chartId] = c.config;\n continue;\n }\n\n try {\n // Destroy existing chart instance if re-rendering\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof c.config === 'string' ? JSON.parse(c.config) : c.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 } catch (e) {\n console.error('Error creating chart:', e);\n }\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. This page renders markdown through its own pipeline, so the same treatment\n // is applied here as in the shared chat script.\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 const initialize = (instanceConfig) => {\n const config = Object.assign({}, defaultConfig, compactObject(instanceConfig));\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 app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isInteractionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n prompt: '',\n initialFieldValues: new Map(),\n settingsDirty: false,\n saveSettingsTimeout: null,\n saveIndicatorTimeout: null,\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 ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'chat-interaction-' + Math.random().toString(36).slice(2),\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n // Realtime (speech-to-speech) controller from the shared CoreAIRealtime module.\n realtimeController: null,\n realtimeButton: null,\n // Whether a realtime deployment actually resolved. The controller is attached whenever the\n // module is loaded, so its presence says nothing about which transport carries the\n // conversation -- only this flag does.\n realtimeEnabled: config.realtimeEnabled === true,\n notifications: [],\n notificationDismissTimers: {},\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\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 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(\"LoadInteraction\", (data) => {\n this.initializeInteraction(data.itemId, true);\n this.messages = [];// Update the title field if it exists\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && data.title) {\n titleInput.value = data.title;\n }\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderMessageMedia(msg);\n });\n });\n });\n\n this.connection.on(\"SettingsSaved\", (itemId, title) => {\n // Update the history list item if it exists\n // Use a more specific selector to only target history list items, not other elements like the Clear History button\n const historyItem = document.querySelector(`.chat-interaction-history-item[data-interaction-id=\"${itemId}\"]`);\n if (historyItem) {\n historyItem.textContent = title || config.untitledText;\n }\n\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && title) {\n titleInput.value = title;\n }\n\n this.showSaveIndicator('Saved', 'text-success');\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n this.showSaveIndicator('Save failed', 'text-danger');\n\n if (this.isRecording) {\n this.stopRecording();\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (itemId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\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\", (itemId, turnId, text) => {\n // Realtime: a placeholder for this turn was already inserted in the right position when\n // the utterance was captured (see onUserTurnPending), 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 if (text) {\n pending.content = text;\n pending.rawContent = text;\n pending.isPartial = false;\n updateMessagePresentation(pending, pending.references);\n } else {\n var emptyIndex = this.messages.indexOf(pending);\n if (emptyIndex >= 0) { this.messages.splice(emptyIndex, 1); }\n }\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, '&').replace(/</g, '<').replace(/>/g, '>');\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 var at = this._conversationAssistantMessage.index;\n var userMsg = { role: 'user', content: text, rawContent: text, 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\", (itemId, 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 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\", (itemId, 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\", (itemId, base64Audio, contentType) => {\n if (base64Audio) {\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 // Realtime PCM streams straight to the low-latency player; other formats (TTS) are buffered.\n if (contentType === 'audio/pcm' && this.realtimeController) {\n this.realtimeController.receivePcm(bytes);\n } else {\n this.audioChunks.push(bytes);\n }\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (itemId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"HistoryCleared\", (itemId) => {\n // Clear messages and show placeholder\n this.messages = [];\n this.showPlaceholder();\n\n // Hide the clear history button since there's no history now\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.add('d-none');\n }\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\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n this.reloadCurrentInteraction();\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\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 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(\"addingChatInteractionMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedChatInteractionMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\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 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 fireEvent(event) {\n document.dispatchEvent(event);\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 : defaultConfig.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 isIndicator(message) {\n return message.role === 'indicator';\n },\n async sendMessage() {\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // A live voice session and a typed turn are two writers into one interaction, and they\n // would interleave. End the session first; the turns it already produced are persisted, so\n // the typed message simply continues the same thread.\n this.endActiveVoiceSession();\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 // Flush any pending settings save before sending a message\n // to prevent concurrent hub calls that can cause database deadlocks.\n await this.flushPendingSave();\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n // Show the clear history button since we now have prompts\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.remove('d-none');\n }\n\n this.streamMessage(trimmedPrompt);\n this.inputElement.value = '';\n this.prompt = '';\n },\n streamMessage(trimmedPrompt) {\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 var messageIndex = this.messages.length;\n var currentItemId = this.getItemId();\n\n this.stream = this.connection.stream(\"SendMessage\", currentItemId, trimmedPrompt)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n if (chunk.sessionId && !currentItemId) {\n this.setItemId(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n messageIndex = this.messages.length;\n let newMessage = {\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n };\n\n this.messages.push(newMessage);\n message = newMessage;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\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 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 return {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\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 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 // 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 // Save any settings that were deferred during streaming.\n if (this.settingsDirty) {\n this.debouncedSaveSettings();\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 var iconHtml = isPlaying\n ? '<i class=\"fa-solid fa-circle-pause\"></i>'\n : '<i class=\"fa-solid fa-circle-play\"></i>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\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.getItemId(), 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.isPlayingAudio && 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 currently playing, queue this blob for later.\n if (this.isPlayingAudio && 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 const 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 // A live voice session takes the message box away and puts the audio settings in its place; ending\n // the session gives it back. Sending a typed message already ends the session first, so the box was\n // never a way to say something *during* one -- hiding it only makes that honest, and frees the row\n // for the gear. Both transports land here: realtime through the module's onActivate, the\n // speech-to-text cascade through startConversationMode.\n setVoiceSessionLive(live) {\n if (this.inputElement) {\n this.inputElement.hidden = live;\n }\n\n if (this.buttonElement) {\n this.buttonElement.hidden = live;\n }\n\n // With the message box gone the live button would otherwise sit at its natural width in an\n // empty row, so it takes the space the box left behind. Whichever transport is carrying the\n // conversation owns a different button, and the hidden one is unaffected by the class.\n [this.realtimeButton, this.conversationButton].forEach(function (button) {\n if (button) { button.classList.toggle('flex-grow-1', live); }\n });\n\n // The gear is built by the realtime module directly after the button it was handed, and only\n // in realtime mode, so it is absent on the cascade. It belongs to a live session rather than\n // to the surface. The module hard-codes its element id and a page can host two chat clients\n // at once -- this one and the admin widget -- so it is found next to this client's own button\n // rather than by id.\n var next = this.realtimeButton && this.realtimeButton.nextElementSibling;\n var audioSettings = next && next.id === 'realtime-audio-settings' ? next : null;\n if (audioSettings) {\n audioSettings.hidden = !live;\n }\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n // Two writers into one interaction would interleave, so the voice session ends before the typed\n // turn starts rather than running alongside it.\n endActiveVoiceSession() {\n if (this.realtimeController && this.realtimeController.isActive()) {\n this.realtimeController.stop();\n\n return;\n }\n\n if (this.isConversationMode) {\n this.stopConversationMode();\n }\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\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var itemId = this.getItemId();\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"StartConversation\", itemId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\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 && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\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, continuation is handled\n // by the persistent stream.\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 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 getItemId() {\n return this.inputElement.getAttribute('data-interaction-id')\n || this.inputElement.getAttribute('data-item-id');\n },\n getSaveIndicatorElement() {\n if (config.saveIndicatorElementSelector) {\n return document.querySelector(config.saveIndicatorElementSelector);\n }\n\n return document.querySelector('[data-chat-interaction-save-indicator]');\n },\n showSaveIndicator(text, className) {\n const indicator = this.getSaveIndicatorElement();\n if (!indicator) {\n return;\n }\n\n indicator.textContent = text || '';\n indicator.className = 'settings-save-indicator ' + (className || 'text-muted');\n\n if (this.saveIndicatorTimeout) {\n clearTimeout(this.saveIndicatorTimeout);\n this.saveIndicatorTimeout = null;\n }\n\n if (!text) {\n return;\n }\n\n this.saveIndicatorTimeout = setTimeout(() => {\n indicator.textContent = '';\n this.saveIndicatorTimeout = null;\n }, 3000);\n },\n clearPendingSettingsSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n },\n getFieldLabel(input) {\n const label = input\n .closest('.mb-3, .col-6, .col, .form-group, .form-floating')\n ?.querySelector('label');\n\n if (!label) {\n return input.dataset.setting || 'This field';\n }\n\n return (label.textContent || '')\n .replace(/\\s+/g, ' ')\n .trim()\n || input.dataset.setting\n || 'This field';\n },\n getValidationFeedbackElement(input) {\n let feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n return feedback;\n }\n\n feedback = document.createElement('div');\n feedback.className = 'invalid-feedback';\n input.insertAdjacentElement('afterend', feedback);\n\n return feedback;\n },\n clearSettingValidationError(input) {\n input.classList.remove('is-invalid');\n input.removeAttribute('aria-invalid');\n\n const feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n feedback.textContent = '';\n }\n },\n setSettingValidationError(input, message) {\n const feedback = this.getValidationFeedbackElement(input);\n input.classList.add('is-invalid');\n input.setAttribute('aria-invalid', 'true');\n feedback.textContent = message;\n },\n getSettingValidationMessage(input) {\n if (!input || input.disabled || input.type !== 'number') {\n return null;\n }\n\n const value = (input.value || '').trim();\n if (!value) {\n return null;\n }\n\n const number = Number(value);\n const fieldLabel = this.getFieldLabel(input);\n\n if (Number.isNaN(number)) {\n return `${fieldLabel} must be a valid number.`;\n }\n\n const min = input.getAttribute('min');\n if (min !== null && number < Number(min)) {\n return `${fieldLabel} must be ${min} or greater.`;\n }\n\n const max = input.getAttribute('max');\n if (max !== null && number > Number(max)) {\n return `${fieldLabel} must be ${max} or less.`;\n }\n\n return null;\n },\n validateSettingInput(input) {\n const message = this.getSettingValidationMessage(input);\n if (!message) {\n this.clearSettingValidationError(input);\n return true;\n }\n\n this.setSettingValidationError(input, message);\n return false;\n },\n validateSettings() {\n let isValid = true;\n\n this.getSettingInputs().forEach(input => {\n isValid = this.validateSettingInput(input) && isValid;\n });\n\n return isValid;\n },\n queueSettingsSave() {\n if (!this.validateSettings()) {\n this.clearPendingSettingsSave();\n this.settingsDirty = false;\n this.showSaveIndicator('Fix errors', 'text-danger');\n return;\n }\n\n this.settingsDirty = true;\n this.showSaveIndicator('Saving...', 'text-warning');\n this.debouncedSaveSettings();\n },\n getSettingInputs() {\n const explicitInputs = document.querySelectorAll('.setting-input[data-setting]');\n if (explicitInputs.length > 0) {\n return explicitInputs;\n }\n\n return document.querySelectorAll(\n 'input[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'select[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'textarea[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"])'\n );\n },\n getSelectedGroupValues(groupName, fallbackSelector) {\n const explicitSelections = document.querySelectorAll(`.capability-checkbox[data-save-group=\"${groupName}\"]:checked, .capability-checkbox[data-group=\"${groupName}\"]:checked`);\n if (explicitSelections.length > 0) {\n const values = [];\n\n explicitSelections.forEach(checkbox => {\n const value = checkbox.getAttribute('data-item-id') || checkbox.value;\n if (value) {\n values.push(value);\n }\n });\n\n return values;\n }\n\n if (!fallbackSelector) {\n return [];\n }\n\n const values = [];\n const checkboxes = document.querySelectorAll(fallbackSelector);\n\n checkboxes.forEach(checkbox => {\n const baseName = checkbox.name.replace('.IsSelected', '.ItemId');\n const hiddenInput = document.querySelector(`input[type=\"hidden\"][name=\"${baseName}\"]`);\n\n if (hiddenInput && hiddenInput.value) {\n values.push(hiddenInput.value);\n }\n });\n\n return values;\n },\n getPromptTemplateSelections() {\n const promptTemplates = [];\n\n document.querySelectorAll('.prompt-template-card').forEach(card => {\n const templateIdInput = card.querySelector('.prompt-template-id-input');\n const promptParametersInput = card.querySelector('.prompt-template-parameters-input');\n const templateId = templateIdInput ? templateIdInput.value : card.getAttribute('data-template-id');\n\n if (!templateId) {\n return;\n }\n\n promptTemplates.push({\n templateId: templateId,\n promptParameters: promptParametersInput ? (promptParametersInput.value || '').trim() : ''\n });\n });\n\n return promptTemplates;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n // Replace existing notification with same type, or add new one.\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\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 itemId = this.getItemId();\n this.connection.invoke('HandleNotificationAction', itemId, notificationType, actionName)\n .catch(err => console.error('Failed to handle notification action:', err));\n },\n setItemId(itemId) {\n this.inputElement.setAttribute('data-interaction-id', itemId || '');\n this.inputElement.setAttribute('data-item-id', itemId || '');\n },\n resetInteraction() {\n this.setItemId('');\n this.isInteractionStarted = false;\n this.messages = [];\n this.showPlaceholder();\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 const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\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('keyup', event => {\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\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.inputElement.addEventListener('paste', (e) => {\n // Use setTimeout to allow the paste to complete before checking the value\n setTimeout(() => {\n this.prompt = this.inputElement.value;\n if (this.inputElement.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n }, 0);\n });\n\n this.buttonElement.addEventListener('click', () => {\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 chatInteractionItems = document.getElementsByClassName('chat-interaction-history-item');\n\n for (var i = 0; i < chatInteractionItems.length; i++) {\n chatInteractionItems[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var itemId = e.target.getAttribute('data-interaction-id');\n\n if (!itemId) {\n console.error('An element with the class chat-interaction-history-item with no data-interaction-id set.');\n return;\n }\n\n this.loadInteraction(itemId);\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 // 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 document.addEventListener('input', event => {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('change', event => {\n if (event.target.matches('.setting-input[data-setting], .capability-checkbox[data-save-group], .capability-checkbox[data-group], .group-toggle, .ci-agent-global-toggle')) {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n }\n\n this.queueSettingsSave();\n return;\n }\n\n if (event.target.closest('.prompt-template-parameters-input, .prompt-template-id-input')) {\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('click', event => {\n if (!event.target.closest('.prompt-template-add-btn, .remove-prompt-template-btn')) {\n return;\n }\n\n setTimeout(() => {\n this.queueSettingsSave();\n }, 0);\n });\n\n // Add event listener for clear history button\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.addEventListener('click', () => {\n const itemId = clearHistoryBtn.getAttribute('data-interaction-id');\n if (itemId) {\n this.clearHistory(itemId);\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.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n\n // Initialize realtime (speech-to-speech) mode via the shared CoreAIRealtime module. The\n // module owns the mic capture, playback, echo guard, push-to-talk and audio settings; the\n // callbacks below plug it into this app's connection and conversation-transcript display.\n if (window.CoreAIRealtime && config.realtimeButtonElementSelector) {\n // Kept so the voice settings popover can be found next to this client's own button.\n this.realtimeButton = document.querySelector(config.realtimeButtonElementSelector);\n this.realtimeController = window.CoreAIRealtime.attach({\n connection: this.connection,\n ensureConnected: () => Promise.resolve(this.connection),\n sendStart: (subject, voice, language, silenceMs, vadThreshold, allowInterruption) => {\n this.connection.send('StartRealtimeConversation', this.getItemId(), subject, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n // Prefer WebRTC (server-relay) when the server advertises it; the shared module falls back\n // to the WebSocket sendStart above if the peer cannot connect.\n webRtcEnabled: config.realtimeWebRtcEnabled === true,\n sendStartWebRtc: (offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption) => {\n this.connection.send('StartRealtimeWebRtc', this.getItemId(), offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcIceServers: Array.isArray(config.realtimeWebRtcIceServers) ? config.realtimeWebRtcIceServers : undefined,\n voiceName: config.realtimeVoiceName || '',\n getVoiceName: () => {\n var el = config.realtimeVoiceSelectElementSelector ? document.querySelector(config.realtimeVoiceSelectElementSelector) : null;\n return el ? el.value : '';\n },\n capableDeployments: config.realtimeCapableDeployments || [],\n realtimeEnabled: config.realtimeEnabled === true,\n // input and sendButton are deliberately not handed over. The module hides every\n // control it is given when realtime takes over, and typing has to stay available\n // during a voice conversation -- that is the whole feature.\n //\n // deploymentSelect is not handed over either: it would read the raw select value,\n // and an empty conversation deployment means \"use the site default\", which still\n // resolves. The host resolves it and calls applyMode itself (see below).\n selectors: {\n realtimeButton: config.realtimeButtonElementSelector,\n micButton: config.micButtonElementSelector,\n conversationButton: config.conversationButtonElementSelector\n },\n // The module owns whether a session is live, so the message box follows its flag\n // rather than this app's copy of it. Losing one of these events used to leave the\n // box hidden under a button that had already gone back to \"Start speaking\".\n onSessionStateChanged: (active) => {\n this.setVoiceSessionLive(active);\n },\n onActivate: () => {\n this.isConversationMode = true;\n this._conversationPartialMessage = null;\n this._conversationAssistantMessage = null;\n },\n onDeactivate: () => {\n this.isConversationMode = false;\n if (this._conversationAssistantMessage) {\n var m = this.messages[this._conversationAssistantMessage.index];\n if (m) { m.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n },\n onEnterRealtimeMode: () => {\n if (this.isRecording) { this.stopRecording(); }\n if (this.isConversationMode && (!this.realtimeController || !this.realtimeController.isActive())) { this.stopConversationMode(); }\n },\n // The utterance has been captured but not transcribed yet. Showing a placeholder now\n // puts the prompt above the reply it produces: transcription lags the spoken answer, so\n // a bubble added only when the text arrives lands underneath its own reply.\n onUserTurnPending: (turnId) => {\n if (!turnId) { return; }\n var placeholder = { role: 'user', content: '', rawContent: '', references: {}, isPartial: true };\n updateMessagePresentation(placeholder, placeholder.references);\n this._realtimePendingTurns = this._realtimePendingTurns || {};\n this._realtimePendingTurns[turnId] = placeholder;\n this.messages.push(placeholder);\n this.scrollToBottom();\n },\n onUserTurnDropped: (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 });\n\n this.setupRealtimeVoicePicker(config);\n\n // The module reveals the gear as soon as the surface enters realtime mode, but it belongs\n // to a live session. The watcher that would hide it only runs on a change, so the idle\n // state has to be stated once here.\n this.setVoiceSessionLive(false);\n }\n },\n // Populates the per-interaction realtime voice picker from the selected realtime deployment's\n // voices (via the realtime-voices endpoint), and shows it only for realtime-capable deployments.\n setupRealtimeVoicePicker(config) {\n if (!config.realtimeVoiceSelectElementSelector || !config.realtimeVoicesUrl) {\n return;\n }\n\n var voiceSelect = document.querySelector(config.realtimeVoiceSelectElementSelector);\n if (!voiceSelect) {\n return;\n }\n\n var voiceGroup = config.realtimeVoiceGroupElementSelector ? document.querySelector(config.realtimeVoiceGroupElementSelector) : null;\n var conversationSelect = config.conversationDeploymentSelectElementSelector\n ? document.querySelector(config.conversationDeploymentSelectElementSelector)\n : null;\n var capable = (config.realtimeCapableDeployments || []).map(function (n) { return (n || '').toLowerCase(); });\n var savedVoiceId = config.realtimeVoiceName || '';\n var self = this;\n\n function isRealtimeDeployment(name) {\n return name && capable.indexOf(name.toLowerCase()) !== -1;\n }\n\n // Mirrors the realtime slot's chain on the server: the interaction's own choice, then the\n // site default, then the first realtime-capable deployment. Only conversation mode reaches\n // it -- an interaction that is not in conversation mode never speaks.\n function resolveConversationDeployment() {\n if (!self.conversationModeEnabled) {\n return '';\n }\n\n var name = (conversationSelect && conversationSelect.value)\n || config.defaultRealtimeDeploymentName\n || (capable.length ? capable[0] : '');\n\n return isRealtimeDeployment(name) ? name : '';\n }\n\n async function loadVoices() {\n var deploymentName = resolveConversationDeployment();\n var realtime = !!deploymentName;\n if (voiceGroup) {\n voiceGroup.classList.toggle('d-none', !realtime);\n }\n\n // Changing the conversation deployment switches the voice toggle on or off without a\n // reload.\n if (self.realtimeController) {\n self.realtimeController.applyMode(realtime);\n }\n\n if (!realtime) {\n return;\n }\n\n voiceSelect.innerHTML = '<option value=\"\">Default voice</option>';\n\n try {\n const response = await fetch(config.realtimeVoicesUrl + '?deploymentName=' + encodeURIComponent(deploymentName), { credentials: 'same-origin' });\n const contentType = (response.headers.get('content-type') || '').toLowerCase();\n\n // A sign-in redirect answers with HTML and response.ok, so this has to be checked\n // rather than parsed: the default voice is a fine outcome, a parser error is not.\n if (!response.ok || contentType.indexOf('json') < 0) {\n return;\n }\n\n const result = await response.json();\n if (!result || !Array.isArray(result.voices)) {\n return;\n }\n\n const grouped = new Map();\n for (const voice of result.voices) {\n const groupName = voice.gender || 'Voices';\n if (!grouped.has(groupName)) {\n grouped.set(groupName, []);\n }\n grouped.get(groupName).push(voice);\n }\n\n Array.from(grouped.keys()).sort((a, b) => a.localeCompare(b)).forEach(function (groupName) {\n const optgroup = document.createElement('optgroup');\n optgroup.label = groupName;\n grouped.get(groupName).forEach(function (voice) {\n const option = document.createElement('option');\n option.value = voice.id;\n option.textContent = voice.name;\n option.selected = voice.id === savedVoiceId;\n optgroup.appendChild(option);\n });\n voiceSelect.appendChild(optgroup);\n });\n } catch (err) {\n /* ignore voice load failures */\n }\n }\n\n if (conversationSelect) {\n conversationSelect.addEventListener('change', loadVoices);\n }\n loadVoices();\n },\n loadInteraction(itemId) {\n this.connection.invoke(\"LoadInteraction\", itemId).catch(err => console.error(err));\n },\n reloadCurrentInteraction() {\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n },\n clearHistory(itemId) {\n const self = this;\n const clearHistoryConfirmed = () => {\n // Force-stop any live realtime voice session before clearing history.\n if (self.realtimeController && self.realtimeController.isActive()) {\n self.realtimeController.stop();\n }\n\n // Cancel any active stream before clearing history.\n if (self.stream) {\n self.stream.dispose();\n self.stream = null;\n self.hideTypingIndicator();\n self.streamingFinished();\n }\n\n self.connection.invoke(\"ClearHistory\", itemId)\n .catch(err => console.error('Error clearing history:', err));\n };\n\n if (typeof confirmDialog === 'function') {\n confirmDialog({\n title: config.clearHistoryTitle,\n message: config.clearHistoryMessage,\n okText: config.clearHistoryOkText,\n cancelText: config.clearHistoryCancelText,\n callback: function (confirmed) {\n if (confirmed) {\n clearHistoryConfirmed();\n }\n }\n });\n\n return;\n }\n\n if (window.confirm(config.clearHistoryMessage || 'Clear all messages?')) {\n clearHistoryConfirmed();\n }\n },\n debouncedSaveSettings() {\n // Clear any existing timeout to reset the debounce timer\n this.clearPendingSettingsSave();\n\n // Don't save while streaming — it will be saved when streaming completes.\n if (this.stream) {\n return;\n }\n\n // Set a new timeout to save after 850ms of no changes\n this.saveSettingsTimeout = setTimeout(() => {\n if (this.settingsDirty) {\n this.saveSettings();\n this.settingsDirty = false;\n }\n this.saveSettingsTimeout = null;\n }, 850);\n },\n getSelectedToolNames() {\n return this.getSelectedGroupValues(\n 'toolNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Tools[\"]:checked'\n );\n },\n getSelectedMcpConnectionIds() {\n return this.getSelectedGroupValues(\n 'mcpConnectionIds',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Connections[\"]:checked'\n );\n },\n getSelectedA2AConnectionIds() {\n return this.getSelectedGroupValues('a2aConnectionIds');\n },\n getSelectedAgentNames() {\n return this.getSelectedGroupValues(\n 'agentNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Agents[\"]:checked'\n );\n },\n saveSettings() {\n const itemId = this.getItemId();\n if (!itemId) {\n return Promise.resolve();\n }\n\n if (!this.validateSettings()) {\n this.showSaveIndicator('Fix errors', 'text-danger');\n return Promise.resolve();\n }\n\n const settings = {};\n\n // Collect all form inputs with the \"ChatInteraction.\" prefix generically.\n // This avoids coupling the JS to specific field names — new fields added by\n // any module are automatically included.\n const inputs = this.getSettingInputs();\n\n inputs.forEach(input => {\n const key = input.dataset.setting\n || ((input.name || '').replace('ChatInteraction.', '').replace(/^[A-Z]/, match => match.toLowerCase()));\n\n if (!key) {\n return;\n }\n\n if (input.type === 'checkbox') {\n settings[key] = input.checked;\n } else if (input.type === 'number') {\n settings[key] = input.value ? parseFloat(input.value) : null;\n } else {\n settings[key] = input.value || null;\n }\n });\n\n // Add tool, MCP connection, and agent collections (special handling).\n settings.toolNames = this.getSelectedToolNames();\n settings.mcpConnectionIds = this.getSelectedMcpConnectionIds();\n settings.a2aConnectionIds = this.getSelectedA2AConnectionIds();\n settings.agentNames = this.getSelectedAgentNames();\n\n const promptTemplates = this.getPromptTemplateSelections();\n if (promptTemplates.length > 0) {\n settings.promptTemplates = promptTemplates;\n settings.promptTemplateIds = promptTemplates.map(template => template.templateId);\n }\n\n return this.connection.invoke(\"SaveSettings\", itemId, settings)\n .catch(err => {\n console.error('Error saving settings:', err);\n this.showSaveIndicator('Save failed', 'text-danger');\n });\n },\n flushPendingSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n\n if (this.settingsDirty) {\n this.settingsDirty = false;\n return this.saveSettings();\n }\n\n return Promise.resolve();\n },\n initializeInteraction(itemId, force) {\n if (this.isInteractionStarted && !force) {\n return;\n }\n this.fireEvent(new CustomEvent(\"initializingChatInteraction\", { detail: { itemId: itemId } }));\n this.setItemId(itemId);\n this.isInteractionStarted = true;\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 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 var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var itemId = this.getItemId();\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", itemId, subject, mimeType, language);\n this.mediaRecorder.start(250);\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 || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\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 },\n watch: {\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n // The dictation microphone is hidden while a voice conversation runs: the conversation\n // already owns the microphone, and a second one would mean something different.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // The message box and the send button give way to the voice settings while the conversation\n // runs, and come back when it ends. Both kinds of turn still land in the same thread; what\n // they cannot do is overlap.\n //\n // Only the cascade is driven from here. Realtime follows the module's own session flag\n // (onSessionStateChanged), so the two never disagree about whether a session is live.\n if (!this.realtimeEnabled) {\n this.setVoiceSessionLive(active);\n }\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n this.initializeApp();\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 template: config.messageTemplate\n }).mount(config.appElementSelector);\n\n return app;\n };\n\n const autoInitializeSelector = '[data-chat-interaction-config]';\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = element.getAttribute(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 initializeFromElement(element) {\n if (!element || element.dataset.chatInteractionInitialized === 'true') {\n return element ? element.__chatInteractionApp || null : null;\n }\n\n const config = parseJsonAttribute(element, 'data-chat-interaction-config', 'chat interaction config');\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.chatInteractionInitialized = 'true';\n element.__chatInteractionApp = 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 };\n}();\n\nwindow.chatInteractionDocumentManager = function () {\n const managerStateKey = '__chatInteractionDocumentManagerState';\n\n function normalizeDocumentInfo(document) {\n if (!document || typeof document !== 'object') {\n return null;\n }\n\n return {\n documentId: document.documentId || document.DocumentId || '',\n fileName: document.fileName || document.FileName || '',\n fileSize: document.fileSize || document.FileSize || 0\n };\n }\n\n function formatFileSize(bytes) {\n if (!bytes || bytes < 1024) {\n return (bytes || 0) + ' B';\n }\n\n if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(1) + ' KB';\n }\n\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n\n function getDocumentKey(fileName, fileSize) {\n return ((fileName || '').trim().toLowerCase()) + '::' + (fileSize || 0);\n }\n\n function isDuplicateFile(file, knownKeys) {\n return knownKeys.has(getDocumentKey(file.name, file.size));\n }\n\n function getDocumentsFromDom(container) {\n if (!container) {\n return [];\n }\n\n return Array.from(container.querySelectorAll('[data-chat-document-id]'))\n .map(element => normalizeDocumentInfo({\n documentId: element.dataset.chatDocumentId,\n fileName: element.dataset.chatDocumentName,\n fileSize: Number(element.dataset.chatDocumentSize || 0)\n }))\n .filter(document => document && document.documentId);\n }\n\n function initialize(config) {\n if (!config || !config.itemId) {\n return;\n }\n\n const fileInput = document.getElementById('chat-doc-upload');\n const documentsList = document.getElementById('chat-documents-list');\n const status = document.getElementById('chat-doc-upload-status');\n const progressContainer = document.getElementById('chat-doc-upload-progress');\n const progressBar = document.getElementById('chat-doc-upload-progress-bar');\n const uploadQueue = document.getElementById('chat-doc-upload-queue');\n\n if (!fileInput || !documentsList || !status || !progressContainer || !progressBar || !uploadQueue) {\n return;\n }\n\n const previousState = fileInput[managerStateKey];\n if (previousState && typeof previousState.dispose === 'function') {\n previousState.dispose();\n }\n\n let interactionDocuments = (Array.isArray(config.existingDocuments) ? config.existingDocuments : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n if (interactionDocuments.length === 0) {\n interactionDocuments = getDocumentsFromDom(documentsList);\n }\n\n let uploadItems = [];\n let isUploadingDocuments = false;\n\n function createTextElement(tagName, className, text) {\n const element = document.createElement(tagName);\n if (className) {\n element.className = className;\n }\n\n element.textContent = text;\n return element;\n }\n\n function renderDocuments() {\n documentsList.innerHTML = '';\n\n if (interactionDocuments.length === 0) {\n documentsList.appendChild(createTextElement('div', 'text-muted small', 'No documents uploaded yet.'));\n return;\n }\n\n interactionDocuments.forEach(documentInfo => {\n const row = window.document.createElement('div');\n row.className = 'd-flex align-items-center gap-2 border rounded px-2 py-2 bg-white chat-document-row';\n row.dataset.chatDocumentId = documentInfo.documentId;\n row.dataset.chatDocumentName = documentInfo.fileName;\n row.dataset.chatDocumentSize = documentInfo.fileSize;\n\n const actions = window.document.createElement('div');\n actions.className = 'd-flex gap-1';\n\n const downloadBaseUrl = config.downloadDocumentBaseUrl || '/ai/documents/';\n const downloadLink = createTextElement('a', 'btn btn-sm btn-outline-secondary', '');\n downloadLink.title = 'Download';\n downloadLink.href = downloadBaseUrl + encodeURIComponent(documentInfo.documentId) + '/download';\n const downloadIcon = window.document.createElement('i');\n downloadIcon.className = 'fa-solid fa-download';\n downloadLink.appendChild(downloadIcon);\n\n const removeButton = createTextElement('button', 'btn btn-sm btn-outline-danger remove-chat-document-btn', '');\n removeButton.type = 'button';\n removeButton.title = 'Remove';\n removeButton.dataset.documentId = documentInfo.documentId;\n const removeIcon = window.document.createElement('i');\n removeIcon.className = 'fa-solid fa-trash';\n removeButton.appendChild(removeIcon);\n removeButton.addEventListener('click', () => removeDocument(documentInfo.documentId));\n\n actions.appendChild(downloadLink);\n actions.appendChild(removeButton);\n\n const details = window.document.createElement('div');\n details.className = 'min-w-0';\n\n const name = createTextElement('div', 'fw-semibold small text-truncate', documentInfo.fileName || 'Document');\n const icon = window.document.createElement('i');\n icon.className = 'fa-solid fa-file-lines me-1';\n name.prepend(icon);\n\n const size = createTextElement('div', 'text-muted small', formatFileSize(documentInfo.fileSize));\n\n details.appendChild(name);\n details.appendChild(size);\n\n row.appendChild(actions);\n row.appendChild(details);\n documentsList.appendChild(row);\n });\n }\n\n function showUploadStatus(message, cssClass) {\n if (!message) {\n status.textContent = '';\n status.className = 'small mt-2 d-none';\n return;\n }\n\n status.textContent = message;\n status.className = 'small mt-2 ' + (cssClass || 'text-muted');\n }\n\n function showUploadProgress(progress, message, cssClass) {\n if (progress === null || progress === undefined) {\n progressContainer.className = 'progress mt-2 d-none';\n progressContainer.setAttribute('aria-valuenow', '0');\n progressBar.className = 'progress-bar progress-bar-striped progress-bar-animated';\n progressBar.style.width = '0%';\n progressBar.textContent = '0%';\n return;\n }\n\n const roundedProgress = Math.max(0, Math.min(100, Math.round(progress)));\n progressContainer.className = 'progress mt-2';\n progressContainer.setAttribute('aria-valuenow', roundedProgress.toString());\n progressBar.className = 'progress-bar ' + (cssClass || 'progress-bar-striped progress-bar-animated');\n progressBar.style.width = roundedProgress + '%';\n progressBar.textContent = message || (roundedProgress + '%');\n }\n\n function getUploadStatePresentation(state) {\n switch (state) {\n case 'uploaded':\n return { label: 'Uploaded', badgeClass: 'text-bg-success', progressClass: 'bg-success' };\n case 'failed':\n return { label: 'Failed', badgeClass: 'text-bg-danger', progressClass: 'bg-danger' };\n case 'uploading':\n return { label: 'Uploading', badgeClass: 'text-bg-warning', progressClass: 'bg-warning progress-bar-striped progress-bar-animated' };\n default:\n return { label: 'Queued', badgeClass: 'text-bg-secondary', progressClass: 'bg-secondary progress-bar-striped progress-bar-animated' };\n }\n }\n\n function formatUploadMessage(item) {\n if (item.status === 'failed' && item.error) {\n return item.error;\n }\n\n if (item.status === 'uploaded') {\n return 'Upload completed successfully.';\n }\n\n if (item.status === 'uploading') {\n return item.progress + '% uploaded';\n }\n\n return 'Waiting to upload...';\n }\n\n function renderUploadQueue() {\n uploadQueue.innerHTML = '';\n\n uploadItems.forEach(item => {\n const presentation = getUploadStatePresentation(item.status);\n const card = document.createElement('div');\n card.className = 'border rounded px-2 py-2 bg-white';\n\n const header = document.createElement('div');\n header.className = 'd-flex justify-content-between align-items-start gap-2';\n\n const fileDetails = document.createElement('div');\n fileDetails.className = 'flex-grow-1 min-w-0';\n fileDetails.appendChild(createTextElement('div', 'fw-semibold small', item.fileName));\n fileDetails.appendChild(createTextElement('div', 'text-muted small', formatFileSize(item.fileSize)));\n\n const badge = createTextElement('span', 'badge ' + presentation.badgeClass, presentation.label);\n\n header.appendChild(fileDetails);\n header.appendChild(badge);\n\n const progress = document.createElement('div');\n progress.className = 'progress mt-2';\n progress.setAttribute('role', 'progressbar');\n progress.setAttribute('aria-valuemin', '0');\n progress.setAttribute('aria-valuemax', '100');\n progress.setAttribute('aria-valuenow', item.progress.toString());\n\n const progressState = document.createElement('div');\n progressState.className = 'progress-bar ' + presentation.progressClass;\n progressState.style.width = item.progress + '%';\n progressState.textContent = item.progress + '%';\n progress.appendChild(progressState);\n\n const message = createTextElement('div', item.status === 'failed' ? 'small text-danger mt-2' : 'small text-muted mt-2', formatUploadMessage(item));\n\n card.appendChild(header);\n card.appendChild(progress);\n card.appendChild(message);\n uploadQueue.appendChild(card);\n });\n }\n\n function createUploadItem(file, index) {\n return {\n id: file.name + '::' + file.size + '::' + file.lastModified + '::' + index + '::' + Date.now(),\n fileName: file.name,\n fileSize: file.size,\n status: 'queued',\n progress: 0,\n error: null\n };\n }\n\n function updateUploadItem(itemId, updates) {\n uploadItems = uploadItems.map(item => item.id === itemId ? Object.assign({}, item, updates) : item);\n renderUploadQueue();\n }\n\n function removeUploadItems(predicate) {\n uploadItems = uploadItems.filter(item => !predicate(item));\n renderUploadQueue();\n }\n\n function uploadSingleDocument(file, itemIdToUpdate, fileIndex, totalFiles) {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('chatInteractionId', config.itemId);\n formData.append('files', file);\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', config.uploadDocumentUrl, true);\n\n xhr.upload.addEventListener('progress', event => {\n if (!event.lengthComputable) {\n return;\n }\n\n const fileProgress = Math.round((event.loaded / event.total) * 100);\n updateUploadItem(itemIdToUpdate, {\n status: 'uploading',\n progress: fileProgress\n });\n\n const overallProgress = ((fileIndex + (event.loaded / event.total)) / totalFiles) * 100;\n showUploadProgress(overallProgress, 'Uploading ' + (fileIndex + 1) + ' of ' + totalFiles, 'progress-bar-striped progress-bar-animated');\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch (error) {\n reject(new Error('Upload failed: invalid server response.'));\n }\n\n return;\n }\n\n reject(new Error((xhr.responseText || 'Upload failed.').trim()));\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Upload failed. Please check your connection and try again.'));\n });\n\n xhr.send(formData);\n });\n }\n\n async function uploadDocuments(files) {\n if (!config.uploadDocumentUrl || !files || files.length === 0) {\n return;\n }\n\n if (isUploadingDocuments) {\n showUploadStatus('A document upload is already in progress.', 'text-warning');\n return;\n }\n\n isUploadingDocuments = true;\n\n const filesToUpload = [];\n const duplicateItems = [];\n const knownDocumentKeys = new Set(interactionDocuments.map(document => getDocumentKey(document.fileName, document.fileSize)));\n\n Array.from(files).forEach(file => {\n if (isDuplicateFile(file, knownDocumentKeys)) {\n duplicateItems.push(file);\n return;\n }\n\n knownDocumentKeys.add(getDocumentKey(file.name, file.size));\n filesToUpload.push(file);\n });\n\n if (duplicateItems.length > 0) {\n uploadItems = uploadItems.concat(duplicateItems.map((file, index) => Object.assign(createUploadItem(file, index), {\n status: 'failed',\n progress: 100,\n error: 'This document is already attached.'\n })));\n renderUploadQueue();\n }\n\n if (filesToUpload.length === 0) {\n isUploadingDocuments = false;\n showUploadStatus(duplicateItems.map(file => file.name + ': This document is already attached.').join(' | '), 'text-warning');\n showUploadProgress(null);\n return;\n }\n\n const pendingItems = filesToUpload.map(createUploadItem);\n uploadItems = uploadItems.concat(pendingItems);\n renderUploadQueue();\n showUploadProgress(0, 'Preparing upload...', 'progress-bar-striped progress-bar-animated');\n fileInput.disabled = true;\n\n try {\n let uploadedCount = 0;\n const failedUploads = duplicateItems.map(file => file.name + ': This document is already attached.');\n\n for (let i = 0; i < filesToUpload.length; i++) {\n const file = filesToUpload[i];\n const pendingItem = pendingItems[i];\n\n updateUploadItem(pendingItem.id, {\n status: 'uploading',\n progress: 0,\n error: null\n });\n\n showUploadStatus('Uploading ' + (i + 1) + ' of ' + filesToUpload.length + ' document(s)...', 'text-warning');\n\n try {\n const result = await uploadSingleDocument(file, pendingItem.id, i, filesToUpload.length);\n const uploaded = (Array.isArray(result.uploaded) ? result.uploaded : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n const failed = Array.isArray(result.failed) ? result.failed : [];\n\n if (uploaded.length > 0) {\n uploadedCount += uploaded.length;\n interactionDocuments = interactionDocuments.concat(uploaded);\n updateUploadItem(pendingItem.id, {\n status: 'uploaded',\n progress: 100,\n error: null\n });\n } else {\n const missingUploadMessage = failed.length > 0\n ? failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ')\n : 'The server did not confirm that the file was uploaded.';\n if (failed.length === 0) {\n failedUploads.push(missingUploadMessage);\n }\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: missingUploadMessage\n });\n }\n\n if (failed.length > 0) {\n const failedMessage = failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ');\n failedUploads.push(failedMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: failedMessage\n });\n }\n } catch (error) {\n const errorMessage = error && error.message\n ? error.message\n : 'Upload failed. Please try again.';\n console.error('Upload failed:', error);\n failedUploads.push(file.name + ': ' + errorMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: pendingItem.progress || 0,\n error: errorMessage\n });\n }\n }\n\n renderDocuments();\n\n if (failedUploads.length > 0) {\n removeUploadItems(item => item.status === 'uploaded');\n showUploadStatus(\n (uploadedCount > 0 ? ('Uploaded ' + uploadedCount + ' document(s). ') : '') + failedUploads.join(' | '),\n uploadedCount > 0 ? 'text-warning' : 'text-danger');\n showUploadProgress(null);\n return;\n }\n\n removeUploadItems(() => true);\n showUploadStatus('Uploaded ' + uploadedCount + ' document(s).', 'text-success');\n showUploadProgress(null);\n } catch (error) {\n console.error('Upload failed:', error);\n showUploadStatus('Upload failed. Please try again.', 'text-danger');\n showUploadProgress(null);\n } finally {\n isUploadingDocuments = false;\n fileInput.disabled = false;\n fileInput.value = '';\n }\n }\n\n async function removeDocument(documentId) {\n if (!config.removeDocumentUrl || !documentId || !window.confirm('Remove this document?')) {\n return;\n }\n\n try {\n const response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n itemId: config.itemId,\n documentId: documentId\n })\n });\n\n if (!response.ok) {\n console.error('Failed to remove document:', await response.text());\n showUploadStatus('Failed to remove document.', 'text-danger');\n return;\n }\n\n if ((response.headers.get('content-type') || '').toLowerCase().indexOf('json') < 0) {\n console.error('Remove document: response was not JSON.', { status: response.status, redirected: response.redirected });\n showUploadStatus(response.redirected\n ? 'You may not be signed in, or you do not have permission for this. Please reload and try again.'\n : 'Failed to remove document.', 'text-danger');\n\n return;\n }\n\n const result = await response.json();\n const serverDocuments = (Array.isArray(result.documents) ? result.documents : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n interactionDocuments = serverDocuments.length > 0\n ? serverDocuments\n : interactionDocuments.filter(document => document.documentId !== documentId);\n renderDocuments();\n showUploadStatus('Document removed.', 'text-success');\n } catch (error) {\n console.error('Remove failed:', error);\n showUploadStatus('Failed to remove document.', 'text-danger');\n }\n }\n\n const onFileInputChange = event => {\n const selectedFiles = event.target.files ? Array.from(event.target.files) : [];\n uploadDocuments(selectedFiles);\n };\n\n fileInput.addEventListener('change', onFileInputChange);\n fileInput[managerStateKey] = {\n dispose: () => {\n fileInput.removeEventListener('change', onFileInputChange);\n }\n };\n\n renderDocuments();\n renderUploadQueue();\n showUploadStatus(null);\n showUploadProgress(null);\n\n return fileInput[managerStateKey];\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = element.getAttribute(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 initializeFromElement(element) {\n if (!element || element.dataset.chatInteractionDocumentManagerInitialized === 'true') {\n return element ? element[managerStateKey] || null : null;\n }\n\n const config = parseJsonAttribute(element, 'data-chat-interaction-document-manager-config', 'chat interaction document manager config');\n if (!config) {\n return null;\n }\n\n const state = initialize(config);\n if (!state) {\n return null;\n }\n\n element.dataset.chatInteractionDocumentManagerInitialized = 'true';\n\n return state;\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('[data-chat-interaction-document-manager-config]')) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll('[data-chat-interaction-document-manager-config]').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 };\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":["chat-interaction.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","chatInteractionManager","_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","codeCopiedText","copyTitle","copiedTitle","copyResetDelayMs","assistantLabel","messageTemplate","indicatorTemplate","untitledText","clearHistoryTitle","clearHistoryMessage","clearHistoryOkText","clearHistoryCancelText","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","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","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","get","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","message","rawContent","displayContent","citationDisplay","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","findChartMarker","use","extensions","level","start","idx","undefined","tokenizer","extracted","startIndex","type","raw","substring","endIndex","json","token","config","markBrokenImagesInMessage","requestAnimationFrame","wireBrokenImageHandlers","wireImageZoom","mediumZoom","images","querySelectorAll","_iterator6","_step6","setAttribute","margin","background","_iterator7","_step7","_loop","addEventListener","container","closest","dataset","brokenHandled","hidden","note","className","insertAdjacentElement","once","renderMessageMedia","charts","_iterator8","_step8","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","styleMarkdownTables","replace","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","initialize","instanceConfig","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","isInteractionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","prompt","initialFieldValues","settingsDirty","saveSettingsTimeout","saveIndicatorTimeout","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","Math","random","conversationModeEnabled","conversationButton","isConversationMode","realtimeController","realtimeButton","realtimeEnabled","notifications","notificationDismissTimers","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","computed","lastAssistantIndex","role","methods","handleBeforeUnload","startConnection","_this","_callee","_t","_context","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","initializeInteraction","itemId","titleInput","msg","addMessage","$nextTick","historyItem","showSaveIndicator","stopRecording","isFinal","_conversationPartialTranscript","escaped","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","turnId","_realtimePendingTurns","pending","stopAudio","emptyIndex","splice","_conversationAssistantMessage","at","userMsg","messageId","responseId","appearance","_conversationAssistantResponseId","prev","hideTypingIndicator","j","msgIndex","newMessage","id","normalizeAssistantAppearance","base64Audio","contentType","binaryString","atob","bytes","Uint8Array","charCodeAt","receivePcm","playCollectedAudio","showPlaceholder","clearHistoryBtn","classList","add","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentInteraction","onclose","addMessageInternal","_this2","fireEvent","CustomEvent","detail","_this3","_message$rawContent","remove","event","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","isIndicator","sendMessage","_this4","_callee2","trimmedPrompt","_context2","endActiveVoiceSession","flushPendingSave","streamMessage","_this5","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentItemId","getItemId","subscribe","chunk","sessionId","setItemId","keys","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","complete","_this5$stream","processReferences","streamingFinished","synthesizeSpeech","_this5$stream2","getServiceDownMessage","_this6","_ref19","_message$rawContent2","stopIcon","getAttribute","replaceChildren","RETURN_DOM_FRAGMENT","startIcon","icons","debouncedSaveSettings","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this7","buttons","button","buttonIndex","Number","isPlaying","iconHtml","toggle","updateCopyButtons","_this8","isCopied","setCopyButtonState","cacheIndex","_this9","_ttsCacheIndex","invoke","toggleMessageTts","_this0","playAudioBlob","_this1","totalLength","reduce","sum","combined","offset","_iterator9","_step9","blob","Blob","_this10","URL","createObjectURL","audio","Audio","revokeObjectURL","playNextInQueue","play","_this11","nextBlob","shift","conversationModeOnAudioEnded","_this12","pause","currentTime","setVoiceSessionLive","live","nextElementSibling","audioSettings","toggleConversationMode","stopConversationMode","startConversationMode","isActive","stop","_this13","updateConversationButton","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","_conversationSubject","Subject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","pendingChunk","analyser","interruptVolumeThreshold","size","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee3","uint8Array","base64","_context3","arrayBuffer","str","byte","String","fromCharCode","btoa","getTracks","track","documentElement","send","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","originalLength","removedCount","_this14","setTimeout","scrollTop","scrollHeight","clientHeight","handleUserInput","target","getSaveIndicatorElement","saveIndicatorElementSelector","_this15","indicator","clearTimeout","clearPendingSettingsSave","getFieldLabel","input","_input$closest","setting","getValidationFeedbackElement","feedback","contains","clearSettingValidationError","removeAttribute","setSettingValidationError","getSettingValidationMessage","disabled","number","fieldLabel","isNaN","min","max","validateSettingInput","validateSettings","_this16","isValid","getSettingInputs","queueSettingsSave","explicitInputs","getSelectedGroupValues","groupName","fallbackSelector","explicitSelections","values","checkbox","checkboxes","baseName","hiddenInput","getPromptTemplateSelections","promptTemplates","card","templateIdInput","promptParametersInput","templateId","promptParameters","clearNotificationDismiss","findIndex","scheduleNotificationDismiss","_this17","timerId","dismissNotification","handleNotificationAction","actionName","resetInteraction","initializeApp","_this18","placeholderElementSelector","loadInteraction","threshold","atBottom","shiftKey","click","lastMsg","pop","chatInteractionItems","getElementsByClassName","preventDefault","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","clearHistory","micButtonElementSelector","style","display","toggleRecording","conversationButtonElementSelector","CoreAIRealtime","realtimeButtonElementSelector","attach","ensureConnected","sendStart","subject","voice","silenceMs","vadThreshold","allowInterruption","webRtcEnabled","realtimeWebRtcEnabled","sendStartWebRtc","offerSdp","webRtcIceServers","realtimeWebRtcIceServers","voiceName","realtimeVoiceName","getVoiceName","el","realtimeVoiceSelectElementSelector","capableDeployments","realtimeCapableDeployments","selectors","onSessionStateChanged","active","onActivate","onDeactivate","onEnterRealtimeMode","onUserTurnPending","onUserTurnDropped","dropped","setupRealtimeVoicePicker","realtimeVoicesUrl","voiceSelect","voiceGroup","realtimeVoiceGroupElementSelector","conversationSelect","conversationDeploymentSelectElementSelector","capable","savedVoiceId","self","isRealtimeDeployment","resolveConversationDeployment","defaultRealtimeDeploymentName","loadVoices","_loadVoices","_callee4","deploymentName","realtime","response","result","grouped","_iterator0","_step0","_t2","_context4","applyMode","fetch","encodeURIComponent","credentials","headers","ok","voices","gender","has","localeCompare","optgroup","option","selected","appendChild","clearHistoryConfirmed","confirmDialog","okText","cancelText","callback","confirmed","confirm","_this19","saveSettings","getSelectedToolNames","getSelectedMcpConnectionIds","getSelectedA2AConnectionIds","getSelectedAgentNames","_this20","settings","inputs","match","checked","parseFloat","toolNames","mcpConnectionIds","a2aConnectionIds","agentNames","promptTemplateIds","template","force","clearCopiedMessageState","copyResponse","_ref21","_message$copyContent","_event$target","_event$target$closest","_this21","currentTarget","startRecording","_this22","_callee5","_context5","updateMicButton","watch","_this23","mounted","_this24","_callee6","_context6","$el","fontAwesomeObserver","beforeUnmount","removeEventListener","disconnect","mount","autoInitializeSelector","parseJsonAttribute","element","attributeName","description","rawValue","initializeFromElement","chatInteractionInitialized","__chatInteractionApp","scanForAutoInitialization","startAutoInitialization","body","readyState","chatInteractionDocumentManager","managerStateKey","normalizeDocumentInfo","documentId","DocumentId","fileName","FileName","fileSize","FileSize","formatFileSize","toFixed","getDocumentKey","isDuplicateFile","file","knownKeys","getDocumentsFromDom","chatDocumentId","chatDocumentName","chatDocumentSize","fileInput","documentsList","status","progressContainer","progressBar","uploadQueue","previousState","interactionDocuments","existingDocuments","uploadItems","isUploadingDocuments","createTextElement","tagName","renderDocuments","documentInfo","row","actions","downloadBaseUrl","downloadDocumentBaseUrl","downloadLink","downloadIcon","removeButton","removeIcon","removeDocument","details","prepend","showUploadStatus","showUploadProgress","progress","width","roundedProgress","round","getUploadStatePresentation","state","badgeClass","progressClass","formatUploadMessage","item","renderUploadQueue","presentation","header","fileDetails","badge","progressState","createUploadItem","lastModified","Date","now","updateUploadItem","updates","removeUploadItems","predicate","uploadSingleDocument","itemIdToUpdate","fileIndex","totalFiles","reject","formData","FormData","append","xhr","XMLHttpRequest","open","uploadDocumentUrl","upload","lengthComputable","fileProgress","loaded","total","overallProgress","responseText","Error","uploadDocuments","_x","_uploadDocuments","_callee7","files","filesToUpload","duplicateItems","knownDocumentKeys","pendingItems","uploadedCount","failedUploads","pendingItem","uploaded","failed","missingUploadMessage","failedMessage","errorMessage","_t3","_t4","_context7","Set","join","_x2","_removeDocument","_callee8","serverDocuments","_t5","_t6","_context8","removeDocumentUrl","method","stringify","redirected","documents","onFileInputChange","selectedFiles","chatInteractionDocumentManagerInitialized","download","toDataURL","img","startsWith","res","removeChild"],"mappings":"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","file":"chat-interaction.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 ai-chat.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.chatInteractionManager = 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 codeCopiedText: 'Copied!',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n copyResetDelayMs: 2000,\n assistantLabel: 'Assistant',\n\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">You</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n {{ getAssistantLabel(message) }}\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 <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 <i :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></i>\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 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 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-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 Assistant\n </div>\n `,\n // Localizable strings\n untitledText: 'Untitled',\n clearHistoryTitle: 'Clear History',\n clearHistoryMessage: 'Are you sure you want to clear the chat history? This action cannot be undone. Your documents, parameters, and tools will be preserved.',\n clearHistoryOkText: 'Yes',\n clearHistoryCancelText: 'Cancel'\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 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 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 // The download sits over the picture's lower corner rather than on a line of its own beneath it.\n // A row of its own cost a band of vertical space under every figure, which a conversation full of\n // them pays for once per figure. The link itself is unchanged -- same address, same download\n // attribute, same behaviour -- only where it is drawn.\n return `<span class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\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 };\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 shared with ai-chat.js\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 requestAnimationFrame(wireImageZoom);\n }\n\n // A picture arrives after the markdown is handed back -- the view writes it, and a streamed answer\n // rewrites it on every chunk -- so zooming cannot be attached once at load. It is attached on the same\n // pass as the broken-image handler above, and the attribute marks a picture already attached so a\n // re-render does not bind it a second time.\n function wireImageZoom() {\n // The library is the host's to load. Without it the picture is still shown and still downloadable;\n // only the enlarging is missing, so this is not worth failing a render over.\n if (typeof mediumZoom !== 'function') {\n return;\n }\n\n const images = document.querySelectorAll('.generated-image-container img:not([data-zoom-wired])');\n\n if (images.length === 0) {\n return;\n }\n\n for (const image of images) {\n image.setAttribute('data-zoom-wired', 'true');\n }\n\n mediumZoom(images, {\n // The drawing is bounded by the window rather than by this margin, so the margin is kept\n // small: an ingested figure is read detail by detail, and every pixel given away here comes\n // off the size it is read at.\n margin: 16,\n background: 'rgba(15, 15, 15, 0.92)',\n });\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 const canvas = document.getElementById(c.chartId);\n if (!canvas) {\n continue;\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 continue;\n }\n\n // When the canvas is inside a hidden container (e.g., display:none),\n // it has zero dimensions. Keep the config for later rendering.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[c.chartId] = c.config;\n continue;\n }\n\n try {\n // Destroy existing chart instance if re-rendering\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof c.config === 'string' ? JSON.parse(c.config) : c.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 } catch (e) {\n console.error('Error creating chart:', e);\n }\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. This page renders markdown through its own pipeline, so the same treatment\n // is applied here as in the shared chat script.\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 const initialize = (instanceConfig) => {\n const config = Object.assign({}, defaultConfig, compactObject(instanceConfig));\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 app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isInteractionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n prompt: '',\n initialFieldValues: new Map(),\n settingsDirty: false,\n saveSettingsTimeout: null,\n saveIndicatorTimeout: null,\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 ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'chat-interaction-' + Math.random().toString(36).slice(2),\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n // Realtime (speech-to-speech) controller from the shared CoreAIRealtime module.\n realtimeController: null,\n realtimeButton: null,\n // Whether a realtime deployment actually resolved. The controller is attached whenever the\n // module is loaded, so its presence says nothing about which transport carries the\n // conversation -- only this flag does.\n realtimeEnabled: config.realtimeEnabled === true,\n notifications: [],\n notificationDismissTimers: {},\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\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 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(\"LoadInteraction\", (data) => {\n this.initializeInteraction(data.itemId, true);\n this.messages = [];// Update the title field if it exists\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && data.title) {\n titleInput.value = data.title;\n }\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderMessageMedia(msg);\n });\n });\n });\n\n this.connection.on(\"SettingsSaved\", (itemId, title) => {\n // Update the history list item if it exists\n // Use a more specific selector to only target history list items, not other elements like the Clear History button\n const historyItem = document.querySelector(`.chat-interaction-history-item[data-interaction-id=\"${itemId}\"]`);\n if (historyItem) {\n historyItem.textContent = title || config.untitledText;\n }\n\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && title) {\n titleInput.value = title;\n }\n\n this.showSaveIndicator('Saved', 'text-success');\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n this.showSaveIndicator('Save failed', 'text-danger');\n\n if (this.isRecording) {\n this.stopRecording();\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (itemId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\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\", (itemId, turnId, text) => {\n // Realtime: a placeholder for this turn was already inserted in the right position when\n // the utterance was captured (see onUserTurnPending), 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 if (text) {\n pending.content = text;\n pending.rawContent = text;\n pending.isPartial = false;\n updateMessagePresentation(pending, pending.references);\n } else {\n var emptyIndex = this.messages.indexOf(pending);\n if (emptyIndex >= 0) { this.messages.splice(emptyIndex, 1); }\n }\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, '&').replace(/</g, '<').replace(/>/g, '>');\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 var at = this._conversationAssistantMessage.index;\n var userMsg = { role: 'user', content: text, rawContent: text, 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\", (itemId, 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 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\", (itemId, 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\", (itemId, base64Audio, contentType) => {\n if (base64Audio) {\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 // Realtime PCM streams straight to the low-latency player; other formats (TTS) are buffered.\n if (contentType === 'audio/pcm' && this.realtimeController) {\n this.realtimeController.receivePcm(bytes);\n } else {\n this.audioChunks.push(bytes);\n }\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (itemId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"HistoryCleared\", (itemId) => {\n // Clear messages and show placeholder\n this.messages = [];\n this.showPlaceholder();\n\n // Hide the clear history button since there's no history now\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.add('d-none');\n }\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\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n this.reloadCurrentInteraction();\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\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 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(\"addingChatInteractionMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedChatInteractionMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\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 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 fireEvent(event) {\n document.dispatchEvent(event);\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 : defaultConfig.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 isIndicator(message) {\n return message.role === 'indicator';\n },\n async sendMessage() {\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // A live voice session and a typed turn are two writers into one interaction, and they\n // would interleave. End the session first; the turns it already produced are persisted, so\n // the typed message simply continues the same thread.\n this.endActiveVoiceSession();\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 // Flush any pending settings save before sending a message\n // to prevent concurrent hub calls that can cause database deadlocks.\n await this.flushPendingSave();\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n // Show the clear history button since we now have prompts\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.remove('d-none');\n }\n\n this.streamMessage(trimmedPrompt);\n this.inputElement.value = '';\n this.prompt = '';\n },\n streamMessage(trimmedPrompt) {\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 var messageIndex = this.messages.length;\n var currentItemId = this.getItemId();\n\n this.stream = this.connection.stream(\"SendMessage\", currentItemId, trimmedPrompt)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n if (chunk.sessionId && !currentItemId) {\n this.setItemId(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n messageIndex = this.messages.length;\n let newMessage = {\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n };\n\n this.messages.push(newMessage);\n message = newMessage;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\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 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 return {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\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 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 // 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 // Save any settings that were deferred during streaming.\n if (this.settingsDirty) {\n this.debouncedSaveSettings();\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 var iconHtml = isPlaying\n ? '<i class=\"fa-solid fa-circle-pause\"></i>'\n : '<i class=\"fa-solid fa-circle-play\"></i>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\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.getItemId(), 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.isPlayingAudio && 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 currently playing, queue this blob for later.\n if (this.isPlayingAudio && 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 const 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 // A live voice session takes the message box away and puts the audio settings in its place; ending\n // the session gives it back. Sending a typed message already ends the session first, so the box was\n // never a way to say something *during* one -- hiding it only makes that honest, and frees the row\n // for the gear. Both transports land here: realtime through the module's onActivate, the\n // speech-to-text cascade through startConversationMode.\n setVoiceSessionLive(live) {\n if (this.inputElement) {\n this.inputElement.hidden = live;\n }\n\n if (this.buttonElement) {\n this.buttonElement.hidden = live;\n }\n\n // With the message box gone the live button would otherwise sit at its natural width in an\n // empty row, so it takes the space the box left behind. Whichever transport is carrying the\n // conversation owns a different button, and the hidden one is unaffected by the class.\n [this.realtimeButton, this.conversationButton].forEach(function (button) {\n if (button) { button.classList.toggle('flex-grow-1', live); }\n });\n\n // The gear is built by the realtime module directly after the button it was handed, and only\n // in realtime mode, so it is absent on the cascade. It belongs to a live session rather than\n // to the surface. The module hard-codes its element id and a page can host two chat clients\n // at once -- this one and the admin widget -- so it is found next to this client's own button\n // rather than by id.\n var next = this.realtimeButton && this.realtimeButton.nextElementSibling;\n var audioSettings = next && next.id === 'realtime-audio-settings' ? next : null;\n if (audioSettings) {\n audioSettings.hidden = !live;\n }\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n // Two writers into one interaction would interleave, so the voice session ends before the typed\n // turn starts rather than running alongside it.\n endActiveVoiceSession() {\n if (this.realtimeController && this.realtimeController.isActive()) {\n this.realtimeController.stop();\n\n return;\n }\n\n if (this.isConversationMode) {\n this.stopConversationMode();\n }\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\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var itemId = this.getItemId();\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"StartConversation\", itemId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\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 && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\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, continuation is handled\n // by the persistent stream.\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 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 getItemId() {\n return this.inputElement.getAttribute('data-interaction-id')\n || this.inputElement.getAttribute('data-item-id');\n },\n getSaveIndicatorElement() {\n if (config.saveIndicatorElementSelector) {\n return document.querySelector(config.saveIndicatorElementSelector);\n }\n\n return document.querySelector('[data-chat-interaction-save-indicator]');\n },\n showSaveIndicator(text, className) {\n const indicator = this.getSaveIndicatorElement();\n if (!indicator) {\n return;\n }\n\n indicator.textContent = text || '';\n indicator.className = 'settings-save-indicator ' + (className || 'text-muted');\n\n if (this.saveIndicatorTimeout) {\n clearTimeout(this.saveIndicatorTimeout);\n this.saveIndicatorTimeout = null;\n }\n\n if (!text) {\n return;\n }\n\n this.saveIndicatorTimeout = setTimeout(() => {\n indicator.textContent = '';\n this.saveIndicatorTimeout = null;\n }, 3000);\n },\n clearPendingSettingsSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n },\n getFieldLabel(input) {\n const label = input\n .closest('.mb-3, .col-6, .col, .form-group, .form-floating')\n ?.querySelector('label');\n\n if (!label) {\n return input.dataset.setting || 'This field';\n }\n\n return (label.textContent || '')\n .replace(/\\s+/g, ' ')\n .trim()\n || input.dataset.setting\n || 'This field';\n },\n getValidationFeedbackElement(input) {\n let feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n return feedback;\n }\n\n feedback = document.createElement('div');\n feedback.className = 'invalid-feedback';\n input.insertAdjacentElement('afterend', feedback);\n\n return feedback;\n },\n clearSettingValidationError(input) {\n input.classList.remove('is-invalid');\n input.removeAttribute('aria-invalid');\n\n const feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n feedback.textContent = '';\n }\n },\n setSettingValidationError(input, message) {\n const feedback = this.getValidationFeedbackElement(input);\n input.classList.add('is-invalid');\n input.setAttribute('aria-invalid', 'true');\n feedback.textContent = message;\n },\n getSettingValidationMessage(input) {\n if (!input || input.disabled || input.type !== 'number') {\n return null;\n }\n\n const value = (input.value || '').trim();\n if (!value) {\n return null;\n }\n\n const number = Number(value);\n const fieldLabel = this.getFieldLabel(input);\n\n if (Number.isNaN(number)) {\n return `${fieldLabel} must be a valid number.`;\n }\n\n const min = input.getAttribute('min');\n if (min !== null && number < Number(min)) {\n return `${fieldLabel} must be ${min} or greater.`;\n }\n\n const max = input.getAttribute('max');\n if (max !== null && number > Number(max)) {\n return `${fieldLabel} must be ${max} or less.`;\n }\n\n return null;\n },\n validateSettingInput(input) {\n const message = this.getSettingValidationMessage(input);\n if (!message) {\n this.clearSettingValidationError(input);\n return true;\n }\n\n this.setSettingValidationError(input, message);\n return false;\n },\n validateSettings() {\n let isValid = true;\n\n this.getSettingInputs().forEach(input => {\n isValid = this.validateSettingInput(input) && isValid;\n });\n\n return isValid;\n },\n queueSettingsSave() {\n if (!this.validateSettings()) {\n this.clearPendingSettingsSave();\n this.settingsDirty = false;\n this.showSaveIndicator('Fix errors', 'text-danger');\n return;\n }\n\n this.settingsDirty = true;\n this.showSaveIndicator('Saving...', 'text-warning');\n this.debouncedSaveSettings();\n },\n getSettingInputs() {\n const explicitInputs = document.querySelectorAll('.setting-input[data-setting]');\n if (explicitInputs.length > 0) {\n return explicitInputs;\n }\n\n return document.querySelectorAll(\n 'input[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'select[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'textarea[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"])'\n );\n },\n getSelectedGroupValues(groupName, fallbackSelector) {\n const explicitSelections = document.querySelectorAll(`.capability-checkbox[data-save-group=\"${groupName}\"]:checked, .capability-checkbox[data-group=\"${groupName}\"]:checked`);\n if (explicitSelections.length > 0) {\n const values = [];\n\n explicitSelections.forEach(checkbox => {\n const value = checkbox.getAttribute('data-item-id') || checkbox.value;\n if (value) {\n values.push(value);\n }\n });\n\n return values;\n }\n\n if (!fallbackSelector) {\n return [];\n }\n\n const values = [];\n const checkboxes = document.querySelectorAll(fallbackSelector);\n\n checkboxes.forEach(checkbox => {\n const baseName = checkbox.name.replace('.IsSelected', '.ItemId');\n const hiddenInput = document.querySelector(`input[type=\"hidden\"][name=\"${baseName}\"]`);\n\n if (hiddenInput && hiddenInput.value) {\n values.push(hiddenInput.value);\n }\n });\n\n return values;\n },\n getPromptTemplateSelections() {\n const promptTemplates = [];\n\n document.querySelectorAll('.prompt-template-card').forEach(card => {\n const templateIdInput = card.querySelector('.prompt-template-id-input');\n const promptParametersInput = card.querySelector('.prompt-template-parameters-input');\n const templateId = templateIdInput ? templateIdInput.value : card.getAttribute('data-template-id');\n\n if (!templateId) {\n return;\n }\n\n promptTemplates.push({\n templateId: templateId,\n promptParameters: promptParametersInput ? (promptParametersInput.value || '').trim() : ''\n });\n });\n\n return promptTemplates;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n // Replace existing notification with same type, or add new one.\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\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 itemId = this.getItemId();\n this.connection.invoke('HandleNotificationAction', itemId, notificationType, actionName)\n .catch(err => console.error('Failed to handle notification action:', err));\n },\n setItemId(itemId) {\n this.inputElement.setAttribute('data-interaction-id', itemId || '');\n this.inputElement.setAttribute('data-item-id', itemId || '');\n },\n resetInteraction() {\n this.setItemId('');\n this.isInteractionStarted = false;\n this.messages = [];\n this.showPlaceholder();\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 const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\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('keyup', event => {\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\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.inputElement.addEventListener('paste', (e) => {\n // Use setTimeout to allow the paste to complete before checking the value\n setTimeout(() => {\n this.prompt = this.inputElement.value;\n if (this.inputElement.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n }, 0);\n });\n\n this.buttonElement.addEventListener('click', () => {\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 chatInteractionItems = document.getElementsByClassName('chat-interaction-history-item');\n\n for (var i = 0; i < chatInteractionItems.length; i++) {\n chatInteractionItems[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var itemId = e.target.getAttribute('data-interaction-id');\n\n if (!itemId) {\n console.error('An element with the class chat-interaction-history-item with no data-interaction-id set.');\n return;\n }\n\n this.loadInteraction(itemId);\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 // 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 document.addEventListener('input', event => {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('change', event => {\n if (event.target.matches('.setting-input[data-setting], .capability-checkbox[data-save-group], .capability-checkbox[data-group], .group-toggle, .ci-agent-global-toggle')) {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n }\n\n this.queueSettingsSave();\n return;\n }\n\n if (event.target.closest('.prompt-template-parameters-input, .prompt-template-id-input')) {\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('click', event => {\n if (!event.target.closest('.prompt-template-add-btn, .remove-prompt-template-btn')) {\n return;\n }\n\n setTimeout(() => {\n this.queueSettingsSave();\n }, 0);\n });\n\n // Add event listener for clear history button\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.addEventListener('click', () => {\n const itemId = clearHistoryBtn.getAttribute('data-interaction-id');\n if (itemId) {\n this.clearHistory(itemId);\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.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n\n // Initialize realtime (speech-to-speech) mode via the shared CoreAIRealtime module. The\n // module owns the mic capture, playback, echo guard, push-to-talk and audio settings; the\n // callbacks below plug it into this app's connection and conversation-transcript display.\n if (window.CoreAIRealtime && config.realtimeButtonElementSelector) {\n // Kept so the voice settings popover can be found next to this client's own button.\n this.realtimeButton = document.querySelector(config.realtimeButtonElementSelector);\n this.realtimeController = window.CoreAIRealtime.attach({\n connection: this.connection,\n ensureConnected: () => Promise.resolve(this.connection),\n sendStart: (subject, voice, language, silenceMs, vadThreshold, allowInterruption) => {\n this.connection.send('StartRealtimeConversation', this.getItemId(), subject, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n // Prefer WebRTC (server-relay) when the server advertises it; the shared module falls back\n // to the WebSocket sendStart above if the peer cannot connect.\n webRtcEnabled: config.realtimeWebRtcEnabled === true,\n sendStartWebRtc: (offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption) => {\n this.connection.send('StartRealtimeWebRtc', this.getItemId(), offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcIceServers: Array.isArray(config.realtimeWebRtcIceServers) ? config.realtimeWebRtcIceServers : undefined,\n voiceName: config.realtimeVoiceName || '',\n getVoiceName: () => {\n var el = config.realtimeVoiceSelectElementSelector ? document.querySelector(config.realtimeVoiceSelectElementSelector) : null;\n return el ? el.value : '';\n },\n capableDeployments: config.realtimeCapableDeployments || [],\n realtimeEnabled: config.realtimeEnabled === true,\n // input and sendButton are deliberately not handed over. The module hides every\n // control it is given when realtime takes over, and typing has to stay available\n // during a voice conversation -- that is the whole feature.\n //\n // deploymentSelect is not handed over either: it would read the raw select value,\n // and an empty conversation deployment means \"use the site default\", which still\n // resolves. The host resolves it and calls applyMode itself (see below).\n selectors: {\n realtimeButton: config.realtimeButtonElementSelector,\n micButton: config.micButtonElementSelector,\n conversationButton: config.conversationButtonElementSelector\n },\n // The module owns whether a session is live, so the message box follows its flag\n // rather than this app's copy of it. Losing one of these events used to leave the\n // box hidden under a button that had already gone back to \"Start speaking\".\n onSessionStateChanged: (active) => {\n this.setVoiceSessionLive(active);\n },\n onActivate: () => {\n this.isConversationMode = true;\n this._conversationPartialMessage = null;\n this._conversationAssistantMessage = null;\n },\n onDeactivate: () => {\n this.isConversationMode = false;\n if (this._conversationAssistantMessage) {\n var m = this.messages[this._conversationAssistantMessage.index];\n if (m) { m.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n },\n onEnterRealtimeMode: () => {\n if (this.isRecording) { this.stopRecording(); }\n if (this.isConversationMode && (!this.realtimeController || !this.realtimeController.isActive())) { this.stopConversationMode(); }\n },\n // The utterance has been captured but not transcribed yet. Showing a placeholder now\n // puts the prompt above the reply it produces: transcription lags the spoken answer, so\n // a bubble added only when the text arrives lands underneath its own reply.\n onUserTurnPending: (turnId) => {\n if (!turnId) { return; }\n var placeholder = { role: 'user', content: '', rawContent: '', references: {}, isPartial: true };\n updateMessagePresentation(placeholder, placeholder.references);\n this._realtimePendingTurns = this._realtimePendingTurns || {};\n this._realtimePendingTurns[turnId] = placeholder;\n this.messages.push(placeholder);\n this.scrollToBottom();\n },\n onUserTurnDropped: (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 });\n\n this.setupRealtimeVoicePicker(config);\n\n // The module reveals the gear as soon as the surface enters realtime mode, but it belongs\n // to a live session. The watcher that would hide it only runs on a change, so the idle\n // state has to be stated once here.\n this.setVoiceSessionLive(false);\n }\n },\n // Populates the per-interaction realtime voice picker from the selected realtime deployment's\n // voices (via the realtime-voices endpoint), and shows it only for realtime-capable deployments.\n setupRealtimeVoicePicker(config) {\n if (!config.realtimeVoiceSelectElementSelector || !config.realtimeVoicesUrl) {\n return;\n }\n\n var voiceSelect = document.querySelector(config.realtimeVoiceSelectElementSelector);\n if (!voiceSelect) {\n return;\n }\n\n var voiceGroup = config.realtimeVoiceGroupElementSelector ? document.querySelector(config.realtimeVoiceGroupElementSelector) : null;\n var conversationSelect = config.conversationDeploymentSelectElementSelector\n ? document.querySelector(config.conversationDeploymentSelectElementSelector)\n : null;\n var capable = (config.realtimeCapableDeployments || []).map(function (n) { return (n || '').toLowerCase(); });\n var savedVoiceId = config.realtimeVoiceName || '';\n var self = this;\n\n function isRealtimeDeployment(name) {\n return name && capable.indexOf(name.toLowerCase()) !== -1;\n }\n\n // Mirrors the realtime slot's chain on the server: the interaction's own choice, then the\n // site default, then the first realtime-capable deployment. Only conversation mode reaches\n // it -- an interaction that is not in conversation mode never speaks.\n function resolveConversationDeployment() {\n if (!self.conversationModeEnabled) {\n return '';\n }\n\n var name = (conversationSelect && conversationSelect.value)\n || config.defaultRealtimeDeploymentName\n || (capable.length ? capable[0] : '');\n\n return isRealtimeDeployment(name) ? name : '';\n }\n\n async function loadVoices() {\n var deploymentName = resolveConversationDeployment();\n var realtime = !!deploymentName;\n if (voiceGroup) {\n voiceGroup.classList.toggle('d-none', !realtime);\n }\n\n // Changing the conversation deployment switches the voice toggle on or off without a\n // reload.\n if (self.realtimeController) {\n self.realtimeController.applyMode(realtime);\n }\n\n if (!realtime) {\n return;\n }\n\n voiceSelect.innerHTML = '<option value=\"\">Default voice</option>';\n\n try {\n const response = await fetch(config.realtimeVoicesUrl + '?deploymentName=' + encodeURIComponent(deploymentName), { credentials: 'same-origin' });\n const contentType = (response.headers.get('content-type') || '').toLowerCase();\n\n // A sign-in redirect answers with HTML and response.ok, so this has to be checked\n // rather than parsed: the default voice is a fine outcome, a parser error is not.\n if (!response.ok || contentType.indexOf('json') < 0) {\n return;\n }\n\n const result = await response.json();\n if (!result || !Array.isArray(result.voices)) {\n return;\n }\n\n const grouped = new Map();\n for (const voice of result.voices) {\n const groupName = voice.gender || 'Voices';\n if (!grouped.has(groupName)) {\n grouped.set(groupName, []);\n }\n grouped.get(groupName).push(voice);\n }\n\n Array.from(grouped.keys()).sort((a, b) => a.localeCompare(b)).forEach(function (groupName) {\n const optgroup = document.createElement('optgroup');\n optgroup.label = groupName;\n grouped.get(groupName).forEach(function (voice) {\n const option = document.createElement('option');\n option.value = voice.id;\n option.textContent = voice.name;\n option.selected = voice.id === savedVoiceId;\n optgroup.appendChild(option);\n });\n voiceSelect.appendChild(optgroup);\n });\n } catch (err) {\n /* ignore voice load failures */\n }\n }\n\n if (conversationSelect) {\n conversationSelect.addEventListener('change', loadVoices);\n }\n loadVoices();\n },\n loadInteraction(itemId) {\n this.connection.invoke(\"LoadInteraction\", itemId).catch(err => console.error(err));\n },\n reloadCurrentInteraction() {\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n },\n clearHistory(itemId) {\n const self = this;\n const clearHistoryConfirmed = () => {\n // Force-stop any live realtime voice session before clearing history.\n if (self.realtimeController && self.realtimeController.isActive()) {\n self.realtimeController.stop();\n }\n\n // Cancel any active stream before clearing history.\n if (self.stream) {\n self.stream.dispose();\n self.stream = null;\n self.hideTypingIndicator();\n self.streamingFinished();\n }\n\n self.connection.invoke(\"ClearHistory\", itemId)\n .catch(err => console.error('Error clearing history:', err));\n };\n\n if (typeof confirmDialog === 'function') {\n confirmDialog({\n title: config.clearHistoryTitle,\n message: config.clearHistoryMessage,\n okText: config.clearHistoryOkText,\n cancelText: config.clearHistoryCancelText,\n callback: function (confirmed) {\n if (confirmed) {\n clearHistoryConfirmed();\n }\n }\n });\n\n return;\n }\n\n if (window.confirm(config.clearHistoryMessage || 'Clear all messages?')) {\n clearHistoryConfirmed();\n }\n },\n debouncedSaveSettings() {\n // Clear any existing timeout to reset the debounce timer\n this.clearPendingSettingsSave();\n\n // Don't save while streaming — it will be saved when streaming completes.\n if (this.stream) {\n return;\n }\n\n // Set a new timeout to save after 850ms of no changes\n this.saveSettingsTimeout = setTimeout(() => {\n if (this.settingsDirty) {\n this.saveSettings();\n this.settingsDirty = false;\n }\n this.saveSettingsTimeout = null;\n }, 850);\n },\n getSelectedToolNames() {\n return this.getSelectedGroupValues(\n 'toolNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Tools[\"]:checked'\n );\n },\n getSelectedMcpConnectionIds() {\n return this.getSelectedGroupValues(\n 'mcpConnectionIds',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Connections[\"]:checked'\n );\n },\n getSelectedA2AConnectionIds() {\n return this.getSelectedGroupValues('a2aConnectionIds');\n },\n getSelectedAgentNames() {\n return this.getSelectedGroupValues(\n 'agentNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Agents[\"]:checked'\n );\n },\n saveSettings() {\n const itemId = this.getItemId();\n if (!itemId) {\n return Promise.resolve();\n }\n\n if (!this.validateSettings()) {\n this.showSaveIndicator('Fix errors', 'text-danger');\n return Promise.resolve();\n }\n\n const settings = {};\n\n // Collect all form inputs with the \"ChatInteraction.\" prefix generically.\n // This avoids coupling the JS to specific field names — new fields added by\n // any module are automatically included.\n const inputs = this.getSettingInputs();\n\n inputs.forEach(input => {\n const key = input.dataset.setting\n || ((input.name || '').replace('ChatInteraction.', '').replace(/^[A-Z]/, match => match.toLowerCase()));\n\n if (!key) {\n return;\n }\n\n if (input.type === 'checkbox') {\n settings[key] = input.checked;\n } else if (input.type === 'number') {\n settings[key] = input.value ? parseFloat(input.value) : null;\n } else {\n settings[key] = input.value || null;\n }\n });\n\n // Add tool, MCP connection, and agent collections (special handling).\n settings.toolNames = this.getSelectedToolNames();\n settings.mcpConnectionIds = this.getSelectedMcpConnectionIds();\n settings.a2aConnectionIds = this.getSelectedA2AConnectionIds();\n settings.agentNames = this.getSelectedAgentNames();\n\n const promptTemplates = this.getPromptTemplateSelections();\n if (promptTemplates.length > 0) {\n settings.promptTemplates = promptTemplates;\n settings.promptTemplateIds = promptTemplates.map(template => template.templateId);\n }\n\n return this.connection.invoke(\"SaveSettings\", itemId, settings)\n .catch(err => {\n console.error('Error saving settings:', err);\n this.showSaveIndicator('Save failed', 'text-danger');\n });\n },\n flushPendingSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n\n if (this.settingsDirty) {\n this.settingsDirty = false;\n return this.saveSettings();\n }\n\n return Promise.resolve();\n },\n initializeInteraction(itemId, force) {\n if (this.isInteractionStarted && !force) {\n return;\n }\n this.fireEvent(new CustomEvent(\"initializingChatInteraction\", { detail: { itemId: itemId } }));\n this.setItemId(itemId);\n this.isInteractionStarted = true;\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 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 var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var itemId = this.getItemId();\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", itemId, subject, mimeType, language);\n this.mediaRecorder.start(250);\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 || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\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 },\n watch: {\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n // The dictation microphone is hidden while a voice conversation runs: the conversation\n // already owns the microphone, and a second one would mean something different.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // The message box and the send button give way to the voice settings while the conversation\n // runs, and come back when it ends. Both kinds of turn still land in the same thread; what\n // they cannot do is overlap.\n //\n // Only the cascade is driven from here. Realtime follows the module's own session flag\n // (onSessionStateChanged), so the two never disagree about whether a session is live.\n if (!this.realtimeEnabled) {\n this.setVoiceSessionLive(active);\n }\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n this.initializeApp();\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 template: config.messageTemplate\n }).mount(config.appElementSelector);\n\n return app;\n };\n\n const autoInitializeSelector = '[data-chat-interaction-config]';\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = element.getAttribute(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 initializeFromElement(element) {\n if (!element || element.dataset.chatInteractionInitialized === 'true') {\n return element ? element.__chatInteractionApp || null : null;\n }\n\n const config = parseJsonAttribute(element, 'data-chat-interaction-config', 'chat interaction config');\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.chatInteractionInitialized = 'true';\n element.__chatInteractionApp = 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 };\n}();\n\nwindow.chatInteractionDocumentManager = function () {\n const managerStateKey = '__chatInteractionDocumentManagerState';\n\n function normalizeDocumentInfo(document) {\n if (!document || typeof document !== 'object') {\n return null;\n }\n\n return {\n documentId: document.documentId || document.DocumentId || '',\n fileName: document.fileName || document.FileName || '',\n fileSize: document.fileSize || document.FileSize || 0\n };\n }\n\n function formatFileSize(bytes) {\n if (!bytes || bytes < 1024) {\n return (bytes || 0) + ' B';\n }\n\n if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(1) + ' KB';\n }\n\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n\n function getDocumentKey(fileName, fileSize) {\n return ((fileName || '').trim().toLowerCase()) + '::' + (fileSize || 0);\n }\n\n function isDuplicateFile(file, knownKeys) {\n return knownKeys.has(getDocumentKey(file.name, file.size));\n }\n\n function getDocumentsFromDom(container) {\n if (!container) {\n return [];\n }\n\n return Array.from(container.querySelectorAll('[data-chat-document-id]'))\n .map(element => normalizeDocumentInfo({\n documentId: element.dataset.chatDocumentId,\n fileName: element.dataset.chatDocumentName,\n fileSize: Number(element.dataset.chatDocumentSize || 0)\n }))\n .filter(document => document && document.documentId);\n }\n\n function initialize(config) {\n if (!config || !config.itemId) {\n return;\n }\n\n const fileInput = document.getElementById('chat-doc-upload');\n const documentsList = document.getElementById('chat-documents-list');\n const status = document.getElementById('chat-doc-upload-status');\n const progressContainer = document.getElementById('chat-doc-upload-progress');\n const progressBar = document.getElementById('chat-doc-upload-progress-bar');\n const uploadQueue = document.getElementById('chat-doc-upload-queue');\n\n if (!fileInput || !documentsList || !status || !progressContainer || !progressBar || !uploadQueue) {\n return;\n }\n\n const previousState = fileInput[managerStateKey];\n if (previousState && typeof previousState.dispose === 'function') {\n previousState.dispose();\n }\n\n let interactionDocuments = (Array.isArray(config.existingDocuments) ? config.existingDocuments : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n if (interactionDocuments.length === 0) {\n interactionDocuments = getDocumentsFromDom(documentsList);\n }\n\n let uploadItems = [];\n let isUploadingDocuments = false;\n\n function createTextElement(tagName, className, text) {\n const element = document.createElement(tagName);\n if (className) {\n element.className = className;\n }\n\n element.textContent = text;\n return element;\n }\n\n function renderDocuments() {\n documentsList.innerHTML = '';\n\n if (interactionDocuments.length === 0) {\n documentsList.appendChild(createTextElement('div', 'text-muted small', 'No documents uploaded yet.'));\n return;\n }\n\n interactionDocuments.forEach(documentInfo => {\n const row = window.document.createElement('div');\n row.className = 'd-flex align-items-center gap-2 border rounded px-2 py-2 bg-white chat-document-row';\n row.dataset.chatDocumentId = documentInfo.documentId;\n row.dataset.chatDocumentName = documentInfo.fileName;\n row.dataset.chatDocumentSize = documentInfo.fileSize;\n\n const actions = window.document.createElement('div');\n actions.className = 'd-flex gap-1';\n\n const downloadBaseUrl = config.downloadDocumentBaseUrl || '/ai/documents/';\n const downloadLink = createTextElement('a', 'btn btn-sm btn-outline-secondary', '');\n downloadLink.title = 'Download';\n downloadLink.href = downloadBaseUrl + encodeURIComponent(documentInfo.documentId) + '/download';\n const downloadIcon = window.document.createElement('i');\n downloadIcon.className = 'fa-solid fa-download';\n downloadLink.appendChild(downloadIcon);\n\n const removeButton = createTextElement('button', 'btn btn-sm btn-outline-danger remove-chat-document-btn', '');\n removeButton.type = 'button';\n removeButton.title = 'Remove';\n removeButton.dataset.documentId = documentInfo.documentId;\n const removeIcon = window.document.createElement('i');\n removeIcon.className = 'fa-solid fa-trash';\n removeButton.appendChild(removeIcon);\n removeButton.addEventListener('click', () => removeDocument(documentInfo.documentId));\n\n actions.appendChild(downloadLink);\n actions.appendChild(removeButton);\n\n const details = window.document.createElement('div');\n details.className = 'min-w-0';\n\n const name = createTextElement('div', 'fw-semibold small text-truncate', documentInfo.fileName || 'Document');\n const icon = window.document.createElement('i');\n icon.className = 'fa-solid fa-file-lines me-1';\n name.prepend(icon);\n\n const size = createTextElement('div', 'text-muted small', formatFileSize(documentInfo.fileSize));\n\n details.appendChild(name);\n details.appendChild(size);\n\n row.appendChild(actions);\n row.appendChild(details);\n documentsList.appendChild(row);\n });\n }\n\n function showUploadStatus(message, cssClass) {\n if (!message) {\n status.textContent = '';\n status.className = 'small mt-2 d-none';\n return;\n }\n\n status.textContent = message;\n status.className = 'small mt-2 ' + (cssClass || 'text-muted');\n }\n\n function showUploadProgress(progress, message, cssClass) {\n if (progress === null || progress === undefined) {\n progressContainer.className = 'progress mt-2 d-none';\n progressContainer.setAttribute('aria-valuenow', '0');\n progressBar.className = 'progress-bar progress-bar-striped progress-bar-animated';\n progressBar.style.width = '0%';\n progressBar.textContent = '0%';\n return;\n }\n\n const roundedProgress = Math.max(0, Math.min(100, Math.round(progress)));\n progressContainer.className = 'progress mt-2';\n progressContainer.setAttribute('aria-valuenow', roundedProgress.toString());\n progressBar.className = 'progress-bar ' + (cssClass || 'progress-bar-striped progress-bar-animated');\n progressBar.style.width = roundedProgress + '%';\n progressBar.textContent = message || (roundedProgress + '%');\n }\n\n function getUploadStatePresentation(state) {\n switch (state) {\n case 'uploaded':\n return { label: 'Uploaded', badgeClass: 'text-bg-success', progressClass: 'bg-success' };\n case 'failed':\n return { label: 'Failed', badgeClass: 'text-bg-danger', progressClass: 'bg-danger' };\n case 'uploading':\n return { label: 'Uploading', badgeClass: 'text-bg-warning', progressClass: 'bg-warning progress-bar-striped progress-bar-animated' };\n default:\n return { label: 'Queued', badgeClass: 'text-bg-secondary', progressClass: 'bg-secondary progress-bar-striped progress-bar-animated' };\n }\n }\n\n function formatUploadMessage(item) {\n if (item.status === 'failed' && item.error) {\n return item.error;\n }\n\n if (item.status === 'uploaded') {\n return 'Upload completed successfully.';\n }\n\n if (item.status === 'uploading') {\n return item.progress + '% uploaded';\n }\n\n return 'Waiting to upload...';\n }\n\n function renderUploadQueue() {\n uploadQueue.innerHTML = '';\n\n uploadItems.forEach(item => {\n const presentation = getUploadStatePresentation(item.status);\n const card = document.createElement('div');\n card.className = 'border rounded px-2 py-2 bg-white';\n\n const header = document.createElement('div');\n header.className = 'd-flex justify-content-between align-items-start gap-2';\n\n const fileDetails = document.createElement('div');\n fileDetails.className = 'flex-grow-1 min-w-0';\n fileDetails.appendChild(createTextElement('div', 'fw-semibold small', item.fileName));\n fileDetails.appendChild(createTextElement('div', 'text-muted small', formatFileSize(item.fileSize)));\n\n const badge = createTextElement('span', 'badge ' + presentation.badgeClass, presentation.label);\n\n header.appendChild(fileDetails);\n header.appendChild(badge);\n\n const progress = document.createElement('div');\n progress.className = 'progress mt-2';\n progress.setAttribute('role', 'progressbar');\n progress.setAttribute('aria-valuemin', '0');\n progress.setAttribute('aria-valuemax', '100');\n progress.setAttribute('aria-valuenow', item.progress.toString());\n\n const progressState = document.createElement('div');\n progressState.className = 'progress-bar ' + presentation.progressClass;\n progressState.style.width = item.progress + '%';\n progressState.textContent = item.progress + '%';\n progress.appendChild(progressState);\n\n const message = createTextElement('div', item.status === 'failed' ? 'small text-danger mt-2' : 'small text-muted mt-2', formatUploadMessage(item));\n\n card.appendChild(header);\n card.appendChild(progress);\n card.appendChild(message);\n uploadQueue.appendChild(card);\n });\n }\n\n function createUploadItem(file, index) {\n return {\n id: file.name + '::' + file.size + '::' + file.lastModified + '::' + index + '::' + Date.now(),\n fileName: file.name,\n fileSize: file.size,\n status: 'queued',\n progress: 0,\n error: null\n };\n }\n\n function updateUploadItem(itemId, updates) {\n uploadItems = uploadItems.map(item => item.id === itemId ? Object.assign({}, item, updates) : item);\n renderUploadQueue();\n }\n\n function removeUploadItems(predicate) {\n uploadItems = uploadItems.filter(item => !predicate(item));\n renderUploadQueue();\n }\n\n function uploadSingleDocument(file, itemIdToUpdate, fileIndex, totalFiles) {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('chatInteractionId', config.itemId);\n formData.append('files', file);\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', config.uploadDocumentUrl, true);\n\n xhr.upload.addEventListener('progress', event => {\n if (!event.lengthComputable) {\n return;\n }\n\n const fileProgress = Math.round((event.loaded / event.total) * 100);\n updateUploadItem(itemIdToUpdate, {\n status: 'uploading',\n progress: fileProgress\n });\n\n const overallProgress = ((fileIndex + (event.loaded / event.total)) / totalFiles) * 100;\n showUploadProgress(overallProgress, 'Uploading ' + (fileIndex + 1) + ' of ' + totalFiles, 'progress-bar-striped progress-bar-animated');\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch (error) {\n reject(new Error('Upload failed: invalid server response.'));\n }\n\n return;\n }\n\n reject(new Error((xhr.responseText || 'Upload failed.').trim()));\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Upload failed. Please check your connection and try again.'));\n });\n\n xhr.send(formData);\n });\n }\n\n async function uploadDocuments(files) {\n if (!config.uploadDocumentUrl || !files || files.length === 0) {\n return;\n }\n\n if (isUploadingDocuments) {\n showUploadStatus('A document upload is already in progress.', 'text-warning');\n return;\n }\n\n isUploadingDocuments = true;\n\n const filesToUpload = [];\n const duplicateItems = [];\n const knownDocumentKeys = new Set(interactionDocuments.map(document => getDocumentKey(document.fileName, document.fileSize)));\n\n Array.from(files).forEach(file => {\n if (isDuplicateFile(file, knownDocumentKeys)) {\n duplicateItems.push(file);\n return;\n }\n\n knownDocumentKeys.add(getDocumentKey(file.name, file.size));\n filesToUpload.push(file);\n });\n\n if (duplicateItems.length > 0) {\n uploadItems = uploadItems.concat(duplicateItems.map((file, index) => Object.assign(createUploadItem(file, index), {\n status: 'failed',\n progress: 100,\n error: 'This document is already attached.'\n })));\n renderUploadQueue();\n }\n\n if (filesToUpload.length === 0) {\n isUploadingDocuments = false;\n showUploadStatus(duplicateItems.map(file => file.name + ': This document is already attached.').join(' | '), 'text-warning');\n showUploadProgress(null);\n return;\n }\n\n const pendingItems = filesToUpload.map(createUploadItem);\n uploadItems = uploadItems.concat(pendingItems);\n renderUploadQueue();\n showUploadProgress(0, 'Preparing upload...', 'progress-bar-striped progress-bar-animated');\n fileInput.disabled = true;\n\n try {\n let uploadedCount = 0;\n const failedUploads = duplicateItems.map(file => file.name + ': This document is already attached.');\n\n for (let i = 0; i < filesToUpload.length; i++) {\n const file = filesToUpload[i];\n const pendingItem = pendingItems[i];\n\n updateUploadItem(pendingItem.id, {\n status: 'uploading',\n progress: 0,\n error: null\n });\n\n showUploadStatus('Uploading ' + (i + 1) + ' of ' + filesToUpload.length + ' document(s)...', 'text-warning');\n\n try {\n const result = await uploadSingleDocument(file, pendingItem.id, i, filesToUpload.length);\n const uploaded = (Array.isArray(result.uploaded) ? result.uploaded : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n const failed = Array.isArray(result.failed) ? result.failed : [];\n\n if (uploaded.length > 0) {\n uploadedCount += uploaded.length;\n interactionDocuments = interactionDocuments.concat(uploaded);\n updateUploadItem(pendingItem.id, {\n status: 'uploaded',\n progress: 100,\n error: null\n });\n } else {\n const missingUploadMessage = failed.length > 0\n ? failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ')\n : 'The server did not confirm that the file was uploaded.';\n if (failed.length === 0) {\n failedUploads.push(missingUploadMessage);\n }\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: missingUploadMessage\n });\n }\n\n if (failed.length > 0) {\n const failedMessage = failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ');\n failedUploads.push(failedMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: failedMessage\n });\n }\n } catch (error) {\n const errorMessage = error && error.message\n ? error.message\n : 'Upload failed. Please try again.';\n console.error('Upload failed:', error);\n failedUploads.push(file.name + ': ' + errorMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: pendingItem.progress || 0,\n error: errorMessage\n });\n }\n }\n\n renderDocuments();\n\n if (failedUploads.length > 0) {\n removeUploadItems(item => item.status === 'uploaded');\n showUploadStatus(\n (uploadedCount > 0 ? ('Uploaded ' + uploadedCount + ' document(s). ') : '') + failedUploads.join(' | '),\n uploadedCount > 0 ? 'text-warning' : 'text-danger');\n showUploadProgress(null);\n return;\n }\n\n removeUploadItems(() => true);\n showUploadStatus('Uploaded ' + uploadedCount + ' document(s).', 'text-success');\n showUploadProgress(null);\n } catch (error) {\n console.error('Upload failed:', error);\n showUploadStatus('Upload failed. Please try again.', 'text-danger');\n showUploadProgress(null);\n } finally {\n isUploadingDocuments = false;\n fileInput.disabled = false;\n fileInput.value = '';\n }\n }\n\n async function removeDocument(documentId) {\n if (!config.removeDocumentUrl || !documentId || !window.confirm('Remove this document?')) {\n return;\n }\n\n try {\n const response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n itemId: config.itemId,\n documentId: documentId\n })\n });\n\n if (!response.ok) {\n console.error('Failed to remove document:', await response.text());\n showUploadStatus('Failed to remove document.', 'text-danger');\n return;\n }\n\n if ((response.headers.get('content-type') || '').toLowerCase().indexOf('json') < 0) {\n console.error('Remove document: response was not JSON.', { status: response.status, redirected: response.redirected });\n showUploadStatus(response.redirected\n ? 'You may not be signed in, or you do not have permission for this. Please reload and try again.'\n : 'Failed to remove document.', 'text-danger');\n\n return;\n }\n\n const result = await response.json();\n const serverDocuments = (Array.isArray(result.documents) ? result.documents : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n interactionDocuments = serverDocuments.length > 0\n ? serverDocuments\n : interactionDocuments.filter(document => document.documentId !== documentId);\n renderDocuments();\n showUploadStatus('Document removed.', 'text-success');\n } catch (error) {\n console.error('Remove failed:', error);\n showUploadStatus('Failed to remove document.', 'text-danger');\n }\n }\n\n const onFileInputChange = event => {\n const selectedFiles = event.target.files ? Array.from(event.target.files) : [];\n uploadDocuments(selectedFiles);\n };\n\n fileInput.addEventListener('change', onFileInputChange);\n fileInput[managerStateKey] = {\n dispose: () => {\n fileInput.removeEventListener('change', onFileInputChange);\n }\n };\n\n renderDocuments();\n renderUploadQueue();\n showUploadStatus(null);\n showUploadProgress(null);\n\n return fileInput[managerStateKey];\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = element.getAttribute(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 initializeFromElement(element) {\n if (!element || element.dataset.chatInteractionDocumentManagerInitialized === 'true') {\n return element ? element[managerStateKey] || null : null;\n }\n\n const config = parseJsonAttribute(element, 'data-chat-interaction-document-manager-config', 'chat interaction document manager config');\n if (!config) {\n return null;\n }\n\n const state = initialize(config);\n if (!state) {\n return null;\n }\n\n element.dataset.chatInteractionDocumentManagerInitialized = 'true';\n\n return state;\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('[data-chat-interaction-document-manager-config]')) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll('[data-chat-interaction-document-manager-config]').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 };\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"]}
|