diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte index 81ea3a44e8..bf628b25e2 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte @@ -4,8 +4,10 @@ ChatFormActions, ChatFormFileInputInvisible, ChatFormPromptPicker, - ChatFormTextarea + ChatFormTextarea, + McpResourcePicker } from '$lib/components/app'; + import ChatFormResourceAttachments from '../ChatFormResourceAttachments.svelte'; import { INPUT_CLASSES } from '$lib/constants/css-classes'; import { SETTING_CONFIG_DEFAULT } from '$lib/constants/settings-config'; import { MimeTypeText, SpecialFileType } from '$lib/enums'; @@ -14,6 +16,7 @@ import { isRouterMode } from '$lib/stores/server.svelte'; import { chatStore } from '$lib/stores/chat.svelte'; import { mcpStore } from '$lib/stores/mcp.svelte'; + import { mcpHasResourceAttachments } from '$lib/stores/mcp-resources.svelte'; import { conversationsStore, activeMessages } from '$lib/stores/conversations.svelte'; import type { GetPromptResult, MCPPromptInfo, PromptMessage } from '$lib/types'; import { isIMEComposing, parseClipboardContent } from '$lib/utils'; @@ -91,6 +94,10 @@ let isPromptPickerOpen = $state(false); let promptSearchQuery = $state(''); + // Resource Picker State + let isResourcePickerOpen = $state(false); + let preSelectedResourceUri = $state(undefined); + /** * * @@ -489,7 +496,7 @@ onpaste={handlePaste} > + {#if mcpHasResourceAttachments()} + { + preSelectedResourceUri = uri; + isResourcePickerOpen = true; + }} + /> + {/if} + onSystemPromptClick?.({ message: value, files: uploadedFiles })} onMcpPromptClick={showMcpPromptButton ? () => (isPromptPickerOpen = true) : undefined} + onMcpResourcesClick={() => (isResourcePickerOpen = true)} /> + + { + if (!newOpen) { + preSelectedResourceUri = undefined; + } + }} +/> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte index ff48a8ddb8..8534ac1ade 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte @@ -1,6 +1,6 @@ @@ -195,6 +204,17 @@ MCP Prompt {/if} + + {#if hasMcpResourcesSupport} + + + + MCP Resources + + {/if} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte index 9c94c05d66..bcb11cd30a 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte @@ -31,6 +31,7 @@ onStop?: () => void; onSystemPromptClick?: () => void; onMcpPromptClick?: () => void; + onMcpResourcesClick?: () => void; } let { @@ -45,7 +46,8 @@ onMicClick, onStop, onSystemPromptClick, - onMcpPromptClick + onMcpPromptClick, + onMcpResourcesClick }: Props = $props(); let currentConfig = $derived(config()); @@ -165,6 +167,11 @@ const perChatOverrides = conversationsStore.getAllMcpServerOverrides(); return mcpStore.hasEnabledServers(perChatOverrides); }); + + let hasMcpResourcesSupport = $derived.by(() => { + const perChatOverrides = conversationsStore.getAllMcpServerOverrides(); + return mcpStore.hasEnabledServers(perChatOverrides) && mcpStore.hasResourcesCapability(); + });
@@ -174,9 +181,11 @@ {hasAudioModality} {hasVisionModality} {hasMcpPromptsSupport} + {hasMcpResourcesSupport} {onFileUpload} {onSystemPromptClick} {onMcpPromptClick} + {onMcpResourcesClick} onMcpServersClick={() => (showMcpDialog = true)} /> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatFormResourceAttachments.svelte b/tools/server/webui/src/lib/components/app/chat/ChatFormResourceAttachments.svelte new file mode 100644 index 0000000000..07d21ab9af --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatFormResourceAttachments.svelte @@ -0,0 +1,40 @@ + + +{#if hasAttachments} +
+ + {#each attachments as attachment (attachment.id)} + handleResourceClick(attachment.resource.uri)} + /> + {/each} + +
+{/if}