@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,422 @@
1
+ import type {
2
+ MaterializedAgentIntegrationConfigDto,
3
+ MaterializedAgentIntegrationToolConfigDto,
4
+ } from '@shipfox/api-agent-dto';
5
+ import type {WorkflowModel} from '@shipfox/api-definitions';
6
+ import type {
7
+ AgentToolCatalogEntry,
8
+ AgentToolCatalogMethod,
9
+ AgentToolCatalogs,
10
+ GetIntegrationConnectionByIdFn,
11
+ IntegrationProviderKind,
12
+ LoadWorkspaceConnectionSnapshot,
13
+ WorkspaceConnectionSnapshot,
14
+ } from '@shipfox/api-integration-core';
15
+ import {getProjectById} from '@shipfox/api-projects';
16
+ import {AgentIntegrationMaterializationError} from './errors.js';
17
+
18
+ type WorkflowModelJob = WorkflowModel['jobs'][number];
19
+ type WorkflowModelAgentStep = Extract<WorkflowModelJob['steps'][number], {kind: 'agent'}>;
20
+ type WorkflowModelStepIntegration = NonNullable<WorkflowModelAgentStep['integrations']>[number];
21
+
22
+ interface AgentToolMaterializationServices {
23
+ readonly catalogs: AgentToolCatalogs;
24
+ readonly loadWorkspaceConnectionSnapshot: LoadWorkspaceConnectionSnapshot;
25
+ readonly getIntegrationConnectionById: GetIntegrationConnectionByIdFn;
26
+ }
27
+
28
+ export interface AgentToolMaterializationContext {
29
+ readonly catalogs: AgentToolCatalogs;
30
+ readonly workspaceConnectionSnapshot: WorkspaceConnectionSnapshot;
31
+ readonly defaultConnection: {
32
+ readonly id: string;
33
+ readonly slug: string;
34
+ readonly provider: IntegrationProviderKind;
35
+ };
36
+ }
37
+
38
+ export interface AgentToolMaterializationSnapshot {
39
+ readonly steps: readonly AgentToolMaterializationSnapshotStep[];
40
+ }
41
+
42
+ export interface AgentToolMaterializationSnapshotStep {
43
+ readonly jobKey: string;
44
+ readonly stepId: string;
45
+ readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];
46
+ }
47
+
48
+ interface SelectedToolState {
49
+ readonly entry: AgentToolCatalogEntry;
50
+ readonly methods: Map<string, AgentToolCatalogMethod>;
51
+ selectedStandalone: boolean;
52
+ }
53
+
54
+ let services: AgentToolMaterializationServices | undefined;
55
+
56
+ export function setAgentToolMaterializationServices(
57
+ nextServices: AgentToolMaterializationServices,
58
+ ): void {
59
+ services = nextServices;
60
+ }
61
+
62
+ export function clearAgentToolMaterializationServices(): void {
63
+ services = undefined;
64
+ }
65
+
66
+ export async function loadAgentToolMaterializationContext(params: {
67
+ readonly model: WorkflowModel | null;
68
+ readonly workspaceId: string;
69
+ readonly projectId: string;
70
+ readonly jobs?: readonly WorkflowModelJob[] | undefined;
71
+ }): Promise<AgentToolMaterializationContext | undefined> {
72
+ if (!modelHasAgentStepIntegrations(params.model, params.jobs)) return undefined;
73
+ if (services === undefined) {
74
+ throw new AgentIntegrationMaterializationError('Agent tool materialization is not configured');
75
+ }
76
+
77
+ const project = await getProjectById(params.projectId);
78
+ if (project === undefined) {
79
+ throw new AgentIntegrationMaterializationError(
80
+ `Project ${params.projectId} was not found while materializing agent integrations`,
81
+ );
82
+ }
83
+
84
+ const [workspaceConnectionSnapshot, defaultConnection] = await Promise.all([
85
+ services.loadWorkspaceConnectionSnapshot(params.workspaceId),
86
+ services.getIntegrationConnectionById(project.sourceConnectionId),
87
+ ]);
88
+ if (defaultConnection === undefined) {
89
+ throw new AgentIntegrationMaterializationError(
90
+ `Source connection ${project.sourceConnectionId} was not found while materializing agent integrations`,
91
+ );
92
+ }
93
+
94
+ return {
95
+ catalogs: services.catalogs,
96
+ workspaceConnectionSnapshot,
97
+ defaultConnection: {
98
+ id: defaultConnection.id,
99
+ slug: defaultConnection.slug,
100
+ provider: defaultConnection.provider,
101
+ },
102
+ };
103
+ }
104
+
105
+ export function materializeAgentIntegrations(params: {
106
+ readonly jobKey: string;
107
+ readonly stepId: string;
108
+ readonly integrations: readonly WorkflowModelStepIntegration[] | undefined;
109
+ readonly context: AgentToolMaterializationContext | undefined;
110
+ readonly snapshot?: AgentToolMaterializationSnapshot | null | undefined;
111
+ }): MaterializedAgentIntegrationConfigDto[] | undefined {
112
+ const snapshot = findSnapshotStep(params);
113
+ if (snapshot !== undefined) return snapshot.integrations.map(copyMaterializedIntegration);
114
+ if (params.integrations === undefined) return undefined;
115
+ if (params.context === undefined) {
116
+ throw new AgentIntegrationMaterializationError(
117
+ 'Agent integrations require materialization context',
118
+ );
119
+ }
120
+ const {context} = params;
121
+
122
+ return params.integrations.map((integration) =>
123
+ materializeAgentIntegration({integration, context}),
124
+ );
125
+ }
126
+
127
+ export function createAgentToolMaterializationSnapshot(params: {
128
+ readonly model: WorkflowModel;
129
+ readonly context: AgentToolMaterializationContext | undefined;
130
+ }): AgentToolMaterializationSnapshot | null {
131
+ if (params.context === undefined) return null;
132
+
133
+ const steps = params.model.jobs.flatMap((job) =>
134
+ job.steps.flatMap((step) => {
135
+ if (step.kind !== 'agent' || step.integrations === undefined) return [];
136
+ const integrations = materializeAgentIntegrations({
137
+ jobKey: job.key,
138
+ stepId: step.id,
139
+ integrations: step.integrations,
140
+ context: params.context,
141
+ });
142
+ if (integrations === undefined) return [];
143
+ return [
144
+ {
145
+ jobKey: job.key,
146
+ stepId: step.id,
147
+ integrations,
148
+ },
149
+ ];
150
+ }),
151
+ );
152
+
153
+ return steps.length === 0 ? null : {steps};
154
+ }
155
+
156
+ function findSnapshotStep(params: {
157
+ readonly jobKey: string;
158
+ readonly stepId: string;
159
+ readonly snapshot?: AgentToolMaterializationSnapshot | null | undefined;
160
+ }): AgentToolMaterializationSnapshotStep | undefined {
161
+ return params.snapshot?.steps.find(
162
+ (step) => step.jobKey === params.jobKey && step.stepId === params.stepId,
163
+ );
164
+ }
165
+
166
+ function materializeAgentIntegration(params: {
167
+ readonly integration: WorkflowModelStepIntegration;
168
+ readonly context: AgentToolMaterializationContext;
169
+ }): MaterializedAgentIntegrationConfigDto {
170
+ const connection = resolveConnection(params);
171
+ const catalog = params.context.catalogs.get(connection.provider);
172
+ if (catalog === undefined) {
173
+ throw new AgentIntegrationMaterializationError(
174
+ `Integration provider ${connection.provider} has no agent tool catalog`,
175
+ );
176
+ }
177
+
178
+ const tools = selectTools({
179
+ catalog,
180
+ include: params.integration.include,
181
+ exclude: params.integration.exclude ?? [],
182
+ });
183
+ const requiredScope = mergeRequiredScopes(tools.map((tool) => tool.requiredScope));
184
+
185
+ return {
186
+ connectionId: connection.id,
187
+ connectionSlug: connection.slug,
188
+ provider: connection.provider,
189
+ requiredScope,
190
+ tools,
191
+ };
192
+ }
193
+
194
+ function copyMaterializedIntegration(
195
+ integration: MaterializedAgentIntegrationConfigDto,
196
+ ): MaterializedAgentIntegrationConfigDto {
197
+ return {
198
+ ...integration,
199
+ requiredScope: [...integration.requiredScope],
200
+ tools: integration.tools.map((tool) => ({
201
+ ...tool,
202
+ requiredScope: [...tool.requiredScope],
203
+ ...(tool.methods === undefined
204
+ ? {}
205
+ : {
206
+ methods: tool.methods.map((method) => ({
207
+ ...method,
208
+ requiredScope: [...method.requiredScope],
209
+ })),
210
+ }),
211
+ })),
212
+ };
213
+ }
214
+
215
+ function resolveConnection(params: {
216
+ readonly integration: WorkflowModelStepIntegration;
217
+ readonly context: AgentToolMaterializationContext;
218
+ }): AgentToolMaterializationContext['defaultConnection'] {
219
+ if (params.integration.connection === undefined) return params.context.defaultConnection;
220
+
221
+ const connection = params.context.workspaceConnectionSnapshot.get(params.integration.connection);
222
+ if (connection === undefined) {
223
+ throw new AgentIntegrationMaterializationError(
224
+ `Integration connection ${params.integration.connection} was not found while materializing agent integrations`,
225
+ );
226
+ }
227
+ return {
228
+ id: connection.id,
229
+ slug: params.integration.connection,
230
+ provider: connection.provider,
231
+ };
232
+ }
233
+
234
+ function selectTools(params: {
235
+ readonly catalog: readonly AgentToolCatalogEntry[];
236
+ readonly include: readonly string[];
237
+ readonly exclude: readonly string[];
238
+ }): MaterializedAgentIntegrationToolConfigDto[] {
239
+ const selected = new Map<string, SelectedToolState>();
240
+
241
+ for (const token of params.include) {
242
+ applySelection({catalog: params.catalog, selected, token, mode: 'include'});
243
+ }
244
+ for (const token of params.exclude) {
245
+ applySelection({catalog: params.catalog, selected, token, mode: 'exclude'});
246
+ }
247
+
248
+ const tools = params.catalog.flatMap((entry) => {
249
+ const state = selected.get(entry.id);
250
+ if (state === undefined) return [];
251
+ return [materializedTool(state)];
252
+ });
253
+ if (tools.length === 0) {
254
+ throw new AgentIntegrationMaterializationError(
255
+ 'Agent integration selection resolved to no tools',
256
+ );
257
+ }
258
+ return tools;
259
+ }
260
+
261
+ function applySelection(params: {
262
+ readonly catalog: readonly AgentToolCatalogEntry[];
263
+ readonly selected: Map<string, SelectedToolState>;
264
+ readonly token: string;
265
+ readonly mode: 'include' | 'exclude';
266
+ }): void {
267
+ if (params.token === '*') {
268
+ for (const entry of params.catalog) applyEntrySelection(params, entry);
269
+ return;
270
+ }
271
+
272
+ const match = findCatalogSelection(params.catalog, params.token);
273
+ if (match === undefined) {
274
+ throw new AgentIntegrationMaterializationError(`Unknown integration tool: ${params.token}`);
275
+ }
276
+ applyEntrySelection(params, match.entry, match.method);
277
+ }
278
+
279
+ function applyEntrySelection(
280
+ params: {
281
+ readonly selected: Map<string, SelectedToolState>;
282
+ readonly token: string;
283
+ readonly mode: 'include' | 'exclude';
284
+ },
285
+ entry: AgentToolCatalogEntry,
286
+ method?: AgentToolCatalogMethod | undefined,
287
+ ): void {
288
+ if (params.mode === 'exclude') {
289
+ excludeEntrySelection(params.selected, entry, method);
290
+ return;
291
+ }
292
+
293
+ const state =
294
+ params.selected.get(entry.id) ??
295
+ ({entry, methods: new Map(), selectedStandalone: false} satisfies SelectedToolState);
296
+ if (entry.methods === undefined) {
297
+ state.selectedStandalone = true;
298
+ } else if (method === undefined) {
299
+ for (const candidate of entry.methods) state.methods.set(candidate.id, candidate);
300
+ } else {
301
+ state.methods.set(method.id, method);
302
+ }
303
+ params.selected.set(entry.id, state);
304
+ }
305
+
306
+ function excludeEntrySelection(
307
+ selected: Map<string, SelectedToolState>,
308
+ entry: AgentToolCatalogEntry,
309
+ method?: AgentToolCatalogMethod | undefined,
310
+ ): void {
311
+ if (method === undefined) {
312
+ selected.delete(entry.id);
313
+ return;
314
+ }
315
+
316
+ const state = selected.get(entry.id);
317
+ if (state === undefined) return;
318
+ state.methods.delete(method.id);
319
+ if (!state.selectedStandalone && state.methods.size === 0) selected.delete(entry.id);
320
+ }
321
+
322
+ function findCatalogSelection(
323
+ catalog: readonly AgentToolCatalogEntry[],
324
+ token: string,
325
+ ):
326
+ | {readonly entry: AgentToolCatalogEntry; readonly method?: AgentToolCatalogMethod | undefined}
327
+ | undefined {
328
+ const entry = catalog.find((candidate) => candidate.id === token);
329
+ if (entry !== undefined) return {entry};
330
+
331
+ const wildcardSuffix = '.*';
332
+ if (token.endsWith(wildcardSuffix)) {
333
+ const family = token.slice(0, -wildcardSuffix.length);
334
+ const familyEntry = catalog.find((candidate) => candidate.id === family);
335
+ return familyEntry === undefined ? undefined : {entry: familyEntry};
336
+ }
337
+
338
+ const dotIndex = token.indexOf('.');
339
+ if (dotIndex < 1) return undefined;
340
+ const family = token.slice(0, dotIndex);
341
+ const methodId = token.slice(dotIndex + 1);
342
+ const familyEntry = catalog.find((candidate) => candidate.id === family);
343
+ const method = familyEntry?.methods?.find((candidate) => candidate.id === methodId);
344
+ if (familyEntry === undefined || method === undefined) return undefined;
345
+ return {entry: familyEntry, method};
346
+ }
347
+
348
+ function materializedTool(state: SelectedToolState): MaterializedAgentIntegrationToolConfigDto {
349
+ if (state.entry.methods === undefined) {
350
+ return {
351
+ id: state.entry.id,
352
+ sensitivity: state.entry.sensitivity,
353
+ sensitive: state.entry.sensitive,
354
+ requiredScope: normalizeRequiredScope(state.entry.requiredScope),
355
+ inputSchema: state.entry.inputSchema,
356
+ ...(state.entry.outputSchema === undefined ? {} : {outputSchema: state.entry.outputSchema}),
357
+ };
358
+ }
359
+
360
+ const methods = state.entry.methods
361
+ .filter((method) => state.methods.has(method.id))
362
+ .map((method) => ({
363
+ id: method.id,
364
+ token: `${state.entry.id}.${method.id}`,
365
+ description: method.description,
366
+ sensitivity: method.sensitivity,
367
+ sensitive: method.sensitive,
368
+ requiredScope: normalizeRequiredScope(method.requiredScope),
369
+ }));
370
+
371
+ return {
372
+ id: state.entry.id,
373
+ sensitivity: methods.some((method) => method.sensitivity === 'write') ? 'write' : 'read',
374
+ sensitive: methods.some((method) => method.sensitive),
375
+ requiredScope: mergeRequiredScopes(methods.map((method) => method.requiredScope)),
376
+ inputSchema: state.entry.inputSchema,
377
+ ...(state.entry.outputSchema === undefined ? {} : {outputSchema: state.entry.outputSchema}),
378
+ methods,
379
+ };
380
+ }
381
+
382
+ function mergeRequiredScopes(scopes: readonly unknown[]): unknown[] {
383
+ const items = scopes.flatMap(normalizeRequiredScope);
384
+ if (items.every(isPermissionScope)) {
385
+ const byPermission = new Map<string, 'read' | 'write'>();
386
+ for (const item of items) {
387
+ const existing = byPermission.get(item.permission);
388
+ if (existing === 'write') continue;
389
+ byPermission.set(item.permission, item.access);
390
+ }
391
+ return [...byPermission.entries()].map(([permission, access]) => ({permission, access}));
392
+ }
393
+
394
+ const deduped = new Map<string, unknown>();
395
+ for (const item of items) deduped.set(JSON.stringify(item), item);
396
+ return [...deduped.values()];
397
+ }
398
+
399
+ function normalizeRequiredScope(scope: unknown): unknown[] {
400
+ return Array.isArray(scope) ? [...scope] : [scope];
401
+ }
402
+
403
+ function isPermissionScope(
404
+ value: unknown,
405
+ ): value is {permission: string; access: 'read' | 'write'} {
406
+ if (typeof value !== 'object' || value === null) return false;
407
+ const candidate = value as {permission?: unknown; access?: unknown};
408
+ return (
409
+ typeof candidate.permission === 'string' &&
410
+ (candidate.access === 'read' || candidate.access === 'write')
411
+ );
412
+ }
413
+
414
+ function modelHasAgentStepIntegrations(
415
+ model: WorkflowModel | null,
416
+ jobs: readonly WorkflowModelJob[] | undefined,
417
+ ): boolean {
418
+ if (model === null) return false;
419
+ return (jobs ?? model.jobs).some((job) =>
420
+ job.steps.some((step) => step.kind === 'agent' && step.integrations !== undefined),
421
+ );
422
+ }
@@ -0,0 +1,112 @@
1
+ import type {CheckoutSpec, IntegrationSourceControlService} from '@shipfox/api-integration-core';
2
+ import {getProjectById} from '@shipfox/api-projects';
3
+ import * as workflowRuns from '#db/workflow-runs.js';
4
+ import {jobFactory} from '#test/factories/job.js';
5
+ import {projectFactory} from '#test/factories/project.js';
6
+ import {createJobCheckoutSpec, resolveCheckoutIntent} from './checkout.js';
7
+ import {
8
+ CheckoutIntentUnresolvedError,
9
+ JobNotFoundError,
10
+ WorkflowRunNotFoundError,
11
+ } from './errors.js';
12
+
13
+ vi.mock('@shipfox/api-projects', () => ({getProjectById: vi.fn()}));
14
+ const mockGetProjectById = vi.mocked(getProjectById);
15
+
16
+ describe('resolveCheckoutIntent', () => {
17
+ it('resolves connection + repo from the project, using the project workspace', async () => {
18
+ const project = projectFactory.build();
19
+ mockGetProjectById.mockResolvedValue(project);
20
+ const job = await jobFactory.create({}, {transient: {projectId: project.id}});
21
+
22
+ const intent = await resolveCheckoutIntent(job.id);
23
+
24
+ expect(intent).toEqual({
25
+ workspaceId: project.workspaceId,
26
+ connectionId: project.sourceConnectionId,
27
+ externalRepositoryId: project.sourceExternalRepositoryId,
28
+ persistCredentials: true,
29
+ permissions: {contents: 'read'},
30
+ });
31
+ });
32
+
33
+ it('throws JobNotFoundError for an unknown job', async () => {
34
+ const act = resolveCheckoutIntent(crypto.randomUUID());
35
+
36
+ await expect(act).rejects.toBeInstanceOf(JobNotFoundError);
37
+ });
38
+
39
+ it('resolves the checkout target while the parent job projection is still pending', async () => {
40
+ const project = projectFactory.build();
41
+ mockGetProjectById.mockResolvedValue(project);
42
+ const job = await jobFactory.create(
43
+ {},
44
+ {transient: {projectId: project.id, status: 'pending'}},
45
+ );
46
+
47
+ const intent = await resolveCheckoutIntent(job.id);
48
+
49
+ expect(intent.connectionId).toBe(project.sourceConnectionId);
50
+ });
51
+
52
+ it('throws WorkflowRunNotFoundError when the run is missing', async () => {
53
+ const project = projectFactory.build();
54
+ mockGetProjectById.mockResolvedValue(project);
55
+ const job = await jobFactory.create({}, {transient: {projectId: project.id}});
56
+ vi.spyOn(workflowRuns, 'getWorkflowRunByAttemptId').mockResolvedValue(undefined);
57
+
58
+ const act = resolveCheckoutIntent(job.id);
59
+
60
+ await expect(act).rejects.toBeInstanceOf(WorkflowRunNotFoundError);
61
+ });
62
+
63
+ it('throws CheckoutIntentUnresolvedError when the project is missing', async () => {
64
+ const project = projectFactory.build();
65
+ mockGetProjectById.mockResolvedValue(undefined);
66
+ const job = await jobFactory.create({}, {transient: {projectId: project.id}});
67
+
68
+ const act = resolveCheckoutIntent(job.id);
69
+
70
+ await expect(act).rejects.toBeInstanceOf(CheckoutIntentUnresolvedError);
71
+ });
72
+ });
73
+
74
+ describe('createJobCheckoutSpec', () => {
75
+ it('passes the resolved intent and an undefined ref to the service', async () => {
76
+ const project = projectFactory.build();
77
+ mockGetProjectById.mockResolvedValue(project);
78
+ const job = await jobFactory.create({}, {transient: {projectId: project.id}});
79
+ const spec: CheckoutSpec = {repositoryUrl: 'https://github.com/acme/repo.git', ref: 'main'};
80
+ const createCheckoutSpec = vi.fn().mockResolvedValue(spec);
81
+ const sourceControl = {createCheckoutSpec} as unknown as IntegrationSourceControlService;
82
+
83
+ const result = await createJobCheckoutSpec({jobId: job.id, sourceControl});
84
+
85
+ expect(result).toEqual({spec, persistCredentials: true});
86
+ expect(createCheckoutSpec).toHaveBeenCalledWith({
87
+ workspaceId: project.workspaceId,
88
+ connectionId: project.sourceConnectionId,
89
+ externalRepositoryId: project.sourceExternalRepositoryId,
90
+ ref: undefined,
91
+ permissions: {contents: 'read'},
92
+ });
93
+ });
94
+
95
+ it('passes requested write contents permission to the service', async () => {
96
+ const project = projectFactory.build();
97
+ mockGetProjectById.mockResolvedValue(project);
98
+ const job = await jobFactory.create(
99
+ {},
100
+ {transient: {projectId: project.id, checkout: {permissions: {contents: 'write'}}}},
101
+ );
102
+ const spec: CheckoutSpec = {repositoryUrl: 'https://github.com/acme/repo.git', ref: 'main'};
103
+ const createCheckoutSpec = vi.fn().mockResolvedValue(spec);
104
+ const sourceControl = {createCheckoutSpec} as unknown as IntegrationSourceControlService;
105
+
106
+ await createJobCheckoutSpec({jobId: job.id, sourceControl});
107
+
108
+ expect(createCheckoutSpec).toHaveBeenCalledWith(
109
+ expect.objectContaining({permissions: {contents: 'write'}}),
110
+ );
111
+ });
112
+ });
@@ -0,0 +1,63 @@
1
+ import type {CheckoutSpec, IntegrationSourceControlService} from '@shipfox/api-integration-core';
2
+ import {getProjectById} from '@shipfox/api-projects';
3
+ import {getJobById, getWorkflowRunByAttemptId} from '#db/workflow-runs.js';
4
+ import {
5
+ CheckoutIntentUnresolvedError,
6
+ JobNotFoundError,
7
+ WorkflowRunNotFoundError,
8
+ } from './errors.js';
9
+
10
+ export interface CheckoutIntent {
11
+ workspaceId: string;
12
+ connectionId: string;
13
+ externalRepositoryId: string;
14
+ persistCredentials: boolean;
15
+ permissions: {contents: 'read' | 'write'};
16
+ }
17
+
18
+ /**
19
+ * Resolves what to check out for a job, keyed off the authoritative `jobId`
20
+ * (`workflowRunId`/`workflowRunAttemptId`/`workspaceId` in the lease claim are informational).
21
+ * Chain: job → attempt → run → project source metadata. Credential-free.
22
+ */
23
+ export async function resolveCheckoutIntent(jobId: string): Promise<CheckoutIntent> {
24
+ const job = await getJobById(jobId);
25
+ if (!job) throw new JobNotFoundError(jobId);
26
+
27
+ const run = await getWorkflowRunByAttemptId(job.workflowRunAttemptId);
28
+ if (!run) throw new WorkflowRunNotFoundError(job.workflowRunAttemptId);
29
+
30
+ const project = await getProjectById(run.projectId);
31
+ if (!project) throw new CheckoutIntentUnresolvedError(run.projectId);
32
+
33
+ return {
34
+ workspaceId: project.workspaceId,
35
+ connectionId: project.sourceConnectionId,
36
+ externalRepositoryId: project.sourceExternalRepositoryId,
37
+ persistCredentials: job.checkout.persistCredentials,
38
+ permissions: job.checkout.permissions,
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Resolves the job's checkout intent and exchanges it for a short-lived,
44
+ * scoped checkout spec. `ref` is left undefined so the provider defaults to the
45
+ * repository's default branch.
46
+ */
47
+ export async function createJobCheckoutSpec({
48
+ jobId,
49
+ sourceControl,
50
+ }: {
51
+ jobId: string;
52
+ sourceControl: IntegrationSourceControlService;
53
+ }): Promise<{spec: CheckoutSpec; persistCredentials: boolean}> {
54
+ const intent = await resolveCheckoutIntent(jobId);
55
+ const spec = await sourceControl.createCheckoutSpec({
56
+ workspaceId: intent.workspaceId,
57
+ connectionId: intent.connectionId,
58
+ externalRepositoryId: intent.externalRepositoryId,
59
+ ref: undefined,
60
+ permissions: intent.permissions,
61
+ });
62
+ return {spec, persistCredentials: intent.persistCredentials};
63
+ }
@@ -0,0 +1,64 @@
1
+ import {
2
+ type AvailabilitySite,
3
+ capTraceEntries,
4
+ evaluationTraceEntry,
5
+ predicateTraceEntry,
6
+ type RoutedExpression,
7
+ type WorkflowExpression,
8
+ } from '@shipfox/expression';
9
+ import type {PersistedEvaluationTraceEntry} from './entities/step.js';
10
+
11
+ const DEFAULT_JOB_CONDITION_SOURCE = 'needs.all(n, n.status == "succeeded")';
12
+ const DEFAULT_STEP_CONDITION_SOURCE = '!execution.failed';
13
+
14
+ export function explicitConditionTrace(params: {
15
+ readonly expression: WorkflowExpression;
16
+ readonly field: 'job.if' | 'step.if';
17
+ readonly route: RoutedExpression;
18
+ readonly site: AvailabilitySite;
19
+ readonly value: boolean;
20
+ readonly degraded: boolean;
21
+ }): readonly PersistedEvaluationTraceEntry[] {
22
+ return capTraceEntries([
23
+ {
24
+ ...predicateTraceEntry({
25
+ expression: params.expression.source,
26
+ route: params.route,
27
+ site: params.site,
28
+ value: params.value,
29
+ degraded: params.degraded,
30
+ }),
31
+ field: params.field,
32
+ },
33
+ ]);
34
+ }
35
+
36
+ export function defaultJobConditionTrace(): readonly PersistedEvaluationTraceEntry[] {
37
+ return capTraceEntries([
38
+ {
39
+ ...evaluationTraceEntry({
40
+ expression: DEFAULT_JOB_CONDITION_SOURCE,
41
+ roots: ['needs'],
42
+ fillTarget: 'job-activation',
43
+ evaluatedAt: 'job-activation',
44
+ value: 'false',
45
+ }),
46
+ field: 'job.default_gate',
47
+ },
48
+ ]);
49
+ }
50
+
51
+ export function defaultStepConditionTrace(): readonly PersistedEvaluationTraceEntry[] {
52
+ return capTraceEntries([
53
+ {
54
+ ...evaluationTraceEntry({
55
+ expression: DEFAULT_STEP_CONDITION_SOURCE,
56
+ roots: ['execution'],
57
+ fillTarget: 'step-dispatch',
58
+ evaluatedAt: 'step-dispatch',
59
+ value: 'false',
60
+ }),
61
+ field: 'step.default_gate',
62
+ },
63
+ ]);
64
+ }
@@ -0,0 +1,9 @@
1
+ export type {Job, JobCheckout, JobStatus} from './job.js';
2
+ export type {Step, StepStatus} from './step.js';
3
+ export type {
4
+ TriggerPayload,
5
+ WorkflowRun,
6
+ WorkflowRunStatus,
7
+ WorkflowSourceSnapshot,
8
+ } from './workflow-run.js';
9
+ export type {RerunMode, WorkflowRunAttempt} from './workflow-run-attempt.js';
@@ -0,0 +1,32 @@
1
+ import type {JobStatus, JobStatusReason} from './job.js';
2
+ import type {PersistedEvaluationTraceEntry} from './step.js';
3
+
4
+ export type JobExecutionStatus = Exclude<JobStatus, 'skipped'>;
5
+
6
+ export interface WorkflowExecutionEvent {
7
+ source: string;
8
+ event: string;
9
+ delivery_id: string;
10
+ received_at: string;
11
+ data: unknown;
12
+ }
13
+
14
+ export interface JobExecution {
15
+ id: string;
16
+ jobId: string;
17
+ sequence: number;
18
+ name: string;
19
+ runner: string[] | null;
20
+ status: JobExecutionStatus;
21
+ statusReason: JobStatusReason | null;
22
+ triggerEvents: WorkflowExecutionEvent[];
23
+ outputs: Record<string, unknown> | null;
24
+ evaluationTrace?: readonly PersistedEvaluationTraceEntry[] | null;
25
+ version: number;
26
+ createdAt: Date;
27
+ updatedAt: Date;
28
+ queuedAt: Date | null;
29
+ startedAt: Date | null;
30
+ finishedAt: Date | null;
31
+ timedOutAt: Date | null;
32
+ }