From 4f4aaa840ffb60bb84757efc552158e5c9626265 Mon Sep 17 00:00:00 2001 From: 0007 <0007@qq.com> Date: Wed, 27 Aug 2025 19:58:48 +0800 Subject: [PATCH] Add File --- .../agentsflex/core/chain/NodeContext.java | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 agents-flex-core/src/main/java/com/agentsflex/core/chain/NodeContext.java diff --git a/agents-flex-core/src/main/java/com/agentsflex/core/chain/NodeContext.java b/agents-flex-core/src/main/java/com/agentsflex/core/chain/NodeContext.java new file mode 100644 index 0000000..03d087a --- /dev/null +++ b/agents-flex-core/src/main/java/com/agentsflex/core/chain/NodeContext.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com). + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.agentsflex.core.chain; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +public class NodeContext { + + public ChainNode currentNode; + public ChainNode prevNode; + public String fromEdgeId; + + private AtomicInteger triggerCount = new AtomicInteger(0); + private List triggerEdgeIds = new ArrayList<>(); + + private AtomicInteger executeCount = new AtomicInteger(0); + private List executeEdgeIds = new ArrayList<>(); + + public ChainNode getCurrentNode() { + return currentNode; + } + + public ChainNode getPrevNode() { + return prevNode; + } + + public String getFromEdgeId() { + return fromEdgeId; + } + + public int getTriggerCount() { + return triggerCount.get(); + } + + public List getTriggerEdgeIds() { + return triggerEdgeIds; + } + + public int getExecuteCount() { + return executeCount.get(); + } + + public List getExecuteEdgeIds() { + return executeEdgeIds; + } + + public void setCurrentNode(ChainNode currentNode) { + this.currentNode = currentNode; + } + + public void setPrevNode(ChainNode prevNode) { + this.prevNode = prevNode; + } + + public void setFromEdgeId(String fromEdgeId) { + this.fromEdgeId = fromEdgeId; + } + + public void setTriggerCount(AtomicInteger triggerCount) { + this.triggerCount = triggerCount; + } + + public void setTriggerEdgeIds(List triggerEdgeIds) { + this.triggerEdgeIds = triggerEdgeIds; + } + + public void setExecuteCount(AtomicInteger executeCount) { + this.executeCount = executeCount; + } + + public void setExecuteEdgeIds(List executeEdgeIds) { + this.executeEdgeIds = executeEdgeIds; + } + + public boolean isUpstreamFullyExecuted() { + List inwardEdges = currentNode.getInwardEdges(); + if (inwardEdges == null || inwardEdges.isEmpty()) { + return true; + } + + List shouldBeTriggerIds = inwardEdges.stream().map(ChainEdge::getId).collect(Collectors.toList()); + return triggerEdgeIds.size() >= shouldBeTriggerIds.size() + && shouldBeTriggerIds.parallelStream().allMatch(triggerEdgeIds::contains); + } + + public void recordTrigger(Chain.ExecuteNode executeNode) { + this.currentNode = executeNode.currentNode; + this.prevNode = executeNode.prevNode; + this.fromEdgeId = executeNode.fromEdgeId; + + triggerCount.incrementAndGet(); + triggerEdgeIds.add(executeNode.fromEdgeId); + } + + public synchronized void recordExecute(Chain.ExecuteNode executeNode) { + executeCount.incrementAndGet(); + executeEdgeIds.add(executeNode.fromEdgeId); + } +}