@shipfox/api-workflows 10.2.0 → 12.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 (354) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/CHANGELOG.md +117 -0
  3. package/README.md +75 -0
  4. package/dist/core/agent-defaults.d.ts +2 -1
  5. package/dist/core/agent-defaults.d.ts.map +1 -1
  6. package/dist/core/agent-defaults.js.map +1 -1
  7. package/dist/core/checkout.d.ts +7 -21
  8. package/dist/core/checkout.d.ts.map +1 -1
  9. package/dist/core/checkout.js +122 -41
  10. package/dist/core/checkout.js.map +1 -1
  11. package/dist/core/entities/job-execution.d.ts +8 -0
  12. package/dist/core/entities/job-execution.d.ts.map +1 -1
  13. package/dist/core/entities/job-execution.js +13 -1
  14. package/dist/core/entities/job-execution.js.map +1 -1
  15. package/dist/core/entities/job-listener-event.d.ts +2 -0
  16. package/dist/core/entities/job-listener-event.d.ts.map +1 -1
  17. package/dist/core/entities/job-listener-event.js.map +1 -1
  18. package/dist/core/entities/step.d.ts +13 -3
  19. package/dist/core/entities/step.d.ts.map +1 -1
  20. package/dist/core/entities/step.js +6 -0
  21. package/dist/core/entities/step.js.map +1 -1
  22. package/dist/core/entities/workflow-run-attempt.d.ts +1 -0
  23. package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -1
  24. package/dist/core/entities/workflow-run-attempt.js.map +1 -1
  25. package/dist/core/entities/workflow-run.d.ts +17 -0
  26. package/dist/core/entities/workflow-run.d.ts.map +1 -1
  27. package/dist/core/entities/workflow-run.js.map +1 -1
  28. package/dist/core/errors.d.ts +9 -2
  29. package/dist/core/errors.d.ts.map +1 -1
  30. package/dist/core/errors.js +10 -5
  31. package/dist/core/errors.js.map +1 -1
  32. package/dist/core/job-execution.d.ts.map +1 -1
  33. package/dist/core/job-execution.js +14 -8
  34. package/dist/core/job-execution.js.map +1 -1
  35. package/dist/core/job-transition/decide-job-activation.d.ts +1 -0
  36. package/dist/core/job-transition/decide-job-activation.d.ts.map +1 -1
  37. package/dist/core/job-transition/decide-job-activation.js +1 -0
  38. package/dist/core/job-transition/decide-job-activation.js.map +1 -1
  39. package/dist/core/job-transition/derive-job-success.d.ts +1 -0
  40. package/dist/core/job-transition/derive-job-success.d.ts.map +1 -1
  41. package/dist/core/job-transition/derive-job-success.js +5 -8
  42. package/dist/core/job-transition/derive-job-success.js.map +1 -1
  43. package/dist/core/listener-execution-materialization.d.ts +6 -3
  44. package/dist/core/listener-execution-materialization.d.ts.map +1 -1
  45. package/dist/core/listener-execution-materialization.js +44 -6
  46. package/dist/core/listener-execution-materialization.js.map +1 -1
  47. package/dist/core/resolve-trigger-reference.d.ts +11 -0
  48. package/dist/core/resolve-trigger-reference.d.ts.map +1 -0
  49. package/dist/core/resolve-trigger-reference.js +39 -0
  50. package/dist/core/resolve-trigger-reference.js.map +1 -0
  51. package/dist/core/run-workflow.d.ts +1 -0
  52. package/dist/core/run-workflow.d.ts.map +1 -1
  53. package/dist/core/run-workflow.js +1 -0
  54. package/dist/core/run-workflow.js.map +1 -1
  55. package/dist/core/step-config/agent.d.ts +1 -2
  56. package/dist/core/step-config/agent.d.ts.map +1 -1
  57. package/dist/core/step-config/agent.js +22 -7
  58. package/dist/core/step-config/agent.js.map +1 -1
  59. package/dist/core/step-config/assemble-run-context.d.ts +19 -8
  60. package/dist/core/step-config/assemble-run-context.d.ts.map +1 -1
  61. package/dist/core/step-config/assemble-run-context.js +51 -19
  62. package/dist/core/step-config/assemble-run-context.js.map +1 -1
  63. package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -1
  64. package/dist/core/step-config/complete-step-dispatch-config.js +72 -4
  65. package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -1
  66. package/dist/core/step-config/index.d.ts +1 -0
  67. package/dist/core/step-config/index.d.ts.map +1 -1
  68. package/dist/core/step-config/index.js +1 -0
  69. package/dist/core/step-config/index.js.map +1 -1
  70. package/dist/core/step-config/materialize-job-execution-steps.d.ts +1 -1
  71. package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -1
  72. package/dist/core/step-config/materialize-job-execution-steps.js +49 -8
  73. package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
  74. package/dist/core/step-config/materialize-workflow-model.d.ts +3 -3
  75. package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -1
  76. package/dist/core/step-config/materialize-workflow-model.js +9 -5
  77. package/dist/core/step-config/materialize-workflow-model.js.map +1 -1
  78. package/dist/core/step-config/resolve-job-execution-name.d.ts +3 -3
  79. package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -1
  80. package/dist/core/step-config/resolve-job-execution-name.js +24 -13
  81. package/dist/core/step-config/resolve-job-execution-name.js.map +1 -1
  82. package/dist/core/step-config/resolve-step-config.d.ts.map +1 -1
  83. package/dist/core/step-config/resolve-step-config.js +174 -9
  84. package/dist/core/step-config/resolve-step-config.js.map +1 -1
  85. package/dist/core/step-config/resolve-workflow-run-name.d.ts +19 -0
  86. package/dist/core/step-config/resolve-workflow-run-name.d.ts.map +1 -0
  87. package/dist/core/step-config/resolve-workflow-run-name.js +73 -0
  88. package/dist/core/step-config/resolve-workflow-run-name.js.map +1 -0
  89. package/dist/core/step-transition/decide-step-transition.js.map +1 -1
  90. package/dist/core/step-transition/evaluate-gate.d.ts +2 -1
  91. package/dist/core/step-transition/evaluate-gate.d.ts.map +1 -1
  92. package/dist/core/step-transition/evaluate-gate.js +5 -3
  93. package/dist/core/step-transition/evaluate-gate.js.map +1 -1
  94. package/dist/core/workflow-run-creation.d.ts +3 -0
  95. package/dist/core/workflow-run-creation.d.ts.map +1 -1
  96. package/dist/core/workflow-run-creation.js +22 -7
  97. package/dist/core/workflow-run-creation.js.map +1 -1
  98. package/dist/db/db.d.ts +278 -10
  99. package/dist/db/db.d.ts.map +1 -1
  100. package/dist/db/db.js +2 -0
  101. package/dist/db/db.js.map +1 -1
  102. package/dist/db/index.d.ts +3 -2
  103. package/dist/db/index.d.ts.map +1 -1
  104. package/dist/db/index.js +2 -1
  105. package/dist/db/index.js.map +1 -1
  106. package/dist/db/job-listener-events.d.ts +2 -0
  107. package/dist/db/job-listener-events.d.ts.map +1 -1
  108. package/dist/db/job-listener-events.js +1 -0
  109. package/dist/db/job-listener-events.js.map +1 -1
  110. package/dist/db/job-listeners.d.ts +2 -0
  111. package/dist/db/job-listeners.d.ts.map +1 -1
  112. package/dist/db/job-listeners.js +81 -21
  113. package/dist/db/job-listeners.js.map +1 -1
  114. package/dist/db/schema/job-executions.d.ts +3 -3
  115. package/dist/db/schema/job-executions.d.ts.map +1 -1
  116. package/dist/db/schema/job-executions.js +8 -4
  117. package/dist/db/schema/job-executions.js.map +1 -1
  118. package/dist/db/schema/job-listener-events.d.ts +20 -0
  119. package/dist/db/schema/job-listener-events.d.ts.map +1 -1
  120. package/dist/db/schema/job-listener-events.js +2 -0
  121. package/dist/db/schema/job-listener-events.js.map +1 -1
  122. package/dist/db/schema/step-attempts.js +2 -2
  123. package/dist/db/schema/step-attempts.js.map +1 -1
  124. package/dist/db/schema/steps.d.ts +4 -2
  125. package/dist/db/schema/steps.d.ts.map +1 -1
  126. package/dist/db/schema/steps.js +1 -1
  127. package/dist/db/schema/steps.js.map +1 -1
  128. package/dist/db/schema/workflow-run-attempts.d.ts +21 -2
  129. package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -1
  130. package/dist/db/schema/workflow-run-attempts.js +2 -0
  131. package/dist/db/schema/workflow-run-attempts.js.map +1 -1
  132. package/dist/db/schema/workflow-run-counters.d.ts +43 -0
  133. package/dist/db/schema/workflow-run-counters.d.ts.map +1 -0
  134. package/dist/db/schema/workflow-run-counters.js +10 -0
  135. package/dist/db/schema/workflow-run-counters.js.map +1 -0
  136. package/dist/db/schema/workflow-runs.d.ts +54 -1
  137. package/dist/db/schema/workflow-runs.d.ts.map +1 -1
  138. package/dist/db/schema/workflow-runs.js +10 -2
  139. package/dist/db/schema/workflow-runs.js.map +1 -1
  140. package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
  141. package/dist/db/workflow-runs/job-executions.js +35 -14
  142. package/dist/db/workflow-runs/job-executions.js.map +1 -1
  143. package/dist/db/workflow-runs/jobs.d.ts +2 -0
  144. package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
  145. package/dist/db/workflow-runs/jobs.js +9 -5
  146. package/dist/db/workflow-runs/jobs.js.map +1 -1
  147. package/dist/db/workflow-runs/queries.d.ts +51 -0
  148. package/dist/db/workflow-runs/queries.d.ts.map +1 -1
  149. package/dist/db/workflow-runs/queries.js +82 -2
  150. package/dist/db/workflow-runs/queries.js.map +1 -1
  151. package/dist/db/workflow-runs/run-create.d.ts +1 -0
  152. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  153. package/dist/db/workflow-runs/run-create.js +159 -32
  154. package/dist/db/workflow-runs/run-create.js.map +1 -1
  155. package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -1
  156. package/dist/db/workflow-runs/run-rerun.js +13 -5
  157. package/dist/db/workflow-runs/run-rerun.js.map +1 -1
  158. package/dist/db/workflow-runs/shared.d.ts +1 -0
  159. package/dist/db/workflow-runs/shared.d.ts.map +1 -1
  160. package/dist/db/workflow-runs/shared.js +2 -1
  161. package/dist/db/workflow-runs/shared.js.map +1 -1
  162. package/dist/db/workflow-runs/steps.js +3 -3
  163. package/dist/db/workflow-runs/steps.js.map +1 -1
  164. package/dist/db/workflow-runs.d.ts +4 -3
  165. package/dist/db/workflow-runs.d.ts.map +1 -1
  166. package/dist/db/workflow-runs.js +3 -2
  167. package/dist/db/workflow-runs.js.map +1 -1
  168. package/dist/metrics/instance.d.ts +1 -0
  169. package/dist/metrics/instance.d.ts.map +1 -1
  170. package/dist/metrics/instance.js +9 -0
  171. package/dist/metrics/instance.js.map +1 -1
  172. package/dist/presentation/dto/checkout-token.d.ts +1 -0
  173. package/dist/presentation/dto/checkout-token.d.ts.map +1 -1
  174. package/dist/presentation/dto/checkout-token.js +1 -0
  175. package/dist/presentation/dto/checkout-token.js.map +1 -1
  176. package/dist/presentation/dto/index.d.ts +1 -1
  177. package/dist/presentation/dto/index.d.ts.map +1 -1
  178. package/dist/presentation/dto/index.js +1 -1
  179. package/dist/presentation/dto/index.js.map +1 -1
  180. package/dist/presentation/dto/step.d.ts.map +1 -1
  181. package/dist/presentation/dto/step.js +2 -2
  182. package/dist/presentation/dto/step.js.map +1 -1
  183. package/dist/presentation/dto/workflow-run.d.ts +3 -1
  184. package/dist/presentation/dto/workflow-run.d.ts.map +1 -1
  185. package/dist/presentation/dto/workflow-run.js +34 -0
  186. package/dist/presentation/dto/workflow-run.js.map +1 -1
  187. package/dist/presentation/inter-module.d.ts.map +1 -1
  188. package/dist/presentation/inter-module.js +31 -3
  189. package/dist/presentation/inter-module.js.map +1 -1
  190. package/dist/presentation/routes/checkout-token.d.ts +1 -1
  191. package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
  192. package/dist/presentation/routes/checkout-token.js +32 -20
  193. package/dist/presentation/routes/checkout-token.js.map +1 -1
  194. package/dist/presentation/routes/leased-step.d.ts +2 -0
  195. package/dist/presentation/routes/leased-step.d.ts.map +1 -1
  196. package/dist/presentation/routes/leased-step.js +2 -1
  197. package/dist/presentation/routes/leased-step.js.map +1 -1
  198. package/dist/presentation/routes/list-runs.d.ts.map +1 -1
  199. package/dist/presentation/routes/list-runs.js +9 -3
  200. package/dist/presentation/routes/list-runs.js.map +1 -1
  201. package/dist/presentation/routes/project-access.d.ts +1 -0
  202. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  203. package/dist/presentation/routes/report-step.d.ts.map +1 -1
  204. package/dist/presentation/routes/report-step.js +9 -2
  205. package/dist/presentation/routes/report-step.js.map +1 -1
  206. package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -1
  207. package/dist/presentation/routes/require-accessible-run.js +1 -1
  208. package/dist/presentation/routes/require-accessible-run.js.map +1 -1
  209. package/dist/presentation/subscribers/on-job-steps-settled.js +1 -1
  210. package/dist/presentation/subscribers/on-job-steps-settled.js.map +1 -1
  211. package/dist/presentation/subscribers/on-runner-job-claimed.d.ts.map +1 -1
  212. package/dist/presentation/subscribers/on-runner-job-claimed.js +21 -0
  213. package/dist/presentation/subscribers/on-runner-job-claimed.js.map +1 -1
  214. package/dist/temporal/activities/index.d.ts.map +1 -1
  215. package/dist/temporal/activities/index.js +2 -1
  216. package/dist/temporal/activities/index.js.map +1 -1
  217. package/dist/temporal/activities/orchestration-activities.d.ts +1 -0
  218. package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
  219. package/dist/temporal/activities/orchestration-activities.js.map +1 -1
  220. package/dist/temporal/constants.d.ts +1 -0
  221. package/dist/temporal/constants.d.ts.map +1 -1
  222. package/dist/temporal/constants.js +1 -0
  223. package/dist/temporal/constants.js.map +1 -1
  224. package/dist/temporal/index.d.ts +1 -1
  225. package/dist/temporal/index.d.ts.map +1 -1
  226. package/dist/temporal/index.js +1 -1
  227. package/dist/temporal/index.js.map +1 -1
  228. package/dist/temporal/workflows/index.bundle.js +82 -43
  229. package/dist/temporal/workflows/index.d.ts +1 -1
  230. package/dist/temporal/workflows/index.d.ts.map +1 -1
  231. package/dist/temporal/workflows/index.js +1 -1
  232. package/dist/temporal/workflows/index.js.map +1 -1
  233. package/dist/temporal/workflows/job-execution-orchestration.d.ts +5 -0
  234. package/dist/temporal/workflows/job-execution-orchestration.d.ts.map +1 -1
  235. package/dist/temporal/workflows/job-execution-orchestration.js +77 -43
  236. package/dist/temporal/workflows/job-execution-orchestration.js.map +1 -1
  237. package/dist/temporal/workflows/test-env.d.ts +5 -1
  238. package/dist/temporal/workflows/test-env.d.ts.map +1 -1
  239. package/dist/temporal/workflows/test-env.js +32 -11
  240. package/dist/temporal/workflows/test-env.js.map +1 -1
  241. package/dist/tsconfig.test.tsbuildinfo +1 -1
  242. package/drizzle/0000_initial.sql +14 -2
  243. package/drizzle/0001_windy_sunfire.sql +1 -0
  244. package/drizzle/meta/0000_snapshot.json +93 -1
  245. package/drizzle/meta/0001_snapshot.json +1711 -0
  246. package/drizzle/meta/_journal.json +2 -2
  247. package/package.json +21 -21
  248. package/src/core/agent-defaults.ts +2 -1
  249. package/src/core/checkout.test.ts +378 -67
  250. package/src/core/checkout.ts +142 -59
  251. package/src/core/entities/job-execution.test.ts +21 -0
  252. package/src/core/entities/job-execution.ts +24 -0
  253. package/src/core/entities/job-listener-event.ts +3 -0
  254. package/src/core/entities/step.ts +15 -3
  255. package/src/core/entities/workflow-run-attempt.ts +1 -0
  256. package/src/core/entities/workflow-run.ts +16 -0
  257. package/src/core/errors.ts +21 -7
  258. package/src/core/job-execution.ts +27 -4
  259. package/src/core/job-transition/decide-job-activation.test.ts +4 -0
  260. package/src/core/job-transition/decide-job-activation.ts +2 -0
  261. package/src/core/job-transition/derive-job-success.test.ts +12 -0
  262. package/src/core/job-transition/derive-job-success.ts +6 -9
  263. package/src/core/listener-execution-materialization.test.ts +2 -0
  264. package/src/core/listener-execution-materialization.ts +57 -11
  265. package/src/core/resolve-trigger-reference.test.ts +160 -0
  266. package/src/core/resolve-trigger-reference.ts +53 -0
  267. package/src/core/run-workflow.ts +2 -0
  268. package/src/core/step-config/agent.ts +29 -12
  269. package/src/core/step-config/assemble-run-context.test.ts +149 -6
  270. package/src/core/step-config/assemble-run-context.ts +87 -25
  271. package/src/core/step-config/complete-step-dispatch-config.test.ts +125 -2
  272. package/src/core/step-config/complete-step-dispatch-config.ts +83 -1
  273. package/src/core/step-config/index.ts +7 -0
  274. package/src/core/step-config/materialize-job-execution-steps.test.ts +250 -1
  275. package/src/core/step-config/materialize-job-execution-steps.ts +57 -10
  276. package/src/core/step-config/materialize-workflow-model.test.ts +212 -4
  277. package/src/core/step-config/materialize-workflow-model.ts +33 -28
  278. package/src/core/step-config/resolve-job-execution-name.test.ts +37 -15
  279. package/src/core/step-config/resolve-job-execution-name.ts +30 -15
  280. package/src/core/step-config/resolve-step-config.ts +175 -10
  281. package/src/core/step-config/resolve-workflow-run-name.test.ts +115 -0
  282. package/src/core/step-config/resolve-workflow-run-name.ts +108 -0
  283. package/src/core/step-transition/decide-step-transition.ts +2 -2
  284. package/src/core/step-transition/evaluate-gate.test.ts +8 -0
  285. package/src/core/step-transition/evaluate-gate.ts +8 -1
  286. package/src/core/workflow-run-creation.test.ts +7 -4
  287. package/src/core/workflow-run-creation.ts +13 -7
  288. package/src/db/db.ts +2 -0
  289. package/src/db/index.ts +6 -0
  290. package/src/db/job-listener-events.test.ts +19 -0
  291. package/src/db/job-listener-events.ts +3 -0
  292. package/src/db/job-listeners.test.ts +187 -5
  293. package/src/db/job-listeners.ts +122 -30
  294. package/src/db/schema/job-executions.ts +12 -5
  295. package/src/db/schema/job-listener-events.ts +3 -0
  296. package/src/db/schema/step-attempts.ts +2 -2
  297. package/src/db/schema/steps.ts +2 -1
  298. package/src/db/schema/workflow-run-attempts.ts +2 -0
  299. package/src/db/schema/workflow-run-counters.ts +13 -0
  300. package/src/db/schema/workflow-runs.ts +11 -2
  301. package/src/db/workflow-runs/job-executions.ts +37 -15
  302. package/src/db/workflow-runs/jobs.ts +17 -4
  303. package/src/db/workflow-runs/queries.test.ts +206 -0
  304. package/src/db/workflow-runs/queries.ts +146 -2
  305. package/src/db/workflow-runs/run-create.test.ts +606 -8
  306. package/src/db/workflow-runs/run-create.ts +185 -40
  307. package/src/db/workflow-runs/run-rerun.test.ts +61 -2
  308. package/src/db/workflow-runs/run-rerun.ts +15 -5
  309. package/src/db/workflow-runs/shared.ts +2 -0
  310. package/src/db/workflow-runs/steps.ts +3 -3
  311. package/src/db/workflow-runs.ts +7 -0
  312. package/src/metrics/instance.ts +14 -0
  313. package/src/presentation/dto/checkout-token.test.ts +19 -9
  314. package/src/presentation/dto/checkout-token.ts +2 -1
  315. package/src/presentation/dto/index.ts +1 -1
  316. package/src/presentation/dto/job.test.ts +9 -0
  317. package/src/presentation/dto/step.test.ts +12 -0
  318. package/src/presentation/dto/step.ts +5 -2
  319. package/src/presentation/dto/workflow-run.ts +44 -2
  320. package/src/presentation/inter-module.test.ts +165 -0
  321. package/src/presentation/inter-module.ts +38 -4
  322. package/src/presentation/routes/cancel-run.test.ts +1 -1
  323. package/src/presentation/routes/checkout-token.test.ts +357 -142
  324. package/src/presentation/routes/checkout-token.ts +56 -26
  325. package/src/presentation/routes/get-run-aggregates.test.ts +1 -1
  326. package/src/presentation/routes/get-run.test.ts +29 -1
  327. package/src/presentation/routes/get-step-secrets.test.ts +7 -2
  328. package/src/presentation/routes/leased-step.ts +9 -1
  329. package/src/presentation/routes/list-run-attempts.test.ts +1 -1
  330. package/src/presentation/routes/list-runs.test.ts +58 -1
  331. package/src/presentation/routes/list-runs.ts +8 -3
  332. package/src/presentation/routes/report-step.test.ts +25 -0
  333. package/src/presentation/routes/report-step.ts +10 -2
  334. package/src/presentation/routes/require-accessible-run.ts +4 -1
  335. package/src/presentation/routes/rerun-run.test.ts +1 -1
  336. package/src/presentation/subscribers/on-job-steps-settled.ts +1 -1
  337. package/src/presentation/subscribers/on-runner-job-claimed.test.ts +49 -0
  338. package/src/presentation/subscribers/on-runner-job-claimed.ts +22 -0
  339. package/src/temporal/activities/index.ts +1 -0
  340. package/src/temporal/activities/orchestration-activities.ts +1 -0
  341. package/src/temporal/constants.ts +1 -0
  342. package/src/temporal/index.ts +1 -0
  343. package/src/temporal/workflows/index.ts +1 -0
  344. package/src/temporal/workflows/job-execution-orchestration.test.ts +142 -6
  345. package/src/temporal/workflows/job-execution-orchestration.ts +99 -50
  346. package/src/temporal/workflows/run-orchestration.test.ts +1 -1
  347. package/src/temporal/workflows/test-env.ts +50 -13
  348. package/test/factories/project.ts +2 -0
  349. package/test/factories/workflow-model.ts +80 -26
  350. package/test/factories/workflow-run.ts +4 -1
  351. package/test/fixtures/agent-inter-module.ts +2 -1
  352. package/test/fixtures/job-with-steps.ts +1 -1
  353. package/tsconfig.build.tsbuildinfo +1 -1
  354. package/drizzle/0001_agent_tool_materialization.sql +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/agent.ts"],"sourcesContent":["import {\n AGENT_INTEGRATION_MCP_AUTH,\n AGENT_INTEGRATION_MCP_ENDPOINT,\n AGENT_INTEGRATION_MCP_SERVER_NAME,\n AGENT_INTEGRATION_MCP_TRANSPORT,\n type AgentIntegrationMcpServerConfigDto,\n type MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {ResolvedField, SiteResolvedField} from '@shipfox/expression';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport type {AgentThinking} from '@shipfox/workflow-document';\nimport type {AgentDefaultsResolver, ResolvedAgentDefaults} from '#core/agent-defaults.js';\nimport {\n type AgentToolMaterializationContext,\n type AgentToolMaterializationSnapshot,\n materializeAgentIntegrations,\n} from '#core/agent-tools.js';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {AgentConfigUnresolvableError} from '#core/errors.js';\nimport {\n completeStepFieldWithTrace,\n literalField,\n resolveStepField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype StepConfigMode = 'effective' | 'authored';\ntype FieldResolution =\n | {readonly kind: 'frozen'; readonly value: string}\n | {readonly kind: 'residual'; readonly field: ResolvedField};\n\ninterface AgentFieldResolutions {\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly prompt: FieldResolution;\n readonly model: FieldResolution | undefined;\n readonly provider: FieldResolution | undefined;\n readonly hasTemplates: boolean;\n}\n\nexport interface ResolveAgentStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelAgentStep;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface AgentStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n): Promise<AgentStepConfig> {\n const fields = resolveAgentFields(params);\n const usesAuthoredMode = params.mode === 'authored';\n\n if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);\n\n const hasDeferredModelOrProvider =\n fields.model?.kind === 'residual' || fields.provider?.kind === 'residual';\n if (hasDeferredModelOrProvider) return deferredAgentStepConfig(params, fields);\n\n return await agentStepConfigWithDefaults(params.step, params, fields);\n}\n\nexport async function completeAgentConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): Promise<void> {\n const agent = params.plan.agent;\n if (agent === undefined) return;\n\n const prompt =\n agent.prompt === undefined\n ? readConfigString(params.config, 'prompt')\n : completeAgentField({\n field: 'agent.prompt',\n template: agent.prompt,\n params,\n });\n const model =\n agent.model === undefined\n ? readConfigString(params.config, 'model')\n : completeAgentField({\n field: 'agent.model',\n template: agent.model,\n params,\n });\n const provider =\n agent.provider === undefined\n ? readConfigString(params.config, 'provider')\n : completeAgentField({\n field: 'agent.provider',\n template: agent.provider,\n params,\n });\n\n const defaults = await completeAgentDefaults({\n harness: agent.harness ?? readConfigHarness(params.config),\n provider,\n model,\n thinking: agent.thinking ?? readConfigThinking(params.config),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n params.config.harness = defaults.harness;\n params.config.provider = defaults.provider;\n params.config.model = defaults.model;\n params.config.thinking = defaults.thinking;\n params.config.prompt = prompt;\n if (agent.tools !== undefined) params.config.tools = [...agent.tools];\n const integrations = agent.integrations === undefined ? undefined : [...agent.integrations];\n if (integrations !== undefined) params.config.integrations = integrations;\n const mcpServers =\n agent.mcpServers ??\n (integrations === undefined ? undefined : agentIntegrationMcpServers(integrations));\n if (mcpServers !== undefined) params.config.mcpServers = [...mcpServers];\n}\n\nfunction completeAgentField(args: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly template: ResolvedField;\n readonly params: {\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n };\n}): string {\n const resolved = completeStepFieldWithTrace({\n field: args.field,\n errorField: args.field,\n template: args.template,\n context: args.params.context,\n definitionId: args.params.definitionId,\n });\n args.params.trace.push(...resolved.trace.map((entry) => ({...entry, field: args.field})));\n return resolved.value;\n}\n\nexport async function completeAgentDefaults(params: {\n readonly harness: WorkflowModelAgentStep['harness'] | undefined;\n readonly provider: string | undefined;\n readonly model: string | undefined;\n readonly thinking: AgentThinking | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n}): Promise<ResolvedAgentDefaults> {\n if (!params.resolveAgentDefaults) throw new Error('Agent defaults resolver is required');\n\n try {\n return await params.resolveAgentDefaults({\n harness: params.harness,\n provider: params.provider,\n model: params.model,\n thinking: params.thinking,\n });\n } catch (error) {\n if (\n isInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, error) &&\n error.code === 'agent-config-invalid'\n ) {\n throw new AgentConfigUnresolvableError(params.definitionId, {cause: error});\n }\n throw error;\n }\n}\n\nfunction resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldResolutions {\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const prompt = resolveAgentField({\n field: 'agent.prompt',\n value: params.step.prompt,\n template: params.step.templates?.prompt,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const model = resolveOptionalAgentField({\n field: 'agent.model',\n value: params.step.model,\n template: params.step.templates?.model,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const provider = resolveOptionalAgentField({\n field: 'agent.provider',\n value: params.step.provider,\n template: params.step.templates?.provider,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const hasTemplates =\n params.step.templates?.prompt !== undefined ||\n params.step.templates?.model !== undefined ||\n params.step.templates?.provider !== undefined;\n\n return {diagnostics, trace, prompt, model, provider, hasTemplates};\n}\n\nfunction authoredAgentStepConfig(\n step: WorkflowModelAgentStep,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n return {\n config: {\n ...(step.provider === undefined ? {} : {provider: step.provider}),\n ...(step.model === undefined ? {} : {model: step.model}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...authoredAgentIntegrationsConfig(step),\n prompt: step.prompt,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction deferredAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const {step} = params;\n return {\n config: {},\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),\n ...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nasync function agentStepConfigWithDefaults(\n step: WorkflowModelAgentStep,\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): Promise<AgentStepConfig> {\n const providerValue = frozenFieldValue(fields.provider);\n const modelValue = frozenFieldValue(fields.model);\n const promptIsDeferred = fields.prompt.kind === 'residual';\n\n const resolved = await completeAgentDefaults({\n harness: step.harness,\n provider: providerValue,\n model: modelValue,\n thinking: step.thinking,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n if (promptIsDeferred) {\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n },\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n }\n\n const promptValue = frozenFieldValue(fields.prompt) ?? step.prompt;\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n prompt: promptValue,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentToolsConfig(\n step: WorkflowModelAgentStep,\n): {readonly tools: readonly string[]} | Record<string, never> {\n return step.tools === undefined ? {} : {tools: [...step.tools]};\n}\n\nfunction authoredAgentIntegrationsConfig(\n step: WorkflowModelAgentStep,\n):\n | {readonly integrations: NonNullable<WorkflowModelAgentStep['integrations']>}\n | Record<string, never> {\n return step.integrations === undefined ? {} : {integrations: step.integrations};\n}\n\nfunction materializedAgentIntegrationsConfig(params: ResolveAgentStepConfigParams):\n | {\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n readonly mcpServers: readonly AgentIntegrationMcpServerConfigDto[];\n }\n | Record<string, never> {\n const integrations = materializeAgentIntegrations({\n jobKey: params.jobKey,\n stepId: params.step.id,\n integrations: params.step.integrations,\n context: params.agentToolContext,\n snapshot: params.agentToolSnapshot,\n });\n return integrations === undefined\n ? {}\n : {integrations, mcpServers: agentIntegrationMcpServers(integrations)};\n}\n\nfunction agentIntegrationMcpServers(\n integrations: readonly MaterializedAgentIntegrationConfigDto[],\n): readonly AgentIntegrationMcpServerConfigDto[] {\n return [\n {\n name: AGENT_INTEGRATION_MCP_SERVER_NAME,\n transport: AGENT_INTEGRATION_MCP_TRANSPORT,\n endpoint: AGENT_INTEGRATION_MCP_ENDPOINT,\n auth: AGENT_INTEGRATION_MCP_AUTH,\n integrations: [...integrations],\n },\n ];\n}\n\nfunction dispatchPlanField(field: FieldResolution): ResolvedField {\n const isResidual = field.kind === 'residual';\n return isResidual ? field.field : literalField(field.value);\n}\n\nfunction frozenFieldValue(field: FieldResolution | undefined): string | undefined {\n const isFrozen = field?.kind === 'frozen';\n return isFrozen ? field.value : undefined;\n}\n\nfunction resolveAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution {\n const hasTemplate = params.template !== undefined;\n const usesAuthoredMode = params.mode === 'authored';\n if (!hasTemplate || usesAuthoredMode) {\n return {kind: 'frozen', value: params.value};\n }\n\n const resolved = resolveStepField({\n field: params.field,\n template: {segments: params.template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: params.field,\n });\n params.diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: params.field})),\n );\n params.trace.push(...resolved.trace.map((entry) => ({...entry, field: params.field})));\n return fieldResolution(resolved);\n}\n\nfunction resolveOptionalAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string | undefined;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution | undefined {\n const hasValue = params.value !== undefined;\n if (!hasValue) return undefined;\n return resolveAgentField({...params, value: params.value});\n}\n\nfunction fieldResolution(resolved: SiteResolvedField): FieldResolution {\n if (resolved.kind === 'residual') return {kind: 'residual', field: resolved.field};\n return {kind: 'frozen', value: resolved.value};\n}\n\nfunction readConfigString(config: Record<string, unknown>, key: string): string | undefined {\n const value = config[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readConfigThinking(config: Record<string, unknown>): AgentThinking | undefined {\n const value = config.thinking;\n return value === 'off' ||\n value === 'minimal' ||\n value === 'low' ||\n value === 'medium' ||\n value === 'high' ||\n value === 'xhigh'\n ? value\n : undefined;\n}\n\nfunction readConfigHarness(\n config: Record<string, unknown>,\n): WorkflowModelAgentStep['harness'] | undefined {\n return config.harness === 'pi' || config.harness === 'claude' ? config.harness : undefined;\n}\n"],"names":["AGENT_INTEGRATION_MCP_AUTH","AGENT_INTEGRATION_MCP_ENDPOINT","AGENT_INTEGRATION_MCP_SERVER_NAME","AGENT_INTEGRATION_MCP_TRANSPORT","agentInterModuleContract","isInterModuleKnownError","materializeAgentIntegrations","AgentConfigUnresolvableError","completeStepFieldWithTrace","literalField","resolveStepField","resolveAgentStepConfig","params","fields","resolveAgentFields","usesAuthoredMode","mode","authoredAgentStepConfig","step","hasDeferredModelOrProvider","model","kind","provider","deferredAgentStepConfig","agentStepConfigWithDefaults","completeAgentConfig","agent","plan","undefined","prompt","readConfigString","config","completeAgentField","field","template","defaults","completeAgentDefaults","harness","readConfigHarness","thinking","readConfigThinking","resolveAgentDefaults","definitionId","tools","integrations","mcpServers","agentIntegrationMcpServers","args","resolved","errorField","context","trace","push","map","entry","value","Error","error","methods","resolveAgentConfig","code","cause","diagnostics","resolveAgentField","templates","resolveOptionalAgentField","hasTemplates","agentToolsConfig","authoredAgentIntegrationsConfig","configPlan","dispatchPlanField","materializedAgentIntegrationsConfig","providerValue","frozenFieldValue","modelValue","promptIsDeferred","promptValue","jobKey","stepId","id","agentToolContext","snapshot","agentToolSnapshot","name","transport","endpoint","auth","isResidual","isFrozen","hasTemplate","segments","diagnostic","fieldResolution","hasValue","key"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/step-config/agent.ts"],"sourcesContent":["import {\n AGENT_INTEGRATION_MCP_AUTH,\n AGENT_INTEGRATION_MCP_ENDPOINT,\n AGENT_INTEGRATION_MCP_SERVER_NAME,\n AGENT_INTEGRATION_MCP_TRANSPORT,\n type AgentIntegrationMcpServerConfigDto,\n type MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {ResolvedField, SiteResolvedField} from '@shipfox/expression';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport type {AgentThinking} from '@shipfox/workflow-document';\nimport type {AgentDefaultsResolver, ResolvedAgentDefaults} from '#core/agent-defaults.js';\nimport {\n type AgentToolMaterializationContext,\n type AgentToolMaterializationSnapshot,\n materializeAgentIntegrations,\n} from '#core/agent-tools.js';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {AgentConfigUnresolvableError} from '#core/errors.js';\nimport {\n completeStepFieldWithTrace,\n literalField,\n resolveStepField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype StepConfigMode = 'effective' | 'authored';\ntype FieldResolution =\n | {readonly kind: 'frozen'; readonly value: string}\n | {readonly kind: 'residual'; readonly field: ResolvedField};\n\ninterface AgentFieldResolutions {\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly prompt: FieldResolution;\n readonly model: FieldResolution | undefined;\n readonly provider: FieldResolution | undefined;\n readonly thinking: FieldResolution | undefined;\n readonly hasTemplates: boolean;\n}\n\nexport interface ResolveAgentStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelAgentStep;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface AgentStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n): Promise<AgentStepConfig> {\n const fields = resolveAgentFields(params);\n const usesAuthoredMode = params.mode === 'authored';\n\n if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);\n\n const hasDeferredAgentField =\n fields.model?.kind === 'residual' ||\n fields.provider?.kind === 'residual' ||\n fields.thinking?.kind === 'residual';\n if (hasDeferredAgentField) return deferredAgentStepConfig(params, fields);\n\n return await agentStepConfigWithDefaults(params.step, params, fields);\n}\n\nexport async function completeAgentConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): Promise<void> {\n const agent = params.plan.agent;\n if (agent === undefined) return;\n\n const prompt =\n agent.prompt === undefined\n ? readConfigString(params.config, 'prompt')\n : completeAgentField({\n field: 'agent.prompt',\n template: agent.prompt,\n params,\n });\n const model =\n agent.model === undefined\n ? readConfigString(params.config, 'model')\n : completeAgentField({\n field: 'agent.model',\n template: agent.model,\n params,\n });\n const provider =\n agent.provider === undefined\n ? readConfigString(params.config, 'provider')\n : completeAgentField({\n field: 'agent.provider',\n template: agent.provider,\n params,\n });\n\n const defaults = await completeAgentDefaults({\n harness: agent.harness ?? readConfigHarness(params.config),\n provider,\n model,\n thinking:\n agent.thinking === undefined\n ? readConfigThinking(params.config)\n : completeAgentField({field: 'agent.thinking', template: agent.thinking, params}),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n params.config.harness = defaults.harness;\n params.config.provider = defaults.provider;\n params.config.model = defaults.model;\n params.config.thinking = defaults.thinking;\n params.config.prompt = prompt;\n if (agent.tools !== undefined) params.config.tools = [...agent.tools];\n const integrations = agent.integrations === undefined ? undefined : [...agent.integrations];\n if (integrations !== undefined) params.config.integrations = integrations;\n const mcpServers =\n agent.mcpServers ??\n (integrations === undefined ? undefined : agentIntegrationMcpServers(integrations));\n if (mcpServers !== undefined) params.config.mcpServers = [...mcpServers];\n}\n\nfunction completeAgentField(args: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking';\n readonly template: ResolvedField;\n readonly params: {\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n };\n}): string {\n const resolved = completeStepFieldWithTrace({\n field: args.field,\n errorField: args.field,\n template: args.template,\n context: args.params.context,\n definitionId: args.params.definitionId,\n });\n args.params.trace.push(...resolved.trace.map((entry) => ({...entry, field: args.field})));\n return resolved.value;\n}\n\nexport async function completeAgentDefaults(params: {\n readonly harness: WorkflowModelAgentStep['harness'] | undefined;\n readonly provider: string | undefined;\n readonly model: string | undefined;\n readonly thinking: string | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n}): Promise<ResolvedAgentDefaults> {\n if (!params.resolveAgentDefaults) throw new Error('Agent defaults resolver is required');\n\n try {\n return await params.resolveAgentDefaults({\n harness: params.harness,\n provider: params.provider,\n model: params.model,\n thinking: params.thinking,\n });\n } catch (error) {\n if (\n isInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, error) &&\n error.code === 'agent-config-invalid'\n ) {\n throw new AgentConfigUnresolvableError(params.definitionId, {cause: error});\n }\n throw error;\n }\n}\n\nfunction resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldResolutions {\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const prompt = resolveAgentField({\n field: 'agent.prompt',\n value: params.step.prompt,\n template: params.step.templates?.prompt,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const model = resolveOptionalAgentField({\n field: 'agent.model',\n value: params.step.model,\n template: params.step.templates?.model,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const provider = resolveOptionalAgentField({\n field: 'agent.provider',\n value: params.step.provider,\n template: params.step.templates?.provider,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const thinking = resolveOptionalAgentField({\n field: 'agent.thinking',\n value: params.step.thinking,\n template: params.step.templates?.thinking,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const hasTemplates =\n params.step.templates?.prompt !== undefined ||\n params.step.templates?.model !== undefined ||\n params.step.templates?.provider !== undefined ||\n params.step.templates?.thinking !== undefined;\n\n return {diagnostics, trace, prompt, model, provider, thinking, hasTemplates};\n}\n\nfunction authoredAgentStepConfig(\n step: WorkflowModelAgentStep,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n return {\n config: {\n ...(step.provider === undefined ? {} : {provider: step.provider}),\n ...(step.model === undefined ? {} : {model: step.model}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...authoredAgentIntegrationsConfig(step),\n prompt: step.prompt,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction deferredAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const {step} = params;\n return {\n config: {},\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),\n ...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(fields.thinking === undefined ? {} : {thinking: dispatchPlanField(fields.thinking)}),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nasync function agentStepConfigWithDefaults(\n step: WorkflowModelAgentStep,\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): Promise<AgentStepConfig> {\n const providerValue = frozenFieldValue(fields.provider);\n const modelValue = frozenFieldValue(fields.model);\n const promptIsDeferred = fields.prompt.kind === 'residual';\n\n const resolved = await completeAgentDefaults({\n harness: step.harness,\n provider: providerValue,\n model: modelValue,\n thinking: frozenFieldValue(fields.thinking),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n if (promptIsDeferred) {\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n },\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n }\n\n const promptValue = frozenFieldValue(fields.prompt) ?? step.prompt;\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n prompt: promptValue,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentToolsConfig(\n step: WorkflowModelAgentStep,\n): {readonly tools: readonly string[]} | Record<string, never> {\n return step.tools === undefined ? {} : {tools: [...step.tools]};\n}\n\nfunction authoredAgentIntegrationsConfig(\n step: WorkflowModelAgentStep,\n):\n | {readonly integrations: NonNullable<WorkflowModelAgentStep['integrations']>}\n | Record<string, never> {\n return step.integrations === undefined ? {} : {integrations: step.integrations};\n}\n\nfunction materializedAgentIntegrationsConfig(params: ResolveAgentStepConfigParams):\n | {\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n readonly mcpServers: readonly AgentIntegrationMcpServerConfigDto[];\n }\n | Record<string, never> {\n const integrations = materializeAgentIntegrations({\n jobKey: params.jobKey,\n stepId: params.step.id,\n integrations: params.step.integrations,\n context: params.agentToolContext,\n snapshot: params.agentToolSnapshot,\n });\n return integrations === undefined\n ? {}\n : {integrations, mcpServers: agentIntegrationMcpServers(integrations)};\n}\n\nfunction agentIntegrationMcpServers(\n integrations: readonly MaterializedAgentIntegrationConfigDto[],\n): readonly AgentIntegrationMcpServerConfigDto[] {\n return [\n {\n name: AGENT_INTEGRATION_MCP_SERVER_NAME,\n transport: AGENT_INTEGRATION_MCP_TRANSPORT,\n endpoint: AGENT_INTEGRATION_MCP_ENDPOINT,\n auth: AGENT_INTEGRATION_MCP_AUTH,\n integrations: [...integrations],\n },\n ];\n}\n\nfunction dispatchPlanField(field: FieldResolution): ResolvedField {\n const isResidual = field.kind === 'residual';\n return isResidual ? field.field : literalField(field.value);\n}\n\nfunction frozenFieldValue(field: FieldResolution | undefined): string | undefined {\n const isFrozen = field?.kind === 'frozen';\n return isFrozen ? field.value : undefined;\n}\n\nfunction resolveAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking';\n readonly value: string;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution {\n const hasTemplate = params.template !== undefined;\n const usesAuthoredMode = params.mode === 'authored';\n if (!hasTemplate || usesAuthoredMode) {\n return {kind: 'frozen', value: params.value};\n }\n\n const resolved = resolveStepField({\n field: params.field,\n template: {segments: params.template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: params.field,\n });\n params.diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: params.field})),\n );\n params.trace.push(...resolved.trace.map((entry) => ({...entry, field: params.field})));\n return fieldResolution(resolved);\n}\n\nfunction resolveOptionalAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking';\n readonly value: string | undefined;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution | undefined {\n const hasValue = params.value !== undefined;\n if (!hasValue) return undefined;\n return resolveAgentField({...params, value: params.value});\n}\n\nfunction fieldResolution(resolved: SiteResolvedField): FieldResolution {\n if (resolved.kind === 'residual') return {kind: 'residual', field: resolved.field};\n return {kind: 'frozen', value: resolved.value};\n}\n\nfunction readConfigString(config: Record<string, unknown>, key: string): string | undefined {\n const value = config[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readConfigThinking(config: Record<string, unknown>): AgentThinking | undefined {\n const value = config.thinking;\n return value === 'off' ||\n value === 'minimal' ||\n value === 'low' ||\n value === 'medium' ||\n value === 'high' ||\n value === 'xhigh'\n ? value\n : undefined;\n}\n\nfunction readConfigHarness(\n config: Record<string, unknown>,\n): WorkflowModelAgentStep['harness'] | undefined {\n return config.harness === 'pi' || config.harness === 'claude' ? config.harness : undefined;\n}\n"],"names":["AGENT_INTEGRATION_MCP_AUTH","AGENT_INTEGRATION_MCP_ENDPOINT","AGENT_INTEGRATION_MCP_SERVER_NAME","AGENT_INTEGRATION_MCP_TRANSPORT","agentInterModuleContract","isInterModuleKnownError","materializeAgentIntegrations","AgentConfigUnresolvableError","completeStepFieldWithTrace","literalField","resolveStepField","resolveAgentStepConfig","params","fields","resolveAgentFields","usesAuthoredMode","mode","authoredAgentStepConfig","step","hasDeferredAgentField","model","kind","provider","thinking","deferredAgentStepConfig","agentStepConfigWithDefaults","completeAgentConfig","agent","plan","undefined","prompt","readConfigString","config","completeAgentField","field","template","defaults","completeAgentDefaults","harness","readConfigHarness","readConfigThinking","resolveAgentDefaults","definitionId","tools","integrations","mcpServers","agentIntegrationMcpServers","args","resolved","errorField","context","trace","push","map","entry","value","Error","error","methods","resolveAgentConfig","code","cause","diagnostics","resolveAgentField","templates","resolveOptionalAgentField","hasTemplates","agentToolsConfig","authoredAgentIntegrationsConfig","configPlan","dispatchPlanField","materializedAgentIntegrationsConfig","providerValue","frozenFieldValue","modelValue","promptIsDeferred","promptValue","jobKey","stepId","id","agentToolContext","snapshot","agentToolSnapshot","name","transport","endpoint","auth","isResidual","isFrozen","hasTemplate","segments","diagnostic","fieldResolution","hasValue","key"],"mappings":"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"}
@@ -1,15 +1,17 @@
1
- import { type WorkflowExpressionEvaluationContext } from '@shipfox/expression';
1
+ import { type WorkflowExpressionEvaluationContext, type WorkflowPredicateContextRoot } from '@shipfox/expression';
2
2
  import type { Job, JobListeningTrigger } from '#core/entities/job.js';
3
3
  import type { JobExecution } from '#core/entities/job-execution.js';
4
4
  import type { Step, StepAttempt, StepStatus } from '#core/entities/step.js';
5
- import type { TriggerPayload, WorkflowRun } from '#core/entities/workflow-run.js';
5
+ import type { TriggerPayload, WorkflowRun, WorkflowRunTriggerReference } from '#core/entities/workflow-run.js';
6
6
  import type { WorkflowEvaluationContext } from './workflow-evaluation-context.js';
7
7
  export interface JobContextInput {
8
8
  readonly job: Pick<Job, 'key' | 'status' | 'outputs'>;
9
9
  readonly executions: readonly JobExecution[];
10
10
  }
11
11
  export interface AssembleWorkflowRunContextParams {
12
- readonly run: Pick<WorkflowRun, 'id' | 'name' | 'definitionId' | 'projectId' | 'workspaceId' | 'createdAt'>;
12
+ readonly run: Pick<WorkflowRun, 'id' | 'number' | 'name' | 'workflowName' | 'definitionId' | 'projectId' | 'workspaceId' | 'createdAt'> & {
13
+ readonly triggerReference?: WorkflowRunTriggerReference | null | undefined;
14
+ };
13
15
  readonly triggerPayload: TriggerPayload;
14
16
  readonly inputs?: Record<string, unknown> | null | undefined;
15
17
  readonly vars?: Record<string, string> | undefined;
@@ -17,8 +19,9 @@ export interface AssembleWorkflowRunContextParams {
17
19
  export declare function assembleWorkflowRunContext(params: AssembleWorkflowRunContextParams): WorkflowExpressionEvaluationContext;
18
20
  export declare function assembleCreationContext(params: AssembleWorkflowRunContextParams): WorkflowEvaluationContext;
19
21
  export interface AssembleExecutionCreationContextParams extends AssembleWorkflowRunContextParams {
20
- readonly jobId: string;
22
+ readonly job: Pick<Job, 'id' | 'key' | 'name'>;
21
23
  readonly sequence: number;
24
+ readonly nameOverride: string | null;
22
25
  readonly executionName: string;
23
26
  readonly status: JobExecution['status'];
24
27
  readonly triggerEvents: readonly JobExecution['triggerEvents'][number][];
@@ -37,7 +40,8 @@ export interface AssembleJobActivationContextParams extends AssembleWorkflowRunC
37
40
  readonly jobs: readonly JobContextInput[];
38
41
  }
39
42
  export declare function assembleJobActivationContext(params: AssembleJobActivationContextParams): WorkflowEvaluationContext;
40
- type ListenerSnapshotRoot = 'run' | 'trigger' | 'inputs' | 'job' | 'jobs';
43
+ type ListenerPredicateField = 'listener.on' | 'listener.until';
44
+ type ListenerSnapshotRoot = Exclude<WorkflowPredicateContextRoot<ListenerPredicateField>, 'event'>;
41
45
  export interface MatcherSnapshotPlan {
42
46
  readonly matcher: JobListeningTrigger;
43
47
  readonly roots: ReadonlySet<ListenerSnapshotRoot>;
@@ -54,10 +58,11 @@ export declare function planListenerFilterSnapshots(params: {
54
58
  readonly until: readonly JobListeningTrigger[] | null;
55
59
  }): ListenerSnapshotPlan;
56
60
  export declare function assembleListenerSnapshotContext(params: {
57
- readonly job: Pick<Job, 'key'>;
61
+ readonly job: Pick<Job, 'key'> & Partial<Pick<Job, 'name'>>;
58
62
  readonly run: AssembleWorkflowRunContextParams['run'];
59
63
  readonly triggerPayload: TriggerPayload;
60
64
  readonly inputs?: Record<string, unknown> | null | undefined;
65
+ readonly vars?: Record<string, string> | undefined;
61
66
  readonly plan: ListenerSnapshotPlan;
62
67
  readonly dependencyJobs: readonly JobContextInput[];
63
68
  }): WorkflowExpressionEvaluationContext;
@@ -71,19 +76,25 @@ export declare function assembleStepDispatchContext(params: {
71
76
  readonly targetStepId: string;
72
77
  readonly jobExecution?: JobExecution;
73
78
  readonly jobs?: readonly JobContextInput[];
79
+ readonly vars?: Record<string, string> | undefined;
74
80
  }): WorkflowEvaluationContext;
75
81
  export declare function assembleGateContext(params: {
76
82
  readonly status: StepStatus;
77
83
  readonly exitCode: number | null;
78
84
  readonly output?: Record<string, unknown> | null | undefined;
85
+ readonly vars?: Record<string, string> | undefined;
86
+ }): WorkflowEvaluationContext;
87
+ export declare function assembleJobResolutionContext(params: {
88
+ readonly executions: readonly JobExecution[];
89
+ readonly jobs: readonly JobContextInput[];
90
+ readonly vars?: Record<string, string> | undefined;
79
91
  }): WorkflowEvaluationContext;
80
- export declare function assembleJobResolutionContext(executions: readonly JobExecution[]): WorkflowEvaluationContext;
81
92
  export declare function assembleExecutionResolutionContext(params: {
82
93
  readonly run: AssembleWorkflowRunContextParams['run'];
83
94
  readonly triggerPayload: TriggerPayload;
84
95
  readonly inputs?: Record<string, unknown> | null | undefined;
85
96
  readonly vars?: Record<string, string> | undefined;
86
- readonly job: Pick<Job, 'key'>;
97
+ readonly job: Pick<Job, 'key'> & Partial<Pick<Job, 'name'>>;
87
98
  readonly jobExecution: JobExecution;
88
99
  readonly executions: readonly JobExecution[];
89
100
  readonly steps: readonly Step[];
@@ -1 +1 @@
1
- {"version":3,"file":"assemble-run-context.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/assemble-run-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assemble-run-context.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/assemble-run-context.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,26 @@
1
- import { analyzeContextRootKeyAccess, extractExactContextRoots } from '@shipfox/expression';
1
+ import { analyzeContextRootKeyAccess, extractExactContextRoots, getWorkflowPredicateContextRoots } from '@shipfox/expression';
2
2
  export function assembleWorkflowRunContext(params) {
3
+ const triggerReference = params.run.triggerReference;
3
4
  return {
5
+ workflow: {
6
+ id: params.run.definitionId,
7
+ name: params.run.workflowName
8
+ },
4
9
  run: {
5
10
  id: params.run.id,
11
+ number: params.run.number,
6
12
  name: params.run.name,
7
- definition_id: params.run.definitionId,
8
13
  project_id: params.run.projectId,
9
14
  workspace_id: params.run.workspaceId,
10
15
  created_at: params.run.createdAt
11
16
  },
12
17
  trigger: {
13
18
  source: params.triggerPayload.source,
14
- event: params.triggerPayload.event
19
+ event: params.triggerPayload.event,
20
+ project: triggerReference?.project ?? null,
21
+ repository: triggerReference?.repository ?? null,
22
+ ref: triggerReference?.ref ?? null,
23
+ commit: triggerReference?.commit ?? null
15
24
  },
16
25
  event: 'data' in params.triggerPayload ? params.triggerPayload.data : null,
17
26
  inputs: params.inputs ?? null,
@@ -28,9 +37,10 @@ export function assembleCreationContext(params) {
28
37
  }
29
38
  export function assembleExecutionCreationContext(params) {
30
39
  const execution = {
31
- id: `${params.jobId}:${params.sequence}`,
32
- jobId: params.jobId,
40
+ id: `${params.job.id}:${params.sequence}`,
41
+ jobId: params.job.id,
33
42
  sequence: params.sequence,
43
+ nameOverride: params.nameOverride,
34
44
  name: params.executionName,
35
45
  runner: null,
36
46
  status: params.status,
@@ -57,6 +67,10 @@ export function assembleExecutionCreationContext(params) {
57
67
  values: {
58
68
  ...assembleWorkflowRunContext(params),
59
69
  ...executions,
70
+ job: {
71
+ key: params.job.key,
72
+ name: params.job.name ?? params.job.key
73
+ },
60
74
  execution: executionValues.at(-1)
61
75
  }
62
76
  };
@@ -94,15 +108,16 @@ export function assembleJobActivationContext(params) {
94
108
  values: {
95
109
  ...assembleWorkflowRunContext(params),
96
110
  ...assembleJobsContext(params.jobs),
97
- needs: params.jobs.map(assembleJobContext)
111
+ needs: params.jobs.map(assembleJobContext),
112
+ vars: params.vars ?? {}
98
113
  }
99
114
  };
100
115
  }
101
116
  export function planListenerFilterSnapshots(params) {
102
117
  const roots = new Set();
103
118
  const jobKeys = new Set();
104
- const on = params.on.map((matcher)=>planMatcherFilterSnapshot(matcher, roots, jobKeys));
105
- const until = (params.until ?? []).map((matcher)=>planMatcherFilterSnapshot(matcher, roots, jobKeys));
119
+ const on = params.on.map((matcher)=>planMatcherFilterSnapshot('listener.on', matcher, roots, jobKeys));
120
+ const until = (params.until ?? []).map((matcher)=>planMatcherFilterSnapshot('listener.until', matcher, roots, jobKeys));
106
121
  return {
107
122
  on,
108
123
  until,
@@ -110,7 +125,7 @@ export function planListenerFilterSnapshots(params) {
110
125
  jobKeys
111
126
  };
112
127
  }
113
- function planMatcherFilterSnapshot(matcher, allRoots, allJobKeys) {
128
+ function planMatcherFilterSnapshot(field, matcher, allRoots, allJobKeys) {
114
129
  if (matcher.filter === undefined) return {
115
130
  matcher,
116
131
  roots: new Set(),
@@ -118,7 +133,7 @@ function planMatcherFilterSnapshot(matcher, allRoots, allJobKeys) {
118
133
  };
119
134
  let roots;
120
135
  try {
121
- roots = extractExactContextRoots(matcher.filter).filter((root)=>root !== 'event').filter(isListenerSnapshotRoot);
136
+ roots = extractExactContextRoots(matcher.filter).filter((root)=>isListenerSnapshotRoot(field, root));
122
137
  } catch {
123
138
  return {
124
139
  matcher,
@@ -142,26 +157,34 @@ function planMatcherFilterSnapshot(matcher, allRoots, allJobKeys) {
142
157
  jobKeys
143
158
  };
144
159
  }
145
- function isListenerSnapshotRoot(root) {
146
- return root === 'run' || root === 'trigger' || root === 'inputs' || root === 'job' || root === 'jobs';
160
+ function isListenerSnapshotRoot(field, root) {
161
+ return root !== 'event' && getWorkflowPredicateContextRoots(field).includes(root);
147
162
  }
148
163
  export function assembleListenerSnapshotContext(params) {
149
164
  const context = {};
150
- if (params.plan.roots.has('run') || params.plan.roots.has('trigger')) {
165
+ if (params.plan.roots.has('workflow') || params.plan.roots.has('run') || params.plan.roots.has('trigger')) {
151
166
  const runContext = assembleWorkflowRunContext({
152
167
  run: params.run,
153
168
  triggerPayload: params.triggerPayload,
154
- inputs: params.inputs
169
+ inputs: params.inputs,
170
+ vars: params.vars
155
171
  });
172
+ if (params.plan.roots.has('workflow')) context.workflow = runContext.workflow;
156
173
  if (params.plan.roots.has('run')) context.run = runContext.run;
157
174
  if (params.plan.roots.has('trigger')) context.trigger = runContext.trigger;
158
175
  }
159
176
  if (params.plan.roots.has('inputs')) {
160
177
  context.inputs = params.inputs ?? null;
161
178
  }
179
+ if (params.plan.roots.has('vars')) {
180
+ context.vars = params.vars ?? {};
181
+ }
162
182
  if (params.plan.roots.has('job')) {
163
183
  context.job = {
164
- key: params.job.key
184
+ key: params.job.key,
185
+ ...params.job.name === undefined ? {} : {
186
+ name: params.job.name ?? params.job.key
187
+ }
165
188
  };
166
189
  }
167
190
  if (params.plan.roots.has('jobs')) {
@@ -273,7 +296,8 @@ export function assembleStepDispatchContext(params) {
273
296
  return {
274
297
  site: 'step-dispatch',
275
298
  values: {
276
- ...params.jobs === undefined ? {} : assembleJobsContext(params.jobs),
299
+ vars: params.vars ?? {},
300
+ ...assembleJobsContext(params.jobs ?? []),
277
301
  ...params.jobExecution === undefined ? {} : {
278
302
  execution: {
279
303
  index: params.jobExecution.sequence,
@@ -353,6 +377,7 @@ export function assembleGateContext(params) {
353
377
  return {
354
378
  site: 'step-report',
355
379
  values: {
380
+ vars: params.vars ?? {},
356
381
  step: {
357
382
  ...params.exitCode === null ? {} : {
358
383
  exit_code: BigInt(params.exitCode)
@@ -363,10 +388,14 @@ export function assembleGateContext(params) {
363
388
  }
364
389
  };
365
390
  }
366
- export function assembleJobResolutionContext(executions) {
391
+ export function assembleJobResolutionContext(params) {
367
392
  return {
368
393
  site: 'job-resolution',
369
- values: assembleExecutionsContext(executions)
394
+ values: {
395
+ ...assembleExecutionsContext(params.executions),
396
+ ...assembleJobsContext(params.jobs),
397
+ vars: params.vars ?? {}
398
+ }
370
399
  };
371
400
  }
372
401
  export function assembleExecutionResolutionContext(params) {
@@ -380,7 +409,10 @@ export function assembleExecutionResolutionContext(params) {
380
409
  ...params.jobs === undefined ? {} : assembleJobsContext(params.jobs),
381
410
  execution: assembleExecutionContext(params.jobExecution, executionIndex < 0 ? params.jobExecution.sequence - 1 : executionIndex),
382
411
  job: {
383
- key: params.job.key
412
+ key: params.job.key,
413
+ ...params.job.name === undefined ? {} : {
414
+ name: params.job.name ?? params.job.key
415
+ }
384
416
  },
385
417
  steps: assembleStepsContext({
386
418
  steps: params.steps,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/assemble-run-context.ts"],"sourcesContent":["import {\n analyzeContextRootKeyAccess,\n extractExactContextRoots,\n type WorkflowExpressionEvaluationContext,\n} from '@shipfox/expression';\nimport type {Job, JobListeningTrigger} from '#core/entities/job.js';\nimport type {JobExecution} from '#core/entities/job-execution.js';\nimport type {Step, StepAttempt, StepStatus} from '#core/entities/step.js';\nimport type {TriggerPayload, WorkflowRun} from '#core/entities/workflow-run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\nexport interface JobContextInput {\n readonly job: Pick<Job, 'key' | 'status' | 'outputs'>;\n readonly executions: readonly JobExecution[];\n}\n\nexport interface AssembleWorkflowRunContextParams {\n readonly run: Pick<\n WorkflowRun,\n 'id' | 'name' | 'definitionId' | 'projectId' | 'workspaceId' | 'createdAt'\n >;\n readonly triggerPayload: TriggerPayload;\n readonly inputs?: Record<string, unknown> | null | undefined;\n readonly vars?: Record<string, string> | undefined;\n}\n\nexport function assembleWorkflowRunContext(\n params: AssembleWorkflowRunContextParams,\n): WorkflowExpressionEvaluationContext {\n return {\n run: {\n id: params.run.id,\n name: params.run.name,\n definition_id: params.run.definitionId,\n project_id: params.run.projectId,\n workspace_id: params.run.workspaceId,\n created_at: params.run.createdAt,\n },\n trigger: {\n source: params.triggerPayload.source,\n event: params.triggerPayload.event,\n },\n event: 'data' in params.triggerPayload ? params.triggerPayload.data : null,\n inputs: params.inputs ?? null,\n ...(params.vars === undefined ? {} : {vars: params.vars}),\n };\n}\n\nexport function assembleCreationContext(\n params: AssembleWorkflowRunContextParams,\n): WorkflowEvaluationContext {\n return {\n site: 'run-creation',\n values: assembleWorkflowRunContext(params),\n };\n}\n\nexport interface AssembleExecutionCreationContextParams extends AssembleWorkflowRunContextParams {\n readonly jobId: string;\n readonly sequence: number;\n readonly executionName: string;\n readonly status: JobExecution['status'];\n readonly triggerEvents: readonly JobExecution['triggerEvents'][number][];\n readonly priorExecutions: readonly JobExecution[];\n}\n\nexport function assembleExecutionCreationContext(\n params: AssembleExecutionCreationContextParams,\n): WorkflowEvaluationContext {\n const execution: JobExecution = {\n id: `${params.jobId}:${params.sequence}`,\n jobId: params.jobId,\n sequence: params.sequence,\n name: params.executionName,\n runner: null,\n status: params.status,\n statusReason: null,\n triggerEvents: [...params.triggerEvents],\n outputs: null,\n version: 1,\n createdAt: new Date(),\n updatedAt: new Date(),\n queuedAt: null,\n startedAt: null,\n finishedAt: null,\n timedOutAt: null,\n };\n const executions = assembleExecutionsContext([...params.priorExecutions, execution]);\n const executionValues = executions.executions as unknown[];\n return {\n site: 'execution-creation',\n values: {\n ...assembleWorkflowRunContext(params),\n ...executions,\n execution: executionValues.at(-1),\n },\n };\n}\n\n/**\n * Keeps job-success predicate values aligned with the registry's `executions`\n * type environment.\n */\nexport function assembleExecutionsContext(\n executions: readonly JobExecution[],\n): WorkflowExpressionEvaluationContext {\n return {\n executions: executions.map((execution, index) => assembleExecutionContext(execution, index)),\n };\n}\n\nfunction assembleExecutionContext(execution: JobExecution, index: number): Record<string, unknown> {\n return {\n index,\n name: execution.name,\n status: execution.status,\n started_at: execution.startedAt,\n finished_at: execution.finishedAt,\n events: execution.triggerEvents,\n outputs: execution.outputs ?? {},\n };\n}\n\nexport function assembleJobsContext(\n jobs: readonly JobContextInput[],\n): WorkflowExpressionEvaluationContext & {readonly jobs: Record<string, unknown>} {\n return {\n jobs: Object.fromEntries(jobs.map((input) => [input.job.key, assembleJobContext(input)])),\n };\n}\n\nexport interface AssembleJobActivationContextParams extends AssembleWorkflowRunContextParams {\n readonly jobs: readonly JobContextInput[];\n}\n\nexport function assembleJobActivationContext(\n params: AssembleJobActivationContextParams,\n): WorkflowEvaluationContext {\n return {\n site: 'job-activation',\n values: {\n ...assembleWorkflowRunContext(params),\n ...assembleJobsContext(params.jobs),\n needs: params.jobs.map(assembleJobContext),\n },\n };\n}\n\ntype ListenerSnapshotRoot = 'run' | 'trigger' | 'inputs' | 'job' | 'jobs';\n\nexport interface MatcherSnapshotPlan {\n readonly matcher: JobListeningTrigger;\n readonly roots: ReadonlySet<ListenerSnapshotRoot>;\n readonly jobKeys: ReadonlySet<string>;\n}\n\nexport interface ListenerSnapshotPlan {\n readonly on: readonly MatcherSnapshotPlan[];\n readonly until: readonly MatcherSnapshotPlan[];\n readonly roots: ReadonlySet<ListenerSnapshotRoot>;\n readonly jobKeys: ReadonlySet<string>;\n}\n\nexport function planListenerFilterSnapshots(params: {\n readonly on: readonly JobListeningTrigger[];\n readonly until: readonly JobListeningTrigger[] | null;\n}): ListenerSnapshotPlan {\n const roots = new Set<ListenerSnapshotRoot>();\n const jobKeys = new Set<string>();\n const on = params.on.map((matcher) => planMatcherFilterSnapshot(matcher, roots, jobKeys));\n const until = (params.until ?? []).map((matcher) =>\n planMatcherFilterSnapshot(matcher, roots, jobKeys),\n );\n return {on, until, roots, jobKeys};\n}\n\nfunction planMatcherFilterSnapshot(\n matcher: JobListeningTrigger,\n allRoots: Set<ListenerSnapshotRoot>,\n allJobKeys: Set<string>,\n): MatcherSnapshotPlan {\n if (matcher.filter === undefined) return {matcher, roots: new Set(), jobKeys: new Set()};\n\n let roots: ListenerSnapshotRoot[];\n try {\n roots = extractExactContextRoots(matcher.filter)\n .filter((root) => root !== 'event')\n .filter(isListenerSnapshotRoot);\n } catch {\n return {matcher, roots: new Set(), jobKeys: new Set()};\n }\n\n if (roots.length === 0) return {matcher, roots: new Set(), jobKeys: new Set()};\n\n const jobKeys =\n roots.includes('jobs') && matcher.filter !== undefined\n ? new Set(\n analyzeContextRootKeyAccess(matcher.filter, ['jobs']).references.map(\n (reference) => reference.key,\n ),\n )\n : new Set<string>();\n for (const root of roots) allRoots.add(root);\n for (const key of jobKeys) allJobKeys.add(key);\n return {matcher, roots: new Set(roots), jobKeys};\n}\n\nfunction isListenerSnapshotRoot(root: string): root is ListenerSnapshotRoot {\n return (\n root === 'run' || root === 'trigger' || root === 'inputs' || root === 'job' || root === 'jobs'\n );\n}\n\nexport function assembleListenerSnapshotContext(params: {\n readonly job: Pick<Job, 'key'>;\n readonly run: AssembleWorkflowRunContextParams['run'];\n readonly triggerPayload: TriggerPayload;\n readonly inputs?: Record<string, unknown> | null | undefined;\n readonly plan: ListenerSnapshotPlan;\n readonly dependencyJobs: readonly JobContextInput[];\n}): WorkflowExpressionEvaluationContext {\n const context: Record<string, unknown> = {};\n if (params.plan.roots.has('run') || params.plan.roots.has('trigger')) {\n const runContext = assembleWorkflowRunContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs,\n });\n if (params.plan.roots.has('run')) context.run = runContext.run;\n if (params.plan.roots.has('trigger')) context.trigger = runContext.trigger;\n }\n\n if (params.plan.roots.has('inputs')) {\n context.inputs = params.inputs ?? null;\n }\n if (params.plan.roots.has('job')) {\n context.job = {key: params.job.key};\n }\n if (params.plan.roots.has('jobs')) {\n context.jobs = requestedJobsContext(params.dependencyJobs, params.plan.jobKeys);\n }\n\n return context;\n}\n\nfunction requestedJobsContext(\n dependencyJobs: readonly JobContextInput[],\n jobKeys: ReadonlySet<string>,\n): Record<string, unknown> {\n if (jobKeys.size === 0) return assembleJobsContext(dependencyJobs).jobs;\n\n const filtered = dependencyJobs.filter(({job}) => jobKeys.has(job.key));\n\n return assembleJobsContext(filtered).jobs;\n}\n\nexport type ListenerTriggerWithSnapshot = JobListeningTrigger & {\n readonly filter_snapshot?: Record<string, unknown>;\n};\n\nexport function applyListenerFilterSnapshots(\n plans: readonly MatcherSnapshotPlan[],\n context: WorkflowExpressionEvaluationContext,\n): ListenerTriggerWithSnapshot[] {\n return plans.map((plan) => {\n const filterSnapshot = filterSnapshotForPlan(plan, context);\n if (filterSnapshot === undefined) return plan.matcher;\n\n return {...plan.matcher, filter_snapshot: filterSnapshot};\n });\n}\n\nfunction filterSnapshotForPlan(\n plan: MatcherSnapshotPlan,\n context: WorkflowExpressionEvaluationContext,\n): Record<string, unknown> | undefined {\n const snapshot: Record<string, unknown> = {};\n for (const root of plan.roots) {\n if (root === 'jobs') {\n const jobsSnapshot = jobsSnapshotForPlan(plan, context);\n if (jobsSnapshot !== undefined) snapshot.jobs = jobsSnapshot;\n continue;\n }\n\n if (root in context) snapshot[root] = context[root];\n }\n\n return Object.keys(snapshot).length === 0 ? undefined : snapshot;\n}\n\nfunction jobsSnapshotForPlan(\n plan: MatcherSnapshotPlan,\n context: WorkflowExpressionEvaluationContext,\n): Record<string, unknown> | undefined {\n if (typeof context.jobs !== 'object' || context.jobs === null) {\n return undefined;\n }\n\n const jobsContext = context.jobs as Record<string, unknown>;\n if (plan.jobKeys.size === 0) return {...jobsContext};\n\n const snapshot = Object.fromEntries(\n [...plan.jobKeys].flatMap((key) =>\n Object.hasOwn(jobsContext, key) ? [[key, jobsContext[key]]] : [],\n ),\n );\n return snapshot;\n}\n\nfunction assembleJobContext({job, executions}: JobContextInput): Record<string, unknown> {\n return {\n key: job.key,\n status: job.status,\n outputs: job.outputs ?? {},\n executions: assembleExecutionsContext(executions).executions,\n };\n}\n\nfunction assembleStepsContext(params: {\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n}): Record<string, Record<string, unknown>> {\n return buildStepAttemptContext(params).stepsContext;\n}\n\nfunction buildStepAttemptContext(params: {\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n}): {\n readonly stepsContext: Record<string, Record<string, unknown>>;\n readonly stepsFailed: boolean;\n readonly orderedAttempts: readonly StepAttempt[];\n readonly stepsByKey: ReadonlyMap<string, Step>;\n readonly terminalAttemptsByStepId: ReadonlyMap<string, readonly StepAttempt[]>;\n} {\n const stepsByKey = new Map(\n params.steps.flatMap((step) => (step.key === null ? [] : [[step.key, step] as const])),\n );\n const terminalAttemptsByStepId = new Map<string, StepAttempt[]>();\n const orderedAttempts = [...params.attempts].sort(\n (left, right) => left.executionOrder - right.executionOrder,\n );\n\n for (const attempt of orderedAttempts) {\n if (attempt.status === 'running') continue;\n const attemptsForStep = terminalAttemptsByStepId.get(attempt.stepId) ?? [];\n attemptsForStep.push(attempt);\n terminalAttemptsByStepId.set(attempt.stepId, attemptsForStep);\n }\n\n const stepsContext: Record<string, Record<string, unknown>> = {};\n\n for (const step of params.steps) {\n if (step.key === null) continue;\n const attempts = terminalAttemptsByStepId.get(step.id) ?? [];\n const latestAttempt = attempts.at(-1);\n stepsContext[step.key] = {\n status: step.status,\n ...(latestAttempt === undefined ? {} : latestAttemptFields(latestAttempt)),\n attempts: attempts.map(attemptFields),\n };\n }\n\n return {\n stepsContext,\n stepsFailed: params.steps.some((step) => step.status === 'failed'),\n orderedAttempts,\n stepsByKey,\n terminalAttemptsByStepId,\n };\n}\n\nexport function assembleStepDispatchContext(params: {\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n readonly targetStepId: string;\n readonly jobExecution?: JobExecution;\n readonly jobs?: readonly JobContextInput[];\n}): WorkflowEvaluationContext {\n const targetStep = params.steps.find((step) => step.id === params.targetStepId);\n const stepAttemptContext = buildStepAttemptContext(params);\n const restart =\n targetStep === undefined || targetStep.currentAttempt <= 1\n ? undefined\n : restartProvenance({\n targetStep,\n orderedAttempts: stepAttemptContext.orderedAttempts,\n stepsByKey: stepAttemptContext.stepsByKey,\n terminalAttemptsByStepId: stepAttemptContext.terminalAttemptsByStepId,\n });\n\n return {\n site: 'step-dispatch',\n values: {\n ...(params.jobs === undefined ? {} : assembleJobsContext(params.jobs)),\n ...(params.jobExecution === undefined\n ? {}\n : {\n execution: {\n index: params.jobExecution.sequence,\n name: params.jobExecution.name,\n status: params.jobExecution.status,\n failed: stepAttemptContext.stepsFailed,\n started_at: params.jobExecution.startedAt,\n finished_at: params.jobExecution.finishedAt,\n events: params.jobExecution.triggerEvents,\n outputs: params.jobExecution.outputs ?? {},\n },\n }),\n ...(targetStep === undefined\n ? {}\n : {\n step: {\n attempt: BigInt(targetStep.currentAttempt),\n is_retry: targetStep.currentAttempt > 1,\n ...(restart === undefined ? {} : {restart}),\n },\n }),\n steps: stepAttemptContext.stepsContext,\n },\n };\n}\n\nfunction restartProvenance(params: {\n readonly targetStep: Step;\n readonly orderedAttempts: readonly StepAttempt[];\n readonly stepsByKey: ReadonlyMap<string, Step>;\n readonly terminalAttemptsByStepId: ReadonlyMap<string, readonly StepAttempt[]>;\n}): Record<string, unknown> | undefined {\n for (const attempt of [...params.orderedAttempts].reverse()) {\n if (attempt.status !== 'failed' || attempt.restartFeedback === null) continue;\n const restartFromKey = restartFromStepKey(attempt);\n if (restartFromKey === undefined) continue;\n\n const restartFromStep = params.stepsByKey.get(restartFromKey);\n if (restartFromStep === undefined || restartFromStep.position > params.targetStep.position) {\n continue;\n }\n\n const gatingAttempts = params.terminalAttemptsByStepId.get(attempt.stepId) ?? [];\n return {\n from: {\n ...attemptFields(attempt),\n attempts: gatingAttempts.map(attemptFields),\n },\n feedback: attempt.restartFeedback,\n };\n }\n\n return undefined;\n}\n\nfunction restartFromStepKey(attempt: StepAttempt): string | undefined {\n const gate = attempt.config?.gate;\n if (gate === null || typeof gate !== 'object') return undefined;\n const onFailure = (gate as Record<string, unknown>).on_failure;\n if (onFailure === null || typeof onFailure !== 'object') return undefined;\n const restartFrom = (onFailure as Record<string, unknown>).restart_from;\n return typeof restartFrom === 'string' ? restartFrom : undefined;\n}\n\nfunction attemptFields(attempt: StepAttempt): Record<string, unknown> {\n return {\n status: attempt.status,\n outputs: attempt.output ?? {},\n ...(attempt.response === null ? {} : {response: attempt.response}),\n ...(attempt.exitCode === null ? {} : {exit_code: BigInt(attempt.exitCode)}),\n ...(attempt.gateResult === null ? {} : {gate: attempt.gateResult}),\n };\n}\n\nfunction latestAttemptFields(attempt: StepAttempt): Record<string, unknown> {\n const fields = attemptFields(attempt);\n delete fields.status;\n return fields;\n}\n\nexport function assembleGateContext(params: {\n readonly status: StepStatus;\n readonly exitCode: number | null;\n readonly output?: Record<string, unknown> | null | undefined;\n}): WorkflowEvaluationContext {\n return {\n site: 'step-report',\n values: {\n step: {\n ...(params.exitCode === null ? {} : {exit_code: BigInt(params.exitCode)}),\n status: params.status,\n outputs: params.output ?? {},\n },\n },\n };\n}\n\nexport function assembleJobResolutionContext(\n executions: readonly JobExecution[],\n): WorkflowEvaluationContext {\n return {\n site: 'job-resolution',\n values: assembleExecutionsContext(executions),\n };\n}\n\nexport function assembleExecutionResolutionContext(params: {\n readonly run: AssembleWorkflowRunContextParams['run'];\n readonly triggerPayload: TriggerPayload;\n readonly inputs?: Record<string, unknown> | null | undefined;\n readonly vars?: Record<string, string> | undefined;\n readonly job: Pick<Job, 'key'>;\n readonly jobExecution: JobExecution;\n readonly executions: readonly JobExecution[];\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n readonly jobs?: readonly JobContextInput[];\n}): WorkflowEvaluationContext {\n const executions = assembleExecutionsContext(params.executions);\n const executionIndex = params.executions.findIndex(\n (execution) => execution.id === params.jobExecution.id,\n );\n\n return {\n site: 'execution-resolution',\n values: {\n ...assembleWorkflowRunContext(params),\n ...executions,\n ...(params.jobs === undefined ? {} : assembleJobsContext(params.jobs)),\n execution: assembleExecutionContext(\n params.jobExecution,\n executionIndex < 0 ? params.jobExecution.sequence - 1 : executionIndex,\n ),\n job: {key: params.job.key},\n steps: assembleStepsContext({steps: params.steps, attempts: params.attempts}),\n },\n };\n}\n"],"names":["analyzeContextRootKeyAccess","extractExactContextRoots","assembleWorkflowRunContext","params","run","id","name","definition_id","definitionId","project_id","projectId","workspace_id","workspaceId","created_at","createdAt","trigger","source","triggerPayload","event","data","inputs","vars","undefined","assembleCreationContext","site","values","assembleExecutionCreationContext","execution","jobId","sequence","executionName","runner","status","statusReason","triggerEvents","outputs","version","Date","updatedAt","queuedAt","startedAt","finishedAt","timedOutAt","executions","assembleExecutionsContext","priorExecutions","executionValues","at","map","index","assembleExecutionContext","started_at","finished_at","events","assembleJobsContext","jobs","Object","fromEntries","input","job","key","assembleJobContext","assembleJobActivationContext","needs","planListenerFilterSnapshots","roots","Set","jobKeys","on","matcher","planMatcherFilterSnapshot","until","allRoots","allJobKeys","filter","root","isListenerSnapshotRoot","length","includes","references","reference","add","assembleListenerSnapshotContext","context","plan","has","runContext","requestedJobsContext","dependencyJobs","size","filtered","applyListenerFilterSnapshots","plans","filterSnapshot","filterSnapshotForPlan","filter_snapshot","snapshot","jobsSnapshot","jobsSnapshotForPlan","keys","jobsContext","flatMap","hasOwn","assembleStepsContext","buildStepAttemptContext","stepsContext","stepsByKey","Map","steps","step","terminalAttemptsByStepId","orderedAttempts","attempts","sort","left","right","executionOrder","attempt","attemptsForStep","get","stepId","push","set","latestAttempt","latestAttemptFields","attemptFields","stepsFailed","some","assembleStepDispatchContext","targetStep","find","targetStepId","stepAttemptContext","restart","currentAttempt","restartProvenance","jobExecution","failed","BigInt","is_retry","reverse","restartFeedback","restartFromKey","restartFromStepKey","restartFromStep","position","gatingAttempts","from","feedback","gate","config","onFailure","on_failure","restartFrom","restart_from","output","response","exitCode","exit_code","gateResult","fields","assembleGateContext","assembleJobResolutionContext","assembleExecutionResolutionContext","executionIndex","findIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/step-config/assemble-run-context.ts"],"sourcesContent":["import {\n analyzeContextRootKeyAccess,\n extractExactContextRoots,\n getWorkflowPredicateContextRoots,\n type WorkflowExpressionEvaluationContext,\n type WorkflowPredicateContextRoot,\n} from '@shipfox/expression';\nimport type {Job, JobListeningTrigger} from '#core/entities/job.js';\nimport type {JobExecution} from '#core/entities/job-execution.js';\nimport type {Step, StepAttempt, StepStatus} from '#core/entities/step.js';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowRunTriggerReference,\n} from '#core/entities/workflow-run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\nexport interface JobContextInput {\n readonly job: Pick<Job, 'key' | 'status' | 'outputs'>;\n readonly executions: readonly JobExecution[];\n}\n\nexport interface AssembleWorkflowRunContextParams {\n readonly run: Pick<\n WorkflowRun,\n | 'id'\n | 'number'\n | 'name'\n | 'workflowName'\n | 'definitionId'\n | 'projectId'\n | 'workspaceId'\n | 'createdAt'\n > & {readonly triggerReference?: WorkflowRunTriggerReference | null | undefined};\n readonly triggerPayload: TriggerPayload;\n readonly inputs?: Record<string, unknown> | null | undefined;\n readonly vars?: Record<string, string> | undefined;\n}\n\nexport function assembleWorkflowRunContext(\n params: AssembleWorkflowRunContextParams,\n): WorkflowExpressionEvaluationContext {\n const triggerReference = params.run.triggerReference;\n return {\n workflow: {\n id: params.run.definitionId,\n name: params.run.workflowName,\n },\n run: {\n id: params.run.id,\n number: params.run.number,\n name: params.run.name,\n project_id: params.run.projectId,\n workspace_id: params.run.workspaceId,\n created_at: params.run.createdAt,\n },\n trigger: {\n source: params.triggerPayload.source,\n event: params.triggerPayload.event,\n project: triggerReference?.project ?? null,\n repository: triggerReference?.repository ?? null,\n ref: triggerReference?.ref ?? null,\n commit: triggerReference?.commit ?? null,\n },\n event: 'data' in params.triggerPayload ? params.triggerPayload.data : null,\n inputs: params.inputs ?? null,\n ...(params.vars === undefined ? {} : {vars: params.vars}),\n };\n}\n\nexport function assembleCreationContext(\n params: AssembleWorkflowRunContextParams,\n): WorkflowEvaluationContext {\n return {\n site: 'run-creation',\n values: assembleWorkflowRunContext(params),\n };\n}\n\nexport interface AssembleExecutionCreationContextParams extends AssembleWorkflowRunContextParams {\n readonly job: Pick<Job, 'id' | 'key' | 'name'>;\n readonly sequence: number;\n readonly nameOverride: string | null;\n readonly executionName: string;\n readonly status: JobExecution['status'];\n readonly triggerEvents: readonly JobExecution['triggerEvents'][number][];\n readonly priorExecutions: readonly JobExecution[];\n}\n\nexport function assembleExecutionCreationContext(\n params: AssembleExecutionCreationContextParams,\n): WorkflowEvaluationContext {\n const execution: JobExecution = {\n id: `${params.job.id}:${params.sequence}`,\n jobId: params.job.id,\n sequence: params.sequence,\n nameOverride: params.nameOverride,\n name: params.executionName,\n runner: null,\n status: params.status,\n statusReason: null,\n triggerEvents: [...params.triggerEvents],\n outputs: null,\n version: 1,\n createdAt: new Date(),\n updatedAt: new Date(),\n queuedAt: null,\n startedAt: null,\n finishedAt: null,\n timedOutAt: null,\n };\n const executions = assembleExecutionsContext([...params.priorExecutions, execution]);\n const executionValues = executions.executions as unknown[];\n return {\n site: 'execution-creation',\n values: {\n ...assembleWorkflowRunContext(params),\n ...executions,\n job: {key: params.job.key, name: params.job.name ?? params.job.key},\n execution: executionValues.at(-1),\n },\n };\n}\n\n/**\n * Keeps job-success predicate values aligned with the registry's `executions`\n * type environment.\n */\nexport function assembleExecutionsContext(\n executions: readonly JobExecution[],\n): WorkflowExpressionEvaluationContext {\n return {\n executions: executions.map((execution, index) => assembleExecutionContext(execution, index)),\n };\n}\n\nfunction assembleExecutionContext(execution: JobExecution, index: number): Record<string, unknown> {\n return {\n index,\n name: execution.name,\n status: execution.status,\n started_at: execution.startedAt,\n finished_at: execution.finishedAt,\n events: execution.triggerEvents,\n outputs: execution.outputs ?? {},\n };\n}\n\nexport function assembleJobsContext(\n jobs: readonly JobContextInput[],\n): WorkflowExpressionEvaluationContext & {readonly jobs: Record<string, unknown>} {\n return {\n jobs: Object.fromEntries(jobs.map((input) => [input.job.key, assembleJobContext(input)])),\n };\n}\n\nexport interface AssembleJobActivationContextParams extends AssembleWorkflowRunContextParams {\n readonly jobs: readonly JobContextInput[];\n}\n\nexport function assembleJobActivationContext(\n params: AssembleJobActivationContextParams,\n): WorkflowEvaluationContext {\n return {\n site: 'job-activation',\n values: {\n ...assembleWorkflowRunContext(params),\n ...assembleJobsContext(params.jobs),\n needs: params.jobs.map(assembleJobContext),\n vars: params.vars ?? {},\n },\n };\n}\n\ntype ListenerPredicateField = 'listener.on' | 'listener.until';\ntype ListenerSnapshotRoot = Exclude<WorkflowPredicateContextRoot<ListenerPredicateField>, 'event'>;\n\nexport interface MatcherSnapshotPlan {\n readonly matcher: JobListeningTrigger;\n readonly roots: ReadonlySet<ListenerSnapshotRoot>;\n readonly jobKeys: ReadonlySet<string>;\n}\n\nexport interface ListenerSnapshotPlan {\n readonly on: readonly MatcherSnapshotPlan[];\n readonly until: readonly MatcherSnapshotPlan[];\n readonly roots: ReadonlySet<ListenerSnapshotRoot>;\n readonly jobKeys: ReadonlySet<string>;\n}\n\nexport function planListenerFilterSnapshots(params: {\n readonly on: readonly JobListeningTrigger[];\n readonly until: readonly JobListeningTrigger[] | null;\n}): ListenerSnapshotPlan {\n const roots = new Set<ListenerSnapshotRoot>();\n const jobKeys = new Set<string>();\n const on = params.on.map((matcher) =>\n planMatcherFilterSnapshot('listener.on', matcher, roots, jobKeys),\n );\n const until = (params.until ?? []).map((matcher) =>\n planMatcherFilterSnapshot('listener.until', matcher, roots, jobKeys),\n );\n return {on, until, roots, jobKeys};\n}\n\nfunction planMatcherFilterSnapshot(\n field: ListenerPredicateField,\n matcher: JobListeningTrigger,\n allRoots: Set<ListenerSnapshotRoot>,\n allJobKeys: Set<string>,\n): MatcherSnapshotPlan {\n if (matcher.filter === undefined) return {matcher, roots: new Set(), jobKeys: new Set()};\n\n let roots: ListenerSnapshotRoot[];\n try {\n roots = extractExactContextRoots(matcher.filter).filter((root) =>\n isListenerSnapshotRoot(field, root),\n );\n } catch {\n return {matcher, roots: new Set(), jobKeys: new Set()};\n }\n\n if (roots.length === 0) return {matcher, roots: new Set(), jobKeys: new Set()};\n\n const jobKeys =\n roots.includes('jobs') && matcher.filter !== undefined\n ? new Set(\n analyzeContextRootKeyAccess(matcher.filter, ['jobs']).references.map(\n (reference) => reference.key,\n ),\n )\n : new Set<string>();\n for (const root of roots) allRoots.add(root);\n for (const key of jobKeys) allJobKeys.add(key);\n return {matcher, roots: new Set(roots), jobKeys};\n}\n\nfunction isListenerSnapshotRoot(\n field: ListenerPredicateField,\n root: string,\n): root is ListenerSnapshotRoot {\n return (\n root !== 'event' &&\n getWorkflowPredicateContextRoots(field).includes(\n root as WorkflowPredicateContextRoot<ListenerPredicateField>,\n )\n );\n}\n\nexport function assembleListenerSnapshotContext(params: {\n readonly job: Pick<Job, 'key'> & Partial<Pick<Job, 'name'>>;\n readonly run: AssembleWorkflowRunContextParams['run'];\n readonly triggerPayload: TriggerPayload;\n readonly inputs?: Record<string, unknown> | null | undefined;\n readonly vars?: Record<string, string> | undefined;\n readonly plan: ListenerSnapshotPlan;\n readonly dependencyJobs: readonly JobContextInput[];\n}): WorkflowExpressionEvaluationContext {\n const context: Record<string, unknown> = {};\n if (\n params.plan.roots.has('workflow') ||\n params.plan.roots.has('run') ||\n params.plan.roots.has('trigger')\n ) {\n const runContext = assembleWorkflowRunContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs,\n vars: params.vars,\n });\n if (params.plan.roots.has('workflow')) context.workflow = runContext.workflow;\n if (params.plan.roots.has('run')) context.run = runContext.run;\n if (params.plan.roots.has('trigger')) context.trigger = runContext.trigger;\n }\n\n if (params.plan.roots.has('inputs')) {\n context.inputs = params.inputs ?? null;\n }\n if (params.plan.roots.has('vars')) {\n context.vars = params.vars ?? {};\n }\n if (params.plan.roots.has('job')) {\n context.job = {\n key: params.job.key,\n ...(params.job.name === undefined ? {} : {name: params.job.name ?? params.job.key}),\n };\n }\n if (params.plan.roots.has('jobs')) {\n context.jobs = requestedJobsContext(params.dependencyJobs, params.plan.jobKeys);\n }\n\n return context;\n}\n\nfunction requestedJobsContext(\n dependencyJobs: readonly JobContextInput[],\n jobKeys: ReadonlySet<string>,\n): Record<string, unknown> {\n if (jobKeys.size === 0) return assembleJobsContext(dependencyJobs).jobs;\n\n const filtered = dependencyJobs.filter(({job}) => jobKeys.has(job.key));\n\n return assembleJobsContext(filtered).jobs;\n}\n\nexport type ListenerTriggerWithSnapshot = JobListeningTrigger & {\n readonly filter_snapshot?: Record<string, unknown>;\n};\n\nexport function applyListenerFilterSnapshots(\n plans: readonly MatcherSnapshotPlan[],\n context: WorkflowExpressionEvaluationContext,\n): ListenerTriggerWithSnapshot[] {\n return plans.map((plan) => {\n const filterSnapshot = filterSnapshotForPlan(plan, context);\n if (filterSnapshot === undefined) return plan.matcher;\n\n return {...plan.matcher, filter_snapshot: filterSnapshot};\n });\n}\n\nfunction filterSnapshotForPlan(\n plan: MatcherSnapshotPlan,\n context: WorkflowExpressionEvaluationContext,\n): Record<string, unknown> | undefined {\n const snapshot: Record<string, unknown> = {};\n for (const root of plan.roots) {\n if (root === 'jobs') {\n const jobsSnapshot = jobsSnapshotForPlan(plan, context);\n if (jobsSnapshot !== undefined) snapshot.jobs = jobsSnapshot;\n continue;\n }\n\n if (root in context) snapshot[root] = context[root];\n }\n\n return Object.keys(snapshot).length === 0 ? undefined : snapshot;\n}\n\nfunction jobsSnapshotForPlan(\n plan: MatcherSnapshotPlan,\n context: WorkflowExpressionEvaluationContext,\n): Record<string, unknown> | undefined {\n if (typeof context.jobs !== 'object' || context.jobs === null) {\n return undefined;\n }\n\n const jobsContext = context.jobs as Record<string, unknown>;\n if (plan.jobKeys.size === 0) return {...jobsContext};\n\n const snapshot = Object.fromEntries(\n [...plan.jobKeys].flatMap((key) =>\n Object.hasOwn(jobsContext, key) ? [[key, jobsContext[key]]] : [],\n ),\n );\n return snapshot;\n}\n\nfunction assembleJobContext({job, executions}: JobContextInput): Record<string, unknown> {\n return {\n key: job.key,\n status: job.status,\n outputs: job.outputs ?? {},\n executions: assembleExecutionsContext(executions).executions,\n };\n}\n\nfunction assembleStepsContext(params: {\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n}): Record<string, Record<string, unknown>> {\n return buildStepAttemptContext(params).stepsContext;\n}\n\nfunction buildStepAttemptContext(params: {\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n}): {\n readonly stepsContext: Record<string, Record<string, unknown>>;\n readonly stepsFailed: boolean;\n readonly orderedAttempts: readonly StepAttempt[];\n readonly stepsByKey: ReadonlyMap<string, Step>;\n readonly terminalAttemptsByStepId: ReadonlyMap<string, readonly StepAttempt[]>;\n} {\n const stepsByKey = new Map(\n params.steps.flatMap((step) => (step.key === null ? [] : [[step.key, step] as const])),\n );\n const terminalAttemptsByStepId = new Map<string, StepAttempt[]>();\n const orderedAttempts = [...params.attempts].sort(\n (left, right) => left.executionOrder - right.executionOrder,\n );\n\n for (const attempt of orderedAttempts) {\n if (attempt.status === 'running') continue;\n const attemptsForStep = terminalAttemptsByStepId.get(attempt.stepId) ?? [];\n attemptsForStep.push(attempt);\n terminalAttemptsByStepId.set(attempt.stepId, attemptsForStep);\n }\n\n const stepsContext: Record<string, Record<string, unknown>> = {};\n\n for (const step of params.steps) {\n if (step.key === null) continue;\n const attempts = terminalAttemptsByStepId.get(step.id) ?? [];\n const latestAttempt = attempts.at(-1);\n stepsContext[step.key] = {\n status: step.status,\n ...(latestAttempt === undefined ? {} : latestAttemptFields(latestAttempt)),\n attempts: attempts.map(attemptFields),\n };\n }\n\n return {\n stepsContext,\n stepsFailed: params.steps.some((step) => step.status === 'failed'),\n orderedAttempts,\n stepsByKey,\n terminalAttemptsByStepId,\n };\n}\n\nexport function assembleStepDispatchContext(params: {\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n readonly targetStepId: string;\n readonly jobExecution?: JobExecution;\n readonly jobs?: readonly JobContextInput[];\n readonly vars?: Record<string, string> | undefined;\n}): WorkflowEvaluationContext {\n const targetStep = params.steps.find((step) => step.id === params.targetStepId);\n const stepAttemptContext = buildStepAttemptContext(params);\n const restart =\n targetStep === undefined || targetStep.currentAttempt <= 1\n ? undefined\n : restartProvenance({\n targetStep,\n orderedAttempts: stepAttemptContext.orderedAttempts,\n stepsByKey: stepAttemptContext.stepsByKey,\n terminalAttemptsByStepId: stepAttemptContext.terminalAttemptsByStepId,\n });\n\n return {\n site: 'step-dispatch',\n values: {\n vars: params.vars ?? {},\n ...assembleJobsContext(params.jobs ?? []),\n ...(params.jobExecution === undefined\n ? {}\n : {\n execution: {\n index: params.jobExecution.sequence,\n name: params.jobExecution.name,\n status: params.jobExecution.status,\n failed: stepAttemptContext.stepsFailed,\n started_at: params.jobExecution.startedAt,\n finished_at: params.jobExecution.finishedAt,\n events: params.jobExecution.triggerEvents,\n outputs: params.jobExecution.outputs ?? {},\n },\n }),\n ...(targetStep === undefined\n ? {}\n : {\n step: {\n attempt: BigInt(targetStep.currentAttempt),\n is_retry: targetStep.currentAttempt > 1,\n ...(restart === undefined ? {} : {restart}),\n },\n }),\n steps: stepAttemptContext.stepsContext,\n },\n };\n}\n\nfunction restartProvenance(params: {\n readonly targetStep: Step;\n readonly orderedAttempts: readonly StepAttempt[];\n readonly stepsByKey: ReadonlyMap<string, Step>;\n readonly terminalAttemptsByStepId: ReadonlyMap<string, readonly StepAttempt[]>;\n}): Record<string, unknown> | undefined {\n for (const attempt of [...params.orderedAttempts].reverse()) {\n if (attempt.status !== 'failed' || attempt.restartFeedback === null) continue;\n const restartFromKey = restartFromStepKey(attempt);\n if (restartFromKey === undefined) continue;\n\n const restartFromStep = params.stepsByKey.get(restartFromKey);\n if (restartFromStep === undefined || restartFromStep.position > params.targetStep.position) {\n continue;\n }\n\n const gatingAttempts = params.terminalAttemptsByStepId.get(attempt.stepId) ?? [];\n return {\n from: {\n ...attemptFields(attempt),\n attempts: gatingAttempts.map(attemptFields),\n },\n feedback: attempt.restartFeedback,\n };\n }\n\n return undefined;\n}\n\nfunction restartFromStepKey(attempt: StepAttempt): string | undefined {\n const gate = attempt.config?.gate;\n if (gate === null || typeof gate !== 'object') return undefined;\n const onFailure = (gate as Record<string, unknown>).on_failure;\n if (onFailure === null || typeof onFailure !== 'object') return undefined;\n const restartFrom = (onFailure as Record<string, unknown>).restart_from;\n return typeof restartFrom === 'string' ? restartFrom : undefined;\n}\n\nfunction attemptFields(attempt: StepAttempt): Record<string, unknown> {\n return {\n status: attempt.status,\n outputs: attempt.output ?? {},\n ...(attempt.response === null ? {} : {response: attempt.response}),\n ...(attempt.exitCode === null ? {} : {exit_code: BigInt(attempt.exitCode)}),\n ...(attempt.gateResult === null ? {} : {gate: attempt.gateResult}),\n };\n}\n\nfunction latestAttemptFields(attempt: StepAttempt): Record<string, unknown> {\n const fields = attemptFields(attempt);\n delete fields.status;\n return fields;\n}\n\nexport function assembleGateContext(params: {\n readonly status: StepStatus;\n readonly exitCode: number | null;\n readonly output?: Record<string, unknown> | null | undefined;\n readonly vars?: Record<string, string> | undefined;\n}): WorkflowEvaluationContext {\n return {\n site: 'step-report',\n values: {\n vars: params.vars ?? {},\n step: {\n ...(params.exitCode === null ? {} : {exit_code: BigInt(params.exitCode)}),\n status: params.status,\n outputs: params.output ?? {},\n },\n },\n };\n}\n\nexport function assembleJobResolutionContext(params: {\n readonly executions: readonly JobExecution[];\n readonly jobs: readonly JobContextInput[];\n readonly vars?: Record<string, string> | undefined;\n}): WorkflowEvaluationContext {\n return {\n site: 'job-resolution',\n values: {\n ...assembleExecutionsContext(params.executions),\n ...assembleJobsContext(params.jobs),\n vars: params.vars ?? {},\n },\n };\n}\n\nexport function assembleExecutionResolutionContext(params: {\n readonly run: AssembleWorkflowRunContextParams['run'];\n readonly triggerPayload: TriggerPayload;\n readonly inputs?: Record<string, unknown> | null | undefined;\n readonly vars?: Record<string, string> | undefined;\n readonly job: Pick<Job, 'key'> & Partial<Pick<Job, 'name'>>;\n readonly jobExecution: JobExecution;\n readonly executions: readonly JobExecution[];\n readonly steps: readonly Step[];\n readonly attempts: readonly StepAttempt[];\n readonly jobs?: readonly JobContextInput[];\n}): WorkflowEvaluationContext {\n const executions = assembleExecutionsContext(params.executions);\n const executionIndex = params.executions.findIndex(\n (execution) => execution.id === params.jobExecution.id,\n );\n\n return {\n site: 'execution-resolution',\n values: {\n ...assembleWorkflowRunContext(params),\n ...executions,\n ...(params.jobs === undefined ? {} : assembleJobsContext(params.jobs)),\n execution: assembleExecutionContext(\n params.jobExecution,\n executionIndex < 0 ? params.jobExecution.sequence - 1 : executionIndex,\n ),\n job: {\n key: params.job.key,\n ...(params.job.name === undefined ? {} : {name: params.job.name ?? params.job.key}),\n },\n steps: assembleStepsContext({steps: params.steps, attempts: params.attempts}),\n },\n };\n}\n"],"names":["analyzeContextRootKeyAccess","extractExactContextRoots","getWorkflowPredicateContextRoots","assembleWorkflowRunContext","params","triggerReference","run","workflow","id","definitionId","name","workflowName","number","project_id","projectId","workspace_id","workspaceId","created_at","createdAt","trigger","source","triggerPayload","event","project","repository","ref","commit","data","inputs","vars","undefined","assembleCreationContext","site","values","assembleExecutionCreationContext","execution","job","sequence","jobId","nameOverride","executionName","runner","status","statusReason","triggerEvents","outputs","version","Date","updatedAt","queuedAt","startedAt","finishedAt","timedOutAt","executions","assembleExecutionsContext","priorExecutions","executionValues","key","at","map","index","assembleExecutionContext","started_at","finished_at","events","assembleJobsContext","jobs","Object","fromEntries","input","assembleJobContext","assembleJobActivationContext","needs","planListenerFilterSnapshots","roots","Set","jobKeys","on","matcher","planMatcherFilterSnapshot","until","field","allRoots","allJobKeys","filter","root","isListenerSnapshotRoot","length","includes","references","reference","add","assembleListenerSnapshotContext","context","plan","has","runContext","requestedJobsContext","dependencyJobs","size","filtered","applyListenerFilterSnapshots","plans","filterSnapshot","filterSnapshotForPlan","filter_snapshot","snapshot","jobsSnapshot","jobsSnapshotForPlan","keys","jobsContext","flatMap","hasOwn","assembleStepsContext","buildStepAttemptContext","stepsContext","stepsByKey","Map","steps","step","terminalAttemptsByStepId","orderedAttempts","attempts","sort","left","right","executionOrder","attempt","attemptsForStep","get","stepId","push","set","latestAttempt","latestAttemptFields","attemptFields","stepsFailed","some","assembleStepDispatchContext","targetStep","find","targetStepId","stepAttemptContext","restart","currentAttempt","restartProvenance","jobExecution","failed","BigInt","is_retry","reverse","restartFeedback","restartFromKey","restartFromStepKey","restartFromStep","position","gatingAttempts","from","feedback","gate","config","onFailure","on_failure","restartFrom","restart_from","output","response","exitCode","exit_code","gateResult","fields","assembleGateContext","assembleJobResolutionContext","assembleExecutionResolutionContext","executionIndex","findIndex"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"complete-step-dispatch-config.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/complete-step-dispatch-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAC,6BAA6B,EAAE,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAGhF,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAAC,CAwBD"}
1
+ {"version":3,"file":"complete-step-dispatch-config.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/complete-step-dispatch-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAC,6BAA6B,EAAE,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAIhF,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAAC,CA0CD"}