From 56b9fd4eb7d7e84cfd340d3ac7a0117719b82acf Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 26 Dec 2025 14:15:08 +0000 Subject: [PATCH] feat: allow @ selection for raw apps --- .../lib/components/copilot/chat/AIChat.svelte | 4 +- .../copilot/chat/AIChatInput.svelte | 308 ++++++++++++++++++ .../copilot/chat/AIChatManager.svelte.ts | 110 ++++++- .../chat/AppAvailableContextList.svelte | 289 ++++++++++++++++ .../copilot/chat/ContextElementBadge.svelte | 44 +++ .../chat/__tests__/app/appEvalHelpers.ts | 8 + .../lib/components/copilot/chat/app/core.ts | 99 +++++- .../lib/components/copilot/chat/context.ts | 69 +++- .../components/raw_apps/RawAppEditor.svelte | 48 ++- 9 files changed, 968 insertions(+), 11 deletions(-) create mode 100644 frontend/src/lib/components/copilot/chat/AppAvailableContextList.svelte diff --git a/frontend/src/lib/components/copilot/chat/AIChat.svelte b/frontend/src/lib/components/copilot/chat/AIChat.svelte index 9e41034fbe..ff31146391 100644 --- a/frontend/src/lib/components/copilot/chat/AIChat.svelte +++ b/frontend/src/lib/components/copilot/chat/AIChat.svelte @@ -98,7 +98,9 @@ () => aiChatManager.contextManager.getSelectedContext(), (sc) => aiChatManager.contextManager.setSelectedContext(sc) } - availableContext={aiChatManager.contextManager.getAvailableContext()} + availableContext={aiChatManager.mode === AIMode.APP + ? aiChatManager.getAppAvailableContext() + : aiChatManager.contextManager.getAvailableContext()} messages={aiChatManager.currentReply ? [ ...aiChatManager.displayMessages, diff --git a/frontend/src/lib/components/copilot/chat/AIChatInput.svelte b/frontend/src/lib/components/copilot/chat/AIChatInput.svelte index cf609a5848..457e315d94 100644 --- a/frontend/src/lib/components/copilot/chat/AIChatInput.svelte +++ b/frontend/src/lib/components/copilot/chat/AIChatInput.svelte @@ -1,6 +1,7 @@
@@ -185,6 +401,98 @@ {disabled} {onKeyDown} /> + {:else if aiChatManager.mode === AIMode.APP} + {#if showContext} +
+ + +
@
+
+ + { + addContextToSelection(element) + close() + }} + /> + +
+ {#each selectedContext as element (element.type + '-' + element.title)} + { + selectedContext = selectedContext?.filter( + (c) => c.type !== element.type || c.title !== element.title + ) + }} + /> + {/each} +
+ {/if} +
+ +
+ {#if showAppContextTooltip} + +
+ { + handleAppContextSelection(element) + }} + showAllAvailable={true} + stringSearch={appContextTooltipWord.slice(1)} + onViewChange={(newNumber) => { + appTooltipCurrentViewNumber = newNumber + }} + setShowing={(showing) => { + showAppContextTooltip = showing + }} + /> +
+
+ {/if} {:else}