@codemation/core 0.0.5 → 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 (215) hide show
  1. package/dist/{InMemoryLiveWorkflowRepository-DL7LmC9S.d.ts → InMemoryLiveWorkflowRepository-DxoualoC.d.ts} +6 -2
  2. package/dist/{InMemoryLiveWorkflowRepository-D6eiiXxF.d.cts → InMemoryLiveWorkflowRepository-orY1VsWG.d.cts} +6 -2
  3. package/dist/{RunIntentService-NKobsfMQ.d.cts → RunIntentService-ByuUYsAL.d.cts} +8 -3
  4. package/dist/{RunIntentService-BFVbsOcg.js → RunIntentService-CYnn140t.js} +9 -4
  5. package/dist/RunIntentService-CYnn140t.js.map +1 -0
  6. package/dist/{RunIntentService-2ivFmNQh.cjs → RunIntentService-DlQH5eZ2.cjs} +9 -4
  7. package/dist/RunIntentService-DlQH5eZ2.cjs.map +1 -0
  8. package/dist/{WorkflowSnapshotCodec-DTdWkoW_.d.cts → WorkflowSnapshotCodec-DSEzKyt3.d.cts} +2 -2
  9. package/dist/bootstrap/index.cjs +133 -4
  10. package/dist/bootstrap/index.cjs.map +1 -1
  11. package/dist/bootstrap/index.d.cts +4 -3
  12. package/dist/bootstrap/index.d.ts +3 -2
  13. package/dist/bootstrap/index.js +133 -4
  14. package/dist/bootstrap/index.js.map +1 -1
  15. package/dist/{index-9g6Pfe9Z.d.ts → index-CTjfVHJh.d.ts} +8 -3
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.d.cts +3 -3
  18. package/dist/index.d.ts +3 -3
  19. package/dist/index.js +1 -1
  20. package/dist/testing.d.cts +2 -2
  21. package/dist/testing.d.ts +1 -1
  22. package/package.json +6 -1
  23. package/src/bootstrap/runtime/EngineRuntimeRegistrar.ts +10 -2
  24. package/src/contracts/runtimeTypes.ts +5 -0
  25. package/src/execution/NodeActivationRequestComposer.ts +15 -4
  26. package/src/orchestration/Engine.ts +12 -1
  27. package/src/orchestration/NodeExecutionRequestHandlerService.ts +179 -0
  28. package/src/runtime/EngineFactory.ts +13 -0
  29. package/dist/EngineExecutionLimitsPolicy-8MEFIYx1.d.cts +0 -160
  30. package/dist/EngineExecutionLimitsPolicy-BWAXW9D6.d.cts +0 -160
  31. package/dist/EngineExecutionLimitsPolicy-Bp8PS1Ss.d.cts +0 -159
  32. package/dist/EngineExecutionLimitsPolicy-CLxcN-D2.d.ts +0 -159
  33. package/dist/EngineExecutionLimitsPolicy-DZXuix51.d.ts +0 -160
  34. package/dist/EngineExecutionLimitsPolicy-Gfz6ngFd.d.ts +0 -160
  35. package/dist/EngineFactory-CBnntY3J.cjs +0 -3152
  36. package/dist/EngineFactory-CBnntY3J.cjs.map +0 -1
  37. package/dist/EngineFactory-Cwn3R2YA.js +0 -3087
  38. package/dist/EngineFactory-Cwn3R2YA.js.map +0 -1
  39. package/dist/EngineFactory-DWCnNocp.js +0 -3063
  40. package/dist/EngineFactory-DWCnNocp.js.map +0 -1
  41. package/dist/EngineFactory-DhPFou4p.cjs +0 -3188
  42. package/dist/EngineFactory-DhPFou4p.cjs.map +0 -1
  43. package/dist/EngineFactory-l_9xmBtv.cjs +0 -3190
  44. package/dist/EngineFactory-l_9xmBtv.cjs.map +0 -1
  45. package/dist/EngineFactory-w-aOWuqh.js +0 -3089
  46. package/dist/EngineFactory-w-aOWuqh.js.map +0 -1
  47. package/dist/InMemoryLiveWorkflowRepository-1J9MHN_I.js +0 -18
  48. package/dist/InMemoryLiveWorkflowRepository-1J9MHN_I.js.map +0 -1
  49. package/dist/InMemoryLiveWorkflowRepository-CULNqv96.d.ts +0 -1300
  50. package/dist/InMemoryLiveWorkflowRepository-D7l8cjdZ.d.cts +0 -1130
  51. package/dist/InMemoryLiveWorkflowRepository-jnv-OnOP.d.ts +0 -1300
  52. package/dist/InMemoryLiveWorkflowRepository-xny1_Z6i.cjs +0 -24
  53. package/dist/InMemoryLiveWorkflowRepository-xny1_Z6i.cjs.map +0 -1
  54. package/dist/InMemoryLiveWorkflowRepository-xr7b4kvi.d.ts +0 -1338
  55. package/dist/InMemoryWorkflowCatalog-BIdFpwbK.d.ts +0 -1205
  56. package/dist/InMemoryWorkflowCatalog-BW00_3N3.d.cts +0 -12
  57. package/dist/InMemoryWorkflowCatalog-BiYHGoPw.cjs +0 -24
  58. package/dist/InMemoryWorkflowCatalog-BiYHGoPw.cjs.map +0 -1
  59. package/dist/InMemoryWorkflowCatalog-BrG0ApMO.d.cts +0 -1115
  60. package/dist/InMemoryWorkflowCatalog-BzrAr--Y.js +0 -139
  61. package/dist/InMemoryWorkflowCatalog-BzrAr--Y.js.map +0 -1
  62. package/dist/InMemoryWorkflowCatalog-C-EJlJ7y.d.cts +0 -1120
  63. package/dist/InMemoryWorkflowCatalog-C4482bpw.cjs +0 -24
  64. package/dist/InMemoryWorkflowCatalog-C4482bpw.cjs.map +0 -1
  65. package/dist/InMemoryWorkflowCatalog-CZ0kZpOv.d.ts +0 -1289
  66. package/dist/InMemoryWorkflowCatalog-C_ACeLyW.d.cts +0 -1119
  67. package/dist/InMemoryWorkflowCatalog-CiHWIu5E.d.cts +0 -12
  68. package/dist/InMemoryWorkflowCatalog-CkH7gkya.js +0 -18
  69. package/dist/InMemoryWorkflowCatalog-CkH7gkya.js.map +0 -1
  70. package/dist/InMemoryWorkflowCatalog-CnpZVJM9.d.ts +0 -1205
  71. package/dist/InMemoryWorkflowCatalog-Cu68S8YR.js +0 -18
  72. package/dist/InMemoryWorkflowCatalog-Cu68S8YR.js.map +0 -1
  73. package/dist/InMemoryWorkflowCatalog-D2w9nMj2.cjs +0 -151
  74. package/dist/InMemoryWorkflowCatalog-D2w9nMj2.cjs.map +0 -1
  75. package/dist/InMemoryWorkflowCatalog-D5eMxEf7.js +0 -18
  76. package/dist/InMemoryWorkflowCatalog-D5eMxEf7.js.map +0 -1
  77. package/dist/InMemoryWorkflowCatalog-D5nCp2yZ.d.ts +0 -1267
  78. package/dist/InMemoryWorkflowCatalog-DIq0bjqN.d.ts +0 -12
  79. package/dist/InMemoryWorkflowCatalog-DLgaEaw_.d.ts +0 -1288
  80. package/dist/InMemoryWorkflowCatalog-DNBFdK-x.d.cts +0 -1120
  81. package/dist/InMemoryWorkflowCatalog-DQBkCzb7.cjs +0 -24
  82. package/dist/InMemoryWorkflowCatalog-DQBkCzb7.cjs.map +0 -1
  83. package/dist/InMemoryWorkflowCatalog-DS4-eX6i.d.cts +0 -1118
  84. package/dist/InMemoryWorkflowCatalog-DdVfy8MY.d.ts +0 -12
  85. package/dist/InMemoryWorkflowCatalog-DeVZu3g8.d.ts +0 -12
  86. package/dist/InMemoryWorkflowCatalog-GxkQjvt5.d.ts +0 -1200
  87. package/dist/InMemoryWorkflowCatalog-qaVRn1Lc.d.cts +0 -1115
  88. package/dist/InMemoryWorkflowCatalog-z1aIT4TC.d.cts +0 -12
  89. package/dist/InMemoryWorkflowRegistry-BBuOovLL.d.ts +0 -1007
  90. package/dist/InMemoryWorkflowRegistry-BIFnSl3k.d.ts +0 -1201
  91. package/dist/InMemoryWorkflowRegistry-BnGilthz.d.ts +0 -1137
  92. package/dist/InMemoryWorkflowRegistry-CEp5I8No.d.ts +0 -1146
  93. package/dist/InMemoryWorkflowRegistry-CHyMB9jW.d.cts +0 -976
  94. package/dist/InMemoryWorkflowRegistry-CUN7K86m.d.cts +0 -1061
  95. package/dist/InMemoryWorkflowRegistry-CVfHyELh.d.cts +0 -971
  96. package/dist/InMemoryWorkflowRegistry-CXXJrwAr.d.cts +0 -1052
  97. package/dist/InMemoryWorkflowRegistry-DDGfPTJy.d.ts +0 -1013
  98. package/dist/InMemoryWorkflowRegistry-DnYSOoT5.d.ts +0 -1120
  99. package/dist/InMemoryWorkflowRegistry-Dp5GiFF2.d.cts +0 -1035
  100. package/dist/InMemoryWorkflowRegistry-DypDBeOw.d.cts +0 -1116
  101. package/dist/InMemoryWorkflowRegistry-SzwJCAxT.d.ts +0 -1012
  102. package/dist/InMemoryWorkflowRegistry-jupvqyGc.d.cts +0 -977
  103. package/dist/InMemoryWorkflowRegistry-rAdKVWYT.d.ts +0 -1117
  104. package/dist/InProcessRetryRunner-BBNPkXjy.d.cts +0 -292
  105. package/dist/PersistedWorkflowSnapshotFactory-7RkOL3Kg.d.ts +0 -14
  106. package/dist/PersistedWorkflowSnapshotFactory-BmANa46W.cjs +0 -141
  107. package/dist/PersistedWorkflowSnapshotFactory-BmANa46W.cjs.map +0 -1
  108. package/dist/PersistedWorkflowSnapshotFactory-Bwb_etSt.js +0 -118
  109. package/dist/PersistedWorkflowSnapshotFactory-Bwb_etSt.js.map +0 -1
  110. package/dist/PersistedWorkflowSnapshotFactory-CRkKGNV6.js +0 -123
  111. package/dist/PersistedWorkflowSnapshotFactory-CRkKGNV6.js.map +0 -1
  112. package/dist/PersistedWorkflowSnapshotFactory-CZolnGy5.js +0 -101
  113. package/dist/PersistedWorkflowSnapshotFactory-CZolnGy5.js.map +0 -1
  114. package/dist/PersistedWorkflowSnapshotFactory-Ca_oysOv.cjs +0 -131
  115. package/dist/PersistedWorkflowSnapshotFactory-Ca_oysOv.cjs.map +0 -1
  116. package/dist/PersistedWorkflowSnapshotFactory-CqIcShnX.js +0 -103
  117. package/dist/PersistedWorkflowSnapshotFactory-CqIcShnX.js.map +0 -1
  118. package/dist/PersistedWorkflowSnapshotFactory-D-tBk4_G.js +0 -119
  119. package/dist/PersistedWorkflowSnapshotFactory-D-tBk4_G.js.map +0 -1
  120. package/dist/PersistedWorkflowSnapshotFactory-D4cXl2e2.cjs +0 -131
  121. package/dist/PersistedWorkflowSnapshotFactory-D4cXl2e2.cjs.map +0 -1
  122. package/dist/PersistedWorkflowSnapshotFactory-DINoP12r.cjs +0 -131
  123. package/dist/PersistedWorkflowSnapshotFactory-DINoP12r.cjs.map +0 -1
  124. package/dist/PersistedWorkflowSnapshotFactory-DJAwSuHU.js +0 -103
  125. package/dist/PersistedWorkflowSnapshotFactory-DJAwSuHU.js.map +0 -1
  126. package/dist/PersistedWorkflowSnapshotFactory-DSUjVCcf.cjs +0 -131
  127. package/dist/PersistedWorkflowSnapshotFactory-DSUjVCcf.cjs.map +0 -1
  128. package/dist/PersistedWorkflowSnapshotFactory-DdHuhkDb.cjs +0 -107
  129. package/dist/PersistedWorkflowSnapshotFactory-DdHuhkDb.cjs.map +0 -1
  130. package/dist/PersistedWorkflowSnapshotFactory-Dqc6NHis.js +0 -119
  131. package/dist/PersistedWorkflowSnapshotFactory-Dqc6NHis.js.map +0 -1
  132. package/dist/PersistedWorkflowSnapshotFactory-Dxa2dSrw.cjs +0 -130
  133. package/dist/PersistedWorkflowSnapshotFactory-Dxa2dSrw.cjs.map +0 -1
  134. package/dist/PersistedWorkflowSnapshotFactory-Ep79Ah1G.js +0 -123
  135. package/dist/PersistedWorkflowSnapshotFactory-Ep79Ah1G.js.map +0 -1
  136. package/dist/PersistedWorkflowSnapshotFactory-GyLfRuiJ.js +0 -119
  137. package/dist/PersistedWorkflowSnapshotFactory-GyLfRuiJ.js.map +0 -1
  138. package/dist/PersistedWorkflowSnapshotFactory-HTpBsBzn.js +0 -102
  139. package/dist/PersistedWorkflowSnapshotFactory-HTpBsBzn.js.map +0 -1
  140. package/dist/PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs +0 -141
  141. package/dist/PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs.map +0 -1
  142. package/dist/PersistedWorkflowSnapshotFactory-PZCpo2ZS.js +0 -119
  143. package/dist/PersistedWorkflowSnapshotFactory-PZCpo2ZS.js.map +0 -1
  144. package/dist/PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs +0 -109
  145. package/dist/PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs.map +0 -1
  146. package/dist/PersistedWorkflowSnapshotFactory-Y8kCrhcy.cjs +0 -109
  147. package/dist/PersistedWorkflowSnapshotFactory-Y8kCrhcy.cjs.map +0 -1
  148. package/dist/PersistedWorkflowSnapshotFactory-Z_nB-fmB.cjs +0 -108
  149. package/dist/PersistedWorkflowSnapshotFactory-Z_nB-fmB.cjs.map +0 -1
  150. package/dist/RunIntentService-1EE6N8ZL.cjs +0 -963
  151. package/dist/RunIntentService-1EE6N8ZL.cjs.map +0 -1
  152. package/dist/RunIntentService-2ivFmNQh.cjs.map +0 -1
  153. package/dist/RunIntentService-B0sUL5q-.js +0 -761
  154. package/dist/RunIntentService-B0sUL5q-.js.map +0 -1
  155. package/dist/RunIntentService-BFVbsOcg.js.map +0 -1
  156. package/dist/RunIntentService-BsBOwpVN.cjs +0 -1051
  157. package/dist/RunIntentService-BsBOwpVN.cjs.map +0 -1
  158. package/dist/RunIntentService-CSk3ETyn.js +0 -858
  159. package/dist/RunIntentService-CSk3ETyn.js.map +0 -1
  160. package/dist/RunIntentService-Ckn3u3tA.d.cts +0 -326
  161. package/dist/RunIntentService-DEo6GTTo.d.cts +0 -289
  162. package/dist/RunIntentService-DKrGtL0B.js +0 -782
  163. package/dist/RunIntentService-DKrGtL0B.js.map +0 -1
  164. package/dist/RunIntentService-DNOJc1R7.cjs +0 -942
  165. package/dist/RunIntentService-DNOJc1R7.cjs.map +0 -1
  166. package/dist/RunIntentService-Dq3pV53j.d.cts +0 -289
  167. package/dist/WorkflowSnapshotCodec-C3fuuS_R.d.cts +0 -22
  168. package/dist/WorkflowSnapshotCodec-CUudUo6f.js +0 -123
  169. package/dist/WorkflowSnapshotCodec-CUudUo6f.js.map +0 -1
  170. package/dist/WorkflowSnapshotCodec-CuCPQZTc.cjs +0 -129
  171. package/dist/WorkflowSnapshotCodec-CuCPQZTc.cjs.map +0 -1
  172. package/dist/WorkflowSnapshotCodec-DLiXQNvV.d.cts +0 -22
  173. package/dist/WorkflowSnapshotCodec-DNtdrZ7l.d.cts +0 -22
  174. package/dist/credentialTypes-B5h3dI7r.d.cts +0 -1107
  175. package/dist/credentialTypes-B9okPCVo.d.cts +0 -963
  176. package/dist/credentialTypes-BFL70rgZ.d.cts +0 -964
  177. package/dist/credentialTypes-BGkh1O07.d.ts +0 -1010
  178. package/dist/credentialTypes-BNLi4Q7u.d.ts +0 -1030
  179. package/dist/credentialTypes-CeSoZGj3.d.cts +0 -994
  180. package/dist/credentialTypes-CpHc32Ig.d.cts +0 -984
  181. package/dist/credentialTypes-D0m7MQQl.d.cts +0 -1107
  182. package/dist/credentialTypes-D4nL2sUd.d.ts +0 -1000
  183. package/dist/credentialTypes-DBYK2Qbu.d.ts +0 -999
  184. package/dist/credentialTypes-DMJVy0r1.d.ts +0 -1000
  185. package/dist/credentialTypes-DhUAjYQp.d.ts +0 -1020
  186. package/dist/credentialTypes-gGITj5KL.d.cts +0 -964
  187. package/dist/credentialTypes-r3KVBJBE.d.cts +0 -974
  188. package/dist/diTokens-ClO27tjK.cjs +0 -34
  189. package/dist/diTokens-ClO27tjK.cjs.map +0 -1
  190. package/dist/diTokens-CoHBkwG6.js +0 -28
  191. package/dist/diTokens-CoHBkwG6.js.map +0 -1
  192. package/dist/index-6Doxmfnd.d.ts +0 -857
  193. package/dist/index-AZ72Ej-K.d.ts +0 -920
  194. package/dist/index-BEk9V-q-.d.ts +0 -667
  195. package/dist/index-Bjt7_7oS.d.ts +0 -1192
  196. package/dist/index-CFGxsYXy.d.ts +0 -708
  197. package/dist/index-C_u8xFgn.d.ts +0 -690
  198. package/dist/index-CpbfsvOJ.d.ts +0 -1192
  199. package/dist/index-CsReNJN_.d.ts +0 -859
  200. package/dist/index-D5iNnXaW.d.ts +0 -667
  201. package/dist/index-DD_Eft1q.d.ts +0 -708
  202. package/dist/index-DiSYUe0G.d.ts +0 -1192
  203. package/dist/index-gIcH60sp.d.ts +0 -674
  204. package/dist/runtime-BIvd-1JA.cjs +0 -4112
  205. package/dist/runtime-BIvd-1JA.cjs.map +0 -1
  206. package/dist/runtime-D3eWKSQK.cjs +0 -3986
  207. package/dist/runtime-D3eWKSQK.cjs.map +0 -1
  208. package/dist/runtime-Dvp4xAjg.js +0 -3799
  209. package/dist/runtime-Dvp4xAjg.js.map +0 -1
  210. package/dist/runtime-vc76SSAa.js +0 -3685
  211. package/dist/runtime-vc76SSAa.js.map +0 -1
  212. package/dist/runtimeTypes-BK0b8SaG.d.cts +0 -884
  213. package/dist/runtimeTypes-CoYZkYQq.d.cts +0 -851
  214. package/dist/runtimeTypes-D-Pm0Uas.d.cts +0 -849
  215. package/dist/types-Cb5UK7Y6.d.ts +0 -857
@@ -1 +0,0 @@
1
- {"version":3,"file":"RunIntentService-DNOJc1R7.cjs","names":["eventBus: RunEventBus | undefined","metadata: PersistedRuntimeTypeMetadata","storage: BinaryStorage","workflowId: WorkflowId","runId: RunId","nodeId: NodeId","activationId: NodeActivationId","now: () => Date","storage: BinaryStorage","workflowId: WorkflowId","runId: RunId","now: () => Date","sleeper: AsyncSleeper","lastError: unknown","credentialSessions: CredentialSessionService","binaryStorage: BinaryStorage","currentDate: () => Date","ENGINE_EXECUTION_LIMITS_DEFAULTS: EngineExecutionLimitsPolicyConfig","config: EngineExecutionLimitsPolicyConfig","ReadableStream","chunks: Uint8Array[]","bytes: Uint8Array","ReadableStream","out: Record<NodeId, NodeOutputs>","max: string | undefined","engine: Engine","workflowRepository: WorkflowRepository"],"sources":["../src/workflow/definition/ConnectionNodeIdFactory.ts","../src/workflow/definition/WorkflowExecutableNodeClassifier.ts","../src/workflow/definition/WorkflowExecutableNodeClassifierFactory.ts","../src/diTokens/index.ts","../src/events/NodeEventPublisher.ts","../src/runtime-types/persistedRuntimeTypeModelRegistry.ts","../src/runtime-types/PersistedRuntimeTypeNameResolver.ts","../src/runtime-types/StackTraceCallSitePathResolver.ts","../src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts","../src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts","../src/runtime-types/runtimeTypeDecorators.types.ts","../src/binaries/DefaultNodeBinaryAttachmentServiceFactory.ts","../src/binaries/UnavailableBinaryStorage.ts","../src/binaries/DefaultExecutionBinaryServiceFactory.ts","../src/execution/DefaultAsyncSleeper.ts","../src/execution/InProcessRetryRunner.ts","../src/executionContext/CredentialResolverFactory.ts","../src/executionContext/DefaultExecutionContextFactory.ts","../src/policies/EngineExecutionLimitsPolicy.ts","../src/runStorage/BinaryBodyBufferReader.ts","../src/runStorage/BinaryBodyReadableStreamFactory.ts","../src/runStorage/InMemoryBinaryStorageRegistry.ts","../src/runStorage/InMemoryRunData.ts","../src/runStorage/InMemoryRunDataFactory.ts","../src/contracts/runFinishedAtFactory.ts","../src/runtime/RunIntentService.ts"],"sourcesContent":["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 { 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 { TypeToken } from \"../di\";\nimport type { RunEventBus } from \"../events/runEvents\";\nimport type { EngineExecutionLimitsPolicy } from \"../policies/EngineExecutionLimitsPolicy\";\nimport type {\n ActivationIdFactory,\n BinaryStorage,\n CredentialSessionService,\n CredentialTypeRegistry,\n ExecutionContextFactory,\n NodeActivationScheduler,\n NodeResolver,\n PersistedWorkflowTokenRegistryLike,\n RunDataFactory,\n RunIdFactory,\n RunStateStore,\n TriggerSetupStateStore,\n WorkflowActivationPolicy,\n WorkflowCatalog,\n WorkflowRepository,\n WorkflowRunnerResolver,\n WorkflowRunnerService,\n} from \"../types\";\n\nexport const CoreTokens = {\n PersistedWorkflowTokenRegistry: Symbol.for(\n \"codemation.core.PersistedWorkflowTokenRegistry\",\n ) as TypeToken<PersistedWorkflowTokenRegistryLike>,\n CredentialSessionService: Symbol.for(\n \"codemation.core.CredentialSessionService\",\n ) as TypeToken<CredentialSessionService>,\n CredentialTypeRegistry: Symbol.for(\"codemation.core.CredentialTypeRegistry\") as TypeToken<CredentialTypeRegistry>,\n WorkflowRunnerService: Symbol.for(\"codemation.core.WorkflowRunnerService\") as TypeToken<WorkflowRunnerService>,\n WorkflowRunnerResolver: Symbol.for(\"codemation.core.WorkflowRunnerResolver\") as TypeToken<WorkflowRunnerResolver>,\n WorkflowCatalog: Symbol.for(\"codemation.core.WorkflowCatalog\") as TypeToken<WorkflowCatalog>,\n WorkflowRepository: Symbol.for(\"codemation.core.WorkflowRepository\") as TypeToken<WorkflowRepository>,\n ServiceContainer: Symbol.for(\"codemation.core.ServiceContainer\") as TypeToken<import(\"../di\").Container>,\n NodeResolver: Symbol.for(\"codemation.core.NodeResolver\") as TypeToken<NodeResolver>,\n RunIdFactory: Symbol.for(\"codemation.core.RunIdFactory\") as TypeToken<RunIdFactory>,\n ActivationIdFactory: Symbol.for(\"codemation.core.ActivationIdFactory\") as TypeToken<ActivationIdFactory>,\n RunStateStore: Symbol.for(\"codemation.core.RunStateStore\") as TypeToken<RunStateStore>,\n TriggerSetupStateStore: Symbol.for(\"codemation.core.TriggerSetupStateStore\") as TypeToken<TriggerSetupStateStore>,\n NodeActivationScheduler: Symbol.for(\"codemation.core.NodeActivationScheduler\") as TypeToken<NodeActivationScheduler>,\n RunDataFactory: Symbol.for(\"codemation.core.RunDataFactory\") as TypeToken<RunDataFactory>,\n ExecutionContextFactory: Symbol.for(\"codemation.core.ExecutionContextFactory\") as TypeToken<ExecutionContextFactory>,\n RunEventBus: Symbol.for(\"codemation.core.RunEventBus\") as TypeToken<RunEventBus>,\n BinaryStorage: Symbol.for(\"codemation.core.BinaryStorage\") as TypeToken<BinaryStorage>,\n WebhookBasePath: Symbol.for(\"codemation.core.WebhookBasePath\") as TypeToken<string>,\n /** Engine execution limits (defaults + optional host overrides). Consumers may bind a custom instance to override. */\n EngineExecutionLimitsPolicy: Symbol.for(\n \"codemation.core.EngineExecutionLimitsPolicy\",\n ) as TypeToken<EngineExecutionLimitsPolicy>,\n WorkflowActivationPolicy: Symbol.for(\n \"codemation.core.WorkflowActivationPolicy\",\n ) as TypeToken<WorkflowActivationPolicy>,\n} as const;\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","export const persistedRuntimeTypeMetadataKey = Symbol.for(\"codemation.core.persistedRuntimeTypeMetadata\");\n\nexport type DecoratedRuntimeType = Readonly<{ name?: string }> & object;\n\nexport type PersistedRuntimeTypeKind = \"node\" | \"tool\" | \"chatModel\";\n\nexport interface PersistedRuntimeTypeDecoratorOptions {\n readonly name?: string;\n readonly packageName?: string;\n readonly moduleUrl?: string;\n}\n\nexport interface PersistedRuntimeTypeMetadata {\n readonly persistedName: string;\n readonly kind: PersistedRuntimeTypeKind;\n readonly packageName: string;\n readonly sourceHint?: string;\n}\n\nexport class PersistedRuntimeTypeDecoratorDefaults {\n static readonly appPackageName = \"app\";\n\n static apply(options: PersistedRuntimeTypeDecoratorOptions): PersistedRuntimeTypeDecoratorOptions {\n return {\n ...options,\n packageName: options.packageName ?? this.appPackageName,\n };\n }\n}\n","import type { DecoratedRuntimeType } from \"./persistedRuntimeTypeModelRegistry\";\n\nexport class PersistedRuntimeTypeNameResolver {\n static resolve(target: DecoratedRuntimeType, override: string | undefined): string {\n const resolved = override ?? target.name;\n if (!resolved) {\n throw new Error(\n \"Persisted runtime token metadata requires a named class or an explicit decorator name override.\",\n );\n }\n return resolved;\n }\n}\n","export class StackTraceCallSitePathResolver {\n static resolve(decoratorFileUrl: string): string | undefined {\n const stack = new Error().stack ?? \"\";\n for (const line of stack.split(\"\\n\")) {\n const candidate = this.extractPath(line.trim());\n if (!candidate) {\n continue;\n }\n if (candidate === decoratorFileUrl || candidate.includes(\"runtimeTypeDecorators\")) {\n continue;\n }\n return candidate;\n }\n return undefined;\n }\n\n private static extractPath(line: string): string | undefined {\n const fileUrlMatch = line.match(/file:\\/\\/[^\\s)]+/);\n if (fileUrlMatch) return fileUrlMatch[0];\n const parenMatch = line.match(/\\((\\/[^)]+)\\)/);\n if (parenMatch) return parenMatch[1];\n const bareMatch = line.match(/at (\\/[^\\s]+)/);\n return bareMatch?.[1];\n }\n}\n","import {\n PersistedRuntimeTypeDecoratorDefaults,\n persistedRuntimeTypeMetadataKey,\n type DecoratedRuntimeType,\n type PersistedRuntimeTypeDecoratorOptions,\n type PersistedRuntimeTypeKind,\n type PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\nimport { PersistedRuntimeTypeNameResolver } from \"./PersistedRuntimeTypeNameResolver\";\nimport { StackTraceCallSitePathResolver } from \"./StackTraceCallSitePathResolver\";\n\nexport class PersistedRuntimeTypeMetadataStore {\n static define(\n target: DecoratedRuntimeType,\n kind: PersistedRuntimeTypeKind,\n options: PersistedRuntimeTypeDecoratorOptions,\n decoratorFileUrl: string,\n ): void {\n const normalizedOptions = PersistedRuntimeTypeDecoratorDefaults.apply(options);\n const metadata: PersistedRuntimeTypeMetadata = {\n persistedName: PersistedRuntimeTypeNameResolver.resolve(target, normalizedOptions.name),\n kind,\n packageName: normalizedOptions.packageName ?? PersistedRuntimeTypeDecoratorDefaults.appPackageName,\n sourceHint: normalizedOptions.moduleUrl ?? StackTraceCallSitePathResolver.resolve(decoratorFileUrl),\n };\n Object.defineProperty(target, persistedRuntimeTypeMetadataKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: metadata,\n });\n }\n\n static get(target: unknown): PersistedRuntimeTypeMetadata | undefined {\n if (!target || (typeof target !== \"function\" && typeof target !== \"object\")) {\n return undefined;\n }\n return (target as Record<PropertyKey, unknown>)[persistedRuntimeTypeMetadataKey] as\n | PersistedRuntimeTypeMetadata\n | undefined;\n }\n}\n","import { injectable } from \"../di\";\n\nimport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\nimport type {\n DecoratedRuntimeType,\n PersistedRuntimeTypeDecoratorOptions,\n PersistedRuntimeTypeKind,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nexport class InjectableRuntimeDecoratorComposer {\n static compose(\n kind: PersistedRuntimeTypeKind,\n options: PersistedRuntimeTypeDecoratorOptions,\n decoratorFileUrl: string,\n ): ClassDecorator {\n return (target) => {\n injectable()(target as never);\n PersistedRuntimeTypeMetadataStore.define(target as DecoratedRuntimeType, kind, options, decoratorFileUrl);\n };\n }\n}\n","import type {\n PersistedRuntimeTypeDecoratorOptions,\n PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nimport { InjectableRuntimeDecoratorComposer } from \"./InjectableRuntimeDecoratorComposerRegistry\";\nimport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\n\nexport type {\n PersistedRuntimeTypeDecoratorOptions,\n PersistedRuntimeTypeKind,\n PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nexport function getPersistedRuntimeTypeMetadata(target: unknown): PersistedRuntimeTypeMetadata | undefined {\n return PersistedRuntimeTypeMetadataStore.get(target);\n}\n\nexport function node(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n return InjectableRuntimeDecoratorComposer.compose(\"node\", options, import.meta.url);\n}\n\nexport function tool(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n return InjectableRuntimeDecoratorComposer.compose(\"tool\", options, import.meta.url);\n}\n\nexport function chatModel(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n return InjectableRuntimeDecoratorComposer.compose(\"chatModel\", options, import.meta.url);\n}\n\nexport { InjectableRuntimeDecoratorComposer } from \"./InjectableRuntimeDecoratorComposerRegistry\";\nexport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\nexport { PersistedRuntimeTypeNameResolver } from \"./PersistedRuntimeTypeNameResolver\";\nexport { StackTraceCallSitePathResolver } from \"./StackTraceCallSitePathResolver\";\n","import type {\n BinaryAttachment,\n BinaryPreviewKind,\n Item,\n NodeActivationId,\n NodeId,\n RunId,\n WorkflowId,\n} from \"../types\";\n\nimport type {\n BinaryAttachmentCreateRequest,\n BinaryStorage,\n BinaryStorageReadResult,\n NodeBinaryAttachmentService,\n} from \"../types\";\n\nexport class DefaultNodeBinaryAttachmentService implements NodeBinaryAttachmentService {\n constructor(\n private readonly storage: BinaryStorage,\n private readonly workflowId: WorkflowId,\n private readonly runId: RunId,\n private readonly nodeId: NodeId,\n private readonly activationId: NodeActivationId,\n private readonly now: () => Date,\n ) {}\n\n async attach(args: BinaryAttachmentCreateRequest): Promise<BinaryAttachment> {\n const attachmentId = this.createAttachmentId();\n const createdAt = this.now().toISOString();\n const storageKey = this.createStorageKey(args, attachmentId);\n const stored = await this.storage.write({\n storageKey,\n body: args.body,\n });\n return {\n id: attachmentId,\n storageKey: stored.storageKey,\n mimeType: args.mimeType,\n size: stored.size,\n storageDriver: this.storage.driverName,\n previewKind: args.previewKind ?? this.resolvePreviewKind(args.mimeType),\n createdAt,\n runId: this.runId,\n workflowId: this.workflowId,\n nodeId: this.nodeId,\n activationId: this.activationId,\n filename: args.filename,\n sha256: stored.sha256,\n };\n }\n\n withAttachment<TJson>(item: Item<TJson>, name: string, attachment: BinaryAttachment): Item<TJson> {\n return {\n ...item,\n binary: {\n ...(item.binary ?? {}),\n [name]: attachment,\n },\n };\n }\n\n forNode(args: { nodeId: NodeId; activationId: NodeActivationId }): NodeBinaryAttachmentService {\n return new DefaultNodeBinaryAttachmentService(\n this.storage,\n this.workflowId,\n this.runId,\n args.nodeId,\n args.activationId,\n this.now,\n );\n }\n\n async openReadStream(attachment: BinaryAttachment): Promise<BinaryStorageReadResult | undefined> {\n return await this.storage.openReadStream(attachment.storageKey);\n }\n\n private createAttachmentId(): string {\n return DefaultNodeBinaryAttachmentService.createAttachmentIdValue(`${this.activationId}-${this.now().getTime()}`);\n }\n\n private static createAttachmentIdValue(fallbackValue: string): string {\n const cryptoObject = globalThis.crypto;\n if (cryptoObject && typeof cryptoObject.randomUUID === \"function\") {\n return cryptoObject.randomUUID();\n }\n return fallbackValue;\n }\n\n private createStorageKey(args: BinaryAttachmentCreateRequest, attachmentId: string): string {\n const safeName = this.sanitizeSegment(args.name);\n const safeFilename = this.sanitizeFilename(args.filename);\n const filenameSuffix = safeFilename ? `-${safeFilename}` : \"\";\n return `${this.sanitizeSegment(this.workflowId)}/${this.sanitizeSegment(this.runId)}/${this.sanitizeSegment(this.nodeId)}/${this.sanitizeSegment(this.activationId)}/${attachmentId}-${safeName}${filenameSuffix}`;\n }\n\n private sanitizeSegment(value: string): string {\n const normalized = value.trim();\n if (!normalized) {\n return \"item\";\n }\n return normalized.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n }\n\n private sanitizeFilename(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n const normalized = value.trim().split(\"/\").at(-1)?.split(\"\\\\\").at(-1) ?? value.trim();\n if (!normalized) {\n return undefined;\n }\n return normalized.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n }\n\n private resolvePreviewKind(mimeType: string): BinaryPreviewKind {\n if (mimeType.startsWith(\"image/\")) {\n return \"image\";\n }\n if (mimeType.startsWith(\"audio/\")) {\n return \"audio\";\n }\n if (mimeType.startsWith(\"video/\")) {\n return \"video\";\n }\n return \"download\";\n }\n}\n","import type { BinaryStorage } from \"../types\";\n\nexport class UnavailableBinaryStorage implements BinaryStorage {\n readonly driverName = \"unavailable\";\n\n async write(): Promise<never> {\n throw new Error(\"Binary storage is not configured for this runtime.\");\n }\n\n async openReadStream(): Promise<undefined> {\n return undefined;\n }\n\n async stat(): Promise<{ exists: false }> {\n return { exists: false };\n }\n\n async delete(): Promise<void> {}\n}\n","import type { BinaryAttachment, NodeActivationId, NodeId, RunId, WorkflowId } from \"../types\";\n\nimport type {\n BinaryStorage,\n BinaryStorageReadResult,\n ExecutionBinaryService,\n NodeBinaryAttachmentService,\n} from \"../types\";\n\nimport { DefaultNodeBinaryAttachmentService } from \"./DefaultNodeBinaryAttachmentServiceFactory\";\n\nexport class DefaultExecutionBinaryService implements ExecutionBinaryService {\n constructor(\n private readonly storage: BinaryStorage,\n private readonly workflowId: WorkflowId,\n private readonly runId: RunId,\n private readonly now: () => Date,\n ) {}\n\n forNode(args: { nodeId: NodeId; activationId: NodeActivationId }): NodeBinaryAttachmentService {\n return new DefaultNodeBinaryAttachmentService(\n this.storage,\n this.workflowId,\n this.runId,\n args.nodeId,\n args.activationId,\n this.now,\n );\n }\n\n async openReadStream(attachment: BinaryAttachment): Promise<BinaryStorageReadResult | undefined> {\n return await this.storage.openReadStream(attachment.storageKey);\n }\n}\n\nexport { DefaultNodeBinaryAttachmentService } from \"./DefaultNodeBinaryAttachmentServiceFactory\";\nexport { UnavailableBinaryStorage } from \"./UnavailableBinaryStorage\";\n","import type { AsyncSleeper } from \"./asyncSleeper.types\";\n\nexport class DefaultAsyncSleeper implements AsyncSleeper {\n sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n }\n}\n","import type {\n ExponentialRetryPolicySpec,\n FixedRetryPolicySpec,\n RetryPolicySpec,\n} from \"../contracts/retryPolicySpec.types\";\nimport type { AsyncSleeper } from \"./asyncSleeper.types\";\n\nexport type { AsyncSleeper } from \"./asyncSleeper.types\";\n\ntype NormalizedPolicy =\n | { readonly kind: \"none\"; readonly maxAttempts: 1 }\n | { readonly kind: \"fixed\"; readonly maxAttempts: number; readonly delayMs: number }\n | {\n readonly kind: \"exponential\";\n readonly maxAttempts: number;\n readonly initialDelayMs: number;\n readonly multiplier: number;\n readonly maxDelayMs?: number;\n readonly jitter?: boolean;\n };\n\nexport class InProcessRetryRunner {\n constructor(private readonly sleeper: AsyncSleeper) {}\n\n async run<T>(policy: RetryPolicySpec | undefined, work: () => Promise<T>): Promise<T> {\n const spec = InProcessRetryRunner.normalizePolicy(policy);\n let lastError: unknown;\n for (let attempt = 1; attempt <= spec.maxAttempts; attempt++) {\n try {\n return await work();\n } catch (error) {\n lastError = error;\n if (attempt >= spec.maxAttempts) {\n break;\n }\n const delayMs = InProcessRetryRunner.delayAfterFailureMs(spec, attempt);\n await this.sleeper.sleep(delayMs);\n }\n }\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n }\n\n private static delayAfterFailureMs(spec: NormalizedPolicy, failedAttempt: number): number {\n if (spec.kind === \"none\") {\n return 0;\n }\n if (spec.kind === \"fixed\") {\n return spec.delayMs;\n }\n const exponent = failedAttempt - 1;\n let ms = spec.initialDelayMs * Math.pow(spec.multiplier, exponent);\n if (spec.jitter === true) {\n ms *= 1 + Math.random() * 0.2;\n }\n if (spec.maxDelayMs !== undefined && ms > spec.maxDelayMs) {\n ms = spec.maxDelayMs;\n }\n return Math.max(0, Math.floor(ms));\n }\n\n private static normalizePolicy(policy: RetryPolicySpec | undefined): NormalizedPolicy {\n if (policy === undefined) {\n return { kind: \"none\", maxAttempts: 1 };\n }\n if (typeof policy !== \"object\" || policy === null) {\n return { kind: \"none\", maxAttempts: 1 };\n }\n const kind = (policy as { kind?: unknown }).kind;\n if (kind === \"none\") {\n return { kind: \"none\", maxAttempts: 1 };\n }\n if (kind === \"fixed\") {\n const p = policy as FixedRetryPolicySpec;\n const maxAttempts = InProcessRetryRunner.assertPositiveInt(p.maxAttempts, \"fixed.maxAttempts\");\n const delayMs = InProcessRetryRunner.assertNonNegativeFinite(p.delayMs, \"fixed.delayMs\");\n return { kind: \"fixed\", maxAttempts, delayMs };\n }\n if (kind === \"exponential\") {\n const p = policy as ExponentialRetryPolicySpec;\n return {\n kind: \"exponential\",\n maxAttempts: InProcessRetryRunner.assertPositiveInt(p.maxAttempts, \"exponential.maxAttempts\"),\n initialDelayMs: InProcessRetryRunner.assertNonNegativeFinite(p.initialDelayMs, \"exponential.initialDelayMs\"),\n multiplier: InProcessRetryRunner.assertMultiplier(p.multiplier),\n maxDelayMs:\n p.maxDelayMs === undefined\n ? undefined\n : InProcessRetryRunner.assertNonNegativeFinite(p.maxDelayMs, \"exponential.maxDelayMs\"),\n jitter: p.jitter === true,\n };\n }\n return { kind: \"none\", maxAttempts: 1 };\n }\n\n private static assertPositiveInt(value: unknown, label: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1 || !Number.isInteger(value)) {\n throw new Error(`Retry policy ${label} must be a positive integer`);\n }\n return value;\n }\n\n private static assertNonNegativeFinite(value: unknown, label: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`Retry policy ${label} must be a non-negative finite number`);\n }\n return value;\n }\n\n private static assertMultiplier(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1) {\n throw new Error(`Retry policy exponential.multiplier must be >= 1`);\n }\n return value;\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 {\n BinaryStorage,\n ExecutionContext,\n ExecutionContextFactory,\n NodeExecutionStatePublisher,\n ParentExecutionRef,\n RunDataSnapshot,\n RunId,\n WorkflowId,\n} from \"../types\";\n\nimport {\n DefaultExecutionBinaryService,\n UnavailableBinaryStorage,\n} from \"../binaries/DefaultExecutionBinaryServiceFactory\";\n\nexport class DefaultExecutionContextFactory implements ExecutionContextFactory {\n constructor(\n private readonly binaryStorage: BinaryStorage = new UnavailableBinaryStorage(),\n private readonly currentDate: () => Date = () => new Date(),\n ) {}\n\n create(args: {\n runId: RunId;\n workflowId: WorkflowId;\n parent?: ParentExecutionRef;\n subworkflowDepth: number;\n engineMaxNodeActivations: number;\n engineMaxSubworkflowDepth: number;\n data: RunDataSnapshot;\n nodeState?: NodeExecutionStatePublisher;\n getCredential<TSession = unknown>(slotKey: string): Promise<TSession>;\n }): ExecutionContext {\n return {\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 now: this.currentDate,\n data: args.data,\n nodeState: args.nodeState,\n binary: new DefaultExecutionBinaryService(this.binaryStorage, args.workflowId, args.runId, this.currentDate),\n getCredential: args.getCredential,\n };\n }\n}\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","import { ReadableStream } from \"node:stream/web\";\n\nimport type { BinaryBody } from \"../types\";\n\nexport class BinaryBodyBufferReader {\n async read(body: BinaryBody): Promise<Uint8Array> {\n if (body instanceof Uint8Array) {\n return body;\n }\n if (body instanceof ArrayBuffer) {\n return new Uint8Array(body);\n }\n if (body instanceof ReadableStream) {\n return await this.readReadableStream(body);\n }\n return await this.readAsyncIterable(body);\n }\n\n private async readReadableStream(body: ReadableStream<Uint8Array>): Promise<Uint8Array> {\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let totalSize = 0;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) {\n break;\n }\n chunks.push(result.value);\n totalSize += result.value.byteLength;\n }\n } finally {\n reader.releaseLock();\n }\n return this.joinChunks(chunks, totalSize);\n }\n\n private async readAsyncIterable(body: AsyncIterable<Uint8Array>): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n let totalSize = 0;\n for await (const chunk of body) {\n chunks.push(chunk);\n totalSize += chunk.byteLength;\n }\n return this.joinChunks(chunks, totalSize);\n }\n\n private joinChunks(chunks: ReadonlyArray<Uint8Array>, totalSize: number): Uint8Array {\n const bytes = new Uint8Array(totalSize);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n }\n}\n","import { ReadableStream } from \"node:stream/web\";\n\nexport class BinaryBodyReadableStreamFactory {\n constructor(private readonly bytes: Uint8Array) {}\n\n create(): ReadableStream<Uint8Array> {\n const value = this.bytes;\n let consumed = false;\n return new ReadableStream<Uint8Array>({\n pull(controller) {\n if (consumed) {\n controller.close();\n return;\n }\n consumed = true;\n controller.enqueue(value);\n controller.close();\n },\n });\n }\n}\n","import { createHash } from \"node:crypto\";\n\nimport type {\n BinaryBody,\n BinaryStorage,\n BinaryStorageReadResult,\n BinaryStorageStatResult,\n BinaryStorageWriteResult,\n} from \"../types\";\n\nimport { BinaryBodyBufferReader } from \"./BinaryBodyBufferReader\";\nimport { BinaryBodyReadableStreamFactory } from \"./BinaryBodyReadableStreamFactory\";\n\nexport class InMemoryBinaryStorage implements BinaryStorage {\n readonly driverName = \"memory\";\n private readonly values = new Map<string, Uint8Array>();\n\n async write(args: { storageKey: string; body: BinaryBody }): Promise<BinaryStorageWriteResult> {\n const bytes = await new BinaryBodyBufferReader().read(args.body);\n this.values.set(args.storageKey, bytes);\n return {\n storageKey: args.storageKey,\n size: bytes.byteLength,\n sha256: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n };\n }\n\n async openReadStream(storageKey: string): Promise<BinaryStorageReadResult | undefined> {\n const bytes = this.values.get(storageKey);\n if (!bytes) {\n return undefined;\n }\n return {\n body: new BinaryBodyReadableStreamFactory(bytes).create(),\n size: bytes.byteLength,\n };\n }\n\n async stat(storageKey: string): Promise<BinaryStorageStatResult> {\n const bytes = this.values.get(storageKey);\n if (!bytes) {\n return { exists: false };\n }\n return { exists: true, size: bytes.byteLength };\n }\n\n async delete(storageKey: string): Promise<void> {\n this.values.delete(storageKey);\n }\n}\n\nexport { BinaryBodyBufferReader } from \"./BinaryBodyBufferReader\";\nexport { BinaryBodyReadableStreamFactory } from \"./BinaryBodyReadableStreamFactory\";\n","import type { Items, MutableRunData, NodeId, NodeOutputs, OutputPortKey } from \"../types\";\n\nexport class InMemoryRunData implements MutableRunData {\n private readonly byNode = new Map<NodeId, NodeOutputs>();\n\n constructor(initial?: Record<NodeId, NodeOutputs>) {\n if (initial) {\n for (const [nodeId, outputs] of Object.entries(initial)) this.byNode.set(nodeId, outputs);\n }\n }\n\n setOutputs(nodeId: NodeId, outputs: NodeOutputs): void {\n this.byNode.set(nodeId, outputs);\n }\n\n getOutputs(nodeId: NodeId): NodeOutputs | undefined {\n return this.byNode.get(nodeId);\n }\n\n getOutputItems(nodeId: NodeId, output: OutputPortKey = \"main\"): Items {\n return this.byNode.get(nodeId)?.[output] ?? [];\n }\n\n getOutputItem(nodeId: NodeId, itemIndex: number, output: OutputPortKey = \"main\") {\n return this.getOutputItems(nodeId, output)[itemIndex];\n }\n\n dump(): Record<NodeId, NodeOutputs> {\n const out: Record<NodeId, NodeOutputs> = {};\n for (const [nodeId, outputs] of this.byNode.entries()) out[nodeId] = outputs;\n return out;\n }\n}\n","import type { MutableRunData, NodeId, NodeOutputs, RunDataFactory } from \"../types\";\nimport { InMemoryRunData } from \"./InMemoryRunData\";\n\nexport class InMemoryRunDataFactory implements RunDataFactory {\n create(initial?: Record<NodeId, NodeOutputs>): MutableRunData {\n return new InMemoryRunData(initial);\n }\n}\n","import type { PersistedRunState } from \"./runTypes\";\n\ntype RunFinishedAtSource = Pick<PersistedRunState, \"status\" | \"nodeSnapshotsByNodeId\">;\n\n/** Derives workflow end time from node snapshots for run listings. */\nexport class RunFinishedAtFactory {\n static resolveIso(state: RunFinishedAtSource): string | undefined {\n if (state.status === \"running\" || state.status === \"pending\") {\n return undefined;\n }\n let max: string | undefined;\n for (const snap of Object.values(state.nodeSnapshotsByNodeId)) {\n if (snap?.finishedAt && (!max || snap.finishedAt > max)) {\n max = snap.finishedAt;\n }\n }\n return max;\n }\n}\n","import type {\n CurrentStateExecutionRequest,\n HttpMethod,\n Items,\n RunCurrentState,\n RunExecutionOptions,\n RunResult,\n RunStopCondition,\n WebhookInvocationMatch,\n WebhookRunResult,\n WebhookTriggerResolution,\n WorkflowDefinition,\n WorkflowRepository,\n} from \"../types\";\n\nimport { Engine } from \"../orchestration/Engine\";\n\nexport class RunIntentService {\n constructor(\n private readonly engine: Engine,\n private readonly workflowRepository: WorkflowRepository,\n ) {}\n\n async startWorkflow(args: {\n workflow: WorkflowDefinition;\n startAt?: string;\n items: Items;\n parent?: CurrentStateExecutionRequest[\"parent\"];\n executionOptions?: RunExecutionOptions;\n workflowSnapshot?: CurrentStateExecutionRequest[\"workflowSnapshot\"];\n mutableState?: CurrentStateExecutionRequest[\"mutableState\"];\n currentState?: RunCurrentState;\n stopCondition?: RunStopCondition;\n reset?: CurrentStateExecutionRequest[\"reset\"];\n }): Promise<RunResult> {\n if (args.startAt && !args.currentState && !args.stopCondition && !args.reset) {\n return await this.engine.runWorkflow(\n args.workflow,\n args.startAt,\n args.items,\n args.parent,\n args.executionOptions,\n {\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n },\n );\n }\n return await this.engine.runWorkflowFromState({\n workflow: args.workflow,\n items: args.items,\n parent: args.parent,\n executionOptions: args.executionOptions,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n currentState: args.currentState,\n stopCondition: args.stopCondition ?? { kind: \"workflowCompleted\" },\n reset: args.reset,\n });\n }\n\n async rerunFromNode(args: {\n workflow: WorkflowDefinition;\n nodeId: string;\n currentState: RunCurrentState;\n items?: Items;\n parent?: CurrentStateExecutionRequest[\"parent\"];\n executionOptions?: RunExecutionOptions;\n workflowSnapshot?: CurrentStateExecutionRequest[\"workflowSnapshot\"];\n mutableState?: CurrentStateExecutionRequest[\"mutableState\"];\n }): Promise<RunResult> {\n if (args.items) {\n return await this.engine.runWorkflow(args.workflow, args.nodeId, args.items, args.parent, args.executionOptions, {\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n });\n }\n return await this.engine.runWorkflowFromState({\n workflow: args.workflow,\n parent: args.parent,\n executionOptions: args.executionOptions,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n currentState: args.currentState,\n stopCondition: { kind: \"workflowCompleted\" },\n reset: { clearFromNodeId: args.nodeId },\n });\n }\n\n resolveWebhookTrigger(args: { endpointPath: string; method: HttpMethod }): WebhookTriggerResolution {\n return this.engine.resolveWebhookTrigger(args);\n }\n\n async runMatchedWebhook(args: {\n endpointPath: string;\n method: HttpMethod;\n requestItem: Items[number];\n }): Promise<WebhookRunResult> {\n const resolution = this.resolveWebhookTrigger(args);\n if (resolution.status === \"notFound\") {\n throw new Error(\"Unknown webhook endpoint\");\n }\n if (resolution.status === \"methodNotAllowed\") {\n throw new Error(\"Method not allowed\");\n }\n return await this.runWebhookMatch({\n match: resolution.match,\n requestItem: args.requestItem,\n });\n }\n\n async runWebhookMatch(args: {\n match: WebhookInvocationMatch;\n requestItem: Items[number];\n }): Promise<WebhookRunResult> {\n const workflow = this.workflowRepository.get(args.match.workflowId);\n if (!workflow) {\n throw new Error(`Unknown workflowId: ${args.match.workflowId}`);\n }\n const scheduled = await this.engine.runWorkflow(workflow, args.match.nodeId, [args.requestItem], undefined, {\n localOnly: true,\n webhook: true,\n });\n if (scheduled.status === \"failed\") {\n throw new Error(scheduled.error.message);\n }\n if (scheduled.status === \"completed\") {\n return {\n runId: scheduled.runId,\n workflowId: scheduled.workflowId,\n startedAt: scheduled.startedAt,\n runStatus: \"completed\",\n response: scheduled.outputs,\n };\n }\n return await Promise.race([\n this.engine.waitForWebhookResponse(scheduled.runId),\n this.engine.waitForCompletion(scheduled.runId).then((completed) => {\n if (completed.status === \"failed\") {\n throw new Error(completed.error.message);\n }\n return {\n runId: completed.runId,\n workflowId: completed.workflowId,\n startedAt: completed.startedAt,\n runStatus: \"completed\" as const,\n response: completed.outputs,\n } satisfies WebhookRunResult;\n }),\n ]);\n }\n}\n"],"mappings":"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"}
@@ -1,289 +0,0 @@
1
- import { B as NodeActivationId, Bt as BinaryStorageWriteResult, Cn as HttpMethod, D as BinaryAttachment, Dn as WebhookTriggerMatcher, En as WebhookInvocationMatch, Fn as CurrentStateExecutionRequest, Fr as RetryPolicySpec, Ft as BinaryBody, Gt as ExecutionContext, It as BinaryStorage, Kt as ExecutionContextFactory, Lt as BinaryStorageReadResult, On as WebhookTriggerResolution, P as Items, Qn as RunCurrentState, Rt as BinaryStorageStatResult, Sn as WorkflowSnapshotResolver, Vn as NodeInputsByPort, Wt as ExecutionBinaryService, X as NodeOutputs, Yn as PersistedWorkflowTokenRegistryLike, Yt as NodeActivationContinuation, ar as RunResult, at as RunDataSnapshot, dr as WebhookRunResult, en as NodeBinaryAttachmentService, er as RunExecutionOptions, gn as WorkflowCatalog, ht as WorkflowDefinition, in as NodeExecutionStatePublisher, it as RunDataFactory, lr as RunStopCondition, ot as RunId, q as NodeId, sr as RunStateStore, tn as NodeExecutionContext, tt as ParentExecutionRef, v as CredentialSessionService, vn as WorkflowRepository, xt as WorkflowId, z as MutableRunData } from "./InMemoryWorkflowCatalog-DS4-eX6i.cjs";
2
-
3
- //#region src/orchestration/Engine.d.ts
4
- interface EngineTriggerRuntime {
5
- startTriggers(): Promise<void>;
6
- stop(): Promise<void>;
7
- syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void>;
8
- createTriggerTestItems(args: {
9
- workflow: WorkflowDefinition;
10
- nodeId: NodeId;
11
- }): Promise<Items | undefined>;
12
- }
13
- interface EngineRunStartService {
14
- runWorkflow(wf: WorkflowDefinition, startAt: NodeId, items: Items, parent?: ParentExecutionRef, executionOptions?: RunExecutionOptions, persistedStateOverrides?: Readonly<{
15
- workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore["load"]>>>["workflowSnapshot"];
16
- mutableState?: NonNullable<Awaited<ReturnType<RunStateStore["load"]>>>["mutableState"];
17
- }>): Promise<RunResult>;
18
- runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult>;
19
- }
20
- interface EngineRunContinuationService {
21
- markNodeRunning(args: {
22
- runId: RunId;
23
- activationId: NodeActivationId;
24
- nodeId: NodeId;
25
- inputsByPort: NodeInputsByPort;
26
- }): Promise<void>;
27
- resumeFromNodeResult(args: {
28
- runId: RunId;
29
- activationId: NodeActivationId;
30
- nodeId: NodeId;
31
- outputs: NodeOutputs;
32
- }): Promise<RunResult>;
33
- resumeFromNodeError(args: {
34
- runId: RunId;
35
- activationId: NodeActivationId;
36
- nodeId: NodeId;
37
- error: Error;
38
- }): Promise<RunResult>;
39
- resumeFromStepResult(args: {
40
- runId: RunId;
41
- activationId: NodeActivationId;
42
- nodeId: NodeId;
43
- outputs: NodeOutputs;
44
- }): Promise<RunResult>;
45
- resumeFromStepError(args: {
46
- runId: RunId;
47
- activationId: NodeActivationId;
48
- nodeId: NodeId;
49
- error: Error;
50
- }): Promise<RunResult>;
51
- waitForCompletion(runId: RunId): Promise<Extract<RunResult, {
52
- status: "completed" | "failed";
53
- }>>;
54
- waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult>;
55
- }
56
- interface EngineFacadeDeps {
57
- workflowCatalog: WorkflowCatalog;
58
- tokenRegistry: PersistedWorkflowTokenRegistryLike;
59
- webhookTriggerMatcher: WebhookTriggerMatcher;
60
- workflowSnapshotResolver: WorkflowSnapshotResolver;
61
- triggerRuntime: EngineTriggerRuntime;
62
- runStartService: EngineRunStartService;
63
- runContinuationService: EngineRunContinuationService;
64
- }
65
- /**
66
- * Runtime facade for orchestration, continuation, triggers, and webhook routing.
67
- * Prefer {@link import("../intents/RunIntentService").RunIntentService} for host/HTTP invocation boundaries.
68
- * The class token is exported from `@codemation/core/bootstrap` (not the main `@codemation/core` barrel).
69
- */
70
- declare class Engine implements NodeActivationContinuation {
71
- private readonly deps;
72
- constructor(deps: EngineFacadeDeps);
73
- loadWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void;
74
- getTokenRegistry(): EngineFacadeDeps["tokenRegistry"];
75
- resolveWorkflowSnapshot(args: {
76
- workflowId: WorkflowId;
77
- workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore["load"]>>>["workflowSnapshot"];
78
- }): WorkflowDefinition | undefined;
79
- startTriggers(): Promise<void>;
80
- syncWorkflowTriggersForActivation(workflowId: WorkflowId): Promise<void>;
81
- start(workflows: WorkflowDefinition[]): Promise<void>;
82
- stop(): Promise<void>;
83
- resolveWebhookTrigger(args: {
84
- endpointPath: string;
85
- method: HttpMethod;
86
- }): WebhookTriggerResolution;
87
- createTriggerTestItems(args: {
88
- workflow: WorkflowDefinition;
89
- nodeId: NodeId;
90
- }): Promise<Items | undefined>;
91
- runWorkflow(wf: WorkflowDefinition, startAt: NodeId, items: Items, parent?: ParentExecutionRef, executionOptions?: RunExecutionOptions, persistedStateOverrides?: Readonly<{
92
- workflowSnapshot?: NonNullable<Awaited<ReturnType<RunStateStore["load"]>>>["workflowSnapshot"];
93
- mutableState?: NonNullable<Awaited<ReturnType<RunStateStore["load"]>>>["mutableState"];
94
- }>): Promise<RunResult>;
95
- runWorkflowFromState(request: CurrentStateExecutionRequest): Promise<RunResult>;
96
- markNodeRunning(args: {
97
- runId: RunId;
98
- activationId: NodeActivationId;
99
- nodeId: NodeId;
100
- inputsByPort: NodeInputsByPort;
101
- }): Promise<void>;
102
- resumeFromNodeResult(args: {
103
- runId: RunId;
104
- activationId: NodeActivationId;
105
- nodeId: NodeId;
106
- outputs: NodeOutputs;
107
- }): Promise<RunResult>;
108
- resumeFromNodeError(args: {
109
- runId: RunId;
110
- activationId: NodeActivationId;
111
- nodeId: NodeId;
112
- error: Error;
113
- }): Promise<RunResult>;
114
- resumeFromStepResult(args: {
115
- runId: RunId;
116
- activationId: NodeActivationId;
117
- nodeId: NodeId;
118
- outputs: NodeOutputs;
119
- }): Promise<RunResult>;
120
- resumeFromStepError(args: {
121
- runId: RunId;
122
- activationId: NodeActivationId;
123
- nodeId: NodeId;
124
- error: Error;
125
- }): Promise<RunResult>;
126
- waitForCompletion(runId: RunId): Promise<Extract<RunResult, {
127
- status: "completed" | "failed";
128
- }>>;
129
- waitForWebhookResponse(runId: RunId): Promise<WebhookRunResult>;
130
- }
131
- //#endregion
132
- //#region src/policies/EngineExecutionLimitsPolicy.d.ts
133
- interface EngineExecutionLimitsPolicyConfig {
134
- readonly defaultMaxNodeActivations: number;
135
- readonly hardMaxNodeActivations: number;
136
- readonly defaultMaxSubworkflowDepth: number;
137
- readonly hardMaxSubworkflowDepth: number;
138
- }
139
- /** Framework defaults for {@link EngineExecutionLimitsPolicy} (merged with host `runtime.engineExecutionLimits`). */
140
- declare const ENGINE_EXECUTION_LIMITS_DEFAULTS: EngineExecutionLimitsPolicyConfig;
141
- /**
142
- * Resolves per-run execution limits: defaults, hard ceilings, and subworkflow depth for new runs.
143
- */
144
- declare class EngineExecutionLimitsPolicy {
145
- private readonly config;
146
- constructor(config?: EngineExecutionLimitsPolicyConfig);
147
- /**
148
- * Effective options for a new root run (depth 0): defaults merged with engine ceilings.
149
- * Replaces a separate one-method factory for root-run bootstrap.
150
- */
151
- createRootExecutionOptions(): RunExecutionOptions;
152
- mergeExecutionOptionsForNewRun(parent: ParentExecutionRef | undefined, user: RunExecutionOptions | undefined): RunExecutionOptions;
153
- private capNumber;
154
- }
155
- //#endregion
156
- //#region src/execution/asyncSleeper.types.d.ts
157
- interface AsyncSleeper {
158
- sleep(ms: number): Promise<void>;
159
- }
160
- //#endregion
161
- //#region src/execution/DefaultAsyncSleeper.d.ts
162
- declare class DefaultAsyncSleeper implements AsyncSleeper {
163
- sleep(ms: number): Promise<void>;
164
- }
165
- //#endregion
166
- //#region src/execution/InProcessRetryRunner.d.ts
167
- declare class InProcessRetryRunner {
168
- private readonly sleeper;
169
- constructor(sleeper: AsyncSleeper);
170
- run<T>(policy: RetryPolicySpec | undefined, work: () => Promise<T>): Promise<T>;
171
- private static delayAfterFailureMs;
172
- private static normalizePolicy;
173
- private static assertPositiveInt;
174
- private static assertNonNegativeFinite;
175
- private static assertMultiplier;
176
- }
177
- //#endregion
178
- //#region src/executionContext/CredentialResolverFactory.d.ts
179
- declare class CredentialResolverFactory {
180
- private readonly credentialSessions;
181
- constructor(credentialSessions: CredentialSessionService);
182
- create(workflowId: WorkflowId, nodeId: NodeId, config?: NodeExecutionContext["config"]): NodeExecutionContext["getCredential"];
183
- }
184
- //#endregion
185
- //#region src/binaries/UnavailableBinaryStorage.d.ts
186
- declare class UnavailableBinaryStorage implements BinaryStorage {
187
- readonly driverName = "unavailable";
188
- write(): Promise<never>;
189
- openReadStream(): Promise<undefined>;
190
- stat(): Promise<{
191
- exists: false;
192
- }>;
193
- delete(): Promise<void>;
194
- }
195
- //#endregion
196
- //#region src/binaries/DefaultExecutionBinaryServiceFactory.d.ts
197
- declare class DefaultExecutionBinaryService implements ExecutionBinaryService {
198
- private readonly storage;
199
- private readonly workflowId;
200
- private readonly runId;
201
- private readonly now;
202
- constructor(storage: BinaryStorage, workflowId: WorkflowId, runId: RunId, now: () => Date);
203
- forNode(args: {
204
- nodeId: NodeId;
205
- activationId: NodeActivationId;
206
- }): NodeBinaryAttachmentService;
207
- openReadStream(attachment: BinaryAttachment): Promise<BinaryStorageReadResult | undefined>;
208
- }
209
- //#endregion
210
- //#region src/executionContext/DefaultExecutionContextFactory.d.ts
211
- declare class DefaultExecutionContextFactory implements ExecutionContextFactory {
212
- private readonly binaryStorage;
213
- private readonly currentDate;
214
- constructor(binaryStorage?: BinaryStorage, currentDate?: () => Date);
215
- create(args: {
216
- runId: RunId;
217
- workflowId: WorkflowId;
218
- parent?: ParentExecutionRef;
219
- subworkflowDepth: number;
220
- engineMaxNodeActivations: number;
221
- engineMaxSubworkflowDepth: number;
222
- data: RunDataSnapshot;
223
- nodeState?: NodeExecutionStatePublisher;
224
- getCredential<TSession = unknown>(slotKey: string): Promise<TSession>;
225
- }): ExecutionContext;
226
- }
227
- //#endregion
228
- //#region src/runStorage/InMemoryBinaryStorageRegistry.d.ts
229
- declare class InMemoryBinaryStorage implements BinaryStorage {
230
- readonly driverName = "memory";
231
- private readonly values;
232
- write(args: {
233
- storageKey: string;
234
- body: BinaryBody;
235
- }): Promise<BinaryStorageWriteResult>;
236
- openReadStream(storageKey: string): Promise<BinaryStorageReadResult | undefined>;
237
- stat(storageKey: string): Promise<BinaryStorageStatResult>;
238
- delete(storageKey: string): Promise<void>;
239
- }
240
- //#endregion
241
- //#region src/runStorage/InMemoryRunDataFactory.d.ts
242
- declare class InMemoryRunDataFactory implements RunDataFactory {
243
- create(initial?: Record<NodeId, NodeOutputs>): MutableRunData;
244
- }
245
- //#endregion
246
- //#region src/runtime/RunIntentService.d.ts
247
- declare class RunIntentService {
248
- private readonly engine;
249
- private readonly workflowRepository;
250
- constructor(engine: Engine, workflowRepository: WorkflowRepository);
251
- startWorkflow(args: {
252
- workflow: WorkflowDefinition;
253
- startAt?: string;
254
- items: Items;
255
- parent?: CurrentStateExecutionRequest["parent"];
256
- executionOptions?: RunExecutionOptions;
257
- workflowSnapshot?: CurrentStateExecutionRequest["workflowSnapshot"];
258
- mutableState?: CurrentStateExecutionRequest["mutableState"];
259
- currentState?: RunCurrentState;
260
- stopCondition?: RunStopCondition;
261
- reset?: CurrentStateExecutionRequest["reset"];
262
- }): Promise<RunResult>;
263
- rerunFromNode(args: {
264
- workflow: WorkflowDefinition;
265
- nodeId: string;
266
- currentState: RunCurrentState;
267
- items?: Items;
268
- parent?: CurrentStateExecutionRequest["parent"];
269
- executionOptions?: RunExecutionOptions;
270
- workflowSnapshot?: CurrentStateExecutionRequest["workflowSnapshot"];
271
- mutableState?: CurrentStateExecutionRequest["mutableState"];
272
- }): Promise<RunResult>;
273
- resolveWebhookTrigger(args: {
274
- endpointPath: string;
275
- method: HttpMethod;
276
- }): WebhookTriggerResolution;
277
- runMatchedWebhook(args: {
278
- endpointPath: string;
279
- method: HttpMethod;
280
- requestItem: Items[number];
281
- }): Promise<WebhookRunResult>;
282
- runWebhookMatch(args: {
283
- match: WebhookInvocationMatch;
284
- requestItem: Items[number];
285
- }): Promise<WebhookRunResult>;
286
- }
287
- //#endregion
288
- export { DefaultExecutionBinaryService as a, InProcessRetryRunner as c, ENGINE_EXECUTION_LIMITS_DEFAULTS as d, EngineExecutionLimitsPolicy as f, DefaultExecutionContextFactory as i, DefaultAsyncSleeper as l, Engine as m, InMemoryRunDataFactory as n, UnavailableBinaryStorage as o, EngineExecutionLimitsPolicyConfig as p, InMemoryBinaryStorage as r, CredentialResolverFactory as s, RunIntentService as t, AsyncSleeper as u };
289
- //# sourceMappingURL=RunIntentService-Dq3pV53j.d.cts.map
@@ -1,22 +0,0 @@
1
- import { Jn as PersistedWorkflowSnapshotNode, V as NodeConfigBase, Yn as PersistedWorkflowTokenRegistryLike, ht as WorkflowDefinition, qn as PersistedWorkflowSnapshot } from "./InMemoryWorkflowCatalog-C_ACeLyW.cjs";
2
-
3
- //#region src/workflowSnapshots/WorkflowSnapshotCodec.d.ts
4
- declare class WorkflowSnapshotCodec {
5
- private readonly tokenRegistry;
6
- constructor(tokenRegistry: PersistedWorkflowTokenRegistryLike);
7
- create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot;
8
- hydrate(snapshotNode: PersistedWorkflowSnapshotNode, liveConfig: NodeConfigBase): NodeConfigBase;
9
- private serializeConfig;
10
- private injectTokenIds;
11
- private mergeValue;
12
- private mergeNestedValue;
13
- private restoreNonSerializableProperties;
14
- private restoreTypeProperty;
15
- private resolveTokenId;
16
- private resolveTokenName;
17
- private asTypeToken;
18
- private asRecord;
19
- }
20
- //#endregion
21
- export { WorkflowSnapshotCodec as t };
22
- //# sourceMappingURL=WorkflowSnapshotCodec-C3fuuS_R.d.cts.map
@@ -1,123 +0,0 @@
1
- //#region src/workflowSnapshots/WorkflowSnapshotCodec.ts
2
- var WorkflowSnapshotCodec = class {
3
- constructor(tokenRegistry) {
4
- this.tokenRegistry = tokenRegistry;
5
- }
6
- create(workflow) {
7
- return {
8
- id: workflow.id,
9
- name: workflow.name,
10
- workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== void 0,
11
- ...workflow.connections !== void 0 && workflow.connections.length > 0 ? { connections: workflow.connections } : {},
12
- nodes: workflow.nodes.map((node) => ({
13
- id: node.id,
14
- kind: node.kind,
15
- name: node.name,
16
- nodeTokenId: this.resolveTokenId(node.type),
17
- configTokenId: this.resolveTokenId(node.config.type),
18
- tokenName: this.resolveTokenName(node.type),
19
- configTokenName: this.resolveTokenName(node.config.type),
20
- config: this.serializeConfig(node.config)
21
- })),
22
- edges: workflow.edges.map((edge) => ({
23
- from: {
24
- nodeId: edge.from.nodeId,
25
- output: edge.from.output
26
- },
27
- to: {
28
- nodeId: edge.to.nodeId,
29
- input: edge.to.input
30
- }
31
- }))
32
- };
33
- }
34
- hydrate(snapshotNode, liveConfig) {
35
- const hydrated = this.mergeValue(liveConfig, snapshotNode.config);
36
- const configToken = this.tokenRegistry.resolve(snapshotNode.configTokenId);
37
- Object.assign(hydrated, {
38
- type: configToken ?? liveConfig.type,
39
- kind: snapshotNode.kind
40
- });
41
- if (snapshotNode.name && !("name" in hydrated && hydrated.name)) Object.assign(hydrated, { name: snapshotNode.name });
42
- return hydrated;
43
- }
44
- serializeConfig(config) {
45
- try {
46
- const cloned = JSON.parse(JSON.stringify(config));
47
- this.injectTokenIds(cloned, config);
48
- return cloned;
49
- } catch {
50
- const fallback = {
51
- kind: config.kind,
52
- name: config.name,
53
- id: config.id,
54
- icon: config.icon,
55
- execution: config.execution
56
- };
57
- this.injectTokenIds(fallback, config);
58
- return fallback;
59
- }
60
- }
61
- injectTokenIds(target, source) {
62
- const type = this.asTypeToken(source.type);
63
- if (type) target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.resolveTokenName(type) ?? "unknown";
64
- for (const [key, value] of Object.entries(source)) {
65
- if (key === "type" || value == null) continue;
66
- if (Array.isArray(value)) {
67
- const targetArray = target[key];
68
- if (Array.isArray(targetArray)) value.forEach((item, index) => {
69
- if (item && typeof item === "object" && targetArray[index] && typeof targetArray[index] === "object") this.injectTokenIds(targetArray[index], item);
70
- });
71
- continue;
72
- }
73
- if (typeof value === "object") {
74
- const targetValue = target[key];
75
- if (targetValue && typeof targetValue === "object") this.injectTokenIds(targetValue, value);
76
- }
77
- }
78
- }
79
- mergeValue(liveValue, snapshotValue) {
80
- const liveRecord = this.asRecord(liveValue);
81
- const snapshotRecord = this.asRecord(snapshotValue);
82
- const hydrated = Object.create(liveValue && typeof liveValue === "object" ? Object.getPrototypeOf(liveValue) ?? Object.prototype : Object.prototype);
83
- for (const [key, value] of Object.entries(snapshotRecord)) hydrated[key] = this.mergeNestedValue(liveRecord[key], value);
84
- this.restoreNonSerializableProperties(liveRecord, hydrated);
85
- this.restoreTypeProperty(hydrated);
86
- return hydrated;
87
- }
88
- mergeNestedValue(liveValue, snapshotValue) {
89
- if (Array.isArray(snapshotValue)) {
90
- const liveArray = Array.isArray(liveValue) ? liveValue : [];
91
- return snapshotValue.map((entry, index) => this.mergeNestedValue(liveArray[index], entry));
92
- }
93
- if (snapshotValue && typeof snapshotValue === "object") return this.mergeValue(liveValue, snapshotValue);
94
- return snapshotValue;
95
- }
96
- restoreNonSerializableProperties(liveRecord, hydrated) {
97
- for (const [key, value] of Object.entries(liveRecord)) if (typeof value === "function" || typeof value === "symbol") hydrated[key] = value;
98
- }
99
- restoreTypeProperty(record) {
100
- const tokenId = typeof record.tokenId === "string" ? record.tokenId : void 0;
101
- if (!tokenId) return;
102
- const type = this.tokenRegistry.resolve(tokenId);
103
- if (type) record.type = type;
104
- }
105
- resolveTokenId(token) {
106
- return this.tokenRegistry.getTokenId(token) ?? this.resolveTokenName(token) ?? "unknown";
107
- }
108
- resolveTokenName(token) {
109
- if (typeof token === "function" && token.name) return token.name;
110
- if (typeof token === "string") return token;
111
- }
112
- asTypeToken(value) {
113
- if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
114
- }
115
- asRecord(value) {
116
- if (!value || typeof value !== "object" || Array.isArray(value)) return {};
117
- return { ...value };
118
- }
119
- };
120
-
121
- //#endregion
122
- export { WorkflowSnapshotCodec as t };
123
- //# sourceMappingURL=WorkflowSnapshotCodec-CUudUo6f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkflowSnapshotCodec-CUudUo6f.js","names":["tokenRegistry: PersistedWorkflowTokenRegistryLike","fallback: Record<string, unknown>"],"sources":["../src/workflowSnapshots/WorkflowSnapshotCodec.ts"],"sourcesContent":["import type { TypeToken } from \"../di\";\nimport type {\n NodeConfigBase,\n PersistedTokenId,\n PersistedWorkflowSnapshot,\n PersistedWorkflowSnapshotNode,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n} from \"../types\";\n\nexport class WorkflowSnapshotCodec {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n return {\n id: workflow.id,\n name: workflow.name,\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n ...(workflow.connections !== undefined && workflow.connections.length > 0\n ? { connections: workflow.connections }\n : {}),\n nodes: workflow.nodes.map((node) => ({\n id: node.id,\n kind: node.kind,\n name: node.name,\n nodeTokenId: this.resolveTokenId(node.type),\n configTokenId: this.resolveTokenId(node.config.type),\n tokenName: this.resolveTokenName(node.type),\n configTokenName: this.resolveTokenName(node.config.type),\n config: this.serializeConfig(node.config),\n })),\n edges: workflow.edges.map((edge) => ({\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\n })),\n };\n }\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 serializeConfig(config: NodeConfigBase): unknown {\n try {\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n return cloned;\n } catch {\n const fallback: Record<string, unknown> = {\n kind: config.kind,\n name: config.name,\n id: config.id,\n icon: config.icon,\n execution: config.execution,\n };\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n return fallback;\n }\n }\n\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n const type = this.asTypeToken(source.type);\n if (type) {\n target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.resolveTokenName(type) ?? \"unknown\";\n }\n for (const [key, value] of Object.entries(source)) {\n if (key === \"type\" || value == null) {\n continue;\n }\n if (Array.isArray(value)) {\n const targetArray = target[key];\n if (Array.isArray(targetArray)) {\n value.forEach((item, index) => {\n if (item && typeof item === \"object\" && targetArray[index] && typeof targetArray[index] === \"object\") {\n this.injectTokenIds(targetArray[index] as Record<string, unknown>, item as Record<string, unknown>);\n }\n });\n }\n continue;\n }\n if (typeof value === \"object\") {\n const targetValue = target[key];\n if (targetValue && typeof targetValue === \"object\") {\n this.injectTokenIds(targetValue as Record<string, unknown>, value as Record<string, unknown>);\n }\n }\n }\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 as PersistedTokenId);\n if (type) {\n record.type = type;\n }\n }\n\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n return (this.tokenRegistry.getTokenId(token) ?? this.resolveTokenName(token) ?? \"unknown\") as PersistedTokenId;\n }\n\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n if (typeof token === \"function\" && token.name) {\n return token.name;\n }\n if (typeof token === \"string\") {\n return token;\n }\n return undefined;\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\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"],"mappings":"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"}