From 69c676692b7891e3a49021c05d97e27cca9c647a Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 29 Oct 2025 20:17:36 -0500 Subject: [PATCH 01/18] temp save --- src/lib/helpers/types/agentTypes.js | 2 + src/lib/scss/custom/pages/_agent.scss | 6 ++ src/routes/page/agent/[agentId]/+page.svelte | 40 +++++----- .../agent-components/agent-rule.svelte | 74 ++++++++++++++++--- .../agent-components/agent-utility.svelte | 6 +- .../page/agent/[agentId]/agent-tabs.svelte | 7 +- 6 files changed, 98 insertions(+), 37 deletions(-) diff --git a/src/lib/helpers/types/agentTypes.js b/src/lib/helpers/types/agentTypes.js index d3fb5a06..086ff4ce 100644 --- a/src/lib/helpers/types/agentTypes.js +++ b/src/lib/helpers/types/agentTypes.js @@ -204,6 +204,8 @@ * @property {string} criteria * @property {string?} [displayName] * @property {boolean} disabled + * @property {any?} [output_args] + * @property {string?} [json_args] */ diff --git a/src/lib/scss/custom/pages/_agent.scss b/src/lib/scss/custom/pages/_agent.scss index c5396a2b..7c6e5899 100644 --- a/src/lib/scss/custom/pages/_agent.scss +++ b/src/lib/scss/custom/pages/_agent.scss @@ -268,6 +268,12 @@ .markdown-div { max-height: 500px; font-size: 15px; + + pre { + white-space: pre !important; + margin-top: 1em; + margin-bottom: 1em; + } } &.show { diff --git a/src/routes/page/agent/[agentId]/+page.svelte b/src/routes/page/agent/[agentId]/+page.svelte index ebb5fd10..7b1e4d3f 100644 --- a/src/routes/page/agent/[agentId]/+page.svelte +++ b/src/routes/page/agent/[agentId]/+page.svelte @@ -1,26 +1,23 @@ + resizeWindow()}/> +
@@ -234,12 +241,12 @@
{'Criteria'}
- {#if ADMIN_ROLES.includes(user?.role || '') && !!rule.trigger_name} + {#if ADMIN_ROLES.includes(user?.role || '') && !!rule.trigger_name && !!rule.criteria?.trim()}
@@ -265,20 +272,22 @@ class="bx bx-info-circle" style="font-size: 15px;" id={`rule-${uid}`} + data-bs-toggle="tooltip" + data-bs-placement="top" + title="Output arguments" /> From 6feddb02f2eddcccb3534065d032289cea7fbee3 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Thu, 30 Oct 2025 11:22:18 -0500 Subject: [PATCH 03/18] integrate code generate endpoint --- src/lib/helpers/http.js | 3 +- src/lib/helpers/types/agentTypes.js | 25 +++++ src/lib/scss/custom/pages/_agent.scss | 2 - src/lib/services/agent-service.js | 14 +++ src/lib/services/api-endpoints.js | 1 + .../agent-components/agent-rule.svelte | 97 ++++++++++++++++++- 6 files changed, 135 insertions(+), 7 deletions(-) diff --git a/src/lib/helpers/http.js b/src/lib/helpers/http.js index 8e470866..d6a57302 100644 --- a/src/lib/helpers/http.js +++ b/src/lib/helpers/http.js @@ -75,7 +75,8 @@ function skipLoader(config) { new RegExp('http(s*)://(.*?)/knowledge/document/(.*?)/page', 'g'), new RegExp('http(s*)://(.*?)/users', 'g'), new RegExp('http(s*)://(.*?)/instruct/chat-completion', 'g'), - new RegExp('http(s*)://(.*?)/agent/(.*?)/code-scripts', 'g') + new RegExp('http(s*)://(.*?)/agent/(.*?)/code-scripts', 'g'), + new RegExp('http(s*)://(.*?)/agent/(.*?)/code-script/generate', 'g') ]; /** @type {RegExp[]} */ diff --git a/src/lib/helpers/types/agentTypes.js b/src/lib/helpers/types/agentTypes.js index 086ff4ce..05bacc39 100644 --- a/src/lib/helpers/types/agentTypes.js +++ b/src/lib/helpers/types/agentTypes.js @@ -135,6 +135,31 @@ * @property {AgentCodeScriptUpdateOptions?} [options] */ +/** + * @typedef {Object} AgentCodeScriptGenerateModel + * @property {string?} [text] + * @property {CodeProcessOptions?} [options] + */ + +/** + * @typedef {Object} CodeProcessOptions + * @property {boolean?} [save_to_db] - Whether to save the generated code to database. + * @property {string?} [script_name] - The code script name. + * @property {string?} [script_type] - The code script type. + * @property {string?} [agent_id] - The agent id. + * @property {string?} [template_name] - The template name. + * @property {any?} [data] - The template data. + * @property {string?} [provider] - The llm provider. + * @property {string?} [model] - The llm model. + */ + +/** + * @typedef {Object} CodeGenerationResult + * @property {boolean?} [success] + * @property {string?} [content] + * @property {string?} [language] + * @property {string?} [error_message] + */ /** * @typedef {Object} ChannelInstruction diff --git a/src/lib/scss/custom/pages/_agent.scss b/src/lib/scss/custom/pages/_agent.scss index d4d42782..0bee7e2f 100644 --- a/src/lib/scss/custom/pages/_agent.scss +++ b/src/lib/scss/custom/pages/_agent.scss @@ -272,8 +272,6 @@ pre { white-space: pre !important; width: fit-content; - margin-top: 1em; - margin-bottom: 1em; } } diff --git a/src/lib/services/agent-service.js b/src/lib/services/agent-service.js index d4d87e7b..4b6d0995 100644 --- a/src/lib/services/agent-service.js +++ b/src/lib/services/agent-service.js @@ -156,4 +156,18 @@ export async function updateAgentCodeScripts(agentId, update) { ...update }); return response.data; +} + +/** + * Generate agent code script + * @param {string} agentId + * @param {import('$agentTypes').AgentCodeScriptGenerateModel} request + * @returns {Promise} + */ +export async function generateAgentCodeScript(agentId, request) { + const url = endpoints.agentCodeScriptGenerateUrl.replace("{agentId}", agentId); + const response = await axios.post(url, { + ...request + }); + return response.data; } \ No newline at end of file diff --git a/src/lib/services/api-endpoints.js b/src/lib/services/api-endpoints.js index 1ee3cc59..17b81a9b 100644 --- a/src/lib/services/api-endpoints.js +++ b/src/lib/services/api-endpoints.js @@ -41,6 +41,7 @@ export const endpoints = { // agent code script: agentCodeScriptListUrl: `${host}/agent/{agentId}/code-scripts`, agentCodeScriptUpdateUrl: `${host}/agent/{agentId}/code-scripts`, + agentCodeScriptGenerateUrl: `${host}/agent/{agentId}/code-script/generate`, // agent task agentTaskListUrl: `${host}/agent/tasks`, diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte index 5954616e..71fe5923 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte @@ -1,17 +1,32 @@ @@ -221,7 +211,7 @@ data-bs-placement="top" title="Uncheck to disable knowledgebase" > - +
@@ -241,7 +231,7 @@
{}} diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-mcp-tool.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-mcp-tool.svelte index 3bb4fe71..5f4c4f70 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-mcp-tool.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-mcp-tool.svelte @@ -2,6 +2,7 @@ import { onMount } from 'svelte'; import { Card, CardBody, Input, Button } from '@sveltestrap/sveltestrap'; import { getServerConfigs } from '$lib/services/mcp-service'; + import { scrollToBottom } from '$lib/helpers/utils/common'; const limit = 100; @@ -134,7 +135,7 @@ functions: [] } ]; - scrollToBottom(); + scrollToBottom(scrollContainer); handleAgentChange(); } @@ -211,17 +212,6 @@ innerRefresh(innerMcps); handleAgentChange(); } - - function scrollToBottom() { - if (scrollContainer) { - setTimeout(() => { - scrollContainer.scrollTo({ - top: scrollContainer.scrollHeight, - behavior: 'smooth' - }); - }, 0); - } - } @@ -246,7 +236,7 @@ />
{}} @@ -321,7 +311,7 @@
{}} @@ -339,7 +329,7 @@
{}} diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte index 262a435f..05378bd7 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte @@ -8,6 +8,7 @@ import LoadingToComplete from '$lib/common/LoadingToComplete.svelte'; import { ADMIN_ROLES, AI_PROGRAMMER_AGENT_ID, RULE_TRIGGER_CODE_GENERATE_TEMPLATE } from '$lib/helpers/constants'; import { AgentCodeScriptType } from '$lib/helpers/enums'; + import { scrollToBottom } from '$lib/helpers/utils/common'; const limit = 100; const textLimit = 1024; @@ -121,7 +122,7 @@ disabled: false } ]; - scrollToBottom(); + scrollToBottom(scrollContainer); handleAgentChange(); } @@ -169,7 +170,7 @@ title: 'Are you sure?', html: `
-

Are you sure you want to generate code script "${rule.trigger_name}_rule.py"?

+

Are you sure you want to generate code script "${buildScriptName(rule.trigger_name)}"?

This action will overwrite existing code script if any.

`, @@ -196,7 +197,7 @@ agent_id: AI_PROGRAMMER_AGENT_ID, template_name: RULE_TRIGGER_CODE_GENERATE_TEMPLATE, save_to_db: true, - script_name: `${rule.trigger_name}_rule.py`, + script_name: buildScriptName(rule.trigger_name), script_type: AgentCodeScriptType.Src, data: { 'args_example': { ...rule.output_args }, @@ -243,15 +244,16 @@ }) || []; } - function scrollToBottom() { - if (scrollContainer) { - setTimeout(() => { - scrollContainer.scrollTo({ - top: scrollContainer.scrollHeight, - behavior: 'smooth' - }); - }, 0); + /** @param {string} name */ + function buildScriptName(name) { + let scriptName = name?.trim(); + if (!name) { + scriptName = 'unknown_rule.py'; + } else { + scriptName = `${scriptName.replace(/\s+/g, "_")}_rule.py`; } + + return scriptName; } function resizeWindow() { @@ -286,7 +288,7 @@ />
{}} @@ -332,12 +334,13 @@ {#if ADMIN_ROLES.includes(user?.role || '') && !!rule.trigger_name && !!rule.criteria?.trim()}
{}} @@ -363,8 +366,7 @@ {#if rule.json_args}
{ - scrollContainer.scrollTo({ - top: scrollContainer.scrollHeight, - behavior: 'smooth' - }); - }, 0); - } - } resizeWindow()}/> @@ -311,7 +300,7 @@ data-bs-placement="top" title="Merge with entry agent utilities" > - +
{/if} @@ -338,7 +327,7 @@ data-bs-placement="top" title="Uncheck to disable utility" > - +
@@ -359,7 +348,7 @@
{}} @@ -383,8 +372,8 @@
{}} @@ -499,7 +487,7 @@
{}} 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 866d44b8..4940300c 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 @@ -129,20 +129,20 @@
-
Chat
+
Chat
{#if agent.llm_config?.is_inherit} -
+
Inherited
{/if}
-
-