@codemation/core 0.0.7 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/package.json +6 -1
  2. package/dist/EngineExecutionLimitsPolicy-8MEFIYx1.d.cts +0 -160
  3. package/dist/EngineExecutionLimitsPolicy-BWAXW9D6.d.cts +0 -160
  4. package/dist/EngineExecutionLimitsPolicy-Bp8PS1Ss.d.cts +0 -159
  5. package/dist/EngineExecutionLimitsPolicy-CLxcN-D2.d.ts +0 -159
  6. package/dist/EngineExecutionLimitsPolicy-DZXuix51.d.ts +0 -160
  7. package/dist/EngineExecutionLimitsPolicy-Gfz6ngFd.d.ts +0 -160
  8. package/dist/EngineFactory-CBnntY3J.cjs +0 -3152
  9. package/dist/EngineFactory-CBnntY3J.cjs.map +0 -1
  10. package/dist/EngineFactory-Cwn3R2YA.js +0 -3087
  11. package/dist/EngineFactory-Cwn3R2YA.js.map +0 -1
  12. package/dist/EngineFactory-DWCnNocp.js +0 -3063
  13. package/dist/EngineFactory-DWCnNocp.js.map +0 -1
  14. package/dist/EngineFactory-DhPFou4p.cjs +0 -3188
  15. package/dist/EngineFactory-DhPFou4p.cjs.map +0 -1
  16. package/dist/EngineFactory-l_9xmBtv.cjs +0 -3190
  17. package/dist/EngineFactory-l_9xmBtv.cjs.map +0 -1
  18. package/dist/EngineFactory-w-aOWuqh.js +0 -3089
  19. package/dist/EngineFactory-w-aOWuqh.js.map +0 -1
  20. package/dist/InMemoryLiveWorkflowRepository-1J9MHN_I.js +0 -18
  21. package/dist/InMemoryLiveWorkflowRepository-1J9MHN_I.js.map +0 -1
  22. package/dist/InMemoryLiveWorkflowRepository-CULNqv96.d.ts +0 -1300
  23. package/dist/InMemoryLiveWorkflowRepository-D6eiiXxF.d.cts +0 -1168
  24. package/dist/InMemoryLiveWorkflowRepository-D7l8cjdZ.d.cts +0 -1130
  25. package/dist/InMemoryLiveWorkflowRepository-DL7LmC9S.d.ts +0 -1340
  26. package/dist/InMemoryLiveWorkflowRepository-jnv-OnOP.d.ts +0 -1300
  27. package/dist/InMemoryLiveWorkflowRepository-xny1_Z6i.cjs +0 -24
  28. package/dist/InMemoryLiveWorkflowRepository-xny1_Z6i.cjs.map +0 -1
  29. package/dist/InMemoryLiveWorkflowRepository-xr7b4kvi.d.ts +0 -1338
  30. package/dist/InMemoryWorkflowCatalog-BIdFpwbK.d.ts +0 -1205
  31. package/dist/InMemoryWorkflowCatalog-BW00_3N3.d.cts +0 -12
  32. package/dist/InMemoryWorkflowCatalog-BiYHGoPw.cjs +0 -24
  33. package/dist/InMemoryWorkflowCatalog-BiYHGoPw.cjs.map +0 -1
  34. package/dist/InMemoryWorkflowCatalog-BrG0ApMO.d.cts +0 -1115
  35. package/dist/InMemoryWorkflowCatalog-BzrAr--Y.js +0 -139
  36. package/dist/InMemoryWorkflowCatalog-BzrAr--Y.js.map +0 -1
  37. package/dist/InMemoryWorkflowCatalog-C-EJlJ7y.d.cts +0 -1120
  38. package/dist/InMemoryWorkflowCatalog-C4482bpw.cjs +0 -24
  39. package/dist/InMemoryWorkflowCatalog-C4482bpw.cjs.map +0 -1
  40. package/dist/InMemoryWorkflowCatalog-CZ0kZpOv.d.ts +0 -1289
  41. package/dist/InMemoryWorkflowCatalog-C_ACeLyW.d.cts +0 -1119
  42. package/dist/InMemoryWorkflowCatalog-CiHWIu5E.d.cts +0 -12
  43. package/dist/InMemoryWorkflowCatalog-CkH7gkya.js +0 -18
  44. package/dist/InMemoryWorkflowCatalog-CkH7gkya.js.map +0 -1
  45. package/dist/InMemoryWorkflowCatalog-CnpZVJM9.d.ts +0 -1205
  46. package/dist/InMemoryWorkflowCatalog-Cu68S8YR.js +0 -18
  47. package/dist/InMemoryWorkflowCatalog-Cu68S8YR.js.map +0 -1
  48. package/dist/InMemoryWorkflowCatalog-D2w9nMj2.cjs +0 -151
  49. package/dist/InMemoryWorkflowCatalog-D2w9nMj2.cjs.map +0 -1
  50. package/dist/InMemoryWorkflowCatalog-D5eMxEf7.js +0 -18
  51. package/dist/InMemoryWorkflowCatalog-D5eMxEf7.js.map +0 -1
  52. package/dist/InMemoryWorkflowCatalog-D5nCp2yZ.d.ts +0 -1267
  53. package/dist/InMemoryWorkflowCatalog-DIq0bjqN.d.ts +0 -12
  54. package/dist/InMemoryWorkflowCatalog-DLgaEaw_.d.ts +0 -1288
  55. package/dist/InMemoryWorkflowCatalog-DNBFdK-x.d.cts +0 -1120
  56. package/dist/InMemoryWorkflowCatalog-DQBkCzb7.cjs +0 -24
  57. package/dist/InMemoryWorkflowCatalog-DQBkCzb7.cjs.map +0 -1
  58. package/dist/InMemoryWorkflowCatalog-DS4-eX6i.d.cts +0 -1118
  59. package/dist/InMemoryWorkflowCatalog-DdVfy8MY.d.ts +0 -12
  60. package/dist/InMemoryWorkflowCatalog-DeVZu3g8.d.ts +0 -12
  61. package/dist/InMemoryWorkflowCatalog-GxkQjvt5.d.ts +0 -1200
  62. package/dist/InMemoryWorkflowCatalog-qaVRn1Lc.d.cts +0 -1115
  63. package/dist/InMemoryWorkflowCatalog-z1aIT4TC.d.cts +0 -12
  64. package/dist/InMemoryWorkflowRegistry-BBuOovLL.d.ts +0 -1007
  65. package/dist/InMemoryWorkflowRegistry-BIFnSl3k.d.ts +0 -1201
  66. package/dist/InMemoryWorkflowRegistry-BnGilthz.d.ts +0 -1137
  67. package/dist/InMemoryWorkflowRegistry-CEp5I8No.d.ts +0 -1146
  68. package/dist/InMemoryWorkflowRegistry-CHyMB9jW.d.cts +0 -976
  69. package/dist/InMemoryWorkflowRegistry-CUN7K86m.d.cts +0 -1061
  70. package/dist/InMemoryWorkflowRegistry-CVfHyELh.d.cts +0 -971
  71. package/dist/InMemoryWorkflowRegistry-CXXJrwAr.d.cts +0 -1052
  72. package/dist/InMemoryWorkflowRegistry-DDGfPTJy.d.ts +0 -1013
  73. package/dist/InMemoryWorkflowRegistry-DnYSOoT5.d.ts +0 -1120
  74. package/dist/InMemoryWorkflowRegistry-Dp5GiFF2.d.cts +0 -1035
  75. package/dist/InMemoryWorkflowRegistry-DypDBeOw.d.cts +0 -1116
  76. package/dist/InMemoryWorkflowRegistry-SzwJCAxT.d.ts +0 -1012
  77. package/dist/InMemoryWorkflowRegistry-jupvqyGc.d.cts +0 -977
  78. package/dist/InMemoryWorkflowRegistry-rAdKVWYT.d.ts +0 -1117
  79. package/dist/InProcessRetryRunner-BBNPkXjy.d.cts +0 -292
  80. package/dist/PersistedWorkflowSnapshotFactory-7RkOL3Kg.d.ts +0 -14
  81. package/dist/PersistedWorkflowSnapshotFactory-BmANa46W.cjs +0 -141
  82. package/dist/PersistedWorkflowSnapshotFactory-BmANa46W.cjs.map +0 -1
  83. package/dist/PersistedWorkflowSnapshotFactory-Bwb_etSt.js +0 -118
  84. package/dist/PersistedWorkflowSnapshotFactory-Bwb_etSt.js.map +0 -1
  85. package/dist/PersistedWorkflowSnapshotFactory-CRkKGNV6.js +0 -123
  86. package/dist/PersistedWorkflowSnapshotFactory-CRkKGNV6.js.map +0 -1
  87. package/dist/PersistedWorkflowSnapshotFactory-CZolnGy5.js +0 -101
  88. package/dist/PersistedWorkflowSnapshotFactory-CZolnGy5.js.map +0 -1
  89. package/dist/PersistedWorkflowSnapshotFactory-Ca_oysOv.cjs +0 -131
  90. package/dist/PersistedWorkflowSnapshotFactory-Ca_oysOv.cjs.map +0 -1
  91. package/dist/PersistedWorkflowSnapshotFactory-CqIcShnX.js +0 -103
  92. package/dist/PersistedWorkflowSnapshotFactory-CqIcShnX.js.map +0 -1
  93. package/dist/PersistedWorkflowSnapshotFactory-D-tBk4_G.js +0 -119
  94. package/dist/PersistedWorkflowSnapshotFactory-D-tBk4_G.js.map +0 -1
  95. package/dist/PersistedWorkflowSnapshotFactory-D4cXl2e2.cjs +0 -131
  96. package/dist/PersistedWorkflowSnapshotFactory-D4cXl2e2.cjs.map +0 -1
  97. package/dist/PersistedWorkflowSnapshotFactory-DINoP12r.cjs +0 -131
  98. package/dist/PersistedWorkflowSnapshotFactory-DINoP12r.cjs.map +0 -1
  99. package/dist/PersistedWorkflowSnapshotFactory-DJAwSuHU.js +0 -103
  100. package/dist/PersistedWorkflowSnapshotFactory-DJAwSuHU.js.map +0 -1
  101. package/dist/PersistedWorkflowSnapshotFactory-DSUjVCcf.cjs +0 -131
  102. package/dist/PersistedWorkflowSnapshotFactory-DSUjVCcf.cjs.map +0 -1
  103. package/dist/PersistedWorkflowSnapshotFactory-DdHuhkDb.cjs +0 -107
  104. package/dist/PersistedWorkflowSnapshotFactory-DdHuhkDb.cjs.map +0 -1
  105. package/dist/PersistedWorkflowSnapshotFactory-Dqc6NHis.js +0 -119
  106. package/dist/PersistedWorkflowSnapshotFactory-Dqc6NHis.js.map +0 -1
  107. package/dist/PersistedWorkflowSnapshotFactory-Dxa2dSrw.cjs +0 -130
  108. package/dist/PersistedWorkflowSnapshotFactory-Dxa2dSrw.cjs.map +0 -1
  109. package/dist/PersistedWorkflowSnapshotFactory-Ep79Ah1G.js +0 -123
  110. package/dist/PersistedWorkflowSnapshotFactory-Ep79Ah1G.js.map +0 -1
  111. package/dist/PersistedWorkflowSnapshotFactory-GyLfRuiJ.js +0 -119
  112. package/dist/PersistedWorkflowSnapshotFactory-GyLfRuiJ.js.map +0 -1
  113. package/dist/PersistedWorkflowSnapshotFactory-HTpBsBzn.js +0 -102
  114. package/dist/PersistedWorkflowSnapshotFactory-HTpBsBzn.js.map +0 -1
  115. package/dist/PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs +0 -141
  116. package/dist/PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs.map +0 -1
  117. package/dist/PersistedWorkflowSnapshotFactory-PZCpo2ZS.js +0 -119
  118. package/dist/PersistedWorkflowSnapshotFactory-PZCpo2ZS.js.map +0 -1
  119. package/dist/PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs +0 -109
  120. package/dist/PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs.map +0 -1
  121. package/dist/PersistedWorkflowSnapshotFactory-Y8kCrhcy.cjs +0 -109
  122. package/dist/PersistedWorkflowSnapshotFactory-Y8kCrhcy.cjs.map +0 -1
  123. package/dist/PersistedWorkflowSnapshotFactory-Z_nB-fmB.cjs +0 -108
  124. package/dist/PersistedWorkflowSnapshotFactory-Z_nB-fmB.cjs.map +0 -1
  125. package/dist/RunIntentService-1EE6N8ZL.cjs +0 -963
  126. package/dist/RunIntentService-1EE6N8ZL.cjs.map +0 -1
  127. package/dist/RunIntentService-2ivFmNQh.cjs +0 -3462
  128. package/dist/RunIntentService-2ivFmNQh.cjs.map +0 -1
  129. package/dist/RunIntentService-B0sUL5q-.js +0 -761
  130. package/dist/RunIntentService-B0sUL5q-.js.map +0 -1
  131. package/dist/RunIntentService-BFVbsOcg.js +0 -3131
  132. package/dist/RunIntentService-BFVbsOcg.js.map +0 -1
  133. package/dist/RunIntentService-BsBOwpVN.cjs +0 -1051
  134. package/dist/RunIntentService-BsBOwpVN.cjs.map +0 -1
  135. package/dist/RunIntentService-CSk3ETyn.js +0 -858
  136. package/dist/RunIntentService-CSk3ETyn.js.map +0 -1
  137. package/dist/RunIntentService-Ckn3u3tA.d.cts +0 -326
  138. package/dist/RunIntentService-DEo6GTTo.d.cts +0 -289
  139. package/dist/RunIntentService-DKrGtL0B.js +0 -782
  140. package/dist/RunIntentService-DKrGtL0B.js.map +0 -1
  141. package/dist/RunIntentService-DNOJc1R7.cjs +0 -942
  142. package/dist/RunIntentService-DNOJc1R7.cjs.map +0 -1
  143. package/dist/RunIntentService-Dq3pV53j.d.cts +0 -289
  144. package/dist/RunIntentService-NKobsfMQ.d.cts +0 -274
  145. package/dist/WorkflowSnapshotCodec-C3fuuS_R.d.cts +0 -22
  146. package/dist/WorkflowSnapshotCodec-CUudUo6f.js +0 -123
  147. package/dist/WorkflowSnapshotCodec-CUudUo6f.js.map +0 -1
  148. package/dist/WorkflowSnapshotCodec-CuCPQZTc.cjs +0 -129
  149. package/dist/WorkflowSnapshotCodec-CuCPQZTc.cjs.map +0 -1
  150. package/dist/WorkflowSnapshotCodec-DLiXQNvV.d.cts +0 -22
  151. package/dist/WorkflowSnapshotCodec-DNtdrZ7l.d.cts +0 -22
  152. package/dist/WorkflowSnapshotCodec-DTdWkoW_.d.cts +0 -22
  153. package/dist/credentialTypes-B5h3dI7r.d.cts +0 -1107
  154. package/dist/credentialTypes-B9okPCVo.d.cts +0 -963
  155. package/dist/credentialTypes-BFL70rgZ.d.cts +0 -964
  156. package/dist/credentialTypes-BGkh1O07.d.ts +0 -1010
  157. package/dist/credentialTypes-BNLi4Q7u.d.ts +0 -1030
  158. package/dist/credentialTypes-CeSoZGj3.d.cts +0 -994
  159. package/dist/credentialTypes-CpHc32Ig.d.cts +0 -984
  160. package/dist/credentialTypes-D0m7MQQl.d.cts +0 -1107
  161. package/dist/credentialTypes-D4nL2sUd.d.ts +0 -1000
  162. package/dist/credentialTypes-DBYK2Qbu.d.ts +0 -999
  163. package/dist/credentialTypes-DMJVy0r1.d.ts +0 -1000
  164. package/dist/credentialTypes-DhUAjYQp.d.ts +0 -1020
  165. package/dist/credentialTypes-gGITj5KL.d.cts +0 -964
  166. package/dist/credentialTypes-r3KVBJBE.d.cts +0 -974
  167. package/dist/diTokens-ClO27tjK.cjs +0 -34
  168. package/dist/diTokens-ClO27tjK.cjs.map +0 -1
  169. package/dist/diTokens-CoHBkwG6.js +0 -28
  170. package/dist/diTokens-CoHBkwG6.js.map +0 -1
  171. package/dist/index-6Doxmfnd.d.ts +0 -857
  172. package/dist/index-9g6Pfe9Z.d.ts +0 -689
  173. package/dist/index-AZ72Ej-K.d.ts +0 -920
  174. package/dist/index-BEk9V-q-.d.ts +0 -667
  175. package/dist/index-Bjt7_7oS.d.ts +0 -1192
  176. package/dist/index-CFGxsYXy.d.ts +0 -708
  177. package/dist/index-C_u8xFgn.d.ts +0 -690
  178. package/dist/index-CpbfsvOJ.d.ts +0 -1192
  179. package/dist/index-CsReNJN_.d.ts +0 -859
  180. package/dist/index-D5iNnXaW.d.ts +0 -667
  181. package/dist/index-DD_Eft1q.d.ts +0 -708
  182. package/dist/index-DiSYUe0G.d.ts +0 -1192
  183. package/dist/index-gIcH60sp.d.ts +0 -674
  184. package/dist/runtime-BIvd-1JA.cjs +0 -4112
  185. package/dist/runtime-BIvd-1JA.cjs.map +0 -1
  186. package/dist/runtime-D3eWKSQK.cjs +0 -3986
  187. package/dist/runtime-D3eWKSQK.cjs.map +0 -1
  188. package/dist/runtime-Dvp4xAjg.js +0 -3799
  189. package/dist/runtime-Dvp4xAjg.js.map +0 -1
  190. package/dist/runtime-vc76SSAa.js +0 -3685
  191. package/dist/runtime-vc76SSAa.js.map +0 -1
  192. package/dist/runtimeTypes-BK0b8SaG.d.cts +0 -884
  193. package/dist/runtimeTypes-CoYZkYQq.d.cts +0 -851
  194. package/dist/runtimeTypes-D-Pm0Uas.d.cts +0 -849
  195. package/dist/types-Cb5UK7Y6.d.ts +0 -857
@@ -1 +0,0 @@
1
- {"version":3,"file":"EngineFactory-DWCnNocp.js","names":["ENGINE_EXECUTION_LIMITS_DEFAULTS: EngineExecutionLimitsPolicyConfig","config: EngineExecutionLimitsPolicyConfig","deps: EngineFacadeDeps","name: string","missingTokenId?: string","name: string","missingTokenId?: string","config","tokenRegistry: PersistedWorkflowTokenRegistryLike","workflowRepository: WorkflowRepository","tokenRegistry: PersistedWorkflowTokenRegistryLike","configHydrator: PersistedWorkflowConfigHydrator","missingNodeDefinitionFactory: MissingRuntimeNodeDefinitionFactory","activationScheduler: {\n enqueue: (request: NodeActivationRequest) => Promise<{ receiptId: string; queue?: string }>;\n } & {\n notifyPendingStatePersisted?: (runId: RunId) => void;\n }","runStore: RunStateStore","nodeEventPublisher: NodeEventPublisher","pending: PendingNodeExecution","topology: WorkflowTopology","currentState: RunCurrentState","topology: WorkflowTopology","satisfactionResolver: DependencySatisfactionResolver","received: Record<InputPortKey, Items>","input","currentState: RunCurrentState","outputsByNode: Record<NodeId, NodeOutputs>","topology: WorkflowTopology","satisfactionResolver: DependencySatisfactionResolver","topology: WorkflowTopology","pinnedOutputResolver: PinnedOutputResolver","outputsByNode: Record<NodeId, NodeOutputs>","clearedNodeIds: NodeId[]","preservedPinnedNodeIds: NodeId[]","pendingNodeIds: NodeId[]","topology: WorkflowTopology","queue: RunQueueEntry[]","satisfiedNodeIds: NodeId[]","frontierNodeIds: NodeId[]","defsById: ReadonlyMap<NodeId, NodeDef>","outgoingByNode: ReadonlyMap<\n NodeId,\n ReadonlyArray<Readonly<{ output: OutputPortKey; to: Readonly<{ nodeId: NodeId; input: InputPortKey }> }>>\n >","incomingByNode: ReadonlyMap<\n NodeId,\n ReadonlyArray<Readonly<{ from: Readonly<{ nodeId: NodeId; output: OutputPortKey }>; input: InputPortKey }>>\n >","expectedInputsByNode: ReadonlyMap<NodeId, ReadonlyArray<InputPortKey>>","rootNodeIds: ReadonlyArray<NodeId>","order: InputPortKey[]","runIdFactory: RunIdFactory","runStore: RunStateStore","runDataFactory: RunDataFactory","workflowSnapshotFactory: WorkflowSnapshotFactory","planningFactory: EngineWorkflowPlanningFactory","nodeStatePublisherFactory: NodeExecutionStatePublisherFactory","runExecutionContextFactory: WorkflowRunExecutionContextFactory","nodeActivationRequestComposer: NodeActivationRequestComposer","activationEnqueueService: ActivationEnqueueService","semantics: RunStateSemantics","waiters: EngineWaiters","workflowPolicyRuntimeDefaults: WorkflowPolicyRuntimeDefaults | undefined","executionLimitsPolicy: EngineExecutionLimitsPolicy","request","result: RunResult","activationIdFactory: ActivationIdFactory","credentialResolverFactory: CredentialResolverFactory","ctx: NodeExecutionContext","activationIdFactory: ActivationIdFactory","runStore: RunStateStore","runDataFactory: RunDataFactory","runExecutionContextFactory: WorkflowRunExecutionContextFactory","workflowSnapshotResolver: WorkflowSnapshotResolver","planningFactory: EngineWorkflowPlanningFactory","nodeStatePublisherFactory: NodeExecutionStatePublisherFactory","credentialResolverFactory: CredentialResolverFactory","nodeActivationRequestComposer: NodeActivationRequestComposer","persistedRunStateTerminalBuilder: PersistedRunStateTerminalBuilder","activationEnqueueService: ActivationEnqueueService","nodeEventPublisher: NodeEventPublisher","semantics: RunStateSemantics","waiters: EngineWaiters","policyErrorServices: WorkflowPolicyErrorServices","terminalPersistence: RunTerminalPersistenceCoordinator","executionLimitsPolicy: EngineExecutionLimitsPolicy","result: RunResult","result","queue: RunQueueEntry[]","next: ReturnType<(typeof planner)[\"nextActivation\"]>","triggerOutputs: NodeOutputs","executionContextFactory: ExecutionContextFactory","credentialResolverFactory: CredentialResolverFactory","runIdFactory: RunIdFactory","runStore: RunStateStore","runDataFactory: RunDataFactory","workflowSnapshotFactory: WorkflowSnapshotFactory","planningFactory: EngineWorkflowPlanningFactory","nodeStatePublisherFactory: NodeExecutionStatePublisherFactory","runExecutionContextFactory: WorkflowRunExecutionContextFactory","nodeActivationRequestComposer: NodeActivationRequestComposer","activationEnqueueService: ActivationEnqueueService","waiters: EngineWaiters","workflowPolicyRuntimeDefaults: WorkflowPolicyRuntimeDefaults | undefined","executionLimitsPolicy: EngineExecutionLimitsPolicy","queue: RunQueueEntry[]","initialNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>","request","result: RunResult","runStore: RunStateStore","storageEvaluator: WorkflowStoragePolicyEvaluator","nodeResolver: NodeResolver","nodeResolver: NodeResolver","credentialSessions: CredentialSessionService","eventBus: RunEventBus | undefined","topology: WorkflowTopology","nodeInstances: ReadonlyMap<NodeId, unknown>","matches: string[]","topology: WorkflowTopology","nodeInstances: ReadonlyMap<NodeId, unknown>","inst","queue: RunQueueEntry[]","workflowNodeInstanceFactory: WorkflowNodeInstanceFactory","directedCycleDetector: DirectedCycleDetector","runStore: RunStateStore","runId: RunId","workflowId: WorkflowId","parent: ParentExecutionRef | undefined","publishNodeEvent: (\n kind: \"nodeQueued\" | \"nodeStarted\" | \"nodeCompleted\" | \"nodeFailed\",\n snapshot: NodeExecutionSnapshot,\n ) => Promise<void>","record: ConnectionInvocationRecord","runStore: RunStateStore","nodeEventPublisher: NodeEventPublisher","workflowRepository: WorkflowRepository","workflowActivationPolicy: WorkflowActivationPolicy","runIdFactory: RunIdFactory","runDataFactory: RunDataFactory","executionContextFactory: ExecutionContextFactory","nodeExecutionStatePublisherFactory: NodeExecutionStatePublisherFactory","nodeResolver: NodeResolver","triggerSetupStateStore: TriggerSetupStateStore","emitHandler: TriggerEmitHandler","executionLimitsPolicy: EngineExecutionLimitsPolicy","diagnostics?: TriggerRuntimeDiagnostics","node","nextState: unknown","triggerError: unknown","out: string[]"],"sources":["../src/engine/materialization/MissingRuntimeTriggerToken.ts","../src/engine/policies/EngineExecutionLimitsPolicy.ts","../src/engine/materialization/MissingRuntimeNodeToken.ts","../src/engine/api/Engine.ts","../src/engine/materialization/MissingRuntimeNodeConfig.ts","../src/engine/materialization/MissingRuntimeTriggerConfig.ts","../src/engine/materialization/MissingRuntimeNodeDefinitionFactory.ts","../src/engine/materialization/PersistedWorkflowConfigHydrator.ts","../src/engine/materialization/PersistedWorkflowResolver.ts","../src/engine/state/InputPortMapFactory.ts","../src/engine/state/NodeSnapshotFactory.ts","../src/engine/execution/ActivationEnqueueService.ts","../src/workflow/WorkflowExecutableNodeClassifier.ts","../src/workflow/workflowExecutableNodeClassifier.types.ts","../src/engine/planning/DependencySatisfactionResolver.ts","../src/engine/planning/FrontierQueueBuilder.ts","../src/engine/planning/PinnedOutputResolver.ts","../src/engine/planning/RequiredNodeCollector.ts","../src/engine/planning/RootNodeInputResolver.ts","../src/engine/planning/RunCurrentStateFactory.ts","../src/workflow/ConnectionNodeIdFactory.ts","../src/engine/planning/RunStateResetter.ts","../src/engine/planning/CurrentStateFrontierPlanner.ts","../src/engine/planning/WorkflowTopologyPlanner.ts","../src/engine/policies/RunPolicySnapshotFactory.ts","../src/engine/execution/CurrentStateRunStarter.ts","../src/engine/execution/NodeActivationRequestComposer.ts","../src/engine/execution/PersistedRunStateTerminalBuilder.ts","../src/engine/state/RuntimeContinuationDiagnosticsReporter.ts","../src/engine/execution/RunContinuationService.ts","../src/engine/materialization/MissingRuntimeExecutionMarkerFactory.ts","../src/engine/execution/RunStateSemantics.ts","../src/engine/execution/WorkflowRunExecutionContextFactory.ts","../src/engine/execution/WorkflowRunStarter.ts","../src/engine/policies/RunTerminalPersistenceCoordinator.ts","../src/engine/policies/WorkflowPolicyErrorServices.ts","../src/engine/policies/WorkflowStoragePolicyEvaluator.ts","../src/engine/credentials/CredentialResolverFactory.ts","../src/events/NodeEventPublisher.ts","../src/engine/planning/RunQueuePlannerDiagnostics.ts","../src/engine/planning/RunQueuePlanner.ts","../src/engine/planning/EngineWorkflowPlanningFactory.ts","../src/engine/planning/DirectedCycleDetector.ts","../src/engine/state/BoundNodeExecutionStatePublisher.ts","../src/engine/state/NodeExecutionStatePublisherFactory.ts","../src/engine/triggers/TriggerRuntimeService.ts","../src/engine/waiters/EngineWaiters.ts","../src/engine/api/EngineFactory.ts"],"sourcesContent":["export class MissingRuntimeTriggerToken {}\n","import type { ParentExecutionRef, RunExecutionOptions } from \"../../types\";\n\nexport interface EngineExecutionLimitsPolicyConfig {\n readonly defaultMaxNodeActivations: number;\n readonly hardMaxNodeActivations: number;\n readonly defaultMaxSubworkflowDepth: number;\n readonly hardMaxSubworkflowDepth: number;\n}\n\n/** Framework defaults for {@link EngineExecutionLimitsPolicy} (merged with host `runtime.engineExecutionLimits`). */\nexport const ENGINE_EXECUTION_LIMITS_DEFAULTS: EngineExecutionLimitsPolicyConfig = {\n defaultMaxNodeActivations: 100_000,\n hardMaxNodeActivations: 100_000,\n defaultMaxSubworkflowDepth: 32,\n hardMaxSubworkflowDepth: 32,\n};\n\n/**\n * Resolves per-run execution limits: defaults, hard ceilings, and subworkflow depth for new runs.\n */\nexport class EngineExecutionLimitsPolicy {\n constructor(private readonly config: EngineExecutionLimitsPolicyConfig = ENGINE_EXECUTION_LIMITS_DEFAULTS) {}\n\n /**\n * Effective options for a new root run (depth 0): defaults merged with engine ceilings.\n * Replaces a separate one-method factory for root-run bootstrap.\n */\n createRootExecutionOptions(): RunExecutionOptions {\n return this.mergeExecutionOptionsForNewRun(undefined, undefined);\n }\n\n mergeExecutionOptionsForNewRun(\n parent: ParentExecutionRef | undefined,\n user: RunExecutionOptions | undefined,\n ): RunExecutionOptions {\n const subworkflowDepth = parent === undefined ? 0 : (parent.subworkflowDepth ?? 0) + 1;\n const inheritedMaxNode = parent?.engineMaxNodeActivations;\n const inheritedMaxSub = parent?.engineMaxSubworkflowDepth;\n const maxNodeActivations = this.capNumber(\n user?.maxNodeActivations ?? inheritedMaxNode,\n this.config.defaultMaxNodeActivations,\n this.config.hardMaxNodeActivations,\n );\n const maxSubworkflowDepth = this.capNumber(\n user?.maxSubworkflowDepth ?? inheritedMaxSub,\n this.config.defaultMaxSubworkflowDepth,\n this.config.hardMaxSubworkflowDepth,\n );\n if (subworkflowDepth > maxSubworkflowDepth) {\n throw new Error(\n `Subworkflow nesting depth ${subworkflowDepth} exceeds maxSubworkflowDepth ${maxSubworkflowDepth} (run would be a child of parent run).`,\n );\n }\n return {\n ...user,\n subworkflowDepth,\n maxNodeActivations,\n maxSubworkflowDepth,\n };\n }\n\n private capNumber(requested: number | undefined, defaultValue: number, hardCeiling: number): number {\n const base = requested === undefined ? defaultValue : requested;\n return Math.min(base, hardCeiling);\n }\n}\n","export class MissingRuntimeNodeToken {}\n","import type {\n CurrentStateExecutionRequest,\n HttpMethod,\n Items,\n NodeActivationContinuation,\n NodeActivationId,\n NodeId,\n NodeInputsByPort,\n NodeOutputs,\n ParentExecutionRef,\n PersistedWorkflowTokenRegistryLike,\n RunExecutionOptions,\n RunId,\n RunResult,\n RunStateStore,\n WebhookRunResult,\n WebhookTriggerMatcher,\n WebhookTriggerResolution,\n WorkflowDefinition,\n WorkflowId,\n WorkflowCatalog,\n WorkflowSnapshotResolver,\n} from \"../../types\";\n\ninterface EngineTriggerRuntime {\n startTriggers(): Promise<void>;\n stop(): Promise<void>;\n syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void>;\n createTriggerTestItems(args: { workflow: WorkflowDefinition; nodeId: NodeId }): Promise<Items | undefined>;\n}\n\ninterface EngineWorkflowRunStarter {\n runWorkflow(\n wf: WorkflowDefinition,\n startAt: NodeId,\n items: Items,\n parent?: ParentExecutionRef,\n executionOptions?: RunExecutionOptions,\n persistedStateOverrides?: Readonly<{\n workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n }>,\n ): Promise<RunResult>;\n}\n\ninterface EngineCurrentStateRunStarter {\n runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult>;\n}\n\ninterface EngineRunContinuationService {\n markNodeRunning(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n inputsByPort: NodeInputsByPort;\n }): Promise<void>;\n resumeFromNodeResult(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n outputs: NodeOutputs;\n }): Promise<RunResult>;\n resumeFromNodeError(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n error: Error;\n }): Promise<RunResult>;\n resumeFromStepResult(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n outputs: NodeOutputs;\n }): Promise<RunResult>;\n resumeFromStepError(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n error: Error;\n }): Promise<RunResult>;\n waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" }>>;\n waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult>;\n}\n\nexport interface EngineFacadeDeps {\n workflowCatalog: WorkflowCatalog;\n tokenRegistry: PersistedWorkflowTokenRegistryLike;\n webhookTriggerMatcher: WebhookTriggerMatcher;\n workflowSnapshotResolver: WorkflowSnapshotResolver;\n triggerRuntime: EngineTriggerRuntime;\n workflowRunStarter: EngineWorkflowRunStarter;\n currentStateRunStarter: EngineCurrentStateRunStarter;\n runContinuationService: EngineRunContinuationService;\n}\n\n/**\n * Runtime facade for orchestration, continuation, triggers, and webhook routing.\n * Prefer {@link import(\"../intents/RunIntentService\").RunIntentService} for host/HTTP invocation boundaries.\n * The class token is exported from `@codemation/core/bootstrap` (not the main `@codemation/core` barrel).\n */\nexport class Engine implements NodeActivationContinuation {\n constructor(private readonly deps: EngineFacadeDeps) {}\n\n loadWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n this.deps.tokenRegistry.registerFromWorkflows?.(workflows);\n this.deps.workflowCatalog.setWorkflows(workflows);\n this.deps.webhookTriggerMatcher.onEngineWorkflowsLoaded?.();\n }\n\n getTokenRegistry(): EngineFacadeDeps[\"tokenRegistry\"] {\n return this.deps.tokenRegistry;\n }\n\n resolveWorkflowSnapshot(args: {\n workflowId: WorkflowId;\n workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n }): WorkflowDefinition | undefined {\n return this.deps.workflowSnapshotResolver.resolve(args);\n }\n\n async startTriggers(): Promise<void> {\n return await this.deps.triggerRuntime.startTriggers();\n }\n\n async syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void> {\n await this.deps.triggerRuntime.syncWorkflowTriggersForActivation(workflowId);\n this.deps.webhookTriggerMatcher.reloadWebhookRoutes?.();\n }\n\n async start(workflows: WorkflowDefinition[]): Promise<void> {\n await this.stop();\n this.loadWorkflows(workflows);\n await this.startTriggers();\n }\n\n async stop(): Promise<void> {\n await this.deps.triggerRuntime.stop();\n this.deps.webhookTriggerMatcher.onEngineStopped?.();\n }\n\n resolveWebhookTrigger(args: { endpointPath: string; method: HttpMethod }): WebhookTriggerResolution {\n const entry = this.deps.webhookTriggerMatcher.lookup(args.endpointPath);\n if (!entry) {\n return { status: \"notFound\" };\n }\n if (!entry.methods.includes(args.method)) {\n return { status: \"methodNotAllowed\", match: entry };\n }\n return { status: \"ok\", match: entry };\n }\n\n async createTriggerTestItems(args: { workflow: WorkflowDefinition; nodeId: NodeId }): Promise<Items | undefined> {\n return await this.deps.triggerRuntime.createTriggerTestItems(args);\n }\n\n async runWorkflow(\n wf: WorkflowDefinition,\n startAt: NodeId,\n items: Items,\n parent?: ParentExecutionRef,\n executionOptions?: RunExecutionOptions,\n persistedStateOverrides?: Readonly<{\n workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n }>,\n ): Promise<RunResult> {\n return await this.deps.workflowRunStarter.runWorkflow(\n wf,\n startAt,\n items,\n parent,\n executionOptions,\n persistedStateOverrides,\n );\n }\n\n async runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult> {\n return await this.deps.currentStateRunStarter.runWorkflowFromState(request);\n }\n\n async markNodeRunning(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n inputsByPort: NodeInputsByPort;\n }): Promise<void> {\n return await this.deps.runContinuationService.markNodeRunning(args);\n }\n\n async resumeFromNodeResult(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n outputs: NodeOutputs;\n }): Promise<RunResult> {\n return await this.deps.runContinuationService.resumeFromNodeResult(args);\n }\n\n async resumeFromNodeError(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n error: Error;\n }): Promise<RunResult> {\n return await this.deps.runContinuationService.resumeFromNodeError(args);\n }\n\n async resumeFromStepResult(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n outputs: NodeOutputs;\n }): Promise<RunResult> {\n return await this.deps.runContinuationService.resumeFromStepResult(args);\n }\n\n async resumeFromStepError(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n error: Error;\n }): Promise<RunResult> {\n return await this.deps.runContinuationService.resumeFromStepError(args);\n }\n\n async waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" }>> {\n return await this.deps.runContinuationService.waitForCompletion(runId);\n }\n\n async waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult> {\n return await this.deps.runContinuationService.waitForWebhookResponse(runId);\n }\n}\n","import type { NodeConfigBase } from \"../../types\";\n\nimport { MissingRuntimeNodeToken } from \"./MissingRuntimeNodeToken\";\n\nexport class MissingRuntimeNodeConfig implements NodeConfigBase {\n readonly kind = \"node\" as const;\n readonly type = MissingRuntimeNodeToken;\n\n constructor(\n public readonly name: string,\n public readonly missingTokenId?: string,\n public readonly missingRuntime = true,\n ) {}\n}\n","import type { NodeConfigBase } from \"../../types\";\n\nimport { MissingRuntimeTriggerToken } from \"./MissingRuntimeTriggerToken\";\n\nexport class MissingRuntimeTriggerConfig implements NodeConfigBase {\n readonly kind = \"trigger\" as const;\n readonly type = MissingRuntimeTriggerToken;\n\n constructor(\n public readonly name: string,\n public readonly missingTokenId?: string,\n public readonly missingRuntime = true,\n ) {}\n}\n","import type { NodeDefinition, PersistedWorkflowSnapshotNode } from \"../../types\";\n\nimport { MissingRuntimeNodeConfig } from \"./MissingRuntimeNodeConfig\";\nimport { MissingRuntimeNodeToken } from \"./MissingRuntimeNodeToken\";\nimport { MissingRuntimeTriggerConfig } from \"./MissingRuntimeTriggerConfig\";\nimport { MissingRuntimeTriggerToken } from \"./MissingRuntimeTriggerToken\";\n\nexport class MissingRuntimeNodeDefinitionFactory {\n create(snapshotNode: PersistedWorkflowSnapshotNode): NodeDefinition {\n if (snapshotNode.kind === \"trigger\") {\n const config = new MissingRuntimeTriggerConfig(snapshotNode.name ?? snapshotNode.id, snapshotNode.nodeTokenId);\n return {\n id: snapshotNode.id,\n kind: \"trigger\",\n name: snapshotNode.name,\n type: MissingRuntimeTriggerToken,\n config,\n };\n }\n const config = new MissingRuntimeNodeConfig(snapshotNode.name ?? snapshotNode.id, snapshotNode.nodeTokenId);\n return {\n id: snapshotNode.id,\n kind: \"node\",\n name: snapshotNode.name,\n type: MissingRuntimeNodeToken,\n config,\n };\n }\n}\n","import type { NodeConfigBase, PersistedWorkflowSnapshotNode, PersistedWorkflowTokenRegistryLike } from \"../../types\";\n\nexport class PersistedWorkflowConfigHydrator {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n hydrate(snapshotNode: PersistedWorkflowSnapshotNode, liveConfig: NodeConfigBase): NodeConfigBase {\n const hydrated = this.mergeValue(liveConfig, snapshotNode.config);\n const configToken = this.tokenRegistry.resolve(snapshotNode.configTokenId);\n Object.assign(hydrated, {\n type: configToken ?? liveConfig.type,\n kind: snapshotNode.kind,\n });\n if (snapshotNode.name && !(\"name\" in hydrated && hydrated.name)) {\n Object.assign(hydrated, { name: snapshotNode.name });\n }\n return hydrated as unknown as NodeConfigBase;\n }\n\n private mergeValue(liveValue: unknown, snapshotValue: unknown): Record<string, unknown> {\n const liveRecord = this.asRecord(liveValue);\n const snapshotRecord = this.asRecord(snapshotValue);\n const hydrated = Object.create(\n liveValue && typeof liveValue === \"object\"\n ? (Object.getPrototypeOf(liveValue) ?? Object.prototype)\n : Object.prototype,\n ) as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(snapshotRecord)) {\n hydrated[key] = this.mergeNestedValue(liveRecord[key], value);\n }\n\n this.restoreNonSerializableProperties(liveRecord, hydrated);\n this.restoreTypeProperty(hydrated);\n return hydrated;\n }\n\n private mergeNestedValue(liveValue: unknown, snapshotValue: unknown): unknown {\n if (Array.isArray(snapshotValue)) {\n const liveArray = Array.isArray(liveValue) ? liveValue : [];\n return snapshotValue.map((entry, index) => this.mergeNestedValue(liveArray[index], entry));\n }\n if (snapshotValue && typeof snapshotValue === \"object\") {\n return this.mergeValue(liveValue, snapshotValue);\n }\n return snapshotValue;\n }\n\n private restoreNonSerializableProperties(\n liveRecord: Record<string, unknown>,\n hydrated: Record<string, unknown>,\n ): void {\n for (const [key, value] of Object.entries(liveRecord)) {\n if (typeof value === \"function\" || typeof value === \"symbol\") {\n hydrated[key] = value;\n }\n }\n }\n\n private restoreTypeProperty(record: Record<string, unknown>): void {\n const tokenId = typeof record.tokenId === \"string\" ? record.tokenId : undefined;\n if (!tokenId) {\n return;\n }\n const type = this.tokenRegistry.resolve(tokenId);\n if (type) {\n record.type = type;\n }\n }\n\n private asRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return {};\n }\n return { ...(value as Record<string, unknown>) };\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n NodeDefinition,\n PersistedWorkflowSnapshot,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n WorkflowId,\n WorkflowRepository,\n} from \"../../types\";\n\nimport { MissingRuntimeNodeDefinitionFactory } from \"./MissingRuntimeNodeDefinitionFactory\";\nimport { PersistedWorkflowConfigHydrator } from \"./PersistedWorkflowConfigHydrator\";\n\nexport class PersistedWorkflowResolver {\n constructor(\n private readonly workflowRepository: WorkflowRepository,\n private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike,\n private readonly configHydrator: PersistedWorkflowConfigHydrator,\n private readonly missingNodeDefinitionFactory: MissingRuntimeNodeDefinitionFactory,\n ) {}\n\n resolve(args: {\n workflowId: WorkflowId;\n workflowSnapshot?: PersistedWorkflowSnapshot;\n }): WorkflowDefinition | undefined {\n const liveWorkflow = this.workflowRepository.get(args.workflowId);\n if (!args.workflowSnapshot) {\n return liveWorkflow;\n }\n if (!liveWorkflow) {\n return this.rebuildWorkflow(args.workflowSnapshot, undefined);\n }\n return this.rebuildWorkflow(args.workflowSnapshot, liveWorkflow);\n }\n\n private rebuildWorkflow(\n snapshot: PersistedWorkflowSnapshot,\n liveWorkflow: WorkflowDefinition | undefined,\n ): WorkflowDefinition {\n const liveNodesById = new Map((liveWorkflow?.nodes ?? []).map((node) => [node.id, node] as const));\n const nodes = snapshot.nodes.map((snapshotNode) => {\n const liveNode = liveNodesById.get(snapshotNode.id);\n if (!this.isCompatibleLiveNode(liveNode, snapshotNode)) {\n return this.missingNodeDefinitionFactory.create(snapshotNode);\n }\n return {\n id: snapshotNode.id,\n kind: snapshotNode.kind,\n name: snapshotNode.name ?? liveNode.name,\n type: liveNode.type,\n config: this.configHydrator.hydrate(snapshotNode, liveNode.config),\n } satisfies NodeDefinition;\n });\n const nodeIds = new Set(nodes.map((node) => node.id));\n const connectionsFromSnapshot =\n snapshot.connections\n ?.map((connection) => ({\n ...connection,\n childNodeIds: connection.childNodeIds.filter((childId) => nodeIds.has(childId)),\n }))\n .filter((connection) => connection.childNodeIds.length > 0) ?? [];\n return {\n id: snapshot.id,\n name: snapshot.name,\n nodes,\n edges: snapshot.edges.filter((edge) => nodeIds.has(edge.from.nodeId) && nodeIds.has(edge.to.nodeId)),\n ...(connectionsFromSnapshot.length > 0 ? { connections: connectionsFromSnapshot } : {}),\n ...(liveWorkflow?.discoveryPathSegments !== undefined\n ? { discoveryPathSegments: liveWorkflow.discoveryPathSegments }\n : {}),\n };\n }\n\n private isCompatibleLiveNode(\n liveNode: WorkflowDefinition[\"nodes\"][number] | undefined,\n snapshotNode: PersistedWorkflowSnapshot[\"nodes\"][number],\n ): liveNode is WorkflowDefinition[\"nodes\"][number] {\n if (!liveNode || liveNode.kind !== snapshotNode.kind) {\n return false;\n }\n if (!snapshotNode.nodeTokenId || !snapshotNode.configTokenId) {\n throw new Error(`Persisted workflow snapshot node \"${snapshotNode.id}\" is missing stable token ids.`);\n }\n const liveNodeTokenId = this.resolveLiveTokenId(liveNode.type);\n const liveConfigTokenId = this.resolveLiveTokenId(liveNode.config.type);\n return liveNodeTokenId === snapshotNode.nodeTokenId && liveConfigTokenId === snapshotNode.configTokenId;\n }\n\n private resolveLiveTokenId(type: TypeToken<unknown>): string | undefined {\n const registeredTokenId = this.tokenRegistry.getTokenId(type);\n if (registeredTokenId) {\n return registeredTokenId;\n }\n if (typeof type === \"function\" && type.name) {\n return type.name;\n }\n if (typeof type === \"string\") {\n return type;\n }\n return undefined;\n }\n}\n","import type { NodeActivationRequest, NodeInputsByPort } from \"../../types\";\n\nexport class InputPortMap {\n static empty(): NodeInputsByPort {\n return {};\n }\n\n static fromRequest(request: NodeActivationRequest): NodeInputsByPort {\n if (request.kind === \"multi\") {\n return request.inputsByPort;\n }\n return { in: request.input };\n }\n}\n","import type {\n NodeActivationId,\n NodeExecutionSnapshot,\n NodeId,\n NodeInputsByPort,\n NodeOutputs,\n ParentExecutionRef,\n RunId,\n WorkflowId,\n} from \"../../types\";\n\nexport class NodeSnapshotFactory {\n static queued(args: {\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n activationId: NodeActivationId;\n parent?: ParentExecutionRef;\n queuedAt: string;\n inputsByPort: NodeInputsByPort;\n }): NodeExecutionSnapshot {\n return {\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: args.parent,\n status: \"queued\",\n queuedAt: args.queuedAt,\n updatedAt: args.queuedAt,\n inputsByPort: args.inputsByPort,\n };\n }\n\n static running(args: {\n previous?: NodeExecutionSnapshot;\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n activationId: NodeActivationId;\n parent?: ParentExecutionRef;\n startedAt: string;\n inputsByPort: NodeInputsByPort;\n }): NodeExecutionSnapshot {\n return {\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: args.parent,\n status: \"running\",\n queuedAt: args.previous?.queuedAt,\n startedAt: args.startedAt,\n updatedAt: args.startedAt,\n inputsByPort: args.inputsByPort,\n outputs: args.previous?.outputs,\n error: undefined,\n };\n }\n\n static completed(args: {\n previous?: NodeExecutionSnapshot;\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n activationId: NodeActivationId;\n parent?: ParentExecutionRef;\n finishedAt: string;\n inputsByPort: NodeInputsByPort;\n outputs: NodeOutputs;\n fromPinnedOutput?: boolean;\n }): NodeExecutionSnapshot {\n const fromPinnedOutput = args.fromPinnedOutput ?? false;\n const startedAt = fromPinnedOutput ? (args.previous?.startedAt ?? args.finishedAt) : args.previous?.startedAt;\n return {\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: args.parent,\n status: \"completed\",\n queuedAt: args.previous?.queuedAt,\n startedAt,\n finishedAt: args.finishedAt,\n updatedAt: args.finishedAt,\n inputsByPort: args.inputsByPort,\n outputs: args.outputs,\n usedPinnedOutput: fromPinnedOutput,\n error: undefined,\n };\n }\n\n static skipped(args: {\n previous?: NodeExecutionSnapshot;\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n activationId: NodeActivationId;\n parent?: ParentExecutionRef;\n finishedAt: string;\n inputsByPort: NodeInputsByPort;\n outputs: NodeOutputs;\n }): NodeExecutionSnapshot {\n return {\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: args.parent,\n status: \"skipped\",\n queuedAt: args.previous?.queuedAt,\n startedAt: args.previous?.startedAt,\n finishedAt: args.finishedAt,\n updatedAt: args.finishedAt,\n inputsByPort: args.inputsByPort,\n outputs: args.outputs,\n error: undefined,\n };\n }\n\n static failed(args: {\n previous?: NodeExecutionSnapshot;\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n activationId: NodeActivationId;\n parent?: ParentExecutionRef;\n finishedAt: string;\n inputsByPort: NodeInputsByPort;\n error: Error;\n }): NodeExecutionSnapshot {\n return {\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: args.parent,\n status: \"failed\",\n queuedAt: args.previous?.queuedAt,\n startedAt: args.previous?.startedAt,\n finishedAt: args.finishedAt,\n updatedAt: args.finishedAt,\n inputsByPort: args.inputsByPort,\n outputs: undefined,\n error: {\n message: args.error.message,\n name: args.error.name,\n stack: args.error.stack,\n },\n };\n }\n}\n","import type {\n ConnectionInvocationRecord,\n EngineRunCounters,\n NodeActivationRequest,\n NodeExecutionSnapshot,\n NodeId,\n ParentExecutionRef,\n PendingNodeExecution,\n PersistedRunControlState,\n RunDataFactory,\n RunExecutionOptions,\n RunId,\n RunQueueEntry,\n RunResult,\n RunStateStore,\n WorkflowId,\n} from \"../../types\";\n\nimport { RunQueuePlanner } from \"../planning/RunQueuePlanner\";\n\nimport { InputPortMap } from \"../state/InputPortMapFactory\";\nimport { NodeEventPublisher } from \"../../events/NodeEventPublisher\";\nimport { NodeSnapshotFactory } from \"../state/NodeSnapshotFactory\";\n\nexport class ActivationEnqueueService {\n constructor(\n private readonly activationScheduler: {\n enqueue: (request: NodeActivationRequest) => Promise<{ receiptId: string; queue?: string }>;\n } & {\n notifyPendingStatePersisted?: (runId: RunId) => void;\n },\n private readonly runStore: RunStateStore,\n private readonly nodeEventPublisher: NodeEventPublisher,\n ) {}\n\n async enqueueActivation(args: {\n runId: RunId;\n workflowId: WorkflowId;\n startedAt: string;\n parent?: ParentExecutionRef;\n executionOptions?: RunExecutionOptions;\n control: PersistedRunControlState | undefined;\n workflowSnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n policySnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"policySnapshot\"];\n pendingQueue: RunQueueEntry[];\n request: NodeActivationRequest;\n previousNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n planner: RunQueuePlanner;\n engineCounters?: EngineRunCounters;\n connectionInvocations?: ReadonlyArray<ConnectionInvocationRecord>;\n }): Promise<RunResult> {\n const { result, queuedSnapshot } = await this.enqueueActivationWithSnapshot(args);\n await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n return result;\n }\n\n async enqueueActivationWithSnapshot(args: {\n runId: RunId;\n workflowId: WorkflowId;\n startedAt: string;\n parent?: ParentExecutionRef;\n executionOptions?: RunExecutionOptions;\n control: PersistedRunControlState | undefined;\n workflowSnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n policySnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"policySnapshot\"];\n pendingQueue: RunQueueEntry[];\n request: NodeActivationRequest;\n previousNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n planner: RunQueuePlanner;\n engineCounters?: EngineRunCounters;\n connectionInvocations?: ReadonlyArray<ConnectionInvocationRecord>;\n }): Promise<{ result: RunResult; queuedSnapshot: NodeExecutionSnapshot }> {\n const receipt = await this.activationScheduler.enqueue(args.request);\n const inputsByPort = InputPortMap.fromRequest(args.request);\n const itemsIn =\n args.request.kind === \"multi\"\n ? args.planner.sumItemsByPort(args.request.inputsByPort)\n : args.request.input.length;\n const enqueuedAt = new Date().toISOString();\n const pending: PendingNodeExecution = {\n runId: args.runId,\n activationId: args.request.activationId,\n workflowId: args.workflowId,\n nodeId: args.request.nodeId,\n itemsIn,\n inputsByPort,\n receiptId: receipt.receiptId,\n queue: receipt.queue,\n batchId: args.request.batchId,\n enqueuedAt,\n };\n const queuedSnapshot = NodeSnapshotFactory.queued({\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: args.request.nodeId,\n activationId: args.request.activationId,\n parent: args.parent,\n queuedAt: enqueuedAt,\n inputsByPort,\n });\n\n await this.runStore.save({\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n engineCounters: args.engineCounters,\n connectionInvocations: args.connectionInvocations ? [...args.connectionInvocations] : [],\n status: \"pending\",\n pending,\n queue: args.pendingQueue.map((entry) => ({ ...entry })),\n outputsByNode: (args.request.ctx.data as ReturnType<RunDataFactory[\"create\"]>).dump(),\n nodeSnapshotsByNodeId: {\n ...args.previousNodeSnapshotsByNodeId,\n [args.request.nodeId]: queuedSnapshot,\n },\n });\n this.notifyPendingStatePersisted(args.runId);\n return {\n result: { runId: args.runId, workflowId: args.workflowId, startedAt: args.startedAt, status: \"pending\", pending },\n queuedSnapshot,\n };\n }\n\n private notifyPendingStatePersisted(runId: RunId): void {\n this.activationScheduler.notifyPendingStatePersisted?.(runId);\n }\n}\n","import type { NodeDefinition, NodeId, WorkflowDefinition } from \"../types\";\n\n/**\n * Derives which workflow nodes participate in the main execution graph vs connection-only children.\n */\nexport class WorkflowExecutableNodeClassifier {\n private readonly connectionOwnedIds: ReadonlySet<NodeId>;\n\n constructor(workflow: WorkflowDefinition) {\n this.connectionOwnedIds = this.collectConnectionOwnedIds(workflow);\n }\n\n isConnectionOwnedNodeId(nodeId: NodeId): boolean {\n return this.connectionOwnedIds.has(nodeId);\n }\n\n isExecutableNodeId(nodeId: NodeId): boolean {\n return !this.connectionOwnedIds.has(nodeId);\n }\n\n filterExecutableNodeDefinitions(nodes: ReadonlyArray<NodeDefinition>): ReadonlyArray<NodeDefinition> {\n return nodes.filter((n) => this.isExecutableNodeId(n.id));\n }\n\n private collectConnectionOwnedIds(workflow: WorkflowDefinition): ReadonlySet<NodeId> {\n const ids = new Set<NodeId>();\n for (const connection of workflow.connections ?? []) {\n for (const childId of connection.childNodeIds) {\n ids.add(childId);\n }\n }\n return ids;\n }\n\n /**\n * Resolves the default start node: first trigger, else first executable node with no incoming edges from executable nodes.\n */\n findDefaultExecutableStartNodeId(workflow: WorkflowDefinition): NodeId {\n const firstTrigger = workflow.nodes.find((n) => n.kind === \"trigger\" && this.isExecutableNodeId(n.id))?.id;\n if (firstTrigger) return firstTrigger;\n\n const incoming = new Map<NodeId, number>();\n for (const n of workflow.nodes) {\n if (this.isExecutableNodeId(n.id)) incoming.set(n.id, 0);\n }\n for (const e of workflow.edges) {\n if (!this.isExecutableNodeId(e.from.nodeId) || !this.isExecutableNodeId(e.to.nodeId)) continue;\n incoming.set(e.to.nodeId, (incoming.get(e.to.nodeId) ?? 0) + 1);\n }\n const start = workflow.nodes.find((n) => this.isExecutableNodeId(n.id) && (incoming.get(n.id) ?? 0) === 0)?.id;\n return (\n start ??\n workflow.nodes.find((n) => this.isExecutableNodeId(n.id))?.id ??\n (() => {\n throw new Error(`Workflow ${workflow.id} has no executable nodes`);\n })()\n );\n }\n\n firstExecutableNodeIdInDefinitionOrder(workflow: WorkflowDefinition): NodeId | undefined {\n return workflow.nodes.find((n) => this.isExecutableNodeId(n.id))?.id;\n }\n\n lastExecutableNodeIdInDefinitionOrder(workflow: WorkflowDefinition): NodeId {\n for (let i = workflow.nodes.length - 1; i >= 0; i--) {\n const n = workflow.nodes[i]!;\n if (this.isExecutableNodeId(n.id)) return n.id;\n }\n throw new Error(`Workflow ${workflow.id} has no executable nodes`);\n }\n}\n","import type { WorkflowDefinition } from \"../types\";\n\nimport { WorkflowExecutableNodeClassifier } from \"./WorkflowExecutableNodeClassifier\";\n\nexport function createWorkflowExecutableNodeClassifier(workflow: WorkflowDefinition): WorkflowExecutableNodeClassifier {\n return new WorkflowExecutableNodeClassifier(workflow);\n}\n","import type { InputPortKey, Items, NodeId, OutputPortKey, RunCurrentState } from \"../../types\";\n\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class DependencySatisfactionResolver {\n constructor(\n private readonly topology: WorkflowTopology,\n private readonly currentState: RunCurrentState,\n ) {}\n\n isNodeSatisfied(nodeId: NodeId): boolean {\n return this.hasOutputs(nodeId) || this.hasCompletedSnapshot(nodeId);\n }\n\n isNodeSatisfiedByOutputsOnly(nodeId: NodeId): boolean {\n return this.hasOutputs(nodeId) && !this.hasCompletedSnapshot(nodeId);\n }\n\n isEdgeSatisfied(args: { nodeId: NodeId; input: InputPortKey }): boolean {\n const incomingEdges = this.topology.incomingByNode.get(args.nodeId) ?? [];\n const incomingEdge = incomingEdges.find((edge) => edge.input === args.input);\n if (!incomingEdge) {\n return false;\n }\n return this.hasOutputPort(incomingEdge.from.nodeId, incomingEdge.from.output);\n }\n\n resolveInput(args: { nodeId: NodeId; input: InputPortKey }): Items {\n const incomingEdges = this.topology.incomingByNode.get(args.nodeId) ?? [];\n const incomingEdge = incomingEdges.find((edge) => edge.input === args.input);\n if (!incomingEdge) {\n return [];\n }\n return this.resolveOutputItems(incomingEdge.from.nodeId, incomingEdge.from.output);\n }\n\n private hasOutputs(nodeId: NodeId): boolean {\n return Object.prototype.hasOwnProperty.call(this.currentState.outputsByNode, nodeId);\n }\n\n private hasCompletedSnapshot(nodeId: NodeId): boolean {\n const snapshot = this.currentState.nodeSnapshotsByNodeId[nodeId];\n return snapshot?.status === \"completed\" || snapshot?.status === \"skipped\";\n }\n\n private hasOutputPort(nodeId: NodeId, output: OutputPortKey): boolean {\n const outputs = this.currentState.outputsByNode[nodeId];\n if (!outputs) {\n return false;\n }\n return Object.prototype.hasOwnProperty.call(outputs, output);\n }\n\n private resolveOutputItems(nodeId: NodeId, output: OutputPortKey): Items {\n const outputs = this.currentState.outputsByNode[nodeId];\n return outputs?.[output] ?? [];\n }\n}\n","import type { InputPortKey, Items, NodeId, RunQueueEntry } from \"../../types\";\n\nimport { DependencySatisfactionResolver } from \"./DependencySatisfactionResolver\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class FrontierQueueBuilder {\n constructor(\n private readonly topology: WorkflowTopology,\n private readonly satisfactionResolver: DependencySatisfactionResolver,\n ) {}\n\n build(args: { nodeId: NodeId }): RunQueueEntry[] {\n const incomingEdges = this.topology.incomingByNode.get(args.nodeId) ?? [];\n if (incomingEdges.length === 0) {\n return [];\n }\n const expectedInputs = this.topology.expectedInputsByNode.get(args.nodeId) ?? [];\n const usesCollect = expectedInputs.length !== 1 || expectedInputs[0] !== \"in\";\n if (usesCollect) {\n const received: Record<InputPortKey, Items> = {};\n for (const input of expectedInputs) {\n received[input] = this.satisfactionResolver.resolveInput({ nodeId: args.nodeId, input });\n }\n return [\n {\n nodeId: args.nodeId,\n input: [],\n batchId: \"batch_1\",\n collect: {\n expectedInputs,\n received,\n },\n },\n ];\n }\n const input = expectedInputs[0] ?? \"in\";\n const incomingEdge = incomingEdges.find((edge) => edge.input === input);\n return [\n {\n nodeId: args.nodeId,\n input: this.satisfactionResolver.resolveInput({ nodeId: args.nodeId, input }),\n toInput: input,\n batchId: \"batch_1\",\n from: incomingEdge?.from,\n },\n ];\n }\n}\n","import type { NodeId, NodeOutputs, RunCurrentState } from \"../../types\";\n\nexport class PinnedOutputResolver {\n constructor(private readonly currentState: RunCurrentState) {}\n\n overlayPinnedOutputs(): RunCurrentState {\n const outputsByNode: Record<NodeId, NodeOutputs> = { ...this.currentState.outputsByNode };\n for (const [nodeId, nodeState] of Object.entries(this.currentState.mutableState?.nodesById ?? {}) as Array<\n [NodeId, NonNullable<RunCurrentState[\"mutableState\"]>[\"nodesById\"][NodeId]]\n >) {\n const pinnedOutputs = this.resolvePinnedOutputs(nodeState);\n if (!pinnedOutputs) {\n continue;\n }\n outputsByNode[nodeId] = pinnedOutputs;\n }\n return {\n outputsByNode,\n nodeSnapshotsByNodeId: { ...this.currentState.nodeSnapshotsByNodeId },\n mutableState: this.currentState.mutableState,\n };\n }\n\n hasPinnedOutputs(nodeId: NodeId): boolean {\n return this.getPinnedOutputs(nodeId) !== undefined;\n }\n\n getPinnedOutputs(nodeId: NodeId): NodeOutputs | undefined {\n const nodeState = this.currentState.mutableState?.nodesById?.[nodeId];\n return this.resolvePinnedOutputs(nodeState);\n }\n\n private resolvePinnedOutputs(\n nodeState: NonNullable<RunCurrentState[\"mutableState\"]>[\"nodesById\"][NodeId] | undefined,\n ): NodeOutputs | undefined {\n if (!nodeState) {\n return undefined;\n }\n return nodeState.pinnedOutputsByPort;\n }\n}\n","import type { NodeId, RunStopCondition } from \"../../types\";\n\nimport { DependencySatisfactionResolver } from \"./DependencySatisfactionResolver\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class RequiredNodeCollector {\n private readonly requiredNodeIds = new Set<NodeId>();\n\n constructor(\n private readonly topology: WorkflowTopology,\n private readonly satisfactionResolver: DependencySatisfactionResolver,\n ) {}\n\n collect(stopCondition: RunStopCondition): ReadonlySet<NodeId> {\n if (stopCondition.kind === \"workflowCompleted\") {\n for (const nodeId of this.topology.defsById.keys()) {\n if (!this.satisfactionResolver.isNodeSatisfied(nodeId)) {\n this.collectNode(nodeId);\n }\n }\n return this.requiredNodeIds;\n }\n\n if (!this.topology.defsById.has(stopCondition.nodeId)) {\n throw new Error(`Unknown stop nodeId: ${stopCondition.nodeId}`);\n }\n this.collectNode(stopCondition.nodeId);\n return this.requiredNodeIds;\n }\n\n private collectNode(nodeId: NodeId): void {\n if (this.requiredNodeIds.has(nodeId)) {\n return;\n }\n if (\n this.satisfactionResolver.isNodeSatisfied(nodeId) &&\n !this.satisfactionResolver.isNodeSatisfiedByOutputsOnly(nodeId)\n ) {\n return;\n }\n this.requiredNodeIds.add(nodeId);\n for (const edge of this.topology.incomingByNode.get(nodeId) ?? []) {\n if (\n !this.satisfactionResolver.isEdgeSatisfied({ nodeId, input: edge.input }) ||\n this.satisfactionResolver.isNodeSatisfiedByOutputsOnly(edge.from.nodeId)\n ) {\n this.collectNode(edge.from.nodeId);\n }\n }\n }\n}\n","import type { Items } from \"../../types\";\n\nexport class RootNodeInputResolver {\n resolve(args: { nodeKind: \"node\" | \"trigger\"; items?: Items }): Items {\n if (args.items) {\n return args.items;\n }\n if (args.nodeKind === \"trigger\") {\n return [];\n }\n return [{ json: {} }];\n }\n}\n","import type { RunCurrentState } from \"../../types\";\n\nexport class RunCurrentStateFactory {\n static empty(): RunCurrentState {\n return {\n outputsByNode: {},\n nodeSnapshotsByNodeId: {},\n connectionInvocations: [],\n mutableState: undefined,\n };\n }\n\n static clone(currentState: RunCurrentState | undefined): RunCurrentState {\n if (!currentState) {\n return this.empty();\n }\n return {\n outputsByNode: { ...currentState.outputsByNode },\n nodeSnapshotsByNodeId: { ...currentState.nodeSnapshotsByNodeId },\n connectionInvocations: currentState.connectionInvocations ? [...currentState.connectionInvocations] : undefined,\n mutableState: currentState.mutableState,\n };\n }\n}\n","import type { NodeId } from \"../types\";\n\n/**\n * Deterministic ids for workflow connection-owned child nodes (LLM slot, tools, etc.).\n * These are stable across loads.\n */\nexport class ConnectionNodeIdFactory {\n static readonly connectionSegment = \"__conn__\" as const;\n\n static languageModelConnectionNodeId(parentNodeId: NodeId): NodeId {\n return `${parentNodeId}${this.connectionSegment}llm`;\n }\n\n static toolConnectionNodeId(parentNodeId: NodeId, toolName: string): NodeId {\n const normalized = this.normalizeToolName(toolName);\n return `${parentNodeId}${this.connectionSegment}tool${this.connectionSegment}${normalized}`;\n }\n\n static isLanguageModelConnectionNodeId(nodeId: NodeId): boolean {\n return nodeId.endsWith(`${this.connectionSegment}llm`);\n }\n\n static isToolConnectionNodeId(nodeId: NodeId): boolean {\n return nodeId.includes(`${this.connectionSegment}tool${this.connectionSegment}`);\n }\n\n /** True when `nodeId` is a connection-owned child of `parentNodeId` (LLM or tool slot). */\n static isConnectionOwnedDescendantOf(parentNodeId: NodeId, nodeId: NodeId): boolean {\n return nodeId.startsWith(`${parentNodeId}${this.connectionSegment}`);\n }\n\n /** Normalizes a tool display name to a stable id segment. */\n static normalizeToolName(toolName: string): string {\n return (\n toolName\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\") || \"tool\"\n );\n }\n}\n","import type {\n ConnectionInvocationRecord,\n NodeId,\n NodeOutputs,\n RunCurrentState,\n RunStateResetRequest,\n} from \"../../types\";\n\nimport { ConnectionNodeIdFactory } from \"../../workflow/ConnectionNodeIdFactory\";\n\nimport { PinnedOutputResolver } from \"./PinnedOutputResolver\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class RunStateResetter {\n constructor(\n private readonly topology: WorkflowTopology,\n private readonly pinnedOutputResolver: PinnedOutputResolver,\n ) {}\n\n apply(args: { currentState: RunCurrentState; reset?: RunStateResetRequest }): Readonly<{\n currentState: RunCurrentState;\n clearedNodeIds: ReadonlyArray<NodeId>;\n preservedPinnedNodeIds: ReadonlyArray<NodeId>;\n }> {\n if (!args.reset) {\n return {\n currentState: args.currentState,\n clearedNodeIds: [],\n preservedPinnedNodeIds: [],\n };\n }\n\n const outputsByNode: Record<NodeId, NodeOutputs> = { ...args.currentState.outputsByNode };\n const nodeSnapshotsByNodeId = { ...args.currentState.nodeSnapshotsByNodeId };\n const clearedNodeIds: NodeId[] = [];\n const preservedPinnedNodeIds: NodeId[] = [];\n const descendants = this.collectDescendants(args.reset.clearFromNodeId);\n const runtimeDescendants = this.collectRuntimeDescendants(args.currentState, descendants);\n const clearedIdSet = new Set<NodeId>([...descendants, ...runtimeDescendants]);\n\n for (const nodeId of [...descendants, ...runtimeDescendants]) {\n if (this.pinnedOutputResolver.hasPinnedOutputs(nodeId)) {\n const pinnedOutputs = this.pinnedOutputResolver.getPinnedOutputs(nodeId);\n if (pinnedOutputs) {\n outputsByNode[nodeId] = pinnedOutputs;\n }\n delete nodeSnapshotsByNodeId[nodeId];\n preservedPinnedNodeIds.push(nodeId);\n continue;\n }\n delete outputsByNode[nodeId];\n delete nodeSnapshotsByNodeId[nodeId];\n clearedNodeIds.push(nodeId);\n }\n\n const connectionInvocations = this.filterConnectionInvocations(\n args.currentState.connectionInvocations,\n clearedIdSet,\n );\n\n return {\n currentState: {\n outputsByNode,\n nodeSnapshotsByNodeId,\n connectionInvocations,\n mutableState: args.currentState.mutableState,\n },\n clearedNodeIds,\n preservedPinnedNodeIds,\n };\n }\n\n private filterConnectionInvocations(\n invocations: ReadonlyArray<ConnectionInvocationRecord> | undefined,\n clearedIdSet: ReadonlySet<NodeId>,\n ): ReadonlyArray<ConnectionInvocationRecord> | undefined {\n if (!invocations || invocations.length === 0) {\n return invocations;\n }\n const kept = invocations.filter(\n (inv) => !clearedIdSet.has(inv.parentAgentNodeId) && !clearedIdSet.has(inv.connectionNodeId),\n );\n return kept.length === invocations.length ? invocations : kept;\n }\n\n private collectDescendants(startNodeId: NodeId): ReadonlyArray<NodeId> {\n const pendingNodeIds: NodeId[] = [startNodeId];\n const descendants = new Set<NodeId>();\n while (pendingNodeIds.length > 0) {\n const nodeId = pendingNodeIds.pop();\n if (!nodeId || descendants.has(nodeId)) {\n continue;\n }\n descendants.add(nodeId);\n for (const edge of this.topology.outgoingByNode.get(nodeId) ?? []) {\n pendingNodeIds.push(edge.to.nodeId);\n }\n }\n return [...descendants];\n }\n\n private collectRuntimeDescendants(\n currentState: RunCurrentState,\n descendantNodeIds: ReadonlyArray<NodeId>,\n ): ReadonlyArray<NodeId> {\n const descendantSet = new Set(descendantNodeIds);\n const runtimeNodeIds = new Set<NodeId>();\n for (const nodeId of [\n ...Object.keys(currentState.outputsByNode),\n ...Object.keys(currentState.nodeSnapshotsByNodeId),\n ...Object.keys(currentState.mutableState?.nodesById ?? {}),\n ] as NodeId[]) {\n if (!this.isRuntimeDescendant(nodeId, descendantSet)) {\n continue;\n }\n runtimeNodeIds.add(nodeId);\n }\n return [...runtimeNodeIds];\n }\n\n private isRuntimeDescendant(nodeId: NodeId, descendantNodeIds: ReadonlySet<NodeId>): boolean {\n for (const descendantNodeId of descendantNodeIds) {\n if (nodeId === descendantNodeId) {\n return false;\n }\n if (ConnectionNodeIdFactory.isConnectionOwnedDescendantOf(descendantNodeId, nodeId)) {\n return true;\n }\n }\n return false;\n }\n}\n","import type {\n ExecutionFrontierPlan,\n Items,\n NodeId,\n RunCurrentState,\n RunQueueEntry,\n RunStateResetRequest,\n RunStopCondition,\n} from \"../../types\";\n\nimport { DependencySatisfactionResolver } from \"./DependencySatisfactionResolver\";\nimport { FrontierQueueBuilder } from \"./FrontierQueueBuilder\";\nimport { PinnedOutputResolver } from \"./PinnedOutputResolver\";\nimport { RequiredNodeCollector } from \"./RequiredNodeCollector\";\nimport { RootNodeInputResolver } from \"./RootNodeInputResolver\";\nimport { RunCurrentStateFactory } from \"./RunCurrentStateFactory\";\nimport { RunStateResetter } from \"./RunStateResetter\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class CurrentStateFrontierPlanner {\n private readonly rootNodeInputResolver = new RootNodeInputResolver();\n\n constructor(private readonly topology: WorkflowTopology) {}\n\n /** Composition-root-friendly factory (avoids `new` at orchestration call sites under ESLint manual-DI rules). */\n static createFromTopology(topology: WorkflowTopology): CurrentStateFrontierPlanner {\n return new CurrentStateFrontierPlanner(topology);\n }\n\n plan(args: {\n currentState?: RunCurrentState;\n stopCondition?: RunStopCondition;\n reset?: RunStateResetRequest;\n items?: Items;\n }): ExecutionFrontierPlan {\n const stopCondition = args.stopCondition ?? { kind: \"workflowCompleted\" as const };\n const baseState = RunCurrentStateFactory.clone(args.currentState);\n const pinnedOutputResolver = new PinnedOutputResolver(baseState);\n const normalizedState = pinnedOutputResolver.overlayPinnedOutputs();\n const resetter = new RunStateResetter(this.topology, new PinnedOutputResolver(normalizedState));\n const resetResult = resetter.apply({ currentState: normalizedState, reset: args.reset });\n const satisfactionResolver = new DependencySatisfactionResolver(this.topology, resetResult.currentState);\n const requiredNodeIds = new RequiredNodeCollector(this.topology, satisfactionResolver).collect(stopCondition);\n const satisfiedNodeIds = this.collectSatisfiedNodeIds(satisfactionResolver);\n const skippedNodeIds = [\n ...new Set([\n ...[...requiredNodeIds].filter((nodeId) => satisfactionResolver.isNodeSatisfied(nodeId)),\n ...resetResult.preservedPinnedNodeIds.filter((nodeId) => requiredNodeIds.has(nodeId)),\n ]),\n ];\n const frontierNodeIds = this.collectFrontierNodeIds(requiredNodeIds, satisfactionResolver);\n const rootNodeIds = frontierNodeIds.filter(\n (nodeId) => (this.topology.incomingByNode.get(nodeId) ?? []).length === 0,\n );\n\n if (rootNodeIds.length > 1) {\n throw new Error(`Ambiguous execution frontier. Multiple root nodes require input: ${rootNodeIds.join(\", \")}`);\n }\n\n if (frontierNodeIds.length === 0) {\n return {\n queue: [],\n currentState: resetResult.currentState,\n stopCondition,\n satisfiedNodeIds,\n skippedNodeIds,\n clearedNodeIds: resetResult.clearedNodeIds,\n preservedPinnedNodeIds: resetResult.preservedPinnedNodeIds,\n };\n }\n\n if (rootNodeIds.length === 1) {\n const rootNodeId = rootNodeIds[0]!;\n const definition = this.topology.defsById.get(rootNodeId);\n if (!definition) {\n throw new Error(`Unknown frontier nodeId: ${rootNodeId}`);\n }\n return {\n rootNodeId,\n rootNodeInput: this.rootNodeInputResolver.resolve({ nodeKind: definition.kind, items: args.items }),\n queue: [],\n currentState: resetResult.currentState,\n stopCondition,\n satisfiedNodeIds,\n skippedNodeIds,\n clearedNodeIds: resetResult.clearedNodeIds,\n preservedPinnedNodeIds: resetResult.preservedPinnedNodeIds,\n };\n }\n\n const queueBuilder = new FrontierQueueBuilder(this.topology, satisfactionResolver);\n const queue: RunQueueEntry[] = [];\n for (const nodeId of frontierNodeIds) {\n queue.push(...queueBuilder.build({ nodeId }));\n }\n\n return {\n queue,\n currentState: resetResult.currentState,\n stopCondition,\n satisfiedNodeIds,\n skippedNodeIds,\n clearedNodeIds: resetResult.clearedNodeIds,\n preservedPinnedNodeIds: resetResult.preservedPinnedNodeIds,\n };\n }\n\n private collectSatisfiedNodeIds(satisfactionResolver: DependencySatisfactionResolver): ReadonlyArray<NodeId> {\n const satisfiedNodeIds: NodeId[] = [];\n for (const nodeId of this.topology.defsById.keys()) {\n if (satisfactionResolver.isNodeSatisfied(nodeId)) {\n satisfiedNodeIds.push(nodeId);\n }\n }\n return satisfiedNodeIds;\n }\n\n private collectFrontierNodeIds(\n requiredNodeIds: ReadonlySet<NodeId>,\n satisfactionResolver: DependencySatisfactionResolver,\n ): ReadonlyArray<NodeId> {\n const frontierNodeIds: NodeId[] = [];\n for (const nodeId of this.topology.defsById.keys()) {\n if (!requiredNodeIds.has(nodeId) || satisfactionResolver.isNodeSatisfied(nodeId)) {\n continue;\n }\n const incomingEdges = this.topology.incomingByNode.get(nodeId) ?? [];\n const isFrontier = incomingEdges.every((edge) =>\n satisfactionResolver.isEdgeSatisfied({ nodeId, input: edge.input }),\n );\n if (isFrontier) {\n frontierNodeIds.push(nodeId);\n }\n }\n return frontierNodeIds;\n }\n}\n\nexport { DependencySatisfactionResolver } from \"./DependencySatisfactionResolver\";\nexport { FrontierQueueBuilder } from \"./FrontierQueueBuilder\";\nexport { PinnedOutputResolver } from \"./PinnedOutputResolver\";\nexport { RequiredNodeCollector } from \"./RequiredNodeCollector\";\nexport { RootNodeInputResolver } from \"./RootNodeInputResolver\";\nexport { RunCurrentStateFactory } from \"./RunCurrentStateFactory\";\nexport { RunStateResetter } from \"./RunStateResetter\";\n","import type { InputPortKey, NodeId, OutputPortKey, WorkflowDefinition } from \"../../types\";\nimport { createWorkflowExecutableNodeClassifier } from \"../../workflow/workflowExecutableNodeClassifier.types\";\n\ntype NodeDef = WorkflowDefinition[\"nodes\"][number];\n\nexport class WorkflowTopology {\n private constructor(\n public readonly defsById: ReadonlyMap<NodeId, NodeDef>,\n public readonly outgoingByNode: ReadonlyMap<\n NodeId,\n ReadonlyArray<Readonly<{ output: OutputPortKey; to: Readonly<{ nodeId: NodeId; input: InputPortKey }> }>>\n >,\n public readonly incomingByNode: ReadonlyMap<\n NodeId,\n ReadonlyArray<Readonly<{ from: Readonly<{ nodeId: NodeId; output: OutputPortKey }>; input: InputPortKey }>>\n >,\n public readonly expectedInputsByNode: ReadonlyMap<NodeId, ReadonlyArray<InputPortKey>>,\n public readonly rootNodeIds: ReadonlyArray<NodeId>,\n ) {}\n\n static fromWorkflow(wf: WorkflowDefinition): WorkflowTopology {\n const classifier = createWorkflowExecutableNodeClassifier(wf);\n const defs = new Map<NodeId, NodeDef>();\n for (const n of wf.nodes) {\n if (classifier.isExecutableNodeId(n.id)) defs.set(n.id, n);\n }\n\n const outgoing = new Map<\n NodeId,\n Array<Readonly<{ output: OutputPortKey; to: Readonly<{ nodeId: NodeId; input: InputPortKey }> }>>\n >();\n for (const e of wf.edges) {\n if (!classifier.isExecutableNodeId(e.from.nodeId) || !classifier.isExecutableNodeId(e.to.nodeId)) {\n continue;\n }\n const list = outgoing.get(e.from.nodeId) ?? [];\n list.push({ output: e.from.output, to: { nodeId: e.to.nodeId, input: e.to.input } });\n outgoing.set(e.from.nodeId, list);\n }\n\n const incomingByNode = new Map<\n NodeId,\n Array<Readonly<{ from: Readonly<{ nodeId: NodeId; output: OutputPortKey }>; input: InputPortKey }>>\n >();\n for (const e of wf.edges) {\n if (!classifier.isExecutableNodeId(e.from.nodeId) || !classifier.isExecutableNodeId(e.to.nodeId)) {\n continue;\n }\n const list = incomingByNode.get(e.to.nodeId) ?? [];\n list.push({ from: { nodeId: e.from.nodeId, output: e.from.output }, input: e.to.input });\n incomingByNode.set(e.to.nodeId, list);\n }\n\n const expected = new Map<NodeId, InputPortKey[]>();\n for (const [toNodeId, inputs] of incomingByNode.entries()) {\n const counts = new Map<InputPortKey, number>();\n for (const edge of inputs) counts.set(edge.input, (counts.get(edge.input) ?? 0) + 1);\n for (const [k, n] of counts.entries()) {\n if (n > 1) throw new Error(`Node ${toNodeId} has multiple edges into input '${k}'. Use a Merge node upstream.`);\n }\n\n const order: InputPortKey[] = [];\n const seen = new Set<InputPortKey>();\n for (const edge of inputs) {\n if (seen.has(edge.input)) continue;\n seen.add(edge.input);\n order.push(edge.input);\n }\n expected.set(toNodeId, order);\n }\n\n const rootNodeIds = wf.nodes\n .filter((node) => classifier.isExecutableNodeId(node.id) && !incomingByNode.has(node.id))\n .map((node) => node.id);\n return new WorkflowTopology(defs, outgoing, incomingByNode, expected, rootNodeIds);\n }\n}\n","import type {\n PersistedRunPolicySnapshot,\n WorkflowDefinition,\n WorkflowPolicyRuntimeDefaults,\n WorkflowStoragePolicyMode,\n} from \"../../types\";\n\nexport class RunPolicySnapshotFactory {\n static create(workflow: WorkflowDefinition, defaults?: WorkflowPolicyRuntimeDefaults): PersistedRunPolicySnapshot {\n const prune = workflow.prunePolicy;\n const retentionSeconds = prune?.runDataRetentionSeconds ?? defaults?.retentionSeconds;\n const binaryRetentionSeconds = prune?.binaryRetentionSeconds ?? defaults?.binaryRetentionSeconds;\n const storagePolicy: WorkflowStoragePolicyMode =\n typeof workflow.storagePolicy === \"string\"\n ? (workflow.storagePolicy as WorkflowStoragePolicyMode)\n : (defaults?.storagePolicy ?? \"ALL\");\n return {\n retentionSeconds,\n binaryRetentionSeconds,\n storagePolicy,\n };\n }\n}\n","import type {\n CurrentStateExecutionRequest,\n ExecutionContextFactory,\n ExecutionFrontierPlan,\n NodeExecutionSnapshot,\n NodeId,\n NodeOutputs,\n ParentExecutionRef,\n PersistedRunControlState,\n RunCurrentState,\n RunDataFactory,\n RunExecutionOptions,\n RunId,\n RunIdFactory,\n RunQueueEntry,\n RunResult,\n RunStateStore,\n WorkflowDefinition,\n WorkflowId,\n WorkflowPolicyRuntimeDefaults,\n WorkflowSnapshotFactory,\n} from \"../../types\";\n\nimport { createWorkflowExecutableNodeClassifier } from \"../../workflow/workflowExecutableNodeClassifier.types\";\nimport { CurrentStateFrontierPlanner } from \"../planning/CurrentStateFrontierPlanner\";\nimport { RunQueuePlanner } from \"../planning/RunQueuePlanner\";\nimport { WorkflowTopology } from \"../planning/WorkflowTopologyPlanner\";\n\nimport { EngineExecutionLimitsPolicy } from \"../policies/EngineExecutionLimitsPolicy\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport type { EngineWaiters } from \"../waiters/EngineWaiters\";\nimport { NodeExecutionStatePublisherFactory } from \"../state/NodeExecutionStatePublisherFactory\";\n\nimport { ActivationEnqueueService } from \"./ActivationEnqueueService\";\nimport { NodeActivationRequestComposer } from \"./NodeActivationRequestComposer\";\nimport { RunStateSemantics } from \"./RunStateSemantics\";\nimport { RunPolicySnapshotFactory } from \"../policies/RunPolicySnapshotFactory\";\nimport { WorkflowRunExecutionContextFactory } from \"./WorkflowRunExecutionContextFactory\";\n\nexport class CurrentStateRunStarter {\n constructor(\n private readonly runIdFactory: RunIdFactory,\n private readonly runStore: RunStateStore,\n private readonly runDataFactory: RunDataFactory,\n private readonly workflowSnapshotFactory: WorkflowSnapshotFactory,\n private readonly planningFactory: EngineWorkflowPlanningFactory,\n private readonly nodeStatePublisherFactory: NodeExecutionStatePublisherFactory,\n private readonly runExecutionContextFactory: WorkflowRunExecutionContextFactory,\n private readonly nodeActivationRequestComposer: NodeActivationRequestComposer,\n private readonly activationEnqueueService: ActivationEnqueueService,\n private readonly semantics: RunStateSemantics,\n private readonly waiters: EngineWaiters,\n private readonly workflowPolicyRuntimeDefaults: WorkflowPolicyRuntimeDefaults | undefined,\n private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n ) {}\n\n async runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult> {\n const runId = this.runIdFactory.makeRunId();\n const startedAt = new Date().toISOString();\n const workflowSnapshot = request.workflowSnapshot ?? this.workflowSnapshotFactory.create(request.workflow);\n const mutableState = request.mutableState ?? request.currentState?.mutableState;\n const policySnapshot = RunPolicySnapshotFactory.create(request.workflow, this.workflowPolicyRuntimeDefaults);\n const control = {\n stopCondition: request.stopCondition ?? { kind: \"workflowCompleted\" as const },\n };\n const mergedExecutionOptions = this.executionLimitsPolicy.mergeExecutionOptionsForNewRun(\n request.parent,\n request.executionOptions,\n );\n\n await this.runStore.createRun({\n runId,\n workflowId: request.workflow.id,\n startedAt,\n parent: request.parent,\n executionOptions: mergedExecutionOptions,\n control,\n workflowSnapshot,\n mutableState,\n policySnapshot,\n engineCounters: { completedNodeActivations: 0 },\n });\n\n const { topology, planner } = this.planningFactory.create(request.workflow);\n\n const plan = CurrentStateFrontierPlanner.createFromTopology(topology).plan({\n currentState: this.createRunCurrentState(request.currentState, mutableState),\n stopCondition: control.stopCondition,\n reset: request.reset,\n items: request.items,\n });\n\n const data = this.runDataFactory.create(plan.currentState.outputsByNode);\n const base = this.runExecutionContextFactory.create({\n runId,\n workflowId: request.workflow.id,\n nodeId:\n createWorkflowExecutableNodeClassifier(request.workflow).firstExecutableNodeIdInDefinitionOrder(\n request.workflow,\n ) ?? \"unknown_node\",\n parent: request.parent,\n subworkflowDepth: mergedExecutionOptions.subworkflowDepth ?? 0,\n engineMaxNodeActivations: mergedExecutionOptions.maxNodeActivations!,\n engineMaxSubworkflowDepth: mergedExecutionOptions.maxSubworkflowDepth!,\n data,\n nodeState: this.nodeStatePublisherFactory.create(runId, request.workflow.id, request.parent),\n });\n\n return await this.scheduleInitialPlan({\n runId,\n startedAt,\n workflow: request.workflow,\n workflowSnapshot,\n mutableState,\n policySnapshot,\n executionOptions: mergedExecutionOptions,\n control,\n parent: request.parent,\n planner,\n plan,\n base,\n data,\n });\n }\n\n private createRunCurrentState(\n currentState: RunCurrentState | undefined,\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"],\n ): RunCurrentState {\n return {\n outputsByNode: { ...(currentState?.outputsByNode ?? {}) },\n nodeSnapshotsByNodeId: { ...(currentState?.nodeSnapshotsByNodeId ?? {}) },\n connectionInvocations: currentState?.connectionInvocations ? [...currentState.connectionInvocations] : undefined,\n mutableState: mutableState ?? currentState?.mutableState,\n };\n }\n\n private async scheduleInitialPlan(args: {\n runId: RunId;\n startedAt: string;\n workflow: WorkflowDefinition;\n workflowSnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n policySnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"policySnapshot\"];\n executionOptions?: RunExecutionOptions;\n control: PersistedRunControlState | undefined;\n parent?: ParentExecutionRef;\n planner: RunQueuePlanner;\n plan: ExecutionFrontierPlan;\n base: ReturnType<ExecutionContextFactory[\"create\"]>;\n data: ReturnType<RunDataFactory[\"create\"]>;\n }): Promise<RunResult> {\n const initialNodeSnapshotsByNodeId = this.semantics.applySkippedSnapshots({\n runId: args.runId,\n workflowId: args.workflow.id,\n parent: args.parent,\n currentState: args.plan.currentState,\n skippedNodeIds: args.plan.skippedNodeIds,\n preservedPinnedNodeIds: args.plan.preservedPinnedNodeIds,\n finishedAt: args.startedAt,\n });\n\n if (args.plan.rootNodeId) {\n const startDef = WorkflowTopology.fromWorkflow(args.workflow).defsById.get(args.plan.rootNodeId);\n if (!startDef) {\n throw new Error(`Unknown frontier nodeId: ${args.plan.rootNodeId}`);\n }\n const startItems = args.plan.rootNodeInput ?? [];\n if (startDef.kind === \"trigger\") {\n const request = this.nodeActivationRequestComposer.createSingleFromDefinition({\n runId: args.runId,\n workflowId: args.workflow.id,\n definition: startDef,\n parent: args.parent,\n executionOptions: args.executionOptions,\n batchId: \"batch_1\",\n input: startItems,\n base: args.base,\n data: args.data,\n });\n return await this.activationEnqueueService.enqueueActivation({\n runId: args.runId,\n workflowId: args.workflow.id,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n pendingQueue: [],\n request,\n previousNodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n planner: args.planner,\n engineCounters: { completedNodeActivations: 0 },\n connectionInvocations: args.plan.currentState.connectionInvocations ?? [],\n });\n }\n\n const request = this.nodeActivationRequestComposer.createSingleFromDefinition({\n runId: args.runId,\n workflowId: args.workflow.id,\n definition: startDef,\n parent: args.parent,\n executionOptions: args.executionOptions,\n batchId: \"batch_1\",\n input: startItems,\n base: args.base,\n data: args.data,\n });\n return await this.activationEnqueueService.enqueueActivation({\n runId: args.runId,\n workflowId: args.workflow.id,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n pendingQueue: [],\n request,\n previousNodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n planner: args.planner,\n connectionInvocations: args.plan.currentState.connectionInvocations ?? [],\n });\n }\n\n return await this.scheduleQueuedPlan({\n runId: args.runId,\n workflowId: args.workflow.id,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n workflow: args.workflow,\n planner: args.planner,\n queue: [...args.plan.queue],\n base: args.base,\n data: args.data,\n nodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n connectionInvocations: args.plan.currentState.connectionInvocations ?? [],\n });\n }\n\n private async scheduleQueuedPlan(args: {\n runId: RunId;\n workflowId: WorkflowId;\n startedAt: string;\n parent?: ParentExecutionRef;\n executionOptions?: RunExecutionOptions;\n control: PersistedRunControlState | undefined;\n workflowSnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n policySnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"policySnapshot\"];\n workflow: WorkflowDefinition;\n planner: RunQueuePlanner;\n queue: RunQueueEntry[];\n base: ReturnType<ExecutionContextFactory[\"create\"]>;\n data: ReturnType<RunDataFactory[\"create\"]>;\n nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n connectionInvocations: RunCurrentState[\"connectionInvocations\"];\n }): Promise<RunResult> {\n this.semantics.applyPinnedQueueSkips({\n runId: args.runId,\n workflowId: args.workflowId,\n parent: args.parent,\n mutableState: args.mutableState,\n planner: args.planner,\n queue: args.queue,\n data: args.data,\n nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n finishedAt: args.startedAt,\n });\n const next = args.planner.nextActivation(args.queue);\n if (!next) {\n return await this.completeRun({\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n workflow: args.workflow,\n data: args.data,\n nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n connectionInvocations: args.connectionInvocations,\n });\n }\n\n const definition = WorkflowTopology.fromWorkflow(args.workflow).defsById.get(next.nodeId);\n if (!definition || definition.kind !== \"node\") {\n throw new Error(`Node ${next.nodeId} is not a runnable node`);\n }\n\n const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n next,\n base: args.base,\n data: args.data,\n runId: args.runId,\n workflowId: args.workflowId,\n parent: args.parent,\n executionOptions: args.executionOptions,\n nodeDefinition: definition,\n });\n\n return await this.activationEnqueueService.enqueueActivation({\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n pendingQueue: args.queue,\n request,\n previousNodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n planner: args.planner,\n engineCounters: { completedNodeActivations: 0 },\n connectionInvocations: args.connectionInvocations ?? [],\n });\n }\n\n private async completeRun(args: {\n runId: RunId;\n workflowId: WorkflowId;\n startedAt: string;\n parent?: ParentExecutionRef;\n executionOptions?: RunExecutionOptions;\n control: PersistedRunControlState | undefined;\n workflowSnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n policySnapshot: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"policySnapshot\"];\n workflow: WorkflowDefinition;\n data: ReturnType<RunDataFactory[\"create\"]>;\n nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n connectionInvocations: RunCurrentState[\"connectionInvocations\"];\n }): Promise<RunResult> {\n await this.runStore.save({\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n engineCounters: { completedNodeActivations: 0 },\n connectionInvocations: args.connectionInvocations ? [...args.connectionInvocations] : [],\n status: \"completed\",\n pending: undefined,\n queue: [],\n outputsByNode: args.data.dump(),\n nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n });\n const result: RunResult = {\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n status: \"completed\",\n outputs: this.semantics.resolveResultOutputs(\n args.workflow,\n args.control?.stopCondition,\n args.data.dump() as Record<NodeId, NodeOutputs>,\n ),\n };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n}\n","import type {\n ActivationIdFactory,\n ExecutionContextFactory,\n Items,\n NodeActivationRequest,\n NodeExecutionContext,\n NodeId,\n ParentExecutionRef,\n RunDataFactory,\n RunExecutionOptions,\n RunId,\n WorkflowId,\n} from \"../../types\";\n\nimport type { PlannedActivation } from \"../planning/RunQueuePlanner\";\n\nimport { CredentialResolverFactory } from \"../credentials/CredentialResolverFactory\";\n\n/**\n * Builds {@link NodeActivationRequest} values shared by workflow starters and continuation.\n */\nexport class NodeActivationRequestComposer {\n constructor(\n private readonly activationIdFactory: ActivationIdFactory,\n private readonly credentialResolverFactory: CredentialResolverFactory,\n ) {}\n\n createSingleFromDefinition(args: {\n runId: RunId;\n workflowId: WorkflowId;\n definition: Readonly<{ id: NodeId; config: NodeExecutionContext[\"config\"] }>;\n parent?: ParentExecutionRef;\n executionOptions?: RunExecutionOptions;\n batchId: string;\n input: Items;\n base: ReturnType<ExecutionContextFactory[\"create\"]>;\n data: ReturnType<RunDataFactory[\"create\"]>;\n }): NodeActivationRequest {\n const activationId = this.activationIdFactory.makeActivationId();\n const ctx: NodeExecutionContext = {\n ...args.base,\n data: args.data,\n nodeId: args.definition.id,\n activationId,\n config: args.definition.config,\n binary: args.base.binary.forNode({ nodeId: args.definition.id, activationId }),\n getCredential: this.credentialResolverFactory.create(args.workflowId, args.definition.id, args.definition.config),\n };\n return {\n kind: \"single\",\n runId: args.runId,\n activationId,\n workflowId: args.workflowId,\n nodeId: args.definition.id,\n parent: args.parent,\n executionOptions: args.executionOptions,\n batchId: args.batchId,\n input: args.input,\n ctx,\n };\n }\n\n createFromPlannedActivation(args: {\n next: PlannedActivation;\n base: ReturnType<ExecutionContextFactory[\"create\"]>;\n data: ReturnType<RunDataFactory[\"create\"]>;\n runId: RunId;\n workflowId: WorkflowId;\n parent?: ParentExecutionRef;\n executionOptions?: RunExecutionOptions;\n nodeDefinition: Readonly<{ id: NodeId; config: NodeExecutionContext[\"config\"] }>;\n }): NodeActivationRequest {\n const activationId = this.activationIdFactory.makeActivationId();\n const ctx: NodeExecutionContext = {\n ...args.base,\n data: args.data,\n nodeId: args.nodeDefinition.id,\n activationId,\n config: args.nodeDefinition.config,\n binary: args.base.binary.forNode({ nodeId: args.nodeDefinition.id, activationId }),\n getCredential: this.credentialResolverFactory.create(\n args.workflowId,\n args.nodeDefinition.id,\n args.nodeDefinition.config,\n ),\n };\n if (args.next.kind === \"multi\") {\n return {\n kind: \"multi\",\n runId: args.runId,\n activationId,\n workflowId: args.workflowId,\n nodeId: args.nodeDefinition.id,\n parent: args.parent,\n executionOptions: args.executionOptions,\n batchId: args.next.batchId,\n inputsByPort: args.next.inputsByPort,\n ctx,\n };\n }\n return {\n kind: \"single\",\n runId: args.runId,\n activationId,\n workflowId: args.workflowId,\n nodeId: args.nodeDefinition.id,\n parent: args.parent,\n executionOptions: args.executionOptions,\n batchId: args.next.batchId,\n input: args.next.input,\n ctx,\n };\n }\n}\n","import type { EngineRunCounters, PersistedRunState, RunQueueEntry } from \"../../types\";\n\n/**\n * Merges common terminal-run fields onto a loaded {@link PersistedRunState} without repeating object literals.\n */\nexport class PersistedRunStateTerminalBuilder {\n mergeTerminal(args: {\n state: PersistedRunState;\n engineCounters: EngineRunCounters;\n status: \"completed\" | \"failed\";\n queue: RunQueueEntry[];\n outputsByNode: PersistedRunState[\"outputsByNode\"];\n nodeSnapshotsByNodeId: NonNullable<PersistedRunState[\"nodeSnapshotsByNodeId\"]>;\n }): PersistedRunState {\n return {\n ...args.state,\n engineCounters: args.engineCounters,\n status: args.status,\n pending: undefined,\n queue: args.queue,\n outputsByNode: args.outputsByNode,\n nodeSnapshotsByNodeId: args.nodeSnapshotsByNodeId,\n };\n }\n}\n","import type { NodeId, NodeOutputs } from \"../../types\";\n\nexport class RuntimeContinuationDiagnostics {\n static formatNodeLabel(args: {\n definition?: Readonly<{ id: NodeId; name?: string; type: unknown }>;\n nodeId: NodeId;\n }): string {\n const tokenName = typeof args.definition?.type === \"function\" ? args.definition.type.name : \"Node\";\n return args.definition?.name\n ? `\"${args.definition.name}\" (${tokenName}:${args.nodeId})`\n : `${tokenName}:${args.nodeId}`;\n }\n\n static formatOutputCounts(outputs: NodeOutputs): string {\n const entries = Object.entries(outputs ?? {});\n if (entries.length === 0) {\n return \"no outputs\";\n }\n return entries.map(([port, items]) => `${port}=${items?.length ?? 0}`).join(\", \");\n }\n}\n","import type {\n ActivationIdFactory,\n NodeActivationId,\n NodeExecutionContext,\n NodeId,\n NodeInputsByPort,\n NodeOutputs,\n PersistedRunState,\n RunDataFactory,\n RunId,\n RunQueueEntry,\n RunResult,\n RunStateStore,\n WebhookControlSignal,\n WebhookRunResult,\n WorkflowDefinition,\n WorkflowId,\n WorkflowSnapshotResolver,\n} from \"../../types\";\n\nimport { WorkflowTopology } from \"../planning/WorkflowTopologyPlanner\";\nimport { createWorkflowExecutableNodeClassifier } from \"../../workflow/workflowExecutableNodeClassifier.types\";\n\nimport { CredentialResolverFactory } from \"../credentials/CredentialResolverFactory\";\nimport type { EngineExecutionLimitsPolicy } from \"../policies/EngineExecutionLimitsPolicy\";\nimport { RunTerminalPersistenceCoordinator } from \"../policies/RunTerminalPersistenceCoordinator\";\nimport { WorkflowPolicyErrorServices } from \"../policies/WorkflowPolicyErrorServices\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport type { EngineWaiters } from \"../waiters/EngineWaiters\";\nimport { InputPortMap } from \"../state/InputPortMapFactory\";\nimport { NodeEventPublisher } from \"../../events/NodeEventPublisher\";\nimport { NodeSnapshotFactory } from \"../state/NodeSnapshotFactory\";\nimport { NodeExecutionStatePublisherFactory } from \"../state/NodeExecutionStatePublisherFactory\";\nimport { RuntimeContinuationDiagnostics } from \"../state/RuntimeContinuationDiagnosticsReporter\";\n\nimport { ActivationEnqueueService } from \"./ActivationEnqueueService\";\nimport { NodeActivationRequestComposer } from \"./NodeActivationRequestComposer\";\nimport { PersistedRunStateTerminalBuilder } from \"./PersistedRunStateTerminalBuilder\";\nimport { RunStateSemantics } from \"./RunStateSemantics\";\nimport { WorkflowRunExecutionContextFactory } from \"./WorkflowRunExecutionContextFactory\";\n\nexport class RunContinuationService {\n constructor(\n private readonly activationIdFactory: ActivationIdFactory,\n private readonly runStore: RunStateStore,\n private readonly runDataFactory: RunDataFactory,\n private readonly runExecutionContextFactory: WorkflowRunExecutionContextFactory,\n private readonly workflowSnapshotResolver: WorkflowSnapshotResolver,\n private readonly planningFactory: EngineWorkflowPlanningFactory,\n private readonly nodeStatePublisherFactory: NodeExecutionStatePublisherFactory,\n private readonly credentialResolverFactory: CredentialResolverFactory,\n private readonly nodeActivationRequestComposer: NodeActivationRequestComposer,\n private readonly persistedRunStateTerminalBuilder: PersistedRunStateTerminalBuilder,\n private readonly activationEnqueueService: ActivationEnqueueService,\n private readonly nodeEventPublisher: NodeEventPublisher,\n private readonly semantics: RunStateSemantics,\n private readonly waiters: EngineWaiters,\n private readonly policyErrorServices: WorkflowPolicyErrorServices,\n private readonly terminalPersistence: RunTerminalPersistenceCoordinator,\n private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n ) {}\n\n async markNodeRunning(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n inputsByPort: NodeInputsByPort;\n }): Promise<void> {\n const state = await this.runStore.load(args.runId);\n if (!state?.pending) return;\n if (state.pending.activationId !== args.activationId || state.pending.nodeId !== args.nodeId) return;\n\n const startedAt = new Date().toISOString();\n const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n const snapshot = NodeSnapshotFactory.running({\n previous,\n runId: state.runId,\n workflowId: state.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: state.parent,\n startedAt,\n inputsByPort: args.inputsByPort,\n });\n\n await this.runStore.save({\n ...state,\n nodeSnapshotsByNodeId: {\n ...(state.nodeSnapshotsByNodeId ?? {}),\n [args.nodeId]: snapshot,\n },\n });\n await this.nodeEventPublisher.publish(\"nodeStarted\", snapshot);\n }\n\n async resumeFromNodeResult(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n outputs: NodeOutputs;\n }): Promise<RunResult> {\n const state = await this.runStore.load(args.runId);\n if (!state) throw new Error(`Unknown runId: ${args.runId}`);\n if (state.status !== \"pending\" || !state.pending) throw new Error(`Run ${args.runId} is not pending`);\n if (state.pending.activationId !== args.activationId)\n throw new Error(`activationId mismatch for run ${args.runId}`);\n if (state.pending.nodeId !== args.nodeId) throw new Error(`nodeId mismatch for run ${args.runId}`);\n\n const wf = this.resolvePersistedWorkflow(state);\n if (!wf) throw new Error(`Unknown workflowId: ${state.workflowId}`);\n\n const { topology, planner } = this.planningFactory.create(wf);\n\n const data = this.runDataFactory.create(state.outputsByNode);\n const limits = this.resolveEngineLimitsFromState(state);\n const base = this.runExecutionContextFactory.create({\n runId: state.runId,\n workflowId: state.workflowId,\n nodeId: args.nodeId,\n parent: state.parent,\n subworkflowDepth: state.executionOptions?.subworkflowDepth ?? 0,\n engineMaxNodeActivations: limits.engineMaxNodeActivations,\n engineMaxSubworkflowDepth: limits.engineMaxSubworkflowDepth,\n data,\n nodeState: this.nodeStatePublisherFactory.create(state.runId, state.workflowId, state.parent),\n });\n\n data.setOutputs(args.nodeId, args.outputs);\n const completedAt = new Date().toISOString();\n const completedSnapshot = this.semantics.createFinishedSnapshot({\n workflow: wf,\n previous: state.nodeSnapshotsByNodeId?.[args.nodeId],\n runId: state.runId,\n workflowId: state.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: state.parent,\n finishedAt: completedAt,\n inputsByPort: state.pending.inputsByPort,\n outputs: args.outputs,\n });\n\n const completedActivations = (state.engineCounters?.completedNodeActivations ?? 0) + 1;\n const engineCounters = { completedNodeActivations: completedActivations };\n const maxNodeActivations = state.executionOptions?.maxNodeActivations ?? Number.MAX_SAFE_INTEGER;\n\n if (this.semantics.isStopConditionSatisfied(state.control?.stopCondition, args.nodeId)) {\n const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state,\n engineCounters,\n status: \"completed\",\n queue: [],\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: {\n ...(state.nodeSnapshotsByNodeId ?? {}),\n [args.nodeId]: completedSnapshot,\n },\n });\n await this.runStore.save(completedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: wf,\n state: completedState,\n finalStatus: \"completed\",\n finishedAt: completedAt,\n });\n const result: RunResult = {\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n status: \"completed\",\n outputs: this.semantics.resolveResultOutputs(wf, state.control?.stopCondition, data.dump()),\n };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n const batchId = state.pending.batchId ?? \"batch_1\";\n const queue: RunQueueEntry[] = (state.queue ?? []).map((q) => ({ ...q, batchId: q.batchId ?? batchId }));\n const nextNodeSnapshotsByNodeId = {\n ...(state.nodeSnapshotsByNodeId ?? {}),\n [args.nodeId]: completedSnapshot,\n };\n\n planner.applyOutputs(queue, { fromNodeId: args.nodeId, outputs: args.outputs as any, batchId });\n this.semantics.applyPinnedQueueSkips({\n runId: state.runId,\n workflowId: state.workflowId,\n parent: state.parent,\n mutableState: state.mutableState,\n planner,\n queue,\n data,\n nodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n finishedAt: completedAt,\n });\n\n let next: ReturnType<(typeof planner)[\"nextActivation\"]>;\n try {\n next = planner.nextActivation(queue);\n } catch (cause) {\n const completedDefinition = topology.defsById.get(args.nodeId);\n const completedNodeLabel = RuntimeContinuationDiagnostics.formatNodeLabel({\n definition: completedDefinition,\n nodeId: args.nodeId,\n });\n const reason = cause instanceof Error ? cause.message : String(cause);\n throw new Error(\n `After completing ${completedNodeLabel}, the engine could not plan the next activation. ${reason} Outputs: ${RuntimeContinuationDiagnostics.formatOutputCounts(args.outputs)}.`,\n { cause },\n );\n }\n if (!next) {\n const lastNodeId = createWorkflowExecutableNodeClassifier(wf).lastExecutableNodeIdInDefinitionOrder(wf);\n const outputs = data.getOutputItems(lastNodeId, \"main\");\n\n const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state,\n engineCounters,\n status: \"completed\",\n queue: [],\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n });\n await this.runStore.save(completedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: wf,\n state: completedState,\n finalStatus: \"completed\",\n finishedAt: completedAt,\n });\n\n const result: RunResult = {\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n status: \"completed\",\n outputs,\n };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n if (completedActivations >= maxNodeActivations) {\n const message = `Run exceeded maxNodeActivations (${maxNodeActivations}) after ${completedActivations} completed node activations (next would be ${next.nodeId}).`;\n const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state,\n engineCounters,\n status: \"failed\",\n queue: queue.map((q) => ({ ...q })),\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n });\n await this.runStore.save(failedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: wf,\n state: failedState,\n finalStatus: \"failed\",\n finishedAt: completedAt,\n });\n const result: RunResult = {\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n status: \"failed\",\n error: { message },\n };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n const def = topology.defsById.get(next.nodeId);\n if (!def || def.kind !== \"node\") throw new Error(`Node ${next.nodeId} is not a runnable node`);\n\n const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n next,\n base,\n data,\n runId: state.runId,\n workflowId: state.workflowId,\n parent: state.parent,\n executionOptions: state.executionOptions,\n nodeDefinition: def,\n });\n\n const { queuedSnapshot, result } = await this.activationEnqueueService.enqueueActivationWithSnapshot({\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n parent: state.parent,\n executionOptions: state.executionOptions,\n control: state.control,\n workflowSnapshot: state.workflowSnapshot,\n mutableState: state.mutableState,\n policySnapshot: state.policySnapshot,\n pendingQueue: queue,\n request,\n previousNodeSnapshotsByNodeId: nextNodeSnapshotsByNodeId,\n planner,\n engineCounters,\n connectionInvocations: state.connectionInvocations ?? [],\n });\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n return result;\n }\n\n async resumeFromNodeError(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n error: Error;\n }): Promise<RunResult> {\n const state = await this.runStore.load(args.runId);\n if (!state) throw new Error(`Unknown runId: ${args.runId}`);\n if (state.status !== \"pending\" || !state.pending) throw new Error(`Run ${args.runId} is not pending`);\n if (state.pending.activationId !== args.activationId)\n throw new Error(`activationId mismatch for run ${args.runId}`);\n if (state.pending.nodeId !== args.nodeId) throw new Error(`nodeId mismatch for run ${args.runId}`);\n\n const wf = this.resolvePersistedWorkflow(state);\n if (!wf) throw new Error(`Unknown workflowId: ${state.workflowId}`);\n const failedDefinition = WorkflowTopology.fromWorkflow(wf).defsById.get(args.nodeId);\n const webhookControlSignal =\n state.executionOptions?.webhook && failedDefinition?.kind === \"trigger\"\n ? this.asWebhookControlSignal(args.error)\n : undefined;\n if (webhookControlSignal) {\n return await this.resumeFromWebhookControl({ state, workflow: wf, args, signal: webhookControlSignal });\n }\n\n if (failedDefinition && failedDefinition.kind === \"node\") {\n const nodeHandler = this.policyErrorServices.resolveNodeErrorHandler(failedDefinition.config.nodeErrorHandler);\n if (nodeHandler) {\n try {\n const ctx = this.buildNodeExecutionContextForPending(state, wf, failedDefinition, args.nodeId);\n const inputsByPort = state.pending.inputsByPort;\n const portKeys = Object.keys(inputsByPort);\n const kind = portKeys.length === 1 && portKeys[0] === \"in\" ? (\"single\" as const) : (\"multi\" as const);\n const items = inputsByPort.in ?? [];\n const recovered = await nodeHandler.handle({\n kind,\n items,\n inputsByPort: kind === \"multi\" ? inputsByPort : undefined,\n ctx,\n error: args.error,\n });\n return await this.resumeFromNodeResult({\n runId: args.runId,\n activationId: args.activationId,\n nodeId: args.nodeId,\n outputs: recovered,\n });\n } catch {\n // fall through to workflow-level failure\n }\n }\n }\n\n const finishedAt = new Date().toISOString();\n const message = args.error?.message ?? String(args.error);\n const failedSnapshot = NodeSnapshotFactory.failed({\n previous: state.nodeSnapshotsByNodeId?.[args.nodeId],\n runId: state.runId,\n workflowId: state.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId,\n parent: state.parent,\n finishedAt,\n inputsByPort: state.pending.inputsByPort,\n error: args.error,\n });\n const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state,\n engineCounters: state.engineCounters ?? { completedNodeActivations: 0 },\n status: \"failed\",\n queue: (state.queue ?? []).map((q) => ({ ...q })),\n outputsByNode: state.outputsByNode,\n nodeSnapshotsByNodeId: {\n ...(state.nodeSnapshotsByNodeId ?? {}),\n [args.nodeId]: failedSnapshot,\n },\n });\n await this.runStore.save(failedState);\n await this.nodeEventPublisher.publish(\"nodeFailed\", failedSnapshot);\n\n const wfErr = this.policyErrorServices.resolveWorkflowErrorHandler(wf.workflowErrorHandler);\n if (wfErr) {\n await Promise.resolve(\n wfErr.onError({\n runId: state.runId,\n workflowId: state.workflowId,\n workflow: wf,\n failedNodeId: args.nodeId,\n error: args.error,\n startedAt: state.startedAt,\n finishedAt,\n }),\n );\n }\n\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: wf,\n state: failedState,\n finalStatus: \"failed\",\n finishedAt,\n });\n\n const result: RunResult = {\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n status: \"failed\",\n error: { message },\n };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n async resumeFromStepResult(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n outputs: NodeOutputs;\n }): Promise<RunResult> {\n return await this.resumeFromNodeResult(args);\n }\n\n async resumeFromStepError(args: {\n runId: RunId;\n activationId: NodeActivationId;\n nodeId: NodeId;\n error: Error;\n }): Promise<RunResult> {\n return await this.resumeFromNodeError(args);\n }\n\n async waitForCompletion(runId: RunId): Promise<Extract<RunResult, { status: \"completed\" | \"failed\" }>> {\n const existing = await this.runStore.load(runId);\n if (existing?.status === \"completed\") {\n const wf = this.resolvePersistedWorkflow(existing);\n const outputs = wf\n ? this.semantics.resolveResultOutputs(wf, existing.control?.stopCondition, existing.outputsByNode)\n : [];\n return {\n runId: existing.runId,\n workflowId: existing.workflowId,\n startedAt: existing.startedAt,\n status: \"completed\",\n outputs,\n };\n }\n if (existing?.status === \"failed\") {\n return {\n runId: existing.runId,\n workflowId: existing.workflowId,\n startedAt: existing.startedAt,\n status: \"failed\",\n error: { message: \"Run failed\" },\n };\n }\n\n const result = await this.waiters.waitForCompletion(runId);\n if (result.status !== \"completed\" && result.status !== \"failed\") {\n throw new Error(`Unexpected run completion status: ${result.status}`);\n }\n return result;\n }\n\n async waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult> {\n return await this.waiters.waitForWebhookResponse(runId);\n }\n\n private async resumeFromWebhookControl(args: {\n state: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>;\n workflow: WorkflowDefinition;\n args: { runId: RunId; activationId: NodeActivationId; nodeId: NodeId; error: Error };\n signal: WebhookControlSignal;\n }): Promise<RunResult> {\n const data = this.runDataFactory.create(args.state.outputsByNode);\n const { topology, planner } = this.planningFactory.create(args.workflow);\n\n const continuedItems =\n args.signal.kind === \"respondNowAndContinue\" ? (args.signal.continueItems ?? []) : args.signal.responseItems;\n const triggerOutputs: NodeOutputs = { main: continuedItems };\n data.setOutputs(args.args.nodeId, triggerOutputs);\n\n const completedSnapshot = this.semantics.createFinishedSnapshot({\n workflow: args.workflow,\n previous: args.state.nodeSnapshotsByNodeId?.[args.args.nodeId],\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n nodeId: args.args.nodeId,\n activationId: args.args.activationId,\n parent: args.state.parent,\n finishedAt: new Date().toISOString(),\n inputsByPort: args.state.pending?.inputsByPort ?? InputPortMap.empty(),\n outputs: triggerOutputs,\n });\n\n const completedActivations = (args.state.engineCounters?.completedNodeActivations ?? 0) + 1;\n const engineCounters = { completedNodeActivations: completedActivations };\n const maxNodeActivations = args.state.executionOptions?.maxNodeActivations ?? Number.MAX_SAFE_INTEGER;\n\n if (this.semantics.isStopConditionSatisfied(args.state.control?.stopCondition, args.args.nodeId)) {\n const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state: args.state,\n engineCounters,\n status: \"completed\",\n queue: [],\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: {\n ...(args.state.nodeSnapshotsByNodeId ?? {}),\n [args.args.nodeId]: completedSnapshot,\n },\n });\n await this.runStore.save(completedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: args.workflow,\n state: completedState,\n finalStatus: \"completed\",\n finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n });\n this.waiters.resolveWebhookResponse({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n runStatus: \"completed\",\n response: args.signal.responseItems,\n });\n const result: RunResult = {\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n status: \"completed\",\n outputs: this.semantics.resolveResultOutputs(args.workflow, args.state.control?.stopCondition, data.dump()),\n };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n if (args.signal.kind === \"respondNow\") {\n const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state: args.state,\n engineCounters,\n status: \"completed\",\n queue: [],\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: {\n ...(args.state.nodeSnapshotsByNodeId ?? {}),\n [args.args.nodeId]: completedSnapshot,\n },\n });\n await this.runStore.save(completedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: args.workflow,\n state: completedState,\n finalStatus: \"completed\",\n finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n });\n\n const result: RunResult = {\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n status: \"completed\",\n outputs: args.signal.responseItems,\n };\n this.waiters.resolveWebhookResponse({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n runStatus: \"completed\",\n response: args.signal.responseItems,\n });\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n const batchId = args.state.pending?.batchId ?? \"batch_1\";\n const queue: RunQueueEntry[] = (args.state.queue ?? []).map((entry) => ({\n ...entry,\n batchId: entry.batchId ?? batchId,\n }));\n planner.applyOutputs(queue, { fromNodeId: args.args.nodeId, outputs: triggerOutputs as any, batchId });\n const next = planner.nextActivation(queue);\n\n if (!next) {\n const lastNodeId = createWorkflowExecutableNodeClassifier(args.workflow).lastExecutableNodeIdInDefinitionOrder(\n args.workflow,\n );\n const outputs = data.getOutputItems(lastNodeId, \"main\");\n const completedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state: args.state,\n engineCounters,\n status: \"completed\",\n queue: [],\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: {\n ...(args.state.nodeSnapshotsByNodeId ?? {}),\n [args.args.nodeId]: completedSnapshot,\n },\n });\n await this.runStore.save(completedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: args.workflow,\n state: completedState,\n finalStatus: \"completed\",\n finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n });\n\n const result: RunResult = {\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n status: \"completed\",\n outputs,\n };\n this.waiters.resolveWebhookResponse({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n runStatus: \"completed\",\n response: args.signal.responseItems,\n });\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n if (completedActivations >= maxNodeActivations) {\n const message = `Run exceeded maxNodeActivations (${maxNodeActivations}) after ${completedActivations} completed node activations (next would be ${next.nodeId}).`;\n const failedState = this.persistedRunStateTerminalBuilder.mergeTerminal({\n state: args.state,\n engineCounters,\n status: \"failed\",\n queue: queue.map((q) => ({ ...q })),\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: {\n ...(args.state.nodeSnapshotsByNodeId ?? {}),\n [args.args.nodeId]: completedSnapshot,\n },\n });\n await this.runStore.save(failedState);\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.terminalPersistence.maybeDeleteAfterTerminalState({\n workflow: args.workflow,\n state: failedState,\n finalStatus: \"failed\",\n finishedAt: completedSnapshot.finishedAt ?? completedSnapshot.updatedAt,\n });\n const result: RunResult = {\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n status: \"failed\",\n error: { message },\n };\n this.waiters.resolveWebhookResponse({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n runStatus: \"pending\",\n response: args.signal.responseItems,\n });\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n const nextDefinition = topology.defsById.get(next.nodeId);\n if (!nextDefinition || nextDefinition.kind !== \"node\") {\n throw new Error(`Node ${next.nodeId} is not a runnable node`);\n }\n\n const webhookLimits = this.resolveEngineLimitsFromState(args.state);\n const base = this.runExecutionContextFactory.create({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n nodeId: nextDefinition.id,\n parent: args.state.parent,\n subworkflowDepth: args.state.executionOptions?.subworkflowDepth ?? 0,\n engineMaxNodeActivations: webhookLimits.engineMaxNodeActivations,\n engineMaxSubworkflowDepth: webhookLimits.engineMaxSubworkflowDepth,\n data,\n nodeState: this.nodeStatePublisherFactory.create(args.state.runId, args.state.workflowId, args.state.parent),\n });\n const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n next,\n base,\n data,\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n parent: args.state.parent,\n executionOptions: args.state.executionOptions,\n nodeDefinition: nextDefinition,\n });\n\n const { queuedSnapshot, result } = await this.activationEnqueueService.enqueueActivationWithSnapshot({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n parent: args.state.parent,\n executionOptions: args.state.executionOptions,\n control: args.state.control,\n workflowSnapshot: args.state.workflowSnapshot,\n mutableState: args.state.mutableState,\n policySnapshot: args.state.policySnapshot,\n pendingQueue: queue,\n request,\n previousNodeSnapshotsByNodeId: {\n ...(args.state.nodeSnapshotsByNodeId ?? {}),\n [args.args.nodeId]: completedSnapshot,\n },\n planner,\n engineCounters,\n connectionInvocations: args.state.connectionInvocations ?? [],\n });\n await this.nodeEventPublisher.publish(\"nodeCompleted\", completedSnapshot);\n await this.nodeEventPublisher.publish(\"nodeQueued\", queuedSnapshot);\n this.waiters.resolveWebhookResponse({\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n startedAt: args.state.startedAt,\n runStatus: \"pending\",\n response: args.signal.responseItems,\n });\n return result;\n }\n\n private asWebhookControlSignal(error: Error): WebhookControlSignal | undefined {\n const candidate = error as Partial<WebhookControlSignal> | undefined;\n if (!candidate || candidate.__webhookControl !== true) return undefined;\n if (candidate.kind !== \"respondNow\" && candidate.kind !== \"respondNowAndContinue\") return undefined;\n if (!Array.isArray(candidate.responseItems)) return undefined;\n return candidate as WebhookControlSignal;\n }\n\n private resolvePersistedWorkflow(state: {\n workflowId: WorkflowId;\n workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n }): WorkflowDefinition | undefined {\n return this.workflowSnapshotResolver.resolve({\n workflowId: state.workflowId,\n workflowSnapshot: state.workflowSnapshot,\n });\n }\n\n private buildNodeExecutionContextForPending(\n state: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>,\n wf: WorkflowDefinition,\n def: Readonly<{ id: NodeId; config: NodeExecutionContext[\"config\"] }>,\n nodeId: NodeId,\n ): NodeExecutionContext {\n const data = this.runDataFactory.create(state.outputsByNode);\n const limits = this.resolveEngineLimitsFromState(state);\n const base = this.runExecutionContextFactory.create({\n runId: state.runId,\n workflowId: state.workflowId,\n nodeId,\n parent: state.parent,\n subworkflowDepth: state.executionOptions?.subworkflowDepth ?? 0,\n engineMaxNodeActivations: limits.engineMaxNodeActivations,\n engineMaxSubworkflowDepth: limits.engineMaxSubworkflowDepth,\n data,\n nodeState: this.nodeStatePublisherFactory.create(state.runId, state.workflowId, state.parent),\n });\n const activationId = state.pending!.activationId;\n return {\n ...base,\n data,\n nodeId,\n activationId,\n config: def.config,\n binary: base.binary.forNode({ nodeId, activationId }),\n getCredential: this.credentialResolverFactory.create(wf.id, nodeId, def.config),\n };\n }\n\n private resolveEngineLimitsFromState(state: PersistedRunState): {\n engineMaxNodeActivations: number;\n engineMaxSubworkflowDepth: number;\n } {\n const fb = this.executionLimitsPolicy.createRootExecutionOptions();\n return {\n engineMaxNodeActivations: state.executionOptions?.maxNodeActivations ?? fb.maxNodeActivations!,\n engineMaxSubworkflowDepth: state.executionOptions?.maxSubworkflowDepth ?? fb.maxSubworkflowDepth!,\n };\n }\n}\n","export class MissingRuntimeExecutionMarker {\n static isMarked(config: unknown): boolean {\n return Boolean((config as Partial<{ missingRuntime: boolean }> | undefined)?.missingRuntime);\n }\n}\n","import type {\n Items,\n NodeActivationId,\n NodeExecutionSnapshot,\n NodeId,\n NodeInputsByPort,\n NodeOutputs,\n ParentExecutionRef,\n PersistedRunControlState,\n RunCurrentState,\n RunDataFactory,\n RunId,\n RunQueueEntry,\n RunStateStore,\n WorkflowDefinition,\n WorkflowId,\n} from \"../../types\";\n\nimport { createWorkflowExecutableNodeClassifier } from \"../../workflow/workflowExecutableNodeClassifier.types\";\nimport { RunQueuePlanner } from \"../planning/RunQueuePlanner\";\n\nimport { MissingRuntimeExecutionMarker } from \"../materialization/MissingRuntimeExecutionMarkerFactory\";\nimport { InputPortMap } from \"../state/InputPortMapFactory\";\nimport { NodeSnapshotFactory } from \"../state/NodeSnapshotFactory\";\n\nexport class RunStateSemantics {\n isStopConditionSatisfied(stopCondition: PersistedRunControlState[\"stopCondition\"], nodeId: NodeId): boolean {\n if (!stopCondition || stopCondition.kind === \"workflowCompleted\") {\n return false;\n }\n return stopCondition.nodeId === nodeId;\n }\n\n resolveResultOutputs(\n workflow: WorkflowDefinition,\n stopCondition: PersistedRunControlState[\"stopCondition\"],\n outputsByNode: Record<NodeId, NodeOutputs>,\n ): Items {\n if (stopCondition?.kind === \"nodeCompleted\") {\n return outputsByNode[stopCondition.nodeId]?.main ?? [];\n }\n const lastNodeId = createWorkflowExecutableNodeClassifier(workflow).lastExecutableNodeIdInDefinitionOrder(workflow);\n return outputsByNode[lastNodeId]?.main ?? [];\n }\n\n applySkippedSnapshots(args: {\n runId: RunId;\n workflowId: WorkflowId;\n parent?: ParentExecutionRef;\n currentState: RunCurrentState;\n skippedNodeIds: ReadonlyArray<NodeId>;\n preservedPinnedNodeIds: ReadonlyArray<NodeId>;\n finishedAt: string;\n }): Record<NodeId, NodeExecutionSnapshot> {\n const snapshots = { ...args.currentState.nodeSnapshotsByNodeId };\n const skippedPinnedNodeIds = new Set<NodeId>(\n args.preservedPinnedNodeIds.filter((nodeId) => args.skippedNodeIds.includes(nodeId)),\n );\n for (const nodeId of args.skippedNodeIds) {\n if (args.currentState.mutableState?.nodesById?.[nodeId]?.pinnedOutputsByPort) {\n skippedPinnedNodeIds.add(nodeId);\n }\n }\n for (const nodeId of skippedPinnedNodeIds) {\n const previous = snapshots[nodeId];\n snapshots[nodeId] = NodeSnapshotFactory.completed({\n previous,\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId,\n activationId: previous?.activationId ?? `synthetic_${nodeId}`,\n parent: args.parent,\n finishedAt: args.finishedAt,\n inputsByPort: previous?.inputsByPort ?? InputPortMap.empty(),\n outputs: args.currentState.outputsByNode[nodeId] ?? {},\n fromPinnedOutput: true,\n });\n }\n return snapshots;\n }\n\n applyPinnedQueueSkips(args: {\n runId: RunId;\n workflowId: WorkflowId;\n parent?: ParentExecutionRef;\n mutableState: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n planner: RunQueuePlanner;\n queue: RunQueueEntry[];\n data: ReturnType<RunDataFactory[\"create\"]>;\n nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;\n finishedAt: string;\n }): void {\n let changed = true;\n while (changed) {\n changed = false;\n for (let index = 0; index < args.queue.length; index += 1) {\n const queueEntry = args.queue[index]!;\n const pinnedOutputs = args.mutableState?.nodesById?.[queueEntry.nodeId]?.pinnedOutputsByPort;\n if (!pinnedOutputs) {\n continue;\n }\n args.queue.splice(index, 1);\n const previous = args.nodeSnapshotsByNodeId[queueEntry.nodeId];\n args.nodeSnapshotsByNodeId[queueEntry.nodeId] = NodeSnapshotFactory.completed({\n previous,\n runId: args.runId,\n workflowId: args.workflowId,\n nodeId: queueEntry.nodeId,\n activationId: previous?.activationId ?? `synthetic_${queueEntry.nodeId}`,\n parent: args.parent,\n finishedAt: args.finishedAt,\n inputsByPort: this.resolveQueueEntryInputsByPort(queueEntry),\n outputs: pinnedOutputs,\n fromPinnedOutput: true,\n });\n args.data.setOutputs(queueEntry.nodeId, pinnedOutputs);\n args.planner.applyOutputs(args.queue, {\n fromNodeId: queueEntry.nodeId,\n outputs: pinnedOutputs as any,\n batchId: queueEntry.batchId ?? \"batch_1\",\n });\n changed = true;\n break;\n }\n }\n }\n\n createFinishedSnapshot(args: {\n workflow: WorkflowDefinition;\n previous?: NodeExecutionSnapshot;\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n activationId: NodeActivationId;\n parent?: ParentExecutionRef;\n finishedAt: string;\n inputsByPort: NodeInputsByPort;\n outputs: NodeOutputs;\n }): NodeExecutionSnapshot {\n const definition = args.workflow.nodes.find((node) => node.id === args.nodeId);\n if (MissingRuntimeExecutionMarker.isMarked(definition?.config)) {\n return NodeSnapshotFactory.skipped(args);\n }\n return NodeSnapshotFactory.completed(args);\n }\n\n private resolveQueueEntryInputsByPort(queueEntry: RunQueueEntry): NodeInputsByPort {\n if (queueEntry.collect) {\n return queueEntry.collect.received;\n }\n return {\n [queueEntry.toInput ?? \"in\"]: queueEntry.input,\n };\n }\n}\n","import type {\n ExecutionContextFactory,\n NodeExecutionStatePublisher,\n NodeId,\n ParentExecutionRef,\n RunDataFactory,\n RunId,\n WorkflowId,\n} from \"../../types\";\n\nimport { CredentialResolverFactory } from \"../credentials/CredentialResolverFactory\";\n\n/**\n * Shared {@link ExecutionContextFactory#create} wiring for workflow runners (base context before node-specific fields).\n */\nexport class WorkflowRunExecutionContextFactory {\n constructor(\n private readonly executionContextFactory: ExecutionContextFactory,\n private readonly credentialResolverFactory: CredentialResolverFactory,\n ) {}\n\n create(args: {\n runId: RunId;\n workflowId: WorkflowId;\n nodeId: NodeId;\n parent?: ParentExecutionRef;\n subworkflowDepth: number;\n engineMaxNodeActivations: number;\n engineMaxSubworkflowDepth: number;\n data: ReturnType<RunDataFactory[\"create\"]>;\n nodeState?: NodeExecutionStatePublisher;\n }) {\n return this.executionContextFactory.create({\n runId: args.runId,\n workflowId: args.workflowId,\n parent: args.parent,\n subworkflowDepth: args.subworkflowDepth,\n engineMaxNodeActivations: args.engineMaxNodeActivations,\n engineMaxSubworkflowDepth: args.engineMaxSubworkflowDepth,\n data: args.data,\n nodeState: args.nodeState,\n getCredential: this.credentialResolverFactory.create(args.workflowId, args.nodeId),\n });\n }\n}\n","import type {\n Items,\n NodeExecutionSnapshot,\n NodeId,\n ParentExecutionRef,\n RunDataFactory,\n RunExecutionOptions,\n RunIdFactory,\n RunQueueEntry,\n RunResult,\n RunStateStore,\n WorkflowDefinition,\n WorkflowPolicyRuntimeDefaults,\n WorkflowSnapshotFactory,\n} from \"../../types\";\n\nimport { createWorkflowExecutableNodeClassifier } from \"../../workflow/workflowExecutableNodeClassifier.types\";\nimport { EngineExecutionLimitsPolicy } from \"../policies/EngineExecutionLimitsPolicy\";\nimport { RunPolicySnapshotFactory } from \"../policies/RunPolicySnapshotFactory\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport type { EngineWaiters } from \"../waiters/EngineWaiters\";\nimport { NodeExecutionStatePublisherFactory } from \"../state/NodeExecutionStatePublisherFactory\";\n\nimport { ActivationEnqueueService } from \"./ActivationEnqueueService\";\nimport { NodeActivationRequestComposer } from \"./NodeActivationRequestComposer\";\nimport { WorkflowRunExecutionContextFactory } from \"./WorkflowRunExecutionContextFactory\";\n\nexport class WorkflowRunStarter {\n constructor(\n private readonly runIdFactory: RunIdFactory,\n private readonly runStore: RunStateStore,\n private readonly runDataFactory: RunDataFactory,\n private readonly workflowSnapshotFactory: WorkflowSnapshotFactory,\n private readonly planningFactory: EngineWorkflowPlanningFactory,\n private readonly nodeStatePublisherFactory: NodeExecutionStatePublisherFactory,\n private readonly runExecutionContextFactory: WorkflowRunExecutionContextFactory,\n private readonly nodeActivationRequestComposer: NodeActivationRequestComposer,\n private readonly activationEnqueueService: ActivationEnqueueService,\n private readonly waiters: EngineWaiters,\n private readonly workflowPolicyRuntimeDefaults: WorkflowPolicyRuntimeDefaults | undefined,\n private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n ) {}\n\n async runWorkflow(\n wf: WorkflowDefinition,\n startAt: NodeId,\n items: Items,\n parent?: ParentExecutionRef,\n executionOptions?: RunExecutionOptions,\n persistedStateOverrides?: Readonly<{\n workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"workflowSnapshot\"];\n mutableState?: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>[\"mutableState\"];\n }>,\n ): Promise<RunResult> {\n const runId = this.runIdFactory.makeRunId();\n const startedAt = new Date().toISOString();\n const workflowSnapshot = persistedStateOverrides?.workflowSnapshot ?? this.workflowSnapshotFactory.create(wf);\n const mutableState = persistedStateOverrides?.mutableState;\n const policySnapshot = RunPolicySnapshotFactory.create(wf, this.workflowPolicyRuntimeDefaults);\n const mergedExecutionOptions = this.executionLimitsPolicy.mergeExecutionOptionsForNewRun(parent, executionOptions);\n\n await this.runStore.createRun({\n runId,\n workflowId: wf.id,\n startedAt,\n parent,\n executionOptions: mergedExecutionOptions,\n workflowSnapshot,\n mutableState,\n policySnapshot,\n engineCounters: { completedNodeActivations: 0 },\n });\n\n const data = this.runDataFactory.create();\n const base = this.runExecutionContextFactory.create({\n runId,\n workflowId: wf.id,\n nodeId: startAt,\n parent,\n subworkflowDepth: mergedExecutionOptions.subworkflowDepth ?? 0,\n engineMaxNodeActivations: mergedExecutionOptions.maxNodeActivations!,\n engineMaxSubworkflowDepth: mergedExecutionOptions.maxSubworkflowDepth!,\n data,\n nodeState: this.nodeStatePublisherFactory.create(runId, wf.id, parent),\n });\n\n const { topology, planner } = this.planningFactory.create(wf);\n\n const startDef = topology.defsById.get(startAt);\n if (!startDef) throw new Error(`Unknown start nodeId: ${startAt}`);\n\n const batchId = \"batch_1\";\n const queue: RunQueueEntry[] = [];\n const initialNodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot> = {};\n\n if (startDef.kind === \"trigger\") {\n const request = this.nodeActivationRequestComposer.createSingleFromDefinition({\n runId,\n workflowId: wf.id,\n definition: startDef,\n parent,\n executionOptions: mergedExecutionOptions,\n batchId,\n input: items,\n base,\n data,\n });\n return await this.activationEnqueueService.enqueueActivation({\n runId,\n workflowId: wf.id,\n startedAt,\n parent,\n executionOptions: mergedExecutionOptions,\n workflowSnapshot,\n mutableState,\n policySnapshot,\n control: undefined,\n pendingQueue: [],\n request,\n previousNodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n planner,\n engineCounters: { completedNodeActivations: 0 },\n connectionInvocations: [],\n });\n }\n\n queue.push({ nodeId: startAt, input: items, toInput: \"in\", batchId });\n\n const next = planner.nextActivation(queue);\n if (!next) {\n const lastNodeId = createWorkflowExecutableNodeClassifier(wf).lastExecutableNodeIdInDefinitionOrder(wf);\n const outputs = data.getOutputItems(lastNodeId, \"main\");\n await this.runStore.save({\n runId,\n workflowId: wf.id,\n startedAt,\n parent,\n executionOptions: mergedExecutionOptions,\n workflowSnapshot,\n mutableState,\n policySnapshot,\n engineCounters: { completedNodeActivations: 0 },\n connectionInvocations: [],\n status: \"completed\",\n pending: undefined,\n queue: [],\n outputsByNode: data.dump(),\n nodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n });\n const result: RunResult = { runId, workflowId: wf.id, startedAt, status: \"completed\", outputs };\n this.waiters.resolveRunCompletion(result);\n return result;\n }\n\n const def = topology.defsById.get(next.nodeId);\n if (!def || def.kind !== \"node\") throw new Error(`Node ${next.nodeId} is not a runnable node`);\n\n const request = this.nodeActivationRequestComposer.createFromPlannedActivation({\n next,\n base,\n data,\n runId,\n workflowId: wf.id,\n parent,\n executionOptions: mergedExecutionOptions,\n nodeDefinition: def,\n });\n\n return await this.activationEnqueueService.enqueueActivation({\n runId,\n workflowId: wf.id,\n startedAt,\n parent,\n executionOptions: mergedExecutionOptions,\n control: undefined,\n workflowSnapshot,\n mutableState,\n policySnapshot,\n pendingQueue: queue,\n request,\n previousNodeSnapshotsByNodeId: initialNodeSnapshotsByNodeId,\n planner,\n engineCounters: { completedNodeActivations: 0 },\n connectionInvocations: [],\n });\n }\n}\n","import type { PersistedRunState, RunStateStore, WorkflowDefinition } from \"../../types\";\n\nimport { WorkflowStoragePolicyEvaluator } from \"./WorkflowStoragePolicyEvaluator\";\n\nexport class RunTerminalPersistenceCoordinator {\n constructor(\n private readonly runStore: RunStateStore,\n private readonly storageEvaluator: WorkflowStoragePolicyEvaluator,\n ) {}\n\n async maybeDeleteAfterTerminalState(args: {\n workflow: WorkflowDefinition;\n state: PersistedRunState;\n finalStatus: \"completed\" | \"failed\";\n finishedAt: string;\n }): Promise<void> {\n const persist = await this.storageEvaluator.shouldPersist(args.workflow, args.state.policySnapshot, {\n runId: args.state.runId,\n workflowId: args.state.workflowId,\n workflow: args.workflow,\n finalStatus: args.finalStatus,\n startedAt: args.state.startedAt,\n finishedAt: args.finishedAt,\n });\n if (persist) return;\n if (!this.runStore.deleteRun) return;\n await this.runStore.deleteRun(args.state.runId);\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n NodeErrorHandler,\n NodeErrorHandlerSpec,\n NodeResolver,\n WorkflowErrorHandler,\n WorkflowErrorHandlerSpec,\n} from \"../../types\";\n\nexport class WorkflowPolicyErrorServices {\n constructor(private readonly nodeResolver: NodeResolver) {}\n\n resolveNodeErrorHandler(spec: NodeErrorHandlerSpec | undefined): NodeErrorHandler | undefined {\n if (!spec) return undefined;\n if (\n typeof spec === \"object\" &&\n spec !== null &&\n \"handle\" in spec &&\n typeof (spec as NodeErrorHandler).handle === \"function\"\n ) {\n return spec as NodeErrorHandler;\n }\n return this.nodeResolver.resolve(spec as TypeToken<NodeErrorHandler>);\n }\n\n resolveWorkflowErrorHandler(spec: WorkflowErrorHandlerSpec | undefined): WorkflowErrorHandler | undefined {\n if (!spec) return undefined;\n if (\n typeof spec === \"object\" &&\n spec !== null &&\n \"onError\" in spec &&\n typeof (spec as WorkflowErrorHandler).onError === \"function\"\n ) {\n return spec as WorkflowErrorHandler;\n }\n return this.nodeResolver.resolve(spec as TypeToken<WorkflowErrorHandler>);\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n NodeResolver,\n PersistedRunPolicySnapshot,\n WorkflowDefinition,\n WorkflowStoragePolicyDecisionArgs,\n WorkflowStoragePolicyMode,\n WorkflowStoragePolicyResolver,\n} from \"../../types\";\n\nexport class WorkflowStoragePolicyEvaluator {\n constructor(private readonly nodeResolver: NodeResolver) {}\n\n async shouldPersist(\n workflow: WorkflowDefinition,\n snapshot: PersistedRunPolicySnapshot | undefined,\n args: WorkflowStoragePolicyDecisionArgs,\n ): Promise<boolean> {\n const spec = workflow.storagePolicy;\n if (spec === undefined) {\n return this.modeMatches(snapshot?.storagePolicy ?? \"ALL\", args);\n }\n if (typeof spec === \"string\") {\n return this.modeMatches(spec as WorkflowStoragePolicyMode, args);\n }\n const resolver = this.nodeResolver.resolve(\n spec as TypeToken<WorkflowStoragePolicyResolver>,\n ) as WorkflowStoragePolicyResolver;\n return Boolean(await resolver.shouldPersist(args));\n }\n\n private modeMatches(mode: WorkflowStoragePolicyMode, args: WorkflowStoragePolicyDecisionArgs): boolean {\n if (mode === \"ALL\") return true;\n if (mode === \"NEVER\") return false;\n if (mode === \"SUCCESS\") return args.finalStatus === \"completed\";\n if (mode === \"ERROR\") return args.finalStatus === \"failed\";\n return true;\n }\n}\n","import type { CredentialSessionService, NodeExecutionContext, NodeId, WorkflowId } from \"../../types\";\n\nexport class CredentialResolverFactory {\n constructor(private readonly credentialSessions: CredentialSessionService) {}\n\n create(\n workflowId: WorkflowId,\n nodeId: NodeId,\n config?: NodeExecutionContext[\"config\"],\n ): NodeExecutionContext[\"getCredential\"] {\n const acceptedTypesBySlot = new Map<string, ReadonlyArray<string>>();\n for (const requirement of config?.getCredentialRequirements?.() ?? []) {\n acceptedTypesBySlot.set(requirement.slotKey, requirement.acceptedTypes);\n }\n\n return async <TSession = unknown>(slotKey: string): Promise<TSession> => {\n try {\n return await this.credentialSessions.getSession<TSession>({\n workflowId,\n nodeId,\n slotKey,\n });\n } catch (error) {\n const acceptedTypes = acceptedTypesBySlot.get(slotKey) ?? [];\n const message = error instanceof Error ? error.message : String(error);\n const alreadyListsAcceptedTypes =\n message.includes(\"Accepted types:\") ||\n message.includes(\"Accepted credential types:\") ||\n message.includes(\"binding points at an unknown type\");\n const acceptedTypesSuffix =\n acceptedTypes.length > 0 && !alreadyListsAcceptedTypes ? ` Accepted types: ${acceptedTypes.join(\", \")}.` : \"\";\n throw new Error(\n `Failed to resolve credential for workflow ${workflowId} node ${nodeId} slot \"${slotKey}\". ${message}${acceptedTypesSuffix}`,\n { cause: error },\n );\n }\n };\n }\n}\n","import type { RunEventBus } from \"./runEvents\";\nimport type { NodeExecutionSnapshot } from \"../types\";\n\n/** Publishes node lifecycle snapshots onto the run {@link RunEventBus}. */\nexport class NodeEventPublisher {\n constructor(private readonly eventBus: RunEventBus | undefined) {}\n\n async publish(\n kind: \"nodeQueued\" | \"nodeStarted\" | \"nodeCompleted\" | \"nodeFailed\",\n snapshot: NodeExecutionSnapshot,\n ): Promise<void> {\n if (!this.eventBus) return;\n await this.eventBus.publish({\n kind,\n runId: snapshot.runId,\n workflowId: snapshot.workflowId,\n parent: snapshot.parent,\n at: snapshot.updatedAt,\n snapshot,\n });\n }\n}\n","import type { InputPortKey, Items, NodeId, RunQueueEntry } from \"../../types\";\n\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class RunQueuePlannerDiagnostics {\n constructor(\n private readonly topology: WorkflowTopology,\n private readonly nodeInstances: ReadonlyMap<NodeId, unknown>,\n ) {}\n\n describeUnsatisfiedCollect(queueEntry: RunQueueEntry): string {\n const batchId = queueEntry.batchId ?? \"batch_1\";\n const expectedInputs = queueEntry.collect?.expectedInputs ?? [];\n const receivedInputs = Object.keys(\n (queueEntry.collect?.received ?? {}) as Record<InputPortKey, Items>,\n ) as InputPortKey[];\n const missingInputs = expectedInputs.filter((input) => !receivedInputs.includes(input));\n const mergeNodeLabel = this.formatNodeLabel(queueEntry.nodeId);\n const receivedSummary = this.describeReceivedInputs(queueEntry);\n const missingSummary = this.describeMissingInputs(queueEntry.nodeId, missingInputs);\n\n return [\n `Multi-input collect is stuck at ${mergeNodeLabel} (batchId=${batchId}).`,\n `Expected inputs: ${this.formatInputList(expectedInputs)}.`,\n `Received inputs: ${receivedSummary}.`,\n `Missing inputs: ${missingSummary}.`,\n ].join(\" \");\n }\n\n private describeReceivedInputs(queueEntry: RunQueueEntry): string {\n const received = (queueEntry.collect?.received ?? {}) as Record<InputPortKey, Items>;\n const receivedEntries = Object.entries(received);\n if (receivedEntries.length === 0) return \"none\";\n return receivedEntries\n .map(([input, items]) => `${input} (${items.length} item${items.length === 1 ? \"\" : \"s\"})`)\n .join(\", \");\n }\n\n private describeMissingInputs(nodeId: NodeId, missingInputs: ReadonlyArray<InputPortKey>): string {\n if (missingInputs.length === 0) return \"none\";\n return missingInputs\n .map((input) => {\n const sources = this.findSources(nodeId, input);\n if (sources.length === 0) return input;\n return `${input} from ${sources.join(\" or \")}`;\n })\n .join(\", \");\n }\n\n private findSources(nodeId: NodeId, input: InputPortKey): string[] {\n const matches: string[] = [];\n for (const [sourceNodeId, edges] of this.topology.outgoingByNode.entries()) {\n for (const edge of edges) {\n if (edge.to.nodeId === nodeId && edge.to.input === input) {\n matches.push(this.formatNodeLabel(sourceNodeId));\n }\n }\n }\n return matches;\n }\n\n private formatInputList(inputs: ReadonlyArray<InputPortKey>): string {\n return inputs.length > 0 ? `[${inputs.join(\", \")}]` : \"[]\";\n }\n\n private formatNodeLabel(nodeId: NodeId): string {\n const definition = this.topology.defsById.get(nodeId);\n const instance = this.nodeInstances.get(nodeId);\n const typeName =\n definition?.type && typeof definition.type === \"function\"\n ? definition.type.name\n : instance && typeof instance === \"object\" && \"constructor\" in instance\n ? ((instance.constructor as { name?: string }).name ?? \"Node\")\n : \"Node\";\n return definition?.name ? `\"${definition.name}\" (${typeName}:${nodeId})` : `${typeName}:${nodeId}`;\n }\n}\n","import type { InputPortKey, Items, NodeId, OutputPortKey, RunQueueEntry } from \"../../types\";\n\nimport { RunQueuePlannerDiagnostics } from \"./RunQueuePlannerDiagnostics\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport type PlannedActivation =\n | Readonly<{ kind: \"single\"; nodeId: NodeId; input: Items; batchId: string }>\n | Readonly<{ kind: \"multi\"; nodeId: NodeId; inputsByPort: Readonly<Record<InputPortKey, Items>>; batchId: string }>;\n\nexport class RunQueuePlanner {\n private readonly diagnostics: RunQueuePlannerDiagnostics;\n\n constructor(\n private readonly topology: WorkflowTopology,\n private readonly nodeInstances: ReadonlyMap<NodeId, unknown>,\n ) {\n this.diagnostics = new RunQueuePlannerDiagnostics(topology, nodeInstances);\n }\n\n validateNodeKinds(): void {\n for (const [toNodeId, inputs] of this.topology.expectedInputsByNode.entries()) {\n if (inputs.length <= 1) {\n const only = inputs[0];\n if (only && only !== \"in\") {\n const inst = this.nodeInstances.get(toNodeId);\n if (!this.isMultiInputNode(inst))\n throw new Error(`Node ${toNodeId} only supports input 'in' (got '${only}').`);\n }\n continue;\n }\n\n const inst = this.nodeInstances.get(toNodeId);\n if (!this.isMultiInputNode(inst)) {\n throw new Error(\n `Node ${toNodeId} has ${inputs.length} inbound edges. Insert a Merge node to combine branches.`,\n );\n }\n }\n }\n\n seedFromTrigger(args: { startNodeId: NodeId; items: Items; batchId: string }): RunQueueEntry[] {\n const queue: RunQueueEntry[] = [];\n for (const e of this.topology.outgoingByNode.get(args.startNodeId) ?? []) {\n if (e.output !== \"main\") continue;\n this.enqueueEdge(queue, {\n batchId: args.batchId,\n to: e.to,\n from: { nodeId: args.startNodeId, output: \"main\" },\n items: args.items,\n });\n }\n return queue;\n }\n\n applyOutputs(\n queue: RunQueueEntry[],\n args: { fromNodeId: NodeId; outputs: Record<string, Items | undefined>; batchId: string },\n ): void {\n for (const e of this.topology.outgoingByNode.get(args.fromNodeId) ?? []) {\n const outItems = (args.outputs as any)[e.output] ?? [];\n this.enqueueEdge(queue, {\n batchId: args.batchId,\n to: e.to,\n from: { nodeId: args.fromNodeId, output: e.output },\n items: outItems,\n });\n }\n }\n\n nextActivation(queue: RunQueueEntry[]): PlannedActivation | null {\n const readyCollect = this.resolveReadyCollect(queue);\n if (readyCollect) {\n return readyCollect;\n }\n\n const jobIdx = queue.findIndex((q) => !q.collect);\n if (jobIdx === -1) {\n if (queue.length === 0) return null;\n const sealedCollect = this.resolveSealedCollect(queue);\n if (sealedCollect) {\n return sealedCollect;\n }\n const stuck = queue[0]!;\n throw new Error(this.diagnostics.describeUnsatisfiedCollect(stuck));\n }\n\n const job = queue.splice(jobIdx, 1)[0]!;\n const def = this.topology.defsById.get(job.nodeId);\n if (!def || def.kind !== \"node\") return this.nextActivation(queue);\n return { kind: \"single\", nodeId: job.nodeId, input: job.input, batchId: job.batchId ?? \"batch_1\" };\n }\n\n sumItemsByPort(inputsByPort: Readonly<Record<InputPortKey, Items>>): number {\n let n = 0;\n for (const v of Object.values(inputsByPort)) n += v?.length ?? 0;\n return n;\n }\n\n private resolveReadyCollect(queue: RunQueueEntry[]): PlannedActivation | null {\n for (let i = 0; i < queue.length; i++) {\n const ready = this.tryDequeueCollect(queue, i);\n if (ready) {\n return ready;\n }\n }\n return null;\n }\n\n private resolveSealedCollect(queue: RunQueueEntry[]): PlannedActivation | null {\n for (let i = 0; i < queue.length; i++) {\n const queueEntry = queue[i]!;\n if (!queueEntry.collect) {\n continue;\n }\n const received = queueEntry.collect.received as Record<InputPortKey, Items>;\n if (Object.keys(received).length === 0) {\n continue;\n }\n this.fillMissingCollectInputs(queueEntry);\n const ready = this.tryDequeueCollect(queue, i);\n if (ready) {\n return ready;\n }\n }\n return null;\n }\n\n private tryDequeueCollect(queue: RunQueueEntry[], index: number): PlannedActivation | null {\n const queueEntry = queue[index]!;\n if (!queueEntry.collect) {\n return null;\n }\n const batchId = queueEntry.batchId ?? \"batch_1\";\n const expected = queueEntry.collect.expectedInputs ?? [];\n const received = queueEntry.collect.received as Record<InputPortKey, Items>;\n for (const input of expected) {\n if (!(input in received)) {\n return null;\n }\n }\n queue.splice(index, 1);\n return { kind: \"multi\", nodeId: queueEntry.nodeId, inputsByPort: received, batchId };\n }\n\n private fillMissingCollectInputs(queueEntry: RunQueueEntry): void {\n if (!queueEntry.collect) {\n return;\n }\n const received = queueEntry.collect.received as Record<InputPortKey, Items>;\n for (const input of queueEntry.collect.expectedInputs ?? []) {\n if (!(input in received)) {\n received[input] = [];\n }\n }\n }\n\n private enqueueEdge(\n queue: RunQueueEntry[],\n args: Readonly<{\n batchId: string;\n to: { nodeId: NodeId; input: InputPortKey };\n from: { nodeId: NodeId; output: OutputPortKey };\n items: Items;\n }>,\n ): void {\n const target = this.nodeInstances.get(args.to.nodeId);\n const isMulti = this.isMultiInputNode(target);\n\n if (!isMulti) {\n if (args.items.length === 0) {\n if (this.shouldContinueAfterEmptyOutputFromSource(args.from.nodeId)) {\n queue.push({\n nodeId: args.to.nodeId,\n input: args.items,\n toInput: args.to.input,\n batchId: args.batchId,\n from: args.from,\n });\n return;\n }\n this.propagateEmptyPath(queue, args.to.nodeId, args.batchId);\n return;\n }\n queue.push({\n nodeId: args.to.nodeId,\n input: args.items,\n toInput: args.to.input,\n batchId: args.batchId,\n from: args.from,\n });\n return;\n }\n\n const expected = this.topology.expectedInputsByNode.get(args.to.nodeId) ?? [];\n let collect = queue.find(\n (q) => q.nodeId === args.to.nodeId && (q.batchId ?? \"batch_1\") === args.batchId && !!q.collect,\n );\n if (!collect) {\n collect = {\n nodeId: args.to.nodeId,\n input: [],\n batchId: args.batchId,\n collect: { expectedInputs: expected, received: {} as Record<InputPortKey, Items> },\n };\n queue.push(collect);\n }\n\n const received = (collect.collect as any).received as Record<InputPortKey, Items>;\n received[args.to.input] = args.items;\n }\n\n private shouldContinueAfterEmptyOutputFromSource(fromNodeId: NodeId): boolean {\n const def = this.topology.defsById.get(fromNodeId);\n if (!def) {\n return false;\n }\n return def.config.continueWhenEmptyOutput === true;\n }\n\n private propagateEmptyPath(queue: RunQueueEntry[], nodeId: NodeId, batchId: string): void {\n for (const edge of this.topology.outgoingByNode.get(nodeId) ?? []) {\n this.enqueueEdge(queue, {\n batchId,\n to: edge.to,\n from: { nodeId, output: edge.output },\n items: [],\n });\n }\n }\n\n private isMultiInputNode(n: unknown): boolean {\n return typeof (n as any)?.executeMulti === \"function\";\n }\n}\n\nexport { RunQueuePlannerDiagnostics } from \"./RunQueuePlannerDiagnostics\";\n","import type { WorkflowDefinition, WorkflowNodeInstanceFactory } from \"../../types\";\n\nimport { DirectedCycleDetector } from \"./DirectedCycleDetector\";\nimport { RunQueuePlanner } from \"./RunQueuePlanner\";\nimport { WorkflowTopology } from \"./WorkflowTopologyPlanner\";\n\nexport class EngineWorkflowPlanningFactory {\n constructor(\n private readonly workflowNodeInstanceFactory: WorkflowNodeInstanceFactory,\n private readonly directedCycleDetector: DirectedCycleDetector,\n ) {}\n\n create(workflow: WorkflowDefinition): Readonly<{ topology: WorkflowTopology; planner: RunQueuePlanner }> {\n this.directedCycleDetector.validateAcyclic(workflow);\n const topology = WorkflowTopology.fromWorkflow(workflow);\n const nodeInstances = this.workflowNodeInstanceFactory.createNodes(workflow);\n const planner = new RunQueuePlanner(topology, nodeInstances);\n planner.validateNodeKinds();\n return { topology, planner };\n }\n}\n","import type { WorkflowDefinition } from \"../../types\";\nimport type { WorkflowExecutableNodeClassifier } from \"../../workflow/WorkflowExecutableNodeClassifier\";\nimport { createWorkflowExecutableNodeClassifier } from \"../../workflow/workflowExecutableNodeClassifier.types\";\n\ntype NodeId = string;\ntype VisitState = \"unvisited\" | \"visiting\" | \"done\";\n\n/**\n * Rejects workflow definitions whose edges contain a directed cycle (including self-loops).\n */\nexport class DirectedCycleDetector {\n validateAcyclic(workflow: WorkflowDefinition): void {\n const classifier = createWorkflowExecutableNodeClassifier(workflow);\n const outgoing = this.buildOutgoingAdjacency(workflow, classifier);\n const state = new Map<NodeId, VisitState>();\n for (const n of workflow.nodes) {\n if (classifier.isExecutableNodeId(n.id)) state.set(n.id, \"unvisited\");\n }\n for (const n of workflow.nodes) {\n if (classifier.isExecutableNodeId(n.id) && state.get(n.id) === \"unvisited\") {\n this.depthFirstSearch(n.id, outgoing, state);\n }\n }\n }\n\n private buildOutgoingAdjacency(\n workflow: WorkflowDefinition,\n classifier: WorkflowExecutableNodeClassifier,\n ): ReadonlyMap<NodeId, ReadonlyArray<NodeId>> {\n const map = new Map<NodeId, NodeId[]>();\n for (const e of workflow.edges) {\n if (!classifier.isExecutableNodeId(e.from.nodeId) || !classifier.isExecutableNodeId(e.to.nodeId)) {\n continue;\n }\n const list = map.get(e.from.nodeId) ?? [];\n list.push(e.to.nodeId);\n map.set(e.from.nodeId, list);\n }\n return map;\n }\n\n private depthFirstSearch(\n nodeId: NodeId,\n outgoing: ReadonlyMap<NodeId, ReadonlyArray<NodeId>>,\n visitState: Map<NodeId, VisitState>,\n ): void {\n visitState.set(nodeId, \"visiting\");\n for (const toId of outgoing.get(nodeId) ?? []) {\n const s = visitState.get(toId);\n if (s === \"visiting\") {\n throw new Error(`Workflow graph contains a directed cycle (edge ${nodeId} -> ${toId}).`);\n }\n if (s === \"unvisited\") {\n this.depthFirstSearch(toId, outgoing, visitState);\n }\n }\n visitState.set(nodeId, \"done\");\n }\n}\n","import type {\n ConnectionInvocationAppendArgs,\n ConnectionInvocationRecord,\n NodeActivationId,\n NodeExecutionSnapshot,\n NodeExecutionStatePublisher,\n NodeId,\n NodeInputsByPort,\n NodeOutputs,\n ParentExecutionRef,\n RunId,\n RunStateStore,\n WorkflowId,\n} from \"../../types\";\n\nimport { InputPortMap } from \"./InputPortMapFactory\";\nimport { NodeSnapshotFactory } from \"./NodeSnapshotFactory\";\n\nexport class BoundNodeExecutionStatePublisher implements NodeExecutionStatePublisher {\n private chain: Promise<void> = Promise.resolve();\n\n constructor(\n private readonly runStore: RunStateStore,\n private readonly runId: RunId,\n private readonly workflowId: WorkflowId,\n private readonly parent: ParentExecutionRef | undefined,\n private readonly publishNodeEvent: (\n kind: \"nodeQueued\" | \"nodeStarted\" | \"nodeCompleted\" | \"nodeFailed\",\n snapshot: NodeExecutionSnapshot,\n ) => Promise<void>,\n ) {}\n\n markQueued(args: {\n nodeId: NodeId;\n activationId?: NodeActivationId;\n inputsByPort?: NodeInputsByPort;\n }): Promise<void> {\n return this.enqueue(async () => {\n const state = await this.loadState();\n const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n const queuedAt = new Date().toISOString();\n const snapshot = NodeSnapshotFactory.queued({\n runId: this.runId,\n workflowId: this.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n parent: this.parent,\n queuedAt,\n inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? InputPortMap.empty(),\n });\n await this.saveSnapshot(state, snapshot);\n await this.publishNodeEvent(\"nodeQueued\", snapshot);\n });\n }\n\n markRunning(args: {\n nodeId: NodeId;\n activationId?: NodeActivationId;\n inputsByPort?: NodeInputsByPort;\n }): Promise<void> {\n return this.enqueue(async () => {\n const state = await this.loadState();\n const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n const startedAt = new Date().toISOString();\n const snapshot = NodeSnapshotFactory.running({\n previous,\n runId: this.runId,\n workflowId: this.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n parent: this.parent,\n startedAt,\n inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? InputPortMap.empty(),\n });\n await this.saveSnapshot(state, snapshot);\n await this.publishNodeEvent(\"nodeStarted\", snapshot);\n });\n }\n\n markCompleted(args: {\n nodeId: NodeId;\n activationId?: NodeActivationId;\n inputsByPort?: NodeInputsByPort;\n outputs?: NodeOutputs;\n }): Promise<void> {\n return this.enqueue(async () => {\n const state = await this.loadState();\n const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n const finishedAt = new Date().toISOString();\n const snapshot = NodeSnapshotFactory.completed({\n previous,\n runId: this.runId,\n workflowId: this.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n parent: this.parent,\n finishedAt,\n inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? InputPortMap.empty(),\n outputs: args.outputs ?? previous?.outputs ?? {},\n });\n await this.saveSnapshot(state, snapshot);\n await this.publishNodeEvent(\"nodeCompleted\", snapshot);\n });\n }\n\n markFailed(args: {\n nodeId: NodeId;\n activationId?: NodeActivationId;\n inputsByPort?: NodeInputsByPort;\n error: Error;\n }): Promise<void> {\n return this.enqueue(async () => {\n const state = await this.loadState();\n const previous = state.nodeSnapshotsByNodeId?.[args.nodeId];\n const finishedAt = new Date().toISOString();\n const snapshot = NodeSnapshotFactory.failed({\n previous,\n runId: this.runId,\n workflowId: this.workflowId,\n nodeId: args.nodeId,\n activationId: args.activationId ?? previous?.activationId ?? `synthetic_${args.nodeId}`,\n parent: this.parent,\n finishedAt,\n inputsByPort: args.inputsByPort ?? previous?.inputsByPort ?? InputPortMap.empty(),\n error: args.error,\n });\n await this.saveSnapshot(state, snapshot);\n await this.publishNodeEvent(\"nodeFailed\", snapshot);\n });\n }\n\n appendConnectionInvocation(args: ConnectionInvocationAppendArgs): Promise<void> {\n return this.enqueue(async () => {\n const state = await this.loadState();\n const updatedAt = new Date().toISOString();\n const record: ConnectionInvocationRecord = {\n invocationId: args.invocationId,\n runId: this.runId,\n workflowId: this.workflowId,\n connectionNodeId: args.connectionNodeId,\n parentAgentNodeId: args.parentAgentNodeId,\n parentAgentActivationId: args.parentAgentActivationId,\n status: args.status,\n managedInput: args.managedInput,\n managedOutput: args.managedOutput,\n error: args.error,\n queuedAt: args.queuedAt,\n startedAt: args.startedAt,\n finishedAt: args.finishedAt,\n updatedAt,\n };\n await this.runStore.save({\n ...state,\n connectionInvocations: [...(state.connectionInvocations ?? []), record],\n });\n });\n }\n\n private enqueue(work: () => Promise<void>): Promise<void> {\n const next = this.chain.then(work);\n this.chain = next.catch(() => undefined);\n return next;\n }\n\n private async loadState(): Promise<NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>> {\n const state = await this.runStore.load(this.runId);\n if (!state) {\n throw new Error(`Unknown runId: ${this.runId}`);\n }\n return state;\n }\n\n private async saveSnapshot(\n state: NonNullable<Awaited<ReturnType<RunStateStore[\"load\"]>>>,\n snapshot: NodeExecutionSnapshot,\n ): Promise<void> {\n await this.runStore.save({\n ...state,\n nodeSnapshotsByNodeId: {\n ...(state.nodeSnapshotsByNodeId ?? {}),\n [snapshot.nodeId]: snapshot,\n },\n });\n }\n}\n","import type { NodeExecutionStatePublisher, ParentExecutionRef, RunId, RunStateStore, WorkflowId } from \"../../types\";\n\nimport { BoundNodeExecutionStatePublisher } from \"./BoundNodeExecutionStatePublisher\";\nimport { NodeEventPublisher } from \"../../events/NodeEventPublisher\";\n\nexport class NodeExecutionStatePublisherFactory {\n constructor(\n private readonly runStore: RunStateStore,\n private readonly nodeEventPublisher: NodeEventPublisher,\n ) {}\n\n create(runId: RunId, workflowId: WorkflowId, parent: ParentExecutionRef | undefined): NodeExecutionStatePublisher {\n return new BoundNodeExecutionStatePublisher(this.runStore, runId, workflowId, parent, async (kind, snapshot) => {\n await this.nodeEventPublisher.publish(kind, snapshot);\n });\n }\n}\n","import type {\n ExecutionContextFactory,\n Items,\n JsonValue,\n NodeDefinition,\n NodeId,\n NodeResolver,\n RunDataFactory,\n RunIdFactory,\n TestableTriggerNode,\n TriggerCleanupHandle,\n TriggerInstanceId,\n TriggerNode,\n TriggerNodeConfig,\n TriggerSetupContext,\n TriggerSetupStateStore,\n TriggerRuntimeDiagnostics,\n WorkflowActivationPolicy,\n WorkflowDefinition,\n WorkflowId,\n WorkflowRepository,\n} from \"../../types\";\n\nimport type { NodeExecutionStatePublisherFactory } from \"../state/NodeExecutionStatePublisherFactory\";\n\nimport { CredentialResolverFactory } from \"../credentials/CredentialResolverFactory\";\nimport type { EngineExecutionLimitsPolicy } from \"../policies/EngineExecutionLimitsPolicy\";\n\nexport interface TriggerEmitHandler {\n emit(workflow: WorkflowDefinition, triggerNodeId: NodeId, items: Items): Promise<void>;\n}\n\nexport class TriggerRuntimeService {\n private readonly credentialResolverFactory: CredentialResolverFactory;\n private readonly triggerCleanupHandlesByKey = new Map<string, TriggerCleanupHandle[]>();\n\n constructor(\n private readonly workflowRepository: WorkflowRepository,\n private readonly workflowActivationPolicy: WorkflowActivationPolicy,\n private readonly runIdFactory: RunIdFactory,\n private readonly runDataFactory: RunDataFactory,\n private readonly executionContextFactory: ExecutionContextFactory,\n credentialResolverFactory: CredentialResolverFactory,\n private readonly nodeExecutionStatePublisherFactory: NodeExecutionStatePublisherFactory,\n private readonly nodeResolver: NodeResolver,\n private readonly triggerSetupStateStore: TriggerSetupStateStore,\n private readonly emitHandler: TriggerEmitHandler,\n private readonly executionLimitsPolicy: EngineExecutionLimitsPolicy,\n private readonly diagnostics?: TriggerRuntimeDiagnostics,\n ) {\n this.credentialResolverFactory = credentialResolverFactory;\n }\n\n async startTriggers(): Promise<void> {\n for (const wf of this.workflowRepository.list()) {\n if (!this.workflowActivationPolicy.isActive(wf.id)) {\n const summaries = this.formatTriggerSummaries(wf);\n if (summaries.length > 0) {\n this.logInfo(\n `Workflow \"${wf.name}\" (${wf.id}) is inactive; skipping trigger setup — ${summaries.join(\"; \")}.`,\n );\n }\n continue;\n }\n await this.startTriggersForWorkflow(wf);\n }\n }\n\n async syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void> {\n const wf = this.workflowRepository.get(workflowId);\n if (!wf) {\n return;\n }\n const summaries = this.formatTriggerSummaries(wf);\n if (summaries.length > 0) {\n this.logInfo(`Workflow \"${wf.name}\" (${wf.id}): stopping triggers — ${summaries.join(\"; \")}.`);\n }\n await this.stopTriggersForWorkflow(wf);\n if (this.workflowActivationPolicy.isActive(workflowId)) {\n if (summaries.length > 0) {\n this.logInfo(`Workflow \"${wf.name}\" (${wf.id}): activation on; starting triggers — ${summaries.join(\"; \")}.`);\n }\n await this.startTriggersForWorkflow(wf);\n } else {\n this.logInfo(`Workflow \"${wf.name}\" (${wf.id}): activation off; triggers not started.`);\n }\n }\n\n async stop(): Promise<void> {\n for (const workflow of this.workflowRepository.list()) {\n await this.stopTriggersForWorkflow(workflow);\n }\n }\n\n async createTriggerTestItems(args: { workflow: WorkflowDefinition; nodeId: NodeId }): Promise<Items | undefined> {\n const definition = args.workflow.nodes.find((node) => node.id === args.nodeId);\n if (!definition) {\n throw new Error(`Unknown trigger nodeId: ${args.nodeId}`);\n }\n if (definition.kind !== \"trigger\") {\n throw new Error(`Node ${args.nodeId} is not a trigger`);\n }\n const node = this.nodeResolver.resolve(definition.type) as TriggerNode;\n if (!this.isTestableTriggerNode(node)) {\n return undefined;\n }\n const data = this.runDataFactory.create();\n const runId = this.runIdFactory.makeRunId();\n const trigger = { workflowId: args.workflow.id, nodeId: definition.id } as const;\n const previousState = await this.triggerSetupStateStore.load(trigger);\n return await node.getTestItems({\n ...this.createExecutionContext({\n runId,\n workflowId: args.workflow.id,\n nodeId: definition.id,\n data,\n }),\n trigger,\n nodeId: definition.id,\n config: definition.config as TriggerNodeConfig,\n previousState: previousState?.state as never,\n });\n }\n\n private async startTriggersForWorkflow(wf: WorkflowDefinition): Promise<void> {\n for (const def of wf.nodes) {\n if (def.kind !== \"trigger\") continue;\n const node = this.nodeResolver.resolve(def.type) as TriggerNode;\n const data = this.runDataFactory.create();\n const triggerRunId = this.runIdFactory.makeRunId();\n const trigger = { workflowId: wf.id, nodeId: def.id } as const;\n await this.stopTrigger(trigger);\n const previousState = await this.triggerSetupStateStore.load(trigger);\n let nextState: unknown;\n try {\n nextState = await node.setup({\n ...this.createExecutionContext({\n runId: triggerRunId,\n workflowId: wf.id,\n nodeId: def.id,\n data,\n }),\n trigger,\n config: def.config as TriggerNodeConfig,\n previousState: previousState?.state as never,\n registerCleanup: (cleanup) => {\n this.registerTriggerCleanupHandle(trigger, cleanup);\n },\n emit: async (items) => {\n await this.emitHandler.emit(wf, def.id, items);\n },\n } satisfies TriggerSetupContext<TriggerNodeConfig>);\n } catch (triggerError: unknown) {\n await this.stopTrigger(trigger);\n const message = triggerError instanceof Error ? triggerError.message : String(triggerError);\n this.logWarn(`Skipping trigger setup for workflow ${wf.id} node ${def.id}: ${message}`);\n continue;\n }\n if (nextState === undefined) {\n await this.triggerSetupStateStore.delete(trigger);\n } else {\n await this.triggerSetupStateStore.save({\n trigger,\n updatedAt: new Date().toISOString(),\n state: nextState as JsonValue | undefined,\n });\n }\n }\n }\n\n private async stopTriggersForWorkflow(workflow: WorkflowDefinition): Promise<void> {\n for (const node of workflow.nodes) {\n if (node.kind !== \"trigger\") {\n continue;\n }\n await this.stopTrigger({\n workflowId: workflow.id,\n nodeId: node.id,\n });\n }\n }\n\n private createExecutionContext(args: {\n runId: ReturnType<RunIdFactory[\"makeRunId\"]>;\n workflowId: string;\n nodeId: NodeId;\n data: ReturnType<RunDataFactory[\"create\"]>;\n }) {\n const nodeState = this.nodeExecutionStatePublisherFactory.create(args.runId, args.workflowId, undefined);\n const rootLimits = this.executionLimitsPolicy.createRootExecutionOptions();\n return this.executionContextFactory.create({\n runId: args.runId,\n workflowId: args.workflowId,\n parent: undefined,\n subworkflowDepth: rootLimits.subworkflowDepth ?? 0,\n engineMaxNodeActivations: rootLimits.maxNodeActivations!,\n engineMaxSubworkflowDepth: rootLimits.maxSubworkflowDepth!,\n data: args.data,\n nodeState,\n getCredential: this.credentialResolverFactory.create(args.workflowId, args.nodeId),\n });\n }\n\n private registerTriggerCleanupHandle(trigger: TriggerInstanceId, cleanup: TriggerCleanupHandle): void {\n const key = this.toTriggerKey(trigger);\n const cleanups = this.triggerCleanupHandlesByKey.get(key) ?? [];\n cleanups.push(cleanup);\n this.triggerCleanupHandlesByKey.set(key, cleanups);\n }\n\n private async stopTrigger(trigger: TriggerInstanceId): Promise<void> {\n const key = this.toTriggerKey(trigger);\n const cleanups = this.triggerCleanupHandlesByKey.get(key) ?? [];\n this.triggerCleanupHandlesByKey.delete(key);\n for (const cleanup of [...cleanups].reverse()) {\n await cleanup.stop();\n }\n }\n\n private toTriggerKey(trigger: TriggerInstanceId): string {\n return `${trigger.workflowId}:${trigger.nodeId}`;\n }\n\n private formatTriggerSummaries(wf: WorkflowDefinition): string[] {\n const out: string[] = [];\n for (const def of wf.nodes) {\n if (def.kind !== \"trigger\") {\n continue;\n }\n out.push(this.describeTriggerNode(def));\n }\n return out;\n }\n\n private describeTriggerNode(def: NodeDefinition): string {\n const label = def.name !== undefined && def.name.trim().length > 0 ? def.name.trim() : String(def.id);\n const cfg = def.config as { endpointKey?: unknown };\n if (typeof cfg.endpointKey === \"string\" && cfg.endpointKey.trim().length > 0) {\n return `${label} (webhook \"${cfg.endpointKey.trim()}\")`;\n }\n return label;\n }\n\n private logInfo(message: string): void {\n if (this.diagnostics) {\n this.diagnostics.info(message);\n }\n }\n\n private logWarn(message: string): void {\n if (this.diagnostics) {\n this.diagnostics.warn(message);\n } else {\n console.warn(`[engine] ${message}`);\n }\n }\n\n private isTestableTriggerNode(node: TriggerNode): node is TestableTriggerNode<TriggerNodeConfig> {\n return typeof (node as Partial<TestableTriggerNode<TriggerNodeConfig>>).getTestItems === \"function\";\n }\n}\n","import type { RunId, RunResult, WebhookRunResult } from \"../../types\";\n\nexport class EngineWaiters {\n private readonly completionWaiters = new Map<RunId, Array<(result: RunResult) => void>>();\n private readonly webhookResponseWaiters = new Map<RunId, Array<(result: WebhookRunResult) => void>>();\n\n waitForCompletion(runId: RunId): Promise<RunResult> {\n return new Promise((resolve) => {\n const list = this.completionWaiters.get(runId) ?? [];\n list.push(resolve);\n this.completionWaiters.set(runId, list);\n });\n }\n\n waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult> {\n return new Promise((resolve) => {\n const list = this.webhookResponseWaiters.get(runId) ?? [];\n list.push(resolve);\n this.webhookResponseWaiters.set(runId, list);\n });\n }\n\n resolveRunCompletion(result: RunResult): void {\n if (result.status !== \"completed\" && result.status !== \"failed\") return;\n const list = this.completionWaiters.get(result.runId);\n if (!list || list.length === 0) return;\n this.completionWaiters.delete(result.runId);\n for (const r of list) r(result);\n }\n\n resolveWebhookResponse(result: WebhookRunResult): void {\n const list = this.webhookResponseWaiters.get(result.runId);\n if (!list || list.length === 0) return;\n this.webhookResponseWaiters.delete(result.runId);\n for (const resolve of list) resolve(result);\n }\n}\n","import type { EngineDeps } from \"../../types\";\n\nimport { MissingRuntimeNodeDefinitionFactory } from \"../materialization/MissingRuntimeNodeDefinitionFactory\";\nimport { PersistedWorkflowConfigHydrator } from \"../materialization/PersistedWorkflowConfigHydrator\";\nimport { PersistedWorkflowResolver } from \"../materialization/PersistedWorkflowResolver\";\nimport { PersistedWorkflowSnapshotFactory } from \"../materialization/PersistedWorkflowSnapshotFactory\";\nimport { ActivationEnqueueService } from \"../execution/ActivationEnqueueService\";\nimport { CurrentStateRunStarter } from \"../execution/CurrentStateRunStarter\";\nimport { NodeActivationRequestComposer } from \"../execution/NodeActivationRequestComposer\";\nimport { PersistedRunStateTerminalBuilder } from \"../execution/PersistedRunStateTerminalBuilder\";\nimport { RunContinuationService } from \"../execution/RunContinuationService\";\nimport { RunStateSemantics } from \"../execution/RunStateSemantics\";\nimport { WorkflowRunExecutionContextFactory } from \"../execution/WorkflowRunExecutionContextFactory\";\nimport { WorkflowRunStarter } from \"../execution/WorkflowRunStarter\";\nimport { RunTerminalPersistenceCoordinator } from \"../policies/RunTerminalPersistenceCoordinator\";\nimport { WorkflowPolicyErrorServices } from \"../policies/WorkflowPolicyErrorServices\";\nimport { WorkflowStoragePolicyEvaluator } from \"../policies/WorkflowStoragePolicyEvaluator\";\nimport { CredentialResolverFactory } from \"../credentials/CredentialResolverFactory\";\nimport { NodeEventPublisher } from \"../../events/NodeEventPublisher\";\nimport { EngineExecutionLimitsPolicy } from \"../policies/EngineExecutionLimitsPolicy\";\nimport { EngineWorkflowPlanningFactory } from \"../planning/EngineWorkflowPlanningFactory\";\nimport { DirectedCycleDetector } from \"../planning/DirectedCycleDetector\";\nimport { NodeExecutionStatePublisherFactory } from \"../state/NodeExecutionStatePublisherFactory\";\nimport { TriggerRuntimeService } from \"../triggers/TriggerRuntimeService\";\nimport { EngineWaiters } from \"../waiters/EngineWaiters\";\n\nimport { Engine } from \"./Engine\";\n\n/**\n * {@link EngineDeps} plus optional overrides for persisted-workflow materialization (`engine/materialization`).\n * Overrides keep default construction in this factory while allowing tests or advanced wiring to inject instances.\n */\nexport type EngineCompositionDeps = EngineDeps & {\n persistedWorkflowConfigHydrator?: PersistedWorkflowConfigHydrator;\n missingRuntimeNodeDefinitionFactory?: MissingRuntimeNodeDefinitionFactory;\n /** When set, used for {@link WorkflowRunStarter}, {@link CurrentStateRunStarter}, and trigger/continuation fallbacks. */\n executionLimitsPolicy?: EngineExecutionLimitsPolicy;\n};\n\n/**\n * Composes the {@link Engine} graph from {@link EngineCompositionDeps}. Production wiring usually goes through\n * {@link import(\"../runtime/EngineRuntimeRegistrar\").EngineRuntimeRegistrar}; this factory remains for tests and custom composition.\n * Exported from `@codemation/core/bootstrap` (not the main `@codemation/core` barrel).\n */\nexport class EngineFactory {\n create(deps: EngineCompositionDeps): Engine {\n const waiters = new EngineWaiters();\n const credentialResolverFactory = new CredentialResolverFactory(deps.credentialSessions);\n const nodeEventPublisher = new NodeEventPublisher(deps.eventBus);\n const nodeStatePublisherFactory = new NodeExecutionStatePublisherFactory(deps.runStore, nodeEventPublisher);\n const planningFactory = new EngineWorkflowPlanningFactory(\n deps.workflowNodeInstanceFactory,\n new DirectedCycleDetector(),\n );\n const executionLimitsPolicy = deps.executionLimitsPolicy ?? new EngineExecutionLimitsPolicy();\n const workflowSnapshotFactory = new PersistedWorkflowSnapshotFactory(deps.tokenRegistry);\n const persistedWorkflowConfigHydrator =\n deps.persistedWorkflowConfigHydrator ?? new PersistedWorkflowConfigHydrator(deps.tokenRegistry);\n const missingRuntimeNodeDefinitionFactory =\n deps.missingRuntimeNodeDefinitionFactory ?? new MissingRuntimeNodeDefinitionFactory();\n const workflowSnapshotResolver = new PersistedWorkflowResolver(\n deps.workflowRepository,\n deps.tokenRegistry,\n persistedWorkflowConfigHydrator,\n missingRuntimeNodeDefinitionFactory,\n );\n\n const semantics = new RunStateSemantics();\n const activationEnqueueService = new ActivationEnqueueService(\n deps.activationScheduler,\n deps.runStore,\n nodeEventPublisher,\n );\n const runExecutionContextFactory = new WorkflowRunExecutionContextFactory(\n deps.executionContextFactory,\n credentialResolverFactory,\n );\n const nodeActivationRequestComposer = new NodeActivationRequestComposer(\n deps.activationIdFactory,\n credentialResolverFactory,\n );\n const persistedRunStateTerminalBuilder = new PersistedRunStateTerminalBuilder();\n const storagePolicyEvaluator = new WorkflowStoragePolicyEvaluator(deps.nodeResolver);\n const terminalPersistence = new RunTerminalPersistenceCoordinator(deps.runStore, storagePolicyEvaluator);\n const policyErrorServices = new WorkflowPolicyErrorServices(deps.nodeResolver);\n\n const workflowRunStarter = new WorkflowRunStarter(\n deps.runIdFactory,\n deps.runStore,\n deps.runDataFactory,\n workflowSnapshotFactory,\n planningFactory,\n nodeStatePublisherFactory,\n runExecutionContextFactory,\n nodeActivationRequestComposer,\n activationEnqueueService,\n waiters,\n deps.workflowPolicyRuntimeDefaults,\n executionLimitsPolicy,\n );\n const currentStateRunStarter = new CurrentStateRunStarter(\n deps.runIdFactory,\n deps.runStore,\n deps.runDataFactory,\n workflowSnapshotFactory,\n planningFactory,\n nodeStatePublisherFactory,\n runExecutionContextFactory,\n nodeActivationRequestComposer,\n activationEnqueueService,\n semantics,\n waiters,\n deps.workflowPolicyRuntimeDefaults,\n executionLimitsPolicy,\n );\n const runContinuationService = new RunContinuationService(\n deps.activationIdFactory,\n deps.runStore,\n deps.runDataFactory,\n runExecutionContextFactory,\n workflowSnapshotResolver,\n planningFactory,\n nodeStatePublisherFactory,\n credentialResolverFactory,\n nodeActivationRequestComposer,\n persistedRunStateTerminalBuilder,\n activationEnqueueService,\n nodeEventPublisher,\n semantics,\n waiters,\n policyErrorServices,\n terminalPersistence,\n executionLimitsPolicy,\n );\n\n const triggerRuntime = new TriggerRuntimeService(\n deps.workflowRepository,\n deps.workflowActivationPolicy,\n deps.runIdFactory,\n deps.runDataFactory,\n deps.executionContextFactory,\n credentialResolverFactory,\n nodeStatePublisherFactory,\n deps.nodeResolver,\n deps.triggerSetupStateStore,\n {\n emit: async (workflow, triggerNodeId, items) => {\n await workflowRunStarter.runWorkflow(workflow, triggerNodeId, items, undefined);\n },\n },\n executionLimitsPolicy,\n deps.triggerRuntimeDiagnostics,\n );\n\n const engine = new Engine({\n workflowCatalog: deps.workflowCatalog,\n tokenRegistry: deps.tokenRegistry,\n webhookTriggerMatcher: deps.webhookTriggerMatcher,\n workflowSnapshotResolver,\n triggerRuntime,\n workflowRunStarter,\n currentStateRunStarter,\n runContinuationService,\n });\n\n deps.activationScheduler.setContinuation?.(engine);\n return engine;\n }\n}\n"],"mappings":"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"}