From 293dbe4cdd8f29b5dacbbf5108f43a08c1196b33 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Mon, 23 Mar 2026 17:48:34 -0500 Subject: [PATCH 01/23] init --- .env | 5 +- package.json | 28 +++++----- .../common/audio-player/AudioSpeaker.svelte | 5 +- .../audio-player/MessageAudioPlayer.svelte | 2 +- .../dropdowns/FullScreenDropdown.svelte | 2 +- .../dropdowns/NotificationDropdown.svelte | 6 +-- .../common/dropdowns/ProfileDropdown.svelte | 8 +-- src/lib/common/dropdowns/Select.svelte | 6 +-- src/lib/common/errors/error-500.svelte | 2 +- src/lib/common/files/FileDropZone.svelte | 2 +- src/lib/common/files/FileGallery.svelte | 6 +-- src/lib/common/markdown/CodeBlock.svelte | 4 +- src/lib/common/modals/DialogModal.svelte | 2 +- src/lib/common/shared/BubbleChat.svelte | 2 +- src/lib/common/shared/PlainPagination.svelte | 8 +-- src/lib/common/shared/RightSidebar.svelte | 2 +- .../(authentication)/login/+page.svelte | 2 +- .../(authentication)/recoverpw/+page.svelte | 2 +- .../(authentication)/register/+page.svelte | 8 +-- src/routes/+layout.svelte | 29 +++++++++++ src/routes/VerticalLayout/Header.svelte | 2 +- src/routes/VerticalLayout/Sidebar.svelte | 4 +- src/routes/chat/+page.svelte | 2 +- .../[conversationId]/chat-box.svelte | 52 +++++++++---------- .../persist-log/persist-log.svelte | 8 +-- .../rich-content/rc-plain-options.svelte | 2 +- src/routes/page/agent/+page.svelte | 6 +-- .../agent-components/agent-instruction.svelte | 2 +- .../agent-components/agent-overview.svelte | 2 +- .../agent-components/agent-template.svelte | 2 +- .../agent-knowledge-base-item.svelte | 2 +- .../agent-knowledge-base.svelte | 2 +- .../mcp-tools/agent-mcp-tool-item.svelte | 2 +- .../mcp-tools/agent-mcp-tool.svelte | 2 +- .../agent-components/rules/agent-rule.svelte | 2 +- .../utilities/agent-utility-item.svelte | 7 ++- .../utilities/agent-utility.svelte | 4 +- src/routes/page/agent/card-agent.svelte | 10 ++-- .../agent/code-scripts/script-editor.svelte | 4 +- src/routes/page/conversation/+page.svelte | 12 ++--- .../[conversationId]/conv-dialogs.svelte | 9 ++-- src/routes/page/dashboard/+page.svelte | 12 ++--- src/routes/page/dashboard/Conversation.svelte | 7 ++- src/routes/page/dashboard/SocialSource.svelte | 10 ++-- .../page/dashboard/TopSellingProduct.svelte | 2 +- src/routes/page/instruction/log/+page.svelte | 6 +-- .../page/instruction/log/log-item.svelte | 2 +- .../page/instruction/testing/+page.svelte | 2 +- .../page/knowledge-base/FileLeftBar.svelte | 27 +++++----- .../page/knowledge-base/FileLists.svelte | 8 +-- src/routes/page/knowledge-base/Storage.svelte | 10 ++-- .../common/search/advanced-search.svelte | 6 +-- .../common/table/table-item.svelte | 4 +- .../common/vector-table/vector-item.svelte | 8 +-- .../knowledge-base/dictionary/+page.svelte | 6 +-- .../knowledge-base/documents/+page.svelte | 22 ++++---- .../knowledge-document-upload.svelte | 8 +-- .../documents/knowledge-upload-modal.svelte | 2 +- .../documents/knowledge-upload-result.svelte | 4 +- .../question-answer/+page.svelte | 20 +++---- src/routes/page/plugin/plugin-list.svelte | 6 +-- src/routes/page/roles/role-item.svelte | 4 +- src/routes/page/setting/+page.svelte | 4 +- src/routes/page/task/+page.svelte | 6 +-- src/routes/page/task/task-item.svelte | 6 +-- src/routes/page/users/+page.svelte | 2 +- src/routes/page/users/user-item.svelte | 4 +- vite.config.js | 10 +++- 68 files changed, 253 insertions(+), 224 deletions(-) diff --git a/.env b/.env index 8e8b04b8..6e4c4be0 100644 --- a/.env +++ b/.env @@ -21,4 +21,7 @@ PUBLIC_COMPANY_WEBSITE=https://scisharp.github.io/SciSharp/ PUBLIC_PLUGIN_DEFAULT_ICON=https://avatars.githubusercontent.com/u/44989469?s=200&v=4 PUBLIC_ALLOW_SIGNUP=true PUBLIC_AUTH_ENABLE_SSO=true -PUBLIC_AUTH_ENABLE_FIND_PWD=true \ No newline at end of file +PUBLIC_AUTH_ENABLE_FIND_PWD=true +PUBLIC_ENVIRONMENTS=[] +PUBLIC_PRIMARY_COLOR=#556ee6 +PUBLIC_SECONDARY_COLOR= \ No newline at end of file diff --git a/package.json b/package.json index ecd73242..d780149b 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ }, "devDependencies": { "@sveltejs/adapter-auto": "^3.0.0", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@sveltejs/kit": "^2.55.0", + "@sveltejs/vite-plugin-svelte": "^5.0.0", "@types/drawflow": "^0.0.10", "eslint": "^8.28.0", "eslint-config-prettier": "^9.0.0", @@ -27,13 +27,13 @@ "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.0.0", "sass": "^1.69.5", - "svelte": "^4.2.9", + "svelte": "^5.54.0", "svelte-carousel": "^1.0.25", - "svelte-check": "^3.6.0", + "svelte-check": "^4.4.5", "svelte-lightbox": "^1.1.2", - "svelte-loading-spinners": "^0.3.4", - "svelte-range-slider-pips": "^2.2.3", - "vite": "^5.0.0" + "svelte-loading-spinners": "^0.3.6", + "svelte-range-slider-pips": "^4.1.1", + "vite": "^6.4.1" }, "type": "module", "dependencies": { @@ -51,9 +51,9 @@ "@pgrabovets/json-view": "^2.7.5", "@popperjs/core": "^2.11.8", "@sveltejs/adapter-static": "^3.0.0", - "@sveltestrap/sveltestrap": "^6.2.3", + "@sveltestrap/sveltestrap": "^7.1.0", "@twilio/voice-sdk": "^2.9.0", - "@vincjo/datatables": "^1.12.7", + "@vincjo/datatables": "^2.8.0", "apexcharts": "^3.44.2", "axios": "^1.6.2", "bootstrap": "^5.3.2", @@ -64,21 +64,21 @@ "marked": "^12.0.0", "moment": "^2.30.1", "overlayscrollbars": "^2.4.4", - "overlayscrollbars-svelte": "^0.5.2", + "overlayscrollbars-svelte": "^0.5.5", "qs": "^6.14.0", - "svelte-awesome-color-picker": "^2.4.7", - "svelte-codemirror-editor": "^1.4.1", + "svelte-awesome-color-picker": "^3.1.4", + "svelte-codemirror-editor": "^2.1.0", "svelte-collapse": "^0.1.2", "svelte-file-dropzone": "^2.0.2", "svelte-flatpickr": "^3.3.3", "svelte-i18n": "^4.0.0", "svelte-json-tree": "^2.2.0", - "svelte-jsoneditor": "^0.21.1", + "svelte-jsoneditor": "^3.11.0", "svelte-link": "^1.4.0", "svelte-markdown": "^0.4.1", "svelte-player": "^0.0.21", "svelte-select": "^5.7.0", - "svelte-splitpanes": "^8.0.5", + "svelte-splitpanes": "^8.0.12", "svelte-viewport-info": "^1.0.1", "svelvet": "^9.0.0", "sweetalert2": "^11.12.4", diff --git a/src/lib/common/audio-player/AudioSpeaker.svelte b/src/lib/common/audio-player/AudioSpeaker.svelte index d3d1a0b3..48e4c0db 100644 --- a/src/lib/common/audio-player/AudioSpeaker.svelte +++ b/src/lib/common/audio-player/AudioSpeaker.svelte @@ -89,12 +89,11 @@ >
speak()}> {#if !speaking} - + title="Play"> {:else} {/if} diff --git a/src/lib/common/audio-player/MessageAudioPlayer.svelte b/src/lib/common/audio-player/MessageAudioPlayer.svelte index be0bac24..3521be26 100644 --- a/src/lib/common/audio-player/MessageAudioPlayer.svelte +++ b/src/lib/common/audio-player/MessageAudioPlayer.svelte @@ -107,7 +107,7 @@ > speak()}> {#if !speaking} - + {:else} {/if} diff --git a/src/lib/common/dropdowns/FullScreenDropdown.svelte b/src/lib/common/dropdowns/FullScreenDropdown.svelte index 40cc7e70..b340728b 100644 --- a/src/lib/common/dropdowns/FullScreenDropdown.svelte +++ b/src/lib/common/dropdowns/FullScreenDropdown.svelte @@ -35,6 +35,6 @@ diff --git a/src/lib/common/dropdowns/NotificationDropdown.svelte b/src/lib/common/dropdowns/NotificationDropdown.svelte index b8bd8639..b3b7e01f 100644 --- a/src/lib/common/dropdowns/NotificationDropdown.svelte +++ b/src/lib/common/dropdowns/NotificationDropdown.svelte @@ -27,7 +27,7 @@ - + 1 @@ -46,7 +46,7 @@
- +
@@ -54,7 +54,7 @@

{$_('If several languages coalesce the grammar')}

- 3 {$_('min ago')} + 3 {$_('min ago')}

diff --git a/src/lib/common/dropdowns/ProfileDropdown.svelte b/src/lib/common/dropdowns/ProfileDropdown.svelte index 95ac0fdb..4367a6bb 100644 --- a/src/lib/common/dropdowns/ProfileDropdown.svelte +++ b/src/lib/common/dropdowns/ProfileDropdown.svelte @@ -48,17 +48,17 @@ on:error={e => handleAvatarLoad(e)} /> {user?.full_name} - + - + {$_('Profile')} 11 - + {$_('Settings')} @@ -69,7 +69,7 @@ on:keydown={() => {}} on:click={() => logout()} > - {$_('Logout')} + {$_('Logout')}
diff --git a/src/lib/common/dropdowns/Select.svelte b/src/lib/common/dropdowns/Select.svelte index f40998a6..5423cd0b 100644 --- a/src/lib/common/dropdowns/Select.svelte +++ b/src/lib/common/dropdowns/Select.svelte @@ -381,7 +381,7 @@ readonly />
- +
{#if showOptionList} @@ -389,7 +389,7 @@ {#if searchMode} {/if} {#if needDownload && !!file.file_download_url} @@ -115,9 +115,9 @@ on:click={e => handleDownloadFile(e, idx)} > {#if isHtml(file.file_extension || file.file_name)} - + {:else} - + {/if} {/if} diff --git a/src/lib/common/markdown/CodeBlock.svelte b/src/lib/common/markdown/CodeBlock.svelte index 6d1c9f69..63d3adb7 100644 --- a/src/lib/common/markdown/CodeBlock.svelte +++ b/src/lib/common/markdown/CodeBlock.svelte @@ -38,14 +38,14 @@ {#if copied}
- +
{'Copied!'}
{:else} - + {/if} diff --git a/src/lib/common/modals/DialogModal.svelte b/src/lib/common/modals/DialogModal.svelte index 45915fd2..65f4f6a7 100644 --- a/src/lib/common/modals/DialogModal.svelte +++ b/src/lib/common/modals/DialogModal.svelte @@ -81,7 +81,7 @@ class="clickable" on:click={e => handleClose(e)} > - + {/if} diff --git a/src/lib/common/shared/BubbleChat.svelte b/src/lib/common/shared/BubbleChat.svelte index bd458311..7622a9b1 100644 --- a/src/lib/common/shared/BubbleChat.svelte +++ b/src/lib/common/shared/BubbleChat.svelte @@ -33,7 +33,7 @@ class="bubble-delete clickable" on:click={e => handleClose(e)} > - +
{text} diff --git a/src/lib/common/shared/PlainPagination.svelte b/src/lib/common/shared/PlainPagination.svelte index a67c94f6..85711549 100644 --- a/src/lib/common/shared/PlainPagination.svelte +++ b/src/lib/common/shared/PlainPagination.svelte @@ -43,10 +43,10 @@ diff --git a/src/lib/common/shared/RightSidebar.svelte b/src/lib/common/shared/RightSidebar.svelte index 30f6dc49..e2a9c704 100644 --- a/src/lib/common/shared/RightSidebar.svelte +++ b/src/lib/common/shared/RightSidebar.svelte @@ -123,7 +123,7 @@
Settings
- +
diff --git a/src/routes/(authentication)/login/+page.svelte b/src/routes/(authentication)/login/+page.svelte index b1ca4c58..73f05759 100644 --- a/src/routes/(authentication)/login/+page.svelte +++ b/src/routes/(authentication)/login/+page.svelte @@ -172,7 +172,7 @@ disabled={isSubmitting} on:click={() => onPasswordToggle()} > - + diff --git a/src/routes/(authentication)/recoverpw/+page.svelte b/src/routes/(authentication)/recoverpw/+page.svelte index 836d5716..83e4acb7 100644 --- a/src/routes/(authentication)/recoverpw/+page.svelte +++ b/src/routes/(authentication)/recoverpw/+page.svelte @@ -68,7 +68,7 @@

© {new Date().getFullYear()} {PUBLIC_COMPANY_NAME}. Crafted with - by Open Source community + by Open Source community

diff --git a/src/routes/(authentication)/register/+page.svelte b/src/routes/(authentication)/register/+page.svelte index 3848db43..b980851c 100644 --- a/src/routes/(authentication)/register/+page.svelte +++ b/src/routes/(authentication)/register/+page.svelte @@ -138,17 +138,17 @@
  • - +
  • - +
  • - +
@@ -172,7 +172,7 @@

© {new Date().getFullYear()} {PUBLIC_COMPANY_NAME}. Crafted with - by Open Source community + by Open Source community

diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 783b44c7..d875564a 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,6 +1,10 @@ + + {#if styleOverride} + {@html ``} + {/if} + + \ No newline at end of file From c0ca6c22174e190f3f5f653689c6c7c4f35e2943 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Tue, 24 Mar 2026 14:07:22 -0500 Subject: [PATCH 04/23] refine modals --- src/lib/common/modals/DialogModal.svelte | 100 ++++++++++++------ src/lib/common/modals/PlainModal.svelte | 94 ++++++++++------ .../[conversationId]/chat-box.svelte | 4 +- 3 files changed, 126 insertions(+), 72 deletions(-) diff --git a/src/lib/common/modals/DialogModal.svelte b/src/lib/common/modals/DialogModal.svelte index f466e770..bf19c131 100644 --- a/src/lib/common/modals/DialogModal.svelte +++ b/src/lib/common/modals/DialogModal.svelte @@ -1,5 +1,5 @@ + /** @param {MouseEvent} e */ + function handleBackdropClick(e) { + if (e.target === e.currentTarget) { + toggleModal(); + } + } + - toggleModal()} - unmountOnClose +{#if isOpen} + + +
- -
+
+ +
{#if !!title} -
+
{title}
{/if} {#if closeable} -
- - -
handleClose(e)} - > - -
-
+ {/if}
- - - - - - {#if !!confirmBtnText} - - {/if} - {#if !!cancelBtnText} - - {/if} - - \ No newline at end of file + +
+ +
+ + +
+ {#if !!confirmBtnText} + + {/if} + + {#if !!cancelBtnText} + + {/if} +
+
+
+{/if} \ No newline at end of file diff --git a/src/lib/common/modals/PlainModal.svelte b/src/lib/common/modals/PlainModal.svelte index 27851df9..07f07c1c 100644 --- a/src/lib/common/modals/PlainModal.svelte +++ b/src/lib/common/modals/PlainModal.svelte @@ -1,39 +1,63 @@ - toggleModal()} - unmountOnClose +{#if isOpen} + + +
- - - - \ No newline at end of file +
+ + {#if title} +
+
{title}
+ +
+ {/if} + + +
+ {@render children?.()} +
+
+
+{/if} \ No newline at end of file diff --git a/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte b/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte index d1bbf434..be17ce7d 100644 --- a/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte +++ b/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte @@ -1650,7 +1650,7 @@ toggleModal={() => toggleBigMessageModal()} confirm={() => sendBigMessage()} cancel={() => toggleBigMessageModal()} - disableConfirmBtn={!!!_.trim(bigText)} + disableConfirmBtn={!_.trim(bigText)} >
{`${(text?.length || 0)}/${maxTextLength}`}
- - +
+
- {$_('Dialogs')} +

{$_('Dialogs')}

- - -
handleSendNotification()} + aria-label="Send notification" + onclick={() => handleSendNotification()} > -
+
- - -
goToChat()} + aria-label="Go to chat" + onclick={() => goToChat()} > -
+
-
+
    {#each dialogs as dialog}
  • - + : "bx-right-arrow-circle")}>
    @@ -141,7 +147,7 @@
    - {#if !!dialog.has_message_files || dialog.data?.startsWith(IMAGE_DATA_PREFIX)} + {#if dialog.has_message_files || dialog.data?.startsWith(IMAGE_DATA_PREFIX)}
    - - \ No newline at end of file +
    +
\ No newline at end of file diff --git a/src/routes/page/conversation/[conversationId]/conv-overview.svelte b/src/routes/page/conversation/[conversationId]/conv-overview.svelte index e46cb70e..150e5f6c 100644 --- a/src/routes/page/conversation/[conversationId]/conv-overview.svelte +++ b/src/routes/page/conversation/[conversationId]/conv-overview.svelte @@ -1,16 +1,14 @@ - - +
+
-
{conversation.title}

{utcToLocal(conversation.created_time)}

@@ -68,5 +66,5 @@ {/if} - - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/conversation/[conversationId]/conv-states.svelte b/src/routes/page/conversation/[conversationId]/conv-states.svelte index 36b5cab4..d3191cf3 100644 --- a/src/routes/page/conversation/[conversationId]/conv-states.svelte +++ b/src/routes/page/conversation/[conversationId]/conv-states.svelte @@ -1,11 +1,10 @@ - - - States +
+
+

States

- - \ No newline at end of file +
+
\ No newline at end of file From 7171264ba7c8e3a4c3a1b35e21a423486484a588 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 25 Mar 2026 15:40:54 -0500 Subject: [PATCH 13/23] refine instruction pages --- .../common/shared/RemoteSearchInput.svelte | 8 +- src/lib/common/shared/StateSearch.svelte | 27 ++- src/lib/scss/custom/pages/_instruction.scss | 2 +- .../instruction-agent.svelte | 56 +++--- .../instruction-coding.svelte | 59 ++++--- .../instruction-llm.svelte | 93 ++++------ .../instruction-state.svelte | 46 +++-- src/routes/page/instruction/log/+page.svelte | 103 ++++++----- .../page/instruction/log/log-item.svelte | 22 ++- .../page/instruction/testing/+page.svelte | 167 ++++++++---------- 10 files changed, 290 insertions(+), 293 deletions(-) diff --git a/src/lib/common/shared/RemoteSearchInput.svelte b/src/lib/common/shared/RemoteSearchInput.svelte index c99dbc24..17044f32 100644 --- a/src/lib/common/shared/RemoteSearchInput.svelte +++ b/src/lib/common/shared/RemoteSearchInput.svelte @@ -8,7 +8,8 @@ * disabled?: boolean, * loading?: boolean, * maxLength?: number, - * onSearch?: (query: string) => Promise + * onSearch?: (query: string) => Promise, + * onValueChange?: (value: string) => void * }} */ let { @@ -17,7 +18,8 @@ disabled = false, loading = $bindable(false), maxLength = 2000, - onSearch = (/** @type {string} */ query) => Promise.resolve([]) + onSearch = (/** @type {string} */ query) => Promise.resolve([]), + onValueChange } = $props(); /** @type {string[]} */ @@ -47,6 +49,7 @@ const query = e.target.value; isOpen = true; value = query; + onValueChange?.(value); await debouncedSearch(query); } @@ -55,6 +58,7 @@ */ function selectResult(result) { value = result; + onValueChange?.(value); isOpen = false; } diff --git a/src/lib/common/shared/StateSearch.svelte b/src/lib/common/shared/StateSearch.svelte index 7b99bbb1..a9108d62 100644 --- a/src/lib/common/shared/StateSearch.svelte +++ b/src/lib/common/shared/StateSearch.svelte @@ -17,7 +17,6 @@ onSearch = () => Promise.resolve([]) } = $props(); - /** @param {number} idx */ function removeState(idx) { states = states.filter((_, index) => index !== idx); @@ -29,6 +28,22 @@ { key: '', value: ''} ]; } + + /** + * @param {number} idx + * @param {string} key + */ + function handleKeyChange(idx, key) { + states = states.map((s, i) => i === idx ? { ...s, key } : s); + } + + /** + * @param {number} idx + * @param {string | null} value + */ + function handleValueChange(idx, value) { + states = states.map((s, i) => i === idx ? { ...s, value } : s); + } @@ -37,24 +52,26 @@ in:fly={{ y: -10, duration: 500 }} out:fly={{ y: -10, duration: 200 }} > - {#each states as _state, idx (idx)} + {#each states as state, idx (idx)}
onSearch(e)} placeholder="Search States" + onValueChange={(/** @type {string} */ val) => handleKeyChange(idx, val)} />
handleValueChange(idx, /** @type {HTMLInputElement} */ (e.target).value)} />
diff --git a/src/lib/scss/custom/pages/_instruction.scss b/src/lib/scss/custom/pages/_instruction.scss index 46d44ae9..2197dc92 100644 --- a/src/lib/scss/custom/pages/_instruction.scss +++ b/src/lib/scss/custom/pages/_instruction.scss @@ -83,7 +83,7 @@ .instruct-kv-item { display: flex; - gap: 30px; + gap: 10px; justify-content: center; } } diff --git a/src/routes/page/instruction/instruction-components/instruction-agent.svelte b/src/routes/page/instruction/instruction-components/instruction-agent.svelte index 9703cdea..a31d31ff 100644 --- a/src/routes/page/instruction/instruction-components/instruction-agent.svelte +++ b/src/routes/page/instruction/instruction-components/instruction-agent.svelte @@ -1,44 +1,38 @@ - - + + pressKey(e)} - /> + onkeydown={(e) => pressKey(e)} + >
{#if elapsedTime} @@ -236,17 +232,18 @@
{text?.length || 0}/{maxLength}
- +
- +
- + {#if isThinking}
@@ -259,12 +256,13 @@
{'Response'}
- - closeResponse()} - /> + role="button" + tabindex="0" + onclick={() => closeResponse()} + onkeydown={(/** @type {KeyboardEvent} */ e) => { if (e.key === 'Enter') closeResponse(); }} + >
@@ -282,35 +280,26 @@
- - +
+
{'Instruction'}
- - -
- +
Please select an agent to proceed!
-
+
- - - - - +
+
+
+
+
- - - - +
+
+
+
- {#each tabs as tab, idx} + {#each tabs as tab} {/each} - +
onAgentSelected(e)} + onSelectAgent={detail => onAgentSelected(detail)} />
onLlmSelected(e)} + bind:selectedProvider={selectedProvider} + bind:selectedModel={selectedModel} + onSelectLlm={detail => onLlmSelected(detail)} />
@@ -379,10 +365,9 @@ disabled={isThinking} />
- - - - - +
+
+
+
\ No newline at end of file From b324c6ec946de9044e17f1fa2a9241f7b7ed0666 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 25 Mar 2026 18:07:41 -0500 Subject: [PATCH 14/23] refine agent pages --- .../scss/custom/components/_codeScript.scss | 2 +- src/routes/page/agent/+page.svelte | 71 ++++---- src/routes/page/agent/[agentId]/+page.svelte | 75 ++++---- .../agent-components/agent-function.svelte | 27 +-- .../agent-components/agent-instruction.svelte | 76 ++++---- .../agent-components/agent-llm-config.svelte | 58 +++--- .../agent-components/agent-overview.svelte | 169 +++++++++--------- .../agent-components/agent-routing.svelte | 21 ++- .../agent-components/agent-template.svelte | 66 +++---- .../agent-knowledge-base-item.svelte | 102 +++++------ .../agent-knowledge-base.svelte | 81 +++++---- .../llm-configs/chat-config.svelte | 92 +++++----- .../llm-configs/llm-basic-config.svelte | 74 ++++---- .../mcp-tools/agent-mcp-tool-item.svelte | 129 +++++++------ .../mcp-tools/agent-mcp-tool.svelte | 115 ++++++------ .../rules/agent-rule-item.svelte | 111 ++++++------ .../agent-components/rules/agent-rule.svelte | 131 +++++++------- .../utilities/agent-utility-item.svelte | 159 ++++++++-------- .../utilities/agent-utility.svelte | 111 ++++++------ .../page/agent/[agentId]/agent-tabs.svelte | 58 +++--- .../agent/[embed]/[embedType]/+page.svelte | 12 +- src/routes/page/agent/card-agent.svelte | 63 ++++--- .../page/agent/code-scripts/+page.svelte | 63 +++---- .../agent/code-scripts/script-editor.svelte | 68 +++---- src/routes/page/agent/evaluator/+page.svelte | 30 ++-- src/routes/page/agent/router/+page.svelte | 49 +++-- .../page/agent/router/routing-flow.svelte | 40 +++-- 27 files changed, 1041 insertions(+), 1012 deletions(-) diff --git a/src/lib/scss/custom/components/_codeScript.scss b/src/lib/scss/custom/components/_codeScript.scss index 0ed5688e..e008411c 100644 --- a/src/lib/scss/custom/components/_codeScript.scss +++ b/src/lib/scss/custom/components/_codeScript.scss @@ -1,5 +1,5 @@ .code-script-container { - min-height: 300px; + min-height: 200px; max-height: 500px; overflow: auto; scrollbar-width: thin; diff --git a/src/routes/page/agent/+page.svelte b/src/routes/page/agent/+page.svelte index a9d47d56..183c4e9a 100644 --- a/src/routes/page/agent/+page.svelte +++ b/src/routes/page/agent/+page.svelte @@ -3,8 +3,7 @@ import { _ } from 'svelte-i18n'; import { goto } from '$app/navigation'; import Swal from 'sweetalert2'; - import { page } from '$app/stores'; - import { Button, Col, Input, Row } from '@sveltestrap/sveltestrap'; + import { page } from '$app/state'; import Breadcrumb from '$lib/common/shared/Breadcrumb.svelte'; import HeadTitle from '$lib/common/shared/HeadTitle.svelte'; import LoadingToComplete from '$lib/common/spinners/LoadingToComplete.svelte'; @@ -21,20 +20,20 @@ goToUrl } from '$lib/helpers/utils/common'; import CardAgent from './card-agent.svelte'; - - + + const firstPage = 1; const pageSize = 12; /** @type {boolean} */ - let isLoading = false; - let isPageMounted = false; + let isLoading = $state(false); + let isPageMounted = $state(false); /** @type {AbortController | null | undefined} */ let abortController; /** @type {import('$commonTypes').PagedItems} */ - let agents = { items: [], count: 0 }; + let agents = $state({ items: [], count: 0 }); /** @type {import('$agentTypes').AgentFilter} */ const initFilter = { @@ -42,40 +41,41 @@ }; /** @type {import('$agentTypes').AgentFilter} */ - let filter = { ...initFilter }; + let filter = $state({ ...initFilter }); + // svelte-ignore state_referenced_locally /** @type {import('$commonTypes').Pagination} */ - let pager = filter.pager; + let pager = $state(filter.pager); - /** @type {import('$userTypes').UserModel} */ - let user; + /** @type {import('$userTypes').UserModel | undefined} */ + let user = $state(); /** @type {any} */ let unsubscriber; /** @type {import('$commonTypes').LabelValuePair[]} */ - const agentTypeOptions = Object.entries(AgentType).map(([k, v]) => ( + const agentTypeOptions = Object.entries(AgentType).map(([_, v]) => ( { label: v, value: v } )).sort((a, b) => a.label.localeCompare(b.label)); /** @type {import('$commonTypes').LabelValuePair[]} */ - let agentLabelOptions = []; + let agentLabelOptions = $state([]); /** @type {{ name: string, types: string[], labels: string[] }} */ - let searchItem = { + let searchItem = $state({ name: '', types: [], labels: [] - }; + }); onMount(async () => { isPageMounted = true; const { pageNum, pageSizeNum } = getPagingQueryParams({ - page: $page.url.searchParams.get("page"), - pageSize: $page.url.searchParams.get("pageSize") + page: page.url.searchParams.get("page"), + pageSize: page.url.searchParams.get("pageSize") }, { defaultPageSize: pageSize }); - const similarName = $page.url.searchParams.get("similarName")?.trim(); + const similarName = page.url.searchParams.get("similarName")?.trim(); filter = { ...filter, @@ -201,7 +201,7 @@ queryParams.push({ key: 'similarName', value: encodeURIComponent(filter.similarName) }); } - setUrlQueryParams($page.url, queryParams, (url) => { + setUrlQueryParams(page.url, queryParams, (url) => { if (!isPageMounted) return; goToUrl(`${url.pathname}${url.search}`) }); @@ -287,8 +287,8 @@ } - - + +
{#if !!user && (ADMIN_ROLES.includes(user.role || '') || !!user.permissions?.includes(UserPermission.CreateAgent))} - + {/if}
- changeSearchName(e)} - on:keydown={e => searchKeyDown(e)} + oninput={e => changeSearchName(e)} + onkeydown={e => searchKeyDown(e)} /> - + oninput={() => handleAgentChange()} + > +
- +
{#if inner_instructions.length > 1} @@ -162,20 +165,20 @@ {'System instruction:'} {/if}
- - + +
addChannel()} + onclick={() => addChannel()} >
- + {#if inner_instructions.length > 1} {/if} - changePrompt(e)} - on:keydown={(e) => onKeyDown(e)} + oninput={(e) => changePrompt(e)} + onkeydown={(e) => onKeyDown(e)} placeholder="Enter your instruction" - /> - - - \ No newline at end of file + > +
+
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte index bb3701d6..ba9d1538 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte @@ -1,18 +1,22 @@ - - +
+
LLM Configurations
- +
@@ -66,7 +66,7 @@ llmConfigOptions={llmConfigs} llmConfig={agent.llm_config?.image_composition} modelType={LlmModelType.Image} - modelCapability={LlmModelCapability.ImageComposition} + modelCapability={LlmModelCapability.ImageComposition} {handleAgentChange} />
- - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte index b98e7017..9d302c58 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte @@ -1,7 +1,4 @@ - - +
+
{#if !!AgentExtensions.chatable(agent)} - + {/if}
@@ -125,10 +120,10 @@

{`Updated at ${utcToLocal(agent.updated_datetime)}`}

- - +
+
- +
@@ -157,16 +152,16 @@ @@ -179,12 +174,12 @@ @@ -369,7 +364,7 @@ -
Type
- changeRoutingMode(e)} +
-
-
@@ -219,24 +214,24 @@
- {#each profiles as profile, index} + {#each profiles as _, index}
{}} - on:click={() => removeProfile(index)} - /> + onkeydown={() => {}} + onclick={() => removeProfile(index)} + >
{/each} @@ -246,9 +241,9 @@ class="bx bx bx-list-plus" role="link" tabindex="0" - on:keydown={() => {}} - on:click={() => addProfile()} - /> + onkeydown={() => {}} + onclick={() => addProfile()} + >
{/if} @@ -262,24 +257,24 @@
- {#each labels as label, index} + {#each labels as _, index}
{}} - on:click={() => removeLabel(index)} - /> + onkeydown={() => {}} + onclick={() => removeLabel(index)} + >
{/each} @@ -289,9 +284,9 @@ class="bx bx bx-list-plus" role="link" tabindex="0" - on:keydown={() => {}} - on:click={() => addLabel()} - /> + onkeydown={() => {}} + onclick={() => addLabel()} + >
{/if} @@ -305,12 +300,12 @@
-
@@ -343,15 +338,15 @@
-
+
- - +
+
diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-routing.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-routing.svelte index 733599d2..a7477b99 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-routing.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-routing.svelte @@ -1,14 +1,17 @@ - - +
+
Routing
@@ -21,7 +24,7 @@ {/snippet} {#snippet body()}
- +
{#if !!rule.field} @@ -60,11 +63,11 @@ {/if} -
+
{/snippet}
{/each} - - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte index 4b736738..a2c6d4d0 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte @@ -1,21 +1,23 @@ - - +
+
{'Templates'}
- - - +
+
+
{'Contents:'}
- -
addTemplate()} + role="button" + tabindex="0" + onclick={() => addTemplate()} + onkeydown={(e) => e.key === 'Enter' && addTemplate()} >
- + {#if inner_templates.length > 0} {/each} - changePrompt(e)} - on:keydown={(e) => onKeyDown(e)} - /> + oninput={(e) => changePrompt(e)} + onkeydown={(e) => onKeyDown(e)} + > {/if} - - - \ No newline at end of file +
+
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/knowledge-bases/agent-knowledge-base-item.svelte b/src/routes/page/agent/[agentId]/agent-components/knowledge-bases/agent-knowledge-base-item.svelte index 3534d1cb..e911f741 100644 --- a/src/routes/page/agent/[agentId]/agent-components/knowledge-bases/agent-knowledge-base-item.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/knowledge-bases/agent-knowledge-base-item.svelte @@ -1,24 +1,31 @@ - - +
+
Knowledge Base
Make your Agent have memory
@@ -203,23 +206,27 @@ knwoledgeIdx={uid} collapsed={!knowledge.expanded} knowledgeBaseOptions={knowledgeBaseOptions} - on:toggle={e => toggleKnowledgeBase(e, uid)} - on:delete={e => deleteKnowledgeBase(e, uid)} - on:change={e => changeKnowledgeBase(e, uid)} - on:collapse={e => toggleCollapse(e, uid)} + ontoggle={data => toggleKnowledgeBase(data, uid)} + ondelete={data => deleteKnowledgeBase(data, uid)} + onchange={data => changeKnowledgeBase(data, uid)} + oncollapse={data => toggleCollapse(data, uid)} /> {/each} {#if innerKnowledgeBases.length < limit}
- +
{/if}
- - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/llm-configs/chat-config.svelte b/src/routes/page/agent/[agentId]/agent-components/llm-configs/chat-config.svelte index 40b759dd..63aba6c3 100644 --- a/src/routes/page/agent/[agentId]/agent-components/llm-configs/chat-config.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/llm-configs/chat-config.svelte @@ -1,19 +1,22 @@ - - +
+
MCP Tools
Tools powered by MCP Servers
@@ -225,24 +228,28 @@ mcpIndex={uid} collapsed={!mcp.expanded} mcpOptions={mcpOptions} - on:toggle={e => toggleMcp(e, uid)} - on:delete={e => deleteMcp(e, uid)} - on:change={e => changeMcpContent(e, uid)} - on:add={e => addMcpContent(e, uid)} - on:collapse={e => toggleCollapse(e, uid)} + ontoggle={data => toggleMcp(data, uid)} + ondelete={data => deleteMcp(data, uid)} + onchange={data => changeMcpContent(data, uid)} + onadd={data => addMcpContent(data, uid)} + oncollapse={data => toggleCollapse(data, uid)} /> {/each} {#if innerMcps.length < limit}
- +
{/if}
- - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/rules/agent-rule-item.svelte b/src/routes/page/agent/[agentId]/agent-components/rules/agent-rule-item.svelte index 9c434b2c..14f27b72 100644 --- a/src/routes/page/agent/[agentId]/agent-components/rules/agent-rule-item.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/rules/agent-rule-item.svelte @@ -1,43 +1,48 @@ - resizeWindow()}/> + resizeWindow()}/> isOpenConfigModal = !isOpenConfigModal} > - {/if} - - +
+
Triggers & Rules
Wake-up your agent by rules
@@ -314,25 +306,28 @@ ruleOptions={ruleOptions} configOptions={configOptions} windowWidth={windowWidth} - on:toggle={e => toggleRule(e, uid)} - on:delete={e => deleteRule(e, uid)} - on:change={e => changeRule(e, uid)} - on:add={e => addRuleItem(e, uid)} - on:config={e => openRuleConfigModal(e, uid)} - on:collapse={e => toggleCollapse(e, uid)} + ontoggle={data => toggleRule(data, uid)} + ondelete={data => deleteRule(data, uid)} + onchange={data => changeRule(data, uid)} + onconfig={data => openRuleConfigModal(data, uid)} + oncollapse={data => toggleCollapse(data, uid)} /> {/each} {#if innerRules.length < limit}
- +
{/if}
- - +
+
diff --git a/src/routes/page/agent/[agentId]/agent-components/utilities/agent-utility-item.svelte b/src/routes/page/agent/[agentId]/agent-components/utilities/agent-utility-item.svelte index a6b586c4..e7c6d153 100644 --- a/src/routes/page/agent/[agentId]/agent-components/utilities/agent-utility-item.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/utilities/agent-utility-item.svelte @@ -1,52 +1,59 @@ - resizeWindow()}/> + resizeWindow()}/> - - +
+
Utilities
Tools shared across plugins
@@ -259,10 +263,11 @@
{#if !agent?.is_router}
- toggleMergeUtility(e)} + onchange={e => toggleMergeUtility(e)} />
Merge utilities @@ -279,9 +284,7 @@ {/if} {#each innerUtilities as utility, uid (uid)} - { - @const utilityCategoryOptions = getUtilityOptions(Object.keys(utilityMapper), 'Select a category') - } + {@const utilityCategoryOptions = getUtilityOptions(Object.keys(utilityMapper), 'Select a category')} toggleUtility(e, uid)} - on:delete={e => deleteUtility(e, uid)} - on:reset={() => resetUtility(uid)} - on:change={e => changeUtility(e, uid)} - on:collapse={e => toggleCollapse(e, uid)} + ontoggle={data => toggleUtility(data, uid)} + ondelete={data => deleteUtility(data, uid)} + onreset={() => resetUtility(uid)} + onchange={data => changeUtility(data, uid)} + oncollapse={data => toggleCollapse(data, uid)} /> {/each} {#if innerUtilities.length < limit}
- +
{/if}
- - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-tabs.svelte b/src/routes/page/agent/[agentId]/agent-tabs.svelte index eb3c9c9c..a7c7cf79 100644 --- a/src/routes/page/agent/[agentId]/agent-tabs.svelte +++ b/src/routes/page/agent/[agentId]/agent-tabs.svelte @@ -1,6 +1,4 @@ - - +
+
- - \ No newline at end of file +
+
\ No newline at end of file diff --git a/src/routes/page/agent/[embed]/[embedType]/+page.svelte b/src/routes/page/agent/[embed]/[embedType]/+page.svelte index 71ef21cb..57fa6a5b 100644 --- a/src/routes/page/agent/[embed]/[embedType]/+page.svelte +++ b/src/routes/page/agent/[embed]/[embedType]/+page.svelte @@ -1,17 +1,17 @@ - - + + import { goto } from '$app/navigation'; import { _ } from 'svelte-i18n'; - import { Badge, Button, Card, CardBody, Col } from '@sveltestrap/sveltestrap'; import { utcToLocal } from '$lib/helpers/datetime'; - import { LEARNER_AGENT_ID } from "$lib/helpers/constants"; - import { AgentExtensions } from "$lib/helpers/utils/agent"; - import { globalEventStore } from '$lib/helpers/store'; + import { LEARNER_AGENT_ID } from "$lib/helpers/constants"; + import { AgentExtensions } from "$lib/helpers/utils/agent"; + import { globalEventStore } from '$lib/helpers/store'; - /** @type {import('$agentTypes').AgentModel[]} */ - export let agents; + /** @type {{ agents: import('$agentTypes').AgentModel[] }} */ + let { agents } = $props(); /** * @param {string} url */ function goToPage(url) { if (!url) return; - + globalEventStore.reset(); goto(url); } {#each agents as agent} - - - +
+
+
-
- +
+ {#if agent.icon_url} - + {:else} - + {/if}
@@ -39,9 +38,9 @@
- +
{#if agent.is_router}
- +
{/if}
{#if agent.labels?.length > 0}
{#each agent.labels as label} - {label} + {label} {/each}
{:else} @@ -95,41 +94,41 @@ {/each}
- +
- +
  • - {agent.disabled ? $_('Disabled') : $_('Enabled')} + {agent.disabled ? $_('Disabled') : $_('Enabled')}
  • - {agent.is_public ? $_('Public') : $_('Private')} + {agent.is_public ? $_('Public') : $_('Private')}
  • {utcToLocal(agent.updated_datetime, 'MMM D, YYYY')}
  • - +
  • - {#if agent.is_public } + {#if agent.is_public }
  • - +
  • - +
  • {/if}
- - +
+
{/each} \ No newline at end of file diff --git a/src/routes/page/agent/code-scripts/+page.svelte b/src/routes/page/agent/code-scripts/+page.svelte index 63867cd9..77bd873d 100644 --- a/src/routes/page/agent/code-scripts/+page.svelte +++ b/src/routes/page/agent/code-scripts/+page.svelte @@ -2,7 +2,6 @@ import { onMount } from 'svelte'; import { _ } from 'svelte-i18n'; import { v4 as uuidv4 } from 'uuid'; - import { Button, Card, CardBody, Col, Row } from '@sveltestrap/sveltestrap'; import Breadcrumb from '$lib/common/shared/Breadcrumb.svelte'; import HeadTitle from '$lib/common/shared/HeadTitle.svelte'; import LoadingToComplete from '$lib/common/spinners/LoadingToComplete.svelte'; @@ -12,44 +11,44 @@ import { ADMIN_ROLES } from '$lib/helpers/constants'; import { AgentCodeScriptType } from '$lib/helpers/enums'; import ScriptEditor from './script-editor.svelte'; - + /** @type {boolean} */ - let isLoading = false; + let isLoading = $state(false); /** @type {boolean} */ - let isComplete = false; + let isComplete = $state(false); /** @type {boolean} */ - let isError = false; + let isError = $state(false); /** @type {number} */ let duration = 2000; /** @type {import('$userTypes').UserModel} */ - let user; + let user = $state(/** @type {any} */ (undefined)); /** @type {import('$commonTypes').LabelValuePair[]} */ - let agentOptions = []; + let agentOptions = $state([]); /** @type {string | null | undefined} */ - let selectedAgentId; + let selectedAgentId = $state(undefined); /** @type {{ * scripts: import('$agentTypes').AgentCodeScriptViewModel[], * selectedScript: import('$agentTypes').AgentCodeScriptViewModel | null * }} */ - let srcScriptObj = { + let srcScriptObj = $state({ scripts: [], selectedScript: null - }; + }); /** @type {{ * scripts: import('$agentTypes').AgentCodeScriptViewModel[], * selectedScript: import('$agentTypes').AgentCodeScriptViewModel | null * }} */ - let testScriptObj = { + let testScriptObj = $state({ scripts: [], selectedScript: null - }; + }); onMount(async () => { user = await myInfo(); @@ -79,7 +78,7 @@ const selectedValues = e?.detail?.selecteds?.map(x => x.value) || []; selectedAgentId = selectedValues.length > 0 ? selectedValues[0] : null; - if (!!selectedAgentId) { + if (selectedAgentId) { initAgentCodeScripts(selectedAgentId); } else { refreshScriptObj([]); @@ -172,8 +171,8 @@ } - - + + - - - - +
+
+
+
Agent
- -
-
- - - - - - - {$_('Share Files')} - {$_('Share with me')} - {$_('Other Actions')} - - - - - -
-
- - {#each myfiles as myfile} - - - -
-
- - - - - - {$_('Open')} - {$_('Edit')} - {$_('Rename')} - - {$_('Remove')} - - -
-
-
- -
-
-
-
-
- - {myfile.name} - -
-

- {myfile.file} {$_('Files')} -

-
-
-

{myfile.Gb}GB

-
-
-
-
-
- - {/each} -
-
diff --git a/src/routes/page/knowledge-base/Storage.svelte b/src/routes/page/knowledge-base/Storage.svelte deleted file mode 100644 index a44af8f0..00000000 --- a/src/routes/page/knowledge-base/Storage.svelte +++ /dev/null @@ -1,199 +0,0 @@ - - - - -
-
{$_('Storage')}
-
-
-
- -

{$_('0 GB (0%) of 1 GB used')}

-
- -
- - -
-
-
-
- -
-
- -
-
{$_('Images')}
-

0 {$_('Files')}

-
- -
-

0 GB

-
-
-
- -
- -
- -
-
-
-
- -
-
- -
-
{$_('Video')}
-

0 {$_('Files')}

-
- -
-

0 GB

-
-
-
- -
- -
- -
-
-
-
- -
-
- -
-
{$_('Music')}
-

0 {$_('Files')}

-
- -
-

0 GB

-
-
-
- -
- -
- -
-
-
-
- -
-
- -
-
{$_('Document')}
-

0 {$_('Files')}

-
- -
-

0 GB

-
-
-
- -
- -
- -
-
-
-
- -
-
- -
-
{$_('Others')}
-

0 {$_('Files')}

-
- -
-

0 GB

-
-
-
- -
-
- - diff --git a/src/routes/page/knowledge-base/common/collection/collection-create-modal.svelte b/src/routes/page/knowledge-base/common/collection/collection-create-modal.svelte index 838688b0..b479b02a 100644 --- a/src/routes/page/knowledge-base/common/collection/collection-create-modal.svelte +++ b/src/routes/page/knowledge-base/common/collection/collection-create-modal.svelte @@ -1,69 +1,53 @@ - toggle()} - unmountOnClose +{#if open} +