11import { createLogger } from '@/lib/logs/console/logger'
22import { buildLoopIndexCondition , DEFAULTS , EDGE } from '@/executor/constants'
33import type { DAG } from '@/executor/dag/builder'
4+ import type { EdgeManager } from '@/executor/execution/edge-manager'
45import type { LoopScope } from '@/executor/execution/state'
56import type { BlockStateController } from '@/executor/execution/types'
67import type { ExecutionContext , NormalizedBlockOutput } from '@/executor/types'
@@ -26,12 +27,18 @@ export interface LoopContinuationResult {
2627}
2728
2829export class LoopOrchestrator {
30+ private edgeManager : EdgeManager | null = null
31+
2932 constructor (
3033 private dag : DAG ,
3134 private state : BlockStateController ,
3235 private resolver : VariableResolver
3336 ) { }
3437
38+ setEdgeManager ( edgeManager : EdgeManager ) : void {
39+ this . edgeManager = edgeManager
40+ }
41+
3542 initializeLoopScope ( ctx : ExecutionContext , loopId : string ) : LoopScope {
3643 const loopConfig = this . dag . loopConfigs . get ( loopId ) as SerializedLoop | undefined
3744 if ( ! loopConfig ) {
@@ -216,23 +223,26 @@ export class LoopOrchestrator {
216223 const loopNodes = loopConfig . nodes
217224 const allLoopNodeIds = new Set ( [ sentinelStartId , sentinelEndId , ...loopNodes ] )
218225
219- let restoredCount = 0
226+ // Clear deactivated edges for loop nodes so error/success edges can be re-evaluated
227+ if ( this . edgeManager ) {
228+ this . edgeManager . clearDeactivatedEdgesForNodes ( allLoopNodeIds )
229+ }
230+
220231 for ( const nodeId of allLoopNodeIds ) {
221232 const nodeToRestore = this . dag . nodes . get ( nodeId )
222233 if ( ! nodeToRestore ) continue
223234
224235 for ( const [ potentialSourceId , potentialSourceNode ] of this . dag . nodes ) {
225236 if ( ! allLoopNodeIds . has ( potentialSourceId ) ) continue
226237
227- for ( const [ _ , edge ] of potentialSourceNode . outgoingEdges ) {
238+ for ( const [ , edge ] of potentialSourceNode . outgoingEdges ) {
228239 if ( edge . target === nodeId ) {
229240 const isBackwardEdge =
230241 edge . sourceHandle === EDGE . LOOP_CONTINUE ||
231242 edge . sourceHandle === EDGE . LOOP_CONTINUE_ALT
232243
233244 if ( ! isBackwardEdge ) {
234245 nodeToRestore . incomingEdges . add ( potentialSourceId )
235- restoredCount ++
236246 }
237247 }
238248 }
0 commit comments