@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/temporal/workflows/job-execution-orchestration.ts"],"sourcesContent":["import {ApplicationFailure} from '@temporalio/common';\nimport {condition, defineSignal, log, proxyActivities, setHandler} from '@temporalio/workflow';\nimport {\n hasNoRequiredRunnerLabels,\n type JobExecutionOutcomeSignals,\n jobExecutionStartOutcome,\n resolveJobExecutionOutcomeSignal,\n} from '#core/job-execution-outcome.js';\nimport type {RuntimeCompletionStatus} from '#core/workflow-scheduling/runtime-dag.js';\n\nimport type {createOrchestrationActivities} from '../activities/index.js';\nimport {JOB_FINISHED_SIGNAL, JOB_LEASE_EXPIRED_SIGNAL} from '../constants.js';\n\n/**\n * Two signals, one precedence ladder, then best-effort lease release:\n *\n * job-finished (recordStepResult exhausted the steps) ─┐\n * job-lease-expired (runner heartbeat went stale) ─────┤\n * ▼\n * condition(finished ∥ leaseExpired, executionTimeout)\n * ├─ finished → setJobExecutionStatus(status) + resolve job status ─┐\n * ├─ leaseExpired → resolveLeaseExpiredJobExecutionActivity ─┤→ releaseLease\n * └─ neither (6h) → failJobExecutionAsTimedOutActivity + sweep steps (NO release; the\n * TIMED_OUT event drives cooperative cancel, the detector reaps)\n *\n * Both signals can be delivered before condition() resumes (independent outboxes,\n * no ordering), so finished is evaluated FIRST: a genuinely-finished job is never\n * flipped to failed by a late lease-expiry. releaseLease is best-effort — a runners\n * DB outage must never block the child workflow from returning the job outcome to\n * run-orchestration; a leftover lease row is reaped by the stuck detector.\n */\n\nconst {\n setJobStatus,\n setJobExecutionStatus,\n enqueueJobExecutionForRunner,\n bulkSetStepStatuses,\n failJobExecutionAsTimedOutActivity,\n resolveLeaseExpiredJobExecutionActivity,\n} = proxyActivities<ReturnType<typeof createOrchestrationActivities>>({\n startToCloseTimeout: '30s',\n});\n\nconst {resolveJobStatusFromJobExecutionsActivity} = proxyActivities<\n ReturnType<typeof createOrchestrationActivities>\n>({\n startToCloseTimeout: '30s',\n retry: {maximumAttempts: 5},\n});\n\n// Lease cleanup gets a bounded retry policy of its own: after a few attempts the\n// workflow stops waiting on it (see releaseLeaseBestEffort) rather than blocking\n// the DAG on runners-side availability.\nconst {releaseLeaseActivity} = proxyActivities<ReturnType<typeof createOrchestrationActivities>>({\n startToCloseTimeout: '30s',\n retry: {maximumAttempts: 5},\n});\n\nconst DEFAULT_EXECUTION_MAX_DURATION_MS = 6 * 60 * 60 * 1000;\n\nexport const jobFinishedSignal =\n defineSignal<[{status: RuntimeCompletionStatus; jobExecutionId?: string | undefined}]>(\n JOB_FINISHED_SIGNAL,\n );\nexport const jobLeaseExpiredSignal =\n defineSignal<[{jobExecutionId?: string | undefined}]>(JOB_LEASE_EXPIRED_SIGNAL);\n\nexport interface JobExecutionOrchestrationInput {\n workspaceId: string;\n workflowRunId: string;\n runAttemptId: string;\n jobId: string;\n jobExecutionId: string;\n projectId: string;\n jobVersion: number;\n executionVersion: number;\n executionTimeoutMs?: number | null | undefined;\n resolveJobStatus?: boolean | undefined;\n requiredLabels: string[];\n}\n\nexport interface JobExecutionOrchestrationResult {\n status: RuntimeCompletionStatus;\n jobVersion: number;\n}\n\nasync function releaseLeaseBestEffort(jobExecutionId: string): Promise<void> {\n try {\n await releaseLeaseActivity({jobExecutionId});\n } catch (err) {\n log.warn('lease release failed; stuck detector will reap the row', {\n jobExecutionId,\n error: String(err),\n });\n }\n}\n\nasync function resolveJobStatusOrFailClosed(\n input: JobExecutionOrchestrationInput,\n): Promise<{status: RuntimeCompletionStatus; jobVersion: number}> {\n try {\n return await resolveJobStatusFromJobExecutionsActivity({jobId: input.jobId});\n } catch (err) {\n log.error('job status resolution failed; failing job closed', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n error: String(err),\n });\n const {newVersion} = await setJobStatus({\n jobId: input.jobId,\n status: 'failed',\n version: input.jobVersion,\n statusReason: 'step_failed',\n });\n return {status: 'failed', jobVersion: newVersion};\n }\n}\n\nasync function markJobExecutionRunningAndEnqueue(\n input: JobExecutionOrchestrationInput,\n): Promise<\n | {kind: 'running'; runningVersion: number}\n | {kind: 'terminal'; result: JobExecutionOrchestrationResult}\n> {\n if (hasNoRequiredRunnerLabels(input.requiredLabels)) {\n throw ApplicationFailure.nonRetryable(\n `Job ${input.jobId} has no required runner labels`,\n 'EmptyRequiredLabelsError',\n );\n }\n\n const {newVersion: runningVersion, status} = await setJobExecutionStatus({\n jobExecutionId: input.jobExecutionId,\n status: 'running',\n version: input.executionVersion,\n });\n\n const start = jobExecutionStartOutcome({newVersion: runningVersion, status});\n if (start.kind === 'terminal') return start;\n\n await enqueueJobExecutionForRunner({\n workspaceId: input.workspaceId,\n workflowRunId: input.workflowRunId,\n runAttemptId: input.runAttemptId,\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n projectId: input.projectId,\n requiredLabels: input.requiredLabels,\n });\n\n return {kind: 'running', runningVersion};\n}\n\n// Both signals can arrive before condition() resumes (independent outboxes, no\n// ordering), so callers must evaluate `finished` before `leaseExpired`.\nasync function awaitJobOutcome(\n jobExecutionId: string,\n timeoutMs: number,\n): Promise<JobExecutionOutcomeSignals> {\n let finished: {status: RuntimeCompletionStatus; jobExecutionId?: string | undefined} | undefined;\n let leaseExpired = false;\n setHandler(jobFinishedSignal, (payload) => {\n if (payload.jobExecutionId !== undefined && payload.jobExecutionId !== jobExecutionId) return;\n finished ??= payload;\n });\n setHandler(jobLeaseExpiredSignal, (payload = {}) => {\n if (payload.jobExecutionId !== undefined && payload.jobExecutionId !== jobExecutionId) return;\n leaseExpired = true;\n });\n\n await condition(() => finished !== undefined || leaseExpired, timeoutMs);\n\n return {finished, leaseExpired};\n}\n\ninterface JobExecutionResolution {\n input: JobExecutionOrchestrationInput;\n runningVersion: number;\n}\n\nasync function resolveFinishedJobExecution({\n input,\n runningVersion,\n status,\n}: JobExecutionResolution & {\n status: RuntimeCompletionStatus;\n}): Promise<JobExecutionOrchestrationResult> {\n await setJobExecutionStatus({\n jobExecutionId: input.jobExecutionId,\n status: jobExecutionStatusForRuntimeStatus(status),\n version: runningVersion,\n statusReason: status === 'failed' ? 'step_failed' : null,\n });\n if (input.resolveJobStatus === false) {\n log.info('job execution terminated', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n terminationReason: 'finished',\n status,\n });\n await releaseLeaseBestEffort(input.jobExecutionId);\n return {status, jobVersion: input.jobVersion};\n }\n const resolved = await resolveJobStatusOrFailClosed(input);\n log.info('job execution terminated', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n terminationReason: 'finished',\n status: resolved.status,\n });\n await releaseLeaseBestEffort(input.jobExecutionId);\n return resolved;\n}\n\nfunction jobExecutionStatusForRuntimeStatus(\n status: RuntimeCompletionStatus,\n): 'succeeded' | 'failed' | 'cancelled' {\n if (status === 'succeeded' || status === 'failed' || status === 'cancelled') return status;\n throw ApplicationFailure.nonRetryable(\n `Job execution cannot be marked ${status}`,\n 'InvalidJobExecutionStatusError',\n );\n}\n\nasync function resolveLeaseExpiredJobExecution({\n input,\n runningVersion,\n}: JobExecutionResolution): Promise<JobExecutionOrchestrationResult> {\n const leaseExpired = await resolveLeaseExpiredJobExecutionActivity({\n jobExecutionId: input.jobExecutionId,\n expectedVersion: runningVersion,\n });\n if (input.resolveJobStatus === false) {\n log.info('job execution terminated', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n terminationReason: 'lease_expired',\n status: leaseExpired.status,\n });\n await releaseLeaseBestEffort(input.jobExecutionId);\n return {status: leaseExpired.status, jobVersion: input.jobVersion};\n }\n const {status, jobVersion} = await resolveJobStatusOrFailClosed(input);\n log.info('job execution terminated', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n terminationReason: 'lease_expired',\n status,\n });\n await releaseLeaseBestEffort(input.jobExecutionId);\n return {status, jobVersion};\n}\n\n// Timeout backstop. The activity atomically fails the execution, marks\n// `timed_out_at`, and enqueues WORKFLOWS_JOB_EXECUTION_TIMED_OUT; the runners subscriber\n// then asks the runner to cancel. The lease is intentionally NOT released here.\nasync function resolveTimedOutJobExecution({\n input,\n runningVersion,\n}: JobExecutionResolution): Promise<JobExecutionOrchestrationResult> {\n await failJobExecutionAsTimedOutActivity({\n jobExecutionId: input.jobExecutionId,\n runAttemptId: input.runAttemptId,\n expectedVersion: runningVersion,\n });\n await bulkSetStepStatuses({jobExecutionId: input.jobExecutionId, status: 'failed'});\n if (input.resolveJobStatus === false) {\n log.info('job execution terminated', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n terminationReason: 'max_duration',\n status: 'failed',\n });\n return {status: 'failed', jobVersion: input.jobVersion};\n }\n const {jobVersion} = await resolveJobStatusOrFailClosed(input);\n log.info('job execution terminated', {\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n terminationReason: 'max_duration',\n status: 'failed',\n });\n return {status: 'failed', jobVersion};\n}\n\nexport async function jobExecutionOrchestration(\n input: JobExecutionOrchestrationInput,\n): Promise<JobExecutionOrchestrationResult> {\n const running = await markJobExecutionRunningAndEnqueue(input);\n if (running.kind === 'terminal') {\n if (input.resolveJobStatus === false) {\n return {status: running.result.status, jobVersion: input.jobVersion};\n }\n return running.result;\n }\n const {runningVersion} = running;\n\n const timeoutMs = input.executionTimeoutMs ?? DEFAULT_EXECUTION_MAX_DURATION_MS;\n const signals = await awaitJobOutcome(input.jobExecutionId, timeoutMs);\n\n // Precedence ladder: a genuinely-finished job is never flipped to failed by a\n // late lease-expiry, so `finished` wins over `leaseExpired`.\n const resolution = resolveJobExecutionOutcomeSignal(signals);\n if (resolution === 'finished') {\n const {finished} = signals;\n if (finished === undefined) throw new Error('Missing finished signal for finished resolution');\n\n return resolveFinishedJobExecution({input, runningVersion, status: finished.status});\n }\n if (resolution === 'lease-expired') {\n return resolveLeaseExpiredJobExecution({input, runningVersion});\n }\n return resolveTimedOutJobExecution({input, runningVersion});\n}\n"],"names":["ApplicationFailure","condition","defineSignal","log","proxyActivities","setHandler","hasNoRequiredRunnerLabels","jobExecutionStartOutcome","resolveJobExecutionOutcomeSignal","JOB_FINISHED_SIGNAL","JOB_LEASE_EXPIRED_SIGNAL","setJobStatus","setJobExecutionStatus","enqueueJobExecutionForRunner","bulkSetStepStatuses","failJobExecutionAsTimedOutActivity","resolveLeaseExpiredJobExecutionActivity","startToCloseTimeout","resolveJobStatusFromJobExecutionsActivity","retry","maximumAttempts","releaseLeaseActivity","DEFAULT_EXECUTION_MAX_DURATION_MS","jobFinishedSignal","jobLeaseExpiredSignal","releaseLeaseBestEffort","jobExecutionId","err","warn","error","String","resolveJobStatusOrFailClosed","input","jobId","newVersion","status","version","jobVersion","statusReason","markJobExecutionRunningAndEnqueue","requiredLabels","nonRetryable","runningVersion","executionVersion","start","kind","workspaceId","workflowRunId","runAttemptId","projectId","awaitJobOutcome","timeoutMs","finished","leaseExpired","payload","undefined","resolveFinishedJobExecution","jobExecutionStatusForRuntimeStatus","resolveJobStatus","info","terminationReason","resolved","resolveLeaseExpiredJobExecution","expectedVersion","resolveTimedOutJobExecution","jobExecutionOrchestration","running","result","executionTimeoutMs","signals","resolution","Error"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { ResolutionReason } from '#core/entities/job.js';
2
+ import type { RuntimeCompletionStatus } from '#core/workflow-scheduling/runtime-dag.js';
3
+ export declare const listenerEventsAvailableSignal: import("@temporalio/workflow").SignalDefinition<[], string>;
4
+ export declare const listenerResolveSignal: import("@temporalio/workflow").SignalDefinition<[], string>;
5
+ export interface JobListenerOrchestrationInput {
6
+ workspaceId: string;
7
+ workflowRunId: string;
8
+ projectId: string;
9
+ runAttemptId: string;
10
+ jobId: string;
11
+ jobVersion: number;
12
+ requiredLabels: string[];
13
+ executionTimeoutMs?: number | null | undefined;
14
+ listeningTimeoutMs?: number | null | undefined;
15
+ maxExecutions?: number | null | undefined;
16
+ onResolve?: 'finish' | 'cancel' | null | undefined;
17
+ batchDebounceMs?: number | null | undefined;
18
+ batchMaxSize?: number | null | undefined;
19
+ batchMaxWaitMs?: number | null | undefined;
20
+ continuation?: ListenerContinuationState | undefined;
21
+ }
22
+ export interface JobListenerOrchestrationResult {
23
+ status: RuntimeCompletionStatus;
24
+ jobVersion: number;
25
+ }
26
+ type ResolutionLatch = Exclude<ResolutionReason, 'cancelled'> | undefined;
27
+ export interface ListenerContinuationState {
28
+ nextSequence: number;
29
+ latchedReason?: ResolutionLatch;
30
+ listenerDeadline?: number | undefined;
31
+ }
32
+ export declare const LISTENER_CONTINUE_AS_NEW_FIRING_LIMIT = 500;
33
+ export declare function jobListenerOrchestration(input: JobListenerOrchestrationInput): Promise<JobListenerOrchestrationResult>;
34
+ export declare function shouldContinueListenerAsNew(params: {
35
+ firingsInCurrentRun: number;
36
+ continueAsNewSuggested: boolean;
37
+ }): boolean;
38
+ export declare function listenerContinuationInput(input: JobListenerOrchestrationInput, continuation: ListenerContinuationState): JobListenerOrchestrationInput;
39
+ export {};
40
+ //# sourceMappingURL=job-listener-orchestration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-listener-orchestration.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/job-listener-orchestration.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0CAA0C,CAAC;AAkBtF,eAAO,MAAM,6BAA6B,6DAAqD,CAAC;AAChG,eAAO,MAAM,qBAAqB,6DAA4C,CAAC;AAE/E,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;AAG1E,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,eAAO,MAAM,qCAAqC,MAAM,CAAC;AAwBzD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,8BAA8B,CAAC,CAuIzC;AAiCD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAKV;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,6BAA6B,EACpC,YAAY,EAAE,yBAAyB,GACtC,6BAA6B,CAE/B"}
@@ -0,0 +1,332 @@
1
+ import { CancellationScope, condition, continueAsNew, defineSignal, executeChild, log, ParentClosePolicy, proxyActivities, setHandler, workflowInfo } from '@temporalio/workflow';
2
+ import { runtimeStatusForTerminalJobExecutionStatus } from '#core/job-execution-outcome.js';
3
+ import { LISTENER_EVENTS_AVAILABLE_SIGNAL, LISTENER_RESOLVE_SIGNAL } from '../constants.js';
4
+ import { deadlineReached, remainingMs } from './deadline.js';
5
+ import { jobExecutionOrchestration } from './job-execution-orchestration.js';
6
+ const { activateJobListenerActivity, drainListenerEventsActivity, peekListenerBufferActivity, resolveJobListenerActivity, settleListenerJobExecutionActivity, recordListenerFiringOutcomeActivity, cancelRunnerJobsActivity } = proxyActivities({
7
+ startToCloseTimeout: '30s'
8
+ });
9
+ export const listenerEventsAvailableSignal = defineSignal(LISTENER_EVENTS_AVAILABLE_SIGNAL);
10
+ export const listenerResolveSignal = defineSignal(LISTENER_RESOLVE_SIGNAL);
11
+ export const LISTENER_CONTINUE_AS_NEW_FIRING_LIMIT = 500;
12
+ export async function jobListenerOrchestration(input) {
13
+ let eventsAvailable = false;
14
+ let latchedReason = input.continuation?.latchedReason;
15
+ setHandler(listenerEventsAvailableSignal, ()=>{
16
+ eventsAvailable = true;
17
+ });
18
+ setHandler(listenerResolveSignal, ()=>{
19
+ latchedReason = 'until';
20
+ });
21
+ const listenerDeadline = input.continuation?.listenerDeadline ?? initialListenerDeadline(input);
22
+ let nextSequence;
23
+ if (input.continuation) {
24
+ nextSequence = input.continuation.nextSequence;
25
+ } else {
26
+ const activated = await activateJobListenerActivity({
27
+ jobId: input.jobId,
28
+ expectedVersion: input.jobVersion
29
+ });
30
+ if (activated.status === 'terminal') {
31
+ return {
32
+ status: runtimeStatusForTerminalJobExecutionStatus(activated.jobStatus),
33
+ jobVersion: activated.jobVersion
34
+ };
35
+ }
36
+ nextSequence = activated.executionCount + 1;
37
+ }
38
+ let firingsInCurrentRun = 0;
39
+ const maxExecutions = input.maxExecutions ?? undefined;
40
+ const batchConfig = listenerBatchConfig(input);
41
+ while(true){
42
+ if (deadlineReached(listenerDeadline)) latchedReason ??= 'timeout';
43
+ await continueListenerAsNewIfNeeded({
44
+ input,
45
+ nextSequence,
46
+ latchedReason,
47
+ listenerDeadline,
48
+ firingsInCurrentRun
49
+ });
50
+ if (latchedReason !== undefined) break;
51
+ if (maxExecutions !== undefined) {
52
+ if (nextSequence > maxExecutions) {
53
+ latchedReason = 'max_executions';
54
+ await continueListenerAsNewIfNeeded({
55
+ input,
56
+ nextSequence,
57
+ latchedReason,
58
+ listenerDeadline,
59
+ firingsInCurrentRun
60
+ });
61
+ break;
62
+ }
63
+ }
64
+ if (batchConfig !== undefined) {
65
+ const decision = await awaitBatchFiringWindow({
66
+ jobId: input.jobId,
67
+ batchConfig,
68
+ listenerDeadline,
69
+ hasEventsHint: ()=>eventsAvailable,
70
+ clearEventsHint: ()=>{
71
+ eventsAvailable = false;
72
+ },
73
+ hasResolutionHint: ()=>latchedReason !== undefined
74
+ });
75
+ if (decision === 'resolve') {
76
+ latchedReason ??= 'until';
77
+ break;
78
+ }
79
+ if (decision === 'deadline') {
80
+ latchedReason ??= 'timeout';
81
+ break;
82
+ }
83
+ }
84
+ eventsAvailable = false;
85
+ const drained = await drainListenerEventsActivity({
86
+ jobId: input.jobId,
87
+ expectedSequence: nextSequence,
88
+ ...batchConfig?.maxSizeEvents === undefined ? {} : {
89
+ maxSize: batchConfig.maxSizeEvents
90
+ }
91
+ });
92
+ if (drained.kind === 'resolve-requested') {
93
+ latchedReason = 'until';
94
+ break;
95
+ }
96
+ if (drained.kind === 'empty') {
97
+ const woke = await waitForListenerWakeup(()=>eventsAvailable || latchedReason !== undefined, {
98
+ deadline: listenerDeadline
99
+ });
100
+ if (!woke && deadlineReached(listenerDeadline)) latchedReason = 'timeout';
101
+ continue;
102
+ }
103
+ if (drained.status === 'failed') {
104
+ await recordListenerFiringOutcomeActivity({
105
+ outcome: 'failed'
106
+ });
107
+ nextSequence = drained.sequence + 1;
108
+ firingsInCurrentRun += 1;
109
+ if (maxExecutions !== undefined && drained.sequence >= maxExecutions) {
110
+ latchedReason = 'max_executions';
111
+ }
112
+ continue;
113
+ }
114
+ await runListenerExecution({
115
+ input,
116
+ jobExecutionId: drained.jobExecutionId,
117
+ executionVersion: drained.executionVersion,
118
+ requiredLabels: drained.requiredLabels,
119
+ shouldCancelForResolution: ()=>input.onResolve === 'cancel' && (latchedReason !== undefined || deadlineReached(listenerDeadline)),
120
+ waitForResolution: ()=>waitForListenerWakeup(()=>latchedReason !== undefined || deadlineReached(listenerDeadline), {
121
+ deadline: listenerDeadline
122
+ })
123
+ });
124
+ if (deadlineReached(listenerDeadline)) latchedReason ??= 'timeout';
125
+ nextSequence = drained.sequence + 1;
126
+ firingsInCurrentRun += 1;
127
+ if (maxExecutions !== undefined && drained.sequence >= maxExecutions) {
128
+ latchedReason = 'max_executions';
129
+ }
130
+ }
131
+ const reason = latchedReason ?? 'timeout';
132
+ const resolved = await resolveJobListenerActivity({
133
+ jobId: input.jobId,
134
+ reason
135
+ });
136
+ return {
137
+ status: resolved.status,
138
+ jobVersion: resolved.jobVersion
139
+ };
140
+ }
141
+ function initialListenerDeadline(input) {
142
+ return input.listeningTimeoutMs === undefined || input.listeningTimeoutMs === null ? undefined : Date.now() + input.listeningTimeoutMs;
143
+ }
144
+ async function continueListenerAsNewIfNeeded(params) {
145
+ if (!shouldContinueListenerAsNew({
146
+ firingsInCurrentRun: params.firingsInCurrentRun,
147
+ continueAsNewSuggested: workflowInfo().continueAsNewSuggested
148
+ })) {
149
+ return;
150
+ }
151
+ await continueAsNew(listenerContinuationInput(params.input, {
152
+ nextSequence: params.nextSequence,
153
+ latchedReason: params.latchedReason,
154
+ listenerDeadline: params.listenerDeadline
155
+ }));
156
+ }
157
+ export function shouldContinueListenerAsNew(params) {
158
+ return params.continueAsNewSuggested || params.firingsInCurrentRun >= LISTENER_CONTINUE_AS_NEW_FIRING_LIMIT;
159
+ }
160
+ export function listenerContinuationInput(input, continuation) {
161
+ return {
162
+ ...input,
163
+ continuation
164
+ };
165
+ }
166
+ function listenerBatchConfig(input) {
167
+ const debounceMs = positiveNumber(input.batchDebounceMs);
168
+ const maxSizeEvents = positiveNumber(input.batchMaxSize);
169
+ const maxWaitMs = positiveNumber(input.batchMaxWaitMs);
170
+ if (debounceMs === undefined && maxSizeEvents === undefined && maxWaitMs === undefined) {
171
+ return undefined;
172
+ }
173
+ return {
174
+ debounceMs,
175
+ maxSizeEvents,
176
+ maxWaitMs
177
+ };
178
+ }
179
+ async function awaitBatchFiringWindow(params) {
180
+ while(true){
181
+ const prePeekDecision = resolutionOrDeadlineDecision(params);
182
+ if (prePeekDecision !== undefined) return prePeekDecision;
183
+ const peek = await peekBatchBuffer(params);
184
+ const peekDecision = bufferedResolveOrDeadlineDecision(params, peek);
185
+ if (peekDecision !== undefined) return peekDecision;
186
+ if (peek.fireCount === 0) {
187
+ const waitDecision = await waitForAnyBatchWakeup(params);
188
+ if (waitDecision !== undefined) return waitDecision;
189
+ continue;
190
+ }
191
+ if (batchIsReadyToFire(params.batchConfig, peek)) return 'fire';
192
+ const sleepMs = nextBatchWindowMs(params.batchConfig, peek);
193
+ if (sleepMs === undefined) {
194
+ const waitDecision = await waitForAnyBatchWakeup(params);
195
+ if (waitDecision !== undefined) return waitDecision;
196
+ continue;
197
+ }
198
+ const waitDecision = await waitForBatchWindow(params, sleepMs);
199
+ if (waitDecision !== undefined) return waitDecision;
200
+ }
201
+ }
202
+ function resolutionOrDeadlineDecision(params) {
203
+ if (params.hasResolutionHint()) return 'resolve';
204
+ if (deadlineReached(params.listenerDeadline)) return 'deadline';
205
+ return undefined;
206
+ }
207
+ async function peekBatchBuffer(params) {
208
+ params.clearEventsHint();
209
+ return await peekListenerBufferActivity({
210
+ jobId: params.jobId
211
+ });
212
+ }
213
+ function bufferedResolveOrDeadlineDecision(params, peek) {
214
+ if (peek.resolvePending || params.hasResolutionHint()) return 'resolve';
215
+ if (deadlineReached(params.listenerDeadline)) return 'deadline';
216
+ return undefined;
217
+ }
218
+ function batchIsReadyToFire(config, peek) {
219
+ const sizeReached = config.maxSizeEvents !== undefined && peek.fireCount >= config.maxSizeEvents;
220
+ const debounceQuiet = config.debounceMs !== undefined && peek.newestAgeMs >= config.debounceMs;
221
+ const maxWaitReached = config.maxWaitMs !== undefined && peek.oldestAgeMs >= config.maxWaitMs;
222
+ return sizeReached || debounceQuiet || maxWaitReached;
223
+ }
224
+ function nextBatchWindowMs(config, peek) {
225
+ const timeWindows = [
226
+ remainingWindowMs(config.debounceMs, peek.newestAgeMs),
227
+ remainingWindowMs(config.maxWaitMs, peek.oldestAgeMs)
228
+ ].filter((value)=>value !== undefined);
229
+ return timeWindows.length === 0 ? undefined : Math.min(...timeWindows);
230
+ }
231
+ async function waitForAnyBatchWakeup(params) {
232
+ const woke = await waitForListenerWakeup(()=>params.hasEventsHint() || params.hasResolutionHint(), {
233
+ deadline: params.listenerDeadline
234
+ });
235
+ if (!woke && deadlineReached(params.listenerDeadline)) return 'deadline';
236
+ return undefined;
237
+ }
238
+ async function waitForBatchWindow(params, sleepMs) {
239
+ const deadlineRemaining = remainingMs(params.listenerDeadline);
240
+ const boundedSleepMs = deadlineRemaining === undefined ? sleepMs : Math.min(sleepMs, deadlineRemaining);
241
+ const wakesOnEvents = params.batchConfig.debounceMs !== undefined || params.batchConfig.maxSizeEvents !== undefined;
242
+ const woke = await condition(()=>params.hasResolutionHint() || wakesOnEvents && params.hasEventsHint() || deadlineReached(params.listenerDeadline), boundedSleepMs);
243
+ if (!woke && deadlineReached(params.listenerDeadline)) return 'deadline';
244
+ return undefined;
245
+ }
246
+ function positiveNumber(value) {
247
+ return value === undefined || value === null || value <= 0 ? undefined : value;
248
+ }
249
+ function remainingWindowMs(limitMs, ageMs) {
250
+ return limitMs === undefined ? undefined : Math.max(0, limitMs - ageMs);
251
+ }
252
+ async function runListenerExecution(params) {
253
+ const scope = new CancellationScope();
254
+ const child = scope.run(()=>executeChild(jobExecutionOrchestration, {
255
+ workflowId: `job:${params.input.jobId}`,
256
+ workflowIdReusePolicy: 'ALLOW_DUPLICATE',
257
+ args: [
258
+ {
259
+ workspaceId: params.input.workspaceId,
260
+ workflowRunId: params.input.workflowRunId,
261
+ projectId: params.input.projectId,
262
+ jobId: params.input.jobId,
263
+ jobExecutionId: params.jobExecutionId,
264
+ runAttemptId: params.input.runAttemptId,
265
+ jobVersion: params.input.jobVersion,
266
+ executionVersion: params.executionVersion,
267
+ ...params.input.executionTimeoutMs === undefined ? {} : {
268
+ executionTimeoutMs: params.input.executionTimeoutMs
269
+ },
270
+ resolveJobStatus: false,
271
+ requiredLabels: params.requiredLabels
272
+ }
273
+ ],
274
+ parentClosePolicy: ParentClosePolicy.TERMINATE
275
+ }));
276
+ if (params.input.onResolve === 'cancel') {
277
+ const winner = await Promise.race([
278
+ child.then(()=>'child', ()=>'child-failed'),
279
+ params.waitForResolution().then(()=>'resolution')
280
+ ]);
281
+ if (winner === 'resolution' && params.shouldCancelForResolution()) {
282
+ scope.cancel();
283
+ await settleListenerJobExecutionActivity({
284
+ jobExecutionId: params.jobExecutionId,
285
+ status: 'cancelled'
286
+ });
287
+ await recordListenerFiringOutcomeActivity({
288
+ outcome: 'cancelled'
289
+ });
290
+ await cancelRunnerJobsActivity({
291
+ jobIds: [
292
+ params.input.jobId
293
+ ]
294
+ });
295
+ return;
296
+ }
297
+ }
298
+ try {
299
+ const result = await child;
300
+ await recordListenerFiringOutcomeActivity({
301
+ outcome: listenerFiringOutcome(result.status)
302
+ });
303
+ } catch (error) {
304
+ log.warn('listener execution child failed; recording failed firing and continuing', {
305
+ jobId: params.input.jobId,
306
+ jobExecutionId: params.jobExecutionId,
307
+ error: String(error)
308
+ });
309
+ await settleListenerJobExecutionActivity({
310
+ jobExecutionId: params.jobExecutionId,
311
+ status: 'failed'
312
+ });
313
+ await recordListenerFiringOutcomeActivity({
314
+ outcome: 'failed'
315
+ });
316
+ }
317
+ }
318
+ function listenerFiringOutcome(status) {
319
+ if (status === 'succeeded' || status === 'failed' || status === 'cancelled') return status;
320
+ throw new Error(`Listener execution cannot finish with status: ${status}`);
321
+ }
322
+ async function waitForListenerWakeup(predicate, options) {
323
+ const remaining = remainingMs(options.deadline);
324
+ if (remaining !== undefined && remaining <= 0) return false;
325
+ if (remaining === undefined) {
326
+ await condition(predicate);
327
+ return true;
328
+ }
329
+ return await condition(predicate, remaining);
330
+ }
331
+
332
+ //# sourceMappingURL=job-listener-orchestration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/temporal/workflows/job-listener-orchestration.ts"],"sourcesContent":["import {\n CancellationScope,\n condition,\n continueAsNew,\n defineSignal,\n executeChild,\n log,\n ParentClosePolicy,\n proxyActivities,\n setHandler,\n workflowInfo,\n} from '@temporalio/workflow';\nimport type {ResolutionReason} from '#core/entities/job.js';\nimport {runtimeStatusForTerminalJobExecutionStatus} from '#core/job-execution-outcome.js';\nimport type {RuntimeCompletionStatus} from '#core/workflow-scheduling/runtime-dag.js';\nimport type {createOrchestrationActivities} from '../activities/index.js';\nimport {LISTENER_EVENTS_AVAILABLE_SIGNAL, LISTENER_RESOLVE_SIGNAL} from '../constants.js';\nimport {deadlineReached, remainingMs} from './deadline.js';\nimport {jobExecutionOrchestration} from './job-execution-orchestration.js';\n\nconst {\n activateJobListenerActivity,\n drainListenerEventsActivity,\n peekListenerBufferActivity,\n resolveJobListenerActivity,\n settleListenerJobExecutionActivity,\n recordListenerFiringOutcomeActivity,\n cancelRunnerJobsActivity,\n} = proxyActivities<ReturnType<typeof createOrchestrationActivities>>({\n startToCloseTimeout: '30s',\n});\n\nexport const listenerEventsAvailableSignal = defineSignal<[]>(LISTENER_EVENTS_AVAILABLE_SIGNAL);\nexport const listenerResolveSignal = defineSignal<[]>(LISTENER_RESOLVE_SIGNAL);\n\nexport interface JobListenerOrchestrationInput {\n workspaceId: string;\n workflowRunId: string;\n projectId: string;\n runAttemptId: string;\n jobId: string;\n jobVersion: number;\n requiredLabels: string[];\n executionTimeoutMs?: number | null | undefined;\n listeningTimeoutMs?: number | null | undefined;\n maxExecutions?: number | null | undefined;\n onResolve?: 'finish' | 'cancel' | null | undefined;\n batchDebounceMs?: number | null | undefined;\n batchMaxSize?: number | null | undefined;\n batchMaxWaitMs?: number | null | undefined;\n continuation?: ListenerContinuationState | undefined;\n}\n\nexport interface JobListenerOrchestrationResult {\n status: RuntimeCompletionStatus;\n jobVersion: number;\n}\n\ntype ResolutionLatch = Exclude<ResolutionReason, 'cancelled'> | undefined;\ntype BatchFiringDecision = 'fire' | 'resolve' | 'deadline';\n\nexport interface ListenerContinuationState {\n nextSequence: number;\n latchedReason?: ResolutionLatch;\n listenerDeadline?: number | undefined;\n}\n\nexport const LISTENER_CONTINUE_AS_NEW_FIRING_LIMIT = 500;\n\ninterface ListenerBatchConfig {\n debounceMs?: number | undefined;\n maxSizeEvents?: number | undefined;\n maxWaitMs?: number | undefined;\n}\n\ninterface BatchFiringWindowParams {\n jobId: string;\n batchConfig: ListenerBatchConfig;\n listenerDeadline: number | undefined;\n hasEventsHint: () => boolean;\n clearEventsHint: () => void;\n hasResolutionHint: () => boolean;\n}\n\ninterface ListenerBufferPeek {\n fireCount: number;\n resolvePending: boolean;\n oldestAgeMs: number;\n newestAgeMs: number;\n}\n\nexport async function jobListenerOrchestration(\n input: JobListenerOrchestrationInput,\n): Promise<JobListenerOrchestrationResult> {\n let eventsAvailable = false;\n let latchedReason = input.continuation?.latchedReason;\n\n setHandler(listenerEventsAvailableSignal, () => {\n eventsAvailable = true;\n });\n setHandler(listenerResolveSignal, () => {\n latchedReason = 'until';\n });\n\n const listenerDeadline = input.continuation?.listenerDeadline ?? initialListenerDeadline(input);\n\n let nextSequence: number;\n if (input.continuation) {\n nextSequence = input.continuation.nextSequence;\n } else {\n const activated = await activateJobListenerActivity({\n jobId: input.jobId,\n expectedVersion: input.jobVersion,\n });\n if (activated.status === 'terminal') {\n return {\n status: runtimeStatusForTerminalJobExecutionStatus(activated.jobStatus),\n jobVersion: activated.jobVersion,\n };\n }\n nextSequence = activated.executionCount + 1;\n }\n\n let firingsInCurrentRun = 0;\n const maxExecutions = input.maxExecutions ?? undefined;\n const batchConfig = listenerBatchConfig(input);\n while (true) {\n if (deadlineReached(listenerDeadline)) latchedReason ??= 'timeout';\n await continueListenerAsNewIfNeeded({\n input,\n nextSequence,\n latchedReason,\n listenerDeadline,\n firingsInCurrentRun,\n });\n if (latchedReason !== undefined) break;\n if (maxExecutions !== undefined) {\n if (nextSequence > maxExecutions) {\n latchedReason = 'max_executions';\n await continueListenerAsNewIfNeeded({\n input,\n nextSequence,\n latchedReason,\n listenerDeadline,\n firingsInCurrentRun,\n });\n break;\n }\n }\n\n if (batchConfig !== undefined) {\n const decision = await awaitBatchFiringWindow({\n jobId: input.jobId,\n batchConfig,\n listenerDeadline,\n hasEventsHint: () => eventsAvailable,\n clearEventsHint: () => {\n eventsAvailable = false;\n },\n hasResolutionHint: () => latchedReason !== undefined,\n });\n if (decision === 'resolve') {\n latchedReason ??= 'until';\n break;\n }\n if (decision === 'deadline') {\n latchedReason ??= 'timeout';\n break;\n }\n }\n\n eventsAvailable = false;\n const drained = await drainListenerEventsActivity({\n jobId: input.jobId,\n expectedSequence: nextSequence,\n ...(batchConfig?.maxSizeEvents === undefined ? {} : {maxSize: batchConfig.maxSizeEvents}),\n });\n\n if (drained.kind === 'resolve-requested') {\n latchedReason = 'until';\n break;\n }\n\n if (drained.kind === 'empty') {\n const woke = await waitForListenerWakeup(\n () => eventsAvailable || latchedReason !== undefined,\n {deadline: listenerDeadline},\n );\n if (!woke && deadlineReached(listenerDeadline)) latchedReason = 'timeout';\n continue;\n }\n\n if (drained.status === 'failed') {\n await recordListenerFiringOutcomeActivity({outcome: 'failed'});\n nextSequence = drained.sequence + 1;\n firingsInCurrentRun += 1;\n if (maxExecutions !== undefined && drained.sequence >= maxExecutions) {\n latchedReason = 'max_executions';\n }\n continue;\n }\n\n await runListenerExecution({\n input,\n jobExecutionId: drained.jobExecutionId,\n executionVersion: drained.executionVersion,\n requiredLabels: drained.requiredLabels,\n shouldCancelForResolution: () =>\n input.onResolve === 'cancel' &&\n (latchedReason !== undefined || deadlineReached(listenerDeadline)),\n waitForResolution: () =>\n waitForListenerWakeup(\n () => latchedReason !== undefined || deadlineReached(listenerDeadline),\n {deadline: listenerDeadline},\n ),\n });\n\n if (deadlineReached(listenerDeadline)) latchedReason ??= 'timeout';\n nextSequence = drained.sequence + 1;\n firingsInCurrentRun += 1;\n if (maxExecutions !== undefined && drained.sequence >= maxExecutions) {\n latchedReason = 'max_executions';\n }\n }\n\n const reason = latchedReason ?? 'timeout';\n const resolved = await resolveJobListenerActivity({jobId: input.jobId, reason});\n return {status: resolved.status, jobVersion: resolved.jobVersion};\n}\n\nfunction initialListenerDeadline(input: JobListenerOrchestrationInput): number | undefined {\n return input.listeningTimeoutMs === undefined || input.listeningTimeoutMs === null\n ? undefined\n : Date.now() + input.listeningTimeoutMs;\n}\n\nasync function continueListenerAsNewIfNeeded(params: {\n input: JobListenerOrchestrationInput;\n nextSequence: number;\n latchedReason: ResolutionLatch;\n listenerDeadline: number | undefined;\n firingsInCurrentRun: number;\n}): Promise<void> {\n if (\n !shouldContinueListenerAsNew({\n firingsInCurrentRun: params.firingsInCurrentRun,\n continueAsNewSuggested: workflowInfo().continueAsNewSuggested,\n })\n ) {\n return;\n }\n\n await continueAsNew<typeof jobListenerOrchestration>(\n listenerContinuationInput(params.input, {\n nextSequence: params.nextSequence,\n latchedReason: params.latchedReason,\n listenerDeadline: params.listenerDeadline,\n }),\n );\n}\n\nexport function shouldContinueListenerAsNew(params: {\n firingsInCurrentRun: number;\n continueAsNewSuggested: boolean;\n}): boolean {\n return (\n params.continueAsNewSuggested ||\n params.firingsInCurrentRun >= LISTENER_CONTINUE_AS_NEW_FIRING_LIMIT\n );\n}\n\nexport function listenerContinuationInput(\n input: JobListenerOrchestrationInput,\n continuation: ListenerContinuationState,\n): JobListenerOrchestrationInput {\n return {...input, continuation};\n}\n\nfunction listenerBatchConfig(\n input: JobListenerOrchestrationInput,\n): ListenerBatchConfig | undefined {\n const debounceMs = positiveNumber(input.batchDebounceMs);\n const maxSizeEvents = positiveNumber(input.batchMaxSize);\n const maxWaitMs = positiveNumber(input.batchMaxWaitMs);\n if (debounceMs === undefined && maxSizeEvents === undefined && maxWaitMs === undefined) {\n return undefined;\n }\n return {debounceMs, maxSizeEvents, maxWaitMs};\n}\n\nasync function awaitBatchFiringWindow(\n params: BatchFiringWindowParams,\n): Promise<BatchFiringDecision> {\n while (true) {\n const prePeekDecision = resolutionOrDeadlineDecision(params);\n if (prePeekDecision !== undefined) return prePeekDecision;\n\n const peek = await peekBatchBuffer(params);\n const peekDecision = bufferedResolveOrDeadlineDecision(params, peek);\n if (peekDecision !== undefined) return peekDecision;\n\n if (peek.fireCount === 0) {\n const waitDecision = await waitForAnyBatchWakeup(params);\n if (waitDecision !== undefined) return waitDecision;\n continue;\n }\n\n if (batchIsReadyToFire(params.batchConfig, peek)) return 'fire';\n\n const sleepMs = nextBatchWindowMs(params.batchConfig, peek);\n if (sleepMs === undefined) {\n const waitDecision = await waitForAnyBatchWakeup(params);\n if (waitDecision !== undefined) return waitDecision;\n continue;\n }\n\n const waitDecision = await waitForBatchWindow(params, sleepMs);\n if (waitDecision !== undefined) return waitDecision;\n }\n}\n\nfunction resolutionOrDeadlineDecision(\n params: BatchFiringWindowParams,\n): Exclude<BatchFiringDecision, 'fire'> | undefined {\n if (params.hasResolutionHint()) return 'resolve';\n if (deadlineReached(params.listenerDeadline)) return 'deadline';\n return undefined;\n}\n\nasync function peekBatchBuffer(params: BatchFiringWindowParams): Promise<ListenerBufferPeek> {\n params.clearEventsHint();\n return await peekListenerBufferActivity({jobId: params.jobId});\n}\n\nfunction bufferedResolveOrDeadlineDecision(\n params: BatchFiringWindowParams,\n peek: ListenerBufferPeek,\n): Exclude<BatchFiringDecision, 'fire'> | undefined {\n if (peek.resolvePending || params.hasResolutionHint()) return 'resolve';\n if (deadlineReached(params.listenerDeadline)) return 'deadline';\n return undefined;\n}\n\nfunction batchIsReadyToFire(config: ListenerBatchConfig, peek: ListenerBufferPeek): boolean {\n const sizeReached = config.maxSizeEvents !== undefined && peek.fireCount >= config.maxSizeEvents;\n const debounceQuiet = config.debounceMs !== undefined && peek.newestAgeMs >= config.debounceMs;\n const maxWaitReached = config.maxWaitMs !== undefined && peek.oldestAgeMs >= config.maxWaitMs;\n return sizeReached || debounceQuiet || maxWaitReached;\n}\n\nfunction nextBatchWindowMs(\n config: ListenerBatchConfig,\n peek: ListenerBufferPeek,\n): number | undefined {\n const timeWindows = [\n remainingWindowMs(config.debounceMs, peek.newestAgeMs),\n remainingWindowMs(config.maxWaitMs, peek.oldestAgeMs),\n ].filter((value): value is number => value !== undefined);\n return timeWindows.length === 0 ? undefined : Math.min(...timeWindows);\n}\n\nasync function waitForAnyBatchWakeup(\n params: BatchFiringWindowParams,\n): Promise<Exclude<BatchFiringDecision, 'fire'> | undefined> {\n const woke = await waitForListenerWakeup(\n () => params.hasEventsHint() || params.hasResolutionHint(),\n {deadline: params.listenerDeadline},\n );\n if (!woke && deadlineReached(params.listenerDeadline)) return 'deadline';\n return undefined;\n}\n\nasync function waitForBatchWindow(\n params: BatchFiringWindowParams,\n sleepMs: number,\n): Promise<Exclude<BatchFiringDecision, 'fire'> | undefined> {\n const deadlineRemaining = remainingMs(params.listenerDeadline);\n const boundedSleepMs =\n deadlineRemaining === undefined ? sleepMs : Math.min(sleepMs, deadlineRemaining);\n const wakesOnEvents =\n params.batchConfig.debounceMs !== undefined || params.batchConfig.maxSizeEvents !== undefined;\n const woke = await condition(\n () =>\n params.hasResolutionHint() ||\n (wakesOnEvents && params.hasEventsHint()) ||\n deadlineReached(params.listenerDeadline),\n boundedSleepMs,\n );\n if (!woke && deadlineReached(params.listenerDeadline)) return 'deadline';\n return undefined;\n}\n\nfunction positiveNumber(value: number | null | undefined): number | undefined {\n return value === undefined || value === null || value <= 0 ? undefined : value;\n}\n\nfunction remainingWindowMs(limitMs: number | undefined, ageMs: number): number | undefined {\n return limitMs === undefined ? undefined : Math.max(0, limitMs - ageMs);\n}\n\nasync function runListenerExecution(params: {\n input: JobListenerOrchestrationInput;\n jobExecutionId: string;\n executionVersion: number;\n requiredLabels: string[];\n shouldCancelForResolution: () => boolean;\n waitForResolution: () => Promise<boolean>;\n}): Promise<void> {\n const scope = new CancellationScope();\n const child = scope.run(() =>\n executeChild(jobExecutionOrchestration, {\n workflowId: `job:${params.input.jobId}`,\n workflowIdReusePolicy: 'ALLOW_DUPLICATE',\n args: [\n {\n workspaceId: params.input.workspaceId,\n workflowRunId: params.input.workflowRunId,\n projectId: params.input.projectId,\n jobId: params.input.jobId,\n jobExecutionId: params.jobExecutionId,\n runAttemptId: params.input.runAttemptId,\n jobVersion: params.input.jobVersion,\n executionVersion: params.executionVersion,\n ...(params.input.executionTimeoutMs === undefined\n ? {}\n : {executionTimeoutMs: params.input.executionTimeoutMs}),\n resolveJobStatus: false,\n requiredLabels: params.requiredLabels,\n },\n ],\n parentClosePolicy: ParentClosePolicy.TERMINATE,\n }),\n );\n\n if (params.input.onResolve === 'cancel') {\n const winner = await Promise.race([\n child.then(\n () => 'child' as const,\n () => 'child-failed' as const,\n ),\n params.waitForResolution().then(() => 'resolution' as const),\n ]);\n if (winner === 'resolution' && params.shouldCancelForResolution()) {\n scope.cancel();\n await settleListenerJobExecutionActivity({\n jobExecutionId: params.jobExecutionId,\n status: 'cancelled',\n });\n await recordListenerFiringOutcomeActivity({outcome: 'cancelled'});\n await cancelRunnerJobsActivity({jobIds: [params.input.jobId]});\n return;\n }\n }\n\n try {\n const result = await child;\n await recordListenerFiringOutcomeActivity({outcome: listenerFiringOutcome(result.status)});\n } catch (error) {\n log.warn('listener execution child failed; recording failed firing and continuing', {\n jobId: params.input.jobId,\n jobExecutionId: params.jobExecutionId,\n error: String(error),\n });\n await settleListenerJobExecutionActivity({\n jobExecutionId: params.jobExecutionId,\n status: 'failed',\n });\n await recordListenerFiringOutcomeActivity({outcome: 'failed'});\n }\n}\n\nfunction listenerFiringOutcome(\n status: RuntimeCompletionStatus,\n): 'succeeded' | 'failed' | 'cancelled' {\n if (status === 'succeeded' || status === 'failed' || status === 'cancelled') return status;\n throw new Error(`Listener execution cannot finish with status: ${status}`);\n}\n\nasync function waitForListenerWakeup(\n predicate: () => boolean,\n options: {deadline: number | undefined},\n): Promise<boolean> {\n const remaining = remainingMs(options.deadline);\n if (remaining !== undefined && remaining <= 0) return false;\n if (remaining === undefined) {\n await condition(predicate);\n return true;\n }\n return await condition(predicate, remaining);\n}\n"],"names":["CancellationScope","condition","continueAsNew","defineSignal","executeChild","log","ParentClosePolicy","proxyActivities","setHandler","workflowInfo","runtimeStatusForTerminalJobExecutionStatus","LISTENER_EVENTS_AVAILABLE_SIGNAL","LISTENER_RESOLVE_SIGNAL","deadlineReached","remainingMs","jobExecutionOrchestration","activateJobListenerActivity","drainListenerEventsActivity","peekListenerBufferActivity","resolveJobListenerActivity","settleListenerJobExecutionActivity","recordListenerFiringOutcomeActivity","cancelRunnerJobsActivity","startToCloseTimeout","listenerEventsAvailableSignal","listenerResolveSignal","LISTENER_CONTINUE_AS_NEW_FIRING_LIMIT","jobListenerOrchestration","input","eventsAvailable","latchedReason","continuation","listenerDeadline","initialListenerDeadline","nextSequence","activated","jobId","expectedVersion","jobVersion","status","jobStatus","executionCount","firingsInCurrentRun","maxExecutions","undefined","batchConfig","listenerBatchConfig","continueListenerAsNewIfNeeded","decision","awaitBatchFiringWindow","hasEventsHint","clearEventsHint","hasResolutionHint","drained","expectedSequence","maxSizeEvents","maxSize","kind","woke","waitForListenerWakeup","deadline","outcome","sequence","runListenerExecution","jobExecutionId","executionVersion","requiredLabels","shouldCancelForResolution","onResolve","waitForResolution","reason","resolved","listeningTimeoutMs","Date","now","params","shouldContinueListenerAsNew","continueAsNewSuggested","listenerContinuationInput","debounceMs","positiveNumber","batchDebounceMs","batchMaxSize","maxWaitMs","batchMaxWaitMs","prePeekDecision","resolutionOrDeadlineDecision","peek","peekBatchBuffer","peekDecision","bufferedResolveOrDeadlineDecision","fireCount","waitDecision","waitForAnyBatchWakeup","batchIsReadyToFire","sleepMs","nextBatchWindowMs","waitForBatchWindow","resolvePending","config","sizeReached","debounceQuiet","newestAgeMs","maxWaitReached","oldestAgeMs","timeWindows","remainingWindowMs","filter","value","length","Math","min","deadlineRemaining","boundedSleepMs","wakesOnEvents","limitMs","ageMs","max","scope","child","run","workflowId","workflowIdReusePolicy","args","workspaceId","workflowRunId","projectId","runAttemptId","executionTimeoutMs","resolveJobStatus","parentClosePolicy","TERMINATE","winner","Promise","race","then","cancel","jobIds","result","listenerFiringOutcome","error","warn","String","Error","predicate","options","remaining"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const runCancelSignal: import("@temporalio/workflow").SignalDefinition<[], string>;
2
+ export interface RunOrchestrationInput {
3
+ workflowRunId: string;
4
+ runAttemptId: string;
5
+ workspaceId: string;
6
+ }
7
+ export declare function runOrchestration(input: RunOrchestrationInput): Promise<void>;
8
+ //# sourceMappingURL=run-orchestration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-orchestration.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/run-orchestration.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,eAAe,6DAAsC,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGlF"}