@orbytautomation/engine 0.1.0

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 (582) hide show
  1. package/README.md +0 -0
  2. package/dist/adapters/AdapterRegistry.d.ts +129 -0
  3. package/dist/adapters/AdapterRegistry.d.ts.map +1 -0
  4. package/dist/adapters/AdapterRegistry.js +236 -0
  5. package/dist/adapters/AdapterRegistry.js.map +1 -0
  6. package/dist/adapters/StepAdapter.d.ts +2 -0
  7. package/dist/adapters/StepAdapter.d.ts.map +1 -0
  8. package/dist/adapters/StepAdapter.js +2 -0
  9. package/dist/adapters/StepAdapter.js.map +1 -0
  10. package/dist/adapters/WorkflowAdapter.d.ts +2 -0
  11. package/dist/adapters/WorkflowAdapter.d.ts.map +1 -0
  12. package/dist/adapters/WorkflowAdapter.js +2 -0
  13. package/dist/adapters/WorkflowAdapter.js.map +1 -0
  14. package/dist/adapters/builtins/CLIAdapter.d.ts +38 -0
  15. package/dist/adapters/builtins/CLIAdapter.d.ts.map +1 -0
  16. package/dist/adapters/builtins/CLIAdapter.js +173 -0
  17. package/dist/adapters/builtins/CLIAdapter.js.map +1 -0
  18. package/dist/adapters/builtins/CLICommandResolver.d.ts +49 -0
  19. package/dist/adapters/builtins/CLICommandResolver.d.ts.map +1 -0
  20. package/dist/adapters/builtins/CLICommandResolver.js +63 -0
  21. package/dist/adapters/builtins/CLICommandResolver.js.map +1 -0
  22. package/dist/adapters/builtins/CLIResultParser.d.ts +61 -0
  23. package/dist/adapters/builtins/CLIResultParser.d.ts.map +1 -0
  24. package/dist/adapters/builtins/CLIResultParser.js +113 -0
  25. package/dist/adapters/builtins/CLIResultParser.js.map +1 -0
  26. package/dist/adapters/builtins/ConnectionManager.d.ts +106 -0
  27. package/dist/adapters/builtins/ConnectionManager.d.ts.map +1 -0
  28. package/dist/adapters/builtins/ConnectionManager.js +162 -0
  29. package/dist/adapters/builtins/ConnectionManager.js.map +1 -0
  30. package/dist/adapters/builtins/Consumer.d.ts +110 -0
  31. package/dist/adapters/builtins/Consumer.d.ts.map +1 -0
  32. package/dist/adapters/builtins/Consumer.js +113 -0
  33. package/dist/adapters/builtins/Consumer.js.map +1 -0
  34. package/dist/adapters/builtins/DBAdapter.d.ts +79 -0
  35. package/dist/adapters/builtins/DBAdapter.d.ts.map +1 -0
  36. package/dist/adapters/builtins/DBAdapter.js +259 -0
  37. package/dist/adapters/builtins/DBAdapter.js.map +1 -0
  38. package/dist/adapters/builtins/EnvResolver.d.ts +66 -0
  39. package/dist/adapters/builtins/EnvResolver.d.ts.map +1 -0
  40. package/dist/adapters/builtins/EnvResolver.js +121 -0
  41. package/dist/adapters/builtins/EnvResolver.js.map +1 -0
  42. package/dist/adapters/builtins/FSAdapter.d.ts +50 -0
  43. package/dist/adapters/builtins/FSAdapter.d.ts.map +1 -0
  44. package/dist/adapters/builtins/FSAdapter.js +282 -0
  45. package/dist/adapters/builtins/FSAdapter.js.map +1 -0
  46. package/dist/adapters/builtins/FileResolver.d.ts +50 -0
  47. package/dist/adapters/builtins/FileResolver.d.ts.map +1 -0
  48. package/dist/adapters/builtins/FileResolver.js +77 -0
  49. package/dist/adapters/builtins/FileResolver.js.map +1 -0
  50. package/dist/adapters/builtins/HTTPAdapter.d.ts +58 -0
  51. package/dist/adapters/builtins/HTTPAdapter.d.ts.map +1 -0
  52. package/dist/adapters/builtins/HTTPAdapter.js +213 -0
  53. package/dist/adapters/builtins/HTTPAdapter.js.map +1 -0
  54. package/dist/adapters/builtins/HTTPRequestBuilder.d.ts +95 -0
  55. package/dist/adapters/builtins/HTTPRequestBuilder.d.ts.map +1 -0
  56. package/dist/adapters/builtins/HTTPRequestBuilder.js +159 -0
  57. package/dist/adapters/builtins/HTTPRequestBuilder.js.map +1 -0
  58. package/dist/adapters/builtins/HTTPResponseParser.d.ts +74 -0
  59. package/dist/adapters/builtins/HTTPResponseParser.d.ts.map +1 -0
  60. package/dist/adapters/builtins/HTTPResponseParser.js +144 -0
  61. package/dist/adapters/builtins/HTTPResponseParser.js.map +1 -0
  62. package/dist/adapters/builtins/PathSecurityPolicy.d.ts +38 -0
  63. package/dist/adapters/builtins/PathSecurityPolicy.d.ts.map +1 -0
  64. package/dist/adapters/builtins/PathSecurityPolicy.js +125 -0
  65. package/dist/adapters/builtins/PathSecurityPolicy.js.map +1 -0
  66. package/dist/adapters/builtins/Producer.d.ts +99 -0
  67. package/dist/adapters/builtins/Producer.d.ts.map +1 -0
  68. package/dist/adapters/builtins/Producer.js +59 -0
  69. package/dist/adapters/builtins/Producer.js.map +1 -0
  70. package/dist/adapters/builtins/QueryExecutor.d.ts +102 -0
  71. package/dist/adapters/builtins/QueryExecutor.d.ts.map +1 -0
  72. package/dist/adapters/builtins/QueryExecutor.js +90 -0
  73. package/dist/adapters/builtins/QueryExecutor.js.map +1 -0
  74. package/dist/adapters/builtins/QueueAdapter.d.ts +72 -0
  75. package/dist/adapters/builtins/QueueAdapter.d.ts.map +1 -0
  76. package/dist/adapters/builtins/QueueAdapter.js +209 -0
  77. package/dist/adapters/builtins/QueueAdapter.js.map +1 -0
  78. package/dist/adapters/builtins/SecretProvider.d.ts +69 -0
  79. package/dist/adapters/builtins/SecretProvider.d.ts.map +1 -0
  80. package/dist/adapters/builtins/SecretProvider.js +71 -0
  81. package/dist/adapters/builtins/SecretProvider.js.map +1 -0
  82. package/dist/adapters/builtins/SecretsAdapter.d.ts +48 -0
  83. package/dist/adapters/builtins/SecretsAdapter.d.ts.map +1 -0
  84. package/dist/adapters/builtins/SecretsAdapter.js +154 -0
  85. package/dist/adapters/builtins/SecretsAdapter.js.map +1 -0
  86. package/dist/adapters/builtins/ShellAdapter.d.ts +46 -0
  87. package/dist/adapters/builtins/ShellAdapter.d.ts.map +1 -0
  88. package/dist/adapters/builtins/ShellAdapter.js +200 -0
  89. package/dist/adapters/builtins/ShellAdapter.js.map +1 -0
  90. package/dist/adapters/builtins/ShellExecutor.d.ts +72 -0
  91. package/dist/adapters/builtins/ShellExecutor.d.ts.map +1 -0
  92. package/dist/adapters/builtins/ShellExecutor.js +94 -0
  93. package/dist/adapters/builtins/ShellExecutor.js.map +1 -0
  94. package/dist/adapters/builtins/ShellSecurityPolicy.d.ts +58 -0
  95. package/dist/adapters/builtins/ShellSecurityPolicy.d.ts.map +1 -0
  96. package/dist/adapters/builtins/ShellSecurityPolicy.js +135 -0
  97. package/dist/adapters/builtins/ShellSecurityPolicy.js.map +1 -0
  98. package/dist/adapters/builtins/index.d.ts +27 -0
  99. package/dist/adapters/builtins/index.d.ts.map +1 -0
  100. package/dist/adapters/builtins/index.js +35 -0
  101. package/dist/adapters/builtins/index.js.map +1 -0
  102. package/dist/adapters/index.d.ts +5 -0
  103. package/dist/adapters/index.d.ts.map +1 -0
  104. package/dist/adapters/index.js +6 -0
  105. package/dist/adapters/index.js.map +1 -0
  106. package/dist/automation/BackoffStrategy.d.ts +106 -0
  107. package/dist/automation/BackoffStrategy.d.ts.map +1 -0
  108. package/dist/automation/BackoffStrategy.js +168 -0
  109. package/dist/automation/BackoffStrategy.js.map +1 -0
  110. package/dist/automation/FailureStrategy.d.ts +141 -0
  111. package/dist/automation/FailureStrategy.d.ts.map +1 -0
  112. package/dist/automation/FailureStrategy.js +246 -0
  113. package/dist/automation/FailureStrategy.js.map +1 -0
  114. package/dist/automation/RetryPolicy.d.ts +132 -0
  115. package/dist/automation/RetryPolicy.d.ts.map +1 -0
  116. package/dist/automation/RetryPolicy.js +241 -0
  117. package/dist/automation/RetryPolicy.js.map +1 -0
  118. package/dist/automation/TimeoutManager.d.ts +145 -0
  119. package/dist/automation/TimeoutManager.d.ts.map +1 -0
  120. package/dist/automation/TimeoutManager.js +241 -0
  121. package/dist/automation/TimeoutManager.js.map +1 -0
  122. package/dist/automation/index.d.ts +16 -0
  123. package/dist/automation/index.d.ts.map +1 -0
  124. package/dist/automation/index.js +16 -0
  125. package/dist/automation/index.js.map +1 -0
  126. package/dist/automation/runtime/BackoffTimer.d.ts +74 -0
  127. package/dist/automation/runtime/BackoffTimer.d.ts.map +1 -0
  128. package/dist/automation/runtime/BackoffTimer.js +139 -0
  129. package/dist/automation/runtime/BackoffTimer.js.map +1 -0
  130. package/dist/automation/runtime/FailureHandler.d.ts +138 -0
  131. package/dist/automation/runtime/FailureHandler.d.ts.map +1 -0
  132. package/dist/automation/runtime/FailureHandler.js +197 -0
  133. package/dist/automation/runtime/FailureHandler.js.map +1 -0
  134. package/dist/automation/runtime/RetryExecutor.d.ts +104 -0
  135. package/dist/automation/runtime/RetryExecutor.d.ts.map +1 -0
  136. package/dist/automation/runtime/RetryExecutor.js +173 -0
  137. package/dist/automation/runtime/RetryExecutor.js.map +1 -0
  138. package/dist/automation/runtime/index.d.ts +13 -0
  139. package/dist/automation/runtime/index.d.ts.map +1 -0
  140. package/dist/automation/runtime/index.js +13 -0
  141. package/dist/automation/runtime/index.js.map +1 -0
  142. package/dist/context/ContextStore.d.ts +185 -0
  143. package/dist/context/ContextStore.d.ts.map +1 -0
  144. package/dist/context/ContextStore.js +228 -0
  145. package/dist/context/ContextStore.js.map +1 -0
  146. package/dist/context/VariableResolver.d.ts +184 -0
  147. package/dist/context/VariableResolver.d.ts.map +1 -0
  148. package/dist/context/VariableResolver.js +368 -0
  149. package/dist/context/VariableResolver.js.map +1 -0
  150. package/dist/context/index.d.ts +17 -0
  151. package/dist/context/index.d.ts.map +1 -0
  152. package/dist/context/index.js +17 -0
  153. package/dist/context/index.js.map +1 -0
  154. package/dist/core/EngineConfig.d.ts +156 -0
  155. package/dist/core/EngineConfig.d.ts.map +1 -0
  156. package/dist/core/EngineConfig.js +61 -0
  157. package/dist/core/EngineConfig.js.map +1 -0
  158. package/dist/core/EngineContext.d.ts +94 -0
  159. package/dist/core/EngineContext.d.ts.map +1 -0
  160. package/dist/core/EngineContext.js +29 -0
  161. package/dist/core/EngineContext.js.map +1 -0
  162. package/dist/core/OrbytEngine.d.ts +234 -0
  163. package/dist/core/OrbytEngine.d.ts.map +1 -0
  164. package/dist/core/OrbytEngine.js +421 -0
  165. package/dist/core/OrbytEngine.js.map +1 -0
  166. package/dist/core/index.d.ts +4 -0
  167. package/dist/core/index.d.ts.map +1 -0
  168. package/dist/core/index.js +4 -0
  169. package/dist/core/index.js.map +1 -0
  170. package/dist/errors/ErrorCodes.d.ts +71 -0
  171. package/dist/errors/ErrorCodes.d.ts.map +1 -0
  172. package/dist/errors/ErrorCodes.js +95 -0
  173. package/dist/errors/ErrorCodes.js.map +1 -0
  174. package/dist/errors/ErrorFormatter.d.ts +34 -0
  175. package/dist/errors/ErrorFormatter.d.ts.map +1 -0
  176. package/dist/errors/ErrorFormatter.js +140 -0
  177. package/dist/errors/ErrorFormatter.js.map +1 -0
  178. package/dist/errors/FieldRegistry.d.ts +83 -0
  179. package/dist/errors/FieldRegistry.d.ts.map +1 -0
  180. package/dist/errors/FieldRegistry.js +217 -0
  181. package/dist/errors/FieldRegistry.js.map +1 -0
  182. package/dist/errors/OrbytError.d.ts +59 -0
  183. package/dist/errors/OrbytError.d.ts.map +1 -0
  184. package/dist/errors/OrbytError.js +78 -0
  185. package/dist/errors/OrbytError.js.map +1 -0
  186. package/dist/errors/SchedulerError.d.ts +2 -0
  187. package/dist/errors/SchedulerError.d.ts.map +1 -0
  188. package/dist/errors/SchedulerError.js +2 -0
  189. package/dist/errors/SchedulerError.js.map +1 -0
  190. package/dist/errors/StepError.d.ts +2 -0
  191. package/dist/errors/StepError.d.ts.map +1 -0
  192. package/dist/errors/StepError.js +2 -0
  193. package/dist/errors/StepError.js.map +1 -0
  194. package/dist/errors/TypoDetector.d.ts +36 -0
  195. package/dist/errors/TypoDetector.d.ts.map +1 -0
  196. package/dist/errors/TypoDetector.js +109 -0
  197. package/dist/errors/TypoDetector.js.map +1 -0
  198. package/dist/errors/WorkflowError.d.ts +54 -0
  199. package/dist/errors/WorkflowError.d.ts.map +1 -0
  200. package/dist/errors/WorkflowError.js +129 -0
  201. package/dist/errors/WorkflowError.js.map +1 -0
  202. package/dist/errors/index.d.ts +14 -0
  203. package/dist/errors/index.d.ts.map +1 -0
  204. package/dist/errors/index.js +17 -0
  205. package/dist/errors/index.js.map +1 -0
  206. package/dist/events/EngineEvents.d.ts +143 -0
  207. package/dist/events/EngineEvents.d.ts.map +1 -0
  208. package/dist/events/EngineEvents.js +60 -0
  209. package/dist/events/EngineEvents.js.map +1 -0
  210. package/dist/events/EventBus.d.ts +112 -0
  211. package/dist/events/EventBus.d.ts.map +1 -0
  212. package/dist/events/EventBus.js +177 -0
  213. package/dist/events/EventBus.js.map +1 -0
  214. package/dist/events/index.d.ts +3 -0
  215. package/dist/events/index.d.ts.map +1 -0
  216. package/dist/events/index.js +3 -0
  217. package/dist/events/index.js.map +1 -0
  218. package/dist/execution/ExecutionEngine.d.ts +220 -0
  219. package/dist/execution/ExecutionEngine.d.ts.map +1 -0
  220. package/dist/execution/ExecutionEngine.js +442 -0
  221. package/dist/execution/ExecutionEngine.js.map +1 -0
  222. package/dist/execution/ExecutionNode.d.ts +114 -0
  223. package/dist/execution/ExecutionNode.d.ts.map +1 -0
  224. package/dist/execution/ExecutionNode.js +99 -0
  225. package/dist/execution/ExecutionNode.js.map +1 -0
  226. package/dist/execution/ExecutionPlan.d.ts +133 -0
  227. package/dist/execution/ExecutionPlan.d.ts.map +1 -0
  228. package/dist/execution/ExecutionPlan.js +207 -0
  229. package/dist/execution/ExecutionPlan.js.map +1 -0
  230. package/dist/execution/StepExecutor.d.ts +204 -0
  231. package/dist/execution/StepExecutor.d.ts.map +1 -0
  232. package/dist/execution/StepExecutor.js +604 -0
  233. package/dist/execution/StepExecutor.js.map +1 -0
  234. package/dist/execution/WorkflowExecutor.d.ts +129 -0
  235. package/dist/execution/WorkflowExecutor.d.ts.map +1 -0
  236. package/dist/execution/WorkflowExecutor.js +347 -0
  237. package/dist/execution/WorkflowExecutor.js.map +1 -0
  238. package/dist/execution/drivers/AdapterDriver.d.ts +34 -0
  239. package/dist/execution/drivers/AdapterDriver.d.ts.map +1 -0
  240. package/dist/execution/drivers/AdapterDriver.js +63 -0
  241. package/dist/execution/drivers/AdapterDriver.js.map +1 -0
  242. package/dist/execution/drivers/DriverResolver.d.ts +91 -0
  243. package/dist/execution/drivers/DriverResolver.d.ts.map +1 -0
  244. package/dist/execution/drivers/DriverResolver.js +172 -0
  245. package/dist/execution/drivers/DriverResolver.js.map +1 -0
  246. package/dist/execution/drivers/ExecutionDriver.d.ts +127 -0
  247. package/dist/execution/drivers/ExecutionDriver.d.ts.map +1 -0
  248. package/dist/execution/drivers/ExecutionDriver.js +50 -0
  249. package/dist/execution/drivers/ExecutionDriver.js.map +1 -0
  250. package/dist/execution/drivers/index.d.ts +11 -0
  251. package/dist/execution/drivers/index.d.ts.map +1 -0
  252. package/dist/execution/drivers/index.js +11 -0
  253. package/dist/execution/drivers/index.js.map +1 -0
  254. package/dist/execution/index.d.ts +18 -0
  255. package/dist/execution/index.d.ts.map +1 -0
  256. package/dist/execution/index.js +19 -0
  257. package/dist/execution/index.js.map +1 -0
  258. package/dist/graph/CycleDetector.d.ts +90 -0
  259. package/dist/graph/CycleDetector.d.ts.map +1 -0
  260. package/dist/graph/CycleDetector.js +210 -0
  261. package/dist/graph/CycleDetector.js.map +1 -0
  262. package/dist/graph/DependencyGraph.d.ts +16 -0
  263. package/dist/graph/DependencyGraph.d.ts.map +1 -0
  264. package/dist/graph/DependencyGraph.js +16 -0
  265. package/dist/graph/DependencyGraph.js.map +1 -0
  266. package/dist/graph/DependencyResolver.d.ts +90 -0
  267. package/dist/graph/DependencyResolver.d.ts.map +1 -0
  268. package/dist/graph/DependencyResolver.js +159 -0
  269. package/dist/graph/DependencyResolver.js.map +1 -0
  270. package/dist/graph/TopologicalSorter.d.ts +104 -0
  271. package/dist/graph/TopologicalSorter.d.ts.map +1 -0
  272. package/dist/graph/TopologicalSorter.js +213 -0
  273. package/dist/graph/TopologicalSorter.js.map +1 -0
  274. package/dist/graph/index.d.ts +15 -0
  275. package/dist/graph/index.d.ts.map +1 -0
  276. package/dist/graph/index.js +15 -0
  277. package/dist/graph/index.js.map +1 -0
  278. package/dist/guards/ResourceGuard.d.ts +90 -0
  279. package/dist/guards/ResourceGuard.d.ts.map +1 -0
  280. package/dist/guards/ResourceGuard.js +177 -0
  281. package/dist/guards/ResourceGuard.js.map +1 -0
  282. package/dist/guards/StepGuard.d.ts +96 -0
  283. package/dist/guards/StepGuard.d.ts.map +1 -0
  284. package/dist/guards/StepGuard.js +184 -0
  285. package/dist/guards/StepGuard.js.map +1 -0
  286. package/dist/guards/WorkflowGuard.d.ts +71 -0
  287. package/dist/guards/WorkflowGuard.d.ts.map +1 -0
  288. package/dist/guards/WorkflowGuard.js +187 -0
  289. package/dist/guards/WorkflowGuard.js.map +1 -0
  290. package/dist/guards/index.d.ts +9 -0
  291. package/dist/guards/index.d.ts.map +1 -0
  292. package/dist/guards/index.js +9 -0
  293. package/dist/guards/index.js.map +1 -0
  294. package/dist/hooks/HookManager.d.ts +114 -0
  295. package/dist/hooks/HookManager.d.ts.map +1 -0
  296. package/dist/hooks/HookManager.js +187 -0
  297. package/dist/hooks/HookManager.js.map +1 -0
  298. package/dist/hooks/LifecycleHooks.d.ts +126 -0
  299. package/dist/hooks/LifecycleHooks.d.ts.map +1 -0
  300. package/dist/hooks/LifecycleHooks.js +23 -0
  301. package/dist/hooks/LifecycleHooks.js.map +1 -0
  302. package/dist/hooks/index.d.ts +3 -0
  303. package/dist/hooks/index.d.ts.map +1 -0
  304. package/dist/hooks/index.js +3 -0
  305. package/dist/hooks/index.js.map +1 -0
  306. package/dist/index.d.ts +30 -0
  307. package/dist/index.d.ts.map +1 -0
  308. package/dist/index.js +39 -0
  309. package/dist/index.js.map +1 -0
  310. package/dist/lifecycle/EngineLifecycle.d.ts +121 -0
  311. package/dist/lifecycle/EngineLifecycle.d.ts.map +1 -0
  312. package/dist/lifecycle/EngineLifecycle.js +209 -0
  313. package/dist/lifecycle/EngineLifecycle.js.map +1 -0
  314. package/dist/lifecycle/ShutdownManager.d.ts +44 -0
  315. package/dist/lifecycle/ShutdownManager.d.ts.map +1 -0
  316. package/dist/lifecycle/ShutdownManager.js +105 -0
  317. package/dist/lifecycle/ShutdownManager.js.map +1 -0
  318. package/dist/lifecycle/StartupManager.d.ts +45 -0
  319. package/dist/lifecycle/StartupManager.d.ts.map +1 -0
  320. package/dist/lifecycle/StartupManager.js +97 -0
  321. package/dist/lifecycle/StartupManager.js.map +1 -0
  322. package/dist/lifecycle/index.d.ts +9 -0
  323. package/dist/lifecycle/index.d.ts.map +1 -0
  324. package/dist/lifecycle/index.js +9 -0
  325. package/dist/lifecycle/index.js.map +1 -0
  326. package/dist/logging/LogLevel.d.ts +2 -0
  327. package/dist/logging/LogLevel.d.ts.map +1 -0
  328. package/dist/logging/LogLevel.js +2 -0
  329. package/dist/logging/LogLevel.js.map +1 -0
  330. package/dist/logging/Logger.d.ts +2 -0
  331. package/dist/logging/Logger.d.ts.map +1 -0
  332. package/dist/logging/Logger.js +2 -0
  333. package/dist/logging/Logger.js.map +1 -0
  334. package/dist/logging/index.d.ts +2 -0
  335. package/dist/logging/index.d.ts.map +1 -0
  336. package/dist/logging/index.js +4 -0
  337. package/dist/logging/index.js.map +1 -0
  338. package/dist/marketplace/PluginInstaller.d.ts +81 -0
  339. package/dist/marketplace/PluginInstaller.d.ts.map +1 -0
  340. package/dist/marketplace/PluginInstaller.js +89 -0
  341. package/dist/marketplace/PluginInstaller.js.map +1 -0
  342. package/dist/marketplace/PluginManifest.d.ts +74 -0
  343. package/dist/marketplace/PluginManifest.d.ts.map +1 -0
  344. package/dist/marketplace/PluginManifest.js +67 -0
  345. package/dist/marketplace/PluginManifest.js.map +1 -0
  346. package/dist/marketplace/PluginVerifier.d.ts +58 -0
  347. package/dist/marketplace/PluginVerifier.d.ts.map +1 -0
  348. package/dist/marketplace/PluginVerifier.js +93 -0
  349. package/dist/marketplace/PluginVerifier.js.map +1 -0
  350. package/dist/marketplace/index.d.ts +11 -0
  351. package/dist/marketplace/index.d.ts.map +1 -0
  352. package/dist/marketplace/index.js +11 -0
  353. package/dist/marketplace/index.js.map +1 -0
  354. package/dist/metrics/MetricsCollector.d.ts +2 -0
  355. package/dist/metrics/MetricsCollector.d.ts.map +1 -0
  356. package/dist/metrics/MetricsCollector.js +2 -0
  357. package/dist/metrics/MetricsCollector.js.map +1 -0
  358. package/dist/metrics/PerformanceTracker.d.ts +2 -0
  359. package/dist/metrics/PerformanceTracker.d.ts.map +1 -0
  360. package/dist/metrics/PerformanceTracker.js +2 -0
  361. package/dist/metrics/PerformanceTracker.js.map +1 -0
  362. package/dist/metrics/index.d.ts +2 -0
  363. package/dist/metrics/index.d.ts.map +1 -0
  364. package/dist/metrics/index.js +4 -0
  365. package/dist/metrics/index.js.map +1 -0
  366. package/dist/parser/SchemaValidator.d.ts +63 -0
  367. package/dist/parser/SchemaValidator.d.ts.map +1 -0
  368. package/dist/parser/SchemaValidator.js +212 -0
  369. package/dist/parser/SchemaValidator.js.map +1 -0
  370. package/dist/parser/StepParser.d.ts +124 -0
  371. package/dist/parser/StepParser.d.ts.map +1 -0
  372. package/dist/parser/StepParser.js +330 -0
  373. package/dist/parser/StepParser.js.map +1 -0
  374. package/dist/parser/WorkflowParser.d.ts +124 -0
  375. package/dist/parser/WorkflowParser.d.ts.map +1 -0
  376. package/dist/parser/WorkflowParser.js +141 -0
  377. package/dist/parser/WorkflowParser.js.map +1 -0
  378. package/dist/parser/index.d.ts +4 -0
  379. package/dist/parser/index.d.ts.map +1 -0
  380. package/dist/parser/index.js +4 -0
  381. package/dist/parser/index.js.map +1 -0
  382. package/dist/queue/InMemoryQueue.d.ts +97 -0
  383. package/dist/queue/InMemoryQueue.d.ts.map +1 -0
  384. package/dist/queue/InMemoryQueue.js +268 -0
  385. package/dist/queue/InMemoryQueue.js.map +1 -0
  386. package/dist/queue/JobQueue.d.ts +214 -0
  387. package/dist/queue/JobQueue.d.ts.map +1 -0
  388. package/dist/queue/JobQueue.js +46 -0
  389. package/dist/queue/JobQueue.js.map +1 -0
  390. package/dist/queue/index.d.ts +10 -0
  391. package/dist/queue/index.d.ts.map +1 -0
  392. package/dist/queue/index.js +10 -0
  393. package/dist/queue/index.js.map +1 -0
  394. package/dist/resolution/ActionRegistry.d.ts +2 -0
  395. package/dist/resolution/ActionRegistry.d.ts.map +1 -0
  396. package/dist/resolution/ActionRegistry.js +2 -0
  397. package/dist/resolution/ActionRegistry.js.map +1 -0
  398. package/dist/resolution/AdapterResolver.d.ts +2 -0
  399. package/dist/resolution/AdapterResolver.d.ts.map +1 -0
  400. package/dist/resolution/AdapterResolver.js +2 -0
  401. package/dist/resolution/AdapterResolver.js.map +1 -0
  402. package/dist/resolution/StepResolver.d.ts +2 -0
  403. package/dist/resolution/StepResolver.d.ts.map +1 -0
  404. package/dist/resolution/StepResolver.js +2 -0
  405. package/dist/resolution/StepResolver.js.map +1 -0
  406. package/dist/resolution/index.d.ts +2 -0
  407. package/dist/resolution/index.d.ts.map +1 -0
  408. package/dist/resolution/index.js +2 -0
  409. package/dist/resolution/index.js.map +1 -0
  410. package/dist/scheduling/CronScheduler.d.ts +143 -0
  411. package/dist/scheduling/CronScheduler.d.ts.map +1 -0
  412. package/dist/scheduling/CronScheduler.js +370 -0
  413. package/dist/scheduling/CronScheduler.js.map +1 -0
  414. package/dist/scheduling/JobScheduler.d.ts +82 -0
  415. package/dist/scheduling/JobScheduler.d.ts.map +1 -0
  416. package/dist/scheduling/JobScheduler.js +231 -0
  417. package/dist/scheduling/JobScheduler.js.map +1 -0
  418. package/dist/scheduling/ScheduleParser.d.ts +117 -0
  419. package/dist/scheduling/ScheduleParser.d.ts.map +1 -0
  420. package/dist/scheduling/ScheduleParser.js +257 -0
  421. package/dist/scheduling/ScheduleParser.js.map +1 -0
  422. package/dist/scheduling/ScheduleTypes.d.ts +153 -0
  423. package/dist/scheduling/ScheduleTypes.d.ts.map +1 -0
  424. package/dist/scheduling/ScheduleTypes.js +81 -0
  425. package/dist/scheduling/ScheduleTypes.js.map +1 -0
  426. package/dist/scheduling/Scheduler.d.ts +154 -0
  427. package/dist/scheduling/Scheduler.d.ts.map +1 -0
  428. package/dist/scheduling/Scheduler.js +304 -0
  429. package/dist/scheduling/Scheduler.js.map +1 -0
  430. package/dist/scheduling/index.d.ts +6 -0
  431. package/dist/scheduling/index.d.ts.map +1 -0
  432. package/dist/scheduling/index.js +6 -0
  433. package/dist/scheduling/index.js.map +1 -0
  434. package/dist/security/PermissionPolicy.d.ts +72 -0
  435. package/dist/security/PermissionPolicy.d.ts.map +1 -0
  436. package/dist/security/PermissionPolicy.js +87 -0
  437. package/dist/security/PermissionPolicy.js.map +1 -0
  438. package/dist/security/SandboxManager.d.ts +72 -0
  439. package/dist/security/SandboxManager.d.ts.map +1 -0
  440. package/dist/security/SandboxManager.js +78 -0
  441. package/dist/security/SandboxManager.js.map +1 -0
  442. package/dist/security/index.d.ts +10 -0
  443. package/dist/security/index.d.ts.map +1 -0
  444. package/dist/security/index.js +10 -0
  445. package/dist/security/index.js.map +1 -0
  446. package/dist/state/ExecutionState.d.ts +211 -0
  447. package/dist/state/ExecutionState.d.ts.map +1 -0
  448. package/dist/state/ExecutionState.js +256 -0
  449. package/dist/state/ExecutionState.js.map +1 -0
  450. package/dist/state/StateMachine.d.ts +120 -0
  451. package/dist/state/StateMachine.d.ts.map +1 -0
  452. package/dist/state/StateMachine.js +230 -0
  453. package/dist/state/StateMachine.js.map +1 -0
  454. package/dist/state/index.d.ts +16 -0
  455. package/dist/state/index.d.ts.map +1 -0
  456. package/dist/state/index.js +16 -0
  457. package/dist/state/index.js.map +1 -0
  458. package/dist/storage/ExecutionStore.d.ts +2 -0
  459. package/dist/storage/ExecutionStore.d.ts.map +1 -0
  460. package/dist/storage/ExecutionStore.js +2 -0
  461. package/dist/storage/ExecutionStore.js.map +1 -0
  462. package/dist/storage/ScheduleStore.d.ts +2 -0
  463. package/dist/storage/ScheduleStore.d.ts.map +1 -0
  464. package/dist/storage/ScheduleStore.js +2 -0
  465. package/dist/storage/ScheduleStore.js.map +1 -0
  466. package/dist/storage/WorkflowStore.d.ts +2 -0
  467. package/dist/storage/WorkflowStore.d.ts.map +1 -0
  468. package/dist/storage/WorkflowStore.js +2 -0
  469. package/dist/storage/WorkflowStore.js.map +1 -0
  470. package/dist/storage/index.d.ts +2 -0
  471. package/dist/storage/index.d.ts.map +1 -0
  472. package/dist/storage/index.js +5 -0
  473. package/dist/storage/index.js.map +1 -0
  474. package/dist/testing/EngineTestHarness.d.ts +117 -0
  475. package/dist/testing/EngineTestHarness.d.ts.map +1 -0
  476. package/dist/testing/EngineTestHarness.js +132 -0
  477. package/dist/testing/EngineTestHarness.js.map +1 -0
  478. package/dist/testing/MockAdapter.d.ts +93 -0
  479. package/dist/testing/MockAdapter.d.ts.map +1 -0
  480. package/dist/testing/MockAdapter.js +124 -0
  481. package/dist/testing/MockAdapter.js.map +1 -0
  482. package/dist/testing/index.d.ts +10 -0
  483. package/dist/testing/index.d.ts.map +1 -0
  484. package/dist/testing/index.js +10 -0
  485. package/dist/testing/index.js.map +1 -0
  486. package/dist/triggers/CronTrigger.d.ts +2 -0
  487. package/dist/triggers/CronTrigger.d.ts.map +1 -0
  488. package/dist/triggers/CronTrigger.js +2 -0
  489. package/dist/triggers/CronTrigger.js.map +1 -0
  490. package/dist/triggers/EventTrigger.d.ts +2 -0
  491. package/dist/triggers/EventTrigger.d.ts.map +1 -0
  492. package/dist/triggers/EventTrigger.js +2 -0
  493. package/dist/triggers/EventTrigger.js.map +1 -0
  494. package/dist/triggers/ManualTrigger.d.ts +2 -0
  495. package/dist/triggers/ManualTrigger.d.ts.map +1 -0
  496. package/dist/triggers/ManualTrigger.js +2 -0
  497. package/dist/triggers/ManualTrigger.js.map +1 -0
  498. package/dist/triggers/Trigger.d.ts +2 -0
  499. package/dist/triggers/Trigger.d.ts.map +1 -0
  500. package/dist/triggers/Trigger.js +2 -0
  501. package/dist/triggers/Trigger.js.map +1 -0
  502. package/dist/triggers/index.d.ts +2 -0
  503. package/dist/triggers/index.d.ts.map +1 -0
  504. package/dist/triggers/index.js +6 -0
  505. package/dist/triggers/index.js.map +1 -0
  506. package/dist/triggers/sources/FileWatcherTrigger.d.ts +2 -0
  507. package/dist/triggers/sources/FileWatcherTrigger.d.ts.map +1 -0
  508. package/dist/triggers/sources/FileWatcherTrigger.js +2 -0
  509. package/dist/triggers/sources/FileWatcherTrigger.js.map +1 -0
  510. package/dist/triggers/sources/MessageTrigger.d.ts +2 -0
  511. package/dist/triggers/sources/MessageTrigger.d.ts.map +1 -0
  512. package/dist/triggers/sources/MessageTrigger.js +2 -0
  513. package/dist/triggers/sources/MessageTrigger.js.map +1 -0
  514. package/dist/triggers/sources/WebhookListener.d.ts +2 -0
  515. package/dist/triggers/sources/WebhookListener.d.ts.map +1 -0
  516. package/dist/triggers/sources/WebhookListener.js +2 -0
  517. package/dist/triggers/sources/WebhookListener.js.map +1 -0
  518. package/dist/triggers/sources/index.d.ts +2 -0
  519. package/dist/triggers/sources/index.d.ts.map +1 -0
  520. package/dist/triggers/sources/index.js +2 -0
  521. package/dist/triggers/sources/index.js.map +1 -0
  522. package/dist/utils/deepMerge.d.ts +2 -0
  523. package/dist/utils/deepMerge.d.ts.map +1 -0
  524. package/dist/utils/deepMerge.js +2 -0
  525. package/dist/utils/deepMerge.js.map +1 -0
  526. package/dist/utils/id.d.ts +2 -0
  527. package/dist/utils/id.d.ts.map +1 -0
  528. package/dist/utils/id.js +2 -0
  529. package/dist/utils/id.js.map +1 -0
  530. package/dist/utils/index.d.ts +2 -0
  531. package/dist/utils/index.d.ts.map +1 -0
  532. package/dist/utils/index.js +6 -0
  533. package/dist/utils/index.js.map +1 -0
  534. package/dist/utils/safeExec.d.ts +2 -0
  535. package/dist/utils/safeExec.d.ts.map +1 -0
  536. package/dist/utils/safeExec.js +2 -0
  537. package/dist/utils/safeExec.js.map +1 -0
  538. package/dist/utils/time.d.ts +2 -0
  539. package/dist/utils/time.d.ts.map +1 -0
  540. package/dist/utils/time.js +2 -0
  541. package/dist/utils/time.js.map +1 -0
  542. package/dist/visualization/ExecutionGraphBuilder.d.ts +2 -0
  543. package/dist/visualization/ExecutionGraphBuilder.d.ts.map +1 -0
  544. package/dist/visualization/ExecutionGraphBuilder.js +2 -0
  545. package/dist/visualization/ExecutionGraphBuilder.js.map +1 -0
  546. package/dist/visualization/ExecutionTraceFormatter.d.ts +2 -0
  547. package/dist/visualization/ExecutionTraceFormatter.d.ts.map +1 -0
  548. package/dist/visualization/ExecutionTraceFormatter.js +2 -0
  549. package/dist/visualization/ExecutionTraceFormatter.js.map +1 -0
  550. package/dist/visualization/index.d.ts +2 -0
  551. package/dist/visualization/index.d.ts.map +1 -0
  552. package/dist/visualization/index.js +2 -0
  553. package/dist/visualization/index.js.map +1 -0
  554. package/dist/workflow/Step.d.ts +2 -0
  555. package/dist/workflow/Step.d.ts.map +1 -0
  556. package/dist/workflow/Step.js +2 -0
  557. package/dist/workflow/Step.js.map +1 -0
  558. package/dist/workflow/StepContext.d.ts +2 -0
  559. package/dist/workflow/StepContext.d.ts.map +1 -0
  560. package/dist/workflow/StepContext.js +2 -0
  561. package/dist/workflow/StepContext.js.map +1 -0
  562. package/dist/workflow/StepResult.d.ts +2 -0
  563. package/dist/workflow/StepResult.d.ts.map +1 -0
  564. package/dist/workflow/StepResult.js +2 -0
  565. package/dist/workflow/StepResult.js.map +1 -0
  566. package/dist/workflow/Workflow.d.ts +2 -0
  567. package/dist/workflow/Workflow.d.ts.map +1 -0
  568. package/dist/workflow/Workflow.js +2 -0
  569. package/dist/workflow/Workflow.js.map +1 -0
  570. package/dist/workflow/WorkflowRegistry.d.ts +2 -0
  571. package/dist/workflow/WorkflowRegistry.d.ts.map +1 -0
  572. package/dist/workflow/WorkflowRegistry.js +2 -0
  573. package/dist/workflow/WorkflowRegistry.js.map +1 -0
  574. package/dist/workflow/WorkflowState.d.ts +2 -0
  575. package/dist/workflow/WorkflowState.d.ts.map +1 -0
  576. package/dist/workflow/WorkflowState.js +2 -0
  577. package/dist/workflow/WorkflowState.js.map +1 -0
  578. package/dist/workflow/index.d.ts +2 -0
  579. package/dist/workflow/index.d.ts.map +1 -0
  580. package/dist/workflow/index.js +8 -0
  581. package/dist/workflow/index.js.map +1 -0
  582. package/package.json +47 -0
@@ -0,0 +1,210 @@
1
+ /**
2
+ * CycleDetector
3
+ *
4
+ * Detects cycles in the dependency graph using Depth-First Search (DFS).
5
+ * This is about VALIDATION - fail fast with clear error messages.
6
+ *
7
+ * Purpose:
8
+ * - Detect circular dependencies before execution
9
+ * - Provide clear error messages showing the cycle path
10
+ * - Fail fast - prevent impossible execution plans
11
+ *
12
+ * Algorithm: DFS with three-color marking
13
+ * - WHITE (unvisited): Node not yet explored
14
+ * - GRAY (visiting): Node currently in DFS path (on stack)
15
+ * - BLACK (visited): Node fully explored, all descendants visited
16
+ *
17
+ * A cycle exists if we encounter a GRAY node during traversal.
18
+ *
19
+ * What it does NOT do:
20
+ * - Does NOT order the graph (that's TopologicalSort's job)
21
+ * - Does NOT execute anything (that's StepExecutor's job)
22
+ * - Does NOT schedule steps (that's WorkflowExecutor's job)
23
+ */
24
+ import { WorkflowValidationError } from '@dev-ecosystem/core';
25
+ /**
26
+ * Node visit state for DFS traversal
27
+ */
28
+ var VisitState;
29
+ (function (VisitState) {
30
+ /** Not yet visited */
31
+ VisitState["WHITE"] = "white";
32
+ /** Currently being visited (in DFS stack) */
33
+ VisitState["GRAY"] = "gray";
34
+ /** Fully visited, all descendants explored */
35
+ VisitState["BLACK"] = "black";
36
+ })(VisitState || (VisitState = {}));
37
+ /**
38
+ * Detects cycles in dependency graphs.
39
+ * Pure function - takes graph, returns cycle information.
40
+ */
41
+ export class CycleDetector {
42
+ /**
43
+ * Check if the graph contains a cycle.
44
+ * Uses DFS with three-color marking.
45
+ *
46
+ * @param graph - The dependency graph to check
47
+ * @returns Cycle detection result
48
+ */
49
+ static detect(graph) {
50
+ const visitState = new Map();
51
+ const parent = new Map();
52
+ // Initialize all nodes as unvisited
53
+ for (const stepId of graph.nodes.keys()) {
54
+ visitState.set(stepId, VisitState.WHITE);
55
+ }
56
+ // Try DFS from each unvisited node
57
+ for (const stepId of graph.nodes.keys()) {
58
+ if (visitState.get(stepId) === VisitState.WHITE) {
59
+ const result = this.dfs(stepId, graph, visitState, parent);
60
+ if (result.hasCycle) {
61
+ return result;
62
+ }
63
+ }
64
+ }
65
+ return { hasCycle: false };
66
+ }
67
+ /**
68
+ * Depth-first search to detect cycles.
69
+ *
70
+ * @param nodeId - Current node being visited
71
+ * @param graph - The dependency graph
72
+ * @param visitState - Visit state for each node
73
+ * @param parent - Parent pointers for cycle reconstruction
74
+ * @returns Cycle detection result
75
+ */
76
+ static dfs(nodeId, graph, visitState, parent) {
77
+ // Mark current node as being visited (GRAY)
78
+ visitState.set(nodeId, VisitState.GRAY);
79
+ // Visit all dependencies (outgoing edges)
80
+ const dependencies = graph.adjacencyList.get(nodeId) || [];
81
+ for (const dependency of dependencies) {
82
+ const state = visitState.get(dependency);
83
+ if (state === VisitState.GRAY) {
84
+ // Found a cycle! Reconstruct the cycle path
85
+ const cyclePath = this.reconstructCycle(nodeId, dependency, parent);
86
+ return {
87
+ hasCycle: true,
88
+ cyclePath: Object.freeze([...cyclePath, dependency]), // Complete the cycle
89
+ };
90
+ }
91
+ if (state === VisitState.WHITE) {
92
+ // Unvisited node, explore it
93
+ parent.set(dependency, nodeId);
94
+ const result = this.dfs(dependency, graph, visitState, parent);
95
+ if (result.hasCycle) {
96
+ return result;
97
+ }
98
+ }
99
+ // BLACK nodes are already fully explored, skip them
100
+ }
101
+ // All descendants explored, mark as fully visited (BLACK)
102
+ visitState.set(nodeId, VisitState.BLACK);
103
+ return { hasCycle: false };
104
+ }
105
+ /**
106
+ * Reconstruct the cycle path from parent pointers.
107
+ *
108
+ * @param start - Node where cycle was detected
109
+ * @param cycleNode - The GRAY node that created the cycle
110
+ * @param parent - Parent pointers
111
+ * @returns The cycle path
112
+ */
113
+ static reconstructCycle(start, cycleNode, parent) {
114
+ const cycle = [start];
115
+ let current = start;
116
+ // Walk back through parents until we reach the cycle node
117
+ while (current !== cycleNode) {
118
+ const parentNode = parent.get(current);
119
+ if (!parentNode) {
120
+ // This shouldn't happen in valid DFS, but handle it gracefully
121
+ break;
122
+ }
123
+ cycle.unshift(parentNode);
124
+ current = parentNode;
125
+ }
126
+ return cycle;
127
+ }
128
+ /**
129
+ * Check for cycles and throw if found (convenience method).
130
+ * This is the "fail fast" version.
131
+ *
132
+ * @param graph - The dependency graph to check
133
+ * @throws WorkflowValidationError if a cycle is detected
134
+ */
135
+ static detectAndThrow(graph) {
136
+ const result = this.detect(graph);
137
+ if (result.hasCycle && result.cyclePath) {
138
+ const cycleStr = result.cyclePath.join(' → ');
139
+ throw new WorkflowValidationError(`Circular dependency detected: ${cycleStr}`, {
140
+ cyclePath: result.cyclePath,
141
+ hint: 'Check the "needs" fields in your workflow. Steps cannot depend on each other in a cycle.',
142
+ affectedSteps: result.cyclePath,
143
+ });
144
+ }
145
+ }
146
+ /**
147
+ * Find all strongly connected components (SCCs) in the graph.
148
+ * This is more advanced than simple cycle detection - it finds
149
+ * all groups of nodes that form cycles with each other.
150
+ *
151
+ * Uses Tarjan's algorithm.
152
+ *
153
+ * @param graph - The dependency graph
154
+ * @returns Array of strongly connected components (each is an array of step IDs)
155
+ */
156
+ static findStronglyConnectedComponents(graph) {
157
+ const index = new Map();
158
+ const lowLink = new Map();
159
+ const onStack = new Map();
160
+ const stack = [];
161
+ const sccs = [];
162
+ let currentIndex = 0;
163
+ for (const nodeId of graph.nodes.keys()) {
164
+ if (!index.has(nodeId)) {
165
+ this.strongConnect(nodeId, graph, index, lowLink, onStack, stack, sccs, currentIndex);
166
+ }
167
+ }
168
+ return sccs;
169
+ }
170
+ /**
171
+ * Tarjan's SCC algorithm helper
172
+ */
173
+ static strongConnect(nodeId, graph, index, lowLink, onStack, stack, sccs, currentIndex) {
174
+ // Set depth index and low link
175
+ index.set(nodeId, currentIndex);
176
+ lowLink.set(nodeId, currentIndex);
177
+ currentIndex++;
178
+ stack.push(nodeId);
179
+ onStack.set(nodeId, true);
180
+ // Visit all dependencies
181
+ const dependencies = graph.adjacencyList.get(nodeId) || [];
182
+ for (const dependency of dependencies) {
183
+ if (!index.has(dependency)) {
184
+ // Successor has not been visited; recurse
185
+ currentIndex = this.strongConnect(dependency, graph, index, lowLink, onStack, stack, sccs, currentIndex);
186
+ lowLink.set(nodeId, Math.min(lowLink.get(nodeId), lowLink.get(dependency)));
187
+ }
188
+ else if (onStack.get(dependency)) {
189
+ // Successor is on the stack, hence in current SCC
190
+ lowLink.set(nodeId, Math.min(lowLink.get(nodeId), index.get(dependency)));
191
+ }
192
+ }
193
+ // If nodeId is a root node, pop the stack and output SCC
194
+ if (lowLink.get(nodeId) === index.get(nodeId)) {
195
+ const scc = [];
196
+ let w;
197
+ do {
198
+ w = stack.pop();
199
+ onStack.set(w, false);
200
+ scc.push(w);
201
+ } while (w !== nodeId);
202
+ // Only add SCCs with more than one node (actual cycles)
203
+ if (scc.length > 1) {
204
+ sccs.push(scc);
205
+ }
206
+ }
207
+ return currentIndex;
208
+ }
209
+ }
210
+ //# sourceMappingURL=CycleDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CycleDetector.js","sourceRoot":"","sources":["../../src/graph/CycleDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Dependency Graph
3
+ *
4
+ * Central exports for graph analysis utilities.
5
+ * These tools work together to validate and plan workflow execution.
6
+ *
7
+ * Flow:
8
+ * 1. DependencyResolver - Build graph from workflow steps
9
+ * 2. CycleDetector - Validate no circular dependencies
10
+ * 3. TopologicalSorter - Generate execution phases
11
+ * 4. ExecutionPlan - Coordinate above to create execution plan
12
+ */
13
+ export { DependencyResolver, type DependencyGraph, type DependencyEdge } from './DependencyResolver.js';
14
+ export { CycleDetector, type CycleDetectionResult } from './CycleDetector.js';
15
+ export { TopologicalSorter, type TopologicalSortResult, type CriticalPathResult, } from './TopologicalSorter.js';
16
+ //# sourceMappingURL=DependencyGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraph.d.ts","sourceRoot":"","sources":["../../src/graph/DependencyGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Dependency Graph
3
+ *
4
+ * Central exports for graph analysis utilities.
5
+ * These tools work together to validate and plan workflow execution.
6
+ *
7
+ * Flow:
8
+ * 1. DependencyResolver - Build graph from workflow steps
9
+ * 2. CycleDetector - Validate no circular dependencies
10
+ * 3. TopologicalSorter - Generate execution phases
11
+ * 4. ExecutionPlan - Coordinate above to create execution plan
12
+ */
13
+ export { DependencyResolver } from './DependencyResolver.js';
14
+ export { CycleDetector } from './CycleDetector.js';
15
+ export { TopologicalSorter, } from './TopologicalSorter.js';
16
+ //# sourceMappingURL=DependencyGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraph.js","sourceRoot":"","sources":["../../src/graph/DependencyGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,kBAAkB,EAA6C,MAAM,yBAAyB,CAAC;AACxG,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * DependencyResolver
3
+ *
4
+ * Builds the dependency graph from workflow steps.
5
+ * This is pure analysis - NO execution, NO ordering, NO retries.
6
+ *
7
+ * Responsibilities:
8
+ * 1. Read the `needs` field from each step
9
+ * 2. Build edges between steps (stepId → dependencies)
10
+ * 3. Detect missing step references (fail fast)
11
+ * 4. Validate that all dependencies exist
12
+ *
13
+ * What it does NOT do:
14
+ * - Does NOT check for cycles (that's CycleDetector's job)
15
+ * - Does NOT order steps (that's TopologicalSort's job)
16
+ * - Does NOT execute anything (that's StepExecutor's job)
17
+ * - Does NOT manage state (that's ExecutionState's job)
18
+ *
19
+ * This is about correctness, not scheduling.
20
+ */
21
+ import { ExecutionNode } from '../execution/ExecutionNode.js';
22
+ /**
23
+ * Represents a directed edge in the dependency graph
24
+ */
25
+ export interface DependencyEdge {
26
+ /** The step that depends on another */
27
+ readonly from: string;
28
+ /** The step that must complete first */
29
+ readonly to: string;
30
+ }
31
+ /**
32
+ * The complete dependency graph structure
33
+ */
34
+ export interface DependencyGraph {
35
+ /** All execution nodes indexed by stepId */
36
+ readonly nodes: ReadonlyMap<string, ExecutionNode>;
37
+ /** All dependency edges */
38
+ readonly edges: readonly DependencyEdge[];
39
+ /** Adjacency list: stepId → list of dependencies */
40
+ readonly adjacencyList: ReadonlyMap<string, readonly string[]>;
41
+ /** Reverse adjacency list: stepId → list of dependents */
42
+ readonly reverseDependencies: ReadonlyMap<string, readonly string[]>;
43
+ }
44
+ /**
45
+ * Resolves dependencies between workflow steps.
46
+ * Pure function - takes nodes, returns validated graph.
47
+ */
48
+ export declare class DependencyResolver {
49
+ /**
50
+ * Build the dependency graph from execution nodes.
51
+ * Validates that all dependencies exist and builds edge list.
52
+ *
53
+ * @param nodes - Array of execution nodes from workflow
54
+ * @returns Validated dependency graph
55
+ * @throws WorkflowValidationError if dependencies are invalid
56
+ */
57
+ static resolve(nodes: ExecutionNode[]): DependencyGraph;
58
+ /**
59
+ * Get all steps that have no dependencies (entry points).
60
+ * These can be executed immediately.
61
+ *
62
+ * @param graph - The dependency graph
63
+ * @returns Array of step IDs with no dependencies
64
+ */
65
+ static getEntryPoints(graph: DependencyGraph): string[];
66
+ /**
67
+ * Get all steps that have no dependents (exit points).
68
+ * These are the final steps in the workflow.
69
+ *
70
+ * @param graph - The dependency graph
71
+ * @returns Array of step IDs with no dependents
72
+ */
73
+ static getExitPoints(graph: DependencyGraph): string[];
74
+ /**
75
+ * Calculate the in-degree for each node (number of dependencies).
76
+ * Useful for topological sorting algorithms like Kahn's.
77
+ *
78
+ * @param graph - The dependency graph
79
+ * @returns Map of stepId → in-degree
80
+ */
81
+ static calculateInDegrees(graph: DependencyGraph): Map<string, number>;
82
+ /**
83
+ * Calculate the out-degree for each node (number of dependents).
84
+ *
85
+ * @param graph - The dependency graph
86
+ * @returns Map of stepId → out-degree
87
+ */
88
+ static calculateOutDegrees(graph: DependencyGraph): Map<string, number>;
89
+ }
90
+ //# sourceMappingURL=DependencyResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyResolver.d.ts","sourceRoot":"","sources":["../../src/graph/DependencyResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnD,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC/D,0DAA0D;IAC1D,QAAQ,CAAC,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACtE;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,eAAe;IAoFvD;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAYvD;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAYtD;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAUtE;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CASxE"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * DependencyResolver
3
+ *
4
+ * Builds the dependency graph from workflow steps.
5
+ * This is pure analysis - NO execution, NO ordering, NO retries.
6
+ *
7
+ * Responsibilities:
8
+ * 1. Read the `needs` field from each step
9
+ * 2. Build edges between steps (stepId → dependencies)
10
+ * 3. Detect missing step references (fail fast)
11
+ * 4. Validate that all dependencies exist
12
+ *
13
+ * What it does NOT do:
14
+ * - Does NOT check for cycles (that's CycleDetector's job)
15
+ * - Does NOT order steps (that's TopologicalSort's job)
16
+ * - Does NOT execute anything (that's StepExecutor's job)
17
+ * - Does NOT manage state (that's ExecutionState's job)
18
+ *
19
+ * This is about correctness, not scheduling.
20
+ */
21
+ import { WorkflowValidationError } from '@dev-ecosystem/core';
22
+ /**
23
+ * Resolves dependencies between workflow steps.
24
+ * Pure function - takes nodes, returns validated graph.
25
+ */
26
+ export class DependencyResolver {
27
+ /**
28
+ * Build the dependency graph from execution nodes.
29
+ * Validates that all dependencies exist and builds edge list.
30
+ *
31
+ * @param nodes - Array of execution nodes from workflow
32
+ * @returns Validated dependency graph
33
+ * @throws WorkflowValidationError if dependencies are invalid
34
+ */
35
+ static resolve(nodes) {
36
+ // Step 1: Build node map for quick lookup
37
+ const nodeMap = new Map();
38
+ for (const node of nodes) {
39
+ if (nodeMap.has(node.stepId)) {
40
+ throw new WorkflowValidationError(`Duplicate step ID found: ${node.stepId}`, { stepId: node.stepId, hint: 'Each step must have a unique ID' });
41
+ }
42
+ nodeMap.set(node.stepId, node);
43
+ }
44
+ // Step 2: Validate dependencies and build edges
45
+ const edges = [];
46
+ const adjacencyList = new Map();
47
+ const reverseDependencies = new Map();
48
+ // Initialize adjacency lists for all nodes
49
+ for (const node of nodes) {
50
+ adjacencyList.set(node.stepId, []);
51
+ reverseDependencies.set(node.stepId, []);
52
+ }
53
+ // Build edges and validate references
54
+ for (const node of nodes) {
55
+ for (const dependency of node.dependencies) {
56
+ // Validate that the dependency exists
57
+ if (!nodeMap.has(dependency)) {
58
+ throw new WorkflowValidationError(`Step "${node.stepId}" depends on non-existent step "${dependency}"`, {
59
+ stepId: node.stepId,
60
+ missingDependency: dependency,
61
+ availableSteps: Array.from(nodeMap.keys()),
62
+ hint: `Check that "${dependency}" is spelled correctly and exists in the workflow`,
63
+ });
64
+ }
65
+ // Self-dependency check
66
+ if (node.stepId === dependency) {
67
+ throw new WorkflowValidationError(`Step "${node.stepId}" cannot depend on itself`, {
68
+ stepId: node.stepId,
69
+ hint: 'Remove self-reference from needs field',
70
+ });
71
+ }
72
+ // Create edge
73
+ edges.push({
74
+ from: node.stepId,
75
+ to: dependency,
76
+ });
77
+ // Update adjacency list (stepId → dependencies)
78
+ adjacencyList.get(node.stepId).push(dependency);
79
+ // Update reverse dependencies (dependency → dependents)
80
+ reverseDependencies.get(dependency).push(node.stepId);
81
+ }
82
+ }
83
+ // Step 3: Freeze collections for immutability
84
+ const frozenAdjacencyList = new Map();
85
+ for (const [stepId, deps] of adjacencyList) {
86
+ frozenAdjacencyList.set(stepId, Object.freeze([...deps]));
87
+ }
88
+ const frozenReverseDependencies = new Map();
89
+ for (const [stepId, deps] of reverseDependencies) {
90
+ frozenReverseDependencies.set(stepId, Object.freeze([...deps]));
91
+ }
92
+ return {
93
+ nodes: nodeMap,
94
+ edges: Object.freeze(edges),
95
+ adjacencyList: frozenAdjacencyList,
96
+ reverseDependencies: frozenReverseDependencies,
97
+ };
98
+ }
99
+ /**
100
+ * Get all steps that have no dependencies (entry points).
101
+ * These can be executed immediately.
102
+ *
103
+ * @param graph - The dependency graph
104
+ * @returns Array of step IDs with no dependencies
105
+ */
106
+ static getEntryPoints(graph) {
107
+ const entryPoints = [];
108
+ for (const [stepId, dependencies] of graph.adjacencyList) {
109
+ if (dependencies.length === 0) {
110
+ entryPoints.push(stepId);
111
+ }
112
+ }
113
+ return entryPoints;
114
+ }
115
+ /**
116
+ * Get all steps that have no dependents (exit points).
117
+ * These are the final steps in the workflow.
118
+ *
119
+ * @param graph - The dependency graph
120
+ * @returns Array of step IDs with no dependents
121
+ */
122
+ static getExitPoints(graph) {
123
+ const exitPoints = [];
124
+ for (const [stepId, dependents] of graph.reverseDependencies) {
125
+ if (dependents.length === 0) {
126
+ exitPoints.push(stepId);
127
+ }
128
+ }
129
+ return exitPoints;
130
+ }
131
+ /**
132
+ * Calculate the in-degree for each node (number of dependencies).
133
+ * Useful for topological sorting algorithms like Kahn's.
134
+ *
135
+ * @param graph - The dependency graph
136
+ * @returns Map of stepId → in-degree
137
+ */
138
+ static calculateInDegrees(graph) {
139
+ const inDegrees = new Map();
140
+ for (const [stepId, dependencies] of graph.adjacencyList) {
141
+ inDegrees.set(stepId, dependencies.length);
142
+ }
143
+ return inDegrees;
144
+ }
145
+ /**
146
+ * Calculate the out-degree for each node (number of dependents).
147
+ *
148
+ * @param graph - The dependency graph
149
+ * @returns Map of stepId → out-degree
150
+ */
151
+ static calculateOutDegrees(graph) {
152
+ const outDegrees = new Map();
153
+ for (const [stepId, dependents] of graph.reverseDependencies) {
154
+ outDegrees.set(stepId, dependents.length);
155
+ }
156
+ return outDegrees;
157
+ }
158
+ }
159
+ //# sourceMappingURL=DependencyResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyResolver.js","sourceRoot":"","sources":["../../src/graph/DependencyResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * TopologicalSorter
3
+ *
4
+ * Performs topological sorting on a dependency graph using Kahn's algorithm.
5
+ * This is what makes parallel execution possible.
6
+ *
7
+ * Purpose:
8
+ * - Convert DAG into execution phases
9
+ * - Group independent steps into phases (parallelization!)
10
+ * - Ensure dependencies are satisfied before execution
11
+ * - This is "the moment Orbyt becomes real" - we go from sequential to parallel
12
+ *
13
+ * Algorithm: Kahn's Algorithm (BFS-based)
14
+ * 1. Start with all nodes that have no dependencies (in-degree = 0)
15
+ * 2. Remove them and their edges, collect them as Phase 1
16
+ * 3. Find new nodes with in-degree = 0 (Phase 2)
17
+ * 4. Repeat until all nodes are processed
18
+ *
19
+ * Result: [['validate'], ['process', 'lint'], ['upload']]
20
+ * Phase 1: validate (runs alone)
21
+ * Phase 2: process and lint (run in parallel!)
22
+ * Phase 3: upload (runs after both complete)
23
+ *
24
+ * What it does NOT do:
25
+ * - Does NOT execute steps (that's StepExecutor's job)
26
+ * - Does NOT manage state (that's ExecutionState's job)
27
+ * - Does NOT add retries (that's StepExecutor's job)
28
+ */
29
+ import { DependencyGraph } from './DependencyResolver.js';
30
+ /**
31
+ * Result of topological sorting
32
+ */
33
+ export interface TopologicalSortResult {
34
+ /**
35
+ * Execution phases - each inner array is a phase,
36
+ * steps in the same phase can run in parallel
37
+ */
38
+ readonly phases: readonly (readonly string[])[];
39
+ /**
40
+ * Total number of phases
41
+ */
42
+ readonly phaseCount: number;
43
+ /**
44
+ * Map of stepId → phase number (0-indexed)
45
+ */
46
+ readonly stepPhases: ReadonlyMap<string, number>;
47
+ }
48
+ /**
49
+ * Performs topological sorting to determine execution order.
50
+ * Pure function - takes validated graph, returns execution phases.
51
+ */
52
+ export declare class TopologicalSorter {
53
+ /**
54
+ * Sort the dependency graph into execution phases using Kahn's algorithm.
55
+ *
56
+ * This is BFS-based and naturally groups independent steps into phases.
57
+ *
58
+ * @param graph - The dependency graph (must be acyclic)
59
+ * @returns Topological sort result with execution phases
60
+ * @throws WorkflowValidationError if graph contains cycles
61
+ */
62
+ static sort(graph: DependencyGraph): TopologicalSortResult;
63
+ /**
64
+ * Sort using DFS-based algorithm (alternative to Kahn's).
65
+ * This produces a valid topological order but doesn't naturally
66
+ * group into phases like Kahn's does.
67
+ *
68
+ * Use this if you need a single linear order rather than phases.
69
+ *
70
+ * @param graph - The dependency graph
71
+ * @returns Array of step IDs in topological order
72
+ */
73
+ static sortLinear(graph: DependencyGraph): string[];
74
+ /**
75
+ * Calculate the critical path through the dependency graph.
76
+ * The critical path is the longest path from entry to exit points.
77
+ *
78
+ * This is useful for:
79
+ * - Estimating minimum workflow execution time
80
+ * - Identifying bottlenecks
81
+ * - Optimizing parallelization
82
+ *
83
+ * @param graph - The dependency graph
84
+ * @param stepDurations - Map of stepId → estimated duration (ms)
85
+ * @returns Critical path information
86
+ */
87
+ static calculateCriticalPath(graph: DependencyGraph, stepDurations: Map<string, number>): CriticalPathResult;
88
+ }
89
+ /**
90
+ * Result of critical path analysis
91
+ */
92
+ export interface CriticalPathResult {
93
+ /** Steps on the critical path (zero slack) */
94
+ readonly criticalPath: readonly string[];
95
+ /** Estimated total workflow duration */
96
+ readonly workflowDuration: number;
97
+ /** Earliest start time for each step */
98
+ readonly earliestStart: ReadonlyMap<string, number>;
99
+ /** Latest start time for each step without delaying workflow */
100
+ readonly latestStart: ReadonlyMap<string, number>;
101
+ /** Slack (float) for each step - how much it can be delayed */
102
+ readonly slack: ReadonlyMap<string, number>;
103
+ }
104
+ //# sourceMappingURL=TopologicalSorter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopologicalSorter.d.ts","sourceRoot":"","sources":["../../src/graph/TopologicalSorter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IAEhD;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,qBAAqB;IAoE1D;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IA6BnD;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,qBAAqB,CAC1B,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,kBAAkB;CAkFtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,wCAAwC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C"}