diff --git a/packages/global/common/string/time.ts b/packages/global/common/string/time.ts index 93037fd77..cb0b7002d 100644 --- a/packages/global/common/string/time.ts +++ b/packages/global/common/string/time.ts @@ -100,7 +100,7 @@ export const getNextTimeByCronStringAndTimezone = ({ return new Date(date); } catch (error) { - console.log('getNextTimeByCronStringAndTimezone error', error); + console.log(`getNextTimeByCronStringAndTimezone error: ${cronString}`, error); return new Date(); } }; diff --git a/packages/global/core/workflow/runtime/type.d.ts b/packages/global/core/workflow/runtime/type.d.ts index 31abaee7f..0d2008738 100644 --- a/packages/global/core/workflow/runtime/type.d.ts +++ b/packages/global/core/workflow/runtime/type.d.ts @@ -108,6 +108,7 @@ export type RuntimeNodeItemType = { flowNodeType: StoreNodeItemType['flowNodeType']; showStatus?: StoreNodeItemType['showStatus']; isEntry?: boolean; + isStart?: boolean; version?: string; inputs: FlowNodeInputItemType[]; diff --git a/packages/global/core/workflow/runtime/utils.ts b/packages/global/core/workflow/runtime/utils.ts index f197efd30..ecfb310f7 100644 --- a/packages/global/core/workflow/runtime/utils.ts +++ b/packages/global/core/workflow/runtime/utils.ts @@ -294,11 +294,11 @@ export const checkNodeRunStatus = ({ runtimeEdges: RuntimeEdgeItemType[]; }) => { const filterRuntimeEdges = filterWorkflowEdges(runtimeEdges); - const isStartNode = (nodeType: string) => { const map: Record = { [FlowNodeTypeEnum.workflowStart]: true, - [FlowNodeTypeEnum.pluginInput]: true + [FlowNodeTypeEnum.pluginInput]: true, + [FlowNodeTypeEnum.loopStart]: true }; return !!map[nodeType]; }; @@ -328,10 +328,12 @@ export const checkNodeRunStatus = ({ // Start node const sourceNode = nodesMap.get(edge.source); if (!sourceNode) continue; - if (isStartNode(sourceNode.flowNodeType)) { + + if (isStartNode(sourceNode.flowNodeType) || sourceNode.isStart) { commonEdges.push(sourceEdge); continue; } + // Circle detected if (edge.source === targetNode.nodeId) { recursiveEdgeGroupsMap.set(edge.target, [ @@ -350,6 +352,7 @@ export const checkNodeRunStatus = ({ // 查找目标节点的 source edges 并加入栈中 const nextEdges = filterRuntimeEdges.filter((item) => item.target === edge.source); + for (const nextEdge of nextEdges) { stack.push({ edge: nextEdge, @@ -364,7 +367,7 @@ export const checkNodeRunStatus = ({ // Classify edges const { commonEdges, recursiveEdgeGroups } = splitNodeEdges(node); - + console.log(JSON.stringify({ commonEdges, recursiveEdgeGroups }, null, 2)); // Entry if (commonEdges.length === 0 && recursiveEdgeGroups.length === 0) { return 'run'; diff --git a/packages/service/core/workflow/dispatch/ai/agent/utils.ts b/packages/service/core/workflow/dispatch/ai/agent/utils.ts index 4855ee724..9939dae10 100644 --- a/packages/service/core/workflow/dispatch/ai/agent/utils.ts +++ b/packages/service/core/workflow/dispatch/ai/agent/utils.ts @@ -62,9 +62,12 @@ export const initToolNodes = ( nodes.forEach((node) => { if (entryNodeIds.includes(node.nodeId)) { node.isEntry = true; + node.isStart = true; if (startParams) { node.inputs = updateToolInputValue({ params: startParams, inputs: node.inputs }); } + } else { + node.isStart = false; } }); }; diff --git a/projects/app/src/components/core/app/ScheduledTriggerConfig.tsx b/projects/app/src/components/core/app/ScheduledTriggerConfig.tsx index 713ea99d1..6efd1d38b 100644 --- a/projects/app/src/components/core/app/ScheduledTriggerConfig.tsx +++ b/projects/app/src/components/core/app/ScheduledTriggerConfig.tsx @@ -8,7 +8,7 @@ import { Textarea, HStack } from '@chakra-ui/react'; -import React, { useCallback, useEffect, useMemo } from 'react'; +import React, { useCallback, useEffect } from 'react'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { useTranslation } from 'next-i18next'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; @@ -61,105 +61,91 @@ const ScheduledTriggerConfig = ({ } }, []); - const Render = useMemo(() => { - return ( - <> - - - - {t('common:core.app.Interval timer run')} - - - - - - + return ( + <> + + + + {t('common:core.app.Interval timer run')} + + + + + + - - - - {t('common:core.app.schedule.Open schedule')} - { - if (e.target.checked) { - onUpdate({ cronString: defaultCronString }); - } else { - onUpdate({ cronString: '' }); - } - }} - /> - - {isOpenSchedule && ( - <> - - {t('app:execute_time')} - - { - onUpdate({ cronString: e }); - }} - /> - - - - {t('app:time_zone')} - - { - onUpdate({ timezone: e }); - }} - /> - - - - {t('common:core.app.schedule.Default prompt')} -