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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["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","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","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","toggleConversationMode","stopConversationMode","startConversationMode","_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","stop","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","nextElementSibling","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","realtimeEnabled","selectors","realtimeButton","sendButton","deploymentSelect","deploymentSelectElementSelector","onActivate","onDeactivate","onEnterRealtimeMode","isActive","onUserTurnPending","onUserTurnDropped","dropped","setupRealtimeVoicePicker","realtimeVoicesUrl","voiceSelect","voiceGroup","realtimeVoiceGroupElementSelector","capable","savedVoiceId","isRealtimeDeployment","loadVoices","_loadVoices","_callee4","deploymentName","realtime","response","result","grouped","_iterator9","_step9","_t2","_context4","fetch","encodeURIComponent","credentials","headers","ok","voices","gender","has","localeCompare","optgroup","option","selected","appendChild","self","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","active","_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 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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else if (this._conversationAssistantMessage) {\n // Realtime: the user's transcript lags the assistant's reply for the SAME turn (the\n // model answers the audio before speech-to-text finishes). Insert the user message\n // just before the streaming assistant message so the order stays You -> Assistant,\n // and keep that message streaming — ending it here split one reply into two bubbles.\n 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 // 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 toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\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 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 selectors: {\n realtimeButton: config.realtimeButtonElementSelector,\n input: config.inputElementSelector,\n sendButton: config.sendButtonElementSelector,\n micButton: config.micButtonElementSelector,\n conversationButton: config.conversationButtonElementSelector,\n deploymentSelect: config.deploymentSelectElementSelector\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 },\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 deploymentSelect = config.deploymentSelectElementSelector ? document.querySelector(config.deploymentSelectElementSelector) : null;\n var capable = (config.realtimeCapableDeployments || []).map(function (n) { return (n || '').toLowerCase(); });\n var savedVoiceId = config.realtimeVoiceName || '';\n\n function isRealtimeDeployment(name) {\n return name && capable.indexOf(name.toLowerCase()) !== -1;\n }\n\n async function loadVoices() {\n var deploymentName = deploymentSelect ? deploymentSelect.value : '';\n var realtime = isRealtimeDeployment(deploymentName);\n if (voiceGroup) {\n voiceGroup.classList.toggle('d-none', !realtime);\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 (deploymentSelect) {\n deploymentSelect.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 if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else if (this._conversationAssistantMessage) {\n // Realtime: the user's transcript lags the assistant's reply for the SAME turn (the\n // model answers the audio before speech-to-text finishes). Insert the user message\n // just before the streaming assistant message so the order stays You -> Assistant,\n // and keep that message streaming — ending it here split one reply into two bubbles.\n 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"]}