@shipfox/api-workflows 2.0.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 (661) hide show
  1. package/.turbo/turbo-build.log +2 -0
  2. package/.turbo/turbo-type$colon$emit.log +1 -0
  3. package/.turbo/turbo-type.log +1 -0
  4. package/CHANGELOG.md +311 -0
  5. package/LICENSE +21 -0
  6. package/dist/core/agent-tool-capability-warning.d.ts +7 -0
  7. package/dist/core/agent-tool-capability-warning.d.ts.map +1 -0
  8. package/dist/core/agent-tool-capability-warning.js +149 -0
  9. package/dist/core/agent-tool-capability-warning.js.map +1 -0
  10. package/dist/core/agent-tools.d.ts +51 -0
  11. package/dist/core/agent-tools.d.ts.map +1 -0
  12. package/dist/core/agent-tools.js +296 -0
  13. package/dist/core/agent-tools.js.map +1 -0
  14. package/dist/core/checkout.d.ts +29 -0
  15. package/dist/core/checkout.d.ts.map +1 -0
  16. package/dist/core/checkout.js +42 -0
  17. package/dist/core/checkout.js.map +1 -0
  18. package/dist/core/condition-trace.d.ts +13 -0
  19. package/dist/core/condition-trace.d.ts.map +1 -0
  20. package/dist/core/condition-trace.js +51 -0
  21. package/dist/core/condition-trace.js.map +1 -0
  22. package/dist/core/entities/index.d.ts +5 -0
  23. package/dist/core/entities/index.d.ts.map +1 -0
  24. package/dist/core/entities/index.js +3 -0
  25. package/dist/core/entities/index.js.map +1 -0
  26. package/dist/core/entities/job-execution.d.ts +30 -0
  27. package/dist/core/entities/job-execution.d.ts.map +1 -0
  28. package/dist/core/entities/job-execution.js +3 -0
  29. package/dist/core/entities/job-execution.js.map +1 -0
  30. package/dist/core/entities/job-listener-event.d.ts +15 -0
  31. package/dist/core/entities/job-listener-event.d.ts.map +1 -0
  32. package/dist/core/entities/job-listener-event.js +3 -0
  33. package/dist/core/entities/job-listener-event.js.map +1 -0
  34. package/dist/core/entities/job.d.ts +54 -0
  35. package/dist/core/entities/job.d.ts.map +1 -0
  36. package/dist/core/entities/job.js +29 -0
  37. package/dist/core/entities/job.js.map +1 -0
  38. package/dist/core/entities/step.d.ts +86 -0
  39. package/dist/core/entities/step.d.ts.map +1 -0
  40. package/dist/core/entities/step.js +12 -0
  41. package/dist/core/entities/step.js.map +1 -0
  42. package/dist/core/entities/workflow-run-attempt.d.ts +20 -0
  43. package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -0
  44. package/dist/core/entities/workflow-run-attempt.js +3 -0
  45. package/dist/core/entities/workflow-run-attempt.js.map +1 -0
  46. package/dist/core/entities/workflow-run.d.ts +66 -0
  47. package/dist/core/entities/workflow-run.d.ts.map +1 -0
  48. package/dist/core/entities/workflow-run.js +10 -0
  49. package/dist/core/entities/workflow-run.js.map +1 -0
  50. package/dist/core/errors.d.ts +85 -0
  51. package/dist/core/errors.d.ts.map +1 -0
  52. package/dist/core/errors.js +134 -0
  53. package/dist/core/errors.js.map +1 -0
  54. package/dist/core/index.d.ts +14 -0
  55. package/dist/core/index.d.ts.map +1 -0
  56. package/dist/core/index.js +9 -0
  57. package/dist/core/index.js.map +1 -0
  58. package/dist/core/job-execution-outcome.d.ts +29 -0
  59. package/dist/core/job-execution-outcome.d.ts.map +1 -0
  60. package/dist/core/job-execution-outcome.js +31 -0
  61. package/dist/core/job-execution-outcome.js.map +1 -0
  62. package/dist/core/job-execution.d.ts +37 -0
  63. package/dist/core/job-execution.d.ts.map +1 -0
  64. package/dist/core/job-execution.js +425 -0
  65. package/dist/core/job-execution.js.map +1 -0
  66. package/dist/core/job-transition/decide-job-activation.d.ts +29 -0
  67. package/dist/core/job-transition/decide-job-activation.d.ts.map +1 -0
  68. package/dist/core/job-transition/decide-job-activation.js +51 -0
  69. package/dist/core/job-transition/decide-job-activation.js.map +1 -0
  70. package/dist/core/job-transition/derive-job-execution-outputs.d.ts +18 -0
  71. package/dist/core/job-transition/derive-job-execution-outputs.d.ts.map +1 -0
  72. package/dist/core/job-transition/derive-job-execution-outputs.js +23 -0
  73. package/dist/core/job-transition/derive-job-execution-outputs.js.map +1 -0
  74. package/dist/core/job-transition/derive-job-success.d.ts +16 -0
  75. package/dist/core/job-transition/derive-job-success.d.ts.map +1 -0
  76. package/dist/core/job-transition/derive-job-success.js +47 -0
  77. package/dist/core/job-transition/derive-job-success.js.map +1 -0
  78. package/dist/core/job-transition/index.d.ts +5 -0
  79. package/dist/core/job-transition/index.d.ts.map +1 -0
  80. package/dist/core/job-transition/index.js +6 -0
  81. package/dist/core/job-transition/index.js.map +1 -0
  82. package/dist/core/job-transition/runtime-completion-status-for-job.d.ts +4 -0
  83. package/dist/core/job-transition/runtime-completion-status-for-job.d.ts.map +1 -0
  84. package/dist/core/job-transition/runtime-completion-status-for-job.js +8 -0
  85. package/dist/core/job-transition/runtime-completion-status-for-job.js.map +1 -0
  86. package/dist/core/listener-execution-materialization.d.ts +30 -0
  87. package/dist/core/listener-execution-materialization.d.ts.map +1 -0
  88. package/dist/core/listener-execution-materialization.js +87 -0
  89. package/dist/core/listener-execution-materialization.js.map +1 -0
  90. package/dist/core/run-workflow.d.ts +11 -0
  91. package/dist/core/run-workflow.d.ts.map +1 -0
  92. package/dist/core/run-workflow.js +28 -0
  93. package/dist/core/run-workflow.js.map +1 -0
  94. package/dist/core/source-control.d.ts +5 -0
  95. package/dist/core/source-control.d.ts.map +1 -0
  96. package/dist/core/source-control.js +19 -0
  97. package/dist/core/source-control.js.map +1 -0
  98. package/dist/core/step-config/agent.d.ts +49 -0
  99. package/dist/core/step-config/agent.d.ts.map +1 -0
  100. package/dist/core/step-config/agent.js +337 -0
  101. package/dist/core/step-config/agent.js.map +1 -0
  102. package/dist/core/step-config/assemble-run-context.d.ts +94 -0
  103. package/dist/core/step-config/assemble-run-context.d.ts.map +1 -0
  104. package/dist/core/step-config/assemble-run-context.js +393 -0
  105. package/dist/core/step-config/assemble-run-context.js.map +1 -0
  106. package/dist/core/step-config/complete-step-dispatch-config.d.ts +13 -0
  107. package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -0
  108. package/dist/core/step-config/complete-step-dispatch-config.js +38 -0
  109. package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -0
  110. package/dist/core/step-config/fields.d.ts +38 -0
  111. package/dist/core/step-config/fields.d.ts.map +1 -0
  112. package/dist/core/step-config/fields.js +72 -0
  113. package/dist/core/step-config/fields.js.map +1 -0
  114. package/dist/core/step-config/index.d.ts +8 -0
  115. package/dist/core/step-config/index.d.ts.map +1 -0
  116. package/dist/core/step-config/index.js +7 -0
  117. package/dist/core/step-config/index.js.map +1 -0
  118. package/dist/core/step-config/materialize-job-execution-steps.d.ts +35 -0
  119. package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -0
  120. package/dist/core/step-config/materialize-job-execution-steps.js +92 -0
  121. package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -0
  122. package/dist/core/step-config/materialize-workflow-model.d.ts +42 -0
  123. package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -0
  124. package/dist/core/step-config/materialize-workflow-model.js +96 -0
  125. package/dist/core/step-config/materialize-workflow-model.js.map +1 -0
  126. package/dist/core/step-config/resolve-job-execution-name.d.ts +18 -0
  127. package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -0
  128. package/dist/core/step-config/resolve-job-execution-name.js +36 -0
  129. package/dist/core/step-config/resolve-job-execution-name.js.map +1 -0
  130. package/dist/core/step-config/resolve-step-config.d.ts +33 -0
  131. package/dist/core/step-config/resolve-step-config.d.ts.map +1 -0
  132. package/dist/core/step-config/resolve-step-config.js +164 -0
  133. package/dist/core/step-config/resolve-step-config.js.map +1 -0
  134. package/dist/core/step-config/run.d.ts +39 -0
  135. package/dist/core/step-config/run.d.ts.map +1 -0
  136. package/dist/core/step-config/run.js +360 -0
  137. package/dist/core/step-config/run.js.map +1 -0
  138. package/dist/core/step-config/workflow-evaluation-context.d.ts +6 -0
  139. package/dist/core/step-config/workflow-evaluation-context.d.ts.map +1 -0
  140. package/dist/core/step-config/workflow-evaluation-context.js +3 -0
  141. package/dist/core/step-config/workflow-evaluation-context.js.map +1 -0
  142. package/dist/core/step-transition/apply-step-transition.d.ts +26 -0
  143. package/dist/core/step-transition/apply-step-transition.d.ts.map +1 -0
  144. package/dist/core/step-transition/apply-step-transition.js +141 -0
  145. package/dist/core/step-transition/apply-step-transition.js.map +1 -0
  146. package/dist/core/step-transition/decide-step-transition.d.ts +71 -0
  147. package/dist/core/step-transition/decide-step-transition.d.ts.map +1 -0
  148. package/dist/core/step-transition/decide-step-transition.js +110 -0
  149. package/dist/core/step-transition/decide-step-transition.js.map +1 -0
  150. package/dist/core/step-transition/evaluate-gate.d.ts +28 -0
  151. package/dist/core/step-transition/evaluate-gate.d.ts.map +1 -0
  152. package/dist/core/step-transition/evaluate-gate.js +159 -0
  153. package/dist/core/step-transition/evaluate-gate.js.map +1 -0
  154. package/dist/core/step-transition/read-step-outputs.d.ts +3 -0
  155. package/dist/core/step-transition/read-step-outputs.d.ts.map +1 -0
  156. package/dist/core/step-transition/read-step-outputs.js +24 -0
  157. package/dist/core/step-transition/read-step-outputs.js.map +1 -0
  158. package/dist/core/workflow-run-creation.d.ts +43 -0
  159. package/dist/core/workflow-run-creation.d.ts.map +1 -0
  160. package/dist/core/workflow-run-creation.js +80 -0
  161. package/dist/core/workflow-run-creation.js.map +1 -0
  162. package/dist/core/workflow-scheduling/index.d.ts +5 -0
  163. package/dist/core/workflow-scheduling/index.d.ts.map +1 -0
  164. package/dist/core/workflow-scheduling/index.js +4 -0
  165. package/dist/core/workflow-scheduling/index.js.map +1 -0
  166. package/dist/core/workflow-scheduling/run-progress.d.ts +20 -0
  167. package/dist/core/workflow-scheduling/run-progress.d.ts.map +1 -0
  168. package/dist/core/workflow-scheduling/run-progress.js +40 -0
  169. package/dist/core/workflow-scheduling/run-progress.js.map +1 -0
  170. package/dist/core/workflow-scheduling/runtime-dag.d.ts +10 -0
  171. package/dist/core/workflow-scheduling/runtime-dag.d.ts.map +1 -0
  172. package/dist/core/workflow-scheduling/runtime-dag.js +3 -0
  173. package/dist/core/workflow-scheduling/runtime-dag.js.map +1 -0
  174. package/dist/core/workflow-scheduling/runtime-scheduling-command.d.ts +16 -0
  175. package/dist/core/workflow-scheduling/runtime-scheduling-command.d.ts.map +1 -0
  176. package/dist/core/workflow-scheduling/runtime-scheduling-command.js +3 -0
  177. package/dist/core/workflow-scheduling/runtime-scheduling-command.js.map +1 -0
  178. package/dist/core/workflow-scheduling/schedule-runtime-dag.d.ts +9 -0
  179. package/dist/core/workflow-scheduling/schedule-runtime-dag.d.ts.map +1 -0
  180. package/dist/core/workflow-scheduling/schedule-runtime-dag.js +72 -0
  181. package/dist/core/workflow-scheduling/schedule-runtime-dag.js.map +1 -0
  182. package/dist/db/db.d.ts +4959 -0
  183. package/dist/db/db.d.ts.map +1 -0
  184. package/dist/db/db.js +37 -0
  185. package/dist/db/db.js.map +1 -0
  186. package/dist/db/index.d.ts +9 -0
  187. package/dist/db/index.d.ts.map +1 -0
  188. package/dist/db/index.js +10 -0
  189. package/dist/db/index.js.map +1 -0
  190. package/dist/db/job-listener-events.d.ts +18 -0
  191. package/dist/db/job-listener-events.d.ts.map +1 -0
  192. package/dist/db/job-listener-events.js +59 -0
  193. package/dist/db/job-listener-events.js.map +1 -0
  194. package/dist/db/job-listeners.d.ts +55 -0
  195. package/dist/db/job-listeners.d.ts.map +1 -0
  196. package/dist/db/job-listeners.js +358 -0
  197. package/dist/db/job-listeners.js.map +1 -0
  198. package/dist/db/outbox-writes.d.ts +12 -0
  199. package/dist/db/outbox-writes.d.ts.map +1 -0
  200. package/dist/db/outbox-writes.js +20 -0
  201. package/dist/db/outbox-writes.js.map +1 -0
  202. package/dist/db/runner-lease-table.d.ts +469 -0
  203. package/dist/db/runner-lease-table.d.ts.map +1 -0
  204. package/dist/db/runner-lease-table.js +42 -0
  205. package/dist/db/runner-lease-table.js.map +1 -0
  206. package/dist/db/schema/common.d.ts +2 -0
  207. package/dist/db/schema/common.d.ts.map +1 -0
  208. package/dist/db/schema/common.js +4 -0
  209. package/dist/db/schema/common.js.map +1 -0
  210. package/dist/db/schema/job-executions.d.ts +311 -0
  211. package/dist/db/schema/job-executions.d.ts.map +1 -0
  212. package/dist/db/schema/job-executions.js +76 -0
  213. package/dist/db/schema/job-executions.js.map +1 -0
  214. package/dist/db/schema/job-listener-events.d.ts +200 -0
  215. package/dist/db/schema/job-listener-events.d.ts.map +1 -0
  216. package/dist/db/schema/job-listener-events.js +50 -0
  217. package/dist/db/schema/job-listener-events.js.map +1 -0
  218. package/dist/db/schema/jobs.d.ts +542 -0
  219. package/dist/db/schema/jobs.d.ts.map +1 -0
  220. package/dist/db/schema/jobs.js +121 -0
  221. package/dist/db/schema/jobs.js.map +1 -0
  222. package/dist/db/schema/outbox.d.ts +195 -0
  223. package/dist/db/schema/outbox.d.ts.map +1 -0
  224. package/dist/db/schema/outbox.js +5 -0
  225. package/dist/db/schema/outbox.js.map +1 -0
  226. package/dist/db/schema/step-attempts.d.ts +330 -0
  227. package/dist/db/schema/step-attempts.d.ts.map +1 -0
  228. package/dist/db/schema/step-attempts.js +80 -0
  229. package/dist/db/schema/step-attempts.js.map +1 -0
  230. package/dist/db/schema/steps.d.ts +352 -0
  231. package/dist/db/schema/steps.d.ts.map +1 -0
  232. package/dist/db/schema/steps.js +80 -0
  233. package/dist/db/schema/steps.js.map +1 -0
  234. package/dist/db/schema/workflow-run-attempts.d.ts +239 -0
  235. package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -0
  236. package/dist/db/schema/workflow-run-attempts.js +53 -0
  237. package/dist/db/schema/workflow-run-attempts.js.map +1 -0
  238. package/dist/db/schema/workflow-runs.d.ts +360 -0
  239. package/dist/db/schema/workflow-runs.d.ts.map +1 -0
  240. package/dist/db/schema/workflow-runs.js +85 -0
  241. package/dist/db/schema/workflow-runs.js.map +1 -0
  242. package/dist/db/workflow-runs/job-executions.d.ts +49 -0
  243. package/dist/db/workflow-runs/job-executions.d.ts.map +1 -0
  244. package/dist/db/workflow-runs/job-executions.js +271 -0
  245. package/dist/db/workflow-runs/job-executions.js.map +1 -0
  246. package/dist/db/workflow-runs/jobs.d.ts +60 -0
  247. package/dist/db/workflow-runs/jobs.d.ts.map +1 -0
  248. package/dist/db/workflow-runs/jobs.js +288 -0
  249. package/dist/db/workflow-runs/jobs.js.map +1 -0
  250. package/dist/db/workflow-runs/outbox.d.ts +20 -0
  251. package/dist/db/workflow-runs/outbox.d.ts.map +1 -0
  252. package/dist/db/workflow-runs/outbox.js +68 -0
  253. package/dist/db/workflow-runs/outbox.js.map +1 -0
  254. package/dist/db/workflow-runs/queries.d.ts +71 -0
  255. package/dist/db/workflow-runs/queries.d.ts.map +1 -0
  256. package/dist/db/workflow-runs/queries.js +253 -0
  257. package/dist/db/workflow-runs/queries.js.map +1 -0
  258. package/dist/db/workflow-runs/run-create.d.ts +32 -0
  259. package/dist/db/workflow-runs/run-create.d.ts.map +1 -0
  260. package/dist/db/workflow-runs/run-create.js +288 -0
  261. package/dist/db/workflow-runs/run-create.js.map +1 -0
  262. package/dist/db/workflow-runs/run-graph.d.ts +27 -0
  263. package/dist/db/workflow-runs/run-graph.d.ts.map +1 -0
  264. package/dist/db/workflow-runs/run-graph.js +63 -0
  265. package/dist/db/workflow-runs/run-graph.js.map +1 -0
  266. package/dist/db/workflow-runs/run-rerun.d.ts +8 -0
  267. package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -0
  268. package/dist/db/workflow-runs/run-rerun.js +207 -0
  269. package/dist/db/workflow-runs/run-rerun.js.map +1 -0
  270. package/dist/db/workflow-runs/run-status.d.ts +24 -0
  271. package/dist/db/workflow-runs/run-status.d.ts.map +1 -0
  272. package/dist/db/workflow-runs/run-status.js +249 -0
  273. package/dist/db/workflow-runs/run-status.js.map +1 -0
  274. package/dist/db/workflow-runs/runs.d.ts +7 -0
  275. package/dist/db/workflow-runs/runs.d.ts.map +1 -0
  276. package/dist/db/workflow-runs/runs.js +5 -0
  277. package/dist/db/workflow-runs/runs.js.map +1 -0
  278. package/dist/db/workflow-runs/shared.d.ts +24 -0
  279. package/dist/db/workflow-runs/shared.d.ts.map +1 -0
  280. package/dist/db/workflow-runs/shared.js +50 -0
  281. package/dist/db/workflow-runs/shared.js.map +1 -0
  282. package/dist/db/workflow-runs/steps.d.ts +83 -0
  283. package/dist/db/workflow-runs/steps.d.ts.map +1 -0
  284. package/dist/db/workflow-runs/steps.js +246 -0
  285. package/dist/db/workflow-runs/steps.js.map +1 -0
  286. package/dist/db/workflow-runs.d.ts +12 -0
  287. package/dist/db/workflow-runs.d.ts.map +1 -0
  288. package/dist/db/workflow-runs.js +8 -0
  289. package/dist/db/workflow-runs.js.map +1 -0
  290. package/dist/index.d.ts +10 -0
  291. package/dist/index.d.ts.map +1 -0
  292. package/dist/index.js +54 -0
  293. package/dist/index.js.map +1 -0
  294. package/dist/metrics/index.d.ts +2 -0
  295. package/dist/metrics/index.d.ts.map +1 -0
  296. package/dist/metrics/index.js +3 -0
  297. package/dist/metrics/index.js.map +1 -0
  298. package/dist/metrics/instance.d.ts +20 -0
  299. package/dist/metrics/instance.d.ts.map +1 -0
  300. package/dist/metrics/instance.js +127 -0
  301. package/dist/metrics/instance.js.map +1 -0
  302. package/dist/metrics/service.d.ts +2 -0
  303. package/dist/metrics/service.d.ts.map +1 -0
  304. package/dist/metrics/service.js +30 -0
  305. package/dist/metrics/service.js.map +1 -0
  306. package/dist/presentation/dto/checkout-token.d.ts +6 -0
  307. package/dist/presentation/dto/checkout-token.d.ts.map +1 -0
  308. package/dist/presentation/dto/checkout-token.js +74 -0
  309. package/dist/presentation/dto/checkout-token.js.map +1 -0
  310. package/dist/presentation/dto/index.d.ts +4 -0
  311. package/dist/presentation/dto/index.d.ts.map +1 -0
  312. package/dist/presentation/dto/index.js +5 -0
  313. package/dist/presentation/dto/index.js.map +1 -0
  314. package/dist/presentation/dto/job.d.ts +6 -0
  315. package/dist/presentation/dto/job.d.ts.map +1 -0
  316. package/dist/presentation/dto/job.js +59 -0
  317. package/dist/presentation/dto/job.js.map +1 -0
  318. package/dist/presentation/dto/step.d.ts +6 -0
  319. package/dist/presentation/dto/step.d.ts.map +1 -0
  320. package/dist/presentation/dto/step.js +162 -0
  321. package/dist/presentation/dto/step.js.map +1 -0
  322. package/dist/presentation/dto/workflow-run.d.ts +6 -0
  323. package/dist/presentation/dto/workflow-run.d.ts.map +1 -0
  324. package/dist/presentation/dto/workflow-run.js +35 -0
  325. package/dist/presentation/dto/workflow-run.js.map +1 -0
  326. package/dist/presentation/index.d.ts +3 -0
  327. package/dist/presentation/index.d.ts.map +1 -0
  328. package/dist/presentation/index.js +4 -0
  329. package/dist/presentation/index.js.map +1 -0
  330. package/dist/presentation/routes/agent-runtime-config.d.ts +2 -0
  331. package/dist/presentation/routes/agent-runtime-config.d.ts.map +1 -0
  332. package/dist/presentation/routes/agent-runtime-config.js +71 -0
  333. package/dist/presentation/routes/agent-runtime-config.js.map +1 -0
  334. package/dist/presentation/routes/cancel-run.d.ts +2 -0
  335. package/dist/presentation/routes/cancel-run.d.ts.map +1 -0
  336. package/dist/presentation/routes/cancel-run.js +46 -0
  337. package/dist/presentation/routes/cancel-run.js.map +1 -0
  338. package/dist/presentation/routes/checkout-token.d.ts +2 -0
  339. package/dist/presentation/routes/checkout-token.d.ts.map +1 -0
  340. package/dist/presentation/routes/checkout-token.js +64 -0
  341. package/dist/presentation/routes/checkout-token.js.map +1 -0
  342. package/dist/presentation/routes/get-run-aggregates.d.ts +2 -0
  343. package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -0
  344. package/dist/presentation/routes/get-run-aggregates.js +60 -0
  345. package/dist/presentation/routes/get-run-aggregates.js.map +1 -0
  346. package/dist/presentation/routes/get-run.d.ts +2 -0
  347. package/dist/presentation/routes/get-run.d.ts.map +1 -0
  348. package/dist/presentation/routes/get-run.js +60 -0
  349. package/dist/presentation/routes/get-run.js.map +1 -0
  350. package/dist/presentation/routes/get-step-secrets.d.ts +2 -0
  351. package/dist/presentation/routes/get-step-secrets.d.ts.map +1 -0
  352. package/dist/presentation/routes/get-step-secrets.js +115 -0
  353. package/dist/presentation/routes/get-step-secrets.js.map +1 -0
  354. package/dist/presentation/routes/index.d.ts +4 -0
  355. package/dist/presentation/routes/index.d.ts.map +1 -0
  356. package/dist/presentation/routes/index.js +41 -0
  357. package/dist/presentation/routes/index.js.map +1 -0
  358. package/dist/presentation/routes/leased-step.d.ts +14 -0
  359. package/dist/presentation/routes/leased-step.d.ts.map +1 -0
  360. package/dist/presentation/routes/leased-step.js +50 -0
  361. package/dist/presentation/routes/leased-step.js.map +1 -0
  362. package/dist/presentation/routes/list-run-attempts.d.ts +2 -0
  363. package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -0
  364. package/dist/presentation/routes/list-run-attempts.js +35 -0
  365. package/dist/presentation/routes/list-run-attempts.js.map +1 -0
  366. package/dist/presentation/routes/list-runs.d.ts +2 -0
  367. package/dist/presentation/routes/list-runs.d.ts.map +1 -0
  368. package/dist/presentation/routes/list-runs.js +70 -0
  369. package/dist/presentation/routes/list-runs.js.map +1 -0
  370. package/dist/presentation/routes/next-step.d.ts +2 -0
  371. package/dist/presentation/routes/next-step.d.ts.map +1 -0
  372. package/dist/presentation/routes/next-step.js +65 -0
  373. package/dist/presentation/routes/next-step.js.map +1 -0
  374. package/dist/presentation/routes/report-step.d.ts +2 -0
  375. package/dist/presentation/routes/report-step.d.ts.map +1 -0
  376. package/dist/presentation/routes/report-step.js +73 -0
  377. package/dist/presentation/routes/report-step.js.map +1 -0
  378. package/dist/presentation/routes/require-accessible-run.d.ts +7 -0
  379. package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -0
  380. package/dist/presentation/routes/require-accessible-run.js +25 -0
  381. package/dist/presentation/routes/require-accessible-run.js.map +1 -0
  382. package/dist/presentation/routes/rerun-run.d.ts +2 -0
  383. package/dist/presentation/routes/rerun-run.d.ts.map +1 -0
  384. package/dist/presentation/routes/rerun-run.js +56 -0
  385. package/dist/presentation/routes/rerun-run.js.map +1 -0
  386. package/dist/presentation/subscribers/index.d.ts +8 -0
  387. package/dist/presentation/subscribers/index.d.ts.map +1 -0
  388. package/dist/presentation/subscribers/index.js +9 -0
  389. package/dist/presentation/subscribers/index.js.map +1 -0
  390. package/dist/presentation/subscribers/on-job-event-delivered.d.ts +3 -0
  391. package/dist/presentation/subscribers/on-job-event-delivered.d.ts.map +1 -0
  392. package/dist/presentation/subscribers/on-job-event-delivered.js +24 -0
  393. package/dist/presentation/subscribers/on-job-event-delivered.js.map +1 -0
  394. package/dist/presentation/subscribers/on-job-steps-settled.d.ts +3 -0
  395. package/dist/presentation/subscribers/on-job-steps-settled.d.ts.map +1 -0
  396. package/dist/presentation/subscribers/on-job-steps-settled.js +36 -0
  397. package/dist/presentation/subscribers/on-job-steps-settled.js.map +1 -0
  398. package/dist/presentation/subscribers/on-runner-job-claimed.d.ts +3 -0
  399. package/dist/presentation/subscribers/on-runner-job-claimed.d.ts.map +1 -0
  400. package/dist/presentation/subscribers/on-runner-job-claimed.js +20 -0
  401. package/dist/presentation/subscribers/on-runner-job-claimed.js.map +1 -0
  402. package/dist/presentation/subscribers/on-runner-job-lease-expired.d.ts +3 -0
  403. package/dist/presentation/subscribers/on-runner-job-lease-expired.d.ts.map +1 -0
  404. package/dist/presentation/subscribers/on-runner-job-lease-expired.js +35 -0
  405. package/dist/presentation/subscribers/on-runner-job-lease-expired.js.map +1 -0
  406. package/dist/presentation/subscribers/on-runner-job-queued.d.ts +3 -0
  407. package/dist/presentation/subscribers/on-runner-job-queued.d.ts.map +1 -0
  408. package/dist/presentation/subscribers/on-runner-job-queued.js +20 -0
  409. package/dist/presentation/subscribers/on-runner-job-queued.js.map +1 -0
  410. package/dist/presentation/subscribers/on-workflow-run-attempt-created.d.ts +3 -0
  411. package/dist/presentation/subscribers/on-workflow-run-attempt-created.d.ts.map +1 -0
  412. package/dist/presentation/subscribers/on-workflow-run-attempt-created.js +35 -0
  413. package/dist/presentation/subscribers/on-workflow-run-attempt-created.js.map +1 -0
  414. package/dist/presentation/subscribers/on-workflow-run-cancelled.d.ts +3 -0
  415. package/dist/presentation/subscribers/on-workflow-run-cancelled.d.ts.map +1 -0
  416. package/dist/presentation/subscribers/on-workflow-run-cancelled.js +25 -0
  417. package/dist/presentation/subscribers/on-workflow-run-cancelled.js.map +1 -0
  418. package/dist/temporal/activities/index.d.ts +23 -0
  419. package/dist/temporal/activities/index.d.ts.map +1 -0
  420. package/dist/temporal/activities/index.js +26 -0
  421. package/dist/temporal/activities/index.js.map +1 -0
  422. package/dist/temporal/activities/orchestration-activities.d.ts +130 -0
  423. package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -0
  424. package/dist/temporal/activities/orchestration-activities.js +188 -0
  425. package/dist/temporal/activities/orchestration-activities.js.map +1 -0
  426. package/dist/temporal/constants.d.ts +7 -0
  427. package/dist/temporal/constants.d.ts.map +1 -0
  428. package/dist/temporal/constants.js +8 -0
  429. package/dist/temporal/constants.js.map +1 -0
  430. package/dist/temporal/index.d.ts +3 -0
  431. package/dist/temporal/index.d.ts.map +1 -0
  432. package/dist/temporal/index.js +4 -0
  433. package/dist/temporal/index.js.map +1 -0
  434. package/dist/temporal/workflow-not-found.d.ts +2 -0
  435. package/dist/temporal/workflow-not-found.d.ts.map +1 -0
  436. package/dist/temporal/workflow-not-found.js +10 -0
  437. package/dist/temporal/workflow-not-found.js.map +1 -0
  438. package/dist/temporal/workflows/deadline.d.ts +3 -0
  439. package/dist/temporal/workflows/deadline.d.ts.map +1 -0
  440. package/dist/temporal/workflows/deadline.js +8 -0
  441. package/dist/temporal/workflows/deadline.js.map +1 -0
  442. package/dist/temporal/workflows/index.d.ts +4 -0
  443. package/dist/temporal/workflows/index.d.ts.map +1 -0
  444. package/dist/temporal/workflows/index.js +5 -0
  445. package/dist/temporal/workflows/index.js.map +1 -0
  446. package/dist/temporal/workflows/job-execution-orchestration.d.ts +27 -0
  447. package/dist/temporal/workflows/job-execution-orchestration.d.ts.map +1 -0
  448. package/dist/temporal/workflows/job-execution-orchestration.js +265 -0
  449. package/dist/temporal/workflows/job-execution-orchestration.js.map +1 -0
  450. package/dist/temporal/workflows/job-listener-orchestration.d.ts +40 -0
  451. package/dist/temporal/workflows/job-listener-orchestration.d.ts.map +1 -0
  452. package/dist/temporal/workflows/job-listener-orchestration.js +332 -0
  453. package/dist/temporal/workflows/job-listener-orchestration.js.map +1 -0
  454. package/dist/temporal/workflows/run-orchestration.d.ts +8 -0
  455. package/dist/temporal/workflows/run-orchestration.d.ts.map +1 -0
  456. package/dist/temporal/workflows/run-orchestration.js +243 -0
  457. package/dist/temporal/workflows/run-orchestration.js.map +1 -0
  458. package/dist/temporal/workflows/test-env.d.ts +114 -0
  459. package/dist/temporal/workflows/test-env.d.ts.map +1 -0
  460. package/dist/temporal/workflows/test-env.js +323 -0
  461. package/dist/temporal/workflows/test-env.js.map +1 -0
  462. package/dist/tsconfig.test.tsbuildinfo +1 -0
  463. package/drizzle/0000_initial.sql +211 -0
  464. package/drizzle/0001_agent_tool_materialization.sql +1 -0
  465. package/drizzle/meta/0000_snapshot.json +1613 -0
  466. package/drizzle/meta/_journal.json +20 -0
  467. package/drizzle.config.ts +7 -0
  468. package/package.json +91 -0
  469. package/src/core/README.md +79 -0
  470. package/src/core/agent-tool-capability-warning.test.ts +280 -0
  471. package/src/core/agent-tool-capability-warning.ts +200 -0
  472. package/src/core/agent-tools.ts +422 -0
  473. package/src/core/checkout.test.ts +112 -0
  474. package/src/core/checkout.ts +63 -0
  475. package/src/core/condition-trace.ts +64 -0
  476. package/src/core/entities/index.ts +9 -0
  477. package/src/core/entities/job-execution.ts +32 -0
  478. package/src/core/entities/job-listener-event.ts +15 -0
  479. package/src/core/entities/job.ts +91 -0
  480. package/src/core/entities/step.ts +126 -0
  481. package/src/core/entities/workflow-run-attempt.ts +21 -0
  482. package/src/core/entities/workflow-run.ts +94 -0
  483. package/src/core/errors.test.ts +45 -0
  484. package/src/core/errors.ts +209 -0
  485. package/src/core/index.ts +54 -0
  486. package/src/core/job-execution-outcome.ts +64 -0
  487. package/src/core/job-execution.test.ts +1560 -0
  488. package/src/core/job-execution.ts +581 -0
  489. package/src/core/job-transition/decide-job-activation.test.ts +196 -0
  490. package/src/core/job-transition/decide-job-activation.ts +79 -0
  491. package/src/core/job-transition/derive-job-execution-outputs.ts +41 -0
  492. package/src/core/job-transition/derive-job-success.test.ts +133 -0
  493. package/src/core/job-transition/derive-job-success.ts +67 -0
  494. package/src/core/job-transition/index.ts +11 -0
  495. package/src/core/job-transition/runtime-completion-status-for-job.ts +14 -0
  496. package/src/core/listener-execution-materialization.test.ts +49 -0
  497. package/src/core/listener-execution-materialization.ts +162 -0
  498. package/src/core/run-workflow.test.ts +229 -0
  499. package/src/core/run-workflow.ts +41 -0
  500. package/src/core/source-control.test.ts +17 -0
  501. package/src/core/source-control.ts +22 -0
  502. package/src/core/step-config/agent.ts +459 -0
  503. package/src/core/step-config/assemble-run-context.test.ts +1021 -0
  504. package/src/core/step-config/assemble-run-context.ts +535 -0
  505. package/src/core/step-config/complete-step-dispatch-config.test.ts +354 -0
  506. package/src/core/step-config/complete-step-dispatch-config.ts +40 -0
  507. package/src/core/step-config/fields.ts +111 -0
  508. package/src/core/step-config/index.ts +41 -0
  509. package/src/core/step-config/materialize-job-execution-steps.test.ts +494 -0
  510. package/src/core/step-config/materialize-job-execution-steps.ts +136 -0
  511. package/src/core/step-config/materialize-workflow-model.test.ts +1214 -0
  512. package/src/core/step-config/materialize-workflow-model.ts +140 -0
  513. package/src/core/step-config/resolve-job-execution-name.test.ts +94 -0
  514. package/src/core/step-config/resolve-job-execution-name.ts +51 -0
  515. package/src/core/step-config/resolve-step-config.ts +199 -0
  516. package/src/core/step-config/run.ts +467 -0
  517. package/src/core/step-config/workflow-evaluation-context.ts +6 -0
  518. package/src/core/step-transition/apply-step-transition.ts +163 -0
  519. package/src/core/step-transition/decide-step-transition.test.ts +307 -0
  520. package/src/core/step-transition/decide-step-transition.ts +200 -0
  521. package/src/core/step-transition/evaluate-gate.test.ts +317 -0
  522. package/src/core/step-transition/evaluate-gate.ts +168 -0
  523. package/src/core/step-transition/read-step-outputs.ts +27 -0
  524. package/src/core/workflow-run-creation.test.ts +155 -0
  525. package/src/core/workflow-run-creation.ts +131 -0
  526. package/src/core/workflow-scheduling/index.ts +15 -0
  527. package/src/core/workflow-scheduling/run-progress.test.ts +46 -0
  528. package/src/core/workflow-scheduling/run-progress.ts +68 -0
  529. package/src/core/workflow-scheduling/runtime-dag.ts +10 -0
  530. package/src/core/workflow-scheduling/runtime-scheduling-command.ts +20 -0
  531. package/src/core/workflow-scheduling/schedule-runtime-dag.test.ts +197 -0
  532. package/src/core/workflow-scheduling/schedule-runtime-dag.ts +115 -0
  533. package/src/db/db.ts +40 -0
  534. package/src/db/index.ts +86 -0
  535. package/src/db/job-listener-events.test.ts +113 -0
  536. package/src/db/job-listener-events.ts +73 -0
  537. package/src/db/job-listeners.test.ts +865 -0
  538. package/src/db/job-listeners.ts +564 -0
  539. package/src/db/outbox-writes.ts +40 -0
  540. package/src/db/rerun-listener.test.ts +64 -0
  541. package/src/db/run-timeout.test.ts +102 -0
  542. package/src/db/runner-lease-table.ts +39 -0
  543. package/src/db/schema/common.ts +3 -0
  544. package/src/db/schema/job-executions.ts +85 -0
  545. package/src/db/schema/job-listener-events.ts +58 -0
  546. package/src/db/schema/jobs.ts +136 -0
  547. package/src/db/schema/outbox.ts +4 -0
  548. package/src/db/schema/step-attempts.ts +99 -0
  549. package/src/db/schema/steps.ts +99 -0
  550. package/src/db/schema/workflow-run-attempts.ts +59 -0
  551. package/src/db/schema/workflow-runs.ts +112 -0
  552. package/src/db/workflow-runs/job-executions.test.ts +99 -0
  553. package/src/db/workflow-runs/job-executions.ts +421 -0
  554. package/src/db/workflow-runs/job-status.test.ts +532 -0
  555. package/src/db/workflow-runs/jobs.test.ts +194 -0
  556. package/src/db/workflow-runs/jobs.ts +418 -0
  557. package/src/db/workflow-runs/outbox.ts +109 -0
  558. package/src/db/workflow-runs/queries.test.ts +256 -0
  559. package/src/db/workflow-runs/queries.ts +437 -0
  560. package/src/db/workflow-runs/run-create.test.ts +1281 -0
  561. package/src/db/workflow-runs/run-create.ts +373 -0
  562. package/src/db/workflow-runs/run-graph.ts +95 -0
  563. package/src/db/workflow-runs/run-rerun.test.ts +625 -0
  564. package/src/db/workflow-runs/run-rerun.ts +266 -0
  565. package/src/db/workflow-runs/run-status.test.ts +425 -0
  566. package/src/db/workflow-runs/run-status.ts +391 -0
  567. package/src/db/workflow-runs/runs.ts +17 -0
  568. package/src/db/workflow-runs/shared.ts +84 -0
  569. package/src/db/workflow-runs/steps.test.ts +191 -0
  570. package/src/db/workflow-runs/steps.ts +476 -0
  571. package/src/db/workflow-runs.ts +111 -0
  572. package/src/index.ts +99 -0
  573. package/src/metrics/index.ts +1 -0
  574. package/src/metrics/instance.ts +160 -0
  575. package/src/metrics/service.ts +30 -0
  576. package/src/presentation/dto/checkout-token.test.ts +107 -0
  577. package/src/presentation/dto/checkout-token.ts +85 -0
  578. package/src/presentation/dto/index.ts +3 -0
  579. package/src/presentation/dto/job.test.ts +108 -0
  580. package/src/presentation/dto/job.ts +64 -0
  581. package/src/presentation/dto/step.test.ts +307 -0
  582. package/src/presentation/dto/step.ts +145 -0
  583. package/src/presentation/dto/workflow-run.ts +38 -0
  584. package/src/presentation/index.ts +10 -0
  585. package/src/presentation/routes/agent-runtime-config.test.ts +478 -0
  586. package/src/presentation/routes/agent-runtime-config.ts +81 -0
  587. package/src/presentation/routes/cancel-run.test.ts +156 -0
  588. package/src/presentation/routes/cancel-run.ts +37 -0
  589. package/src/presentation/routes/checkout-token.test.ts +366 -0
  590. package/src/presentation/routes/checkout-token.ts +61 -0
  591. package/src/presentation/routes/get-run-aggregates.test.ts +114 -0
  592. package/src/presentation/routes/get-run-aggregates.ts +69 -0
  593. package/src/presentation/routes/get-run.test.ts +604 -0
  594. package/src/presentation/routes/get-run.ts +66 -0
  595. package/src/presentation/routes/get-step-secrets.test.ts +260 -0
  596. package/src/presentation/routes/get-step-secrets.ts +117 -0
  597. package/src/presentation/routes/index.test.ts +71 -0
  598. package/src/presentation/routes/index.ts +42 -0
  599. package/src/presentation/routes/leased-step.ts +54 -0
  600. package/src/presentation/routes/list-run-attempts.test.ts +163 -0
  601. package/src/presentation/routes/list-run-attempts.ts +27 -0
  602. package/src/presentation/routes/list-runs.test.ts +244 -0
  603. package/src/presentation/routes/list-runs.ts +83 -0
  604. package/src/presentation/routes/next-step.test.ts +366 -0
  605. package/src/presentation/routes/next-step.ts +62 -0
  606. package/src/presentation/routes/report-step.test.ts +374 -0
  607. package/src/presentation/routes/report-step.ts +61 -0
  608. package/src/presentation/routes/require-accessible-run.ts +27 -0
  609. package/src/presentation/routes/rerun-run.test.ts +202 -0
  610. package/src/presentation/routes/rerun-run.ts +48 -0
  611. package/src/presentation/subscribers/index.ts +7 -0
  612. package/src/presentation/subscribers/on-job-event-delivered.test.ts +71 -0
  613. package/src/presentation/subscribers/on-job-event-delivered.ts +30 -0
  614. package/src/presentation/subscribers/on-job-steps-settled.test.ts +75 -0
  615. package/src/presentation/subscribers/on-job-steps-settled.ts +42 -0
  616. package/src/presentation/subscribers/on-runner-job-claimed.test.ts +57 -0
  617. package/src/presentation/subscribers/on-runner-job-claimed.ts +23 -0
  618. package/src/presentation/subscribers/on-runner-job-lease-expired.test.ts +73 -0
  619. package/src/presentation/subscribers/on-runner-job-lease-expired.ts +36 -0
  620. package/src/presentation/subscribers/on-runner-job-queued.test.ts +57 -0
  621. package/src/presentation/subscribers/on-runner-job-queued.ts +23 -0
  622. package/src/presentation/subscribers/on-workflow-run-attempt-created.test.ts +69 -0
  623. package/src/presentation/subscribers/on-workflow-run-attempt-created.ts +40 -0
  624. package/src/presentation/subscribers/on-workflow-run-cancelled.test.ts +59 -0
  625. package/src/presentation/subscribers/on-workflow-run-cancelled.ts +29 -0
  626. package/src/temporal/activities/index.ts +45 -0
  627. package/src/temporal/activities/orchestration-activities.test.ts +115 -0
  628. package/src/temporal/activities/orchestration-activities.ts +305 -0
  629. package/src/temporal/constants.ts +6 -0
  630. package/src/temporal/index.ts +6 -0
  631. package/src/temporal/workflow-not-found.ts +9 -0
  632. package/src/temporal/workflows/deadline.ts +7 -0
  633. package/src/temporal/workflows/index.ts +11 -0
  634. package/src/temporal/workflows/job-execution-orchestration-timeout.test.ts +165 -0
  635. package/src/temporal/workflows/job-execution-orchestration.test.ts +311 -0
  636. package/src/temporal/workflows/job-execution-orchestration.ts +314 -0
  637. package/src/temporal/workflows/job-listener-orchestration-continuation.test.ts +93 -0
  638. package/src/temporal/workflows/job-listener-orchestration.test.ts +406 -0
  639. package/src/temporal/workflows/job-listener-orchestration.ts +490 -0
  640. package/src/temporal/workflows/run-orchestration.test.ts +409 -0
  641. package/src/temporal/workflows/run-orchestration.ts +283 -0
  642. package/src/temporal/workflows/test-env.ts +409 -0
  643. package/test/env.ts +11 -0
  644. package/test/factories/job.ts +83 -0
  645. package/test/factories/project.ts +16 -0
  646. package/test/factories/workflow-model.test.ts +26 -0
  647. package/test/factories/workflow-model.ts +268 -0
  648. package/test/factories/workflow-run.ts +58 -0
  649. package/test/fixtures/active-lease-token.ts +85 -0
  650. package/test/fixtures/job-with-steps.ts +42 -0
  651. package/test/fixtures/lease-token.ts +44 -0
  652. package/test/fixtures/strip-setup-step.ts +23 -0
  653. package/test/globalSetup.ts +54 -0
  654. package/test/helpers/workflow-runs.ts +210 -0
  655. package/test/index.ts +3 -0
  656. package/test/setup.ts +17 -0
  657. package/tsconfig.build.json +9 -0
  658. package/tsconfig.build.tsbuildinfo +1 -0
  659. package/tsconfig.json +3 -0
  660. package/tsconfig.test.json +8 -0
  661. package/vitest.config.ts +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/step-config/resolve-step-config.ts"],"sourcesContent":["import type {AgentDefaultsResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport type {WorkflowEnvTemplates, WorkflowModel} from '@shipfox/api-definitions';\nimport {\n type AvailabilitySite,\n capTraceEntries,\n type EvaluationTraceLimitEntry,\n type WorkflowExpressionEvaluationContext,\n} from '@shipfox/expression';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport type {StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {resolveAgentStepConfig} from './agent.js';\nimport {\n freezeStepField,\n type StepConfigField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport {resolveRunStepConfig, type StepConfigMode} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\n\nexport type {StepConfigField, WorkflowStepTemplateDiagnostic};\n\nexport interface ResolvedStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly authoredConfig: Record<string, unknown> | null;\n readonly name?: string;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly (WorkflowStepEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface ResolveStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n readonly resolveAgentDefaults: AgentDefaultsResolver;\n readonly definitionId: string;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\ntype BuildStepConfigParams = ResolveStepConfigParams & {readonly mode: StepConfigMode};\n\ninterface BuiltStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport function resolveStepConfig(params: ResolveStepConfigParams): ResolvedStepConfig {\n const context = evaluationContext(params);\n const effective = buildStepConfig({...params, context, mode: 'effective'});\n const authoredConfig = effective.hasTemplates\n ? buildStepConfig({...params, context, mode: 'authored'}).config\n : null;\n const name = resolveStepName(params.step, context, params.definitionId);\n\n return {\n config: effective.config,\n configPlan: effective.configPlan,\n authoredConfig,\n ...(name.value === undefined || name.value === '' ? {} : {name: name.value}),\n diagnostics: [...effective.diagnostics, ...name.diagnostics],\n trace: capTraceEntries([...effective.trace, ...name.trace]),\n };\n}\n\nfunction buildStepConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): BuiltStepConfig {\n const gate = gateConfigForStep(params.step);\n const outputs = outputsConfigForStep(params.step);\n const runStep = runStepOrNull(params.step);\n const isRunStep = runStep !== null;\n\n if (isRunStep) {\n const run = resolveRunStepConfig({...params, step: runStep});\n return {\n config: {...run.config, ...gate, ...outputs},\n configPlan: run.configPlan,\n diagnostics: run.diagnostics,\n trace: run.trace,\n hasTemplates: run.hasTemplates,\n };\n }\n\n const agentStep = agentStepOrNull(params.step);\n if (agentStep === null) throw new Error(`Unsupported workflow step kind: ${params.step.kind}`);\n\n const agent = resolveAgentStepConfig({...params, step: agentStep});\n return {\n config: {...agent.config, ...gate, ...outputs},\n configPlan: agent.configPlan,\n diagnostics: agent.diagnostics,\n trace: agent.trace,\n hasTemplates: agent.hasTemplates,\n };\n}\n\nfunction evaluationContext(params: {\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n}): WorkflowEvaluationContext {\n return {site: params.site, values: params.context};\n}\n\nfunction runStepOrNull(step: WorkflowModelStep): WorkflowModelRunStep | null {\n const isRunStep = step.kind === 'run';\n return isRunStep ? step : null;\n}\n\nfunction agentStepOrNull(step: WorkflowModelStep): WorkflowModelAgentStep | null {\n const isAgentStep = step.kind === 'agent';\n return isAgentStep ? step : null;\n}\n\nfunction gateConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasGate = step.gate !== undefined;\n return hasGate ? {gate: stepGateConfig(step.gate)} : {};\n}\n\nfunction outputsConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasOutputs = step.outputs !== undefined;\n return hasOutputs ? {outputs: step.outputs} : {};\n}\n\nfunction resolveStepName(\n step: WorkflowModelStep,\n context: WorkflowEvaluationContext,\n definitionId: string,\n): {\n readonly value: string | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n} {\n const hasName = step.name !== undefined;\n if (!hasName) return {value: undefined, diagnostics: [], trace: []};\n\n const hasNameTemplate = step.templates?.name !== undefined;\n if (!hasNameTemplate) return {value: step.name, diagnostics: [], trace: []};\n\n const resolved = freezeStepField({\n field: 'step.name',\n template: {segments: step.templates.name},\n context,\n definitionId,\n errorField: 'step.name',\n });\n return {\n value: resolved.value,\n diagnostics: resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'step.name'})),\n trace: resolved.trace.map((entry) => ({...entry, field: 'step.name'})),\n };\n}\n\nfunction stepGateConfig(gate: NonNullable<WorkflowModelStep['gate']>): Record<string, unknown> {\n const hasSuccess = gate.success !== undefined;\n const hasOnFailure = gate.onFailure !== undefined;\n const hasOnFailureFeedback = gate.onFailure?.feedback !== undefined;\n const hasOnFailureFeedbackTemplate = gate.onFailure?.feedbackTemplate !== undefined;\n\n return {\n ...(hasSuccess\n ? {\n success: {\n language: gate.success.language,\n check: gate.success.check,\n source: gate.success.source,\n },\n }\n : {}),\n ...(hasOnFailure\n ? {\n on_failure: {\n restart_from: gate.onFailure.restartFrom,\n ...(hasOnFailureFeedback ? {feedback: gate.onFailure.feedback} : {}),\n ...(hasOnFailureFeedbackTemplate\n ? {feedback_template: {segments: gate.onFailure.feedbackTemplate}}\n : {}),\n },\n }\n : {}),\n };\n}\n"],"names":["capTraceEntries","resolveAgentStepConfig","freezeStepField","resolveRunStepConfig","resolveStepConfig","params","context","evaluationContext","effective","buildStepConfig","mode","authoredConfig","hasTemplates","config","name","resolveStepName","step","definitionId","configPlan","value","undefined","diagnostics","trace","gate","gateConfigForStep","outputs","outputsConfigForStep","runStep","runStepOrNull","isRunStep","run","agentStep","agentStepOrNull","Error","kind","agent","site","values","isAgentStep","hasGate","stepGateConfig","hasOutputs","hasName","hasNameTemplate","templates","resolved","field","template","segments","errorField","map","diagnostic","entry","hasSuccess","success","hasOnFailure","onFailure","hasOnFailureFeedback","feedback","hasOnFailureFeedbackTemplate","feedbackTemplate","language","check","source","on_failure","restart_from","restartFrom","feedback_template"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { WorkflowModel } from '@shipfox/api-definitions';
2
+ import { type ResolvedField } from '@shipfox/expression';
3
+ import type { PersistedEvaluationTraceEntry, StepConfigDispatchPlan } from '#core/entities/step.js';
4
+ import { type WorkflowStepEvaluationTraceEntry, type WorkflowStepTemplateDiagnostic } from './fields.js';
5
+ import type { WorkflowEvaluationContext } from './workflow-evaluation-context.js';
6
+ type WorkflowModelJob = WorkflowModel['jobs'][number];
7
+ type WorkflowModelStep = WorkflowModelJob['steps'][number];
8
+ type WorkflowModelRunStep = Extract<WorkflowModelStep, {
9
+ kind: 'run';
10
+ }>;
11
+ export type StepConfigMode = 'effective' | 'authored';
12
+ export interface ResolveRunStepConfigParams {
13
+ readonly step: WorkflowModelRunStep;
14
+ readonly workflowEnv: WorkflowModel['env'];
15
+ readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;
16
+ readonly jobEnv: WorkflowModelJob['env'];
17
+ readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;
18
+ readonly context: WorkflowEvaluationContext;
19
+ readonly mode: StepConfigMode;
20
+ readonly definitionId: string;
21
+ }
22
+ type WorkflowEnvTemplates = Readonly<Record<string, ResolvedField['segments']>>;
23
+ export interface RunStepConfig {
24
+ readonly config: Record<string, unknown>;
25
+ readonly configPlan: StepConfigDispatchPlan | null;
26
+ readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];
27
+ readonly trace: readonly WorkflowStepEvaluationTraceEntry[];
28
+ readonly hasTemplates: boolean;
29
+ }
30
+ export declare function resolveRunStepConfig(params: ResolveRunStepConfigParams): RunStepConfig;
31
+ export declare function completeRunDispatchConfig(params: {
32
+ readonly config: Record<string, unknown>;
33
+ readonly plan: StepConfigDispatchPlan;
34
+ readonly context: WorkflowEvaluationContext;
35
+ readonly definitionId: string;
36
+ readonly trace: PersistedEvaluationTraceEntry[];
37
+ }): void;
38
+ export {};
39
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAO5D,OAAO,EAKL,KAAK,aAAa,EAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,6BAA6B,EAAE,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAElG,OAAO,EAIL,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACpC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,KAAK,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAC,IAAI,EAAE,KAAK,CAAA;CAAC,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAOtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,KAAK,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,aAAa,CAyBtF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,6BAA6B,EAAE,CAAC;CACjD,GAAG,IAAI,CAoCP"}
@@ -0,0 +1,360 @@
1
+ import { materializedSecretBindingSchema, secretStoreSchema } from '@shipfox/api-secrets-dto';
2
+ import { analyzeContextKeyAccess, evaluationTraceEntry, hoistPlannedRunCommand, runnerFillTarget, UnsafeRunInterpolationError } from '@shipfox/expression';
3
+ import { InterpolationUnresolvableError } from '#core/errors.js';
4
+ import { resolveStepField, stepConfigInterpolationError } from './fields.js';
5
+ export function resolveRunStepConfig(params) {
6
+ const env = winningEnv(params);
7
+ const envResolution = resolveEnv(env, params.context, params.mode, params.definitionId);
8
+ const commandResolution = resolveCommand({
9
+ step: params.step,
10
+ envKeys: [
11
+ ...Object.keys(envResolution.env),
12
+ ...Object.keys(envResolution.configPlan)
13
+ ],
14
+ context: params.context,
15
+ mode: params.mode,
16
+ definitionId: params.definitionId
17
+ });
18
+ const mergedEnv = {
19
+ ...envResolution.env,
20
+ ...commandResolution.env
21
+ };
22
+ const hasEnvConfig = Object.keys(mergedEnv).length > 0;
23
+ const envConfig = hasEnvConfig ? {
24
+ env: mergedEnv
25
+ } : {};
26
+ const planEnv = {
27
+ ...envResolution.configPlan,
28
+ ...commandResolution.configPlan
29
+ };
30
+ const hasConfigPlan = Object.keys(planEnv).length > 0;
31
+ const configPlan = hasConfigPlan ? {
32
+ env: planEnv
33
+ } : null;
34
+ const hasTemplates = envResolution.hasTemplates || commandResolution.hasTemplate;
35
+ return {
36
+ config: {
37
+ run: commandResolution.command,
38
+ ...envConfig
39
+ },
40
+ configPlan,
41
+ diagnostics: [
42
+ ...envResolution.diagnostics,
43
+ ...commandResolution.diagnostics
44
+ ],
45
+ trace: [
46
+ ...envResolution.trace,
47
+ ...commandResolution.trace
48
+ ],
49
+ hasTemplates
50
+ };
51
+ }
52
+ export function completeRunDispatchConfig(params) {
53
+ const env = {
54
+ ...readConfigEnv(params.config)
55
+ };
56
+ const secretBindings = [];
57
+ if (params.plan.run !== undefined) {
58
+ const resolved = completeRunCommand({
59
+ field: params.plan.run,
60
+ context: params.context,
61
+ definitionId: params.definitionId,
62
+ reservedNames: Object.keys(env),
63
+ trace: params.trace
64
+ });
65
+ params.config.run = resolved.command;
66
+ Object.assign(env, resolved.env);
67
+ secretBindings.push(...resolved.secretBindings);
68
+ }
69
+ if (params.plan.env !== undefined) {
70
+ for (const [key, field] of Object.entries(params.plan.env)){
71
+ const completed = completeDispatchField({
72
+ field: 'env.value',
73
+ traceField: 'env',
74
+ errorField: 'env',
75
+ template: field,
76
+ context: params.context,
77
+ definitionId: params.definitionId,
78
+ envKey: key,
79
+ trace: params.trace
80
+ });
81
+ if (completed.kind === 'binding') secretBindings.push(completed.binding);
82
+ else env[key] = completed.value;
83
+ }
84
+ }
85
+ if (Object.keys(env).length > 0) params.config.env = env;
86
+ if (secretBindings.length > 0) params.config.secret_bindings = secretBindings;
87
+ }
88
+ function completeRunCommand(params) {
89
+ const hoisted = hoistPlannedRunCommand({
90
+ field: params.field,
91
+ reservedNames: params.reservedNames
92
+ });
93
+ const env = {};
94
+ const secretBindings = [];
95
+ for (const binding of hoisted.bindings){
96
+ const completed = completeDispatchField({
97
+ field: 'run',
98
+ traceField: 'run',
99
+ errorField: 'run',
100
+ template: {
101
+ segments: [
102
+ binding.segment
103
+ ]
104
+ },
105
+ context: params.context,
106
+ definitionId: params.definitionId,
107
+ envKey: binding.name,
108
+ trace: params.trace
109
+ });
110
+ if (completed.kind === 'binding') secretBindings.push(completed.binding);
111
+ else env[binding.name] = completed.value;
112
+ }
113
+ return {
114
+ command: hoisted.command,
115
+ env,
116
+ secretBindings
117
+ };
118
+ }
119
+ function completeDispatchField(params) {
120
+ const resolved = resolveStepField(params);
121
+ params.trace.push(...tagTrace(resolved.trace, params.traceField, params.envKey));
122
+ if (resolved.kind === 'frozen') return {
123
+ kind: 'value',
124
+ value: resolved.value
125
+ };
126
+ if (params.envKey !== undefined && containsOnlyRunnerSecretSegments(resolved.field)) {
127
+ params.trace.push(...runnerSecretReferenceTrace(resolved.field, params.traceField, params.envKey));
128
+ return {
129
+ kind: 'binding',
130
+ binding: secretBindingFromField(params.envKey, resolved.field)
131
+ };
132
+ }
133
+ const source = resolved.field.segments.find((segment)=>segment.kind === 'deferred')?.expression.source;
134
+ throw new InterpolationUnresolvableError(params.definitionId, {
135
+ field: params.errorField,
136
+ source: source ?? params.field,
137
+ ...params.envKey === undefined ? {} : {
138
+ envKey: params.envKey
139
+ }
140
+ });
141
+ }
142
+ function containsOnlyRunnerSecretSegments(field) {
143
+ return field.segments.every((segment)=>{
144
+ if (segment.kind === 'literal') return true;
145
+ return segment.fillTarget === runnerFillTarget && segment.roots.length === 1 && segment.roots[0] === 'secrets';
146
+ });
147
+ }
148
+ function secretBindingFromField(target, field) {
149
+ const binding = {
150
+ target,
151
+ segments: field.segments.map(secretBindingSegment)
152
+ };
153
+ return materializedSecretBindingSchema.parse(binding);
154
+ }
155
+ function secretBindingSegment(segment) {
156
+ if (segment.kind === 'literal') return {
157
+ kind: 'literal',
158
+ value: segment.value
159
+ };
160
+ const keyAccess = analyzeContextKeyAccess(segment.expression);
161
+ const reference = keyAccess.references.find((candidate)=>candidate.root === 'secrets');
162
+ if (reference === undefined) {
163
+ throw new Error(`Runner secret segment did not contain a secret reference: ${segment.expression.source}`);
164
+ }
165
+ return {
166
+ kind: 'secret',
167
+ store: secretStoreSchema.parse(reference.store ?? 'local'),
168
+ key: reference.key
169
+ };
170
+ }
171
+ function resolveCommand(params) {
172
+ const template = params.step.templates?.command;
173
+ const hasTemplate = template !== undefined;
174
+ if (!hasTemplate) {
175
+ return {
176
+ command: params.step.command.value,
177
+ env: {},
178
+ configPlan: {},
179
+ diagnostics: [],
180
+ trace: [],
181
+ hasTemplate: false
182
+ };
183
+ }
184
+ const usesAuthoredMode = params.mode === 'authored';
185
+ if (usesAuthoredMode) {
186
+ return {
187
+ command: params.step.command.value,
188
+ env: {},
189
+ configPlan: {},
190
+ diagnostics: [],
191
+ trace: [],
192
+ hasTemplate: true
193
+ };
194
+ }
195
+ const env = {};
196
+ const configPlan = {};
197
+ const diagnostics = [];
198
+ const trace = [];
199
+ const hoisted = hoistCommand(template, params.envKeys, params.definitionId);
200
+ for (const binding of hoisted.bindings){
201
+ const resolved = resolveStepField({
202
+ field: 'run',
203
+ template: {
204
+ segments: [
205
+ binding.segment
206
+ ]
207
+ },
208
+ context: params.context,
209
+ definitionId: params.definitionId,
210
+ errorField: 'run'
211
+ });
212
+ const resolvedToDispatchPlan = resolved.kind === 'residual';
213
+ if (resolvedToDispatchPlan) configPlan[binding.name] = resolved.field;
214
+ else env[binding.name] = resolved.value;
215
+ diagnostics.push(...resolved.diagnostics.map((diagnostic)=>({
216
+ ...diagnostic,
217
+ field: 'run'
218
+ })));
219
+ trace.push(...tagTrace(resolved.trace, 'run'));
220
+ }
221
+ return {
222
+ command: hoisted.command,
223
+ env,
224
+ configPlan,
225
+ diagnostics,
226
+ trace,
227
+ hasTemplate: true
228
+ };
229
+ }
230
+ function hoistCommand(template, reservedNames, definitionId) {
231
+ try {
232
+ return hoistPlannedRunCommand({
233
+ field: {
234
+ segments: template
235
+ },
236
+ reservedNames
237
+ });
238
+ } catch (error) {
239
+ if (error instanceof UnsafeRunInterpolationError) {
240
+ throw stepConfigInterpolationError({
241
+ definitionId,
242
+ errorField: 'run'
243
+ }, error);
244
+ }
245
+ throw error;
246
+ }
247
+ }
248
+ function resolveEnv(env, context, mode, definitionId) {
249
+ const resolvedEnv = {};
250
+ const configPlan = {};
251
+ const diagnostics = [];
252
+ const trace = [];
253
+ let hasTemplates = false;
254
+ for (const [key, entry] of Object.entries(env)){
255
+ const template = entry.template;
256
+ const hasTemplate = template !== undefined;
257
+ const usesAuthoredMode = mode === 'authored';
258
+ const shouldUseAuthoredValue = !hasTemplate || usesAuthoredMode;
259
+ if (shouldUseAuthoredValue) {
260
+ resolvedEnv[key] = entry.value;
261
+ hasTemplates ||= hasTemplate;
262
+ continue;
263
+ }
264
+ hasTemplates = true;
265
+ const resolved = resolveStepField({
266
+ field: 'env.value',
267
+ template: {
268
+ segments: template
269
+ },
270
+ context,
271
+ definitionId,
272
+ errorField: 'env',
273
+ envKey: key
274
+ });
275
+ const resolvedToDispatchPlan = resolved.kind === 'residual';
276
+ if (resolvedToDispatchPlan) configPlan[key] = resolved.field;
277
+ else resolvedEnv[key] = resolved.value;
278
+ diagnostics.push(...resolved.diagnostics.map((diagnostic)=>({
279
+ ...diagnostic,
280
+ field: 'env',
281
+ envKey: key
282
+ })));
283
+ trace.push(...tagTrace(resolved.trace, 'env', key));
284
+ }
285
+ return {
286
+ env: resolvedEnv,
287
+ configPlan,
288
+ diagnostics,
289
+ trace,
290
+ hasTemplates
291
+ };
292
+ }
293
+ function tagTrace(trace, field, envKey) {
294
+ return trace.map((entry)=>({
295
+ ...entry,
296
+ field,
297
+ ...envKey === undefined ? {} : {
298
+ envKey
299
+ }
300
+ }));
301
+ }
302
+ function runnerSecretReferenceTrace(field, stepField, envKey) {
303
+ return field.segments.flatMap((segment)=>{
304
+ if (segment.kind === 'literal') return [];
305
+ return [
306
+ {
307
+ ...evaluationTraceEntry({
308
+ expression: segment.expression.source,
309
+ roots: segment.roots,
310
+ fillTarget: runnerFillTarget,
311
+ evaluatedAt: 'step-dispatch',
312
+ reference: true
313
+ }),
314
+ field: stepField,
315
+ envKey
316
+ }
317
+ ];
318
+ });
319
+ }
320
+ function winningEnv(params) {
321
+ if (params.step.kind !== 'run') return {};
322
+ return mergeEnvLayers({
323
+ env: params.workflowEnv,
324
+ templates: params.workflowEnvTemplates
325
+ }, {
326
+ env: params.jobEnv,
327
+ templates: params.jobEnvTemplates
328
+ }, {
329
+ env: params.step.env,
330
+ templates: params.step.templates?.env
331
+ });
332
+ }
333
+ function mergeEnvLayers(...layers) {
334
+ const merged = {};
335
+ for (const layer of layers){
336
+ for (const [key, value] of Object.entries(layer.env ?? {})){
337
+ const template = layer.templates?.[key];
338
+ const hasTemplate = template !== undefined;
339
+ merged[key] = hasTemplate ? {
340
+ value,
341
+ template
342
+ } : {
343
+ value
344
+ };
345
+ }
346
+ }
347
+ return merged;
348
+ }
349
+ function readConfigEnv(config) {
350
+ const env = config.env;
351
+ if (env === null || typeof env !== 'object' || Array.isArray(env)) return {};
352
+ return Object.fromEntries(Object.entries(env).flatMap(([key, value])=>typeof value === 'string' ? [
353
+ [
354
+ key,
355
+ value
356
+ ]
357
+ ] : []));
358
+ }
359
+
360
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/step-config/run.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions';\nimport {\n type MaterializedSecretBindingDto,\n materializedSecretBindingSchema,\n type SecretBindingSegmentDto,\n secretStoreSchema,\n} from '@shipfox/api-secrets-dto';\nimport {\n analyzeContextKeyAccess,\n type EvaluationTraceEntry,\n evaluationTraceEntry,\n hoistPlannedRunCommand,\n type ResolvedField,\n type ResolvedFieldSegment,\n runnerFillTarget,\n UnsafeRunInterpolationError,\n} from '@shipfox/expression';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport {\n resolveStepField,\n type StepConfigField,\n stepConfigInterpolationError,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\n\nexport type StepConfigMode = 'effective' | 'authored';\n\ninterface WinningEnvValue {\n readonly value: string;\n readonly template?: ResolvedField['segments'];\n}\n\nexport interface ResolveRunStepConfigParams {\n readonly step: WorkflowModelRunStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n}\n\ntype WorkflowEnvTemplates = Readonly<Record<string, ResolvedField['segments']>>;\n\nexport interface RunStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport function resolveRunStepConfig(params: ResolveRunStepConfigParams): RunStepConfig {\n const env = winningEnv(params);\n const envResolution = resolveEnv(env, params.context, params.mode, params.definitionId);\n const commandResolution = resolveCommand({\n step: params.step,\n envKeys: [...Object.keys(envResolution.env), ...Object.keys(envResolution.configPlan)],\n context: params.context,\n mode: params.mode,\n definitionId: params.definitionId,\n });\n const mergedEnv = {...envResolution.env, ...commandResolution.env};\n const hasEnvConfig = Object.keys(mergedEnv).length > 0;\n const envConfig = hasEnvConfig ? {env: mergedEnv} : {};\n const planEnv = {...envResolution.configPlan, ...commandResolution.configPlan};\n const hasConfigPlan = Object.keys(planEnv).length > 0;\n const configPlan = hasConfigPlan ? ({env: planEnv} satisfies StepConfigDispatchPlan) : null;\n const hasTemplates = envResolution.hasTemplates || commandResolution.hasTemplate;\n\n return {\n config: {run: commandResolution.command, ...envConfig},\n configPlan,\n diagnostics: [...envResolution.diagnostics, ...commandResolution.diagnostics],\n trace: [...envResolution.trace, ...commandResolution.trace],\n hasTemplates,\n };\n}\n\nexport function completeRunDispatchConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): void {\n const env = {...readConfigEnv(params.config)};\n const secretBindings: MaterializedSecretBindingDto[] = [];\n\n if (params.plan.run !== undefined) {\n const resolved = completeRunCommand({\n field: params.plan.run,\n context: params.context,\n definitionId: params.definitionId,\n reservedNames: Object.keys(env),\n trace: params.trace,\n });\n params.config.run = resolved.command;\n Object.assign(env, resolved.env);\n secretBindings.push(...resolved.secretBindings);\n }\n\n if (params.plan.env !== undefined) {\n for (const [key, field] of Object.entries(params.plan.env)) {\n const completed = completeDispatchField({\n field: 'env.value',\n traceField: 'env',\n errorField: 'env',\n template: field,\n context: params.context,\n definitionId: params.definitionId,\n envKey: key,\n trace: params.trace,\n });\n if (completed.kind === 'binding') secretBindings.push(completed.binding);\n else env[key] = completed.value;\n }\n }\n\n if (Object.keys(env).length > 0) params.config.env = env;\n if (secretBindings.length > 0) params.config.secret_bindings = secretBindings;\n}\n\nfunction completeRunCommand(params: {\n readonly field: ResolvedField;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly reservedNames: Iterable<string>;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): {\n readonly command: string;\n readonly env: Readonly<Record<string, string>>;\n readonly secretBindings: readonly MaterializedSecretBindingDto[];\n} {\n const hoisted = hoistPlannedRunCommand({\n field: params.field,\n reservedNames: params.reservedNames,\n });\n const env: Record<string, string> = {};\n const secretBindings: MaterializedSecretBindingDto[] = [];\n\n for (const binding of hoisted.bindings) {\n const completed = completeDispatchField({\n field: 'run',\n traceField: 'run',\n errorField: 'run',\n template: {segments: [binding.segment]},\n context: params.context,\n definitionId: params.definitionId,\n envKey: binding.name,\n trace: params.trace,\n });\n if (completed.kind === 'binding') secretBindings.push(completed.binding);\n else env[binding.name] = completed.value;\n }\n\n return {command: hoisted.command, env, secretBindings};\n}\n\ntype CompletedDispatchField =\n | {readonly kind: 'value'; readonly value: string}\n | {readonly kind: 'binding'; readonly binding: MaterializedSecretBindingDto};\n\nfunction completeDispatchField(params: {\n readonly field: 'run' | 'env.value';\n readonly traceField: StepConfigField;\n readonly errorField: StepConfigField;\n readonly template: ResolvedField;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly envKey?: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): CompletedDispatchField {\n const resolved = resolveStepField(params);\n params.trace.push(...tagTrace(resolved.trace, params.traceField, params.envKey));\n if (resolved.kind === 'frozen') return {kind: 'value', value: resolved.value};\n if (params.envKey !== undefined && containsOnlyRunnerSecretSegments(resolved.field)) {\n params.trace.push(\n ...runnerSecretReferenceTrace(resolved.field, params.traceField, params.envKey),\n );\n return {\n kind: 'binding',\n binding: secretBindingFromField(params.envKey, resolved.field),\n };\n }\n\n const source = resolved.field.segments.find((segment) => segment.kind === 'deferred')?.expression\n .source;\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: params.errorField,\n source: source ?? params.field,\n ...(params.envKey === undefined ? {} : {envKey: params.envKey}),\n });\n}\n\nfunction containsOnlyRunnerSecretSegments(field: ResolvedField): boolean {\n return field.segments.every((segment) => {\n if (segment.kind === 'literal') return true;\n return (\n segment.fillTarget === runnerFillTarget &&\n segment.roots.length === 1 &&\n segment.roots[0] === 'secrets'\n );\n });\n}\n\nfunction secretBindingFromField(\n target: string,\n field: ResolvedField,\n): MaterializedSecretBindingDto {\n const binding = {\n target,\n segments: field.segments.map(secretBindingSegment),\n };\n return materializedSecretBindingSchema.parse(binding);\n}\n\nfunction secretBindingSegment(segment: ResolvedFieldSegment): SecretBindingSegmentDto {\n if (segment.kind === 'literal') return {kind: 'literal', value: segment.value};\n\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n const reference = keyAccess.references.find((candidate) => candidate.root === 'secrets');\n if (reference === undefined) {\n throw new Error(\n `Runner secret segment did not contain a secret reference: ${segment.expression.source}`,\n );\n }\n\n return {\n kind: 'secret',\n store: secretStoreSchema.parse(reference.store ?? 'local'),\n key: reference.key,\n };\n}\n\nfunction resolveCommand(params: {\n readonly step: WorkflowModelRunStep;\n readonly envKeys: readonly string[];\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n}): {\n readonly command: string;\n readonly env: Readonly<Record<string, string>>;\n readonly configPlan: Readonly<Record<string, ResolvedField>>;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplate: boolean;\n} {\n const template = params.step.templates?.command;\n const hasTemplate = template !== undefined;\n if (!hasTemplate) {\n return {\n command: params.step.command.value,\n env: {},\n configPlan: {},\n diagnostics: [],\n trace: [],\n hasTemplate: false,\n };\n }\n\n const usesAuthoredMode = params.mode === 'authored';\n if (usesAuthoredMode) {\n return {\n command: params.step.command.value,\n env: {},\n configPlan: {},\n diagnostics: [],\n trace: [],\n hasTemplate: true,\n };\n }\n\n const env: Record<string, string> = {};\n const configPlan: Record<string, ResolvedField> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const hoisted = hoistCommand(template, params.envKeys, params.definitionId);\n\n for (const binding of hoisted.bindings) {\n const resolved = resolveStepField({\n field: 'run',\n template: {segments: [binding.segment]},\n context: params.context,\n definitionId: params.definitionId,\n errorField: 'run',\n });\n const resolvedToDispatchPlan = resolved.kind === 'residual';\n if (resolvedToDispatchPlan) configPlan[binding.name] = resolved.field;\n else env[binding.name] = resolved.value;\n diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'run' as const})),\n );\n trace.push(...tagTrace(resolved.trace, 'run'));\n }\n\n return {\n command: hoisted.command,\n env,\n configPlan,\n diagnostics,\n trace,\n hasTemplate: true,\n };\n}\n\nfunction hoistCommand(\n template: ResolvedField['segments'],\n reservedNames: readonly string[],\n definitionId: string,\n): ReturnType<typeof hoistPlannedRunCommand> {\n try {\n return hoistPlannedRunCommand({\n field: {segments: template},\n reservedNames,\n });\n } catch (error) {\n if (error instanceof UnsafeRunInterpolationError) {\n throw stepConfigInterpolationError({definitionId, errorField: 'run'}, error);\n }\n throw error;\n }\n}\n\nfunction resolveEnv(\n env: Readonly<Record<string, WinningEnvValue>>,\n context: WorkflowEvaluationContext,\n mode: StepConfigMode,\n definitionId: string,\n): {\n readonly env: Readonly<Record<string, string>>;\n readonly configPlan: Readonly<Record<string, ResolvedField>>;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n} {\n const resolvedEnv: Record<string, string> = {};\n const configPlan: Record<string, ResolvedField> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n let hasTemplates = false;\n\n for (const [key, entry] of Object.entries(env)) {\n const template = entry.template;\n const hasTemplate = template !== undefined;\n const usesAuthoredMode = mode === 'authored';\n const shouldUseAuthoredValue = !hasTemplate || usesAuthoredMode;\n\n if (shouldUseAuthoredValue) {\n resolvedEnv[key] = entry.value;\n hasTemplates ||= hasTemplate;\n continue;\n }\n\n hasTemplates = true;\n const resolved = resolveStepField({\n field: 'env.value',\n template: {segments: template},\n context,\n definitionId,\n errorField: 'env',\n envKey: key,\n });\n const resolvedToDispatchPlan = resolved.kind === 'residual';\n if (resolvedToDispatchPlan) configPlan[key] = resolved.field;\n else resolvedEnv[key] = resolved.value;\n diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({\n ...diagnostic,\n field: 'env' as const,\n envKey: key,\n })),\n );\n trace.push(...tagTrace(resolved.trace, 'env', key));\n }\n\n return {env: resolvedEnv, configPlan, diagnostics, trace, hasTemplates};\n}\n\nfunction tagTrace(\n trace: readonly EvaluationTraceEntry[],\n field: StepConfigField,\n envKey?: string,\n): WorkflowStepEvaluationTraceEntry[] {\n return trace.map((entry) => ({\n ...entry,\n field,\n ...(envKey === undefined ? {} : {envKey}),\n }));\n}\n\nfunction runnerSecretReferenceTrace(\n field: ResolvedField,\n stepField: StepConfigField,\n envKey: string,\n): WorkflowStepEvaluationTraceEntry[] {\n return field.segments.flatMap((segment) => {\n if (segment.kind === 'literal') return [];\n return [\n {\n ...evaluationTraceEntry({\n expression: segment.expression.source,\n roots: segment.roots,\n fillTarget: runnerFillTarget,\n evaluatedAt: 'step-dispatch',\n reference: true,\n }),\n field: stepField,\n envKey,\n },\n ];\n });\n}\n\nfunction winningEnv(params: {\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly step: WorkflowModelStep;\n}): Readonly<Record<string, WinningEnvValue>> {\n if (params.step.kind !== 'run') return {};\n\n return mergeEnvLayers(\n {env: params.workflowEnv, templates: params.workflowEnvTemplates},\n {env: params.jobEnv, templates: params.jobEnvTemplates},\n {env: params.step.env, templates: params.step.templates?.env},\n );\n}\n\nfunction mergeEnvLayers(\n ...layers: readonly {\n readonly env: Readonly<Record<string, string>> | undefined;\n readonly templates: WorkflowEnvTemplates | undefined;\n }[]\n): Readonly<Record<string, WinningEnvValue>> {\n const merged: Record<string, WinningEnvValue> = {};\n\n for (const layer of layers) {\n for (const [key, value] of Object.entries(layer.env ?? {})) {\n const template = layer.templates?.[key];\n const hasTemplate = template !== undefined;\n merged[key] = hasTemplate ? {value, template} : {value};\n }\n }\n\n return merged;\n}\n\nfunction readConfigEnv(config: Record<string, unknown>): Record<string, string> {\n const env = config.env;\n if (env === null || typeof env !== 'object' || Array.isArray(env)) return {};\n return Object.fromEntries(\n Object.entries(env).flatMap(([key, value]) =>\n typeof value === 'string' ? [[key, value]] : [],\n ),\n );\n}\n"],"names":["materializedSecretBindingSchema","secretStoreSchema","analyzeContextKeyAccess","evaluationTraceEntry","hoistPlannedRunCommand","runnerFillTarget","UnsafeRunInterpolationError","InterpolationUnresolvableError","resolveStepField","stepConfigInterpolationError","resolveRunStepConfig","params","env","winningEnv","envResolution","resolveEnv","context","mode","definitionId","commandResolution","resolveCommand","step","envKeys","Object","keys","configPlan","mergedEnv","hasEnvConfig","length","envConfig","planEnv","hasConfigPlan","hasTemplates","hasTemplate","config","run","command","diagnostics","trace","completeRunDispatchConfig","readConfigEnv","secretBindings","plan","undefined","resolved","completeRunCommand","field","reservedNames","assign","push","key","entries","completed","completeDispatchField","traceField","errorField","template","envKey","kind","binding","value","secret_bindings","hoisted","bindings","segments","segment","name","tagTrace","containsOnlyRunnerSecretSegments","runnerSecretReferenceTrace","secretBindingFromField","source","find","expression","every","fillTarget","roots","target","map","secretBindingSegment","parse","keyAccess","reference","references","candidate","root","Error","store","templates","usesAuthoredMode","hoistCommand","resolvedToDispatchPlan","diagnostic","error","resolvedEnv","entry","shouldUseAuthoredValue","stepField","flatMap","evaluatedAt","mergeEnvLayers","workflowEnv","workflowEnvTemplates","jobEnv","jobEnvTemplates","layers","merged","layer","Array","isArray","fromEntries"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AvailabilitySite, WorkflowExpressionEvaluationContext } from '@shipfox/expression';
2
+ export interface WorkflowEvaluationContext {
3
+ readonly site: AvailabilitySite;
4
+ readonly values: WorkflowExpressionEvaluationContext;
5
+ }
6
+ //# sourceMappingURL=workflow-evaluation-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-evaluation-context.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/workflow-evaluation-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,mCAAmC,EAAC,MAAM,qBAAqB,CAAC;AAE/F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,mCAAmC,CAAC;CACtD"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=workflow-evaluation-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/step-config/workflow-evaluation-context.ts"],"sourcesContent":["import type {AvailabilitySite, WorkflowExpressionEvaluationContext} from '@shipfox/expression';\n\nexport interface WorkflowEvaluationContext {\n readonly site: AvailabilitySite;\n readonly values: WorkflowExpressionEvaluationContext;\n}\n"],"names":[],"mappings":"AAEA,WAGC"}
@@ -0,0 +1,26 @@
1
+ import type { LogOutcomeDto } from '@shipfox/api-workflows-dto';
2
+ import type { Tx } from '#db/db.js';
3
+ import { type StepReport, type StepTransitionDecision } from './decide-step-transition.js';
4
+ export type StepProgressionOutcome = {
5
+ jobFinished: false;
6
+ } | {
7
+ jobFinished: true;
8
+ status: 'succeeded' | 'failed';
9
+ };
10
+ export interface StepProgressionMetrics {
11
+ jobStepsSettledStatus?: 'succeeded' | 'failed';
12
+ stepRestartEnqueued?: boolean;
13
+ }
14
+ export interface StepProgressionResult {
15
+ outcome: StepProgressionOutcome;
16
+ metrics: StepProgressionMetrics;
17
+ }
18
+ export interface ApplyStepTransitionContext {
19
+ jobId: string;
20
+ jobExecutionId: string;
21
+ result: StepReport;
22
+ logOutcome: LogOutcomeDto;
23
+ gateResult?: Record<string, unknown> | null;
24
+ }
25
+ export declare function applyStepTransition(decision: StepTransitionDecision, ctx: ApplyStepTransitionContext, tx: Tx): Promise<StepProgressionResult>;
26
+ //# sourceMappingURL=apply-step-transition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-step-transition.d.ts","sourceRoot":"","sources":["../../../src/core/step-transition/apply-step-transition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,WAAW,CAAC;AAUlC,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC5B,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,sBAAsB,GAC9B;IAAC,WAAW,EAAE,KAAK,CAAA;CAAC,GACpB;IAAC,WAAW,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAC,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,qBAAqB,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,sBAAsB,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,aAAa,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C;AAOD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,sBAAsB,EAChC,GAAG,EAAE,0BAA0B,EAC/B,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,qBAAqB,CAAC,CAgHhC"}