From 3796c94bad989f82d16594b5202e8adb51b979a4 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Wed, 13 May 2026 10:59:37 +0200 Subject: [PATCH 1/7] ci: validate model naming convention (#22680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci: validate model naming convention * bring back dedicated ec workflow * add missing jobs --------- Co-authored-by: Sigbjørn Skjæret --- .github/workflows/code-style.yml | 51 ++++++++++++++++++++++++++++++ .github/workflows/editorconfig.yml | 5 --- 2 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/code-style.yml diff --git a/.github/workflows/code-style.yml b/.github/workflows/code-style.yml new file mode 100644 index 00000000000..c88396c0a7d --- /dev/null +++ b/.github/workflows/code-style.yml @@ -0,0 +1,51 @@ +name: Code Style Checker + +on: + workflow_dispatch: # allows manual triggering + push: + branches: + - master + pull_request: + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} + cancel-in-progress: true + +jobs: + model-naming: + runs-on: ubuntu-slim + steps: + - uses: actions/checkout@v6 + - name: Check model naming conventions + run: | + python3 - << 'EOF' + import re, os, sys + + pairs = re.findall( + r'case\s+(LLM_ARCH_\w+)\s*:\s*\n\s+return new (llama_model_\w+)\s*\(', + open("src/llama-model.cpp").read()) + + errors = [] + for arch, cls in pairs: + suffix = arch[len("LLM_ARCH_"):] + csuffix = cls[len("llama_model_"):] + fname = csuffix.replace("_", "-") + ".cpp" + + if not re.fullmatch(r'[A-Z][A-Z0-9_]*', suffix): + errors.append(f"{arch}: suffix not upper snake case, example: LLM_ARCH_MY_MODEL") + + if not re.fullmatch(r'[a-z][a-z0-9_]*', csuffix): + errors.append(f"{arch}: class suffix not lower snake case, example: llama_model_my_model") + + elif suffix.lower() != csuffix: + errors.append(f"{arch}: arch/class name mismatch, expected class 'llama_model_{suffix.lower()}' but got '{cls}'") + + elif not os.path.isfile(f"src/models/{fname}"): + errors.append(f"{arch}: expects model file name to be src/models/{fname}, but not found") + + if errors: + print('\n'.join(f" - {e}" for e in errors)); sys.exit(1) + print(f"OK: {len(pairs)} mappings validated.") + EOF diff --git a/.github/workflows/editorconfig.yml b/.github/workflows/editorconfig.yml index a2d4d0a3a78..53f6a0ccfda 100644 --- a/.github/workflows/editorconfig.yml +++ b/.github/workflows/editorconfig.yml @@ -2,11 +2,6 @@ name: EditorConfig Checker on: workflow_dispatch: # allows manual triggering - inputs: - create_release: - description: 'Create new release' - required: true - type: boolean push: branches: - master From 5d44db60089b0381cdbf7c45ce9ded43fc0c7f4c Mon Sep 17 00:00:00 2001 From: Pascal Date: Wed, 13 May 2026 11:09:51 +0200 Subject: [PATCH 2/7] server, webui: support continue generation on reasoning models (#22727) * server, webui : support continue generation on reasoning models (#22727) Remove the throw blocking assistant prefill on reasoning models and orchestrate thinking tags around the prefilled message so the parser routes the next stream chunks correctly. WebUI drops the reasoning guard on the Continue button, sends reasoning_content with the prefilled message and persists partial reasoning on stop so the CoT survives reload and resume. Scope : templates with a simple thinking_start_tag / thinking_end_tag pair. Channel-based templates like GPT-OSS are out of scope, pending a per-template prefill API in common/chat. First step toward #21754. * chore: update webui build output * server: reject reasoning prefill on channel based templates --- tools/server/public/bundle.js | 317 +++++++++--------- tools/server/server-common.cpp | 47 ++- .../ChatMessageAssistant.svelte | 3 +- .../src/lib/constants/settings-registry.ts | 2 +- .../webui/src/lib/stores/chat.svelte.ts | 72 ++-- 5 files changed, 249 insertions(+), 192 deletions(-) diff --git a/tools/server/public/bundle.js b/tools/server/public/bundle.js index 97013850822..8c902da9db7 100644 --- a/tools/server/public/bundle.js +++ b/tools/server/public/bundle.js @@ -1371,15 +1371,15 @@ type:SettingsFieldType.SELECT,section:SETTINGS_SECTION_SLUGS.GENERAL,options:COL behave.",defaultValue:"",type:SettingsFieldType.TEXTAREA,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.SYSTEM_MESSAGE,paramType:SyncableParameterType.STRING}},{key:SETTINGS_KEYS.PASTE_LONG_TEXT_TO_FILE_LEN,label:"Paste long text to file length",help:"On pasting long text, it will be converted to a file. You can control the file length by setting the value of this parameter. Value 0 means disable.",defaultValue:2500,type:SettingsFieldType.INPUT,section:SETTINGS_SECTION_SLUGS. GENERAL,sync:{serverKey:SETTINGS_KEYS.PASTE_LONG_TEXT_TO_FILE_LEN,paramType:SyncableParameterType.NUMBER}},{key:SETTINGS_KEYS.SEND_ON_ENTER,label:"Send message on Enter",help:"Use Enter to send messages and Shift + Enter for new lines. When disabled, use Ctrl/Cmd + Enter.",defaultValue:!0,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.SEND_ON_ENTER,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT, label:"Copy text attachments as plain text",help:"When copying a message with text attachments, combine them into a single plain text string instead of a special format that can be pasted back as attachments.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION,label:'Enable "Continue" button',help:'Enable "Co\ -ntinue" button for assistant messages. Currently works only with non-reasoning models.',defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,isExperimental:!0,sync:{serverKey:SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.PDF_AS_IMAGE,label:"Parse PDF as image",help:"Parse PDF as image instead of text. Automatically falls back to text processing for non-vision models.",defaultValue:!1,type:SettingsFieldType. -CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.PDF_AS_IMAGE,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION,label:"Ask for confirmation before changing conversation title",help:"Ask for confirmation before automatically changing conversation title when editing the first message.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION,paramType:SyncableParameterType. -BOOLEAN}},{key:SETTINGS_KEYS.TITLE_GENERATION_USE_FIRST_LINE,label:"Use first non-empty line for conversation title",help:"Use only the first non-empty line of the prompt to generate the conversation title.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.TITLE_GENERATION_USE_FIRST_LINE,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.TITLE_GENERATION_USE_LLM,label:"Use LLM to generate conversation title",help:"Use \ -the LLM to automatically generate conversation titles based on the first message exchange.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,isExperimental:!0},{key:SETTINGS_KEYS.TITLE_GENERATION_PROMPT,label:"LLM title generation prompt",help:"Optional template for the title generation prompt. Use {{USER}} for the user message and {{ASSISTANT}} for the assistant message.",defaultValue:TITLE_GENERATION.DEFAULT_PROMPT,type:SettingsFieldType.TEXTAREA,section:SETTINGS_SECTION_SLUGS. -GENERAL}]},[SETTINGS_SECTION_SLUGS.DISPLAY]:{title:SETTINGS_SECTION_TITLES.DISPLAY,slug:SETTINGS_SECTION_SLUGS.DISPLAY,icon:Monitor,settings:[{key:SETTINGS_KEYS.SHOW_MESSAGE_STATS,label:"Show message generation statistics",help:"Display generation statistics (tokens/second, token count, duration) below each assistant message.",defaultValue:!0,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_MESSAGE_STATS,paramType:SyncableParameterType.BOOLEAN}}, -{key:SETTINGS_KEYS.SHOW_THOUGHT_IN_PROGRESS,label:"Show thought in progress",help:"Expand thought process by default when generating messages.",defaultValue:!0,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_THOUGHT_IN_PROGRESS,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS,label:"Show tool call in progress",help:"Automatically expand tool call details while executing and keep them expanded after c\ -ompletion.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.KEEP_STATS_VISIBLE,label:"Keep stats visible after generation",help:"Keep processing statistics visible after generation finishes.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.KEEP_STATS_VISIBLE,paramType:SyncableParameterType. -BOOLEAN}},{key:SETTINGS_KEYS.AUTO_MIC_ON_EMPTY,label:"Show microphone on empty input",help:"Automatically show microphone button instead of send button when textarea is empty for models with audio modality support.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,isExperimental:!0,sync:{serverKey:SETTINGS_KEYS.AUTO_MIC_ON_EMPTY,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN,label:"Render user content as Markdown", -help:"Render user messages using markdown formatting in the chat.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS,label:"Use full height code blocks",help:"Always display code blocks at their full natural height, overriding any height limits.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS. +ntinue" button for assistant messages, including reasoning models.',defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,isExperimental:!0,sync:{serverKey:SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.PDF_AS_IMAGE,label:"Parse PDF as image",help:"Parse PDF as image instead of text. Automatically falls back to text processing for non-vision models.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS. +GENERAL,sync:{serverKey:SETTINGS_KEYS.PDF_AS_IMAGE,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION,label:"Ask for confirmation before changing conversation title",help:"Ask for confirmation before automatically changing conversation title when editing the first message.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS. +TITLE_GENERATION_USE_FIRST_LINE,label:"Use first non-empty line for conversation title",help:"Use only the first non-empty line of the prompt to generate the conversation title.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,sync:{serverKey:SETTINGS_KEYS.TITLE_GENERATION_USE_FIRST_LINE,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.TITLE_GENERATION_USE_LLM,label:"Use LLM to generate conversation title",help:"Use the LLM to automatically gene\ +rate conversation titles based on the first message exchange.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.GENERAL,isExperimental:!0},{key:SETTINGS_KEYS.TITLE_GENERATION_PROMPT,label:"LLM title generation prompt",help:"Optional template for the title generation prompt. Use {{USER}} for the user message and {{ASSISTANT}} for the assistant message.",defaultValue:TITLE_GENERATION.DEFAULT_PROMPT,type:SettingsFieldType.TEXTAREA,section:SETTINGS_SECTION_SLUGS.GENERAL}]}, +[SETTINGS_SECTION_SLUGS.DISPLAY]:{title:SETTINGS_SECTION_TITLES.DISPLAY,slug:SETTINGS_SECTION_SLUGS.DISPLAY,icon:Monitor,settings:[{key:SETTINGS_KEYS.SHOW_MESSAGE_STATS,label:"Show message generation statistics",help:"Display generation statistics (tokens/second, token count, duration) below each assistant message.",defaultValue:!0,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_MESSAGE_STATS,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS. +SHOW_THOUGHT_IN_PROGRESS,label:"Show thought in progress",help:"Expand thought process by default when generating messages.",defaultValue:!0,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_THOUGHT_IN_PROGRESS,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS,label:"Show tool call in progress",help:"Automatically expand tool call details while executing and keep them expanded after completion.",defaultValue:!1, +type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.KEEP_STATS_VISIBLE,label:"Keep stats visible after generation",help:"Keep processing statistics visible after generation finishes.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.KEEP_STATS_VISIBLE,paramType:SyncableParameterType.BOOLEAN}},{ +key:SETTINGS_KEYS.AUTO_MIC_ON_EMPTY,label:"Show microphone on empty input",help:"Automatically show microphone button instead of send button when textarea is empty for models with audio modality support.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,isExperimental:!0,sync:{serverKey:SETTINGS_KEYS.AUTO_MIC_ON_EMPTY,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN,label:"Render user content as Markdown",help:"Ren\ +der user messages using markdown formatting in the chat.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS,label:"Use full height code blocks",help:"Always display code blocks at their full natural height, overriding any height limits.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS. DISPLAY,sync:{serverKey:SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.DISABLE_AUTO_SCROLL,label:"Disable automatic scroll",help:"Disable automatic scrolling while messages stream so you can control the viewport position manually.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.DISABLE_AUTO_SCROLL,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.ALWAYS_SHOW_SIDEBAR_ON_DESKTOP, label:"Always show sidebar on desktop",help:"Always keep the sidebar visible on desktop instead of auto-hiding it.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.ALWAYS_SHOW_SIDEBAR_ON_DESKTOP,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.SHOW_RAW_MODEL_NAMES,label:"Show raw model names",help:'Display full raw model identifiers (e.g. "ggml-org/GLM-4.7-Flash-GGUF:Q8_0") instead of parsed names with badges.',defaultValue:!1, type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.SHOW_RAW_MODEL_NAMES,paramType:SyncableParameterType.BOOLEAN}},{key:SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS,label:"Always show agentic turns in conversation",help:"Always expand and display agentic loop turns in conversation messages.",defaultValue:!1,type:SettingsFieldType.CHECKBOX,section:SETTINGS_SECTION_SLUGS.DISPLAY,sync:{serverKey:SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS,paramType:SyncableParameterType. @@ -6473,140 +6473,141 @@ id,!1);return}console.error("Failed to send message:",error2),this.setChatLoadin if(isRouterMode()&&!effectiveModel){const conversationModel=this.getConversationModel(allMessages);effectiveModel=selectedModelName()||conversationModel}isRouterMode()&&effectiveModel&&(modelsStore.getModelProps(effectiveModel)||await modelsStore.fetchModelProps(effectiveModel));let currentMessageId=assistantMessage.id,streamedContent="",streamedReasoningContent="",resolvedModel=null,modelPersisted=!1;const convId=assistantMessage.convId,recordModel=(modelName,persistImmediately=!0)=>{if(!modelName) return;const n=normalizeModelName(modelName);if(!n||n===resolvedModel)return;resolvedModel=n;const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{model:n}),persistImmediately&&!modelPersisted&&(modelPersisted=!0,DatabaseService.updateMessage(currentMessageId,{model:n}).catch(()=>{modelPersisted=!1,resolvedModel=null}))},updateStreamingUI=()=>{this.setChatStreaming(convId,streamedContent,currentMessageId);const idx=conversationsStore.findMessageIndex( currentMessageId);conversationsStore.updateMessageAtIndex(idx,{content:streamedContent})},cleanupStreamingState=()=>{this.setStreamingActive(!1),this.setChatLoading(convId,!1),this.clearChatStreaming(convId),this.setProcessingState(convId,null)};this.setStreamingActive(!0),this.setActiveProcessingConversation(convId);const abortController=this.getOrCreateAbortController(convId),streamCallbacks={onChunk:chunk=>{streamedContent+=chunk,updateStreamingUI()},onReasoningChunk:chunk=>{streamedReasoningContent+= -chunk;const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{reasoningContent:streamedReasoningContent})},onToolCallsStreaming:toolCalls=>{const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{toolCalls:JSON.stringify(toolCalls)})},onAttachments:(messageId,extras)=>{if(!extras.length)return;const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const updatedExtras=[...conversationsStore. -activeMessages[idx].extra||[],...extras];conversationsStore.updateMessageAtIndex(idx,{extra:updatedExtras}),DatabaseService.updateMessage(messageId,{extra:updatedExtras}).catch(console.error)},onModel:modelName=>recordModel(modelName),onTurnComplete:intermediateTimings=>{const idx=conversationsStore.findMessageIndex(assistantMessage.id);conversationsStore.updateMessageAtIndex(idx,{timings:intermediateTimings})},onTimings:(timings,promptProgress)=>{const tokensPerSecond=timings?.predicted_ms&&timings?. -predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},convId)},onAssistantTurnComplete:async(content2,reasoningContent,timings,toolCalls)=>{const updateData={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls?JSON.stringify(toolCalls):"", -timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls?JSON.stringify(toolCalls):""};timings&&(uiUpdate.timings=timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex(idx,uiUpdate),await conversationsStore.updateCurrentNode( -currentMessageId)},createToolResultMessage:async(toolCallId,content2,extras)=>{const msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:content2,toolCallId,timestamp:Date.now(),toolCalls:"",children:[],extra:extras},currentMessageId);return conversationsStore.addMessageToActive(msg),await conversationsStore.updateCurrentNode(msg.id),msg},createAssistantMessage:async()=>{streamedContent="",streamedReasoningContent="";const lastMsg=conversationsStore. -activeMessages[conversationsStore.activeMessages.length-1],msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.ASSISTANT,content:"",timestamp:Date.now(),toolCalls:"",children:[],model:resolvedModel},lastMsg.id);return conversationsStore.addMessageToActive(msg),currentMessageId=msg.id,msg},onFlowComplete:finalTimings=>{if(finalTimings){const idx=conversationsStore.findMessageIndex(assistantMessage.id);conversationsStore.updateMessageAtIndex(idx,{timings:finalTimings}), -DatabaseService.updateMessage(assistantMessage.id,{timings:finalTimings}).catch(console.error)}cleanupStreamingState(),onComplete&&onComplete(streamedContent),isRouterMode()&&modelsStore.fetchRouterModels().catch(console.error),config$1().preEncodeConversation&&this.triggerPreEncode(allMessages,assistantMessage,streamedContent,effectiveModel,!!config$1().excludeReasoningFromContext)},onError:error2=>{if(this.setStreamingActive(!1),isAbortError(error2)){cleanupStreamingState();const pending=this. -consumePendingMessage(convId);pending&&this.sendMessage(pending.content,pending.extras);return}console.error("Streaming error:",error2),cleanupStreamingState(),this.clearPendingMessage(convId);const idx=conversationsStore.findMessageIndex(assistantMessage.id);if(idx!==-1){const failedMessage=conversationsStore.removeMessageAtIndex(idx);failedMessage&&DatabaseService.deleteMessage(failedMessage.id).catch(console.error)}const contextInfo=error2.contextInfo;this.showErrorDialog({type:error2.name=== -"TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,message:error2.message,contextInfo}),onError&&onError(error2)}},perChatOverrides=conversationsStore.activeConversation?.mcpServerOverrides;if((await agenticStore.runAgenticFlow({conversationId:convId,messages:allMessages,options:{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{}},callbacks:streamCallbacks,signal:abortController.signal,perChatOverrides})).handled){firstUserMessageContent&&await this.generateTitleWithLLM( -firstUserMessageContent,streamedContent,convId);const pending=agenticStore.consumePendingSteeringMessage(convId);pending&&await this.sendMessage(pending.content,pending.extras);return}await ChatService.sendMessage(allMessages,{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{},stream:!0,onChunk:streamCallbacks.onChunk,onReasoningChunk:streamCallbacks.onReasoningChunk,onModel:streamCallbacks.onModel,onTimings:streamCallbacks.onTimings,onComplete:async(finalContent,reasoningContent,timings,toolCalls)=>{ +chunk,this.setChatStreaming(convId,streamedContent,currentMessageId);const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{reasoningContent:streamedReasoningContent})},onToolCallsStreaming:toolCalls=>{const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{toolCalls:JSON.stringify(toolCalls)})},onAttachments:(messageId,extras)=>{if(!extras.length)return;const idx=conversationsStore.findMessageIndex( +messageId);if(idx===-1)return;const updatedExtras=[...conversationsStore.activeMessages[idx].extra||[],...extras];conversationsStore.updateMessageAtIndex(idx,{extra:updatedExtras}),DatabaseService.updateMessage(messageId,{extra:updatedExtras}).catch(console.error)},onModel:modelName=>recordModel(modelName),onTurnComplete:intermediateTimings=>{const idx=conversationsStore.findMessageIndex(assistantMessage.id);conversationsStore.updateMessageAtIndex(idx,{timings:intermediateTimings})},onTimings:(timings,promptProgress)=>{ +const tokensPerSecond=timings?.predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},convId)},onAssistantTurnComplete:async(content2,reasoningContent,timings,toolCalls)=>{const updateData={content:content2,reasoningContent:reasoningContent|| +void 0,toolCalls:toolCalls?JSON.stringify(toolCalls):"",timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls?JSON.stringify(toolCalls):""};timings&&(uiUpdate.timings=timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex( +idx,uiUpdate),await conversationsStore.updateCurrentNode(currentMessageId)},createToolResultMessage:async(toolCallId,content2,extras)=>{const msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:content2,toolCallId,timestamp:Date.now(),toolCalls:"",children:[],extra:extras},currentMessageId);return conversationsStore.addMessageToActive(msg),await conversationsStore.updateCurrentNode(msg.id),msg},createAssistantMessage:async()=>{streamedContent= +"",streamedReasoningContent="";const lastMsg=conversationsStore.activeMessages[conversationsStore.activeMessages.length-1],msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.ASSISTANT,content:"",timestamp:Date.now(),toolCalls:"",children:[],model:resolvedModel},lastMsg.id);return conversationsStore.addMessageToActive(msg),currentMessageId=msg.id,msg},onFlowComplete:finalTimings=>{if(finalTimings){const idx=conversationsStore.findMessageIndex(assistantMessage. +id);conversationsStore.updateMessageAtIndex(idx,{timings:finalTimings}),DatabaseService.updateMessage(assistantMessage.id,{timings:finalTimings}).catch(console.error)}cleanupStreamingState(),onComplete&&onComplete(streamedContent),isRouterMode()&&modelsStore.fetchRouterModels().catch(console.error),config$1().preEncodeConversation&&this.triggerPreEncode(allMessages,assistantMessage,streamedContent,effectiveModel,!!config$1().excludeReasoningFromContext)},onError:error2=>{if(this.setStreamingActive( +!1),isAbortError(error2)){cleanupStreamingState();const pending=this.consumePendingMessage(convId);pending&&this.sendMessage(pending.content,pending.extras);return}console.error("Streaming error:",error2),cleanupStreamingState(),this.clearPendingMessage(convId);const idx=conversationsStore.findMessageIndex(assistantMessage.id);if(idx!==-1){const failedMessage=conversationsStore.removeMessageAtIndex(idx);failedMessage&&DatabaseService.deleteMessage(failedMessage.id).catch(console.error)}const contextInfo=error2. +contextInfo;this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,message:error2.message,contextInfo}),onError&&onError(error2)}},perChatOverrides=conversationsStore.activeConversation?.mcpServerOverrides;if((await agenticStore.runAgenticFlow({conversationId:convId,messages:allMessages,options:{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{}},callbacks:streamCallbacks,signal:abortController.signal,perChatOverrides})).handled){firstUserMessageContent&& +await this.generateTitleWithLLM(firstUserMessageContent,streamedContent,convId);const pending=agenticStore.consumePendingSteeringMessage(convId);pending&&await this.sendMessage(pending.content,pending.extras);return}await ChatService.sendMessage(allMessages,{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{},stream:!0,onChunk:streamCallbacks.onChunk,onReasoningChunk:streamCallbacks.onReasoningChunk,onModel:streamCallbacks.onModel,onTimings:streamCallbacks.onTimings,onComplete:async(finalContent,reasoningContent,timings,toolCalls)=>{ const content2=streamedContent||finalContent||"",reasoning=streamedReasoningContent||reasoningContent,updateData={content:content2,reasoningContent:reasoning||void 0,toolCalls:toolCalls||"",timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoning||void 0,toolCalls:toolCalls||""};timings&&(uiUpdate.timings= timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex(idx,uiUpdate),await conversationsStore.updateCurrentNode(currentMessageId),cleanupStreamingState(),onComplete&&await onComplete(content2),isRouterMode()&&modelsStore.fetchRouterModels().catch(console.error),firstUserMessageContent&&await this.generateTitleWithLLM(firstUserMessageContent,streamedContent,convId);const pending=this.consumePendingMessage(convId);pending&&await this.sendMessage(pending.content, pending.extras)},onError:streamCallbacks.onError},convId,abortController.signal)}async stopGeneration(){const activeConv=conversationsStore.activeConversation;activeConv&&await this.stopGenerationForChat(activeConv.id)}async stopGenerationForChat(convId){await this.savePartialResponseIfNeeded(convId),this.setStreamingActive(!1),this.abortRequest(convId),this.setChatLoading(convId,!1),this.clearChatStreaming(convId),this.setProcessingState(convId,null),this.clearPendingMessage(convId)}async generateTitleWithLLM(userContent,assistantContent,convId){ const effectiveModel=isRouterMode()&&selectedModelName()?selectedModelName():void 0,configValue=config$1(),titlePrompt=(typeof configValue.titleGenerationPrompt=="string"&&configValue.titleGenerationPrompt.trim()?configValue.titleGenerationPrompt:TITLE_GENERATION.DEFAULT_PROMPT).replace("{{USER}}",String(userContent||"")).replace("{{ASSISTANT}}",String(assistantContent||"")),titleMessage={role:MessageRole.USER,content:titlePrompt},titleResponse=await ChatService.generateTitle(titleMessage,effectiveModel); if(!titleResponse)return;let cleanTitle=titleResponse.trim();if(cleanTitle=cleanTitle.replace(TITLE_GENERATION.PREFIX_PATTERN,"").replace(TITLE_GENERATION.QUOTE_PATTERN,"").trim(),!cleanTitle||cleanTitle.lengthl.trim().length>0);cleanTitle=firstLine?firstLine.trim():TITLE_GENERATION.FALLBACK}cleanTitle&&cleanTitle.length>=TITLE_GENERATION.MIN_LENGTH&&await conversationsStore.updateConversationName(convId,cleanTitle)}async savePartialResponseIfNeeded(convId){const conversationId=convId||conversationsStore.activeConversation?.id;if(!conversationId)return;const streamingState=this.getChatStreaming(conversationId);if(!streamingState||!streamingState.response.trim())return;const messages=conversationId=== -conversationsStore.activeConversation?.id?conversationsStore.activeMessages:await conversationsStore.getConversationMessages(conversationId);if(!messages.length)return;const lastMessage=messages[messages.length-1];if(lastMessage?.role===MessageRole.ASSISTANT)try{const updateData={content:streamingState.response},lastKnownState=this.getProcessingState(conversationId);lastKnownState&&(updateData.timings={prompt_n:lastKnownState.promptTokens||0,prompt_ms:lastKnownState.promptMs,predicted_n:lastKnownState. -tokensDecoded||0,cache_n:lastKnownState.cacheTokens||0,predicted_ms:lastKnownState.tokensPerSecond&&lastKnownState.tokensDecoded?lastKnownState.tokensDecoded/lastKnownState.tokensPerSecond*1e3:void 0}),await DatabaseService.updateMessage(lastMessage.id,updateData),lastMessage.content=streamingState.response,updateData.timings&&(lastMessage.timings=updateData.timings)}catch(error2){lastMessage.content=streamingState.response,console.error("Failed to save partial response:",error2)}}async updateMessage(messageId,newContent){ -const activeConv=conversationsStore.activeConversation;if(!activeConv)return;this.isChatLoadingInternal(activeConv.id)&&await this.stopGeneration();const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:messageToUpdate,index:messageIndex}=result,originalContent=messageToUpdate.content;try{const rootMessage=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=rootMessage&&messageToUpdate. -parent===rootMessage.id;conversationsStore.updateMessageAtIndex(messageIndex,{content:newContent}),await DatabaseService.updateMessage(messageId,{content:newContent}),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine));const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex+1);for(const message of messagesToRemove)await DatabaseService. -deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex+1),conversationsStore.updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const assistantMessage=await this.createAssistantMessage();conversationsStore.addMessageToActive(assistantMessage),await conversationsStore.updateCurrentNode(assistantMessage.id),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage,void 0,()=>{conversationsStore. -updateMessageAtIndex(conversationsStore.findMessageIndex(messageId),{content:originalContent})})}catch(error2){isAbortError(error2)||console.error("Failed to update message:",error2)}}async regenerateMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;this.cancelPreEncode();const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{index:messageIndex}=result;try{const messagesToRemove=conversationsStore. -activeMessages.slice(messageIndex);for(const message of messagesToRemove)await DatabaseService.deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex),conversationsStore.updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const parentMessageId=conversationsStore.activeMessages.length>0?conversationsStore.activeMessages[conversationsStore.activeMessages.length-1].id:void 0,assistantMessage=await this.createAssistantMessage( -parentMessageId);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage)}catch(error2){isAbortError(error2)||console.error("Failed to regenerate message:",error2),this.setChatLoading(activeConv?.id||"",!1)}}async regenerateMessageWithBranching(messageId,modelOverride){const activeConv=conversationsStore.activeConversation;if(!(!activeConv||this.isChatLoadingInternal(activeConv.id))){this.cancelPreEncode(); -try{const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const msg=conversationsStore.activeMessages[idx];if(msg.role!==MessageRole.ASSISTANT)return;const allMessages=await conversationsStore.getConversationMessages(activeConv.id),parentMessage=findMessageById(allMessages,msg.parent);if(!parentMessage)return;this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const newAssistantMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg. -type,timestamp:Date.now(),role:msg.role,content:"",toolCalls:"",children:[],model:null},parentMessage.id);await conversationsStore.updateCurrentNode(newAssistantMessage.id),conversationsStore.updateConversationTimestamp(),await conversationsStore.refreshActiveMessages();const conversationPath=filterByLeafNodeId(allMessages,parentMessage.id,!1),modelToUse=modelOverride||msg.model||void 0;await this.streamChatCompletion(conversationPath,newAssistantMessage,void 0,void 0,modelToUse)}catch(error2){isAbortError( -error2)||console.error("Failed to regenerate message with branching:",error2),this.setChatLoading(activeConv?.id||"",!1)}}}async getDeletionInfo(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv)return{totalCount:0,userMessages:0,assistantMessages:0,messageTypes:[]};const allMessages=await conversationsStore.getConversationMessages(activeConv.id);if(findMessageById(allMessages,messageId)?.role===MessageRole.SYSTEM){const messagesToDelete2=allMessages.filter(m=>m.id=== -messageId);let userMessages2=0,assistantMessages2=0;const messageTypes2=[];for(const msg of messagesToDelete2)msg.role===MessageRole.USER?(userMessages2++,messageTypes2.includes("user message")||messageTypes2.push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages2++,messageTypes2.includes("assistant response")||messageTypes2.push("assistant response"));return{totalCount:1,userMessages:userMessages2,assistantMessages:assistantMessages2,messageTypes:messageTypes2}}const descendants=findDescendantMessages( -allMessages,messageId),allToDelete=[messageId,...descendants],messagesToDelete=allMessages.filter(m=>allToDelete.includes(m.id));let userMessages=0,assistantMessages=0;const messageTypes=[];for(const msg of messagesToDelete)msg.role===MessageRole.USER?(userMessages++,messageTypes.includes("user message")||messageTypes.push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages++,messageTypes.includes("assistant response")||messageTypes.push("assistant response"));return{totalCount:allToDelete. -length,userMessages,assistantMessages,messageTypes}}async deleteMessage(messageId){const activeConv=conversationsStore.activeConversation;if(activeConv)try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),messageToDelete=findMessageById(allMessages,messageId);if(!messageToDelete)return;if(filterByLeafNodeId(allMessages,activeConv.currNode||"",!1).some(m=>m.id===messageId)&&messageToDelete.parent){const siblings2=allMessages.filter(m=>m.parent===messageToDelete.parent&& -m.id!==messageId);if(siblings2.length>0){const latestSibling=siblings2.reduce((latest,sibling2)=>sibling2.timestamp>latest.timestamp?sibling2:latest);await conversationsStore.updateCurrentNode(findLeafNode(allMessages,latestSibling.id))}else messageToDelete.parent&&await conversationsStore.updateCurrentNode(findLeafNode(allMessages,messageToDelete.parent))}await DatabaseService.deleteMessageCascading(activeConv.id,messageId),await conversationsStore.refreshActiveMessages(),conversationsStore.updateConversationTimestamp()}catch(error2){ -console.error("Failed to delete message:",error2)}}async continueAssistantMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result;try{this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const allMessages=await conversationsStore.getConversationMessages( -activeConv.id),dbMessage=findMessageById(allMessages,messageId);if(!dbMessage){this.setChatLoading(activeConv.id,!1);return}const originalContent=dbMessage.content,originalReasoning=dbMessage.reasoningContent||"",contextWithContinue=[...conversationsStore.activeMessages.slice(0,idx),{role:MessageRole.ASSISTANT,content:originalContent}];let appendedContent="",appendedReasoning="",hasReceivedContent=!1;const updateStreamingContent=fullContent=>{this.setChatStreaming(msg.convId,fullContent,msg.id), -conversationsStore.updateMessageAtIndex(idx,{content:fullContent})},abortController=this.getOrCreateAbortController(msg.convId);await ChatService.sendMessage(contextWithContinue,{...this.getApiOptions(),onChunk:chunk=>{appendedContent+=chunk,hasReceivedContent=!0,updateStreamingContent(originalContent+appendedContent)},onReasoningChunk:chunk=>{appendedReasoning+=chunk,hasReceivedContent=!0,conversationsStore.updateMessageAtIndex(idx,{reasoningContent:originalReasoning+appendedReasoning})},onTimings:(timings,promptProgress)=>{ -const tokensPerSecond=timings?.predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},msg.convId)},onComplete:async(finalContent,reasoningContent,timings)=>{const finalAppendedContent=hasReceivedContent?appendedContent:finalContent||"",finalAppendedReasoning=hasReceivedContent? -appendedReasoning:reasoningContent||"",fullContent=originalContent+finalAppendedContent,fullReasoning=originalReasoning+finalAppendedReasoning||void 0;await DatabaseService.updateMessage(msg.id,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateMessageAtIndex(idx,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateConversationTimestamp(),this.setChatLoading(msg.convId,!1),this.clearChatStreaming( -msg.convId),this.setProcessingState(msg.convId,null)},onError:async error2=>{if(isAbortError(error2)){hasReceivedContent&&appendedContent&&(await DatabaseService.updateMessage(msg.id,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()}),conversationsStore.updateMessageAtIndex(idx,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()})),this.setChatLoading(msg. -convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null);return}console.error("Continue generation error:",error2),conversationsStore.updateMessageAtIndex(idx,{content:originalContent}),await DatabaseService.updateMessage(msg.id,{content:originalContent}),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null),this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER, -message:error2.message})}},msg.convId,abortController.signal)}catch(error2){isAbortError(error2)||console.error("Failed to continue message:",error2),activeConv&&this.setChatLoading(activeConv.id,!1)}}async editAssistantMessage(messageId,newContent,shouldBranch){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result; -try{if(shouldBranch){const newMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[],model:msg.model},msg.parent);await conversationsStore.updateCurrentNode(newMessage.id)}else await DatabaseService.updateMessage(msg.id,{content:newContent}),conversationsStore.updateMessageAtIndex(idx,{content:newContent});conversationsStore.updateConversationTimestamp(),await conversationsStore. -refreshActiveMessages()}catch(error2){console.error("Failed to edit assistant message:",error2)}}async editUserMessagePreserveResponses(messageId,newContent,newExtras){const activeConv=conversationsStore.activeConversation;if(!activeConv)return;const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:msg,index:idx}=result;try{const updateData={content:newContent};newExtras!==void 0&&(updateData.extra=JSON.parse(JSON.stringify(newExtras))),await DatabaseService. -updateMessage(messageId,updateData),conversationsStore.updateMessageAtIndex(idx,updateData);const rootMessage=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.type==="root"&&m.parent===null);rootMessage&&msg.parent===rootMessage.id&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),conversationsStore.updateConversationTimestamp()}catch(error2){ -console.error("Failed to edit user message:",error2)}}async editMessageWithBranching(messageId,newContent,newExtras){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;let result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(result||(result=this.getMessageByIdWithRole(messageId,MessageRole.SYSTEM)),!result)return;const{message:msg,index:idx}=result;try{const allMessages=await conversationsStore.getConversationMessages( -activeConv.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=msg.role===MessageRole.USER&&rootMessage&&msg.parent===rootMessage.id,extrasToUse=newExtras!==void 0?JSON.parse(JSON.stringify(newExtras)):msg.extra?JSON.parse(JSON.stringify(msg.extra)):void 0;let messageIdForResponse;const dbMsg=findMessageById(allMessages,msg.id);if(dbMsg?dbMsg.children.length>0:msg.children.length>0){const parentId=msg.parent||rootMessage?.id;if(!parentId)return;const newMessage=await DatabaseService. -createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[],extra:extrasToUse,model:msg.model},parentId);await conversationsStore.updateCurrentNode(newMessage.id),messageIdForResponse=newMessage.id}else{const updates={content:newContent,timestamp:Date.now(),extra:extrasToUse};await DatabaseService.updateMessage(msg.id,updates),conversationsStore.updateMessageAtIndex(idx,updates),messageIdForResponse=msg.id}conversationsStore. -updateConversationTimestamp(),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),await conversationsStore.refreshActiveMessages(),msg.role===MessageRole.USER&&await this.generateResponseForMessage(messageIdForResponse)}catch(error2){console.error("Failed to edit message with branching:",error2)}}async generateResponseForMessage(userMessageId){const activeConv=conversationsStore. -activeConversation;if(activeConv){this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),conversationPath=filterByLeafNodeId(allMessages,userMessageId,!1),assistantMessage=await DatabaseService.createMessageBranch({convId:activeConv.id,type:MessageType.TEXT,timestamp:Date.now(),role:MessageRole.ASSISTANT,content:"",toolCalls:"",children:[],model:null},userMessageId); -conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationPath,assistantMessage)}catch(error2){console.error("Failed to generate response:",error2),this.setChatLoading(activeConv.id,!1)}}}getContextTotal(){const activeConvId=this.activeConversationId,activeState=activeConvId?this.getProcessingState(activeConvId):null;if(activeState&&typeof activeState.contextTotal=="number"&&activeState.contextTotal>0)return activeState.contextTotal;if(isRouterMode()){const modelContextSize=selectedModelContextSize(); -if(typeof modelContextSize=="number"&&modelContextSize>0)return modelContextSize}else{const propsContextSize=contextSize();if(typeof propsContextSize=="number"&&propsContextSize>0)return propsContextSize}return null}updateProcessingStateFromTimings(timingData,conversationId){const processingState=this.parseTimingData(timingData);if(processingState===null){console.warn("Failed to parse timing data - skipping update");return}const targetId=conversationId||this.activeConversationId;targetId&&this.setProcessingState( -targetId,processingState)}parseTimingData(timingData){const promptTokens=timingData.prompt_n||0,promptMs=timingData.prompt_ms||void 0,predictedTokens=timingData.predicted_n||0,tokensPerSecond=timingData.predicted_per_second||0,cacheTokens=timingData.cache_n||0,promptProgress=timingData.prompt_progress,contextTotal=this.getContextTotal(),currentConfig=config$1(),outputTokensMax=currentConfig.max_tokens||-1,contextUsed=promptTokens+cacheTokens+predictedTokens,outputTokensUsed=predictedTokens,progressCache=promptProgress?. -cache||0,progressActualDone=(promptProgress?.processed??0)-progressCache,progressActualTotal=(promptProgress?.total??0)-progressCache,progressPercent=promptProgress?Math.round(progressActualDone/progressActualTotal*100):void 0;return{status:predictedTokens>0?"generating":promptProgress?"preparing":"idle",tokensDecoded:predictedTokens,tokensRemaining:outputTokensMax-predictedTokens,contextUsed,contextTotal,outputTokensUsed,outputTokensMax,hasNextToken:predictedTokens>0,tokensPerSecond,temperature:currentConfig. -temperature??.8,topP:currentConfig.top_p??.95,speculative:!1,progressPercent,promptProgress,promptTokens,promptMs,cacheTokens}}restoreProcessingStateFromMessages(messages,conversationId){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.timings){const restoredState=this.parseTimingData({prompt_n:message.timings.prompt_n||0,prompt_ms:message.timings.prompt_ms,predicted_n:message.timings.predicted_n||0,predicted_per_second:message.timings. -predicted_n&&message.timings.predicted_ms?message.timings.predicted_n/message.timings.predicted_ms*1e3:0,cache_n:message.timings.cache_n||0});if(restoredState){this.setProcessingState(conversationId,restoredState);return}}}}getConversationModel(messages){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.model)return message.model}return null}getApiOptions(){const currentConfig=config$1(),hasValue=value=>value!=null&&value!=="",apiOptions={ -stream:!0,timings_per_token:!0};if(isRouterMode()){const modelName=selectedModelName();modelName&&(apiOptions.model=modelName)}return currentConfig.systemMessage&&(apiOptions.systemMessage=currentConfig.systemMessage),currentConfig.disableReasoningParsing&&(apiOptions.disableReasoningParsing=!0),currentConfig.excludeReasoningFromContext&&(apiOptions.excludeReasoningFromContext=!0),hasValue(currentConfig.temperature)&&(apiOptions.temperature=Number(currentConfig.temperature)),hasValue(currentConfig. -max_tokens)&&(apiOptions.max_tokens=Number(currentConfig.max_tokens)),hasValue(currentConfig.dynatemp_range)&&(apiOptions.dynatemp_range=Number(currentConfig.dynatemp_range)),hasValue(currentConfig.dynatemp_exponent)&&(apiOptions.dynatemp_exponent=Number(currentConfig.dynatemp_exponent)),hasValue(currentConfig.top_k)&&(apiOptions.top_k=Number(currentConfig.top_k)),hasValue(currentConfig.top_p)&&(apiOptions.top_p=Number(currentConfig.top_p)),hasValue(currentConfig.min_p)&&(apiOptions.min_p=Number( -currentConfig.min_p)),hasValue(currentConfig.xtc_probability)&&(apiOptions.xtc_probability=Number(currentConfig.xtc_probability)),hasValue(currentConfig.xtc_threshold)&&(apiOptions.xtc_threshold=Number(currentConfig.xtc_threshold)),hasValue(currentConfig.typ_p)&&(apiOptions.typ_p=Number(currentConfig.typ_p)),hasValue(currentConfig.repeat_last_n)&&(apiOptions.repeat_last_n=Number(currentConfig.repeat_last_n)),hasValue(currentConfig.repeat_penalty)&&(apiOptions.repeat_penalty=Number(currentConfig. -repeat_penalty)),hasValue(currentConfig.presence_penalty)&&(apiOptions.presence_penalty=Number(currentConfig.presence_penalty)),hasValue(currentConfig.frequency_penalty)&&(apiOptions.frequency_penalty=Number(currentConfig.frequency_penalty)),hasValue(currentConfig.dry_multiplier)&&(apiOptions.dry_multiplier=Number(currentConfig.dry_multiplier)),hasValue(currentConfig.dry_base)&&(apiOptions.dry_base=Number(currentConfig.dry_base)),hasValue(currentConfig.dry_allowed_length)&&(apiOptions.dry_allowed_length= -Number(currentConfig.dry_allowed_length)),hasValue(currentConfig.dry_penalty_last_n)&&(apiOptions.dry_penalty_last_n=Number(currentConfig.dry_penalty_last_n)),currentConfig.samplers&&(apiOptions.samplers=currentConfig.samplers),apiOptions.backend_sampling=currentConfig.backend_sampling,currentConfig.custom&&(apiOptions.custom=currentConfig.custom),apiOptions}cancelPreEncode(){this.preEncodeAbortController&&(this.preEncodeAbortController.abort(),this.preEncodeAbortController=null)}async triggerPreEncode(allMessages,assistantMessage,assistantContent,model,excludeReasoning){ -this.cancelPreEncode(),this.preEncodeAbortController=new AbortController;const signal=this.preEncodeAbortController.signal;try{if(!await ChatService.areAllSlotsIdle(model,signal)||signal.aborted)return;const messagesWithAssistant=[...allMessages,{...assistantMessage,content:assistantContent}];await ChatService.preEncode(messagesWithAssistant,model,excludeReasoning,signal)}catch(err){isAbortError(err)||console.warn("[ChatStore] Pre-encode failed:",err)}}}const chatStore=new ChatStore,activeProcessingState=()=>chatStore. -activeProcessingState,errorDialog=()=>chatStore.errorDialogState,getAddFilesHandler=()=>chatStore.getAddFilesHandler(),getAllLoadingChats=()=>chatStore.getAllLoadingChats(),isChatStreaming=()=>chatStore.isStreaming(),isEditing=()=>chatStore.isEditing(),isLoading=()=>chatStore.isLoading,pendingEditMessageId=()=>chatStore.pendingEditMessageId,chatPendingMessageContent=convId=>chatStore.pendingMessageContent(convId),chatPendingMessageExtras=convId=>chatStore.pendingMessageExtras(convId),chatClearPendingMessage=convId=>chatStore. -clearPendingMessage(convId),chatInjectPendingMessage=(convId,content2,extras)=>chatStore.injectPendingMessage(convId,content2,extras);var root$1u=from_html('
',1);function ChatForm($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]),className=prop( -$$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),isLoading2=prop($$props,"isLoading",3,!1),placeholder=prop($$props,"placeholder",3,"Type a message..."),showMcpPromptButton=prop($$props,"showMcpPromptButton",3,!1),showAddButton=prop($$props,"showAddButton",3,!0),showModelSelector=prop($$props,"showModelSelector",3,!0),uploadedFiles=prop($$props,"uploadedFiles",31,()=>proxy([])),value=prop($$props,"value",15,""),audioRecorder,chatFormActionsRef=state$1(void 0),fileInputRef=state$1(void 0), -pickersRef=state$1(void 0),textareaRef=state$1(void 0),isRecording=state$1(!1),recordingSupported=state$1(!1),isPromptPickerOpen=state$1(!1),promptSearchQuery=state$1(""),isInlineResourcePickerOpen=state$1(!1),resourceSearchQuery=state$1(""),isResourceDialogOpen=state$1(!1),preSelectedResourceUri=state$1(void 0),currentConfig=user_derived(config$1),pasteLongTextToFileLength=user_derived(()=>{const n=Number(get$3(currentConfig).pasteLongTextToFileLen);return Number.isNaN(n)?Number(SETTING_CONFIG_DEFAULT. -pasteLongTextToFileLen):n}),isRouter=user_derived(isRouterMode),conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),activeModelId=user_derived(()=>{const options=modelOptions();if(!get$3(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId();if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$3(conversationModel)){const model=options.find(m=>m.model===get$3(conversationModel));if(model) -return model.model}return null}),hasModelSelected=user_derived(()=>!get$3(isRouter)||!!get$3(conversationModel)||!!selectedModelId()),hasLoadingAttachments=user_derived(()=>uploadedFiles().some(f=>f.isLoading)),hasAttachments=user_derived(()=>attachments()&&attachments().length>0||uploadedFiles()&&uploadedFiles().length>0),canSubmit=user_derived(()=>value().trim().length>0||get$3(hasAttachments));onMount$1(()=>{set$1(recordingSupported,isAudioRecordingSupported(),!0),audioRecorder=new AudioRecorder}); -function focus2(){get$3(textareaRef)?.focus()}function resetTextareaHeight(){get$3(textareaRef)?.resetHeight()}function openModelSelector(){get$3(chatFormActionsRef)?.openModelSelector()}function checkModelSelected(){return get$3(hasModelSelected)?!0:(get$3(chatFormActionsRef)?.openModelSelector(),!1)}function handleFileSelect(files){$$props.onFilesAdd?.(files)}function handleFileUpload(){get$3(fileInputRef)?.click()}function handleFileRemove(fileId){if(fileId.startsWith("attachment-")){const index2=parseInt( -fileId.replace("attachment-",""),10);!isNaN(index2)&&index2>=0&&index2item.kind==="file").map(item=>item.getAsFile()).filter(file=>file!==null);if(files.length>0){event2.preventDefault(),$$props.onFilesAdd?.(files);return}const text2=event2.clipboardData.getData(MimeTypeText.PLAIN);if(text2.startsWith(CLIPBOARD_CONTENT_QUOTE_PREFIX)){const parsed=parseClipboardContent(text2);if(parsed.textAttachments.length>0||parsed. -mcpPromptAttachments.length>0){if(event2.preventDefault(),value(parsed.message),$$props.onValueChange?.(parsed.message),parsed.textAttachments.length>0){const attachmentFiles=parsed.textAttachments.map(att=>new File([att.content],att.name,{type:MimeTypeText.PLAIN}));$$props.onFilesAdd?.(attachmentFiles)}if(parsed.mcpPromptAttachments.length>0){const mcpPromptFiles=parsed.mcpPromptAttachments.map(att=>({id:uuid$1(),name:att.name,size:att.content.length,type:SpecialFileType.MCP_PROMPT,file:new File( -[att.content],`${att.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN}),isLoading:!1,textContent:att.content,mcpPrompt:{serverName:att.serverName,promptName:att.promptName,arguments:att.arguments}}));uploadedFiles([...uploadedFiles(),...mcpPromptFiles]),$$props.onUploadedFilesChange?.(uploadedFiles())}setTimeout(()=>{get$3(textareaRef)?.focus()},10);return}}if(text2.length>0&&get$3(pasteLongTextToFileLength)>0&&text2.length>get$3(pasteLongTextToFileLength)){event2.preventDefault();const textFile=new File( -[text2],"Pasted",{type:MimeTypeText.PLAIN});$$props.onFilesAdd?.([textFile])}}function handlePromptLoadStart(placeholderId,promptInfo,args){value().startsWith(PROMPT_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"");const promptName=promptInfo.title||promptInfo.name,placeholder2={id:placeholderId,name:promptName,size:INITIAL_FILE_SIZE,type:SpecialFileType.MCP_PROMPT,file:new File([],"loading"),isLoading:!0,mcpPrompt:{serverName:promptInfo. -serverName,promptName:promptInfo.name,arguments:args?{...args}:void 0}};uploadedFiles([...uploadedFiles(),placeholder2]),$$props.onUploadedFilesChange?.(uploadedFiles()),get$3(textareaRef)?.focus()}function handlePromptLoadComplete(placeholderId,result){const promptText=result.messages?.map(msg=>typeof msg.content=="string"?msg.content:msg.content.type===ContentPartType.TEXT?msg.content.text:"").filter(Boolean).join(PROMPT_CONTENT_SEPARATOR);uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId? -{...f,isLoading:!1,textContent:promptText,size:promptText.length,file:new File([promptText],`${f.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN})}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptLoadError(placeholderId,error2){uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,loadError:error2}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptPickerClose(){set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,""), -get$3(textareaRef)?.focus()}function handleInlineResourcePickerClose(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$3(textareaRef)?.focus()}function handleInlineResourceSelect(){value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$3(textareaRef)?.focus()}function handleBrowseResources(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),value().startsWith( -RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isResourceDialogOpen,!0)}async function handleMicClick(){if(!audioRecorder||!get$3(recordingSupported)){console.warn("Audio recording not supported");return}if(get$3(isRecording)){set$1(isRecording,!1);try{const audioBlob=await audioRecorder.stopRecording(),wavBlob=await convertToWav(audioBlob),audioFile=createAudioFile(wavBlob);$$props.onFilesAdd?.([audioFile])}catch(error2){console.error("Failed to stop recording:",error2)}}else -try{await audioRecorder.startRecording(),set$1(isRecording,!0)}catch(error2){console.error("Failed to start recording:",error2)}}var $$exports={focus:focus2,resetTextareaHeight,openModelSelector,checkModelSelected},fragment=root$1u(),node2=first_child(fragment);bind_this(ChatFormFileInputInvisible(node2,{onFileSelect:handleFileSelect}),$$value=>set$1(fileInputRef,$$value,!0),()=>get$3(fileInputRef));var form=sibling(node2,2),node_1=child(form);bind_this(ChatFormPickers(node_1,{get isPromptPickerOpen(){ -return get$3(isPromptPickerOpen)},get promptSearchQuery(){return get$3(promptSearchQuery)},get isInlineResourcePickerOpen(){return get$3(isInlineResourcePickerOpen)},get resourceSearchQuery(){return get$3(resourceSearchQuery)},onPromptPickerClose:handlePromptPickerClose,onInlineResourcePickerClose:handleInlineResourcePickerClose,onInlineResourceSelect:handleInlineResourceSelect,onPromptLoadStart:handlePromptLoadStart,onPromptLoadComplete:handlePromptLoadComplete,onPromptLoadError:handlePromptLoadError, -onInlineResourceBrowse:handleBrowseResources}),$$value=>set$1(pickersRef,$$value,!0),()=>get$3(pickersRef));var div=sibling(node_1,2),node_2=child(div);{let $0=user_derived(()=>get$3(activeModelId)??void 0);ChatAttachmentsList(node_2,{get attachments(){return attachments()},onFileRemove:handleFileRemove,limitToSingleRow:!0,class:"py-5",style:"scroll-padding: 1rem;",get activeModelId(){return get$3($0)},get uploadedFiles(){return uploadedFiles()},set uploadedFiles($$value){uploadedFiles($$value)}})} -var div_1=sibling(node_2,2),node_3=child(div_1);bind_this(ChatFormTextarea(node_3,{class:"px-5 py-1.5 md:pt-0",onKeydown:handleKeydown,onInput:()=>{handleInput(),$$props.onValueChange?.(value())},get disabled(){return disabled()},get placeholder(){return placeholder()},get value(){return value()},set value($$value){value($$value)}}),$$value=>set$1(textareaRef,$$value,!0),()=>get$3(textareaRef));var node_4=sibling(node_3,2);{var consequent=$$anchor2=>{ChatFormMcpResourcesList($$anchor2,{class:"mb\ --3",onResourceClick:uri2=>{set$1(preSelectedResourceUri,uri2,!0),set$1(isResourceDialogOpen,!0)}})},d2=user_derived(()=>mcpHasResourceAttachments());if_block(node_4,$$render=>{get$3(d2)&&$$render(consequent)})}var node_5=sibling(node_4,2);{let $0=user_derived(()=>showMcpPromptButton()?()=>set$1(isPromptPickerOpen,!0):void 0);bind_this(ChatFormActions(node_5,{class:"px-3",get canSend(){return get$3(canSubmit)},get disabled(){return disabled()},get isLoading(){return isLoading2()},get isRecording(){ -return get$3(isRecording)},get showAddButton(){return showAddButton()},get showModelSelector(){return showModelSelector()},get uploadedFiles(){return uploadedFiles()},onFileUpload:handleFileUpload,onMicClick:handleMicClick,get onStop(){return $$props.onStop},onSystemPromptClick:()=>$$props.onSystemPromptClick?.({message:value(),files:uploadedFiles()}),get onMcpPromptClick(){return get$3($0)},onMcpResourcesClick:()=>set$1(isResourceDialogOpen,!0)}),$$value=>set$1(chatFormActionsRef,$$value,!0),()=>get$3( -chatFormActionsRef))}reset(div_1),reset(div),reset(form);var node_6=sibling(form,2);return DialogMcpResourcesBrowser(node_6,{get preSelectedUri(){return get$3(preSelectedResourceUri)},onAttach:resource=>{mcpStore.attachResource(resource.uri)},onOpenChange:newOpen=>{newOpen||set$1(preSelectedResourceUri,void 0)},get open(){return get$3(isResourceDialogOpen)},set open($$value){set$1(isResourceDialogOpen,$$value,!0)}}),template_effect(()=>{set_class(form,1,`relative ${className()??""}`),set_class(div, -1,`${INPUT_CLASSES??""} overflow-hidden rounded-3xl backdrop-blur-md ${disabled()?"cursor-not-allowed opacity-60":""}`)}),event("submit",form,event2=>{event2.preventDefault(),!(!get$3(canSubmit)||disabled()||get$3(hasLoadingAttachments))&&$$props.onSubmit?.()}),event("paste",div_1,handlePaste),append($$anchor,fragment),pop($$exports)}function Dropdown_menu_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref","sideOffset","portalProps","class"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,DropdownMenuPrimitive_Portal)=>{DropdownMenuPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dro\ -pdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:fill-mode-forwards data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=op\ -en]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node_1,()=>Dropdown_menu_content$1,($$anchor4,DropdownMenuPrimitive_Content)=>{DropdownMenuPrimitive_Content($$anchor4,spread_props({"data-slot":"dropdown-menu-content",get sideOffset(){return sideOffset()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_item($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","variant"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disab\ -led]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",$$props.class));component(node2,()=>Menu_item, -($$anchor2,DropdownMenuPrimitive_Item)=>{DropdownMenuPrimitive_Item($$anchor2,spread_props({"data-slot":"dropdown-menu-item",get"data-inset"(){return $$props.inset},get"data-variant"(){return variant()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_separator($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events", -"$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("-mx-1 my-1 h-px bg-border/20",$$props.class));component(node2,()=>Menu_separator,($$anchor2,DropdownMenuPrimitive_Separator)=>{DropdownMenuPrimitive_Separator($$anchor2,spread_props({"data-slot":"dropdown-menu-separator",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_trigger($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Menu_trigger,($$anchor2,DropdownMenuPrimitive_Trigger)=>{DropdownMenuPrimitive_Trigger($$anchor2,spread_props({"data-slot":"dropdown-menu-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_sub_content($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-\ -in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:fill-mode-forwards data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node2,()=>Menu_sub_content,($$anchor2,DropdownMenuPrimitive_SubContent)=>{DropdownMenuPrimitive_SubContent( -$$anchor2,spread_props({"data-slot":"dropdown-menu-sub-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_1$P=from_html(" ",1);function Dropdown_menu_sub_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","children"]);var fragment=comment$2(),node2=first_child(fragment);{ -let $0=user_derived(()=>cn$1("flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",$$props.class));component( -node2,()=>Menu_sub_trigger,($$anchor2,DropdownMenuPrimitive_SubTrigger)=>{DropdownMenuPrimitive_SubTrigger($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-trigger",get"data-inset"(){return $$props.inset},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$P(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_right(node_2, -{class:"ml-auto size-4"}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}const Sub=Menu_sub,Root$4=Menu;function useAttachmentMenu(getFlags,getCallbacks,close2){const modalityFlags=user_derived(getFlags),callbacks=user_derived(()=>{const cbs=getCallbacks(),wrap2=fn=>()=>{close2(),fn?.()};return{[AttachmentAction.FILE_UPLOAD]:wrap2(cbs.onFileUpload),[AttachmentAction.SYSTEM_PROMPT_CLICK]:wrap2(cbs.onSystemPromptClick),[AttachmentAction.MCP_PROMPT_CLICK]:wrap2( -cbs.onMcpPromptClick),[AttachmentAction.MCP_RESOURCES_CLICK]:wrap2(cbs.onMcpResourcesClick)}});function isItemEnabled(enabledWhen){return!enabledWhen||enabledWhen==="always"?!0:!!get$3(modalityFlags)[enabledWhen]}function isItemVisible(visibleWhen){return visibleWhen?!!get$3(modalityFlags)[visibleWhen]:!0}function getSystemMessageTooltip(){return page$1.params.id?"Inject custom system message at the beginning of the conversation":"Add custom system message for a new conversation"}return{get callbacks(){ -return get$3(callbacks)},isItemEnabled,isItemVisible,getSystemMessageTooltip}}var root_6$s=from_html(" ",1),root_10$f=from_html(" ",1),root_11$e=from_html("

"),root_8$r=from_html(" ",1),root_16$6=from_html(" ",1),root_17$8=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_13$d=from_html(" ",1),root_22$2=from_html(" ",1),root_23$5=from_html("

"),root_20$5=from_html( -" ",1),root_26$2=from_html(" ",1),root_3$S=from_html(" ",1),root_1$O=from_html(" ",1),root$1t=from_html("
");function ChatFormActionAddDropdown($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3, -!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),dropdownOpen=state$1(!1);function handleMcpSettingsClick(){set$1(dropdownOpen,!1),$$props.onMcpSettingsClick?.()}const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(),hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props.onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props. -onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(dropdownOpen,!1)});var div=root$1t(),node2=child(div);component(node2,()=>Root$4,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return get$3(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$O(),node_1=first_child(fragment);component(node_1,()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4, -{name:"Attach files",get disabled(){return disabled()},children:($$anchor5,$$slotProps2)=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);snippet(node_2,()=>$$props.trigger,()=>({disabled:disabled()})),append($$anchor5,fragment_1)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Dropdown_menu_content,($$anchor4,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor4,{align:"start",class:"w-48",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_3$S(),node_4=first_child( -fragment_2);each(node_4,17,()=>ATTACHMENT_FILE_ITEMS,item=>item.id,($$anchor6,item)=>{const enabled=user_derived(()=>attachmentMenu.isItemEnabled(get$3(item).enabledWhen));var fragment_3=comment$2(),node_5=first_child(fragment_3);{var consequent=$$anchor7=>{var fragment_4=comment$2(),node_6=first_child(fragment_4);{let $0=user_derived(()=>get$3(item).class??"");component(node_6,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor8,{get class(){return`${get$3($0)??""}\ - flex cursor-pointer items-center gap-2`},onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor9,$$slotProps3)=>{var fragment_5=root_6$s(),node_7=first_child(fragment_5);component(node_7,()=>get$3(item).icon,($$anchor10,item_icon)=>{item_icon($$anchor10,{class:"h-4 w-4"})});var span=sibling(node_7,2),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,get$3(item).label)),append($$anchor9,fragment_5)},$$slots:{default:!0}})})}append($$anchor7,fragment_4)},consequent_1=$$anchor7=>{ -var fragment_6=comment$2(),node_8=first_child(fragment_6);component(node_8,()=>Root$5,($$anchor8,Tooltip_Root)=>{Tooltip_Root($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_7=root_8$r(),node_9=first_child(fragment_7);component(node_9,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_8=comment$2(),node_10=first_child(fragment_8);{let $0=user_derived( -()=>get$3(item).class??"");component(node_10,()=>Dropdown_menu_item,($$anchor12,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor12,{get class(){return`${get$3($0)??""} flex cursor-pointer items-center gap-2`},disabled:!0,children:($$anchor13,$$slotProps5)=>{var fragment_9=root_10$f(),node_11=first_child(fragment_9);component(node_11,()=>get$3(item).icon,($$anchor14,item_icon_1)=>{item_icon_1($$anchor14,{class:"h-4 w-4"})});var span_1=sibling(node_11,2),text_1=child(span_1,!0);reset(span_1),template_effect( -()=>set_text(text_1,get$3(item).label)),append($$anchor13,fragment_9)},$$slots:{default:!0}})})}append($$anchor11,fragment_8)},$$slots:{default:!0}})});var node_12=sibling(node_9,2);component(node_12,()=>Tooltip_content,($$anchor10,Tooltip_Content)=>{Tooltip_Content($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p2=root_11$e(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9, -fragment_7)},$$slots:{default:!0}})}),append($$anchor7,fragment_6)};if_block(node_5,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_3)});var node_13=sibling(node_4,2);{var consequent_3=$$anchor6=>{var fragment_10=comment$2(),node_14=first_child(fragment_10);component(node_14,()=>Root$5,($$anchor7,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{ -var fragment_11=root_13$d(),node_15=first_child(fragment_11);component(node_15,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{var fragment_12=comment$2(),node_16=first_child(fragment_12);component(node_16,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor11,{class:"flex cursor-pointer items-center gap-2",get onclick(){return attachmentMenu.callbacks.onFileUpload},children:($$anchor12,$$slotProps5)=>{ -const pdfItem=user_derived(()=>ATTACHMENT_FILE_ITEMS.find(i=>i.id===AttachmentMenuItemId.PDF));var fragment_13=comment$2(),node_17=first_child(fragment_13);{var consequent_2=$$anchor13=>{var fragment_14=root_16$6(),node_18=first_child(fragment_14);component(node_18,()=>get$3(pdfItem).icon,($$anchor14,pdfItem_icon)=>{pdfItem_icon($$anchor14,{class:"h-4 w-4"})});var span_2=sibling(node_18,2),text_3=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_3,get$3(pdfItem).label)),append($$anchor13, -fragment_14)};if_block(node_17,$$render=>{get$3(pdfItem)&&$$render(consequent_2)})}append($$anchor12,fragment_13)},$$slots:{default:!0}})}),append($$anchor10,fragment_12)},$$slots:{default:!0}})});var node_19=sibling(node_15,2);component(node_19,()=>Tooltip_content,($$anchor9,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor9,{side:"right",children:($$anchor10,$$slotProps4)=>{var p_1=root_17$8();append($$anchor10,p_1)},$$slots:{default:!0}})}),append($$anchor8,fragment_11)},$$slots:{default:!0}})}), -append($$anchor6,fragment_10)},d2=user_derived(()=>!attachmentMenu.isItemEnabled("hasVisionModality"));if_block(node_13,$$render=>{get$3(d2)&&$$render(consequent_3)})}var node_20=sibling(node_13,2);component(node_20,()=>Dropdown_menu_separator,($$anchor6,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor6,{})});var node_21=sibling(node_20,2);each(node_21,17,()=>ATTACHMENT_EXTRA_ITEMS,item=>item.id,($$anchor6,item)=>{var fragment_15=comment$2(),node_22=first_child(fragment_15);{var consequent_4=$$anchor7=>{ -var fragment_16=comment$2(),node_23=first_child(fragment_16);component(node_23,()=>Root$5,($$anchor8,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_17=root_20$5(),node_24=first_child(fragment_17);component(node_24,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_18=comment$2(),node_25=first_child(fragment_18); -component(node_25,()=>Dropdown_menu_item,($$anchor12,DropdownMenu_Item_3)=>{DropdownMenu_Item_3($$anchor12,{class:"flex cursor-pointer items-center gap-2",onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor13,$$slotProps5)=>{var fragment_19=root_22$2(),node_26=first_child(fragment_19);component(node_26,()=>get$3(item).icon,($$anchor14,item_icon_2)=>{item_icon_2($$anchor14,{class:"h-4 w-4"})});var span_3=sibling(node_26,2),text_4=child(span_3,!0);reset(span_3),template_effect( -()=>set_text(text_4,get$3(item).label)),append($$anchor13,fragment_19)},$$slots:{default:!0}})}),append($$anchor11,fragment_18)},$$slots:{default:!0}})});var node_27=sibling(node_24,2);component(node_27,()=>Tooltip_content,($$anchor10,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p_2=root_23$5(),text_5=child(p_2,!0);reset(p_2),template_effect($0=>set_text(text_5,$0),[()=>attachmentMenu.getSystemMessageTooltip()]),append($$anchor11,p_2)}, -$$slots:{default:!0}})}),append($$anchor9,fragment_17)},$$slots:{default:!0}})}),append($$anchor7,fragment_16)};if_block(node_22,$$render=>{get$3(item).id===AttachmentMenuItemId.SYSTEM_MESSAGE&&$$render(consequent_4)})}append($$anchor6,fragment_15)});var node_28=sibling(node_21,2);ChatFormActionAddToolsSubmenu(node_28,{});var node_29=sibling(node_28,2);ChatFormActionAddMcpServersSubmenu(node_29,{onMcpSettingsClick:handleMcpSettingsClick});var node_30=sibling(node_29,2);each(node_30,17,()=>ATTACHMENT_MCP_ITEMS, -item=>item.id,($$anchor6,item)=>{var fragment_20=comment$2(),node_31=first_child(fragment_20);{var consequent_5=$$anchor7=>{var fragment_21=comment$2(),node_32=first_child(fragment_21);component(node_32,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_4)=>{DropdownMenu_Item_4($$anchor8,{class:"flex cursor-pointer items-center gap-2",onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor9,$$slotProps3)=>{var fragment_22=root_26$2(),node_33=first_child(fragment_22);component( -node_33,()=>get$3(item).icon,($$anchor10,item_icon_3)=>{item_icon_3($$anchor10,{class:"h-4 w-4"})});var span_4=sibling(node_33,2),text_6=child(span_4,!0);reset(span_4),template_effect(()=>set_text(text_6,get$3(item).label)),append($$anchor9,fragment_22)},$$slots:{default:!0}})}),append($$anchor7,fragment_21)},d_12=user_derived(()=>attachmentMenu.isItemVisible(get$3(item).visibleWhen));if_block(node_31,$$render=>{get$3(d_12)&&$$render(consequent_5)})}append($$anchor6,fragment_20)}),append($$anchor5, -fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div),pop()}function Sheet_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/5\ -0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:fill-mode-forwards data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,SheetPrimitive_Overlay)=>{SheetPrimitive_Overlay($$anchor2,spread_props({"data-slot":"sheet-overlay",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const sheetVariants=tv({base:`bor\ -der-border/30 dark:border-border/20 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fill-mode-forwards fixed z-50 flex flex-col gap-4 shadow-sm transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 ${PANEL_CLASSES}`,variants:{side:{top:"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",bottom:"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inse\ -t-x-0 bottom-0 h-auto border-t",left:"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",right:"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"}},defaultVariants:{side:"right"}});var root_3$R=from_html(' Close',1),root_2$12=from_html(" ",1),root_1$N=from_html(" ",1);function Sheet_content($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),side=prop($$props,"side",3,"right"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","side","portalProps","children"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,SheetPrimitive_Portal)=>{SheetPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$N(),node_1=first_child(fragment_1);Sheet_overlay(node_1, -{});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1(sheetVariants({side:side()}),$$props.class));component(node_2,()=>Dialog_content$1,($$anchor4,SheetPrimitive_Content)=>{SheetPrimitive_Content($$anchor4,spread_props({"data-slot":"sheet-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$12(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3); -var node_4=sibling(node_3,2);component(node_4,()=>Dialog_close,($$anchor6,SheetPrimitive_Close)=>{SheetPrimitive_Close($$anchor6,{class:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$R(),node_5=first_child(fragment_3);X(node_5,{class:"size-4"}),next$1( -2),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}var root$1s=from_html("
");function Sheet_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1s();attribute_effect(div,$0=>({"data-slot":"sheet-header",class:$0, -...restProps}),[()=>cn$1("flex flex-col gap-1.5 p-4",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Sheet_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("font-semibold text-fo\ -reground",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,SheetPrimitive_Title)=>{SheetPrimitive_Title($$anchor2,spread_props({"data-slot":"sheet-title",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Sheet_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(), -node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,SheetPrimitive_Description)=>{SheetPrimitive_Description($$anchor2,spread_props({"data-slot":"sheet-description",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$3=Dialog;var root_3$Q=from_html(" ",1),root_7$r=from_html(''),root_10$e=from_html(''),root_11$d=from_html("

"),root_9$k=from_html(" ",1),root_15$9=from_html(''),root_16$5=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_14$5=from_html(" ",1),root_20$4=from_html(''),root_21$3=from_html("

"), -root_19$9=from_html(" ",1),root_23$4=from_html(''),root_2$11=from_html(' ',1),root_1$M=from_html(" ",1),root$1r=from_html("
");function ChatFormActionAddSheet($$anchor,$$props){ +`).find(l=>l.trim().length>0);cleanTitle=firstLine?firstLine.trim():TITLE_GENERATION.FALLBACK}cleanTitle&&cleanTitle.length>=TITLE_GENERATION.MIN_LENGTH&&await conversationsStore.updateConversationName(convId,cleanTitle)}async savePartialResponseIfNeeded(convId){const conversationId=convId||conversationsStore.activeConversation?.id;if(!conversationId)return;const streamingState=this.getChatStreaming(conversationId);if(!streamingState)return;const messages=conversationId===conversationsStore.activeConversation?. +id?conversationsStore.activeMessages:await conversationsStore.getConversationMessages(conversationId);if(!messages.length)return;const lastMessage=messages[messages.length-1];if(lastMessage?.role!==MessageRole.ASSISTANT)return;const partialContent=streamingState.response,partialReasoning=lastMessage.reasoningContent||"";if(!(!partialContent.trim()&&!partialReasoning.trim()))try{const updateData={content:partialContent};partialReasoning&&(updateData.reasoningContent=partialReasoning);const lastKnownState=this. +getProcessingState(conversationId);lastKnownState&&(updateData.timings={prompt_n:lastKnownState.promptTokens||0,prompt_ms:lastKnownState.promptMs,predicted_n:lastKnownState.tokensDecoded||0,cache_n:lastKnownState.cacheTokens||0,predicted_ms:lastKnownState.tokensPerSecond&&lastKnownState.tokensDecoded?lastKnownState.tokensDecoded/lastKnownState.tokensPerSecond*1e3:void 0}),await DatabaseService.updateMessage(lastMessage.id,updateData),lastMessage.content=partialContent,updateData.timings&&(lastMessage. +timings=updateData.timings)}catch(error2){lastMessage.content=partialContent,console.error("Failed to save partial response:",error2)}}async updateMessage(messageId,newContent){const activeConv=conversationsStore.activeConversation;if(!activeConv)return;this.isChatLoadingInternal(activeConv.id)&&await this.stopGeneration();const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:messageToUpdate,index:messageIndex}=result,originalContent=messageToUpdate. +content;try{const rootMessage=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=rootMessage&&messageToUpdate.parent===rootMessage.id;conversationsStore.updateMessageAtIndex(messageIndex,{content:newContent}),await DatabaseService.updateMessage(messageId,{content:newContent}),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent, +!!config$1().titleGenerationUseFirstLine));const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex+1);for(const message of messagesToRemove)await DatabaseService.deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex+1),conversationsStore.updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const assistantMessage=await this.createAssistantMessage();conversationsStore.addMessageToActive(assistantMessage), +await conversationsStore.updateCurrentNode(assistantMessage.id),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage,void 0,()=>{conversationsStore.updateMessageAtIndex(conversationsStore.findMessageIndex(messageId),{content:originalContent})})}catch(error2){isAbortError(error2)||console.error("Failed to update message:",error2)}}async regenerateMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal( +activeConv.id))return;this.cancelPreEncode();const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{index:messageIndex}=result;try{const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex);for(const message of messagesToRemove)await DatabaseService.deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex),conversationsStore.updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming( +activeConv.id);const parentMessageId=conversationsStore.activeMessages.length>0?conversationsStore.activeMessages[conversationsStore.activeMessages.length-1].id:void 0,assistantMessage=await this.createAssistantMessage(parentMessageId);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage)}catch(error2){isAbortError(error2)||console.error("Failed to regenerate message:",error2),this.setChatLoading(activeConv?. +id||"",!1)}}async regenerateMessageWithBranching(messageId,modelOverride){const activeConv=conversationsStore.activeConversation;if(!(!activeConv||this.isChatLoadingInternal(activeConv.id))){this.cancelPreEncode();try{const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const msg=conversationsStore.activeMessages[idx];if(msg.role!==MessageRole.ASSISTANT)return;const allMessages=await conversationsStore.getConversationMessages(activeConv.id),parentMessage=findMessageById(allMessages, +msg.parent);if(!parentMessage)return;this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const newAssistantMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:"",toolCalls:"",children:[],model:null},parentMessage.id);await conversationsStore.updateCurrentNode(newAssistantMessage.id),conversationsStore.updateConversationTimestamp(),await conversationsStore.refreshActiveMessages();const conversationPath=filterByLeafNodeId( +allMessages,parentMessage.id,!1),modelToUse=modelOverride||msg.model||void 0;await this.streamChatCompletion(conversationPath,newAssistantMessage,void 0,void 0,modelToUse)}catch(error2){isAbortError(error2)||console.error("Failed to regenerate message with branching:",error2),this.setChatLoading(activeConv?.id||"",!1)}}}async getDeletionInfo(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv)return{totalCount:0,userMessages:0,assistantMessages:0,messageTypes:[]};const allMessages=await conversationsStore. +getConversationMessages(activeConv.id);if(findMessageById(allMessages,messageId)?.role===MessageRole.SYSTEM){const messagesToDelete2=allMessages.filter(m=>m.id===messageId);let userMessages2=0,assistantMessages2=0;const messageTypes2=[];for(const msg of messagesToDelete2)msg.role===MessageRole.USER?(userMessages2++,messageTypes2.includes("user message")||messageTypes2.push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages2++,messageTypes2.includes("assistant response")||messageTypes2. +push("assistant response"));return{totalCount:1,userMessages:userMessages2,assistantMessages:assistantMessages2,messageTypes:messageTypes2}}const descendants=findDescendantMessages(allMessages,messageId),allToDelete=[messageId,...descendants],messagesToDelete=allMessages.filter(m=>allToDelete.includes(m.id));let userMessages=0,assistantMessages=0;const messageTypes=[];for(const msg of messagesToDelete)msg.role===MessageRole.USER?(userMessages++,messageTypes.includes("user message")||messageTypes. +push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages++,messageTypes.includes("assistant response")||messageTypes.push("assistant response"));return{totalCount:allToDelete.length,userMessages,assistantMessages,messageTypes}}async deleteMessage(messageId){const activeConv=conversationsStore.activeConversation;if(activeConv)try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),messageToDelete=findMessageById(allMessages,messageId);if(!messageToDelete) +return;if(filterByLeafNodeId(allMessages,activeConv.currNode||"",!1).some(m=>m.id===messageId)&&messageToDelete.parent){const siblings2=allMessages.filter(m=>m.parent===messageToDelete.parent&&m.id!==messageId);if(siblings2.length>0){const latestSibling=siblings2.reduce((latest,sibling2)=>sibling2.timestamp>latest.timestamp?sibling2:latest);await conversationsStore.updateCurrentNode(findLeafNode(allMessages,latestSibling.id))}else messageToDelete.parent&&await conversationsStore.updateCurrentNode( +findLeafNode(allMessages,messageToDelete.parent))}await DatabaseService.deleteMessageCascading(activeConv.id,messageId),await conversationsStore.refreshActiveMessages(),conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to delete message:",error2)}}async continueAssistantMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole. +ASSISTANT);if(!result)return;const{message:msg,index:idx}=result;try{this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const allMessages=await conversationsStore.getConversationMessages(activeConv.id),dbMessage=findMessageById(allMessages,messageId);if(!dbMessage){this.setChatLoading(activeConv.id,!1);return}const originalContent=dbMessage.content,originalReasoning=dbMessage.reasoningContent||"",contextWithContinue=[...conversationsStore.activeMessages. +slice(0,idx),{role:MessageRole.ASSISTANT,content:originalContent,reasoning_content:originalReasoning||void 0}];let appendedContent="",appendedReasoning="",hasReceivedContent=!1;const updateStreamingContent=fullContent=>{this.setChatStreaming(msg.convId,fullContent,msg.id),conversationsStore.updateMessageAtIndex(idx,{content:fullContent})},abortController=this.getOrCreateAbortController(msg.convId);await ChatService.sendMessage(contextWithContinue,{...this.getApiOptions(),onChunk:chunk=>{appendedContent+= +chunk,hasReceivedContent=!0,updateStreamingContent(originalContent+appendedContent)},onReasoningChunk:chunk=>{appendedReasoning+=chunk,hasReceivedContent=!0,this.setChatStreaming(msg.convId,originalContent+appendedContent,msg.id),conversationsStore.updateMessageAtIndex(idx,{reasoningContent:originalReasoning+appendedReasoning})},onTimings:(timings,promptProgress)=>{const tokensPerSecond=timings?.predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings( +{prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},msg.convId)},onComplete:async(finalContent,reasoningContent,timings)=>{const finalAppendedContent=hasReceivedContent?appendedContent:finalContent||"",finalAppendedReasoning=hasReceivedContent?appendedReasoning:reasoningContent||"",fullContent=originalContent+finalAppendedContent,fullReasoning=originalReasoning+ +finalAppendedReasoning||void 0;await DatabaseService.updateMessage(msg.id,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateMessageAtIndex(idx,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateConversationTimestamp(),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null)},onError:async error2=>{if(isAbortError(error2)){hasReceivedContent&& +appendedContent&&(await DatabaseService.updateMessage(msg.id,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()}),conversationsStore.updateMessageAtIndex(idx,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()})),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null);return}console.error("Continue g\ +eneration error:",error2),conversationsStore.updateMessageAtIndex(idx,{content:originalContent}),await DatabaseService.updateMessage(msg.id,{content:originalContent}),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null),this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,message:error2.message})}},msg.convId,abortController.signal)}catch(error2){isAbortError(error2)||console.error("Faile\ +d to continue message:",error2),activeConv&&this.setChatLoading(activeConv.id,!1)}}async editAssistantMessage(messageId,newContent,shouldBranch){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result;try{if(shouldBranch){const newMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg. +type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[],model:msg.model},msg.parent);await conversationsStore.updateCurrentNode(newMessage.id)}else await DatabaseService.updateMessage(msg.id,{content:newContent}),conversationsStore.updateMessageAtIndex(idx,{content:newContent});conversationsStore.updateConversationTimestamp(),await conversationsStore.refreshActiveMessages()}catch(error2){console.error("Failed to edit assistant message:",error2)}}async editUserMessagePreserveResponses(messageId,newContent,newExtras){ +const activeConv=conversationsStore.activeConversation;if(!activeConv)return;const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:msg,index:idx}=result;try{const updateData={content:newContent};newExtras!==void 0&&(updateData.extra=JSON.parse(JSON.stringify(newExtras))),await DatabaseService.updateMessage(messageId,updateData),conversationsStore.updateMessageAtIndex(idx,updateData);const rootMessage=(await conversationsStore.getConversationMessages( +activeConv.id)).find(m=>m.type==="root"&&m.parent===null);rootMessage&&msg.parent===rootMessage.id&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to edit user message:",error2)}}async editMessageWithBranching(messageId,newContent,newExtras){const activeConv=conversationsStore.activeConversation; +if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;let result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(result||(result=this.getMessageByIdWithRole(messageId,MessageRole.SYSTEM)),!result)return;const{message:msg,index:idx}=result;try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=msg.role===MessageRole.USER&&rootMessage&&msg.parent===rootMessage.id, +extrasToUse=newExtras!==void 0?JSON.parse(JSON.stringify(newExtras)):msg.extra?JSON.parse(JSON.stringify(msg.extra)):void 0;let messageIdForResponse;const dbMsg=findMessageById(allMessages,msg.id);if(dbMsg?dbMsg.children.length>0:msg.children.length>0){const parentId=msg.parent||rootMessage?.id;if(!parentId)return;const newMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[], +extra:extrasToUse,model:msg.model},parentId);await conversationsStore.updateCurrentNode(newMessage.id),messageIdForResponse=newMessage.id}else{const updates={content:newContent,timestamp:Date.now(),extra:extrasToUse};await DatabaseService.updateMessage(msg.id,updates),conversationsStore.updateMessageAtIndex(idx,updates),messageIdForResponse=msg.id}conversationsStore.updateConversationTimestamp(),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation( +activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),await conversationsStore.refreshActiveMessages(),msg.role===MessageRole.USER&&await this.generateResponseForMessage(messageIdForResponse)}catch(error2){console.error("Failed to edit message with branching:",error2)}}async generateResponseForMessage(userMessageId){const activeConv=conversationsStore.activeConversation;if(activeConv){this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming( +activeConv.id);try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),conversationPath=filterByLeafNodeId(allMessages,userMessageId,!1),assistantMessage=await DatabaseService.createMessageBranch({convId:activeConv.id,type:MessageType.TEXT,timestamp:Date.now(),role:MessageRole.ASSISTANT,content:"",toolCalls:"",children:[],model:null},userMessageId);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationPath,assistantMessage)}catch(error2){ +console.error("Failed to generate response:",error2),this.setChatLoading(activeConv.id,!1)}}}getContextTotal(){const activeConvId=this.activeConversationId,activeState=activeConvId?this.getProcessingState(activeConvId):null;if(activeState&&typeof activeState.contextTotal=="number"&&activeState.contextTotal>0)return activeState.contextTotal;if(isRouterMode()){const modelContextSize=selectedModelContextSize();if(typeof modelContextSize=="number"&&modelContextSize>0)return modelContextSize}else{const propsContextSize=contextSize(); +if(typeof propsContextSize=="number"&&propsContextSize>0)return propsContextSize}return null}updateProcessingStateFromTimings(timingData,conversationId){const processingState=this.parseTimingData(timingData);if(processingState===null){console.warn("Failed to parse timing data - skipping update");return}const targetId=conversationId||this.activeConversationId;targetId&&this.setProcessingState(targetId,processingState)}parseTimingData(timingData){const promptTokens=timingData.prompt_n||0,promptMs=timingData. +prompt_ms||void 0,predictedTokens=timingData.predicted_n||0,tokensPerSecond=timingData.predicted_per_second||0,cacheTokens=timingData.cache_n||0,promptProgress=timingData.prompt_progress,contextTotal=this.getContextTotal(),currentConfig=config$1(),outputTokensMax=currentConfig.max_tokens||-1,contextUsed=promptTokens+cacheTokens+predictedTokens,outputTokensUsed=predictedTokens,progressCache=promptProgress?.cache||0,progressActualDone=(promptProgress?.processed??0)-progressCache,progressActualTotal=(promptProgress?. +total??0)-progressCache,progressPercent=promptProgress?Math.round(progressActualDone/progressActualTotal*100):void 0;return{status:predictedTokens>0?"generating":promptProgress?"preparing":"idle",tokensDecoded:predictedTokens,tokensRemaining:outputTokensMax-predictedTokens,contextUsed,contextTotal,outputTokensUsed,outputTokensMax,hasNextToken:predictedTokens>0,tokensPerSecond,temperature:currentConfig.temperature??.8,topP:currentConfig.top_p??.95,speculative:!1,progressPercent,promptProgress,promptTokens, +promptMs,cacheTokens}}restoreProcessingStateFromMessages(messages,conversationId){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.timings){const restoredState=this.parseTimingData({prompt_n:message.timings.prompt_n||0,prompt_ms:message.timings.prompt_ms,predicted_n:message.timings.predicted_n||0,predicted_per_second:message.timings.predicted_n&&message.timings.predicted_ms?message.timings.predicted_n/message.timings.predicted_ms*1e3: +0,cache_n:message.timings.cache_n||0});if(restoredState){this.setProcessingState(conversationId,restoredState);return}}}}getConversationModel(messages){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.model)return message.model}return null}getApiOptions(){const currentConfig=config$1(),hasValue=value=>value!=null&&value!=="",apiOptions={stream:!0,timings_per_token:!0};if(isRouterMode()){const modelName=selectedModelName();modelName&& +(apiOptions.model=modelName)}return currentConfig.systemMessage&&(apiOptions.systemMessage=currentConfig.systemMessage),currentConfig.disableReasoningParsing&&(apiOptions.disableReasoningParsing=!0),currentConfig.excludeReasoningFromContext&&(apiOptions.excludeReasoningFromContext=!0),hasValue(currentConfig.temperature)&&(apiOptions.temperature=Number(currentConfig.temperature)),hasValue(currentConfig.max_tokens)&&(apiOptions.max_tokens=Number(currentConfig.max_tokens)),hasValue(currentConfig.dynatemp_range)&& +(apiOptions.dynatemp_range=Number(currentConfig.dynatemp_range)),hasValue(currentConfig.dynatemp_exponent)&&(apiOptions.dynatemp_exponent=Number(currentConfig.dynatemp_exponent)),hasValue(currentConfig.top_k)&&(apiOptions.top_k=Number(currentConfig.top_k)),hasValue(currentConfig.top_p)&&(apiOptions.top_p=Number(currentConfig.top_p)),hasValue(currentConfig.min_p)&&(apiOptions.min_p=Number(currentConfig.min_p)),hasValue(currentConfig.xtc_probability)&&(apiOptions.xtc_probability=Number(currentConfig. +xtc_probability)),hasValue(currentConfig.xtc_threshold)&&(apiOptions.xtc_threshold=Number(currentConfig.xtc_threshold)),hasValue(currentConfig.typ_p)&&(apiOptions.typ_p=Number(currentConfig.typ_p)),hasValue(currentConfig.repeat_last_n)&&(apiOptions.repeat_last_n=Number(currentConfig.repeat_last_n)),hasValue(currentConfig.repeat_penalty)&&(apiOptions.repeat_penalty=Number(currentConfig.repeat_penalty)),hasValue(currentConfig.presence_penalty)&&(apiOptions.presence_penalty=Number(currentConfig.presence_penalty)), +hasValue(currentConfig.frequency_penalty)&&(apiOptions.frequency_penalty=Number(currentConfig.frequency_penalty)),hasValue(currentConfig.dry_multiplier)&&(apiOptions.dry_multiplier=Number(currentConfig.dry_multiplier)),hasValue(currentConfig.dry_base)&&(apiOptions.dry_base=Number(currentConfig.dry_base)),hasValue(currentConfig.dry_allowed_length)&&(apiOptions.dry_allowed_length=Number(currentConfig.dry_allowed_length)),hasValue(currentConfig.dry_penalty_last_n)&&(apiOptions.dry_penalty_last_n=Number( +currentConfig.dry_penalty_last_n)),currentConfig.samplers&&(apiOptions.samplers=currentConfig.samplers),apiOptions.backend_sampling=currentConfig.backend_sampling,currentConfig.custom&&(apiOptions.custom=currentConfig.custom),apiOptions}cancelPreEncode(){this.preEncodeAbortController&&(this.preEncodeAbortController.abort(),this.preEncodeAbortController=null)}async triggerPreEncode(allMessages,assistantMessage,assistantContent,model,excludeReasoning){this.cancelPreEncode(),this.preEncodeAbortController= +new AbortController;const signal=this.preEncodeAbortController.signal;try{if(!await ChatService.areAllSlotsIdle(model,signal)||signal.aborted)return;const messagesWithAssistant=[...allMessages,{...assistantMessage,content:assistantContent}];await ChatService.preEncode(messagesWithAssistant,model,excludeReasoning,signal)}catch(err){isAbortError(err)||console.warn("[ChatStore] Pre-encode failed:",err)}}}const chatStore=new ChatStore,activeProcessingState=()=>chatStore.activeProcessingState,errorDialog=()=>chatStore. +errorDialogState,getAddFilesHandler=()=>chatStore.getAddFilesHandler(),getAllLoadingChats=()=>chatStore.getAllLoadingChats(),isChatStreaming=()=>chatStore.isStreaming(),isEditing=()=>chatStore.isEditing(),isLoading=()=>chatStore.isLoading,pendingEditMessageId=()=>chatStore.pendingEditMessageId,chatPendingMessageContent=convId=>chatStore.pendingMessageContent(convId),chatPendingMessageExtras=convId=>chatStore.pendingMessageExtras(convId),chatClearPendingMessage=convId=>chatStore.clearPendingMessage( +convId),chatInjectPendingMessage=(convId,content2,extras)=>chatStore.injectPendingMessage(convId,content2,extras);var root$1u=from_html('
',1);function ChatForm($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]),className=prop($$props,"cla\ +ss",3,""),disabled=prop($$props,"disabled",3,!1),isLoading2=prop($$props,"isLoading",3,!1),placeholder=prop($$props,"placeholder",3,"Type a message..."),showMcpPromptButton=prop($$props,"showMcpPromptButton",3,!1),showAddButton=prop($$props,"showAddButton",3,!0),showModelSelector=prop($$props,"showModelSelector",3,!0),uploadedFiles=prop($$props,"uploadedFiles",31,()=>proxy([])),value=prop($$props,"value",15,""),audioRecorder,chatFormActionsRef=state$1(void 0),fileInputRef=state$1(void 0),pickersRef=state$1( +void 0),textareaRef=state$1(void 0),isRecording=state$1(!1),recordingSupported=state$1(!1),isPromptPickerOpen=state$1(!1),promptSearchQuery=state$1(""),isInlineResourcePickerOpen=state$1(!1),resourceSearchQuery=state$1(""),isResourceDialogOpen=state$1(!1),preSelectedResourceUri=state$1(void 0),currentConfig=user_derived(config$1),pasteLongTextToFileLength=user_derived(()=>{const n=Number(get$3(currentConfig).pasteLongTextToFileLen);return Number.isNaN(n)?Number(SETTING_CONFIG_DEFAULT.pasteLongTextToFileLen): +n}),isRouter=user_derived(isRouterMode),conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),activeModelId=user_derived(()=>{const options=modelOptions();if(!get$3(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId();if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$3(conversationModel)){const model=options.find(m=>m.model===get$3(conversationModel));if(model)return model.model}return null}), +hasModelSelected=user_derived(()=>!get$3(isRouter)||!!get$3(conversationModel)||!!selectedModelId()),hasLoadingAttachments=user_derived(()=>uploadedFiles().some(f=>f.isLoading)),hasAttachments=user_derived(()=>attachments()&&attachments().length>0||uploadedFiles()&&uploadedFiles().length>0),canSubmit=user_derived(()=>value().trim().length>0||get$3(hasAttachments));onMount$1(()=>{set$1(recordingSupported,isAudioRecordingSupported(),!0),audioRecorder=new AudioRecorder});function focus2(){get$3(textareaRef)?. +focus()}function resetTextareaHeight(){get$3(textareaRef)?.resetHeight()}function openModelSelector(){get$3(chatFormActionsRef)?.openModelSelector()}function checkModelSelected(){return get$3(hasModelSelected)?!0:(get$3(chatFormActionsRef)?.openModelSelector(),!1)}function handleFileSelect(files){$$props.onFilesAdd?.(files)}function handleFileUpload(){get$3(fileInputRef)?.click()}function handleFileRemove(fileId){if(fileId.startsWith("attachment-")){const index2=parseInt(fileId.replace("attachme\ +nt-",""),10);!isNaN(index2)&&index2>=0&&index2item.kind==="file").map(item=>item.getAsFile()).filter(file=>file!==null);if(files.length>0){event2.preventDefault(),$$props.onFilesAdd?.(files);return}const text2=event2.clipboardData.getData(MimeTypeText.PLAIN);if(text2.startsWith(CLIPBOARD_CONTENT_QUOTE_PREFIX)){const parsed=parseClipboardContent(text2);if(parsed.textAttachments.length>0||parsed.mcpPromptAttachments.length> +0){if(event2.preventDefault(),value(parsed.message),$$props.onValueChange?.(parsed.message),parsed.textAttachments.length>0){const attachmentFiles=parsed.textAttachments.map(att=>new File([att.content],att.name,{type:MimeTypeText.PLAIN}));$$props.onFilesAdd?.(attachmentFiles)}if(parsed.mcpPromptAttachments.length>0){const mcpPromptFiles=parsed.mcpPromptAttachments.map(att=>({id:uuid$1(),name:att.name,size:att.content.length,type:SpecialFileType.MCP_PROMPT,file:new File([att.content],`${att.name}${FileExtensionText. +TXT}`,{type:MimeTypeText.PLAIN}),isLoading:!1,textContent:att.content,mcpPrompt:{serverName:att.serverName,promptName:att.promptName,arguments:att.arguments}}));uploadedFiles([...uploadedFiles(),...mcpPromptFiles]),$$props.onUploadedFilesChange?.(uploadedFiles())}setTimeout(()=>{get$3(textareaRef)?.focus()},10);return}}if(text2.length>0&&get$3(pasteLongTextToFileLength)>0&&text2.length>get$3(pasteLongTextToFileLength)){event2.preventDefault();const textFile=new File([text2],"Pasted",{type:MimeTypeText. +PLAIN});$$props.onFilesAdd?.([textFile])}}function handlePromptLoadStart(placeholderId,promptInfo,args){value().startsWith(PROMPT_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"");const promptName=promptInfo.title||promptInfo.name,placeholder2={id:placeholderId,name:promptName,size:INITIAL_FILE_SIZE,type:SpecialFileType.MCP_PROMPT,file:new File([],"loading"),isLoading:!0,mcpPrompt:{serverName:promptInfo.serverName,promptName:promptInfo. +name,arguments:args?{...args}:void 0}};uploadedFiles([...uploadedFiles(),placeholder2]),$$props.onUploadedFilesChange?.(uploadedFiles()),get$3(textareaRef)?.focus()}function handlePromptLoadComplete(placeholderId,result){const promptText=result.messages?.map(msg=>typeof msg.content=="string"?msg.content:msg.content.type===ContentPartType.TEXT?msg.content.text:"").filter(Boolean).join(PROMPT_CONTENT_SEPARATOR);uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,textContent:promptText, +size:promptText.length,file:new File([promptText],`${f.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN})}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptLoadError(placeholderId,error2){uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,loadError:error2}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptPickerClose(){set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,""),get$3(textareaRef)?.focus()}function handleInlineResourcePickerClose(){ +set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$3(textareaRef)?.focus()}function handleInlineResourceSelect(){value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$3(textareaRef)?.focus()}function handleBrowseResources(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1( +isResourceDialogOpen,!0)}async function handleMicClick(){if(!audioRecorder||!get$3(recordingSupported)){console.warn("Audio recording not supported");return}if(get$3(isRecording)){set$1(isRecording,!1);try{const audioBlob=await audioRecorder.stopRecording(),wavBlob=await convertToWav(audioBlob),audioFile=createAudioFile(wavBlob);$$props.onFilesAdd?.([audioFile])}catch(error2){console.error("Failed to stop recording:",error2)}}else try{await audioRecorder.startRecording(),set$1(isRecording,!0)}catch(error2){ +console.error("Failed to start recording:",error2)}}var $$exports={focus:focus2,resetTextareaHeight,openModelSelector,checkModelSelected},fragment=root$1u(),node2=first_child(fragment);bind_this(ChatFormFileInputInvisible(node2,{onFileSelect:handleFileSelect}),$$value=>set$1(fileInputRef,$$value,!0),()=>get$3(fileInputRef));var form=sibling(node2,2),node_1=child(form);bind_this(ChatFormPickers(node_1,{get isPromptPickerOpen(){return get$3(isPromptPickerOpen)},get promptSearchQuery(){return get$3( +promptSearchQuery)},get isInlineResourcePickerOpen(){return get$3(isInlineResourcePickerOpen)},get resourceSearchQuery(){return get$3(resourceSearchQuery)},onPromptPickerClose:handlePromptPickerClose,onInlineResourcePickerClose:handleInlineResourcePickerClose,onInlineResourceSelect:handleInlineResourceSelect,onPromptLoadStart:handlePromptLoadStart,onPromptLoadComplete:handlePromptLoadComplete,onPromptLoadError:handlePromptLoadError,onInlineResourceBrowse:handleBrowseResources}),$$value=>set$1(pickersRef, +$$value,!0),()=>get$3(pickersRef));var div=sibling(node_1,2),node_2=child(div);{let $0=user_derived(()=>get$3(activeModelId)??void 0);ChatAttachmentsList(node_2,{get attachments(){return attachments()},onFileRemove:handleFileRemove,limitToSingleRow:!0,class:"py-5",style:"scroll-padding: 1rem;",get activeModelId(){return get$3($0)},get uploadedFiles(){return uploadedFiles()},set uploadedFiles($$value){uploadedFiles($$value)}})}var div_1=sibling(node_2,2),node_3=child(div_1);bind_this(ChatFormTextarea( +node_3,{class:"px-5 py-1.5 md:pt-0",onKeydown:handleKeydown,onInput:()=>{handleInput(),$$props.onValueChange?.(value())},get disabled(){return disabled()},get placeholder(){return placeholder()},get value(){return value()},set value($$value){value($$value)}}),$$value=>set$1(textareaRef,$$value,!0),()=>get$3(textareaRef));var node_4=sibling(node_3,2);{var consequent=$$anchor2=>{ChatFormMcpResourcesList($$anchor2,{class:"mb-3",onResourceClick:uri2=>{set$1(preSelectedResourceUri,uri2,!0),set$1(isResourceDialogOpen, +!0)}})},d2=user_derived(()=>mcpHasResourceAttachments());if_block(node_4,$$render=>{get$3(d2)&&$$render(consequent)})}var node_5=sibling(node_4,2);{let $0=user_derived(()=>showMcpPromptButton()?()=>set$1(isPromptPickerOpen,!0):void 0);bind_this(ChatFormActions(node_5,{class:"px-3",get canSend(){return get$3(canSubmit)},get disabled(){return disabled()},get isLoading(){return isLoading2()},get isRecording(){return get$3(isRecording)},get showAddButton(){return showAddButton()},get showModelSelector(){ +return showModelSelector()},get uploadedFiles(){return uploadedFiles()},onFileUpload:handleFileUpload,onMicClick:handleMicClick,get onStop(){return $$props.onStop},onSystemPromptClick:()=>$$props.onSystemPromptClick?.({message:value(),files:uploadedFiles()}),get onMcpPromptClick(){return get$3($0)},onMcpResourcesClick:()=>set$1(isResourceDialogOpen,!0)}),$$value=>set$1(chatFormActionsRef,$$value,!0),()=>get$3(chatFormActionsRef))}reset(div_1),reset(div),reset(form);var node_6=sibling(form,2);return DialogMcpResourcesBrowser( +node_6,{get preSelectedUri(){return get$3(preSelectedResourceUri)},onAttach:resource=>{mcpStore.attachResource(resource.uri)},onOpenChange:newOpen=>{newOpen||set$1(preSelectedResourceUri,void 0)},get open(){return get$3(isResourceDialogOpen)},set open($$value){set$1(isResourceDialogOpen,$$value,!0)}}),template_effect(()=>{set_class(form,1,`relative ${className()??""}`),set_class(div,1,`${INPUT_CLASSES??""} overflow-hidden rounded-3xl backdrop-blur-md ${disabled()?"cursor-not-allowed opacity-60": +""}`)}),event("submit",form,event2=>{event2.preventDefault(),!(!get$3(canSubmit)||disabled()||get$3(hasLoadingAttachments))&&$$props.onSubmit?.()}),event("paste",div_1,handlePaste),append($$anchor,fragment),pop($$exports)}function Dropdown_menu_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","sideOffset","portalProps","class"]);var fragment=comment$2(),node2=first_child( +fragment);component(node2,()=>Portal$2,($$anchor2,DropdownMenuPrimitive_Portal)=>{DropdownMenuPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-po\ +pover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:fill-mode-forwards data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node_1,()=>Dropdown_menu_content$1, +($$anchor4,DropdownMenuPrimitive_Content)=>{DropdownMenuPrimitive_Content($$anchor4,spread_props({"data-slot":"dropdown-menu-content",get sideOffset(){return sideOffset()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_item($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant", +3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","variant"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[var\ +iant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",$$props.class));component(node2,()=>Menu_item,($$anchor2,DropdownMenuPrimitive_Item)=>{DropdownMenuPrimitive_Item($$anchor2,spread_props( +{"data-slot":"dropdown-menu-item",get"data-inset"(){return $$props.inset},get"data-variant"(){return variant()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_separator($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived( +()=>cn$1("-mx-1 my-1 h-px bg-border/20",$$props.class));component(node2,()=>Menu_separator,($$anchor2,DropdownMenuPrimitive_Separator)=>{DropdownMenuPrimitive_Separator($$anchor2,spread_props({"data-slot":"dropdown-menu-separator",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props, +["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Menu_trigger,($$anchor2,DropdownMenuPrimitive_Trigger)=>{DropdownMenuPrimitive_Trigger($$anchor2,spread_props({"data-slot":"dropdown-menu-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_sub_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( +$$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-\ +in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:fill-mode-forwards data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node2,()=>Menu_sub_content,($$anchor2,DropdownMenuPrimitive_SubContent)=>{DropdownMenuPrimitive_SubContent($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-content",get class(){ +return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_1$P=from_html(" ",1);function Dropdown_menu_sub_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex cursor-default items-center gap-2 rounded\ +-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",$$props.class));component(node2,()=>Menu_sub_trigger,($$anchor2,DropdownMenuPrimitive_SubTrigger)=>{ +DropdownMenuPrimitive_SubTrigger($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-trigger",get"data-inset"(){return $$props.inset},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$P(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_right(node_2,{class:"ml-auto size-4"}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})} +append($$anchor,fragment),pop()}const Sub=Menu_sub,Root$4=Menu;function useAttachmentMenu(getFlags,getCallbacks,close2){const modalityFlags=user_derived(getFlags),callbacks=user_derived(()=>{const cbs=getCallbacks(),wrap2=fn=>()=>{close2(),fn?.()};return{[AttachmentAction.FILE_UPLOAD]:wrap2(cbs.onFileUpload),[AttachmentAction.SYSTEM_PROMPT_CLICK]:wrap2(cbs.onSystemPromptClick),[AttachmentAction.MCP_PROMPT_CLICK]:wrap2(cbs.onMcpPromptClick),[AttachmentAction.MCP_RESOURCES_CLICK]:wrap2(cbs.onMcpResourcesClick)}}); +function isItemEnabled(enabledWhen){return!enabledWhen||enabledWhen==="always"?!0:!!get$3(modalityFlags)[enabledWhen]}function isItemVisible(visibleWhen){return visibleWhen?!!get$3(modalityFlags)[visibleWhen]:!0}function getSystemMessageTooltip(){return page$1.params.id?"Inject custom system message at the beginning of the conversation":"Add custom system message for a new conversation"}return{get callbacks(){return get$3(callbacks)},isItemEnabled,isItemVisible,getSystemMessageTooltip}}var root_6$s=from_html( +" ",1),root_10$f=from_html(" ",1),root_11$e=from_html("

"),root_8$r=from_html(" ",1),root_16$6=from_html(" ",1),root_17$8=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_13$d=from_html(" ",1),root_22$2=from_html(" ",1),root_23$5=from_html("

"),root_20$5=from_html(" ",1),root_26$2=from_html(" ",1),root_3$S=from_html(" \ + ",1),root_1$O=from_html(" ",1),root$1t=from_html("
");function ChatFormActionAddDropdown($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),dropdownOpen=state$1(!1); +function handleMcpSettingsClick(){set$1(dropdownOpen,!1),$$props.onMcpSettingsClick?.()}const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(),hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props.onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props.onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(dropdownOpen, +!1)});var div=root$1t(),node2=child(div);component(node2,()=>Root$4,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return get$3(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$O(),node_1=first_child(fragment);component(node_1,()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4,{name:"Attach files",get disabled(){return disabled()},children:($$anchor5,$$slotProps2)=>{ +var fragment_1=comment$2(),node_2=first_child(fragment_1);snippet(node_2,()=>$$props.trigger,()=>({disabled:disabled()})),append($$anchor5,fragment_1)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Dropdown_menu_content,($$anchor4,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor4,{align:"start",class:"w-48",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_3$S(),node_4=first_child(fragment_2);each(node_4,17,()=>ATTACHMENT_FILE_ITEMS,item=>item.id,($$anchor6,item)=>{ +const enabled=user_derived(()=>attachmentMenu.isItemEnabled(get$3(item).enabledWhen));var fragment_3=comment$2(),node_5=first_child(fragment_3);{var consequent=$$anchor7=>{var fragment_4=comment$2(),node_6=first_child(fragment_4);{let $0=user_derived(()=>get$3(item).class??"");component(node_6,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor8,{get class(){return`${get$3($0)??""} flex cursor-pointer items-center gap-2`},onclick:()=>attachmentMenu.callbacks[get$3(item). +action](),children:($$anchor9,$$slotProps3)=>{var fragment_5=root_6$s(),node_7=first_child(fragment_5);component(node_7,()=>get$3(item).icon,($$anchor10,item_icon)=>{item_icon($$anchor10,{class:"h-4 w-4"})});var span=sibling(node_7,2),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,get$3(item).label)),append($$anchor9,fragment_5)},$$slots:{default:!0}})})}append($$anchor7,fragment_4)},consequent_1=$$anchor7=>{var fragment_6=comment$2(),node_8=first_child(fragment_6);component( +node_8,()=>Root$5,($$anchor8,Tooltip_Root)=>{Tooltip_Root($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_7=root_8$r(),node_9=first_child(fragment_7);component(node_9,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_8=comment$2(),node_10=first_child(fragment_8);{let $0=user_derived(()=>get$3(item).class??"");component(node_10,()=>Dropdown_menu_item, +($$anchor12,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor12,{get class(){return`${get$3($0)??""} flex cursor-pointer items-center gap-2`},disabled:!0,children:($$anchor13,$$slotProps5)=>{var fragment_9=root_10$f(),node_11=first_child(fragment_9);component(node_11,()=>get$3(item).icon,($$anchor14,item_icon_1)=>{item_icon_1($$anchor14,{class:"h-4 w-4"})});var span_1=sibling(node_11,2),text_1=child(span_1,!0);reset(span_1),template_effect(()=>set_text(text_1,get$3(item).label)),append($$anchor13, +fragment_9)},$$slots:{default:!0}})})}append($$anchor11,fragment_8)},$$slots:{default:!0}})});var node_12=sibling(node_9,2);component(node_12,()=>Tooltip_content,($$anchor10,Tooltip_Content)=>{Tooltip_Content($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p2=root_11$e(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9,fragment_7)},$$slots:{default:!0}})}),append($$anchor7, +fragment_6)};if_block(node_5,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_3)});var node_13=sibling(node_4,2);{var consequent_3=$$anchor6=>{var fragment_10=comment$2(),node_14=first_child(fragment_10);component(node_14,()=>Root$5,($$anchor7,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{var fragment_11=root_13$d(),node_15=first_child( +fragment_11);component(node_15,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{var fragment_12=comment$2(),node_16=first_child(fragment_12);component(node_16,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor11,{class:"flex cursor-pointer items-center gap-2",get onclick(){return attachmentMenu.callbacks.onFileUpload},children:($$anchor12,$$slotProps5)=>{const pdfItem=user_derived( +()=>ATTACHMENT_FILE_ITEMS.find(i=>i.id===AttachmentMenuItemId.PDF));var fragment_13=comment$2(),node_17=first_child(fragment_13);{var consequent_2=$$anchor13=>{var fragment_14=root_16$6(),node_18=first_child(fragment_14);component(node_18,()=>get$3(pdfItem).icon,($$anchor14,pdfItem_icon)=>{pdfItem_icon($$anchor14,{class:"h-4 w-4"})});var span_2=sibling(node_18,2),text_3=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_3,get$3(pdfItem).label)),append($$anchor13,fragment_14)};if_block( +node_17,$$render=>{get$3(pdfItem)&&$$render(consequent_2)})}append($$anchor12,fragment_13)},$$slots:{default:!0}})}),append($$anchor10,fragment_12)},$$slots:{default:!0}})});var node_19=sibling(node_15,2);component(node_19,()=>Tooltip_content,($$anchor9,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor9,{side:"right",children:($$anchor10,$$slotProps4)=>{var p_1=root_17$8();append($$anchor10,p_1)},$$slots:{default:!0}})}),append($$anchor8,fragment_11)},$$slots:{default:!0}})}),append($$anchor6,fragment_10)}, +d2=user_derived(()=>!attachmentMenu.isItemEnabled("hasVisionModality"));if_block(node_13,$$render=>{get$3(d2)&&$$render(consequent_3)})}var node_20=sibling(node_13,2);component(node_20,()=>Dropdown_menu_separator,($$anchor6,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor6,{})});var node_21=sibling(node_20,2);each(node_21,17,()=>ATTACHMENT_EXTRA_ITEMS,item=>item.id,($$anchor6,item)=>{var fragment_15=comment$2(),node_22=first_child(fragment_15);{var consequent_4=$$anchor7=>{var fragment_16=comment$2(), +node_23=first_child(fragment_16);component(node_23,()=>Root$5,($$anchor8,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_17=root_20$5(),node_24=first_child(fragment_17);component(node_24,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_18=comment$2(),node_25=first_child(fragment_18);component(node_25,()=>Dropdown_menu_item, +($$anchor12,DropdownMenu_Item_3)=>{DropdownMenu_Item_3($$anchor12,{class:"flex cursor-pointer items-center gap-2",onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor13,$$slotProps5)=>{var fragment_19=root_22$2(),node_26=first_child(fragment_19);component(node_26,()=>get$3(item).icon,($$anchor14,item_icon_2)=>{item_icon_2($$anchor14,{class:"h-4 w-4"})});var span_3=sibling(node_26,2),text_4=child(span_3,!0);reset(span_3),template_effect(()=>set_text(text_4,get$3(item).label)), +append($$anchor13,fragment_19)},$$slots:{default:!0}})}),append($$anchor11,fragment_18)},$$slots:{default:!0}})});var node_27=sibling(node_24,2);component(node_27,()=>Tooltip_content,($$anchor10,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p_2=root_23$5(),text_5=child(p_2,!0);reset(p_2),template_effect($0=>set_text(text_5,$0),[()=>attachmentMenu.getSystemMessageTooltip()]),append($$anchor11,p_2)},$$slots:{default:!0}})}),append($$anchor9, +fragment_17)},$$slots:{default:!0}})}),append($$anchor7,fragment_16)};if_block(node_22,$$render=>{get$3(item).id===AttachmentMenuItemId.SYSTEM_MESSAGE&&$$render(consequent_4)})}append($$anchor6,fragment_15)});var node_28=sibling(node_21,2);ChatFormActionAddToolsSubmenu(node_28,{});var node_29=sibling(node_28,2);ChatFormActionAddMcpServersSubmenu(node_29,{onMcpSettingsClick:handleMcpSettingsClick});var node_30=sibling(node_29,2);each(node_30,17,()=>ATTACHMENT_MCP_ITEMS,item=>item.id,($$anchor6,item)=>{ +var fragment_20=comment$2(),node_31=first_child(fragment_20);{var consequent_5=$$anchor7=>{var fragment_21=comment$2(),node_32=first_child(fragment_21);component(node_32,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_4)=>{DropdownMenu_Item_4($$anchor8,{class:"flex cursor-pointer items-center gap-2",onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor9,$$slotProps3)=>{var fragment_22=root_26$2(),node_33=first_child(fragment_22);component(node_33,()=>get$3(item).icon, +($$anchor10,item_icon_3)=>{item_icon_3($$anchor10,{class:"h-4 w-4"})});var span_4=sibling(node_33,2),text_6=child(span_4,!0);reset(span_4),template_effect(()=>set_text(text_6,get$3(item).label)),append($$anchor9,fragment_22)},$$slots:{default:!0}})}),append($$anchor7,fragment_21)},d_12=user_derived(()=>attachmentMenu.isItemVisible(get$3(item).visibleWhen));if_block(node_31,$$render=>{get$3(d_12)&&$$render(consequent_5)})}append($$anchor6,fragment_20)}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}), +append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div),pop()}function Sheet_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data\ +-[state=closed]:fade-out-0 data-[state=closed]:fill-mode-forwards data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,SheetPrimitive_Overlay)=>{SheetPrimitive_Overlay($$anchor2,spread_props({"data-slot":"sheet-overlay",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const sheetVariants=tv({base:`border-border/30 dark:border-border/20 da\ +ta-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fill-mode-forwards fixed z-50 flex flex-col gap-4 shadow-sm transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 ${PANEL_CLASSES}`,variants:{side:{top:"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",bottom:"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",left:"\ +data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",right:"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"}},defaultVariants:{side:"right"}});var root_3$R=from_html(' Close',1),root_2$12=from_html(" ",1),root_1$N=from_html(" ",1);function Sheet_content($$anchor,$$props){push$1($$props,!0);let ref2=prop( +$$props,"ref",15,null),side=prop($$props,"side",3,"right"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","side","portalProps","children"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,SheetPrimitive_Portal)=>{SheetPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$N(),node_1=first_child(fragment_1);Sheet_overlay(node_1,{});var node_2=sibling(node_1, +2);{let $0=user_derived(()=>cn$1(sheetVariants({side:side()}),$$props.class));component(node_2,()=>Dialog_content$1,($$anchor4,SheetPrimitive_Content)=>{SheetPrimitive_Content($$anchor4,spread_props({"data-slot":"sheet-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$12(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3);var node_4=sibling(node_3,2);component( +node_4,()=>Dialog_close,($$anchor6,SheetPrimitive_Close)=>{SheetPrimitive_Close($$anchor6,{class:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$R(),node_5=first_child(fragment_3);X(node_5,{class:"size-4"}),next$1(2),append($$anchor7,fragment_3)},$$slots:{ +default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}var root$1s=from_html("
");function Sheet_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1s();attribute_effect(div,$0=>({"data-slot":"sheet-header",class:$0,...restProps}),[()=>cn$1("flex fle\ +x-col gap-1.5 p-4",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Sheet_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("font-semibold text-foreground",$$props.class));component( +node2,()=>Dialog_title$1,($$anchor2,SheetPrimitive_Title)=>{SheetPrimitive_Title($$anchor2,spread_props({"data-slot":"sheet-title",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Sheet_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment); +{let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,SheetPrimitive_Description)=>{SheetPrimitive_Description($$anchor2,spread_props({"data-slot":"sheet-description",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$3=Dialog;var root_3$Q=from_html(" ",1),root_7$r=from_html(''),root_11$d=from_html("

"),root_9$k=from_html(" ",1),root_15$9=from_html(''),root_16$5=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_14$5=from_html(" ",1),root_20$4=from_html(''),root_21$3=from_html("

"),root_19$9=from_html(" ",1),root_23$4=from_html(''),root_2$11=from_html(' ',1),root_1$M=from_html(" ",1),root$1r=from_html("
");function ChatFormActionAddSheet($$anchor,$$props){ push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),sheetOpen=state$1(!1);const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(), hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props.onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props.onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(sheetOpen,!1)}),sheetItemClass="flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-accent active:bg-accent disabled:cursor-not-allowed disabled:opacity-50";var div=root$1r(),node2=child(div);component(node2,()=>Root$3, ($$anchor2,Sheet_Root)=>{Sheet_Root($$anchor2,{get open(){return get$3(sheetOpen)},set open($$value){set$1(sheetOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$M(),node_1=first_child(fragment);snippet(node_1,()=>$$props.trigger,()=>({disabled:disabled(),onclick:()=>set$1(sheetOpen,!0)}));var node_2=sibling(node_1,2);component(node_2,()=>Sheet_content,($$anchor4,Sheet_Content)=>{Sheet_Content($$anchor4,{side:"bottom",class:"max-h-[85vh] gap-0 overflow-y-auto",children:($$anchor5,$$slotProps2)=>{ @@ -6938,8 +6939,8 @@ cache2,percent=Math.round(actualProcessed/actualTotal*100),eta=getETASecs(actual 0&&time_ms>0){const tokensPerSecond=actualProcessed/(time_ms/1e3);return{tokensProcessed:actualProcessed,totalTokens:actualTotal,timeMs:time_ms,tokensPerSecond}}}return get$3(lastKnownProcessingStats)}function getLiveGenerationStats(){if(!get$3(processingState))return null;const{tokensDecoded,tokensPerSecond}=get$3(processingState);if(tokensDecoded<=0)return null;const timeMs=tokensPerSecond&&tokensPerSecond>0?tokensDecoded/tokensPerSecond*1e3:0;return{tokensGenerated:tokensDecoded,timeMs,tokensPerSecond:tokensPerSecond|| 0}}return{get processingState(){return get$3(processingState)},getProcessingDetails,getTechnicalDetails,getProcessingMessage,getPromptProgressText,getLiveProcessingStats,getLiveGenerationStats,shouldShowDetails,startMonitoring,stopMonitoring}}var root_1$y=from_html('
'),root_4$s=from_html('
 
'),root_6$l=from_html( '
'),root_7$j=from_html('
'),root_8$l=from_html('
'),root$15=from_html('
');function ChatMessageAssistant($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isLastAssistantMessage=prop($$props,"isLastAssistantMessage",3,!1),toolMessages=prop($$props,"toolMessages",19,()=>[]),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext(),isAgentic=user_derived(()=>hasAgenticContent($$props.message,toolMessages())),hasReasoning=user_derived(()=>!!$$props.message.reasoningContent),processingState=useProcessingState(); -let currentConfig=user_derived(config$1),isRouter=user_derived(isRouterMode),showRawOutput=state$1(!1),rawOutputContent=user_derived(()=>{const sections=deriveAgenticSections($$props.message,toolMessages(),[],!1),parts=[];for(const section of sections)switch(section.type){case AgenticSectionType.REASONING:case AgenticSectionType.REASONING_PENDING:parts.push(`${REASONING_TAGS.START} +div>');function ChatMessageAssistant($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isLastAssistantMessage=prop($$props,"isLastAssistantMessage",3,!1),toolMessages=prop($$props,"toolMessages",19,()=>[]),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext(),isAgentic=user_derived(()=>hasAgenticContent($$props.message,toolMessages())),processingState=useProcessingState();let currentConfig=user_derived(config$1),isRouter=user_derived(isRouterMode), +showRawOutput=state$1(!1),rawOutputContent=user_derived(()=>{const sections=deriveAgenticSections($$props.message,toolMessages(),[],!1),parts=[];for(const section of sections)switch(section.type){case AgenticSectionType.REASONING:case AgenticSectionType.REASONING_PENDING:parts.push(`${REASONING_TAGS.START} ${section.content} ${REASONING_TAGS.END}`);break;case AgenticSectionType.TEXT:parts.push(section.content);break;case AgenticSectionType.TOOL_CALL:case AgenticSectionType.TOOL_CALL_PENDING:case AgenticSectionType.TOOL_CALL_STREAMING:{const callObj={name:section.toolName};if(section.toolArgs)try{callObj.arguments=JSON.parse(section.toolArgs)}catch{callObj.arguments=section.toolArgs}parts.push(JSON.stringify(callObj,null,2)),section.toolResult&&parts.push(`[Tool Result] ${section.toolResult}`);break}}return parts.join(` @@ -6959,24 +6960,24 @@ isRouter)?$$render(consequent_5):$$render(alternate_2,-1)})}var node_6=sibling(n promptProgress=user_derived(()=>processingState.processingState?.promptProgress),isStillProcessingPrompt=user_derived(()=>get$3(promptProgress)&&get$3(promptProgress).processed{{let $0=user_derived(()=>!!get$3(isStillProcessingPrompt)),$1=user_derived(()=>get$3(liveStats)?.tokensProcessed),$2=user_derived(()=>get$3(liveStats)?.timeMs),$3=user_derived(()=>get$3(genStats)?.tokensGenerated), $4=user_derived(()=>get$3(genStats)?.timeMs);ChatMessageStatistics($$anchor4,{isLive:!0,get isProcessingPrompt(){return get$3($0)},get promptTokens(){return get$3($1)},get promptMs(){return get$3($2)},get predictedTokens(){return get$3($3)},get predictedMs(){return get$3($4)}})}};if_block(node_7,$$render=>{(get$3(liveStats)||get$3(genStats))&&$$render(consequent_7)})}append($$anchor3,fragment_6)},d2=user_derived(()=>isLoading()&&get$3(currentConfig).showMessageStats);if_block(node_6,$$render=>{get$3( currentConfig).showMessageStats&&$$props.message.timings&&$$props.message.timings.predicted_n&&$$props.message.timings.predicted_ms?$$render(consequent_6):get$3(d2)&&$$render(consequent_8,1)})}reset(div_7),bind_this(div_7,$$value=>set$1(statsContainerEl,$$value),()=>get$3(statsContainerEl)),append($$anchor2,div_7)};if_block(node_4,$$render=>{get$3(displayedModel)&&$$render(consequent_9)})}reset(div_6);var node_8=sibling(div_6,2);{var consequent_10=$$anchor2=>{{let $0=user_derived(()=>get$3(currentConfig). -enableContinueGeneration&&!get$3(hasReasoning)?$$props.onContinue:void 0);ChatMessageActionIcons($$anchor2,{get role(){return MessageRole.ASSISTANT},justify:"start",actionsPosition:"left",get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get deletionInfo(){return $$props.deletionInfo},get onCopy(){return $$props.onCopy},get onEdit(){return $$props.onEdit},get onRegenerate(){return $$props.onRegenerate},get onContinue(){return get$3($0)},get onForkConversation(){ -return $$props.onForkConversation},get onDelete(){return $$props.onDelete},get onConfirmDelete(){return $$props.onConfirmDelete},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get showRawOutputSwitch(){return get$3(currentConfig).showRawOutputSwitch},get rawOutputEnabled(){return get$3(showRawOutput)},onRawOutputToggle:enabled=>set$1(showRawOutput,enabled,!0)})}};if_block(node_8,$$render=>{$$props.message.timestamp&& -!editCtx.isEditing&&$$render(consequent_10)})}reset(div),template_effect(()=>set_class(div,1,`text-md group w-full leading-7.5 ${className()??""}`,"svelte-3902tz")),append($$anchor,div),pop()}var root_1$x=from_html('
'),root_2$O=from_html('
'),root_3$G=from_html("
"),root_4$r=from_html(" Cancel",1),root$14=from_html('
',1);function ChatMessageEditForm($$anchor,$$props){push$1($$props,!0);const editCtx=getMessageEditContext();let saveWithoutRegenerate=state$1(!1),showDiscardDialog=state$1(!1),branchAfterEdit=state$1( -!1),isUserMessage=user_derived(()=>editCtx.messageRole===MessageRole.USER),isAssistantMessage=user_derived(()=>editCtx.messageRole===MessageRole.ASSISTANT),hasUnsavedChanges=user_derived(()=>!!(editCtx.editedContent!==editCtx.originalContent||editCtx.editedUploadedFiles.length>0||editCtx.editedExtras.length!==editCtx.originalExtras.length||editCtx.editedExtras.some((extra,i)=>extra!==editCtx.originalExtras[i]))),hasAttachments=user_derived(()=>editCtx.editedExtras&&editCtx.editedExtras.length>0|| -editCtx.editedUploadedFiles&&editCtx.editedUploadedFiles.length>0),canSubmit=user_derived(()=>editCtx.editedContent.trim().length>0||get$3(hasAttachments));function handleGlobalKeydown(event2){event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),attemptCancel())}function attemptCancel(){get$3(hasUnsavedChanges)?set$1(showDiscardDialog,!0):editCtx.cancel()}function handleSubmit(){get$3(canSubmit)&&(get$3(isUserMessage)&&get$3(saveWithoutRegenerate)&&editCtx.showSaveOnlyOption?editCtx.saveOnly(): -(get$3(isAssistantMessage)&&editCtx.setShouldBranchAfterEdit&&editCtx.setShouldBranchAfterEdit(get$3(branchAfterEdit)),editCtx.save()),set$1(saveWithoutRegenerate,!1),set$1(branchAfterEdit,!1))}function handleAttachmentRemove(index2){const newExtras=[...editCtx.editedExtras];newExtras.splice(index2,1),editCtx.setExtras(newExtras)}function handleUploadedFileRemove(fileId){const newFiles=editCtx.editedUploadedFiles.filter(f=>f.id!==fileId);editCtx.setUploadedFiles(newFiles)}async function handleFilesAdd(files){ -const processed=await processFilesToChatUploaded(files);editCtx.setUploadedFiles([...editCtx.editedUploadedFiles,...processed])}user_effect(()=>(chatStore.setEditModeActive(handleFilesAdd),()=>{chatStore.clearEditMode()}));var fragment=root$14();event("keydown",$window,handleGlobalKeydown);var div=first_child(fragment),node2=child(div);{let $0=user_derived(()=>editCtx.messageRole===MessageRole.USER),$1=user_derived(()=>editCtx.messageRole===MessageRole.USER);ChatForm(node2,{get value(){return editCtx. -editedContent},get attachments(){return editCtx.editedExtras},placeholder:"Edit your message...",showMcpPromptButton:!0,get showAddButton(){return get$3($0)},get showModelSelector(){return get$3($1)},get onValueChange(){return editCtx.setContent},onAttachmentRemove:handleAttachmentRemove,onUploadedFileRemove:handleUploadedFileRemove,onFilesAdd:handleFilesAdd,onSubmit:handleSubmit,get uploadedFiles(){return editCtx.editedUploadedFiles},set uploadedFiles($$value){editCtx.editedUploadedFiles=$$value}})} -reset(div);var div_1=sibling(div,2),node_1=child(div_1);{var consequent=$$anchor2=>{var div_2=root_1$x(),node_2=child(div_2);Switch(node_2,{id:"save-only-switch",class:"scale-75",get checked(){return get$3(saveWithoutRegenerate)},set checked($$value){set$1(saveWithoutRegenerate,$$value,!0)}}),next$1(2),reset(div_2),append($$anchor2,div_2)},consequent_1=$$anchor2=>{var div_3=root_2$O(),node_3=child(div_3);Switch(node_3,{id:"branch-after-edit",class:"scale-75",get checked(){return get$3(branchAfterEdit)}, -set checked($$value){set$1(branchAfterEdit,$$value,!0)}}),next$1(2),reset(div_3),append($$anchor2,div_3)},alternate=$$anchor2=>{var div_4=root_3$G();append($$anchor2,div_4)};if_block(node_1,$$render=>{get$3(isUserMessage)&&editCtx.showSaveOnlyOption?$$render(consequent):get$3(isAssistantMessage)?$$render(consequent_1,1):$$render(alternate,-1)})}var node_4=sibling(node_1,2);Button(node_4,{class:"h-7 px-3 text-xs",onclick:attemptCancel,size:"sm",variant:"ghost",children:($$anchor2,$$slotProps)=>{var fragment_1=root_4$r(), -node_5=first_child(fragment_1);X(node_5,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div_1);var node_6=sibling(div_1,2);DialogConfirmation(node_6,{title:"Discard changes?",description:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard",cancelText:"Keep editing",variant:"destructive",get icon(){return Triangle_alert},get onConfirm(){return editCtx.cancel},onCancel:()=>set$1(showDiscardDialog,!1),get open(){return get$3( -showDiscardDialog)},set open($$value){set$1(showDiscardDialog,$$value,!0)}}),append($$anchor,fragment),pop()}var root_3$F=from_html('
'),root_2$N=from_html(" ",1),root$13=from_html('
');function ChatMessageUser($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext();var div=root$13(),node2=child( -div);{var consequent=$$anchor2=>{ChatMessageEditForm($$anchor2,{})},alternate=$$anchor2=>{var fragment_1=root_2$N(),node_1=first_child(fragment_1);ChatMessageUserBubble(node_1,{get content(){return $$props.message.content},get attachments(){return $$props.message.extra},renderMarkdown:!0});var node_2=sibling(node_1,2);{var consequent_1=$$anchor3=>{var div_1=root_3$F(),node_3=child(div_1);ChatMessageActionIcons(node_3,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"\ -end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onForkConversation(){return $$props.onForkConversation},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset( -div_1),append($$anchor3,div_1)};if_block(node_2,$$render=>{$$props.message.timestamp&&$$render(consequent_1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root_1$w=from_html('
'),root_4$q=from_html("
"),root_5$k=from_html(' '),root$12=from_html(" ",1);function ChatMessageUserBubble($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]),renderMarkdown=prop($$props,"renderMarkdown",3,!1),textColorClass=prop($$props,"textColorClass",3,"text-foreground"),cardBgClass=prop($$props,"cardBgClass",3,"dark:bg-primary/15"),maxHeightStyle=prop($$props,"maxHeightStyle",3,"max-height: var(--max-message-height);"),isMultiline=state$1(!1),messageElement=state$1( -void 0);const currentConfig=config$1();user_effect(()=>{if(!get$3(messageElement)||!$$props.content.trim())return;if($$props.content.includes(` +enableContinueGeneration?$$props.onContinue:void 0);ChatMessageActionIcons($$anchor2,{get role(){return MessageRole.ASSISTANT},justify:"start",actionsPosition:"left",get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get deletionInfo(){return $$props.deletionInfo},get onCopy(){return $$props.onCopy},get onEdit(){return $$props.onEdit},get onRegenerate(){return $$props.onRegenerate},get onContinue(){return get$3($0)},get onForkConversation(){return $$props. +onForkConversation},get onDelete(){return $$props.onDelete},get onConfirmDelete(){return $$props.onConfirmDelete},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get showRawOutputSwitch(){return get$3(currentConfig).showRawOutputSwitch},get rawOutputEnabled(){return get$3(showRawOutput)},onRawOutputToggle:enabled=>set$1(showRawOutput,enabled,!0)})}};if_block(node_8,$$render=>{$$props.message.timestamp&&!editCtx. +isEditing&&$$render(consequent_10)})}reset(div),template_effect(()=>set_class(div,1,`text-md group w-full leading-7.5 ${className()??""}`,"svelte-3902tz")),append($$anchor,div),pop()}var root_1$x=from_html('
'),root_2$O=from_html('
'),root_3$G=from_html("
"),root_4$r=from_html(" Cancel",1),root$14=from_html('
',1);function ChatMessageEditForm($$anchor,$$props){push$1($$props,!0);const editCtx=getMessageEditContext();let saveWithoutRegenerate=state$1(!1),showDiscardDialog=state$1(!1),branchAfterEdit=state$1(!1),isUserMessage=user_derived( +()=>editCtx.messageRole===MessageRole.USER),isAssistantMessage=user_derived(()=>editCtx.messageRole===MessageRole.ASSISTANT),hasUnsavedChanges=user_derived(()=>!!(editCtx.editedContent!==editCtx.originalContent||editCtx.editedUploadedFiles.length>0||editCtx.editedExtras.length!==editCtx.originalExtras.length||editCtx.editedExtras.some((extra,i)=>extra!==editCtx.originalExtras[i]))),hasAttachments=user_derived(()=>editCtx.editedExtras&&editCtx.editedExtras.length>0||editCtx.editedUploadedFiles&&editCtx. +editedUploadedFiles.length>0),canSubmit=user_derived(()=>editCtx.editedContent.trim().length>0||get$3(hasAttachments));function handleGlobalKeydown(event2){event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),attemptCancel())}function attemptCancel(){get$3(hasUnsavedChanges)?set$1(showDiscardDialog,!0):editCtx.cancel()}function handleSubmit(){get$3(canSubmit)&&(get$3(isUserMessage)&&get$3(saveWithoutRegenerate)&&editCtx.showSaveOnlyOption?editCtx.saveOnly():(get$3(isAssistantMessage)&&editCtx. +setShouldBranchAfterEdit&&editCtx.setShouldBranchAfterEdit(get$3(branchAfterEdit)),editCtx.save()),set$1(saveWithoutRegenerate,!1),set$1(branchAfterEdit,!1))}function handleAttachmentRemove(index2){const newExtras=[...editCtx.editedExtras];newExtras.splice(index2,1),editCtx.setExtras(newExtras)}function handleUploadedFileRemove(fileId){const newFiles=editCtx.editedUploadedFiles.filter(f=>f.id!==fileId);editCtx.setUploadedFiles(newFiles)}async function handleFilesAdd(files){const processed=await processFilesToChatUploaded( +files);editCtx.setUploadedFiles([...editCtx.editedUploadedFiles,...processed])}user_effect(()=>(chatStore.setEditModeActive(handleFilesAdd),()=>{chatStore.clearEditMode()}));var fragment=root$14();event("keydown",$window,handleGlobalKeydown);var div=first_child(fragment),node2=child(div);{let $0=user_derived(()=>editCtx.messageRole===MessageRole.USER),$1=user_derived(()=>editCtx.messageRole===MessageRole.USER);ChatForm(node2,{get value(){return editCtx.editedContent},get attachments(){return editCtx. +editedExtras},placeholder:"Edit your message...",showMcpPromptButton:!0,get showAddButton(){return get$3($0)},get showModelSelector(){return get$3($1)},get onValueChange(){return editCtx.setContent},onAttachmentRemove:handleAttachmentRemove,onUploadedFileRemove:handleUploadedFileRemove,onFilesAdd:handleFilesAdd,onSubmit:handleSubmit,get uploadedFiles(){return editCtx.editedUploadedFiles},set uploadedFiles($$value){editCtx.editedUploadedFiles=$$value}})}reset(div);var div_1=sibling(div,2),node_1=child( +div_1);{var consequent=$$anchor2=>{var div_2=root_1$x(),node_2=child(div_2);Switch(node_2,{id:"save-only-switch",class:"scale-75",get checked(){return get$3(saveWithoutRegenerate)},set checked($$value){set$1(saveWithoutRegenerate,$$value,!0)}}),next$1(2),reset(div_2),append($$anchor2,div_2)},consequent_1=$$anchor2=>{var div_3=root_2$O(),node_3=child(div_3);Switch(node_3,{id:"branch-after-edit",class:"scale-75",get checked(){return get$3(branchAfterEdit)},set checked($$value){set$1(branchAfterEdit, +$$value,!0)}}),next$1(2),reset(div_3),append($$anchor2,div_3)},alternate=$$anchor2=>{var div_4=root_3$G();append($$anchor2,div_4)};if_block(node_1,$$render=>{get$3(isUserMessage)&&editCtx.showSaveOnlyOption?$$render(consequent):get$3(isAssistantMessage)?$$render(consequent_1,1):$$render(alternate,-1)})}var node_4=sibling(node_1,2);Button(node_4,{class:"h-7 px-3 text-xs",onclick:attemptCancel,size:"sm",variant:"ghost",children:($$anchor2,$$slotProps)=>{var fragment_1=root_4$r(),node_5=first_child( +fragment_1);X(node_5,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div_1);var node_6=sibling(div_1,2);DialogConfirmation(node_6,{title:"Discard changes?",description:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard",cancelText:"Keep editing",variant:"destructive",get icon(){return Triangle_alert},get onConfirm(){return editCtx.cancel},onCancel:()=>set$1(showDiscardDialog,!1),get open(){return get$3(showDiscardDialog)}, +set open($$value){set$1(showDiscardDialog,$$value,!0)}}),append($$anchor,fragment),pop()}var root_3$F=from_html('
'),root_2$N=from_html(" ",1),root$13=from_html('
');function ChatMessageUser($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext();var div=root$13(),node2=child(div);{var consequent=$$anchor2=>{ +ChatMessageEditForm($$anchor2,{})},alternate=$$anchor2=>{var fragment_1=root_2$N(),node_1=first_child(fragment_1);ChatMessageUserBubble(node_1,{get content(){return $$props.message.content},get attachments(){return $$props.message.extra},renderMarkdown:!0});var node_2=sibling(node_1,2);{var consequent_1=$$anchor3=>{var div_1=root_3$F(),node_3=child(div_1);ChatMessageActionIcons(node_3,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props. +onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onForkConversation(){return $$props.onForkConversation},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_1),append($$anchor3,div_1)};if_block( +node_2,$$render=>{$$props.message.timestamp&&$$render(consequent_1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root_1$w=from_html('
'),root_4$q=from_html("
"),root_5$k=from_html(' '),root$12=from_html(" ",1);function ChatMessageUserBubble($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]),renderMarkdown=prop($$props,"renderMarkdown",3,!1),textColorClass=prop($$props,"textColorClass",3,"text-foreground"),cardBgClass=prop($$props,"cardBgClass",3,"dark:bg-primary/15"),maxHeightStyle=prop($$props,"maxHeightStyle",3,"max-height: var(--max-message-height);"),isMultiline=state$1(!1),messageElement=state$1(void 0);const currentConfig=config$1(); +user_effect(()=>{if(!get$3(messageElement)||!$$props.content.trim())return;if($$props.content.includes(` `)){set$1(isMultiline,!0);return}const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const element2=entry.target;set$1(isMultiline,element2.offsetHeight>24*1.5)}});return resizeObserver.observe(get$3(messageElement)),()=>{resizeObserver.disconnect()}});var fragment=root$12(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$w(),node_1=child(div);ChatAttachmentsList(node_1,{get attachments(){return attachments()},readonly:!0,imageHeight:"h-40"}),reset( div),append($$anchor2,div)};if_block(node2,$$render=>{attachments()&&attachments().length>0&&$$render(consequent)})}var node_2=sibling(node2,2);{var consequent_2=$$anchor2=>{{let $0=user_derived(()=>get$3(isMultiline)?"":void 0);Card($$anchor2,{get class(){return`max-w-[80%] overflow-y-auto rounded-[1.125rem] border-none bg-primary/5 px-3.75 py-1.5 ${textColorClass()??""} backdrop-blur-md data-[multiline]:py-2.5 ${cardBgClass()??""}`},get"data-multiline"(){return get$3($0)},get style(){return`${maxHeightStyle()?? ""} overflow-wrap: anywhere; word-break: break-word;`},children:($$anchor3,$$slotProps)=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent_1=$$anchor4=>{var div_1=root_4$q(),node_4=child(div_1);MarkdownContent(node_4,{class:"markdown-user-content -my-4",get content(){return $$props.content}}),reset(div_1),bind_this(div_1,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),append($$anchor4,div_1)},alternate=$$anchor4=>{var span=root_5$k(),text2=child(span,!0); diff --git a/tools/server/server-common.cpp b/tools/server/server-common.cpp index 21c843c0d69..0675ce31d06 100644 --- a/tools/server/server-common.cpp +++ b/tools/server/server-common.cpp @@ -1082,11 +1082,12 @@ json oaicompat_chat_params_parse( throw std::invalid_argument("Cannot have 2 or more assistant messages at the end of the list."); } - /* TODO: test this properly */ - inputs.reasoning_format = COMMON_REASONING_FORMAT_NONE; - - if ( inputs.enable_thinking ) { - throw std::invalid_argument("Assistant response prefill is incompatible with enable_thinking."); + // reject reasoning prefill on channel based templates that do not expose explicit thinking tags + if (!last_message.reasoning_content.empty() && inputs.enable_thinking) { + auto probe_params = common_chat_templates_apply(opt.tmpls.get(), inputs); + if (probe_params.supports_thinking && probe_params.thinking_end_tag.empty()) { + throw std::invalid_argument("Assistant prefill with reasoning_content is not supported yet for this template."); + } } inputs.add_generation_prompt = true; @@ -1098,6 +1099,42 @@ json oaicompat_chat_params_parse( /* Append assistant prefilled message */ if (prefill_assistant_message) { + const bool thinking_active = chat_params.supports_thinking && !chat_params.thinking_end_tag.empty(); + const bool has_reasoning = !last_message.reasoning_content.empty(); + const bool has_content = !last_message.content.empty() || !last_message.content_parts.empty(); + const bool mid_reasoning = has_reasoning && !has_content; + + // some templates inject thinking_start in generation_prompt, others let the model emit it + const bool gp_has_think = thinking_active + && chat_params.generation_prompt.find(chat_params.thinking_start_tag) != std::string::npos; + + // open the thinking block when reasoning is present and the template did not inject it + if (has_reasoning) { + if (thinking_active && !gp_has_think) { + chat_params.prompt += chat_params.thinking_start_tag; + } + chat_params.prompt += last_message.reasoning_content; + } + + if (thinking_active) { + if (mid_reasoning) { + // model continues inside the thinking block, keep generation_prompt open on think + if (!gp_has_think) { + chat_params.generation_prompt += chat_params.thinking_start_tag; + } + } else { + // close thinking block when reasoning is followed by content, or when the template forced it open + if (has_reasoning || gp_has_think) { + chat_params.prompt += chat_params.thinking_end_tag; + } + // strip thinking_start from generation_prompt so the parser routes model output as content + auto pos = chat_params.generation_prompt.rfind(chat_params.thinking_start_tag); + if (pos != std::string::npos) { + chat_params.generation_prompt = chat_params.generation_prompt.substr(0, pos); + } + } + } + if (!last_message.content_parts.empty()) { for (auto & p : last_message.content_parts) { chat_params.prompt += p.text; diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessageAssistant/ChatMessageAssistant.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessageAssistant/ChatMessageAssistant.svelte index 2fb6066d9e8..b4d69b932ab 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessageAssistant/ChatMessageAssistant.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessageAssistant/ChatMessageAssistant.svelte @@ -74,7 +74,6 @@ const editCtx = getMessageEditContext(); const isAgentic = $derived(hasAgenticContent(message, toolMessages)); - const hasReasoning = $derived(!!message.reasoningContent); const processingState = useProcessingState(); let currentConfig = $derived(config()); @@ -329,7 +328,7 @@ {onCopy} {onEdit} {onRegenerate} - onContinue={currentConfig.enableContinueGeneration && !hasReasoning ? onContinue : undefined} + onContinue={currentConfig.enableContinueGeneration ? onContinue : undefined} {onForkConversation} {onDelete} {onConfirmDelete} diff --git a/tools/server/webui/src/lib/constants/settings-registry.ts b/tools/server/webui/src/lib/constants/settings-registry.ts index 9c7cc2bf69c..809f780640c 100644 --- a/tools/server/webui/src/lib/constants/settings-registry.ts +++ b/tools/server/webui/src/lib/constants/settings-registry.ts @@ -122,7 +122,7 @@ const SETTINGS_REGISTRY: Record = { { key: SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION, label: 'Enable "Continue" button', - help: 'Enable "Continue" button for assistant messages. Currently works only with non-reasoning models.', + help: 'Enable "Continue" button for assistant messages, including reasoning models.', defaultValue: false, type: SettingsFieldType.CHECKBOX, section: SETTINGS_SECTION_SLUGS.GENERAL, diff --git a/tools/server/webui/src/lib/stores/chat.svelte.ts b/tools/server/webui/src/lib/stores/chat.svelte.ts index 7157068e9ba..7b4a4e04293 100644 --- a/tools/server/webui/src/lib/stores/chat.svelte.ts +++ b/tools/server/webui/src/lib/stores/chat.svelte.ts @@ -674,7 +674,8 @@ class ChatStore { }, onReasoningChunk: (chunk: string) => { streamedReasoningContent += chunk; - // Update UI to show reasoning is being received + // mark streaming state so a stop mid-thinking can persist the partial reasoning + this.setChatStreaming(convId, streamedContent, currentMessageId); const idx = conversationsStore.findMessageIndex(currentMessageId); conversationsStore.updateMessageAtIndex(idx, { reasoningContent: streamedReasoningContent @@ -989,38 +990,51 @@ class ChatStore { const conversationId = convId || conversationsStore.activeConversation?.id; if (!conversationId) return; const streamingState = this.getChatStreaming(conversationId); - if (!streamingState || !streamingState.response.trim()) return; + if (!streamingState) return; const messages = conversationId === conversationsStore.activeConversation?.id ? conversationsStore.activeMessages : await conversationsStore.getConversationMessages(conversationId); if (!messages.length) return; const lastMessage = messages[messages.length - 1]; - if (lastMessage?.role === MessageRole.ASSISTANT) { - try { - const updateData: { content: string; timings?: ChatMessageTimings } = { - content: streamingState.response + if (lastMessage?.role !== MessageRole.ASSISTANT) return; + + const partialContent = streamingState.response; + const partialReasoning = lastMessage.reasoningContent || ''; + + // nothing to persist when both content and reasoning are empty (e.g. stop before any token) + if (!partialContent.trim() && !partialReasoning.trim()) return; + + try { + const updateData: { + content: string; + reasoningContent?: string; + timings?: ChatMessageTimings; + } = { + content: partialContent + }; + if (partialReasoning) { + updateData.reasoningContent = partialReasoning; + } + const lastKnownState = this.getProcessingState(conversationId); + if (lastKnownState) { + updateData.timings = { + prompt_n: lastKnownState.promptTokens || 0, + prompt_ms: lastKnownState.promptMs, + predicted_n: lastKnownState.tokensDecoded || 0, + cache_n: lastKnownState.cacheTokens || 0, + predicted_ms: + lastKnownState.tokensPerSecond && lastKnownState.tokensDecoded + ? (lastKnownState.tokensDecoded / lastKnownState.tokensPerSecond) * 1000 + : undefined }; - const lastKnownState = this.getProcessingState(conversationId); - if (lastKnownState) { - updateData.timings = { - prompt_n: lastKnownState.promptTokens || 0, - prompt_ms: lastKnownState.promptMs, - predicted_n: lastKnownState.tokensDecoded || 0, - cache_n: lastKnownState.cacheTokens || 0, - predicted_ms: - lastKnownState.tokensPerSecond && lastKnownState.tokensDecoded - ? (lastKnownState.tokensDecoded / lastKnownState.tokensPerSecond) * 1000 - : undefined - }; - } - await DatabaseService.updateMessage(lastMessage.id, updateData); - lastMessage.content = streamingState.response; - if (updateData.timings) lastMessage.timings = updateData.timings; - } catch (error) { - lastMessage.content = streamingState.response; - console.error('Failed to save partial response:', error); } + await DatabaseService.updateMessage(lastMessage.id, updateData); + lastMessage.content = partialContent; + if (updateData.timings) lastMessage.timings = updateData.timings; + } catch (error) { + lastMessage.content = partialContent; + console.error('Failed to save partial response:', error); } } @@ -1265,7 +1279,11 @@ class ChatStore { const conversationContext = conversationsStore.activeMessages.slice(0, idx); const contextWithContinue = [ ...conversationContext, - { role: MessageRole.ASSISTANT as const, content: originalContent } + { + role: MessageRole.ASSISTANT as const, + content: originalContent, + reasoning_content: originalReasoning || undefined + } ]; let appendedContent = ''; @@ -1291,6 +1309,8 @@ class ChatStore { onReasoningChunk: (chunk: string) => { appendedReasoning += chunk; hasReceivedContent = true; + // mark streaming state so a stop mid-thinking can persist the partial reasoning + this.setChatStreaming(msg.convId, originalContent + appendedContent, msg.id); conversationsStore.updateMessageAtIndex(idx, { reasoningContent: originalReasoning + appendedReasoning }); From e75cd5efb5bd88328725cf6d19da4d26f2b5059e Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Wed, 13 May 2026 15:14:58 +0200 Subject: [PATCH 3/7] download: do not exit() on error (#23008) --- common/arg.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index f1f4c12a3ce..75a4d38d3da 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -357,8 +357,7 @@ static handle_model_result common_params_handle_model(struct common_params_model auto download_result = common_download_model(model, opts, true); if (download_result.model_path.empty()) { - LOG_ERR("error: failed to download model from Hugging Face\n"); - exit(1); + throw std::runtime_error("failed to download model from Hugging Face"); } model.name = model.hf_repo; @@ -380,8 +379,7 @@ static handle_model_result common_params_handle_model(struct common_params_model opts.offline = offline; auto download_result = common_download_model(model, opts); if (download_result.model_path.empty()) { - LOG_ERR("error: failed to download model from %s\n", model.url.c_str()); - exit(1); + throw std::runtime_error("failed to download model from " + model.url); } } From ad96bb8c0c5d40ebd05a04eb93b32f88f77d7025 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Wed, 13 May 2026 06:59:28 -0700 Subject: [PATCH 4/7] hexagon: add unary tanh op (#22999) --- ggml/src/ggml-hexagon/ggml-hexagon.cpp | 2 ++ ggml/src/ggml-hexagon/htp/htp-ops.h | 1 + ggml/src/ggml-hexagon/htp/main.c | 1 + ggml/src/ggml-hexagon/htp/unary-ops.c | 22 +++++++++++++++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-hexagon/ggml-hexagon.cpp b/ggml/src/ggml-hexagon/ggml-hexagon.cpp index d3c125dbc3d..3d1c9da8329 100644 --- a/ggml/src/ggml-hexagon/ggml-hexagon.cpp +++ b/ggml/src/ggml-hexagon/ggml-hexagon.cpp @@ -2865,6 +2865,7 @@ static htp_op_code op_remap_to_htp(const ggml_tensor * t) { case GGML_UNARY_OP_NEG: return HTP_OP_UNARY_NEG; case GGML_UNARY_OP_EXP: return HTP_OP_UNARY_EXP; case GGML_UNARY_OP_SOFTPLUS: return HTP_OP_UNARY_SOFTPLUS; + case GGML_UNARY_OP_TANH: return HTP_OP_UNARY_TANH; default: break; } @@ -3335,6 +3336,7 @@ static bool ggml_backend_hexagon_device_supports_op(ggml_backend_dev_t dev, cons case GGML_UNARY_OP_EXP: case GGML_UNARY_OP_SIGMOID: case GGML_UNARY_OP_SOFTPLUS: + case GGML_UNARY_OP_TANH: supp = ggml_hexagon_supported_unary(sess, op); break; case GGML_UNARY_OP_SILU: diff --git a/ggml/src/ggml-hexagon/htp/htp-ops.h b/ggml/src/ggml-hexagon/htp/htp-ops.h index 6203e3848b9..98db864dd42 100644 --- a/ggml/src/ggml-hexagon/htp/htp-ops.h +++ b/ggml/src/ggml-hexagon/htp/htp-ops.h @@ -62,6 +62,7 @@ enum htp_op_code { HTP_OP_UNARY_EXP, HTP_OP_UNARY_NEG, HTP_OP_UNARY_SOFTPLUS, + HTP_OP_UNARY_TANH, HTP_OP_GLU_SWIGLU, HTP_OP_GLU_SWIGLU_OAI, HTP_OP_GLU_GEGLU, diff --git a/ggml/src/ggml-hexagon/htp/main.c b/ggml/src/ggml-hexagon/htp/main.c index fa1e0698f4a..883a31d6163 100644 --- a/ggml/src/ggml-hexagon/htp/main.c +++ b/ggml/src/ggml-hexagon/htp/main.c @@ -542,6 +542,7 @@ static int execute_op(struct htp_ops_context * octx) { case HTP_OP_UNARY_SIGMOID: case HTP_OP_UNARY_NEG: case HTP_OP_UNARY_EXP: + case HTP_OP_UNARY_TANH: case HTP_OP_L2_NORM: return op_unary(octx); diff --git a/ggml/src/ggml-hexagon/htp/unary-ops.c b/ggml/src/ggml-hexagon/htp/unary-ops.c index 26a0e0bd793..d4ae89ee6f0 100644 --- a/ggml/src/ggml-hexagon/htp/unary-ops.c +++ b/ggml/src/ggml-hexagon/htp/unary-ops.c @@ -373,6 +373,21 @@ static void l2_norm_f32(const float * restrict src, } } +static void tanh_f32(const float * restrict src, + float * restrict dst, + uint8_t * restrict spad, + const uint32_t num_rows, + const uint32_t row_elems, + const size_t row_size, + int32_t * op_params) { + for (uint32_t ir = 0; ir < num_rows; ir++) { + const uint8_t * restrict src_local = (const uint8_t *)src + (ir * row_size); + uint8_t * restrict dst_local = (uint8_t *)dst + (ir * row_size); + + hvx_tanh_f32_aa(dst_local, src_local, row_elems); + } +} + static void unary_job_f32_per_thread(unsigned int nth, unsigned int ith, void * data) { const struct htp_unary_context * uctx = (const struct htp_unary_context *) data; struct htp_ops_context * octx = uctx->octx; @@ -477,6 +492,9 @@ static void unary_job_f32_per_thread(unsigned int nth, unsigned int ith, void * case HTP_OP_UNARY_SOFTPLUS: softplus_f32(src0_spad, dst_spad, NULL, block_size, ne0, src0_row_size_aligned, op_params); break; + case HTP_OP_UNARY_TANH: + tanh_f32(src0_spad, dst_spad, NULL, block_size, ne0, src0_row_size_aligned, op_params); + break; case HTP_OP_L2_NORM: l2_norm_f32(src0_spad, dst_spad, NULL, block_size, ne0, src0_row_size_aligned, op_params); break; @@ -547,10 +565,12 @@ static int execute_op_unary_f32(struct htp_ops_context * octx) { case HTP_OP_UNARY_SOFTPLUS: op_type = "softplus-f32"; break; + case HTP_OP_UNARY_TANH: + op_type = "tanh-f32"; + break; case HTP_OP_L2_NORM: op_type = "l2norm-f32"; break; - default: FARF(ERROR, "Unsupported unary Op %u\n", octx->op); return HTP_STATUS_NO_SUPPORT; From 7e16646015aa88d8c1ebf8fd3ddbe3c8cab7bef5 Mon Sep 17 00:00:00 2001 From: Ravi Panchumarthy Date: Wed, 13 May 2026 07:12:15 -0700 Subject: [PATCH 5/7] docs : Update OPENVINO.md (#22959) Updated OPENVINO.md with Validated models and quantizations Co-authored-by: Haarika Madaka --- docs/backend/OPENVINO.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/docs/backend/OPENVINO.md b/docs/backend/OPENVINO.md index c9c005a9981..b0e19abb090 100644 --- a/docs/backend/OPENVINO.md +++ b/docs/backend/OPENVINO.md @@ -57,17 +57,22 @@ Although OpenVINO supports a wide range of [Intel hardware](https://docs.openvin ## Validated Models -The following models have been validated for functionality on Intel® Core™ Ultra Series 1 and Series 2: - -- [Llama-3.2-1B-Instruct-GGUF](https://huggingface.co/unsloth/Llama-3.2-1B-Instruct-GGUF/) -- [Llama-3.1-8B-Instruct](https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF) -- [microsoft/Phi-3-mini-4k-instruct-gguf](https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf) -- [Qwen/Qwen2.5-1.5B-Instruct-GGUF](https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF) -- [Qwen/Qwen3-8B](https://huggingface.co/Qwen/Qwen3-8B-GGUF) -- [openbmb/MiniCPM-1B-sft-bf16](https://huggingface.co/openbmb/MiniCPM-S-1B-sft-gguf) -- [tencent/Hunyuan-7B-Instruct](https://huggingface.co/bartowski/tencent_Hunyuan-7B-Instruct-GGUF) -- [mistralai/Mistral-7B-Instruct-v0.3](https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF) -- [bartowski/DeepSeek-R1-Distill-Llama-8B-GGUF](https://huggingface.co/bartowski/DeepSeek-R1-Distill-Llama-8B-GGUF) +The following models were validated on Intel® Core™ Ultra Series 2. While our testing was limited, the OpenVINO backend is expected to work across a broad range of [Intel hardware](https://docs.openvino.ai/2026/about-openvino/release-notes-openvino/system-requirements.html). +- Use `GGML_OPENVINO_STATEFUL_EXECUTION=1` when using GPU device. +- `-fa 1` is required when running llama-bench with the OpenVINO backend. +- Additional model support, quantization formats and validations are work in progress. + +| Model | Validated | Known Issues | +| :------| :---------- | :-------------| +| [Llama-3.2-1B-Instruct](https://huggingface.co/unsloth/Llama-3.2-1B-Instruct-GGUF/) | `FP16`, `Q8_0`, `Q4_0`, `Q4_1`, `Q4_K_M` on CPU/GPU/NPU | — | +| [Meta-Llama-3.1-8B-Instruct](https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF) | `Q8_0`, `Q4_K_M` on CPU/GPU/NPU | `Q4_0_8_8`, `Q4_0_4_8`, `Q4_0_4_4` fail | +| [Phi-3-mini-4k-instruct](https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf) | `FP16`, `Q4` on CPU/NPU | GPU unsupported for `FP16` and `Q4` (`llama-cli`, `llama-bench`) | +| [Qwen2.5-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF) | `FP16`, `Q8_0`, `Q4_0`, `Q4_1`, `Q4_K_M` on CPU/GPU/NPU | — | +| [Qwen3-8B-Instruct](https://huggingface.co/Qwen/Qwen3-8B-GGUF) | `FP16`, `Q8_0`, `Q4_0`, `Q4_1`, `Q4_K_M` on CPU/NPU; GPU works via `llama-bench` | GPU `llama-cli` unsupported for all quantizations | +| [MiniCPM-V-2_6-GGUF](https://huggingface.co/openbmb/MiniCPM-V-2_6-gguf) | `Q4_0` on CPU/GPU/NPU | — | +| [DeepSeek-R1-Distill-Llama-8B](https://huggingface.co/bartowski/DeepSeek-R1-Distill-Llama-8B-GGUF) | `Q8_0`, `Q4_0`, `Q4_1`, `Q4_K_M` on CPU/GPU/NPU | — | +| [Hunyuan-7B-Instruct](https://huggingface.co/bartowski/tencent_Hunyuan-7B-Instruct-GGUF) | CPU: `Q8_0`, `Q4_0`, `Q4_1`, `Q4_K_M`; GPU: `Q8_0`, `Q4_0`, `Q4_1`; NPU (`llama-bench` only): `Q4_0`, `Q4_1`, `Q4_K_M` | GPU `Q4_K_M` unsupported; NPU `llama-cli` unsupported | +| [Mistral-7B-Instruct-v0.3](https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF/) | CPU/GPU: `Q8_0`, `Q4_K_M`; NPU: `Q8_0`, `Q4_K_M` (via `llama-bench`) | NPU `llama-cli` unsupported for `Q8_0`, `Q4_K_M` | ## Build Instructions From 46be24d12175f53f61051f450a289dc2926a9088 Mon Sep 17 00:00:00 2001 From: Pascal Date: Wed, 13 May 2026 16:16:02 +0200 Subject: [PATCH 6/7] webui: preserve system message on edit cancel (#22911) * webui: preserve system message on edit cancel when content is not the placeholder * chore: update webui build output --- tools/server/public/bundle.js | 112 +++++++++--------- .../ChatMessage/ChatMessage.svelte | 2 +- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/tools/server/public/bundle.js b/tools/server/public/bundle.js index 8c902da9db7..c2a9942a797 100644 --- a/tools/server/public/bundle.js +++ b/tools/server/public/bundle.js @@ -6805,62 +6805,62 @@ ${section.toolResult}`);break}}return parts.join(` `)}),editedExtras=user_derived(()=>$$props.message.extra?[...$$props.message.extra]:[]),editedUploadedFiles=state$1(proxy([])),isEditing2=state$1(!1),showDeleteDialog=state$1(!1),shouldBranchAfterEdit=state$1(!1),textareaElement=state$1(void 0),showSaveOnlyOption=user_derived(()=>$$props.message.role===MessageRole.USER),showBranchAfterEditOption=user_derived(()=>$$props.message.role===MessageRole.ASSISTANT);setMessageEditContext({get isEditing(){return get$3(isEditing2)},get editedContent(){return get$3( editedContent)},get editedExtras(){return get$3(editedExtras)},get editedUploadedFiles(){return get$3(editedUploadedFiles)},get originalContent(){return $$props.message.role===MessageRole.ASSISTANT?get$3(rawEditContent)??$$props.message.content:$$props.message.content},get originalExtras(){return $$props.message.extra||[]},get showSaveOnlyOption(){return get$3(showSaveOnlyOption)},get showBranchAfterEditOption(){return get$3(showBranchAfterEditOption)},get shouldBranchAfterEdit(){return get$3(shouldBranchAfterEdit)}, get messageRole(){return $$props.message.role},get rawEditContent(){return get$3(rawEditContent)},setContent:content2=>{set$1(editedContent,content2)},setExtras:extras=>{set$1(editedExtras,extras)},setUploadedFiles:files=>{set$1(editedUploadedFiles,files,!0)},setShouldBranchAfterEdit:value=>{set$1(shouldBranchAfterEdit,value,!0)},save:handleSaveEdit,saveOnly:handleSaveEditOnly,cancel:handleCancelEdit,startEdit:handleEdit});let mcpPromptExtra=user_derived(()=>{if($$props.message.role!==MessageRole. -USER||$$props.message.content.trim()||!$$props.message.extra||$$props.message.extra.length!==1)return null;const extra=$$props.message.extra[0];return extra.type===AttachmentType.MCP_PROMPT?extra:null});user_effect(()=>{const pendingId=pendingEditMessageId();pendingId&&pendingId===$$props.message.id&&!get$3(isEditing2)&&(handleEdit(),chatStore.clearPendingEditMessageId())});async function handleCancelEdit(){if(set$1(isEditing2,!1),$$props.message.role===MessageRole.SYSTEM){await chatStore.removeSystemPromptPlaceholder( -$$props.message.id)&&goto(ROUTES.START);return}set$1(editedContent,$$props.message.role===MessageRole.ASSISTANT?get$3(rawEditContent)||$$props.message.content||"":$$props.message.content),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0)}function handleCopy(){chatActions.copy($$props.message)}async function handleConfirmDelete(){$$props.message.role===MessageRole.SYSTEM?await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto( -ROUTES.START):chatActions.delete($$props.message),set$1(showDeleteDialog,!1)}async function handleDelete2(){set$1(deletionInfo,await chatStore.getDeletionInfo($$props.message.id),!0),set$1(showDeleteDialog,!0)}function handleEdit(){set$1(isEditing2,!0),$$props.message.role===MessageRole.SYSTEM&&$$props.message.content===SYSTEM_MESSAGE_PLACEHOLDER?set$1(editedContent,""):$$props.message.role===MessageRole.ASSISTANT?set$1(editedContent,get$3(rawEditContent)||$$props.message.content||""):set$1(editedContent, -$$props.message.content),get$3(textareaElement)?.focus(),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0),setTimeout(()=>{get$3(textareaElement)&&(get$3(textareaElement).focus(),get$3(textareaElement).setSelectionRange(get$3(textareaElement).value.length,get$3(textareaElement).value.length))},0)}function handleRegenerate(modelOverride){chatActions.regenerateWithBranching($$props.message,modelOverride)}function handleContinue(){chatActions.continueAssistantMessage( -$$props.message)}function handleForkConversation(options){chatActions.forkConversation($$props.message,options)}function handleNavigateToSibling(siblingId){chatActions.navigateToSibling(siblingId)}async function handleSaveEdit(){if($$props.message.role===MessageRole.SYSTEM){const newContent=get$3(editedContent).trim();if(!newContent){const conversationDeleted=await chatStore.removeSystemPromptPlaceholder($$props.message.id);set$1(isEditing2,!1),conversationDeleted&&goto(ROUTES.START);return}await DatabaseService. -updateMessage($$props.message.id,{content:newContent});const index2=conversationsStore.findMessageIndex($$props.message.id);index2!==-1&&conversationsStore.updateMessageAtIndex(index2,{content:newContent})}else if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editWithBranching($$props.message,get$3(editedContent).trim(),finalExtras)}else chatActions.editWithReplacement($$props.message,get$3(editedContent),get$3(shouldBranchAfterEdit));set$1(isEditing2, -!1),set$1(shouldBranchAfterEdit,!1),set$1(editedUploadedFiles,[],!0)}async function handleSaveEditOnly(){if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editUserMessagePreserveResponses($$props.message,get$3(editedContent).trim(),finalExtras)}set$1(isEditing2,!1),set$1(editedUploadedFiles,[],!0)}async function getMergedExtras(){if(get$3(editedUploadedFiles).length===0)return get$3(editedExtras);const plainFiles=snapshot(get$3(editedUploadedFiles)), -newExtras=(await parseFilesToMessageExtras(plainFiles))?.extras||[];return[...get$3(editedExtras),...newExtras]}function handleShowDeleteDialogChange(show){set$1(showDeleteDialog,show,!0)}var div=root$1f(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageSystem($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling, -onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value,!0)}})},consequent_1=$$anchor2=>{ChatMessageMcpPrompt($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},get mcpPrompt(){return get$3(mcpPromptExtra)},onConfirmDelete:handleConfirmDelete, -onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},consequent_2=$$anchor2=>{ChatMessageUser($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2, -onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},alternate=$$anchor2=>{ChatMessageAssistant($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get isLastAssistantMessage(){return isLastAssistantMessage()},get message(){return $$props.message},get toolMessages(){ -return toolMessages()},get messageContent(){return $$props.message.content},onConfirmDelete:handleConfirmDelete,onContinue:handleContinue,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onRegenerate:handleRegenerate,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)}, -set textareaElement($$value){set$1(textareaElement,$$value,!0)}})};if_block(node2,$$render=>{$$props.message.role===MessageRole.SYSTEM?$$render(consequent):get$3(mcpPromptExtra)?$$render(consequent_1,1):$$props.message.role===MessageRole.USER?$$render(consequent_2,2):$$render(alternate,-1)})}reset(div),action(div,$$node=>fadeInView?.($$node)),append($$anchor,div),pop()}var root_2$U=from_html('
'),root_7$n=from_html('
Receiving arguments...
'),root_8$o=from_html('
Response was truncated
'),root_4$w=from_html('
Arguments:
'),root_11$b=from_html('
Arguments:
'),root_13$b=from_html( -'
Waiting for result...
'),root_16$3=from_html(''),root_15$8=from_html('
',1),root_14$4=from_html('
'),root_17$6=from_html('
No\ - output
'),root_10$a=from_html('
Result:
',1),root_19$7=from_html('
'),root_21$1=from_html('
'),root_25$2=from_html('
'),root_23$3=from_html( -'
'),root$1e=from_html('
');function ChatMessageAgenticContent($$anchor,$$props){push$1($$props,!0);const renderSection=($$anchor2,section=noop$3,index2=noop$3)=>{var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=>{var div=root_2$U(),node_1=child(div);{let $0=user_derived( -()=>$$props.message?.extra);MarkdownContent(node_1,{get content(){return section().content},get attachments(){return get$3($0)}})}reset(div),append($$anchor3,div)},consequent_4=$$anchor3=>{const streamingIcon=user_derived(()=>(isStreaming(),Loader_circle)),streamingIconClass=user_derived(()=>isStreaming()?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section())),$1=user_derived(()=>section().toolName||"Tool call"),$2=user_derived(()=>isStreaming()?"":"incomplete"); -CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(streamingIcon)},get iconClass(){return get$3(streamingIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor4,$$slotProps)=>{var div_1=root_4$w(),div_2=child(div_1),node_2=sibling(child(div_2),2);{var consequent_1=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animat\ -e-spin"})};if_block(node_2,$$render=>{isStreaming()&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor5=>{{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode($$anchor5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}},consequent_3=$$anchor5=>{var div_3=root_7$n();append($$anchor5,div_3)},alternate=$$anchor5=>{var div_4=root_8$o();append($$anchor5,div_4)};if_block( -node_3,$$render=>{section().toolArgs?$$render(consequent_2):isStreaming()?$$render(consequent_3,1):$$render(alternate,-1)})}reset(div_1),append($$anchor4,div_1)},$$slots:{default:!0}})}},consequent_10=$$anchor3=>{const isPending=user_derived(()=>section().type===AgenticSectionType.TOOL_CALL_PENDING),toolIcon=user_derived(()=>get$3(isPending)?Loader_circle:Wrench),toolIconClass=user_derived(()=>get$3(isPending)?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section())), -$1=user_derived(()=>section().toolName||""),$2=user_derived(()=>get$3(isPending)?"executing...":void 0);CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(toolIcon)},get iconClass(){return get$3(toolIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return get$3(isPending)},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor4,$$slotProps)=>{var fragment_5=root_10$a(),node_4=first_child(fragment_5); -{var consequent_5=$$anchor5=>{var div_5=root_11$b(),node_5=sibling(child(div_5),2);{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode(node_5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}reset(div_5),append($$anchor5,div_5)};if_block(node_4,$$render=>{section().toolArgs&§ion().toolArgs!=="{}"&&$$render(consequent_5)})}var div_6=sibling(node_4,2),div_7=child(div_6),node_6=sibling(child(div_7),2);{ -var consequent_6=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animate-spin"})};if_block(node_6,$$render=>{get$3(isPending)&&$$render(consequent_6)})}reset(div_7);var node_7=sibling(div_7,2);{var consequent_7=$$anchor5=>{var div_8=root_13$b();append($$anchor5,div_8)},consequent_9=$$anchor5=>{var div_9=root_14$4();each(div_9,21,()=>section().parsedLines,index$2,($$anchor6,line)=>{var fragment_7=root_15$8(),div_10=first_child(fragment_7),text2=child(div_10,!0);reset(div_10);var node_8=sibling( -div_10,2);{var consequent_8=$$anchor7=>{var img=root_16$3();template_effect(()=>{set_attribute(img,"src",get$3(line).image.base64Url),set_attribute(img,"alt",get$3(line).image.name)}),append($$anchor7,img)};if_block(node_8,$$render=>{get$3(line).image&&$$render(consequent_8)})}template_effect(()=>set_text(text2,get$3(line).text)),append($$anchor6,fragment_7)}),reset(div_9),append($$anchor5,div_9)},alternate_1=$$anchor5=>{var div_11=root_17$6();append($$anchor5,div_11)};if_block(node_7,$$render=>{ -get$3(isPending)?$$render(consequent_7):section().toolResult?$$render(consequent_9,1):$$render(alternate_1,-1)})}reset(div_6),append($$anchor4,fragment_5)},$$slots:{default:!0}})}},consequent_11=$$anchor3=>{{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return Brain},title:"Reasoning",onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor4,$$slotProps)=>{var div_12=root_19$7(),div_13=child( -div_12),text_1=child(div_13,!0);reset(div_13),reset(div_12),template_effect(()=>set_text(text_1,section().content)),append($$anchor4,div_12)},$$slots:{default:!0}})}},consequent_12=$$anchor3=>{const reasoningTitle=user_derived(()=>isStreaming()?"Reasoning...":"Reasoning"),reasoningSubtitle=user_derived(()=>isStreaming()?"":"incomplete");{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return Brain},get title(){ -return get$3(reasoningTitle)},get subtitle(){return get$3(reasoningSubtitle)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor4,$$slotProps)=>{var div_14=root_21$1(),div_15=child(div_14),text_2=child(div_15,!0);reset(div_15),reset(div_14),template_effect(()=>set_text(text_2,section().content)),append($$anchor4,div_14)},$$slots:{default:!0}})}};if_block(node2,$$render=>{section().type===AgenticSectionType.TEXT?$$render(consequent):section(). -type===AgenticSectionType.TOOL_CALL_STREAMING?$$render(consequent_4,1):section().type===AgenticSectionType.TOOL_CALL||section().type===AgenticSectionType.TOOL_CALL_PENDING?$$render(consequent_10,2):section().type===AgenticSectionType.REASONING?$$render(consequent_11,3):section().type===AgenticSectionType.REASONING_PENDING&&$$render(consequent_12,4)})}append($$anchor2,fragment)};let toolMessages=prop($$props,"toolMessages",19,()=>[]),isStreaming=prop($$props,"isStreaming",3,!1),isLastAssistantMessage=prop( -$$props,"isLastAssistantMessage",3,!1),highlightTurns=prop($$props,"highlightTurns",3,!1),expandedStates=proxy({});const showToolCallInProgress=user_derived(()=>config$1().showToolCallInProgress),showThoughtInProgress=user_derived(()=>config$1().showThoughtInProgress);let permissionDismissed=state$1(!1);const pendingPermission=user_derived(()=>isStreaming()&&isLastAssistantMessage()?agenticPendingPermissionRequest($$props.message.convId):null);let prevPendingRef=null;user_effect(()=>{get$3(pendingPermission)!== -prevPendingRef&&(prevPendingRef=get$3(pendingPermission),get$3(pendingPermission)&&set$1(permissionDismissed,!1))});function handlePermission(decision){set$1(permissionDismissed,!0),agenticResolvePermission($$props.message.convId,decision)}let continueDismissed=state$1(!1);const pendingContinue=user_derived(()=>isStreaming()&&isLastAssistantMessage()?agenticPendingContinueRequest($$props.message.convId):!1);let prevContinueRef=!1;user_effect(()=>{get$3(pendingContinue)!==prevContinueRef&&(prevContinueRef= -get$3(pendingContinue),get$3(pendingContinue)&&set$1(continueDismissed,!1))});function handleContinue(shouldContinue){set$1(continueDismissed,!0),agenticResolveContinue($$props.message.convId,shouldContinue)}const sections=user_derived(()=>deriveAgenticSections($$props.message,toolMessages(),[],isStreaming())),sectionsParsed=user_derived(()=>get$3(sections).map(section=>({...section,parsedLines:section.toolResult?parseToolResultWithImages(section.toolResult,section.toolResultExtras||$$props.message?. -extra):[]}))),turnGroups=user_derived(()=>{const turns=[];let currentTurn=[],currentIndices=[],prevWasTool=!1;for(let i=0;i0&&(turns.push({sections:currentTurn,flatIndices:currentIndices}),currentTurn=[],currentIndices=[]),currentTurn. -push(section),currentIndices.push(i),prevWasTool=isTool}return currentTurn.length>0&&turns.push({sections:currentTurn,flatIndices:currentIndices}),turns});function getDefaultExpanded(section){return section.type===AgenticSectionType.TOOL_CALL_PENDING||section.type===AgenticSectionType.TOOL_CALL_STREAMING?get$3(showToolCallInProgress):section.type===AgenticSectionType.REASONING_PENDING?get$3(showThoughtInProgress):!1}function isExpanded(index2,section){return expandedStates[index2]!==void 0?expandedStates[index2]: -getDefaultExpanded(section)}function toggleExpanded(index2,section){const currentState=isExpanded(index2,section);expandedStates[index2]=!currentState}function buildTurnAgenticTimings(stats){return{turns:1,toolCallsCount:stats.toolCalls.length,toolsMs:stats.toolsMs,toolCalls:stats.toolCalls,llm:stats.llm}}var div_16=root$1e(),node_9=child(div_16);{var consequent_14=$$anchor2=>{var fragment_10=comment$2(),node_10=first_child(fragment_10);each(node_10,17,()=>get$3(turnGroups),index$2,($$anchor3,turn,turnIndex)=>{ -const turnStats=user_derived(()=>$$props.message?.timings?.agentic?.perTurn?.[turnIndex]);var div_17=root_23$3(),span=child(div_17);span.textContent=`Turn ${turnIndex+1}`;var node_11=sibling(span,2);each(node_11,19,()=>get$3(turn).sections,(section,sIdx)=>get$3(turn).flatIndices[sIdx],($$anchor4,section,sIdx)=>{renderSection($$anchor4,()=>get$3(section),()=>get$3(turn).flatIndices[get$3(sIdx)])});var node_12=sibling(node_11,2);{var consequent_13=$$anchor4=>{var div_18=root_25$2(),node_13=child(div_18); -{let $0=user_derived(()=>get$3(turnStats).toolCalls.length>0?buildTurnAgenticTimings(get$3(turnStats)):void 0);ChatMessageStatistics(node_13,{get promptTokens(){return get$3(turnStats).llm.prompt_n},get promptMs(){return get$3(turnStats).llm.prompt_ms},get predictedTokens(){return get$3(turnStats).llm.predicted_n},get predictedMs(){return get$3(turnStats).llm.predicted_ms},get agenticTimings(){return get$3($0)},get initialView(){return ChatMessageStatsView.GENERATION},hideSummary:!0})}reset(div_18), -append($$anchor4,div_18)};if_block(node_12,$$render=>{get$3(turnStats)&&$$render(consequent_13)})}reset(div_17),append($$anchor3,div_17)}),append($$anchor2,fragment_10)},alternate_2=$$anchor2=>{var fragment_12=comment$2(),node_14=first_child(fragment_12);each(node_14,17,()=>get$3(sectionsParsed),index$2,($$anchor3,section,index2)=>{renderSection($$anchor3,()=>get$3(section),()=>index2)}),append($$anchor2,fragment_12)};if_block(node_9,$$render=>{highlightTurns()&&get$3(turnGroups).length>1?$$render( -consequent_14):$$render(alternate_2,-1)})}var node_15=sibling(node_9,2);{var consequent_15=$$anchor2=>{ChatMessageActionCardPermissionRequest($$anchor2,{get toolName(){return get$3(pendingPermission).toolName},get serverLabel(){return get$3(pendingPermission).serverLabel},onDecision:handlePermission})};if_block(node_15,$$render=>{get$3(pendingPermission)&&!get$3(permissionDismissed)&&$$render(consequent_15)})}var node_16=sibling(node_15,2);{var consequent_16=$$anchor2=>{ChatMessageActionCardContinueRequest( -$$anchor2,{onDecision:handleContinue})};if_block(node_16,$$render=>{get$3(pendingContinue)&&!get$3(continueDismissed)&&$$render(consequent_16)})}reset(div_16),append($$anchor,div_16),pop()}var root$1d=from_html("
");function Button_group_root($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy","class","children"]);var div=root$1d();attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("flex items-center [&>*:first-child]:roun\ -ded-r-none [&>*:last-child]:rounded-l-none [&>*:not(:first-child):not(:last-child)]:rounded-none",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children),reset(div),append($$anchor,div),pop()}var root$1c=from_html("
");function Button_group_separator($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);var div=root$1c();attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("shrink-0 self-stretch bg-border","w-\ -px")]),append($$anchor,div),pop()}var root_2$T=from_html('from ',1),root_1$B=from_html('Allow use of ?',1),root_5$n=from_html(" ",1),root_10$9=from_html("Always allow
 
tool",1),root_9$h=from_html(" ",1),root_4$v=from_html(" ",1),root_3$K=from_html(" ",1);function ChatMessageActionCardPermissionRequest($$anchor,$$props){push$1($$props,!0),ChatMessageActionCard($$anchor,{get icon(){ -return Shield_question},message:$$anchor2=>{next$1();var fragment_1=root_1$B(),span=sibling(first_child(fragment_1)),text2=child(span,!0);reset(span);var node2=sibling(span,2);{var consequent=$$anchor3=>{var fragment_2=root_2$T(),span_1=sibling(first_child(fragment_2)),text_1=child(span_1,!0);reset(span_1),template_effect(()=>set_text(text_1,$$props.serverLabel)),append($$anchor3,fragment_2)};if_block(node2,$$render=>{$$props.serverLabel&&$$render(consequent)})}next$1(),template_effect(()=>set_text( -text2,$$props.toolName)),append($$anchor2,fragment_1)},actions:$$anchor2=>{var fragment_3=root_3$K(),node_1=first_child(fragment_3);component(node_1,()=>Root$4,($$anchor3,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_4$v(),node_2=first_child(fragment_4);component(node_2,()=>Button_group_root,($$anchor5,ButtonGroup_Root)=>{ButtonGroup_Root($$anchor5,{class:"overflow-hidden rounded-md bg-foreground text-white shadow-sm dark:bg-secondary da\ -rk:text-foreground",children:($$anchor6,$$slotProps2)=>{var fragment_5=root_5$n(),node_3=first_child(fragment_5);Button(node_3,{class:"rounded-none! shadow-none!",size:"sm",onclick:()=>$$props.onDecision(ToolPermissionDecision.ONCE),children:($$anchor7,$$slotProps3)=>{next$1();var text_2=text$8("Allow once");append($$anchor7,text_2)},$$slots:{default:!0}});var node_4=sibling(node_3,2);component(node_4,()=>Button_group_separator,($$anchor7,ButtonGroup_Separator)=>{ButtonGroup_Separator($$anchor7, -{})});var node_5=sibling(node_4,2);component(node_5,()=>Dropdown_menu_trigger,($$anchor7,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor7,{children:($$anchor8,$$slotProps3)=>{Button($$anchor8,{size:"sm",class:"rounded-none! !ps-2 shadow-none!",children:($$anchor9,$$slotProps4)=>{Chevron_down($$anchor9,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})},$$slots:{default:!0}})}),append($$anchor6,fragment_5)},$$slots:{default:!0}})});var node_6=sibling(node_2,2);component(node_6,()=>Dropdown_menu_content, -($$anchor5,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor5,{align:"start",class:"min-w-[8rem]",children:($$anchor6,$$slotProps2)=>{var fragment_8=root_9$h(),node_7=first_child(fragment_8);component(node_7,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor7,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS),children:($$anchor8,$$slotProps3)=>{next$1();var fragment_9=root_10$9(),pre=sibling(first_child(fragment_9)),text_3=child(pre,!0);reset(pre),next$1(), -template_effect(()=>set_text(text_3,$$props.toolName)),append($$anchor8,fragment_9)},$$slots:{default:!0}})});var node_8=sibling(node_7,2);{var consequent_1=$$anchor7=>{var fragment_10=comment$2(),node_9=first_child(fragment_10);component(node_9,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor8,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS_SERVER),children:($$anchor9,$$slotProps3)=>{next$1();var text_4=text$8();template_effect(()=>set_text(text_4, -`Always allow all tools from ${$$props.serverLabel??""}`)),append($$anchor9,text_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_10)},alternate=$$anchor7=>{const source2=user_derived(()=>toolsStore.getToolSource($$props.toolName)),providerName=user_derived(()=>get$3(source2)===ToolSource.BUILTIN?TOOL_SERVER_LABELS[ToolSource.BUILTIN]:get$3(source2)===ToolSource.CUSTOM?TOOL_SERVER_LABELS[ToolSource.CUSTOM]:"MCP Tools");var fragment_12=comment$2(),node_10=first_child(fragment_12);component( -node_10,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor8,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS_SERVER),children:($$anchor9,$$slotProps3)=>{next$1();var text_5=text$8();template_effect(()=>set_text(text_5,`Approve all tools from ${get$3(providerName)??""}`)),append($$anchor9,text_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_12)};if_block(node_8,$$render=>{$$props.serverLabel?$$render(consequent_1):$$render(alternate,-1)})}append( -$$anchor6,fragment_8)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})});var node_11=sibling(node_1,2);Button(node_11,{variant:"destructive",size:"sm",class:"text-destructive hover:text-destructive",onclick:()=>$$props.onDecision(ToolPermissionDecision.DENY),children:($$anchor3,$$slotProps)=>{next$1();var text_6=text$8("Deny");append($$anchor3,text_6)},$$slots:{default:!0}}),append($$anchor2,fragment_3)}}),pop()}var root$1b=from_html('
');function ChatMessageActionCard($$anchor,$$props){var div=root$1b(),div_1=child(div),node2=child(div_1);component(node2,()=>$$props.icon,($$anchor2,IconComponent_1)=>{IconComponent_1($$anchor2,{class:"h-4 w-4 shrink-0 text-muted-foreground"})});var span=sibling(node2,2),node_1=child(span);snippet(node_1,()=>$$props.message),reset( -span),reset(div_1);var div_2=sibling(div_1,2),node_2=child(div_2);snippet(node_2,()=>$$props.actions),reset(div_2),reset(div),append($$anchor,div)}var root_2$S=from_html(" ",1);function ChatMessageActionCardContinueRequest($$anchor,$$props){push$1($$props,!0),ChatMessageActionCard($$anchor,{get icon(){return Rotate_cw},message:$$anchor2=>{next$1();var text2=text$8("Agentic turn limit reached. Continue?");append($$anchor2,text2)},actions:$$anchor2=>{var fragment_1=root_2$S(),node2=first_child( -fragment_1);Button(node2,{size:"sm",onclick:()=>$$props.onDecision(!0),children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8("Continue");append($$anchor3,text_1)},$$slots:{default:!0}});var node_1=sibling(node2,2);Button(node_1,{variant:"destructive",size:"sm",class:"text-destructive hover:text-destructive",onclick:()=>$$props.onDecision(!1),children:($$anchor3,$$slotProps)=>{next$1();var text_2=text$8("Stop");append($$anchor3,text_2)},$$slots:{default:!0}}),append($$anchor2,fragment_1)}}), -pop()}var root_6$o=from_html('
Show raw output
'),root_7$m=from_html('
'),root$1a=from_html('
',1);function ChatMessageActionIcons($$anchor,$$props){push$1($$props,!0);let siblingInfo=prop($$props,"siblingInfo",3,null),showDeleteDialog=prop($$props,"showDeleteDialog",7),showRawOutputSwitch=prop($$props,"showRawOutputSwitch",3,!1),rawOutputEnabled=prop($$props,"rawOutputEnabled",3,!1),showForkDialog=state$1(!1),forkName=state$1(""),forkIncludeAttachments=state$1(!0);function handleConfirmDelete(){$$props.onConfirmDelete(),$$props.onShowDeleteDialogChange(!1)}function handleOpenForkDialog(){ +USER||$$props.message.content.trim()||!$$props.message.extra||$$props.message.extra.length!==1)return null;const extra=$$props.message.extra[0];return extra.type===AttachmentType.MCP_PROMPT?extra:null});user_effect(()=>{const pendingId=pendingEditMessageId();pendingId&&pendingId===$$props.message.id&&!get$3(isEditing2)&&(handleEdit(),chatStore.clearPendingEditMessageId())});async function handleCancelEdit(){if(set$1(isEditing2,!1),$$props.message.role===MessageRole.SYSTEM&&$$props.message.content=== +SYSTEM_MESSAGE_PLACEHOLDER){await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto(ROUTES.START);return}set$1(editedContent,$$props.message.role===MessageRole.ASSISTANT?get$3(rawEditContent)||$$props.message.content||"":$$props.message.content),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0)}function handleCopy(){chatActions.copy($$props.message)}async function handleConfirmDelete(){$$props.message.role===MessageRole.SYSTEM? +await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto(ROUTES.START):chatActions.delete($$props.message),set$1(showDeleteDialog,!1)}async function handleDelete2(){set$1(deletionInfo,await chatStore.getDeletionInfo($$props.message.id),!0),set$1(showDeleteDialog,!0)}function handleEdit(){set$1(isEditing2,!0),$$props.message.role===MessageRole.SYSTEM&&$$props.message.content===SYSTEM_MESSAGE_PLACEHOLDER?set$1(editedContent,""):$$props.message.role===MessageRole.ASSISTANT?set$1(editedContent, +get$3(rawEditContent)||$$props.message.content||""):set$1(editedContent,$$props.message.content),get$3(textareaElement)?.focus(),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0),setTimeout(()=>{get$3(textareaElement)&&(get$3(textareaElement).focus(),get$3(textareaElement).setSelectionRange(get$3(textareaElement).value.length,get$3(textareaElement).value.length))},0)}function handleRegenerate(modelOverride){chatActions.regenerateWithBranching( +$$props.message,modelOverride)}function handleContinue(){chatActions.continueAssistantMessage($$props.message)}function handleForkConversation(options){chatActions.forkConversation($$props.message,options)}function handleNavigateToSibling(siblingId){chatActions.navigateToSibling(siblingId)}async function handleSaveEdit(){if($$props.message.role===MessageRole.SYSTEM){const newContent=get$3(editedContent).trim();if(!newContent){const conversationDeleted=await chatStore.removeSystemPromptPlaceholder( +$$props.message.id);set$1(isEditing2,!1),conversationDeleted&&goto(ROUTES.START);return}await DatabaseService.updateMessage($$props.message.id,{content:newContent});const index2=conversationsStore.findMessageIndex($$props.message.id);index2!==-1&&conversationsStore.updateMessageAtIndex(index2,{content:newContent})}else if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editWithBranching($$props.message,get$3(editedContent).trim(),finalExtras)}else chatActions. +editWithReplacement($$props.message,get$3(editedContent),get$3(shouldBranchAfterEdit));set$1(isEditing2,!1),set$1(shouldBranchAfterEdit,!1),set$1(editedUploadedFiles,[],!0)}async function handleSaveEditOnly(){if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editUserMessagePreserveResponses($$props.message,get$3(editedContent).trim(),finalExtras)}set$1(isEditing2,!1),set$1(editedUploadedFiles,[],!0)}async function getMergedExtras(){if(get$3(editedUploadedFiles). +length===0)return get$3(editedExtras);const plainFiles=snapshot(get$3(editedUploadedFiles)),newExtras=(await parseFilesToMessageExtras(plainFiles))?.extras||[];return[...get$3(editedExtras),...newExtras]}function handleShowDeleteDialogChange(show){set$1(showDeleteDialog,show,!0)}var div=root$1f(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageSystem($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete, +onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value,!0)}})},consequent_1=$$anchor2=>{ChatMessageMcpPrompt($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)}, +get message(){return $$props.message},get mcpPrompt(){return get$3(mcpPromptExtra)},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},consequent_2=$$anchor2=>{ChatMessageUser($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)}, +get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},alternate=$$anchor2=>{ChatMessageAssistant($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)}, +get isLastAssistantMessage(){return isLastAssistantMessage()},get message(){return $$props.message},get toolMessages(){return toolMessages()},get messageContent(){return $$props.message.content},onConfirmDelete:handleConfirmDelete,onContinue:handleContinue,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onRegenerate:handleRegenerate,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){ +return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value,!0)}})};if_block(node2,$$render=>{$$props.message.role===MessageRole.SYSTEM?$$render(consequent):get$3(mcpPromptExtra)?$$render(consequent_1,1):$$props.message.role===MessageRole.USER?$$render(consequent_2,2):$$render(alternate,-1)})}reset(div),action(div,$$node=>fadeInView?.($$node)),append($$anchor,div),pop()}var root_2$U=from_html( +'
'),root_7$n=from_html('
Receiving arguments...
'),root_8$o=from_html('
Response was truncated
'),root_4$w=from_html('
Arguments:
'),root_11$b=from_html( +'
Arguments:
'),root_13$b=from_html('
Waiting for result...
'),root_16$3=from_html(''),root_15$8=from_html('
',1),root_14$4=from_html('
'),root_17$6=from_html('
No output
'),root_10$a=from_html('
Result:
',1),root_19$7=from_html('
'),root_21$1=from_html('
'),root_25$2=from_html('
'),root_23$3=from_html('
'),root$1e=from_html('
');function ChatMessageAgenticContent($$anchor,$$props){push$1($$props,!0);const renderSection=($$anchor2,section=noop$3,index2=noop$3)=>{ +var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=>{var div=root_2$U(),node_1=child(div);{let $0=user_derived(()=>$$props.message?.extra);MarkdownContent(node_1,{get content(){return section().content},get attachments(){return get$3($0)}})}reset(div),append($$anchor3,div)},consequent_4=$$anchor3=>{const streamingIcon=user_derived(()=>(isStreaming(),Loader_circle)),streamingIconClass=user_derived(()=>isStreaming()?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived( +()=>isExpanded(index2(),section())),$1=user_derived(()=>section().toolName||"Tool call"),$2=user_derived(()=>isStreaming()?"":"incomplete");CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(streamingIcon)},get iconClass(){return get$3(streamingIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor4,$$slotProps)=>{var div_1=root_4$w(), +div_2=child(div_1),node_2=sibling(child(div_2),2);{var consequent_1=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animate-spin"})};if_block(node_2,$$render=>{isStreaming()&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor5=>{{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode($$anchor5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}},consequent_3=$$anchor5=>{ +var div_3=root_7$n();append($$anchor5,div_3)},alternate=$$anchor5=>{var div_4=root_8$o();append($$anchor5,div_4)};if_block(node_3,$$render=>{section().toolArgs?$$render(consequent_2):isStreaming()?$$render(consequent_3,1):$$render(alternate,-1)})}reset(div_1),append($$anchor4,div_1)},$$slots:{default:!0}})}},consequent_10=$$anchor3=>{const isPending=user_derived(()=>section().type===AgenticSectionType.TOOL_CALL_PENDING),toolIcon=user_derived(()=>get$3(isPending)?Loader_circle:Wrench),toolIconClass=user_derived( +()=>get$3(isPending)?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section())),$1=user_derived(()=>section().toolName||""),$2=user_derived(()=>get$3(isPending)?"executing...":void 0);CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(toolIcon)},get iconClass(){return get$3(toolIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return get$3(isPending)},onToggle:()=>toggleExpanded( +index2(),section()),children:($$anchor4,$$slotProps)=>{var fragment_5=root_10$a(),node_4=first_child(fragment_5);{var consequent_5=$$anchor5=>{var div_5=root_11$b(),node_5=sibling(child(div_5),2);{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode(node_5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}reset(div_5),append($$anchor5,div_5)};if_block(node_4,$$render=>{section().toolArgs&§ion().toolArgs!== +"{}"&&$$render(consequent_5)})}var div_6=sibling(node_4,2),div_7=child(div_6),node_6=sibling(child(div_7),2);{var consequent_6=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animate-spin"})};if_block(node_6,$$render=>{get$3(isPending)&&$$render(consequent_6)})}reset(div_7);var node_7=sibling(div_7,2);{var consequent_7=$$anchor5=>{var div_8=root_13$b();append($$anchor5,div_8)},consequent_9=$$anchor5=>{var div_9=root_14$4();each(div_9,21,()=>section().parsedLines,index$2,($$anchor6,line)=>{var fragment_7=root_15$8(), +div_10=first_child(fragment_7),text2=child(div_10,!0);reset(div_10);var node_8=sibling(div_10,2);{var consequent_8=$$anchor7=>{var img=root_16$3();template_effect(()=>{set_attribute(img,"src",get$3(line).image.base64Url),set_attribute(img,"alt",get$3(line).image.name)}),append($$anchor7,img)};if_block(node_8,$$render=>{get$3(line).image&&$$render(consequent_8)})}template_effect(()=>set_text(text2,get$3(line).text)),append($$anchor6,fragment_7)}),reset(div_9),append($$anchor5,div_9)},alternate_1=$$anchor5=>{ +var div_11=root_17$6();append($$anchor5,div_11)};if_block(node_7,$$render=>{get$3(isPending)?$$render(consequent_7):section().toolResult?$$render(consequent_9,1):$$render(alternate_1,-1)})}reset(div_6),append($$anchor4,fragment_5)},$$slots:{default:!0}})}},consequent_11=$$anchor3=>{{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return Brain},title:"Reasoning",onToggle:()=>toggleExpanded(index2(),section()), +children:($$anchor4,$$slotProps)=>{var div_12=root_19$7(),div_13=child(div_12),text_1=child(div_13,!0);reset(div_13),reset(div_12),template_effect(()=>set_text(text_1,section().content)),append($$anchor4,div_12)},$$slots:{default:!0}})}},consequent_12=$$anchor3=>{const reasoningTitle=user_derived(()=>isStreaming()?"Reasoning...":"Reasoning"),reasoningSubtitle=user_derived(()=>isStreaming()?"":"incomplete");{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor3, +{get open(){return get$3($0)},class:"my-2",get icon(){return Brain},get title(){return get$3(reasoningTitle)},get subtitle(){return get$3(reasoningSubtitle)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor4,$$slotProps)=>{var div_14=root_21$1(),div_15=child(div_14),text_2=child(div_15,!0);reset(div_15),reset(div_14),template_effect(()=>set_text(text_2,section().content)),append($$anchor4,div_14)},$$slots:{default:!0}})}};if_block(node2,$$render=>{ +section().type===AgenticSectionType.TEXT?$$render(consequent):section().type===AgenticSectionType.TOOL_CALL_STREAMING?$$render(consequent_4,1):section().type===AgenticSectionType.TOOL_CALL||section().type===AgenticSectionType.TOOL_CALL_PENDING?$$render(consequent_10,2):section().type===AgenticSectionType.REASONING?$$render(consequent_11,3):section().type===AgenticSectionType.REASONING_PENDING&&$$render(consequent_12,4)})}append($$anchor2,fragment)};let toolMessages=prop($$props,"toolMessages",19, +()=>[]),isStreaming=prop($$props,"isStreaming",3,!1),isLastAssistantMessage=prop($$props,"isLastAssistantMessage",3,!1),highlightTurns=prop($$props,"highlightTurns",3,!1),expandedStates=proxy({});const showToolCallInProgress=user_derived(()=>config$1().showToolCallInProgress),showThoughtInProgress=user_derived(()=>config$1().showThoughtInProgress);let permissionDismissed=state$1(!1);const pendingPermission=user_derived(()=>isStreaming()&&isLastAssistantMessage()?agenticPendingPermissionRequest($$props. +message.convId):null);let prevPendingRef=null;user_effect(()=>{get$3(pendingPermission)!==prevPendingRef&&(prevPendingRef=get$3(pendingPermission),get$3(pendingPermission)&&set$1(permissionDismissed,!1))});function handlePermission(decision){set$1(permissionDismissed,!0),agenticResolvePermission($$props.message.convId,decision)}let continueDismissed=state$1(!1);const pendingContinue=user_derived(()=>isStreaming()&&isLastAssistantMessage()?agenticPendingContinueRequest($$props.message.convId):!1); +let prevContinueRef=!1;user_effect(()=>{get$3(pendingContinue)!==prevContinueRef&&(prevContinueRef=get$3(pendingContinue),get$3(pendingContinue)&&set$1(continueDismissed,!1))});function handleContinue(shouldContinue){set$1(continueDismissed,!0),agenticResolveContinue($$props.message.convId,shouldContinue)}const sections=user_derived(()=>deriveAgenticSections($$props.message,toolMessages(),[],isStreaming())),sectionsParsed=user_derived(()=>get$3(sections).map(section=>({...section,parsedLines:section. +toolResult?parseToolResultWithImages(section.toolResult,section.toolResultExtras||$$props.message?.extra):[]}))),turnGroups=user_derived(()=>{const turns=[];let currentTurn=[],currentIndices=[],prevWasTool=!1;for(let i=0;i0&&(turns. +push({sections:currentTurn,flatIndices:currentIndices}),currentTurn=[],currentIndices=[]),currentTurn.push(section),currentIndices.push(i),prevWasTool=isTool}return currentTurn.length>0&&turns.push({sections:currentTurn,flatIndices:currentIndices}),turns});function getDefaultExpanded(section){return section.type===AgenticSectionType.TOOL_CALL_PENDING||section.type===AgenticSectionType.TOOL_CALL_STREAMING?get$3(showToolCallInProgress):section.type===AgenticSectionType.REASONING_PENDING?get$3(showThoughtInProgress): +!1}function isExpanded(index2,section){return expandedStates[index2]!==void 0?expandedStates[index2]:getDefaultExpanded(section)}function toggleExpanded(index2,section){const currentState=isExpanded(index2,section);expandedStates[index2]=!currentState}function buildTurnAgenticTimings(stats){return{turns:1,toolCallsCount:stats.toolCalls.length,toolsMs:stats.toolsMs,toolCalls:stats.toolCalls,llm:stats.llm}}var div_16=root$1e(),node_9=child(div_16);{var consequent_14=$$anchor2=>{var fragment_10=comment$2(), +node_10=first_child(fragment_10);each(node_10,17,()=>get$3(turnGroups),index$2,($$anchor3,turn,turnIndex)=>{const turnStats=user_derived(()=>$$props.message?.timings?.agentic?.perTurn?.[turnIndex]);var div_17=root_23$3(),span=child(div_17);span.textContent=`Turn ${turnIndex+1}`;var node_11=sibling(span,2);each(node_11,19,()=>get$3(turn).sections,(section,sIdx)=>get$3(turn).flatIndices[sIdx],($$anchor4,section,sIdx)=>{renderSection($$anchor4,()=>get$3(section),()=>get$3(turn).flatIndices[get$3(sIdx)])}); +var node_12=sibling(node_11,2);{var consequent_13=$$anchor4=>{var div_18=root_25$2(),node_13=child(div_18);{let $0=user_derived(()=>get$3(turnStats).toolCalls.length>0?buildTurnAgenticTimings(get$3(turnStats)):void 0);ChatMessageStatistics(node_13,{get promptTokens(){return get$3(turnStats).llm.prompt_n},get promptMs(){return get$3(turnStats).llm.prompt_ms},get predictedTokens(){return get$3(turnStats).llm.predicted_n},get predictedMs(){return get$3(turnStats).llm.predicted_ms},get agenticTimings(){ +return get$3($0)},get initialView(){return ChatMessageStatsView.GENERATION},hideSummary:!0})}reset(div_18),append($$anchor4,div_18)};if_block(node_12,$$render=>{get$3(turnStats)&&$$render(consequent_13)})}reset(div_17),append($$anchor3,div_17)}),append($$anchor2,fragment_10)},alternate_2=$$anchor2=>{var fragment_12=comment$2(),node_14=first_child(fragment_12);each(node_14,17,()=>get$3(sectionsParsed),index$2,($$anchor3,section,index2)=>{renderSection($$anchor3,()=>get$3(section),()=>index2)}),append( +$$anchor2,fragment_12)};if_block(node_9,$$render=>{highlightTurns()&&get$3(turnGroups).length>1?$$render(consequent_14):$$render(alternate_2,-1)})}var node_15=sibling(node_9,2);{var consequent_15=$$anchor2=>{ChatMessageActionCardPermissionRequest($$anchor2,{get toolName(){return get$3(pendingPermission).toolName},get serverLabel(){return get$3(pendingPermission).serverLabel},onDecision:handlePermission})};if_block(node_15,$$render=>{get$3(pendingPermission)&&!get$3(permissionDismissed)&&$$render( +consequent_15)})}var node_16=sibling(node_15,2);{var consequent_16=$$anchor2=>{ChatMessageActionCardContinueRequest($$anchor2,{onDecision:handleContinue})};if_block(node_16,$$render=>{get$3(pendingContinue)&&!get$3(continueDismissed)&&$$render(consequent_16)})}reset(div_16),append($$anchor,div_16),pop()}var root$1d=from_html("
");function Button_group_root($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy","class","children"]);var div=root$1d(); +attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("flex items-center [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none [&>*:not(:first-child):not(:last-child)]:rounded-none",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children),reset(div),append($$anchor,div),pop()}var root$1c=from_html("
");function Button_group_separator($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);var div=root$1c(); +attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("shrink-0 self-stretch bg-border","w-px")]),append($$anchor,div),pop()}var root_2$T=from_html('from ',1),root_1$B=from_html('Allow use of ?',1),root_5$n=from_html(" ",1),root_10$9=from_html("Always allow
 
tool",1),root_9$h=from_html(" ",1),root_4$v=from_html(" ",1),root_3$K=from_html(" ",1);function ChatMessageActionCardPermissionRequest($$anchor,$$props){ +push$1($$props,!0),ChatMessageActionCard($$anchor,{get icon(){return Shield_question},message:$$anchor2=>{next$1();var fragment_1=root_1$B(),span=sibling(first_child(fragment_1)),text2=child(span,!0);reset(span);var node2=sibling(span,2);{var consequent=$$anchor3=>{var fragment_2=root_2$T(),span_1=sibling(first_child(fragment_2)),text_1=child(span_1,!0);reset(span_1),template_effect(()=>set_text(text_1,$$props.serverLabel)),append($$anchor3,fragment_2)};if_block(node2,$$render=>{$$props.serverLabel&& +$$render(consequent)})}next$1(),template_effect(()=>set_text(text2,$$props.toolName)),append($$anchor2,fragment_1)},actions:$$anchor2=>{var fragment_3=root_3$K(),node_1=first_child(fragment_3);component(node_1,()=>Root$4,($$anchor3,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_4$v(),node_2=first_child(fragment_4);component(node_2,()=>Button_group_root,($$anchor5,ButtonGroup_Root)=>{ButtonGroup_Root($$anchor5,{class:"overflow-hidden round\ +ed-md bg-foreground text-white shadow-sm dark:bg-secondary dark:text-foreground",children:($$anchor6,$$slotProps2)=>{var fragment_5=root_5$n(),node_3=first_child(fragment_5);Button(node_3,{class:"rounded-none! shadow-none!",size:"sm",onclick:()=>$$props.onDecision(ToolPermissionDecision.ONCE),children:($$anchor7,$$slotProps3)=>{next$1();var text_2=text$8("Allow once");append($$anchor7,text_2)},$$slots:{default:!0}});var node_4=sibling(node_3,2);component(node_4,()=>Button_group_separator,($$anchor7,ButtonGroup_Separator)=>{ +ButtonGroup_Separator($$anchor7,{})});var node_5=sibling(node_4,2);component(node_5,()=>Dropdown_menu_trigger,($$anchor7,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor7,{children:($$anchor8,$$slotProps3)=>{Button($$anchor8,{size:"sm",class:"rounded-none! !ps-2 shadow-none!",children:($$anchor9,$$slotProps4)=>{Chevron_down($$anchor9,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})},$$slots:{default:!0}})}),append($$anchor6,fragment_5)},$$slots:{default:!0}})});var node_6=sibling(node_2,2);component( +node_6,()=>Dropdown_menu_content,($$anchor5,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor5,{align:"start",class:"min-w-[8rem]",children:($$anchor6,$$slotProps2)=>{var fragment_8=root_9$h(),node_7=first_child(fragment_8);component(node_7,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor7,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS),children:($$anchor8,$$slotProps3)=>{next$1();var fragment_9=root_10$9(),pre=sibling(first_child(fragment_9)), +text_3=child(pre,!0);reset(pre),next$1(),template_effect(()=>set_text(text_3,$$props.toolName)),append($$anchor8,fragment_9)},$$slots:{default:!0}})});var node_8=sibling(node_7,2);{var consequent_1=$$anchor7=>{var fragment_10=comment$2(),node_9=first_child(fragment_10);component(node_9,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor8,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS_SERVER),children:($$anchor9,$$slotProps3)=>{next$1();var text_4=text$8(); +template_effect(()=>set_text(text_4,`Always allow all tools from ${$$props.serverLabel??""}`)),append($$anchor9,text_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_10)},alternate=$$anchor7=>{const source2=user_derived(()=>toolsStore.getToolSource($$props.toolName)),providerName=user_derived(()=>get$3(source2)===ToolSource.BUILTIN?TOOL_SERVER_LABELS[ToolSource.BUILTIN]:get$3(source2)===ToolSource.CUSTOM?TOOL_SERVER_LABELS[ToolSource.CUSTOM]:"MCP Tools");var fragment_12=comment$2(),node_10=first_child( +fragment_12);component(node_10,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor8,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS_SERVER),children:($$anchor9,$$slotProps3)=>{next$1();var text_5=text$8();template_effect(()=>set_text(text_5,`Approve all tools from ${get$3(providerName)??""}`)),append($$anchor9,text_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_12)};if_block(node_8,$$render=>{$$props.serverLabel?$$render(consequent_1):$$render( +alternate,-1)})}append($$anchor6,fragment_8)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})});var node_11=sibling(node_1,2);Button(node_11,{variant:"destructive",size:"sm",class:"text-destructive hover:text-destructive",onclick:()=>$$props.onDecision(ToolPermissionDecision.DENY),children:($$anchor3,$$slotProps)=>{next$1();var text_6=text$8("Deny");append($$anchor3,text_6)},$$slots:{default:!0}}),append($$anchor2,fragment_3)}}),pop()}var root$1b=from_html('
');function ChatMessageActionCard($$anchor,$$props){var div=root$1b(),div_1=child(div),node2=child(div_1);component(node2,()=>$$props.icon,($$anchor2,IconComponent_1)=>{IconComponent_1($$anchor2,{class:"h-4 w-4 shrink-0 text-muted-foreground"})});var span=sibling(node2,2),node_1=child(span);snippet(node_1, +()=>$$props.message),reset(span),reset(div_1);var div_2=sibling(div_1,2),node_2=child(div_2);snippet(node_2,()=>$$props.actions),reset(div_2),reset(div),append($$anchor,div)}var root_2$S=from_html(" ",1);function ChatMessageActionCardContinueRequest($$anchor,$$props){push$1($$props,!0),ChatMessageActionCard($$anchor,{get icon(){return Rotate_cw},message:$$anchor2=>{next$1();var text2=text$8("Agentic turn limit reached. Continue?");append($$anchor2,text2)},actions:$$anchor2=>{var fragment_1=root_2$S(), +node2=first_child(fragment_1);Button(node2,{size:"sm",onclick:()=>$$props.onDecision(!0),children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8("Continue");append($$anchor3,text_1)},$$slots:{default:!0}});var node_1=sibling(node2,2);Button(node_1,{variant:"destructive",size:"sm",class:"text-destructive hover:text-destructive",onclick:()=>$$props.onDecision(!1),children:($$anchor3,$$slotProps)=>{next$1();var text_2=text$8("Stop");append($$anchor3,text_2)},$$slots:{default:!0}}),append($$anchor2, +fragment_1)}}),pop()}var root_6$o=from_html('
Show raw output
'),root_7$m=from_html('
'),root$1a=from_html('
<\ +!>
',1);function ChatMessageActionIcons($$anchor,$$props){push$1($$props,!0);let siblingInfo=prop($$props,"siblingInfo",3,null),showDeleteDialog=prop($$props,"showDeleteDialog",7),showRawOutputSwitch=prop($$props,"showRawOutputSwitch",3,!1),rawOutputEnabled=prop($$props,"rawOutputEnabled",3,!1),showForkDialog=state$1(!1),forkName=state$1(""),forkIncludeAttachments=state$1(!0);function handleConfirmDelete(){$$props.onConfirmDelete(),$$props.onShowDeleteDialogChange(!1)}function handleOpenForkDialog(){ const conv=activeConversation();set$1(forkName,`Fork of ${conv?.name??"Conversation"}`),set$1(forkIncludeAttachments,!0),set$1(showForkDialog,!0)}function handleConfirmFork(){$$props.onForkConversation?.({name:get$3(forkName).trim(),includeAttachments:get$3(forkIncludeAttachments)}),set$1(showForkDialog,!1)}var fragment=root$1a(),div=first_child(fragment),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{ChatMessageActionIconsBranchingControls($$anchor2,{get siblingInfo(){return siblingInfo()}, get onNavigateToSibling(){return $$props.onNavigateToSibling}})};if_block(node2,$$render=>{siblingInfo()&&siblingInfo().totalSiblings>1&&$$render(consequent)})}var div_2=sibling(node2,2),node_1=child(div_2);ActionIcon(node_1,{get icon(){return Copy},tooltip:"Copy",get onclick(){return $$props.onCopy}});var node_2=sibling(node_1,2);{var consequent_1=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Square_pen},tooltip:"Edit",get onclick(){return $$props.onEdit}})};if_block(node_2,$$render=>{$$props. onEdit&&$$render(consequent_1)})}var node_3=sibling(node_2,2);{var consequent_2=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Refresh_cw},tooltip:"Regenerate",onclick:()=>$$props.onRegenerate()})};if_block(node_3,$$render=>{$$props.role===MessageRole.ASSISTANT&&$$props.onRegenerate&&$$render(consequent_2)})}var node_4=sibling(node_3,2);{var consequent_3=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Arrow_right},tooltip:"Continue",get onclick(){return $$props.onContinue}})};if_block(node_4, diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessage.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessage.svelte index 758a84f9111..4d0b302d272 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessage.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage/ChatMessage.svelte @@ -179,7 +179,7 @@ isEditing = false; // If canceling a new system message with placeholder content, remove it without deleting children - if (message.role === MessageRole.SYSTEM) { + if (message.role === MessageRole.SYSTEM && message.content === SYSTEM_MESSAGE_PLACEHOLDER) { const conversationDeleted = await chatStore.removeSystemPromptPlaceholder(message.id); if (conversationDeleted) { From 2dfeca31cc34ffa03c510e75438455d9c6773ffb Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Wed, 13 May 2026 16:39:36 +0200 Subject: [PATCH 7/7] webui: Deduplicate model aliases in data + handle single/multiple aliases in UI (#22979) * fix: Deduplicate aliases + display single alias instead of default name or 2+ aliases as tags * refactor: Address review comments --- tools/server/public/bundle.js | 4512 +++++++++-------- .../lib/components/app/models/ModelId.svelte | 21 +- 2 files changed, 2271 insertions(+), 2262 deletions(-) diff --git a/tools/server/public/bundle.js b/tools/server/public/bundle.js index c2a9942a797..5a42071e5f2 100644 --- a/tools/server/public/bundle.js +++ b/tools/server/public/bundle.js @@ -5160,13 +5160,13 @@ d-md border px-2 py-0.75 text-sm transition-colors",getStatusClass($$props.attac var div=root_7$u(),node_6=child(div);{var consequent_3=$$anchor6=>{var img=root_8$t();template_effect(()=>{set_attribute(img,"alt",$$props.attachment.resource.serverName),set_attribute(img,"src",get$3(favicon))}),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor6,img)};if_block(node_6,$$render=>{get$3(favicon)&&$$render(consequent_3)})}var span_1=sibling(node_6,2),text_1=child(span_1,!0);reset(span_1),reset(div),template_effect(()=>set_text(text_1,get$3( serverName))),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);const info$1=($$anchor,text2=noop$3)=>{var fragment=comment$2(),node_2=first_child(fragment);{var consequent_1=$$anchor2=>{var span=root_6$u(),text_3=child(span,!0);reset(span),template_effect(()=>set_text(text_3,text2())),append($$anchor2,span)};if_block(node_2,$$render=>{text2()&&$$render(consequent_1)})}append($$anchor,fragment)}; var root_2$19=from_html("
"),root_1$13=from_html('
'),root_3$Y=from_html('
'),root_4$E=from_html('
'),root_6$u=from_html(' '),root_9$m=from_html('
'),root_11$f=from_html(' ',1),root_7$t=from_html(''),root_13$f=from_html('');function ChatAttachmentsListItemThumbnailFile($$anchor,$$props){ +iv class="flex min-w-0 flex-1 flex-col items-start text-left"> '),root_11$g=from_html(' ',1),root_7$t=from_html(''),root_13$f=from_html('');function ChatAttachmentsListItemThumbnailFile($$anchor,$$props){ push$1($$props,!0);const textPreview=($$anchor2,content2=noop$3)=>{var div=root_1$13(),div_1=child(div),text_1=child(div_1,!0);reset(div_1);var node2=sibling(div_1,2);{var consequent=$$anchor3=>{var div_2=root_2$19();template_effect(()=>set_class(div_2,1,`pointer-events-none absolute right-0 bottom-0 left-0 h-4 bg-gradient-to-t from-muted to-transparent ${readonly2()?"h-6":""}`)),append($$anchor3,div_2)};if_block(node2,$$render=>{content2().length>150&&$$render(consequent)})}reset(div),template_effect( $0=>{set_class(div_1,1,`font-mono text-xs leading-relaxed break-words whitespace-pre-wrap text-muted-foreground ${readonly2()?"":"max-h-3rem line-height-1.2"}`),set_text(text_1,$0)},[()=>getPreviewText(content2())]),append($$anchor2,div)},removeButton=$$anchor2=>{var div_3=root_3$Y(),node_1=child(div_3);ActionIcon(node_1,{get icon(){return X},tooltip:"Remove",stopPropagationOnClick:!0,onclick:()=>$$props.onRemove?.($$props.id)}),reset(div_3),append($$anchor2,div_3)},fileIcon=$$anchor2=>{var div_4=root_4$E(), text_2=child(div_4,!0);reset(div_4),template_effect(()=>set_text(text_2,get$3(fileTypeLabel))),append($$anchor2,div_4)};let className=prop($$props,"class",3,""),readonly2=prop($$props,"readonly",3,!1),isPdf=user_derived(()=>isPdfFile$1($$props.attachment,$$props.uploadedFile)),isPdfWithContent=user_derived(()=>get$3(isPdf)&&!!$$props.textContent),isText=user_derived(()=>isTextFile($$props.attachment,$$props.uploadedFile)),isTextWithContent=user_derived(()=>get$3(isText)&&!!$$props.textContent),fileTypeLabel=user_derived( ()=>{if($$props.uploadedFile?.type)return getFileTypeLabel($$props.uploadedFile.type);if($$props.attachment){if("mimeType"in $$props.attachment&&$$props.attachment.mimeType)return getFileTypeLabel($$props.attachment.mimeType);if($$props.attachment.type)return getFileTypeLabel($$props.attachment.type)}return getFileTypeLabel($$props.name)}),pdfProcessingMode=user_derived(()=>$$props.attachment?.type===AttachmentType.PDF?$$props.attachment.processedAsImages?"Sent as Image":"Sent as Text":null);var fragment_1=comment$2(), node_3=first_child(fragment_1);{var consequent_6=$$anchor2=>{var button=root_7$t(),node_4=child(button);{var consequent_2=$$anchor3=>{removeButton($$anchor3)};if_block(node_4,$$render=>{readonly2()||$$render(consequent_2)})}var div_5=sibling(node_4,2),node_5=child(div_5);{var consequent_4=$$anchor3=>{var div_6=root_9$m(),div_7=child(div_6),span_1=child(div_7),text_4=child(span_1,!0);reset(span_1);var node_6=sibling(span_1,2);{let $0=user_derived(()=>get$3(pdfProcessingMode)||($$props.size?formatFileSize( -$$props.size):void 0));info$1(node_6,()=>get$3($0))}var node_7=sibling(node_6,2);{var consequent_3=$$anchor4=>{textPreview($$anchor4,()=>$$props.textContent)};if_block(node_7,$$render=>{$$props.textContent&&$$render(consequent_3)})}reset(div_7),reset(div_6),template_effect(()=>set_text(text_4,$$props.name)),append($$anchor3,div_6)},alternate=$$anchor3=>{var fragment_4=root_11$f(),span_2=first_child(fragment_4),text_5=child(span_2,!0);reset(span_2);var node_8=sibling(span_2,2);{var consequent_5=$$anchor4=>{ +$$props.size):void 0));info$1(node_6,()=>get$3($0))}var node_7=sibling(node_6,2);{var consequent_3=$$anchor4=>{textPreview($$anchor4,()=>$$props.textContent)};if_block(node_7,$$render=>{$$props.textContent&&$$render(consequent_3)})}reset(div_7),reset(div_6),template_effect(()=>set_text(text_4,$$props.name)),append($$anchor3,div_6)},alternate=$$anchor3=>{var fragment_4=root_11$g(),span_2=first_child(fragment_4),text_5=child(span_2,!0);reset(span_2);var node_8=sibling(span_2,2);{var consequent_5=$$anchor4=>{ textPreview($$anchor4,()=>$$props.textContent)};if_block(node_8,$$render=>{$$props.textContent&&$$render(consequent_5)})}template_effect(()=>set_text(text_5,$$props.name)),append($$anchor3,fragment_4)};if_block(node_5,$$render=>{readonly2()?$$render(consequent_4):$$render(alternate,-1)})}reset(div_5),reset(button),template_effect(()=>{set_attribute(button,"aria-label",readonly2()?`Preview ${$$props.name}`:void 0),set_class(button,1,`rounded-lg border border-border bg-muted p-3 ${className()??""}\ cursor-pointer ${readonly2()?"w-full max-w-2xl transition-shadow hover:shadow-md":`group relative text-left ${$$props.textContent?"max-h-24 max-w-72":"max-w-36"}`} overflow-hidden`),set_class(div_5,1,clsx([!readonly2()&&"pr-8","overflow-hidden"]))}),delegated("click",button,function(...$$args){$$props.onclick?.apply(this,$$args)}),append($$anchor2,button)},alternate_1=$$anchor2=>{var button_1=root_13$f(),node_9=child(button_1);fileIcon(node_9);var div_8=sibling(node_9,2),span_3=child(div_8),text_6=child( span_3,!0);reset(span_3);var node_10=sibling(span_3,2);{let $0=user_derived(()=>get$3(pdfProcessingMode)||($$props.size?formatFileSize($$props.size):void 0));info$1(node_10,()=>get$3($0))}reset(div_8);var node_11=sibling(div_8,2);{var consequent_7=$$anchor3=>{removeButton($$anchor3)};if_block(node_11,$$render=>{readonly2()||$$render(consequent_7)})}reset(button_1),template_effect(()=>{set_class(button_1,1,`group flex items-center gap-3 rounded-lg border border-border bg-muted p-3 ${className()?? @@ -6574,7 +6574,7 @@ return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2 DropdownMenuPrimitive_SubTrigger($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-trigger",get"data-inset"(){return $$props.inset},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$P(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_right(node_2,{class:"ml-auto size-4"}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})} append($$anchor,fragment),pop()}const Sub=Menu_sub,Root$4=Menu;function useAttachmentMenu(getFlags,getCallbacks,close2){const modalityFlags=user_derived(getFlags),callbacks=user_derived(()=>{const cbs=getCallbacks(),wrap2=fn=>()=>{close2(),fn?.()};return{[AttachmentAction.FILE_UPLOAD]:wrap2(cbs.onFileUpload),[AttachmentAction.SYSTEM_PROMPT_CLICK]:wrap2(cbs.onSystemPromptClick),[AttachmentAction.MCP_PROMPT_CLICK]:wrap2(cbs.onMcpPromptClick),[AttachmentAction.MCP_RESOURCES_CLICK]:wrap2(cbs.onMcpResourcesClick)}}); function isItemEnabled(enabledWhen){return!enabledWhen||enabledWhen==="always"?!0:!!get$3(modalityFlags)[enabledWhen]}function isItemVisible(visibleWhen){return visibleWhen?!!get$3(modalityFlags)[visibleWhen]:!0}function getSystemMessageTooltip(){return page$1.params.id?"Inject custom system message at the beginning of the conversation":"Add custom system message for a new conversation"}return{get callbacks(){return get$3(callbacks)},isItemEnabled,isItemVisible,getSystemMessageTooltip}}var root_6$s=from_html( -" ",1),root_10$f=from_html(" ",1),root_11$e=from_html("

"),root_8$r=from_html(" ",1),root_16$6=from_html(" ",1),root_17$8=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_13$d=from_html(" ",1),root_22$2=from_html(" ",1),root_23$5=from_html("

"),root_20$5=from_html(" ",1),root_26$2=from_html(" ",1),root_3$S=from_html(" \ +" ",1),root_10$f=from_html(" ",1),root_11$f=from_html("

"),root_8$r=from_html(" ",1),root_16$6=from_html(" ",1),root_17$8=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_13$d=from_html(" ",1),root_22$2=from_html(" ",1),root_23$5=from_html("

"),root_20$5=from_html(" ",1),root_26$2=from_html(" ",1),root_3$S=from_html(" \ ",1),root_1$O=from_html(" ",1),root$1t=from_html("
");function ChatFormActionAddDropdown($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),dropdownOpen=state$1(!1); function handleMcpSettingsClick(){set$1(dropdownOpen,!1),$$props.onMcpSettingsClick?.()}const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(),hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props.onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props.onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(dropdownOpen, !1)});var div=root$1t(),node2=child(div);component(node2,()=>Root$4,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return get$3(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$O(),node_1=first_child(fragment);component(node_1,()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4,{name:"Attach files",get disabled(){return disabled()},children:($$anchor5,$$slotProps2)=>{ @@ -6583,7 +6583,7 @@ const enabled=user_derived(()=>attachmentMenu.isItemEnabled(get$3(item).enabledW action](),children:($$anchor9,$$slotProps3)=>{var fragment_5=root_6$s(),node_7=first_child(fragment_5);component(node_7,()=>get$3(item).icon,($$anchor10,item_icon)=>{item_icon($$anchor10,{class:"h-4 w-4"})});var span=sibling(node_7,2),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,get$3(item).label)),append($$anchor9,fragment_5)},$$slots:{default:!0}})})}append($$anchor7,fragment_4)},consequent_1=$$anchor7=>{var fragment_6=comment$2(),node_8=first_child(fragment_6);component( node_8,()=>Root$5,($$anchor8,Tooltip_Root)=>{Tooltip_Root($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_7=root_8$r(),node_9=first_child(fragment_7);component(node_9,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_8=comment$2(),node_10=first_child(fragment_8);{let $0=user_derived(()=>get$3(item).class??"");component(node_10,()=>Dropdown_menu_item, ($$anchor12,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor12,{get class(){return`${get$3($0)??""} flex cursor-pointer items-center gap-2`},disabled:!0,children:($$anchor13,$$slotProps5)=>{var fragment_9=root_10$f(),node_11=first_child(fragment_9);component(node_11,()=>get$3(item).icon,($$anchor14,item_icon_1)=>{item_icon_1($$anchor14,{class:"h-4 w-4"})});var span_1=sibling(node_11,2),text_1=child(span_1,!0);reset(span_1),template_effect(()=>set_text(text_1,get$3(item).label)),append($$anchor13, -fragment_9)},$$slots:{default:!0}})})}append($$anchor11,fragment_8)},$$slots:{default:!0}})});var node_12=sibling(node_9,2);component(node_12,()=>Tooltip_content,($$anchor10,Tooltip_Content)=>{Tooltip_Content($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p2=root_11$e(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9,fragment_7)},$$slots:{default:!0}})}),append($$anchor7, +fragment_9)},$$slots:{default:!0}})})}append($$anchor11,fragment_8)},$$slots:{default:!0}})});var node_12=sibling(node_9,2);component(node_12,()=>Tooltip_content,($$anchor10,Tooltip_Content)=>{Tooltip_Content($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p2=root_11$f(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9,fragment_7)},$$slots:{default:!0}})}),append($$anchor7, fragment_6)};if_block(node_5,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_3)});var node_13=sibling(node_4,2);{var consequent_3=$$anchor6=>{var fragment_10=comment$2(),node_14=first_child(fragment_10);component(node_14,()=>Root$5,($$anchor7,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{var fragment_11=root_13$d(),node_15=first_child( fragment_11);component(node_15,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{var fragment_12=comment$2(),node_16=first_child(fragment_12);component(node_16,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor11,{class:"flex cursor-pointer items-center gap-2",get onclick(){return attachmentMenu.callbacks.onFileUpload},children:($$anchor12,$$slotProps5)=>{const pdfItem=user_derived( ()=>ATTACHMENT_FILE_ITEMS.find(i=>i.id===AttachmentMenuItemId.PDF));var fragment_13=comment$2(),node_17=first_child(fragment_13);{var consequent_2=$$anchor13=>{var fragment_14=root_16$6(),node_18=first_child(fragment_14);component(node_18,()=>get$3(pdfItem).icon,($$anchor14,pdfItem_icon)=>{pdfItem_icon($$anchor14,{class:"h-4 w-4"})});var span_2=sibling(node_18,2),text_3=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_3,get$3(pdfItem).label)),append($$anchor13,fragment_14)};if_block( @@ -6606,7 +6606,7 @@ default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($ x-col gap-1.5 p-4",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Sheet_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("font-semibold text-foreground",$$props.class));component( node2,()=>Dialog_title$1,($$anchor2,SheetPrimitive_Title)=>{SheetPrimitive_Title($$anchor2,spread_props({"data-slot":"sheet-title",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Sheet_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment); {let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,SheetPrimitive_Description)=>{SheetPrimitive_Description($$anchor2,spread_props({"data-slot":"sheet-description",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$3=Dialog;var root_3$Q=from_html(" ",1),root_7$r=from_html(''),root_11$d=from_html("

"),root_9$k=from_html(" ",1),root_15$9=from_html(''),root_16$5=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_14$5=from_html(" ",1),root_20$4=from_html(''),root_21$3=from_html("

"),root_19$9=from_html(" '),root_10$e=from_html(''),root_11$e=from_html("

"),root_9$k=from_html(" ",1),root_15$9=from_html(''),root_16$5=from_html("

PDFs will be converted to text. Image-based PDFs may not work properly.

"),root_14$5=from_html(" ",1),root_20$4=from_html(''),root_21$3=from_html("

"),root_19$9=from_html(" ",1),root_23$4=from_html(''),root_2$11=from_html(' ',1),root_1$M=from_html(" ",1),root$1r=from_html("
");function ChatFormActionAddSheet($$anchor,$$props){ push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),sheetOpen=state$1(!1);const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(), hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props.onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props.onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(sheetOpen,!1)}),sheetItemClass="flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-accent active:bg-accent disabled:cursor-not-allowed disabled:opacity-50";var div=root$1r(),node2=child(div);component(node2,()=>Root$3, @@ -6616,7 +6616,7 @@ var fragment_1=root_2$11(),node_3=first_child(fragment_1);component(node_3,()=>S var fragment_3=comment$2(),node_7=first_child(fragment_3);{var consequent=$$anchor7=>{var button=root_7$r();set_class(button,1,clsx(sheetItemClass));var node_8=child(button);component(node_8,()=>get$3(item).icon,($$anchor8,item_icon)=>{item_icon($$anchor8,{class:"h-4 w-4 shrink-0"})});var span=sibling(node_8,2),text_2=child(span,!0);reset(span),reset(button),template_effect(()=>set_text(text_2,get$3(item).label)),delegated("click",button,()=>attachmentMenu.callbacks[get$3(item).action]()),append( $$anchor7,button)},consequent_1=$$anchor7=>{var fragment_4=comment$2(),node_9=first_child(fragment_4);component(node_9,()=>Root$5,($$anchor8,Tooltip_Root)=>{Tooltip_Root($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_5=root_9$k(),node_10=first_child(fragment_5);component(node_10,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor10,{children:($$anchor11,$$slotProps4)=>{var button_1=root_10$e();set_class(button_1, 1,clsx(sheetItemClass));var node_11=child(button_1);component(node_11,()=>get$3(item).icon,($$anchor12,item_icon_1)=>{item_icon_1($$anchor12,{class:"h-4 w-4 shrink-0"})});var span_1=sibling(node_11,2),text_3=child(span_1,!0);reset(span_1),reset(button_1),template_effect(()=>set_text(text_3,get$3(item).label)),append($$anchor11,button_1)},$$slots:{default:!0}})});var node_12=sibling(node_10,2);component(node_12,()=>Tooltip_content,($$anchor10,Tooltip_Content)=>{Tooltip_Content($$anchor10,{side:"r\ -ight",children:($$anchor11,$$slotProps4)=>{var p2=root_11$d(),text_4=child(p2,!0);reset(p2),template_effect(()=>set_text(text_4,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9,fragment_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_4)};if_block(node_7,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_3)});var node_13=sibling(node_6,2);{var consequent_3=$$anchor6=>{ +ight",children:($$anchor11,$$slotProps4)=>{var p2=root_11$e(),text_4=child(p2,!0);reset(p2),template_effect(()=>set_text(text_4,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9,fragment_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_4)};if_block(node_7,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_3)});var node_13=sibling(node_6,2);{var consequent_3=$$anchor6=>{ const pdfItem=user_derived(()=>ATTACHMENT_FILE_ITEMS.find(i=>i.id===AttachmentMenuItemId.PDF));var fragment_6=comment$2(),node_14=first_child(fragment_6);{var consequent_2=$$anchor7=>{var fragment_7=comment$2(),node_15=first_child(fragment_7);component(node_15,()=>Root$5,($$anchor8,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_8=root_14$5(),node_16=first_child(fragment_8);component(node_16,()=>Tooltip_trigger, ($$anchor10,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor10,{children:($$anchor11,$$slotProps4)=>{var button_2=root_15$9();set_class(button_2,1,clsx(sheetItemClass));var node_17=child(button_2);component(node_17,()=>get$3(pdfItem).icon,($$anchor12,pdfItem_icon)=>{pdfItem_icon($$anchor12,{class:"h-4 w-4 shrink-0"})});var span_2=sibling(node_17,2),text_5=child(span_2,!0);reset(span_2),reset(button_2),template_effect(()=>set_text(text_5,get$3(pdfItem).label)),delegated("click",button_2,()=>attachmentMenu. callbacks[get$3(pdfItem).action]()),append($$anchor11,button_2)},$$slots:{default:!0}})});var node_18=sibling(node_16,2);component(node_18,()=>Tooltip_content,($$anchor10,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p_1=root_16$5();append($$anchor11,p_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_8)},$$slots:{default:!0}})}),append($$anchor7,fragment_7)};if_block(node_14,$$render=>{get$3(pdfItem)&&$$render(consequent_2)})}append( @@ -6688,7 +6688,7 @@ div_7),append($$anchor11,div_7)},$$slots:{default:!0}})}),append($$anchor9,fragm wed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80",$$props.class));component(node2,()=>Switch$1,($$anchor2,SwitchPrimitive_Root)=>{SwitchPrimitive_Root($$anchor2,spread_props({"data-slot":"switch",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get checked(){return checked()},set checked($$value){checked($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(), node_1=first_child(fragment_1);{let $02=user_derived(()=>cn$1("pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground"));component(node_1,()=>Switch_thumb,($$anchor4,SwitchPrimitive_Thumb)=>{SwitchPrimitive_Thumb($$anchor4,{"data-slot":"switch-thumb",get class(){return get$3($02)}})})}append( $$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_3$N=from_html(" MCP Servers",1),root_7$o=from_html(" Manage MCP Servers",1),root_10$c=from_html('Error'),root_9$i=from_html(''),root_8$p=from_html('
'),root_12$8=from_html(" Add MCP Servers",1),root_11$c=from_html('
No MCP servers configured
',1),root_2$_=from_html(" ",1);function ChatFormActionAddMcpServersSubmenu($$anchor,$$props){push$1( +ot-allowed disabled:opacity-50">
'),root_8$p=from_html('
'),root_12$8=from_html(" Add MCP Servers",1),root_11$d=from_html('
No MCP servers configured
',1),root_2$_=from_html(" ",1);function ChatFormActionAddMcpServersSubmenu($$anchor,$$props){push$1( $$props,!0);let mcpSearchQuery=state$1(""),allMcpServers=user_derived(()=>mcpStore.getServersSorted()),mcpServers=user_derived(()=>get$3(allMcpServers).filter(s2=>s2.enabled)),hasMcpServers=user_derived(()=>get$3(mcpServers).length>0),filteredMcpServers=user_derived(()=>{const query=get$3(mcpSearchQuery).toLowerCase().trim();return query?get$3(mcpServers).filter(s2=>{const name=getServerLabel(s2).toLowerCase(),url2=s2.url.toLowerCase();return name.includes(query)||url2.includes(query)}):get$3(mcpServers)}); function getServerLabel(server){return mcpStore.getServerLabel(server)}function isServerEnabledForChat(serverId){return conversationsStore.isMcpServerEnabledForChat(serverId)}async function toggleServerForChat(serverId){await conversationsStore.toggleMcpServerForChat(serverId)}function handleMcpSubMenuOpen(open2){open2&&(set$1(mcpSearchQuery,""),mcpStore.runHealthChecksForServers(get$3(allMcpServers)))}function handleMcpSettingsClick(){$$props.onMcpSettingsClick?.(),goto(`${get$3(hasMcpServers)? "":"?add"}${ROUTES.MCP_SERVERS}`)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Sub,($$anchor4,DropdownMenu_Sub)=>{DropdownMenu_Sub($$anchor4,{onOpenChange:handleMcpSubMenuOpen,children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$_(),node_2=first_child(fragment_2);component(node_2,()=>Dropdown_menu_sub_trigger, @@ -6697,7 +6697,7 @@ var fragment_4=comment$2(),node_5=first_child(fragment_4);{var consequent_1=$$an $$anchor11,fragment_7)},$$slots:{default:!0}})}),append($$anchor9,fragment_6)};let $0=user_derived(()=>get$3(filteredMcpServers).length===0);DropdownMenuSearchable($$anchor8,{placeholder:"Search servers...",emptyMessage:"No servers found",get isEmpty(){return get$3($0)},get searchValue(){return get$3(mcpSearchQuery)},set searchValue($$value){set$1(mcpSearchQuery,$$value,!0)},footer:footer2,children:($$anchor9,$$slotProps4)=>{var div=root_8$p();each(div,21,()=>get$3(filteredMcpServers),server=>server. id,($$anchor10,server)=>{const healthState=user_derived(()=>mcpStore.getHealthCheckState(get$3(server).id)),hasError=user_derived(()=>get$3(healthState).status===HealthCheckStatus.ERROR),isEnabledForChat=user_derived(()=>isServerEnabledForChat(get$3(server).id)),displayName=user_derived(()=>getServerLabel(get$3(server))),faviconUrl=user_derived(()=>mcpStore.getServerFavicon(get$3(server).id));var button=root_9$i(),div_1=child(button),div_2=child(div_1),node_8=child(div_2);McpServerIdentity(node_8, {get displayName(){return get$3(displayName)},get faviconUrl(){return get$3(faviconUrl)},iconClass:"h-4 w-4",iconRounded:"rounded-sm",showVersion:!1,nameClass:"text-sm"}),reset(div_2);var node_9=sibling(div_2,2);{var consequent=$$anchor11=>{var span=root_10$c();append($$anchor11,span)};if_block(node_9,$$render=>{get$3(hasError)&&$$render(consequent)})}reset(div_1);var node_10=sibling(div_1,2);Switch(node_10,{get checked(){return get$3(isEnabledForChat)},get disabled(){return get$3(hasError)},onclick:e=>e. -stopPropagation(),onCheckedChange:()=>toggleServerForChat(get$3(server).id)}),reset(button),template_effect(()=>button.disabled=get$3(hasError)),delegated("click",button,()=>!get$3(hasError)&&toggleServerForChat(get$3(server).id)),append($$anchor10,button)}),reset(div),append($$anchor9,div)},$$slots:{footer:!0,default:!0}})}},alternate=$$anchor8=>{var fragment_8=root_11$c(),node_11=sibling(first_child(fragment_8),2);component(node_11,()=>Dropdown_menu_separator,($$anchor9,DropdownMenu_Separator)=>{ +stopPropagation(),onCheckedChange:()=>toggleServerForChat(get$3(server).id)}),reset(button),template_effect(()=>button.disabled=get$3(hasError)),delegated("click",button,()=>!get$3(hasError)&&toggleServerForChat(get$3(server).id)),append($$anchor10,button)}),reset(div),append($$anchor9,div)},$$slots:{footer:!0,default:!0}})}},alternate=$$anchor8=>{var fragment_8=root_11$d(),node_11=sibling(first_child(fragment_8),2);component(node_11,()=>Dropdown_menu_separator,($$anchor9,DropdownMenu_Separator)=>{ DropdownMenu_Separator($$anchor9,{})});var node_12=sibling(node_11,2);component(node_12,()=>Dropdown_menu_item,($$anchor9,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor9,{class:"flex cursor-pointer items-center gap-2",onclick:handleMcpSettingsClick,children:($$anchor10,$$slotProps4)=>{var fragment_9=root_12$8(),node_13=first_child(fragment_9);Plus(node_13,{class:"h-4 w-4"}),next$1(2),append($$anchor10,fragment_9)},$$slots:{default:!0}})}),append($$anchor8,fragment_8)};if_block(node_5,$$render=>{ get$3(hasMcpServers)?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor7,fragment_4)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);var root$1o=from_html('');function ChatFormFileInputInvisible($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),multiple=prop($$props,"multiple",3,!0),fileInputElement; function click(){fileInputElement?.click()}function handleFileSelect(event2){const input=event2.target;input.files&&$$props.onFileSelect?.(Array.from(input.files))}var $$exports={click},input_1=root$1o();return bind_this(input_1,$$value=>fileInputElement=$$value,()=>fileInputElement),template_effect(()=>{input_1.multiple=multiple(),set_class(input_1,1,`hidden ${className()??""}`)}),delegated("change",input_1,handleFileSelect),append($$anchor,input_1),pop($$exports)}delegate(["change"]);var root_1$H=from_html( @@ -6818,7 +6818,7 @@ get message(){return $$props.message},get mcpPrompt(){return get$3(mcpPromptExtr get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},alternate=$$anchor2=>{ChatMessageAssistant($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)}, get isLastAssistantMessage(){return isLastAssistantMessage()},get message(){return $$props.message},get toolMessages(){return toolMessages()},get messageContent(){return $$props.message.content},onConfirmDelete:handleConfirmDelete,onContinue:handleContinue,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onRegenerate:handleRegenerate,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){ return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value,!0)}})};if_block(node2,$$render=>{$$props.message.role===MessageRole.SYSTEM?$$render(consequent):get$3(mcpPromptExtra)?$$render(consequent_1,1):$$props.message.role===MessageRole.USER?$$render(consequent_2,2):$$render(alternate,-1)})}reset(div),action(div,$$node=>fadeInView?.($$node)),append($$anchor,div),pop()}var root_2$U=from_html( -'
'),root_7$n=from_html('
Receiving arguments...
'),root_8$o=from_html('
Response was truncated
'),root_4$w=from_html('
Arguments:
'),root_11$b=from_html( +'
'),root_7$n=from_html('
Receiving arguments...
'),root_8$o=from_html('
Response was truncated
'),root_4$w=from_html('
Arguments:
'),root_11$c=from_html( '
Arguments:
'),root_13$b=from_html('
Waiting for result...
'),root_16$3=from_html(''),root_15$8=from_html('
',1),root_14$4=from_html('
'),root_17$6=from_html('
No output
'),root_10$a=from_html('
Result:
',1),root_19$7=from_html('
'),root_21$1=from_html('
'),root_25$2=from_html('
'),root_23$3=from_html('
'),root$1e=from_html('
');function ChatMessageAgenticContent($$anchor,$$props){push$1($$props,!0);const renderSection=($$anchor2,section=noop$3,index2=noop$3)=>{ @@ -6827,7 +6827,7 @@ var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=> div_2=child(div_1),node_2=sibling(child(div_2),2);{var consequent_1=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animate-spin"})};if_block(node_2,$$render=>{isStreaming()&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor5=>{{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode($$anchor5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}},consequent_3=$$anchor5=>{ var div_3=root_7$n();append($$anchor5,div_3)},alternate=$$anchor5=>{var div_4=root_8$o();append($$anchor5,div_4)};if_block(node_3,$$render=>{section().toolArgs?$$render(consequent_2):isStreaming()?$$render(consequent_3,1):$$render(alternate,-1)})}reset(div_1),append($$anchor4,div_1)},$$slots:{default:!0}})}},consequent_10=$$anchor3=>{const isPending=user_derived(()=>section().type===AgenticSectionType.TOOL_CALL_PENDING),toolIcon=user_derived(()=>get$3(isPending)?Loader_circle:Wrench),toolIconClass=user_derived( ()=>get$3(isPending)?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section())),$1=user_derived(()=>section().toolName||""),$2=user_derived(()=>get$3(isPending)?"executing...":void 0);CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(toolIcon)},get iconClass(){return get$3(toolIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return get$3(isPending)},onToggle:()=>toggleExpanded( -index2(),section()),children:($$anchor4,$$slotProps)=>{var fragment_5=root_10$a(),node_4=first_child(fragment_5);{var consequent_5=$$anchor5=>{var div_5=root_11$b(),node_5=sibling(child(div_5),2);{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode(node_5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}reset(div_5),append($$anchor5,div_5)};if_block(node_4,$$render=>{section().toolArgs&§ion().toolArgs!== +index2(),section()),children:($$anchor4,$$slotProps)=>{var fragment_5=root_10$a(),node_4=first_child(fragment_5);{var consequent_5=$$anchor5=>{var div_5=root_11$c(),node_5=sibling(child(div_5),2);{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode(node_5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}reset(div_5),append($$anchor5,div_5)};if_block(node_4,$$render=>{section().toolArgs&§ion().toolArgs!== "{}"&&$$render(consequent_5)})}var div_6=sibling(node_4,2),div_7=child(div_6),node_6=sibling(child(div_7),2);{var consequent_6=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animate-spin"})};if_block(node_6,$$render=>{get$3(isPending)&&$$render(consequent_6)})}reset(div_7);var node_7=sibling(div_7,2);{var consequent_7=$$anchor5=>{var div_8=root_13$b();append($$anchor5,div_8)},consequent_9=$$anchor5=>{var div_9=root_14$4();each(div_9,21,()=>section().parsedLines,index$2,($$anchor6,line)=>{var fragment_7=root_15$8(), div_10=first_child(fragment_7),text2=child(div_10,!0);reset(div_10);var node_8=sibling(div_10,2);{var consequent_8=$$anchor7=>{var img=root_16$3();template_effect(()=>{set_attribute(img,"src",get$3(line).image.base64Url),set_attribute(img,"alt",get$3(line).image.name)}),append($$anchor7,img)};if_block(node_8,$$render=>{get$3(line).image&&$$render(consequent_8)})}template_effect(()=>set_text(text2,get$3(line).text)),append($$anchor6,fragment_7)}),reset(div_9),append($$anchor5,div_9)},alternate_1=$$anchor5=>{ var div_11=root_17$6();append($$anchor5,div_11)};if_block(node_7,$$render=>{get$3(isPending)?$$render(consequent_7):section().toolResult?$$render(consequent_9,1):$$render(alternate_1,-1)})}reset(div_6),append($$anchor4,fragment_5)},$$slots:{default:!0}})}},consequent_11=$$anchor3=>{{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return Brain},title:"Reasoning",onToggle:()=>toggleExpanded(index2(),section()), @@ -6876,7 +6876,7 @@ siblingInfo.totalSiblings-1),nextSiblingId=user_derived(()=>get$3(hasNext)?$$pro d opacity-30");ActionIcon(node_1,{get icon(){return Chevron_left},tooltip:"Previous version",get disabled(){return get$3($0)},get class(){return`h-5 w-5 p-0 ${get$3($1)??""}`},onclick:()=>$$props.onNavigateToSibling?.(get$3(previousSiblingId))})}var span=sibling(node_1,2),text2=child(span);reset(span);var node_2=sibling(span,2);{let $0=user_derived(()=>!get$3(hasNext)),$1=user_derived(()=>get$3(hasNext)?"":"opacity-30");ActionIcon(node_2,{get icon(){return Chevron_right},tooltip:"Next version",get disabled(){ return get$3($0)},get class(){return`h-5 w-5 p-0 ${get$3($1)??""}`},onclick:()=>$$props.onNavigateToSibling?.(get$3(nextSiblingId))})}reset(div),template_effect(()=>{set_attribute(div,"aria-label",`Message version ${$$props.siblingInfo.currentIndex+1} of ${$$props.siblingInfo.totalSiblings??""}`),set_class(div,1,`flex items-center gap-1 text-xs text-muted-foreground ${className()??""}`),set_text(text2,`${$$props.siblingInfo.currentIndex+1}/${$$props.siblingInfo.totalSiblings??""}`)}),append($$anchor2, div)};if_block(node2,$$render=>{$$props.siblingInfo&&$$props.siblingInfo.totalSiblings>1&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_3$J=from_html(''),root_4$u=from_html("

Reading (prompt processing)

"),root_2$R=from_html(" ",1),root_6$n=from_html(''),root_7$l=from_html("

"),root_5$m=from_html(" ",1),root_10$8=from_html( -''),root_11$a=from_html("

Tool calls

"),root_9$g=from_html(" ",1),root_14$3=from_html(''),root_15$7=from_html("

Agentic summary

"),root_13$a=from_html(" ",1),root_8$n=from_html(" ",1),root_16$2=from_html(" ",1),root_17$5=from_html(" ",1),root_18$4=from_html(" ",1),root_19$6=from_html(" ",1), +''),root_11$b=from_html("

Tool calls

"),root_9$g=from_html(" ",1),root_14$3=from_html(''),root_15$7=from_html("

Agentic summary

"),root_13$a=from_html(" ",1),root_8$n=from_html(" ",1),root_16$2=from_html(" ",1),root_17$5=from_html(" ",1),root_18$4=from_html(" ",1),root_19$6=from_html(" ",1), root$19=from_html('
');function ChatMessageStatistics($$anchor,$$props){push$1($$props,!0);let isLive=prop($$props,"isLive",3,!1),isProcessingPrompt=prop($$props,"isProcessingPrompt",3,!1),initialView=prop($$props,"initialView",19,()=>ChatMessageStatsView.GENERATION),hideSummary=prop( $$props,"hideSummary",3,!1),activeView=user_derived(initialView),hasAutoSwitchedToGeneration=state$1(!1);user_effect(()=>{$$props.onActiveViewChange?.(get$3(activeView))}),user_effect(()=>{isLive()&&(!get$3(hasAutoSwitchedToGeneration)&&!isProcessingPrompt()&&$$props.predictedTokens&&$$props.predictedTokens>0?(set$1(activeView,ChatMessageStatsView.GENERATION),set$1(hasAutoSwitchedToGeneration,!0)):get$3(hasAutoSwitchedToGeneration)||set$1(activeView,ChatMessageStatsView.READING))});let hasGenerationStats=user_derived( ()=>$$props.predictedTokens!==void 0&&$$props.predictedTokens>0&&$$props.predictedMs!==void 0&&$$props.predictedMs>0),tokensPerSecond=user_derived(()=>get$3(hasGenerationStats)?$$props.predictedTokens/$$props.predictedMs*MS_PER_SECOND:0),formattedTime=user_derived(()=>$$props.predictedMs!==void 0?formatPerformanceTime($$props.predictedMs):DEFAULT_PERFORMANCE_TIME),promptTokensPerSecond=user_derived(()=>$$props.promptTokens!==void 0&&$$props.promptMs!==void 0&&$$props.promptMs>0?$$props.promptTokens/ @@ -6889,7 +6889,7 @@ fragment_2);component(node_6,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger_1)=> ursor-not-allowed opacity-40":"hover:text-foreground"}`),button_1.disabled=get$3(isGenerationDisabled)}),delegated("click",button_1,()=>!get$3(isGenerationDisabled)&&set$1(activeView,ChatMessageStatsView.GENERATION)),append($$anchor5,button_1)},$$slots:{default:!0}})});var node_8=sibling(node_6,2);component(node_8,()=>Tooltip_content,($$anchor4,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{var p_1=root_7$l(),text2=child(p_1,!0);reset(p_1),template_effect(()=>set_text( text2,get$3(isGenerationDisabled)?"Generation (waiting for tokens...)":"Generation (token output)")),append($$anchor5,p_1)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)},$$slots:{default:!0}})});var node_9=sibling(node_5,2);{var consequent_2=$$anchor2=>{var fragment_3=root_8$n(),node_10=first_child(fragment_3);component(node_10,()=>Root$5,($$anchor3,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_9$g(),node_11=first_child(fragment_4);component( node_11,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var button_2=root_10$8(),node_12=child(button_2);Wrench(node_12,{class:"h-3 w-3"}),next$1(2),reset(button_2),template_effect(()=>set_class(button_2,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$3(activeView)===ChatMessageStatsView.TOOLS?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),delegated("click",button_2,()=>set$1( -activeView,ChatMessageStatsView.TOOLS)),append($$anchor6,button_2)},$$slots:{default:!0}})});var node_13=sibling(node_11,2);component(node_13,()=>Tooltip_content,($$anchor5,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_2=root_11$a();append($$anchor6,p_2)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})});var node_14=sibling(node_10,2);{var consequent_1=$$anchor3=>{var fragment_5=comment$2(),node_15=first_child(fragment_5); +activeView,ChatMessageStatsView.TOOLS)),append($$anchor6,button_2)},$$slots:{default:!0}})});var node_13=sibling(node_11,2);component(node_13,()=>Tooltip_content,($$anchor5,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_2=root_11$b();append($$anchor6,p_2)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})});var node_14=sibling(node_10,2);{var consequent_1=$$anchor3=>{var fragment_5=comment$2(),node_15=first_child(fragment_5); component(node_15,()=>Root$5,($$anchor4,Tooltip_Root_3)=>{Tooltip_Root_3($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_6=root_13$a(),node_16=first_child(fragment_6);component(node_16,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger_3)=>{Tooltip_Trigger_3($$anchor6,{children:($$anchor7,$$slotProps2)=>{var button_3=root_14$3(),node_17=child(button_3);Layers(node_17,{class:"h-3 w-3"}),next$1(2),reset(button_3),template_effect(()=>set_class(button_3,1,`inline-flex h-5 w-5 items-center jus\ tify-center rounded-sm transition-colors ${get$3(activeView)===ChatMessageStatsView.SUMMARY?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),delegated("click",button_3,()=>set$1(activeView,ChatMessageStatsView.SUMMARY)),append($$anchor7,button_3)},$$slots:{default:!0}})});var node_18=sibling(node_16,2);component(node_18,()=>Tooltip_content,($$anchor6,Tooltip_Content_3)=>{Tooltip_Content_3($$anchor6,{children:($$anchor7,$$slotProps2)=>{var p_3=root_15$7();append($$anchor7,p_3)}, $$slots:{default:!0}})}),append($$anchor5,fragment_6)},$$slots:{default:!0}})}),append($$anchor3,fragment_5)};if_block(node_14,$$render=>{hideSummary()||$$render(consequent_1)})}append($$anchor2,fragment_3)};if_block(node_9,$$render=>{get$3(hasAgenticStats)&&$$render(consequent_2)})}reset(div_1);var div_2=sibling(div_1,2),node_19=child(div_2);{var consequent_3=$$anchor2=>{var fragment_7=root_16$2(),node_20=first_child(fragment_7);{let $0=user_derived(()=>$$props.predictedTokens?.toLocaleString()); @@ -6909,7 +6909,7 @@ var fragment_1=root_2$P(),node_1=first_child(fragment_1);ChatMessageMcpPromptCon onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_1),append($$anchor3,div_1)};if_block(node_2,$$render=>{$$props.message.timestamp&&$$render(consequent_1)})}append($$anchor2,fragment_1)};if_block( node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root$17=from_html("
");function Card($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$17();attribute_effect(div,$0=>({"data-slot":"ca\ rd",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-6 rounded-xl bg-card py-6 text-card-foreground shadow-sm",BOX_BORDER,$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_3$H=from_html(''),root_4$t=from_html(" "),root_1$z=from_html(" ",1),root_8$m=from_html(" "),root_9$f=from_html( -' '),root_7$k=from_html(" ",1),root_5$l=from_html('
'),root_11$9=from_html("
"),root_13$9=from_html('
'),root_17$4=from_html(" \ +' '),root_7$k=from_html(" ",1),root_5$l=from_html('
'),root_11$a=from_html("
"),root_13$9=from_html('
'),root_17$4=from_html(" \ "),root_18$3=from_html(" "),root_15$6=from_html("
"),root$16=from_html('
');function ChatMessageMcpPromptContent($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),variant=prop($$props,"variant",19,()=>McpPromptVariant.MESSAGE),isLoading2=prop($$props,"\ isLoading",3,!1),hoveredArgKey=state$1(null),argumentEntries=user_derived(()=>Object.entries($$props.prompt.arguments??{})),hasArguments=user_derived(()=>$$props.prompt.arguments&&Object.keys($$props.prompt.arguments).length>0),hasContent=user_derived(()=>$$props.prompt.content&&$$props.prompt.content.trim().length>0),contentParts=user_derived(()=>{if(!$$props.prompt.content||!get$3(hasArguments))return[{text:$$props.prompt.content||"",argKey:null}];const parts=[];let remaining=$$props.prompt.content; const valueToKey=new SvelteMap;for(const[key2,value]of get$3(argumentEntries))value&&value.trim()&&valueToKey.set(value,key2);const sortedValues=[...valueToKey.keys()].sort((a,b)=>b.length-a.length);for(;remaining.length>0;){let earliestMatch=null;for(const value of sortedValues){const index2=remaining.indexOf(value);index2!==-1&&(earliestMatch===null||index20&&parts.push({text:remaining. @@ -6920,7 +6920,7 @@ node_2,$$render=>{get$3(serverFavicon)&&$$render(consequent)})}append($$anchor5, node2,2);TruncatedText(node_4,{get text(){return $$props.prompt.name}}),reset(div_2);var node_5=sibling(div_2,2);{var consequent_1=$$anchor2=>{var div_3=root_5$l();each(div_3,21,()=>get$3(argumentEntries),([key2,value])=>key2,($$anchor3,$$item)=>{var $$array=user_derived(()=>to_array(get$3($$item),2));let key2=()=>get$3($$array)[0],value=()=>get$3($$array)[1];var fragment_2=comment$2(),node_6=first_child(fragment_2);component(node_6,()=>Root$5,($$anchor4,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor4, {children:($$anchor5,$$slotProps)=>{var fragment_3=root_7$k(),node_7=first_child(fragment_3);component(node_7,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor6,{children:($$anchor7,$$slotProps2)=>{var span_1=root_8$m(),text_1=child(span_1,!0);reset(span_1),template_effect(()=>{set_class(span_1,1,`rounded-sm bg-purple-200/60 px-1.5 py-0.5 text-[10px] leading-none text-purple-700 transition-opacity dark:bg-purple-800/40 dark:text-purple-300 ${get$3(hoveredArgKey)&&get$3( hoveredArgKey)!==key2()?"opacity-30":""}`),set_text(text_1,key2())}),event("mouseenter",span_1,()=>set$1(hoveredArgKey,key2(),!0)),event("mouseleave",span_1,()=>set$1(hoveredArgKey,null)),append($$anchor7,span_1)},$$slots:{default:!0}})});var node_8=sibling(node_7,2);component(node_8,()=>Tooltip_content,($$anchor6,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor6,{children:($$anchor7,$$slotProps2)=>{var span_2=root_9$f(),text_2=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_2,value())), -append($$anchor7,span_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_3)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)}),reset(div_3),append($$anchor2,div_3)};if_block(node_5,$$render=>{get$3(showArgBadges)&&$$render(consequent_1)})}reset(div_1);var node_9=sibling(div_1,2);{var consequent_2=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] border border-destructive/50 bg-destructive/10 backdrop-blur-md",children:($$anchor3,$$slotProps)=>{var div_4=root_11$9(), +append($$anchor7,span_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_3)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)}),reset(div_3),append($$anchor2,div_3)};if_block(node_5,$$render=>{get$3(showArgBadges)&&$$render(consequent_1)})}reset(div_1);var node_9=sibling(div_1,2);{var consequent_2=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] border border-destructive/50 bg-destructive/10 backdrop-blur-md",children:($$anchor3,$$slotProps)=>{var div_4=root_11$a(), span_3=child(div_4),text_3=child(span_3,!0);reset(span_3),reset(div_4),template_effect(()=>{set_class(div_4,1,`overflow-y-auto ${get$3(paddingClass)??""}`),set_style(div_4,`${get$3(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`),set_class(span_3,1,`${get$3(textSizeClass)??""} text-destructive`),set_text(text_3,$$props.loadError)}),append($$anchor3,div_4)},$$slots:{default:!0}})},consequent_3=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] bo\ rder border-purple-200 bg-purple-500/10 px-1 py-2 backdrop-blur-md dark:border-purple-800 dark:bg-purple-500/20",children:($$anchor3,$$slotProps)=>{var div_5=root_13$9();template_effect(()=>{set_class(div_5,1,`overflow-y-auto ${get$3(paddingClass)??""}`),set_style(div_5,`${get$3(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`)}),append($$anchor3,div_5)},$$slots:{default:!0}})},consequent_5=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] borde\ r border-purple-200 bg-purple-500/10 py-0 text-foreground backdrop-blur-md dark:border-purple-800 dark:bg-purple-500/20",children:($$anchor3,$$slotProps)=>{var div_6=root_15$6(),span_4=child(div_6);each(span_4,21,()=>get$3(contentParts),index$2,($$anchor4,part)=>{var fragment_7=comment$2(),node_10=first_child(fragment_7);{var consequent_4=$$anchor5=>{var span_5=root_17$4(),text_4=child(span_5,!0);reset(span_5),template_effect(()=>{set_class(span_5,1,`rounded-sm bg-purple-300/50 px-0.5 text-purpl\ @@ -6991,7 +6991,7 @@ onEdit(content2,extras2)});var div=root$11(),node2=child(div);{var consequent=$$ div_2),div_4=child(div_3),node_2=child(div_4);ActionIcon(node_2,{get icon(){return Square_pen},tooltip:"Edit",get onclick(){return editCtx.handleEdit}});var node_3=sibling(node_2,2);ActionIcon(node_3,{get icon(){return Trash_2},tooltip:"Delete",get onclick(){return $$props.onDelete}});var node_4=sibling(node_3,2);ActionIcon(node_4,{get icon(){return Arrow_up},tooltip:"Send immediately",get onclick(){return $$props.onSendImmediately}}),reset(div_4),reset(div_3),reset(div_2),reset(div_1),append($$anchor2, fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})}reset(div),action(div,$$node=>fadeInView?.($$node)),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 transition-opacity hover:opacity-80 md:gap-2 ${className()??""} sticky ${get$3(showProcessingInfo)?"bottom-44":"bottom-32"}`)),append($$anchor,div),pop()}var root_2$L=from_html(" Cancel",1),root_3$E=from_html(" Save",1),root_1$v=from_html('
'),root_7$i=from_html("
"),root_8$k=from_html(" "),root_9$e=from_html('
', -1),root_11$8=from_html('
'),root_6$k=from_html("
",1),root_5$j=from_html('
'),root_13$8=from_html('
'),root_4$p=from_html(" ",1),root$10=from_html('
');function ChatMessageSystem($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""), +1),root_11$9=from_html('
'),root_6$k=from_html("
",1),root_5$j=from_html('
'),root_13$8=from_html('
'),root_4$p=from_html(" ",1),root$10=from_html('
');function ChatMessageSystem($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""), siblingInfo=prop($$props,"siblingInfo",3,null),textareaElement=prop($$props,"textareaElement",15);const editCtx=getMessageEditContext();function handleEditKeydown(event2){event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing(event2)?(event2.preventDefault(),editCtx.save()):event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),editCtx.cancel())}let isMultiline=state$1(!1),messageElement=state$1(void 0),isExpanded=state$1(!1),contentHeight=state$1(0);const MAX_HEIGHT=200,currentConfig=config$1(); let showExpandButton=user_derived(()=>get$3(contentHeight)>MAX_HEIGHT);user_effect(()=>{if(!get$3(messageElement)||!$$props.message.content.trim())return;$$props.message.content.includes(` `)&&set$1(isMultiline,!0);const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const element2=entry.target;set$1(isMultiline,element2.offsetHeight>24*1.5),set$1(contentHeight,element2.scrollHeight,!0)}});return resizeObserver.observe(get$3(messageElement)),()=>{resizeObserver.disconnect()}});function toggleExpand(){set$1(isExpanded,!get$3(isExpanded))}var div=root$10(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$v(),textarea=child(div_1);remove_textarea_child( @@ -7001,7 +7001,7 @@ node_3,{class:"h-8 px-3",get onclick(){return editCtx.save},get disabled(){retur e]:py-2.5",get"data-multiline"(){return get$3($0)},style:"border: 2px dashed hsl(var(--border)); max-height: var(--max-message-height); overflow-wrap: anywhere; word-break: break-word;",children:($$anchor4,$$slotProps)=>{var fragment_3=root_6$k(),div_4=first_child(fragment_3),node_7=child(div_4);{var consequent_1=$$anchor5=>{var div_5=root_7$i(),node_8=child(div_5);MarkdownContent(node_8,{class:"markdown-system-content -my-4",get content(){return $$props.message.content}}),reset(div_5),bind_this( div_5,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),template_effect(()=>set_class(div_5,1,clsx(get$3(isExpanded)?"cursor-text":""))),append($$anchor5,div_5)},alternate=$$anchor5=>{var span=root_8$k(),text2=child(span,!0);reset(span),bind_this(span,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),template_effect(()=>{set_class(span,1,`text-md whitespace-pre-wrap ${get$3(isExpanded)?"cursor-text":""}`),set_text(text2,$$props.message.content)}),append($$anchor5, span)};if_block(node_7,$$render=>{currentConfig.renderUserContentAsMarkdown?$$render(consequent_1):$$render(alternate,-1)})}var node_9=sibling(node_7,2);{var consequent_2=$$anchor5=>{var fragment_4=root_9$e(),div_6=sibling(first_child(fragment_4),2),node_10=child(div_6);Button(node_10,{class:"rounded-full px-4 py-1.5 text-xs shadow-md",size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{next$1();var text_1=text$8("Show full system message");append($$anchor6,text_1)},$$slots:{default:!0}}), -reset(div_6),append($$anchor5,fragment_4)};if_block(node_9,$$render=>{!get$3(isExpanded)&&get$3(showExpandButton)&&$$render(consequent_2)})}reset(div_4);var node_11=sibling(div_4,2);{var consequent_3=$$anchor5=>{var div_7=root_11$8(),node_12=child(div_7);Button(node_12,{class:"rounded-full px-4 py-1.5 text-xs",onclick:e=>{e.stopPropagation(),toggleExpand()},size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{next$1();var text_2=text$8("Collapse System Message");append($$anchor6,text_2)}, +reset(div_6),append($$anchor5,fragment_4)};if_block(node_9,$$render=>{!get$3(isExpanded)&&get$3(showExpandButton)&&$$render(consequent_2)})}reset(div_4);var node_11=sibling(div_4,2);{var consequent_3=$$anchor5=>{var div_7=root_11$9(),node_12=child(div_7);Button(node_12,{class:"rounded-full px-4 py-1.5 text-xs",onclick:e=>{e.stopPropagation(),toggleExpand()},size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{next$1();var text_2=text$8("Collapse System Message");append($$anchor6,text_2)}, $$slots:{default:!0}}),reset(div_7),append($$anchor5,div_7)};if_block(node_11,$$render=>{get$3(isExpanded)&&get$3(showExpandButton)&&$$render(consequent_3)})}template_effect(()=>{set_class(div_4,1,`relative transition-all duration-300 ${get$3(isExpanded)?"cursor-text select-text":"select-none"}`),set_style(div_4,!get$3(isExpanded)&&get$3(showExpandButton)?`max-height: ${MAX_HEIGHT}px;`:"max-height: none;")}),append($$anchor4,fragment_3)},$$slots:{default:!0}})}reset(button),reset(div_3),template_effect( ()=>set_class(button,1,`group/expand w-full text-left ${!get$3(isExpanded)&&get$3(showExpandButton)?"cursor-pointer":"cursor-auto"}`)),delegated("click",button,function(...$$args){(get$3(showExpandButton)&&!get$3(isExpanded)?toggleExpand:void 0)?.apply(this,$$args)}),append($$anchor3,div_3)},d2=user_derived(()=>$$props.message.content.trim());if_block(node_5,$$render=>{get$3(d2)&&$$render(consequent_4)})}var node_13=sibling(node_5,2);{var consequent_5=$$anchor3=>{var div_8=root_13$8(),node_14=child( div_8);ChatMessageActionIcons(node_14,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props. @@ -10537,12 +10537,12 @@ McpLogo(node2,{class:"h-5 w-5 md:h-6 md:w-6"}),next$1(2),reset(div_1);var div_2= set open($$value){set$1(isAddingServer,$$value,!0)}});var div_3=sibling(node_3,2),node_4=child(div_3);{var consequent=$$anchor2=>{var div_4=root_2$H();append($$anchor2,div_4)};if_block(node_4,$$render=>{get$3(servers).length===0&&!get$3(isAddingServer)&&$$render(consequent)})}var node_5=sibling(node_4,2);{var consequent_2=$$anchor2=>{var div_5=root_3$A();each(div_5,21,()=>get$3(servers),server=>server.id,($$anchor3,server)=>{var fragment_1=comment$2(),node_6=first_child(fragment_1);{var consequent_1=$$anchor4=>{ McpServerCardSkeleton($$anchor4)},alternate=$$anchor4=>{{let $0=user_derived(()=>conversationsStore.isMcpServerEnabledForChat(get$3(server).id));McpServerCard($$anchor4,{get server(){return get$3(server)},get enabled(){return get$3($0)},onToggle:async()=>{const wasEnabled=conversationsStore.isMcpServerEnabledForChat(get$3(server).id);await conversationsStore.toggleMcpServerForChat(get$3(server).id),wasEnabled||toolsStore.enableAllToolsForServer(get$3(server).id)},onUpdate:updates=>mcpStore.updateServer( get$3(server).id,updates),onDelete:()=>mcpStore.removeServer(get$3(server).id)})}};if_block(node_6,$$render=>{get$3(initialLoadComplete)?$$render(alternate,-1):$$render(consequent_1)})}append($$anchor3,fragment_1)}),reset(div_5),append($$anchor2,div_5)};if_block(node_5,$$render=>{get$3(servers).length>0&&$$render(consequent_2)})}reset(div_3),reset(div),template_effect(()=>set_class(div_3,1,`grid gap-5 md:space-y-4 ${$$props.class??""}`)),transition(1,div,()=>fade,()=>({duration:150})),append($$anchor, -div),pop()}delegate(["click"]);var root_3$z=from_html(" Tools",1),root_5$g=from_html(" Resources",1),root_7$g=from_html(" Prompts",1),root_9$c=from_html(" Logging",1),root_11$7=from_html(" Completions",1),root_13$7=from_html(" Tasks",1),root_1$q=from_html(" ",1);function McpCapabilitiesBadges($$anchor,$$props){push$1($$props,!0);var fragment=comment$2(),node2=first_child(fragment);{var consequent_6=$$anchor2=>{var fragment_1=root_1$q(),node_1=first_child(fragment_1); +div),pop()}delegate(["click"]);var root_3$z=from_html(" Tools",1),root_5$g=from_html(" Resources",1),root_7$g=from_html(" Prompts",1),root_9$c=from_html(" Logging",1),root_11$8=from_html(" Completions",1),root_13$7=from_html(" Tasks",1),root_1$q=from_html(" ",1);function McpCapabilitiesBadges($$anchor,$$props){push$1($$props,!0);var fragment=comment$2(),node2=first_child(fragment);{var consequent_6=$$anchor2=>{var fragment_1=root_1$q(),node_1=first_child(fragment_1); {var consequent=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-green-50 px-1.5 text-[10px] dark:bg-green-950",children:($$anchor4,$$slotProps)=>{var fragment_3=root_3$z(),node_2=first_child(fragment_3);Wrench(node_2,{class:"h-3 w-3 text-green-600 dark:text-green-400"}),next$1(),append($$anchor4,fragment_3)},$$slots:{default:!0}})};if_block(node_1,$$render=>{$$props.capabilities.server.tools&&$$render(consequent)})}var node_3=sibling(node_1,2);{var consequent_1=$$anchor3=>{Badge( $$anchor3,{variant:"outline",class:"h-5 gap-1 bg-blue-50 px-1.5 text-[10px] dark:bg-blue-950",children:($$anchor4,$$slotProps)=>{var fragment_5=root_5$g(),node_4=first_child(fragment_5);Database(node_4,{class:"h-3 w-3 text-blue-600 dark:text-blue-400"}),next$1(),append($$anchor4,fragment_5)},$$slots:{default:!0}})};if_block(node_3,$$render=>{$$props.capabilities.server.resources&&$$render(consequent_1)})}var node_5=sibling(node_3,2);{var consequent_2=$$anchor3=>{Badge($$anchor3,{variant:"outline", class:"h-5 gap-1 bg-purple-50 px-1.5 text-[10px] dark:bg-purple-950",children:($$anchor4,$$slotProps)=>{var fragment_7=root_7$g(),node_6=first_child(fragment_7);Message_square(node_6,{class:"h-3 w-3 text-purple-600 dark:text-purple-400"}),next$1(),append($$anchor4,fragment_7)},$$slots:{default:!0}})};if_block(node_5,$$render=>{$$props.capabilities.server.prompts&&$$render(consequent_2)})}var node_7=sibling(node_5,2);{var consequent_3=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-\ 1 bg-orange-50 px-1.5 text-[10px] dark:bg-orange-950",children:($$anchor4,$$slotProps)=>{var fragment_9=root_9$c(),node_8=first_child(fragment_9);File_text(node_8,{class:"h-3 w-3 text-orange-600 dark:text-orange-400"}),next$1(),append($$anchor4,fragment_9)},$$slots:{default:!0}})};if_block(node_7,$$render=>{$$props.capabilities.server.logging&&$$render(consequent_3)})}var node_9=sibling(node_7,2);{var consequent_4=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-cyan-50 px-1.5 \ -text-[10px] dark:bg-cyan-950",children:($$anchor4,$$slotProps)=>{var fragment_11=root_11$7(),node_10=first_child(fragment_11);Sparkles(node_10,{class:"h-3 w-3 text-cyan-600 dark:text-cyan-400"}),next$1(),append($$anchor4,fragment_11)},$$slots:{default:!0}})};if_block(node_9,$$render=>{$$props.capabilities.server.completions&&$$render(consequent_4)})}var node_11=sibling(node_9,2);{var consequent_5=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-pink-50 px-1.5 text-[10px] dark:b\ +text-[10px] dark:bg-cyan-950",children:($$anchor4,$$slotProps)=>{var fragment_11=root_11$8(),node_10=first_child(fragment_11);Sparkles(node_10,{class:"h-3 w-3 text-cyan-600 dark:text-cyan-400"}),next$1(),append($$anchor4,fragment_11)},$$slots:{default:!0}})};if_block(node_9,$$render=>{$$props.capabilities.server.completions&&$$render(consequent_4)})}var node_11=sibling(node_9,2);{var consequent_5=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-pink-50 px-1.5 text-[10px] dark:b\ g-pink-950",children:($$anchor4,$$slotProps)=>{var fragment_13=root_13$7(),node_12=first_child(fragment_13);List_checks(node_12,{class:"h-3 w-3 text-pink-600 dark:text-pink-400"}),next$1(),append($$anchor4,fragment_13)},$$slots:{default:!0}})};if_block(node_11,$$render=>{$$props.capabilities.server.tasks&&$$render(consequent_5)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.capabilities&&$$render(consequent_6)})}append($$anchor,fragment),pop()}var root_6$i=from_html(' '),root_3$y=from_html(" ",1),root_9$b=from_html('
details
 
'),root_8$i=from_html('
',1),root_7$f=from_html('
'),root_2$G=from_html('
',1);function McpConnectionLogs($$anchor,$$props){push$1($$props,!0);let defaultExpanded=prop($$props,"defaultExpanded",3,!1),isExpanded=user_derived(defaultExpanded);function formatLogDetails(details){if(details==null)return"";try{return JSON.stringify(details,null,2)}catch{return String(details)}}var fragment=comment$2(),node2=first_child(fragment); @@ -10641,7 +10641,7 @@ toLowerCase();for(const resource of resourceList){if(!resourceMatchesSearch(reso children:new Map,isFiltered:!0})}function cleanupEmptyFolders(node2){if(node2.resource)return!0;const toDelete=[];for(const[name,child2]of node2.children.entries())cleanupEmptyFolders(child2)||toDelete.push(name);for(const name of toDelete)node2.children.delete(name);return node2.children.size>0}return cleanupEmptyFolders(root2),root2}function countTreeResources(node2){if(node2.resource)return 1;let count=0;for(const child2 of node2.children.values())count+=countTreeResources(child2);return count} function sortTreeChildren(children){return children.sort((a,b)=>{const aIsFolder=!a.resource&&a.children.size>0,bIsFolder=!b.resource&&b.children.size>0;return aIsFolder&&!bIsFolder?-1:!aIsFolder&&bIsFolder?1:a.name.localeCompare(b.name)})}var root_4$j=from_html(' ',1),root_7$d=from_html('
'),root_3$q=from_html(" ",1),root_9$a=from_html( '
'),root_12$6=from_html('
)
',1),root_18$2=from_html('
'),root_19$5=from_html('
No resources
'),root_24=from_html('
'),root_25$1=from_html(''),root_23$2=from_html('
Templates
',1),root_20$2=from_html(" ",1),root_17$3=from_html('
'),root_11$6=from_html("No resources'),root_24=from_html('
'),root_25$1=from_html(''),root_23$2=from_html('
Templates
',1),root_20$2=from_html(" ",1),root_17$3=from_html('
'),root_11$7=from_html(" ",1);function McpResourcesBrowserServerItem($$anchor,$$props){push$1($$props,!0);const renderTreeNode=($$anchor2,node2=noop$3,depth=noop$3,parentPath=noop$3)=>{const isFolder=user_derived(()=>!node2().resource&&node2().children.size>0),folderId=user_derived(()=>`${$$props.serverName}:${parentPath()}/${node2().name}`),isFolderExpanded=user_derived(()=>$$props.expandedFolders.has(get$3(folderId)));var fragment=comment$2(),node_1=first_child(fragment);{var consequent_1=$$anchor3=>{const folderCount=user_derived( ()=>countTreeResources(node2()));var fragment_1=comment$2(),node_2=first_child(fragment_1);component(node_2,()=>Collapsible,($$anchor4,Collapsible_Root)=>{Collapsible_Root($$anchor4,{get open(){return get$3(isFolderExpanded)},onOpenChange:()=>$$props.onToggleFolder(get$3(folderId)),children:($$anchor5,$$slotProps)=>{var fragment_2=root_3$q(),node_3=first_child(fragment_2);component(node_3,()=>Collapsible_trigger,($$anchor6,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor6,{class:"flex w-full \ items-center gap-2 rounded px-2 py-1 text-sm hover:bg-muted/50",children:($$anchor7,$$slotProps2)=>{var fragment_3=root_4$j(),node_4=first_child(fragment_3);{var consequent=$$anchor8=>{Chevron_down($$anchor8,{class:"h-3 w-3"})},alternate=$$anchor8=>{Chevron_right($$anchor8,{class:"h-3 w-3"})};if_block(node_4,$$render=>{get$3(isFolderExpanded)?$$render(consequent):$$render(alternate,-1)})}var node_5=sibling(node_4,2);Folder_open(node_5,{class:"h-3.5 w-3.5 text-muted-foreground"});var span=sibling( @@ -10652,7 +10652,7 @@ node_7,2),node_8=child(button);component(node_8,()=>get$3(ResourceIcon),($$ancho set_text(text_2,get$3(resourceDisplayName))}),delegated("click",button,e=>handleResourceClick(get$3(resource),e)),append($$anchor3,div_1)};if_block(node_1,$$render=>{get$3(isFolder)?$$render(consequent_1):node2().resource&&$$render(consequent_3,1)})}append($$anchor2,fragment)};let searchQuery=prop($$props,"searchQuery",3,""),serverDisplayName=user_derived(()=>mcpStore.getServerDisplayName($$props.serverName)),serverFaviconUrl=user_derived(()=>mcpStore.getServerFavicon($$props.serverName));const hasResources=user_derived( ()=>$$props.serverRes.resources.length>0),hasTemplates=user_derived(()=>$$props.serverRes.templates.length>0),hasContent=user_derived(()=>get$3(hasResources)||get$3(hasTemplates)),resourceTree=user_derived(()=>buildResourceTree($$props.serverRes.resources,$$props.serverName,searchQuery())),templateInfos=user_derived(()=>$$props.serverRes.templates.map(t=>({uriTemplate:t.uriTemplate,name:t.name,title:t.title,description:t.description,mimeType:t.mimeType,serverName:$$props.serverName,annotations:t. annotations,icons:t.icons})));function handleResourceClick(resource,event2){$$props.onSelect?.(resource,event2.shiftKey)}function handleCheckboxChange(resource,checked){$$props.onToggle?.(resource,checked)}function isResourceSelected(resource){return $$props.selectedUris.has(resource.uri)}var fragment_8=comment$2(),node_9=first_child(fragment_8);component(node_9,()=>Collapsible,($$anchor2,Collapsible_Root_1)=>{Collapsible_Root_1($$anchor2,{get open(){return $$props.isExpanded},get onOpenChange(){ -return $$props.onToggleServer},children:($$anchor3,$$slotProps)=>{var fragment_9=root_11$6(),node_10=first_child(fragment_9);component(node_10,()=>Collapsible_trigger,($$anchor4,Collapsible_Trigger_1)=>{Collapsible_Trigger_1($$anchor4,{class:"flex w-full items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50",children:($$anchor5,$$slotProps2)=>{var fragment_10=root_12$6(),node_11=first_child(fragment_10);{var consequent_4=$$anchor6=>{Chevron_down($$anchor6,{class:"h-3.5 w-3.5"})},alternate_1=$$anchor6=>{ +return $$props.onToggleServer},children:($$anchor3,$$slotProps)=>{var fragment_9=root_11$7(),node_10=first_child(fragment_9);component(node_10,()=>Collapsible_trigger,($$anchor4,Collapsible_Trigger_1)=>{Collapsible_Trigger_1($$anchor4,{class:"flex w-full items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50",children:($$anchor5,$$slotProps2)=>{var fragment_10=root_12$6(),node_11=first_child(fragment_10);{var consequent_4=$$anchor6=>{Chevron_down($$anchor6,{class:"h-3.5 w-3.5"})},alternate_1=$$anchor6=>{ Chevron_right($$anchor6,{class:"h-3.5 w-3.5"})};if_block(node_11,$$render=>{$$props.isExpanded?$$render(consequent_4):$$render(alternate_1,-1)})}var span_3=sibling(node_11,2),div_2=child(span_3),node_12=child(div_2);McpServerIdentity(node_12,{get displayName(){return get$3(serverDisplayName)},get faviconUrl(){return get$3(serverFaviconUrl)},iconClass:"h-4 w-4",showVersion:!1}),reset(div_2);var span_4=sibling(div_2,2),text_3=child(span_4),node_13=sibling(text_3);{var consequent_5=$$anchor6=>{var text_4=text$8(); template_effect(()=>set_text(text_4,`, ${$$props.serverRes.templates.length??""} template${$$props.serverRes.templates.length!==1?"s":""}`)),append($$anchor6,text_4)};if_block(node_13,$$render=>{get$3(hasTemplates)&&$$render(consequent_5)})}next$1(),reset(span_4),reset(span_3);var node_14=sibling(span_3,2);{var consequent_6=$$anchor6=>{Loader_circle($$anchor6,{class:"ml-auto h-3 w-3 animate-spin text-muted-foreground"})};if_block(node_14,$$render=>{$$props.serverRes.loading&&$$render(consequent_6)})} template_effect(()=>set_text(text_3,`(${$$props.serverRes.resources.length??""} resource${$$props.serverRes.resources.length!==1?"s":""}`)),append($$anchor5,fragment_10)},$$slots:{default:!0}})});var node_15=sibling(node_10,2);component(node_15,()=>Collapsible_content,($$anchor4,Collapsible_Content_1)=>{Collapsible_Content_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{var div_3=root_17$3(),node_16=child(div_3);{var consequent_7=$$anchor6=>{var div_4=root_18$2(),text_5=child(div_4);reset(div_4), @@ -10668,7 +10668,7 @@ add(serverName)}function toggleFolder(folderId){expandedFolders.has(folderId)?ex $$anchor2,{get isLoading(){return get$3(isLoading2)}})},alternate=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);each(node_2,17,()=>[...get$3(filteredResources).entries()],([serverName,serverRes])=>serverName,($$anchor3,$$item)=>{var $$array=user_derived(()=>to_array(get$3($$item),2));let serverName=()=>get$3($$array)[0],serverRes=()=>get$3($$array)[1];{let $0=user_derived(()=>expandedServers.has(serverName()));McpResourcesBrowserServerItem($$anchor3,{get serverName(){return serverName()}, get serverRes(){return serverRes()},get isExpanded(){return get$3($0)},get selectedUris(){return selectedUris()},get selectedTemplateUri(){return $$props.selectedTemplateUri},get expandedFolders(){return expandedFolders},onToggleServer:()=>toggleServer(serverName()),onToggleFolder:toggleFolder,get onSelect(){return $$props.onSelect},get onToggle(){return $$props.onToggle},get onTemplateSelect(){return $$props.onTemplateSelect},get searchQuery(){return get$3(searchQuery)}})}}),append($$anchor2,fragment_1)}; if_block(node_1,$$render=>{get$3(filteredResources).size===0?$$render(consequent):$$render(alternate,-1)})}reset(div_1),reset(div),template_effect(()=>set_class(div,1,clsx(["flex flex-col gap-2",$$props.class]))),append($$anchor,div),pop()}var root_1$h=from_html('
Select a resource to preview
'),root_3$p=from_html('

'),root_5$b=from_html( -'
'),root_6$d=from_html('
'),root_8$g=from_html('
 
'),root_10$7=from_html('Resource content'),root_11$5=from_html('
<\ +'
'),root_6$d=from_html('
'),root_8$g=from_html('
 
'),root_10$7=from_html('Resource content'),root_11$6=from_html('
<\ /span>
'),root_12$5=from_html('
No content available
'),root_7$c=from_html(" ",1),root_14$2=from_html(' '),root_15$5=from_html(' '),root_13$6=from_html('
'),root_2$z=from_html('

',1),root$A=from_html("
");function McpResourcePreview($$anchor,$$props){push$1($$props,!0);let content2=state$1(null),isLoading2=state$1(!1),error2=state$1( null);user_effect(()=>{$$props.resource?$$props.preloadedContent?(set$1(content2,$$props.preloadedContent,!0),set$1(isLoading2,!1),set$1(error2,null)):loadContent($$props.resource.uri):(set$1(content2,null),set$1(error2,null))});async function loadContent(uri2){set$1(isLoading2,!0),set$1(error2,null);try{const result=await mcpStore.readResource(uri2);result?set$1(content2,result,!0):set$1(error2,"Failed to load resource content")}catch(e){set$1(error2,e instanceof Error?e.message:"Unknown error", @@ -10678,7 +10678,7 @@ div_2=first_child(fragment),div_3=child(div_2),h3=child(div_3),text_1=child(h3,! ntent",children:($$anchor3,$$slotProps)=>{Download($$anchor3,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}reset(div_4),reset(div_2);var div_5=sibling(div_2,2),node_5=child(div_5);{var consequent_2=$$anchor3=>{var div_6=root_5$b(),node_6=child(div_6);Loader_circle(node_6,{class:"h-6 w-6 animate-spin text-muted-foreground"}),reset(div_6),append($$anchor3,div_6)},consequent_3=$$anchor3=>{var div_7=root_6$d(),node_7=child(div_7);Circle_alert(node_7,{class:"h-6 w-6"});var span=sibling(node_7,2),text_4=child( span,!0);reset(span),reset(div_7),template_effect(()=>set_text(text_4,get$3(error2))),append($$anchor3,div_7)},consequent_7=$$anchor3=>{const textContent=user_derived(()=>getResourceTextContent(get$3(content2))),blobContent=user_derived(()=>getResourceBlobContent(get$3(content2)));var fragment_2=root_7$c(),node_8=first_child(fragment_2);{var consequent_4=$$anchor4=>{var pre=root_8$g(),text_5=child(pre,!0);reset(pre),template_effect(()=>set_text(text_5,get$3(textContent))),append($$anchor4,pre)}; if_block(node_8,$$render=>{get$3(textContent)&&$$render(consequent_4)})}var node_9=sibling(node_8,2);each(node_9,17,()=>get$3(blobContent),blob=>blob.uri,($$anchor4,blob)=>{var fragment_3=comment$2(),node_10=first_child(fragment_3);{var consequent_5=$$anchor5=>{var img=root_10$7();template_effect($0=>set_attribute(img,"src",$0),[()=>createBase64DataUrl(get$3(blob).mimeType??MimeTypeApplication.OCTET_STREAM,get$3(blob).blob)]),append($$anchor5,img)},d2=user_derived(()=>isImageMimeType(get$3(blob). -mimeType??MimeTypeApplication.OCTET_STREAM)),alternate=$$anchor5=>{var div_8=root_11$5(),node_11=child(div_8);File_text(node_11,{class:"h-4 w-4"});var span_1=sibling(node_11,2),text_6=child(span_1);reset(span_1),reset(div_8),template_effect(()=>set_text(text_6,`Binary content (${(get$3(blob).mimeType||"unknown type")??""})`)),append($$anchor5,div_8)};if_block(node_10,$$render=>{get$3(d2)?$$render(consequent_5):$$render(alternate,-1)})}append($$anchor4,fragment_3)});var node_12=sibling(node_9,2); +mimeType??MimeTypeApplication.OCTET_STREAM)),alternate=$$anchor5=>{var div_8=root_11$6(),node_11=child(div_8);File_text(node_11,{class:"h-4 w-4"});var span_1=sibling(node_11,2),text_6=child(span_1);reset(span_1),reset(div_8),template_effect(()=>set_text(text_6,`Binary content (${(get$3(blob).mimeType||"unknown type")??""})`)),append($$anchor5,div_8)};if_block(node_10,$$render=>{get$3(d2)?$$render(consequent_5):$$render(alternate,-1)})}append($$anchor4,fragment_3)});var node_12=sibling(node_9,2); {var consequent_6=$$anchor4=>{var div_9=root_12$5();append($$anchor4,div_9)};if_block(node_12,$$render=>{!get$3(textContent)&&get$3(blobContent).length===0&&$$render(consequent_6)})}append($$anchor3,fragment_2)};if_block(node_5,$$render=>{get$3(isLoading2)?$$render(consequent_2):get$3(error2)?$$render(consequent_3,1):get$3(content2)&&$$render(consequent_7,2)})}reset(div_5);var node_13=sibling(div_5,2);{var consequent_10=$$anchor3=>{var div_10=root_13$6(),node_14=child(div_10);{var consequent_8=$$anchor4=>{ var span_2=root_14$2(),text_7=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_7,$$props.resource.mimeType)),append($$anchor4,span_2)};if_block(node_14,$$render=>{$$props.resource.mimeType&&$$render(consequent_8)})}var node_15=sibling(node_14,2);{var consequent_9=$$anchor4=>{var span_3=root_15$5(),text_8=child(span_3);reset(span_3),template_effect(()=>set_text(text_8,`Priority: ${$$props.resource.annotations.priority??""}`)),append($$anchor4,span_3)};if_block(node_15,$$render=>{$$props. resource.annotations?.priority!==void 0&&$$render(consequent_9)})}var span_4=sibling(node_15,2),text_9=child(span_4);reset(span_4),reset(div_10),template_effect(()=>set_text(text_9,`Server: ${$$props.resource.serverName??""}`)),append($$anchor3,div_10)};if_block(node_13,$$render=>{($$props.resource.mimeType||$$props.resource.annotations)&&$$render(consequent_10)})}template_effect(()=>{set_text(text_1,$$props.resource.title||$$props.resource.name),set_text(text_2,$$props.resource.uri)}),append($$anchor2, @@ -10701,12 +10701,12 @@ ry",size:"sm",onclick:()=>handleOpenChange(!1),children:($$anchor8,$$slotProps4) fragment_4)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$i=from_html(" Export Settings",1),root_8$f=from_html(`

Warning: This export will include sensitive data such as API keys and MCP server custom headers (e.g., authorization tokens). Do not share this file with anyone you don't trust.

`),root_9$9=from_html(`

Sensitive data (API keys, MCP server custom headers) will not be included in the export - to protect your credentials.

`),root_3$o=from_html(" ",1),root_11$4=from_html('Include sensitive data (not recommended)'),root_12$4=from_html("Include sensitive data"),root_13$5=from_html(" ",1),root_2$w=from_html('
',1);function DialogExportSettings($$anchor,$$props){push$1($$props,!0);let includeSensitiveData=prop($$props,"includeSensitiveData",15,!1);function handleOpenChange(newOpen){ + to protect your credentials.

`),root_3$o=from_html(" ",1),root_11$5=from_html('Include sensitive data (not recommended)'),root_12$4=from_html("Include sensitive data"),root_13$5=from_html(" ",1),root_2$w=from_html('
',1);function DialogExportSettings($$anchor,$$props){push$1($$props,!0);let includeSensitiveData=prop($$props,"includeSensitiveData",15,!1);function handleOpenChange(newOpen){ newOpen||$$props.onCancel()}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$1,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return $$props.open},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$w(),node_2=first_child( fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$o(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$i(),node_4=first_child(fragment_4);{var consequent=$$anchor10=>{Shield_off($$anchor10,{class:"h-5 w-\ 5 text-destructive"})},alternate=$$anchor10=>{Shield($$anchor10,{class:"h-5 w-5 text-destructive"})};if_block(node_4,$$render=>{includeSensitiveData()?$$render(consequent):$$render(alternate,-1)})}next$1(),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_5=sibling(node_3,2);component(node_5,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_7=comment$2(),node_6=first_child(fragment_7); {var consequent_1=$$anchor10=>{var p2=root_8$f();append($$anchor10,p2)},alternate_1=$$anchor10=>{var p_1=root_9$9();append($$anchor10,p_1)};if_block(node_6,$$render=>{includeSensitiveData()?$$render(consequent_1):$$render(alternate_1,-1)})}append($$anchor9,fragment_7)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),node_7=child(div);Checkbox(node_7,{id:"include-sensitive",get checked(){return includeSensitiveData()},set checked($$value){ -includeSensitiveData($$value)}});var node_8=sibling(node_7,2);Label(node_8,{for:"include-sensitive",class:"text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",children:($$anchor6,$$slotProps3)=>{var fragment_8=comment$2(),node_9=first_child(fragment_8);{var consequent_2=$$anchor7=>{var span=root_11$4();append($$anchor7,span)},alternate_2=$$anchor7=>{var span_1=root_12$4();append($$anchor7,span_1)};if_block(node_9,$$render=>{includeSensitiveData()?$$render(consequent_2): +includeSensitiveData($$value)}});var node_8=sibling(node_7,2);Label(node_8,{for:"include-sensitive",class:"text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",children:($$anchor6,$$slotProps3)=>{var fragment_8=comment$2(),node_9=first_child(fragment_8);{var consequent_2=$$anchor7=>{var span=root_11$5();append($$anchor7,span)},alternate_2=$$anchor7=>{var span_1=root_12$4();append($$anchor7,span_1)};if_block(node_9,$$render=>{includeSensitiveData()?$$render(consequent_2): $$render(alternate_2,-1)})}append($$anchor6,fragment_8)},$$slots:{default:!0}}),reset(div);var node_10=sibling(div,2);component(node_10,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_9=root_13$5(),node_11=first_child(fragment_9);component(node_11,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{get onclick(){return $$props.onCancel},children:($$anchor9,$$slotProps4)=>{next$1(); var text2=text$8("Cancel");append($$anchor9,text2)},$$slots:{default:!0}})});var node_12=sibling(node_11,2);component(node_12,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{get onclick(){return $$props.onConfirm},class:"bg-destructive text-white hover:bg-destructive/80",children:($$anchor9,$$slotProps4)=>{var fragment_10=comment$2(),node_13=first_child(fragment_10);{var consequent_3=$$anchor10=>{var text_1=text$8("Export Anyway");append($$anchor10,text_1)}, alternate_3=$$anchor10=>{var text_2=text$8("Export Without Sensitive Data");append($$anchor10,text_2)};if_block(node_13,$$render=>{includeSensitiveData()?$$render(consequent_3):$$render(alternate_3,-1)})}append($$anchor9,fragment_10)},$$slots:{default:!0}})}),append($$anchor7,fragment_9)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$h=from_html(" ",1),root_3$n=from_html( @@ -10783,7 +10783,7 @@ noop$3),reset(td),bind_this(td,$$value=>ref2($$value),()=>ref2()),append($$ancho reground [&:has([role=checkbox])]:pe-0",$$props.class)]);var node2=child(th);snippet(node2,()=>$$props.children??noop$3),reset(th),bind_this(th,$$value=>ref2($$value),()=>ref2()),append($$anchor,th),pop()}var root$u=from_html("");function Table_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var thead2=root$u();attribute_effect(thead2,$0=>({"data-slot":"tabl\ e-header",class:$0,...restProps}),[()=>cn$1("[&_tr]:border-b",$$props.class)]);var node2=child(thead2);snippet(node2,()=>$$props.children??noop$3),reset(thead2),bind_this(thead2,$$value=>ref2($$value),()=>ref2()),append($$anchor,thead2),pop()}var root$t=from_html("");function Table_row($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var tr2=root$t();attribute_effect(tr2, $0=>({"data-slot":"table-row",class:$0,...restProps}),[()=>cn$1("border-b transition-colors data-[state=selected]:bg-muted hover:[&,&>svelte-css-wrapper]:[&>th,td]:bg-muted/50",$$props.class)]);var node2=child(tr2);snippet(node2,()=>$$props.children??noop$3),reset(tr2),bind_this(tr2,$$value=>ref2($$value),()=>ref2()),append($$anchor,tr2),pop()}var root_3$e=from_html(" ",1),root_6$9=from_html('
Load\ -ing model information...
'),root_13$4=from_html('
'),root_11$3=from_html(" ",1),root_17$2=from_html(' ',1),root_15$4=from_html(" ",1),root_19$4=from_html(" ",1),root_23$1=from_html(" ",1),root_27=from_html(" ",1),root_31$1=from_html(" ",1),root_35=from_html( +ing model information...
'),root_13$4=from_html('
'),root_11$4=from_html(" ",1),root_17$2=from_html(' ',1),root_15$4=from_html(" ",1),root_19$4=from_html(" ",1),root_23$1=from_html(" ",1),root_27=from_html(" ",1),root_31$1=from_html(" ",1),root_35=from_html( " ",1),root_39=from_html(" ",1),root_43=from_html(" ",1),root_47=from_html(" ",1),root_50=from_html(" ",1),root_56=from_html('
'),root_54=from_html(" ",1),root_57=from_html(" ",1),root_63=from_html('
 
'),root_61=from_html(" ",1),root_14$1=from_html(" ",1),root_9$6=from_html( " ",1),root_64=from_html('
No model information available
'),root_2$m=from_html(`