@shipfox/api-workflows 5.0.0 → 7.0.1

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 (277) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +89 -0
  3. package/dist/core/agent-defaults.d.ts +17 -0
  4. package/dist/core/agent-defaults.d.ts.map +1 -0
  5. package/dist/core/agent-defaults.js +21 -0
  6. package/dist/core/agent-defaults.js.map +1 -0
  7. package/dist/core/agent-tool-capability-warning.d.ts +4 -0
  8. package/dist/core/agent-tool-capability-warning.d.ts.map +1 -1
  9. package/dist/core/agent-tool-capability-warning.js +15 -17
  10. package/dist/core/agent-tool-capability-warning.js.map +1 -1
  11. package/dist/core/agent-tools.d.ts +11 -9
  12. package/dist/core/agent-tools.d.ts.map +1 -1
  13. package/dist/core/agent-tools.js +23 -18
  14. package/dist/core/agent-tools.js.map +1 -1
  15. package/dist/core/checkout.d.ts +21 -7
  16. package/dist/core/checkout.d.ts.map +1 -1
  17. package/dist/core/checkout.js +23 -11
  18. package/dist/core/checkout.js.map +1 -1
  19. package/dist/core/entities/workflow-run-attempt.d.ts +1 -1
  20. package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -1
  21. package/dist/core/entities/workflow-run-attempt.js.map +1 -1
  22. package/dist/core/job-execution.d.ts +3 -1
  23. package/dist/core/job-execution.d.ts.map +1 -1
  24. package/dist/core/job-execution.js +14 -12
  25. package/dist/core/job-execution.js.map +1 -1
  26. package/dist/core/job-transition/derive-job-execution-outputs.d.ts +1 -1
  27. package/dist/core/job-transition/derive-job-execution-outputs.d.ts.map +1 -1
  28. package/dist/core/job-transition/derive-job-execution-outputs.js.map +1 -1
  29. package/dist/core/job-transition/derive-job-success.js +1 -1
  30. package/dist/core/job-transition/derive-job-success.js.map +1 -1
  31. package/dist/core/listener-execution-materialization.d.ts +3 -3
  32. package/dist/core/listener-execution-materialization.d.ts.map +1 -1
  33. package/dist/core/listener-execution-materialization.js +3 -4
  34. package/dist/core/listener-execution-materialization.js.map +1 -1
  35. package/dist/core/run-workflow.d.ts +12 -1
  36. package/dist/core/run-workflow.d.ts.map +1 -1
  37. package/dist/core/run-workflow.js +13 -8
  38. package/dist/core/run-workflow.js.map +1 -1
  39. package/dist/core/step-config/agent.d.ts +8 -8
  40. package/dist/core/step-config/agent.d.ts.map +1 -1
  41. package/dist/core/step-config/agent.js +12 -10
  42. package/dist/core/step-config/agent.js.map +1 -1
  43. package/dist/core/step-config/complete-step-dispatch-config.d.ts +4 -4
  44. package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -1
  45. package/dist/core/step-config/complete-step-dispatch-config.js +2 -2
  46. package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -1
  47. package/dist/core/step-config/materialize-job-execution-steps.d.ts +3 -3
  48. package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -1
  49. package/dist/core/step-config/materialize-job-execution-steps.js +5 -6
  50. package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
  51. package/dist/core/step-config/materialize-workflow-model.d.ts +3 -3
  52. package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -1
  53. package/dist/core/step-config/materialize-workflow-model.js +4 -4
  54. package/dist/core/step-config/materialize-workflow-model.js.map +1 -1
  55. package/dist/core/step-config/resolve-job-execution-name.d.ts +1 -1
  56. package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -1
  57. package/dist/core/step-config/resolve-job-execution-name.js.map +1 -1
  58. package/dist/core/step-config/resolve-step-config.d.ts +4 -4
  59. package/dist/core/step-config/resolve-step-config.d.ts.map +1 -1
  60. package/dist/core/step-config/resolve-step-config.js +6 -6
  61. package/dist/core/step-config/resolve-step-config.js.map +1 -1
  62. package/dist/core/step-config/run.d.ts +1 -1
  63. package/dist/core/step-config/run.d.ts.map +1 -1
  64. package/dist/core/step-config/run.js.map +1 -1
  65. package/dist/core/workflow-run-creation.d.ts +3 -3
  66. package/dist/core/workflow-run-creation.d.ts.map +1 -1
  67. package/dist/core/workflow-run-creation.js +3 -4
  68. package/dist/core/workflow-run-creation.js.map +1 -1
  69. package/dist/db/db.d.ts +16 -4
  70. package/dist/db/db.d.ts.map +1 -1
  71. package/dist/db/job-listeners.d.ts +7 -1
  72. package/dist/db/job-listeners.d.ts.map +1 -1
  73. package/dist/db/job-listeners.js +10 -5
  74. package/dist/db/job-listeners.js.map +1 -1
  75. package/dist/db/runner-lease-table.d.ts +5 -5
  76. package/dist/db/runner-lease-table.d.ts.map +1 -1
  77. package/dist/db/runner-lease-table.js +3 -2
  78. package/dist/db/runner-lease-table.js.map +1 -1
  79. package/dist/db/schema/workflow-run-attempts.d.ts +9 -3
  80. package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -1
  81. package/dist/db/schema/workflow-run-attempts.js +2 -1
  82. package/dist/db/schema/workflow-run-attempts.js.map +1 -1
  83. package/dist/db/schema/workflow-runs.js +1 -1
  84. package/dist/db/schema/workflow-runs.js.map +1 -1
  85. package/dist/db/workflow-runs/job-executions.d.ts +5 -0
  86. package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
  87. package/dist/db/workflow-runs/job-executions.js +14 -7
  88. package/dist/db/workflow-runs/job-executions.js.map +1 -1
  89. package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
  90. package/dist/db/workflow-runs/jobs.js +3 -1
  91. package/dist/db/workflow-runs/jobs.js.map +1 -1
  92. package/dist/db/workflow-runs/run-create.d.ts +9 -2
  93. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  94. package/dist/db/workflow-runs/run-create.js +12 -9
  95. package/dist/db/workflow-runs/run-create.js.map +1 -1
  96. package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -1
  97. package/dist/db/workflow-runs/run-rerun.js +3 -1
  98. package/dist/db/workflow-runs/run-rerun.js.map +1 -1
  99. package/dist/index.d.ts +18 -4
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +61 -37
  102. package/dist/index.js.map +1 -1
  103. package/dist/presentation/dto/checkout-token.d.ts +14 -1
  104. package/dist/presentation/dto/checkout-token.d.ts.map +1 -1
  105. package/dist/presentation/dto/checkout-token.js.map +1 -1
  106. package/dist/presentation/index.d.ts +1 -1
  107. package/dist/presentation/index.d.ts.map +1 -1
  108. package/dist/presentation/index.js +1 -1
  109. package/dist/presentation/index.js.map +1 -1
  110. package/dist/presentation/inter-module.d.ts +18 -0
  111. package/dist/presentation/inter-module.d.ts.map +1 -0
  112. package/dist/presentation/inter-module.js +113 -0
  113. package/dist/presentation/inter-module.js.map +1 -0
  114. package/dist/presentation/routes/agent-runtime-config.d.ts +6 -1
  115. package/dist/presentation/routes/agent-runtime-config.d.ts.map +1 -1
  116. package/dist/presentation/routes/agent-runtime-config.js +59 -57
  117. package/dist/presentation/routes/agent-runtime-config.js.map +1 -1
  118. package/dist/presentation/routes/cancel-run.d.ts +2 -1
  119. package/dist/presentation/routes/cancel-run.d.ts.map +1 -1
  120. package/dist/presentation/routes/cancel-run.js +37 -34
  121. package/dist/presentation/routes/cancel-run.js.map +1 -1
  122. package/dist/presentation/routes/checkout-token.d.ts +8 -1
  123. package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
  124. package/dist/presentation/routes/checkout-token.js +65 -47
  125. package/dist/presentation/routes/checkout-token.js.map +1 -1
  126. package/dist/presentation/routes/get-run-aggregates.d.ts +2 -1
  127. package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
  128. package/dist/presentation/routes/get-run-aggregates.js +44 -53
  129. package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
  130. package/dist/presentation/routes/get-run.d.ts +2 -1
  131. package/dist/presentation/routes/get-run.d.ts.map +1 -1
  132. package/dist/presentation/routes/get-run.js +53 -50
  133. package/dist/presentation/routes/get-run.js.map +1 -1
  134. package/dist/presentation/routes/get-step-secrets.d.ts +3 -1
  135. package/dist/presentation/routes/get-step-secrets.d.ts.map +1 -1
  136. package/dist/presentation/routes/get-step-secrets.js +72 -68
  137. package/dist/presentation/routes/get-step-secrets.js.map +1 -1
  138. package/dist/presentation/routes/index.d.ts +19 -2
  139. package/dist/presentation/routes/index.d.ts.map +1 -1
  140. package/dist/presentation/routes/index.js +38 -30
  141. package/dist/presentation/routes/index.js.map +1 -1
  142. package/dist/presentation/routes/leased-step.d.ts +2 -0
  143. package/dist/presentation/routes/leased-step.d.ts.map +1 -1
  144. package/dist/presentation/routes/leased-step.js +1 -2
  145. package/dist/presentation/routes/leased-step.js.map +1 -1
  146. package/dist/presentation/routes/list-run-attempts.d.ts +2 -1
  147. package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -1
  148. package/dist/presentation/routes/list-run-attempts.js +29 -26
  149. package/dist/presentation/routes/list-run-attempts.js.map +1 -1
  150. package/dist/presentation/routes/list-runs.d.ts +2 -1
  151. package/dist/presentation/routes/list-runs.d.ts.map +1 -1
  152. package/dist/presentation/routes/list-runs.js +51 -60
  153. package/dist/presentation/routes/list-runs.js.map +1 -1
  154. package/dist/presentation/routes/next-step.d.ts +10 -1
  155. package/dist/presentation/routes/next-step.d.ts.map +1 -1
  156. package/dist/presentation/routes/next-step.js +64 -50
  157. package/dist/presentation/routes/next-step.js.map +1 -1
  158. package/dist/presentation/routes/project-access.d.ts +10 -0
  159. package/dist/presentation/routes/project-access.d.ts.map +1 -0
  160. package/dist/presentation/routes/project-access.js +17 -0
  161. package/dist/presentation/routes/project-access.js.map +1 -0
  162. package/dist/presentation/routes/report-step.d.ts +2 -1
  163. package/dist/presentation/routes/report-step.d.ts.map +1 -1
  164. package/dist/presentation/routes/report-step.js +62 -61
  165. package/dist/presentation/routes/report-step.js.map +1 -1
  166. package/dist/presentation/routes/require-accessible-run.d.ts +3 -1
  167. package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -1
  168. package/dist/presentation/routes/require-accessible-run.js +3 -6
  169. package/dist/presentation/routes/require-accessible-run.js.map +1 -1
  170. package/dist/presentation/routes/rerun-run.d.ts +2 -1
  171. package/dist/presentation/routes/rerun-run.d.ts.map +1 -1
  172. package/dist/presentation/routes/rerun-run.js +46 -43
  173. package/dist/presentation/routes/rerun-run.js.map +1 -1
  174. package/dist/temporal/activities/index.d.ts +44 -9
  175. package/dist/temporal/activities/index.d.ts.map +1 -1
  176. package/dist/temporal/activities/index.js +13 -9
  177. package/dist/temporal/activities/index.js.map +1 -1
  178. package/dist/temporal/activities/orchestration-activities.d.ts +20 -11
  179. package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
  180. package/dist/temporal/activities/orchestration-activities.js +48 -33
  181. package/dist/temporal/activities/orchestration-activities.js.map +1 -1
  182. package/dist/tsconfig.test.tsbuildinfo +1 -1
  183. package/package.json +28 -21
  184. package/src/core/agent-defaults.test.ts +28 -0
  185. package/src/core/agent-defaults.ts +36 -0
  186. package/src/core/agent-tool-capability-warning.test.ts +36 -11
  187. package/src/core/agent-tool-capability-warning.ts +27 -25
  188. package/src/core/agent-tools.ts +33 -36
  189. package/src/core/checkout.test.ts +38 -25
  190. package/src/core/checkout.ts +41 -14
  191. package/src/core/entities/workflow-run-attempt.ts +1 -1
  192. package/src/core/job-execution.ts +19 -9
  193. package/src/core/job-transition/derive-job-execution-outputs.ts +1 -1
  194. package/src/core/job-transition/derive-job-success.ts +1 -1
  195. package/src/core/listener-execution-materialization.test.ts +4 -2
  196. package/src/core/listener-execution-materialization.ts +6 -9
  197. package/src/core/run-workflow.test.ts +43 -38
  198. package/src/core/run-workflow.ts +26 -9
  199. package/src/core/step-config/agent.ts +24 -26
  200. package/src/core/step-config/complete-step-dispatch-config.test.ts +22 -23
  201. package/src/core/step-config/complete-step-dispatch-config.ts +6 -6
  202. package/src/core/step-config/materialize-job-execution-steps.test.ts +34 -23
  203. package/src/core/step-config/materialize-job-execution-steps.ts +38 -39
  204. package/src/core/step-config/materialize-workflow-model.test.ts +94 -82
  205. package/src/core/step-config/materialize-workflow-model.ts +31 -29
  206. package/src/core/step-config/resolve-job-execution-name.ts +1 -1
  207. package/src/core/step-config/resolve-step-config.ts +11 -9
  208. package/src/core/step-config/run.ts +1 -1
  209. package/src/core/workflow-run-creation.test.ts +14 -10
  210. package/src/core/workflow-run-creation.ts +6 -9
  211. package/src/db/job-listeners.ts +20 -5
  212. package/src/db/runner-lease-table.ts +2 -2
  213. package/src/db/schema/workflow-run-attempts.ts +7 -3
  214. package/src/db/schema/workflow-runs.ts +1 -1
  215. package/src/db/workflow-runs/job-executions.ts +15 -1
  216. package/src/db/workflow-runs/jobs.ts +4 -1
  217. package/src/db/workflow-runs/run-create.test.ts +7 -1
  218. package/src/db/workflow-runs/run-create.ts +25 -15
  219. package/src/db/workflow-runs/run-rerun.test.ts +1 -1
  220. package/src/db/workflow-runs/run-rerun.ts +6 -3
  221. package/src/index.ts +75 -33
  222. package/src/presentation/dto/checkout-token.ts +7 -1
  223. package/src/presentation/index.ts +1 -1
  224. package/src/presentation/inter-module.test.ts +149 -0
  225. package/src/presentation/inter-module.ts +132 -0
  226. package/src/presentation/routes/agent-runtime-config.test.ts +53 -10
  227. package/src/presentation/routes/agent-runtime-config.ts +89 -64
  228. package/src/presentation/routes/cancel-run.test.ts +10 -20
  229. package/src/presentation/routes/cancel-run.ts +30 -27
  230. package/src/presentation/routes/checkout-token.test.ts +52 -33
  231. package/src/presentation/routes/checkout-token.ts +109 -49
  232. package/src/presentation/routes/get-run-aggregates.test.ts +13 -7
  233. package/src/presentation/routes/get-run-aggregates.ts +54 -57
  234. package/src/presentation/routes/get-run.test.ts +10 -18
  235. package/src/presentation/routes/get-run.ts +51 -48
  236. package/src/presentation/routes/get-step-secrets.test.ts +29 -7
  237. package/src/presentation/routes/get-step-secrets.ts +72 -61
  238. package/src/presentation/routes/index.test.ts +16 -1
  239. package/src/presentation/routes/index.ts +54 -29
  240. package/src/presentation/routes/leased-step.ts +3 -2
  241. package/src/presentation/routes/list-run-attempts.test.ts +9 -19
  242. package/src/presentation/routes/list-run-attempts.ts +21 -18
  243. package/src/presentation/routes/list-runs.test.ts +13 -7
  244. package/src/presentation/routes/list-runs.ts +64 -67
  245. package/src/presentation/routes/next-step.test.ts +30 -11
  246. package/src/presentation/routes/next-step.ts +68 -48
  247. package/src/presentation/routes/project-access.ts +16 -0
  248. package/src/presentation/routes/report-step.test.ts +18 -2
  249. package/src/presentation/routes/report-step.ts +51 -49
  250. package/src/presentation/routes/require-accessible-run.ts +5 -2
  251. package/src/presentation/routes/rerun-run.test.ts +9 -19
  252. package/src/presentation/routes/rerun-run.ts +39 -36
  253. package/src/temporal/activities/index.ts +32 -12
  254. package/src/temporal/activities/orchestration-activities.test.ts +10 -8
  255. package/src/temporal/activities/orchestration-activities.ts +74 -50
  256. package/src/temporal/workflows/job-execution-orchestration.test.ts +47 -2
  257. package/test/env.ts +1 -3
  258. package/test/factories/project.ts +10 -5
  259. package/test/factories/workflow-model.test.ts +5 -1
  260. package/test/factories/workflow-model.ts +1 -1
  261. package/test/factories/workflow-run.ts +1 -1
  262. package/test/fixtures/agent-inter-module.ts +27 -0
  263. package/test/fixtures/annotations-inter-module.ts +5 -0
  264. package/test/fixtures/auth-inter-module.ts +22 -0
  265. package/test/fixtures/lease-token.ts +2 -1
  266. package/test/fixtures/projects-inter-module.ts +8 -0
  267. package/test/fixtures/runners-inter-module.ts +52 -0
  268. package/test/fixtures/secrets-inter-module.ts +61 -0
  269. package/test/globalSetup.ts +11 -11
  270. package/tsconfig.build.tsbuildinfo +1 -1
  271. package/dist/core/source-control.d.ts +0 -5
  272. package/dist/core/source-control.d.ts.map +0 -1
  273. package/dist/core/source-control.js +0 -19
  274. package/dist/core/source-control.js.map +0 -1
  275. package/src/core/source-control.test.ts +0 -17
  276. package/src/core/source-control.ts +0 -22
  277. package/src/temporal/workflows/job-execution-orchestration-timeout.test.ts +0 -165
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/materialize-workflow-model.ts"],"sourcesContent":["import type {AgentDefaultsResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport type {WorkflowModel} from '@shipfox/api-definitions';\nimport {canonicalizeLabels, findInvalidLabels, MAX_RUNNER_LABELS} from '@shipfox/runner-labels';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport {InvalidJobRunnerLabelsError} from '#core/errors.js';\nimport {completeStepField} from './fields.js';\nimport {\n type MaterializedWorkflowStep,\n materializeJobExecutionSteps,\n} from './materialize-job-execution-steps.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\nexport interface MaterializedWorkflowJob {\n readonly key: string;\n readonly mode: WorkflowModelJob['mode'];\n readonly success?: string;\n readonly executionTimeoutMs?: number;\n readonly checkout: WorkflowModelJob['checkout'];\n readonly listening?: WorkflowModelJob['listening'];\n readonly name?: WorkflowModelJob['name'];\n readonly outputs?: WorkflowModelJob['outputs'];\n readonly dependencies: readonly string[];\n readonly runner: readonly string[];\n readonly position: number;\n readonly steps: readonly MaterializedWorkflowStep[];\n}\n\nexport interface MaterializeWorkflowModelParams {\n readonly model: WorkflowModel;\n readonly context?: WorkflowEvaluationContext | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId?: string | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport function materializeWorkflowModel(\n params: MaterializeWorkflowModelParams,\n): readonly MaterializedWorkflowJob[] {\n const {\n model,\n context = {site: 'run-creation', values: {}},\n resolveAgentDefaults,\n definitionId = model.name,\n agentToolContext,\n agentToolSnapshot,\n } = params;\n const jobsById = new Map(model.jobs.map((job) => [job.id, job]));\n\n return model.jobs.map((job, position) => ({\n key: job.key,\n mode: job.mode,\n ...(job.success === undefined ? {} : {success: job.success}),\n ...(job.executionTimeoutMs === undefined ? {} : {executionTimeoutMs: job.executionTimeoutMs}),\n checkout: job.checkout,\n ...(job.listening === undefined ? {} : {listening: job.listening}),\n ...(job.name === undefined ? {} : {name: job.name}),\n ...(job.outputs === undefined ? {} : {outputs: job.outputs}),\n dependencies: dependencySourceNames(job, jobsById),\n runner: job.runner,\n position,\n steps:\n job.mode === 'listening'\n ? []\n : materializeJobExecutionSteps({\n model,\n job,\n context,\n resolveAgentDefaults,\n definitionId,\n agentToolContext,\n agentToolSnapshot,\n }),\n }));\n}\n\nexport function materializeJobRunner(params: {\n readonly job: WorkflowModelJob;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n}): readonly string[] {\n const resolvedLabels = (params.job.runnerTemplates ?? []).map((template) =>\n completeStepField({\n field: 'job.runner',\n errorField: 'job.runner',\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n }),\n );\n const labels = canonicalizeLabels([...params.job.runner, ...resolvedLabels]);\n const invalidLabels = findInvalidLabels(labels);\n if (labels.length === 0 || labels.length > MAX_RUNNER_LABELS || invalidLabels.length > 0) {\n throw new InvalidJobRunnerLabelsError(labels);\n }\n return labels;\n}\n\nexport function materializeJobOutputs(params: {\n readonly job: WorkflowModelJob;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n}): Record<string, string> | null {\n const outputs = params.job.outputs;\n if (outputs === undefined) return null;\n\n return Object.fromEntries(\n Object.entries(outputs).map(([key, template]) => [\n key,\n completeStepField({\n field: 'job.outputs',\n errorField: 'job.outputs',\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n }),\n ]),\n );\n}\n\nexport function modelHasAgentStep(model: WorkflowModel): boolean {\n return model.jobs.some((job) => job.steps.some((step) => step.kind === 'agent'));\n}\n\nfunction dependencySourceNames(\n job: WorkflowModelJob,\n jobsById: ReadonlyMap<string, WorkflowModelJob>,\n): readonly string[] {\n return job.dependencies.map((dependencyId) => {\n const dependency = jobsById.get(dependencyId);\n if (!dependency) {\n throw new Error(`Unresolved workflow model dependency \"${dependencyId}\" for job \"${job.id}\"`);\n }\n return dependency.key;\n });\n}\n"],"names":["canonicalizeLabels","findInvalidLabels","MAX_RUNNER_LABELS","InvalidJobRunnerLabelsError","completeStepField","materializeJobExecutionSteps","materializeWorkflowModel","params","model","context","site","values","resolveAgentDefaults","definitionId","name","agentToolContext","agentToolSnapshot","jobsById","Map","jobs","map","job","id","position","key","mode","success","undefined","executionTimeoutMs","checkout","listening","outputs","dependencies","dependencySourceNames","runner","steps","materializeJobRunner","resolvedLabels","runnerTemplates","template","field","errorField","segments","labels","invalidLabels","length","materializeJobOutputs","Object","fromEntries","entries","modelHasAgentStep","some","step","kind","dependencyId","dependency","get","Error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/step-config/materialize-workflow-model.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport {canonicalizeLabels, findInvalidLabels, MAX_RUNNER_LABELS} from '@shipfox/runner-labels';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport {InvalidJobRunnerLabelsError} from '#core/errors.js';\nimport {completeStepField} from './fields.js';\nimport {\n type MaterializedWorkflowStep,\n materializeJobExecutionSteps,\n} from './materialize-job-execution-steps.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\nexport interface MaterializedWorkflowJob {\n readonly key: string;\n readonly mode: WorkflowModelJob['mode'];\n readonly success?: string;\n readonly executionTimeoutMs?: number;\n readonly checkout: WorkflowModelJob['checkout'];\n readonly listening?: WorkflowModelJob['listening'];\n readonly name?: WorkflowModelJob['name'];\n readonly outputs?: WorkflowModelJob['outputs'];\n readonly dependencies: readonly string[];\n readonly runner: readonly string[];\n readonly position: number;\n readonly steps: readonly MaterializedWorkflowStep[];\n}\n\nexport interface MaterializeWorkflowModelParams {\n readonly model: WorkflowModel;\n readonly context?: WorkflowEvaluationContext | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId?: string | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport async function materializeWorkflowModel(\n params: MaterializeWorkflowModelParams,\n): Promise<readonly MaterializedWorkflowJob[]> {\n const {\n model,\n context = {site: 'run-creation', values: {}},\n resolveAgentDefaults,\n definitionId = model.name,\n agentToolContext,\n agentToolSnapshot,\n } = params;\n const jobsById = new Map(model.jobs.map((job) => [job.id, job]));\n\n return await Promise.all(\n model.jobs.map(async (job, position) => ({\n key: job.key,\n mode: job.mode,\n ...(job.success === undefined ? {} : {success: job.success}),\n ...(job.executionTimeoutMs === undefined ? {} : {executionTimeoutMs: job.executionTimeoutMs}),\n checkout: job.checkout,\n ...(job.listening === undefined ? {} : {listening: job.listening}),\n ...(job.name === undefined ? {} : {name: job.name}),\n ...(job.outputs === undefined ? {} : {outputs: job.outputs}),\n dependencies: dependencySourceNames(job, jobsById),\n runner: job.runner,\n position,\n steps:\n job.mode === 'listening'\n ? []\n : await materializeJobExecutionSteps({\n model,\n job,\n context,\n resolveAgentDefaults,\n definitionId,\n agentToolContext,\n agentToolSnapshot,\n }),\n })),\n );\n}\n\nexport function materializeJobRunner(params: {\n readonly job: WorkflowModelJob;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n}): readonly string[] {\n const resolvedLabels = (params.job.runnerTemplates ?? []).map((template) =>\n completeStepField({\n field: 'job.runner',\n errorField: 'job.runner',\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n }),\n );\n const labels = canonicalizeLabels([...params.job.runner, ...resolvedLabels]);\n const invalidLabels = findInvalidLabels(labels);\n if (labels.length === 0 || labels.length > MAX_RUNNER_LABELS || invalidLabels.length > 0) {\n throw new InvalidJobRunnerLabelsError(labels);\n }\n return labels;\n}\n\nexport function materializeJobOutputs(params: {\n readonly job: WorkflowModelJob;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n}): Record<string, string> | null {\n const outputs = params.job.outputs;\n if (outputs === undefined) return null;\n\n return Object.fromEntries(\n Object.entries(outputs).map(([key, template]) => [\n key,\n completeStepField({\n field: 'job.outputs',\n errorField: 'job.outputs',\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n }),\n ]),\n );\n}\n\nexport function modelHasAgentStep(model: WorkflowModel): boolean {\n return model.jobs.some((job) => job.steps.some((step) => step.kind === 'agent'));\n}\n\nfunction dependencySourceNames(\n job: WorkflowModelJob,\n jobsById: ReadonlyMap<string, WorkflowModelJob>,\n): readonly string[] {\n return job.dependencies.map((dependencyId) => {\n const dependency = jobsById.get(dependencyId);\n if (!dependency) {\n throw new Error(`Unresolved workflow model dependency \"${dependencyId}\" for job \"${job.id}\"`);\n }\n return dependency.key;\n });\n}\n"],"names":["canonicalizeLabels","findInvalidLabels","MAX_RUNNER_LABELS","InvalidJobRunnerLabelsError","completeStepField","materializeJobExecutionSteps","materializeWorkflowModel","params","model","context","site","values","resolveAgentDefaults","definitionId","name","agentToolContext","agentToolSnapshot","jobsById","Map","jobs","map","job","id","Promise","all","position","key","mode","success","undefined","executionTimeoutMs","checkout","listening","outputs","dependencies","dependencySourceNames","runner","steps","materializeJobRunner","resolvedLabels","runnerTemplates","template","field","errorField","segments","labels","invalidLabels","length","materializeJobOutputs","Object","fromEntries","entries","modelHasAgentStep","some","step","kind","dependencyId","dependency","get","Error"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { WorkflowModel } from '@shipfox/api-definitions';
1
+ import type { WorkflowModel } from '@shipfox/api-definitions-dto';
2
2
  import { type WorkflowExpressionEvaluationContext } from '@shipfox/expression';
3
3
  import type { PersistedEvaluationTraceEntry } from '#core/entities/step.js';
4
4
  interface WorkflowModelJobName {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-job-execution-name.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/resolve-job-execution-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAIL,KAAK,mCAAmC,EAEzC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAG1E,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;CACnE;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;CACvD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAyBA"}
1
+ {"version":3,"file":"resolve-job-execution-name.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/resolve-job-execution-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAIL,KAAK,mCAAmC,EAEzC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAG1E,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;CACnE;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;CACvD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAyBA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/resolve-job-execution-name.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions';\nimport {\n capTraceEntries,\n getWorkflowInterpolationFieldFailurePolicy,\n resolveFieldAtSite,\n type WorkflowExpressionEvaluationContext,\n WorkflowTemplateResolutionError,\n} from '@shipfox/expression';\nimport type {PersistedEvaluationTraceEntry} from '#core/entities/step.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\n\ninterface WorkflowModelJobName {\n readonly name?: WorkflowModel['jobs'][number]['name'] | undefined;\n}\n\nexport interface ResolveJobExecutionNameParams {\n readonly definitionId: string;\n readonly job: WorkflowModelJobName;\n readonly fallbackName: string;\n readonly context: WorkflowExpressionEvaluationContext;\n}\n\nexport function resolveJobExecutionName(params: ResolveJobExecutionNameParams): {\n readonly value: string;\n readonly trace: readonly PersistedEvaluationTraceEntry[];\n} {\n if (params.job.name === undefined) return {value: params.fallbackName, trace: []};\n\n try {\n const resolved = resolveFieldAtSite({\n field: {segments: params.job.name},\n site: 'execution-creation',\n context: params.context,\n failurePolicy: getWorkflowInterpolationFieldFailurePolicy('job.name'),\n });\n return {\n value:\n resolved.kind === 'frozen' && resolved.value !== '' ? resolved.value : params.fallbackName,\n trace: capTraceEntries(resolved.trace.map((entry) => ({...entry, field: 'job.name'}))),\n };\n } catch (error) {\n if (error instanceof WorkflowTemplateResolutionError) {\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: 'job.name',\n source: error.source,\n cause: error,\n });\n }\n throw error;\n }\n}\n"],"names":["capTraceEntries","getWorkflowInterpolationFieldFailurePolicy","resolveFieldAtSite","WorkflowTemplateResolutionError","InterpolationUnresolvableError","resolveJobExecutionName","params","job","name","undefined","value","fallbackName","trace","resolved","field","segments","site","context","failurePolicy","kind","map","entry","error","definitionId","source","cause"],"mappings":"AACA,SACEA,eAAe,EACfC,0CAA0C,EAC1CC,kBAAkB,EAElBC,+BAA+B,QAC1B,sBAAsB;AAE7B,SAAQC,8BAA8B,QAAO,kBAAkB;AAa/D,OAAO,SAASC,wBAAwBC,MAAqC;IAI3E,IAAIA,OAAOC,GAAG,CAACC,IAAI,KAAKC,WAAW,OAAO;QAACC,OAAOJ,OAAOK,YAAY;QAAEC,OAAO,EAAE;IAAA;IAEhF,IAAI;QACF,MAAMC,WAAWX,mBAAmB;YAClCY,OAAO;gBAACC,UAAUT,OAAOC,GAAG,CAACC,IAAI;YAAA;YACjCQ,MAAM;YACNC,SAASX,OAAOW,OAAO;YACvBC,eAAejB,2CAA2C;QAC5D;QACA,OAAO;YACLS,OACEG,SAASM,IAAI,KAAK,YAAYN,SAASH,KAAK,KAAK,KAAKG,SAASH,KAAK,GAAGJ,OAAOK,YAAY;YAC5FC,OAAOZ,gBAAgBa,SAASD,KAAK,CAACQ,GAAG,CAAC,CAACC,QAAW,CAAA;oBAAC,GAAGA,KAAK;oBAAEP,OAAO;gBAAU,CAAA;QACpF;IACF,EAAE,OAAOQ,OAAO;QACd,IAAIA,iBAAiBnB,iCAAiC;YACpD,MAAM,IAAIC,+BAA+BE,OAAOiB,YAAY,EAAE;gBAC5DT,OAAO;gBACPU,QAAQF,MAAME,MAAM;gBACpBC,OAAOH;YACT;QACF;QACA,MAAMA;IACR;AACF"}
1
+ {"version":3,"sources":["../../../src/core/step-config/resolve-job-execution-name.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport {\n capTraceEntries,\n getWorkflowInterpolationFieldFailurePolicy,\n resolveFieldAtSite,\n type WorkflowExpressionEvaluationContext,\n WorkflowTemplateResolutionError,\n} from '@shipfox/expression';\nimport type {PersistedEvaluationTraceEntry} from '#core/entities/step.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\n\ninterface WorkflowModelJobName {\n readonly name?: WorkflowModel['jobs'][number]['name'] | undefined;\n}\n\nexport interface ResolveJobExecutionNameParams {\n readonly definitionId: string;\n readonly job: WorkflowModelJobName;\n readonly fallbackName: string;\n readonly context: WorkflowExpressionEvaluationContext;\n}\n\nexport function resolveJobExecutionName(params: ResolveJobExecutionNameParams): {\n readonly value: string;\n readonly trace: readonly PersistedEvaluationTraceEntry[];\n} {\n if (params.job.name === undefined) return {value: params.fallbackName, trace: []};\n\n try {\n const resolved = resolveFieldAtSite({\n field: {segments: params.job.name},\n site: 'execution-creation',\n context: params.context,\n failurePolicy: getWorkflowInterpolationFieldFailurePolicy('job.name'),\n });\n return {\n value:\n resolved.kind === 'frozen' && resolved.value !== '' ? resolved.value : params.fallbackName,\n trace: capTraceEntries(resolved.trace.map((entry) => ({...entry, field: 'job.name'}))),\n };\n } catch (error) {\n if (error instanceof WorkflowTemplateResolutionError) {\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: 'job.name',\n source: error.source,\n cause: error,\n });\n }\n throw error;\n }\n}\n"],"names":["capTraceEntries","getWorkflowInterpolationFieldFailurePolicy","resolveFieldAtSite","WorkflowTemplateResolutionError","InterpolationUnresolvableError","resolveJobExecutionName","params","job","name","undefined","value","fallbackName","trace","resolved","field","segments","site","context","failurePolicy","kind","map","entry","error","definitionId","source","cause"],"mappings":"AACA,SACEA,eAAe,EACfC,0CAA0C,EAC1CC,kBAAkB,EAElBC,+BAA+B,QAC1B,sBAAsB;AAE7B,SAAQC,8BAA8B,QAAO,kBAAkB;AAa/D,OAAO,SAASC,wBAAwBC,MAAqC;IAI3E,IAAIA,OAAOC,GAAG,CAACC,IAAI,KAAKC,WAAW,OAAO;QAACC,OAAOJ,OAAOK,YAAY;QAAEC,OAAO,EAAE;IAAA;IAEhF,IAAI;QACF,MAAMC,WAAWX,mBAAmB;YAClCY,OAAO;gBAACC,UAAUT,OAAOC,GAAG,CAACC,IAAI;YAAA;YACjCQ,MAAM;YACNC,SAASX,OAAOW,OAAO;YACvBC,eAAejB,2CAA2C;QAC5D;QACA,OAAO;YACLS,OACEG,SAASM,IAAI,KAAK,YAAYN,SAASH,KAAK,KAAK,KAAKG,SAASH,KAAK,GAAGJ,OAAOK,YAAY;YAC5FC,OAAOZ,gBAAgBa,SAASD,KAAK,CAACQ,GAAG,CAAC,CAACC,QAAW,CAAA;oBAAC,GAAGA,KAAK;oBAAEP,OAAO;gBAAU,CAAA;QACpF;IACF,EAAE,OAAOQ,OAAO;QACd,IAAIA,iBAAiBnB,iCAAiC;YACpD,MAAM,IAAIC,+BAA+BE,OAAOiB,YAAY,EAAE;gBAC5DT,OAAO;gBACPU,QAAQF,MAAME,MAAM;gBACpBC,OAAOH;YACT;QACF;QACA,MAAMA;IACR;AACF"}
@@ -1,6 +1,6 @@
1
- import type { AgentDefaultsResolver } from '@shipfox/api-agent/core/resolve-agent-config';
2
- import type { WorkflowEnvTemplates, WorkflowModel } from '@shipfox/api-definitions';
1
+ import type { WorkflowEnvTemplates, WorkflowModel } from '@shipfox/api-definitions-dto';
3
2
  import { type AvailabilitySite, type EvaluationTraceLimitEntry, type WorkflowExpressionEvaluationContext } from '@shipfox/expression';
3
+ import type { AgentDefaultsResolver } from '#core/agent-defaults.js';
4
4
  import type { AgentToolMaterializationContext, AgentToolMaterializationSnapshot } from '#core/agent-tools.js';
5
5
  import type { StepConfigDispatchPlan } from '#core/entities/step.js';
6
6
  import { type StepConfigField, type WorkflowStepEvaluationTraceEntry, type WorkflowStepTemplateDiagnostic } from './fields.js';
@@ -24,10 +24,10 @@ export interface ResolveStepConfigParams {
24
24
  readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;
25
25
  readonly context: WorkflowExpressionEvaluationContext;
26
26
  readonly site: AvailabilitySite;
27
- readonly resolveAgentDefaults: AgentDefaultsResolver;
27
+ readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;
28
28
  readonly definitionId: string;
29
29
  readonly agentToolContext?: AgentToolMaterializationContext | undefined;
30
30
  readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;
31
31
  }
32
- export declare function resolveStepConfig(params: ResolveStepConfigParams): ResolvedStepConfig;
32
+ export declare function resolveStepConfig(params: ResolveStepConfigParams): Promise<ResolvedStepConfig>;
33
33
  //# sourceMappingURL=resolve-step-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-step-config.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/resolve-step-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAC,oBAAoB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAClF,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACzC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACpC,MAAM,aAAa,CAAC;AAIrB,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAI3D,YAAY,EAAC,eAAe,EAAE,8BAA8B,EAAC,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,gCAAgC,GAAG,yBAAyB,CAAC,EAAE,CAAC;CAC3F;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAYD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,kBAAkB,CAgBrF"}
1
+ {"version":3,"file":"resolve-step-config.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/resolve-step-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAE,aAAa,EAAC,MAAM,8BAA8B,CAAC;AACtF,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACzC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACpC,MAAM,aAAa,CAAC;AAIrB,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAI3D,YAAY,EAAC,eAAe,EAAE,8BAA8B,EAAC,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,gCAAgC,GAAG,yBAAyB,CAAC,EAAE,CAAC;CAC3F;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAYD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAgB7B"}
@@ -2,18 +2,18 @@ import { capTraceEntries } from '@shipfox/expression';
2
2
  import { resolveAgentStepConfig } from './agent.js';
3
3
  import { freezeStepField } from './fields.js';
4
4
  import { resolveRunStepConfig } from './run.js';
5
- export function resolveStepConfig(params) {
5
+ export async function resolveStepConfig(params) {
6
6
  const context = evaluationContext(params);
7
- const effective = buildStepConfig({
7
+ const effective = await buildStepConfig({
8
8
  ...params,
9
9
  context,
10
10
  mode: 'effective'
11
11
  });
12
- const authoredConfig = effective.hasTemplates ? buildStepConfig({
12
+ const authoredConfig = effective.hasTemplates ? (await buildStepConfig({
13
13
  ...params,
14
14
  context,
15
15
  mode: 'authored'
16
- }).config : null;
16
+ })).config : null;
17
17
  const name = resolveStepName(params.step, context, params.definitionId);
18
18
  return {
19
19
  config: effective.config,
@@ -32,7 +32,7 @@ export function resolveStepConfig(params) {
32
32
  ])
33
33
  };
34
34
  }
35
- function buildStepConfig(params) {
35
+ async function buildStepConfig(params) {
36
36
  const gate = gateConfigForStep(params.step);
37
37
  const outputs = outputsConfigForStep(params.step);
38
38
  const runStep = runStepOrNull(params.step);
@@ -56,7 +56,7 @@ function buildStepConfig(params) {
56
56
  }
57
57
  const agentStep = agentStepOrNull(params.step);
58
58
  if (agentStep === null) throw new Error(`Unsupported workflow step kind: ${params.step.kind}`);
59
- const agent = resolveAgentStepConfig({
59
+ const agent = await resolveAgentStepConfig({
60
60
  ...params,
61
61
  step: agentStep
62
62
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/resolve-step-config.ts"],"sourcesContent":["import type {AgentDefaultsResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport type {WorkflowEnvTemplates, WorkflowModel} from '@shipfox/api-definitions';\nimport {\n type AvailabilitySite,\n capTraceEntries,\n type EvaluationTraceLimitEntry,\n type WorkflowExpressionEvaluationContext,\n} from '@shipfox/expression';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport type {StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {resolveAgentStepConfig} from './agent.js';\nimport {\n freezeStepField,\n type StepConfigField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport {resolveRunStepConfig, type StepConfigMode} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\n\nexport type {StepConfigField, WorkflowStepTemplateDiagnostic};\n\nexport interface ResolvedStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly authoredConfig: Record<string, unknown> | null;\n readonly name?: string;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly (WorkflowStepEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface ResolveStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n readonly resolveAgentDefaults: AgentDefaultsResolver;\n readonly definitionId: string;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\ntype BuildStepConfigParams = ResolveStepConfigParams & {readonly mode: StepConfigMode};\n\ninterface BuiltStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport function resolveStepConfig(params: ResolveStepConfigParams): ResolvedStepConfig {\n const context = evaluationContext(params);\n const effective = buildStepConfig({...params, context, mode: 'effective'});\n const authoredConfig = effective.hasTemplates\n ? buildStepConfig({...params, context, mode: 'authored'}).config\n : null;\n const name = resolveStepName(params.step, context, params.definitionId);\n\n return {\n config: effective.config,\n configPlan: effective.configPlan,\n authoredConfig,\n ...(name.value === undefined || name.value === '' ? {} : {name: name.value}),\n diagnostics: [...effective.diagnostics, ...name.diagnostics],\n trace: capTraceEntries([...effective.trace, ...name.trace]),\n };\n}\n\nfunction buildStepConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): BuiltStepConfig {\n const gate = gateConfigForStep(params.step);\n const outputs = outputsConfigForStep(params.step);\n const runStep = runStepOrNull(params.step);\n const isRunStep = runStep !== null;\n\n if (isRunStep) {\n const run = resolveRunStepConfig({...params, step: runStep});\n return {\n config: {...run.config, ...gate, ...outputs},\n configPlan: run.configPlan,\n diagnostics: run.diagnostics,\n trace: run.trace,\n hasTemplates: run.hasTemplates,\n };\n }\n\n const agentStep = agentStepOrNull(params.step);\n if (agentStep === null) throw new Error(`Unsupported workflow step kind: ${params.step.kind}`);\n\n const agent = resolveAgentStepConfig({...params, step: agentStep});\n return {\n config: {...agent.config, ...gate, ...outputs},\n configPlan: agent.configPlan,\n diagnostics: agent.diagnostics,\n trace: agent.trace,\n hasTemplates: agent.hasTemplates,\n };\n}\n\nfunction evaluationContext(params: {\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n}): WorkflowEvaluationContext {\n return {site: params.site, values: params.context};\n}\n\nfunction runStepOrNull(step: WorkflowModelStep): WorkflowModelRunStep | null {\n const isRunStep = step.kind === 'run';\n return isRunStep ? step : null;\n}\n\nfunction agentStepOrNull(step: WorkflowModelStep): WorkflowModelAgentStep | null {\n const isAgentStep = step.kind === 'agent';\n return isAgentStep ? step : null;\n}\n\nfunction gateConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasGate = step.gate !== undefined;\n return hasGate ? {gate: stepGateConfig(step.gate)} : {};\n}\n\nfunction outputsConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasOutputs = step.outputs !== undefined;\n return hasOutputs ? {outputs: step.outputs} : {};\n}\n\nfunction resolveStepName(\n step: WorkflowModelStep,\n context: WorkflowEvaluationContext,\n definitionId: string,\n): {\n readonly value: string | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n} {\n const hasName = step.name !== undefined;\n if (!hasName) return {value: undefined, diagnostics: [], trace: []};\n\n const hasNameTemplate = step.templates?.name !== undefined;\n if (!hasNameTemplate) return {value: step.name, diagnostics: [], trace: []};\n\n const resolved = freezeStepField({\n field: 'step.name',\n template: {segments: step.templates.name},\n context,\n definitionId,\n errorField: 'step.name',\n });\n return {\n value: resolved.value,\n diagnostics: resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'step.name'})),\n trace: resolved.trace.map((entry) => ({...entry, field: 'step.name'})),\n };\n}\n\nfunction stepGateConfig(gate: NonNullable<WorkflowModelStep['gate']>): Record<string, unknown> {\n const hasSuccess = gate.success !== undefined;\n const hasOnFailure = gate.onFailure !== undefined;\n const hasOnFailureFeedback = gate.onFailure?.feedback !== undefined;\n const hasOnFailureFeedbackTemplate = gate.onFailure?.feedbackTemplate !== undefined;\n\n return {\n ...(hasSuccess\n ? {\n success: {\n language: gate.success.language,\n check: gate.success.check,\n source: gate.success.source,\n },\n }\n : {}),\n ...(hasOnFailure\n ? {\n on_failure: {\n restart_from: gate.onFailure.restartFrom,\n ...(hasOnFailureFeedback ? {feedback: gate.onFailure.feedback} : {}),\n ...(hasOnFailureFeedbackTemplate\n ? {feedback_template: {segments: gate.onFailure.feedbackTemplate}}\n : {}),\n },\n }\n : {}),\n };\n}\n"],"names":["capTraceEntries","resolveAgentStepConfig","freezeStepField","resolveRunStepConfig","resolveStepConfig","params","context","evaluationContext","effective","buildStepConfig","mode","authoredConfig","hasTemplates","config","name","resolveStepName","step","definitionId","configPlan","value","undefined","diagnostics","trace","gate","gateConfigForStep","outputs","outputsConfigForStep","runStep","runStepOrNull","isRunStep","run","agentStep","agentStepOrNull","Error","kind","agent","site","values","isAgentStep","hasGate","stepGateConfig","hasOutputs","hasName","hasNameTemplate","templates","resolved","field","template","segments","errorField","map","diagnostic","entry","hasSuccess","success","hasOnFailure","onFailure","hasOnFailureFeedback","feedback","hasOnFailureFeedbackTemplate","feedbackTemplate","language","check","source","on_failure","restart_from","restartFrom","feedback_template"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/step-config/resolve-step-config.ts"],"sourcesContent":["import type {WorkflowEnvTemplates, WorkflowModel} from '@shipfox/api-definitions-dto';\nimport {\n type AvailabilitySite,\n capTraceEntries,\n type EvaluationTraceLimitEntry,\n type WorkflowExpressionEvaluationContext,\n} from '@shipfox/expression';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport type {StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {resolveAgentStepConfig} from './agent.js';\nimport {\n freezeStepField,\n type StepConfigField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport {resolveRunStepConfig, type StepConfigMode} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\n\nexport type {StepConfigField, WorkflowStepTemplateDiagnostic};\n\nexport interface ResolvedStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly authoredConfig: Record<string, unknown> | null;\n readonly name?: string;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly (WorkflowStepEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface ResolveStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\ntype BuildStepConfigParams = ResolveStepConfigParams & {readonly mode: StepConfigMode};\n\ninterface BuiltStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveStepConfig(\n params: ResolveStepConfigParams,\n): Promise<ResolvedStepConfig> {\n const context = evaluationContext(params);\n const effective = await buildStepConfig({...params, context, mode: 'effective'});\n const authoredConfig = effective.hasTemplates\n ? (await buildStepConfig({...params, context, mode: 'authored'})).config\n : null;\n const name = resolveStepName(params.step, context, params.definitionId);\n\n return {\n config: effective.config,\n configPlan: effective.configPlan,\n authoredConfig,\n ...(name.value === undefined || name.value === '' ? {} : {name: name.value}),\n diagnostics: [...effective.diagnostics, ...name.diagnostics],\n trace: capTraceEntries([...effective.trace, ...name.trace]),\n };\n}\n\nasync function buildStepConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): Promise<BuiltStepConfig> {\n const gate = gateConfigForStep(params.step);\n const outputs = outputsConfigForStep(params.step);\n const runStep = runStepOrNull(params.step);\n const isRunStep = runStep !== null;\n\n if (isRunStep) {\n const run = resolveRunStepConfig({...params, step: runStep});\n return {\n config: {...run.config, ...gate, ...outputs},\n configPlan: run.configPlan,\n diagnostics: run.diagnostics,\n trace: run.trace,\n hasTemplates: run.hasTemplates,\n };\n }\n\n const agentStep = agentStepOrNull(params.step);\n if (agentStep === null) throw new Error(`Unsupported workflow step kind: ${params.step.kind}`);\n\n const agent = await resolveAgentStepConfig({...params, step: agentStep});\n return {\n config: {...agent.config, ...gate, ...outputs},\n configPlan: agent.configPlan,\n diagnostics: agent.diagnostics,\n trace: agent.trace,\n hasTemplates: agent.hasTemplates,\n };\n}\n\nfunction evaluationContext(params: {\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n}): WorkflowEvaluationContext {\n return {site: params.site, values: params.context};\n}\n\nfunction runStepOrNull(step: WorkflowModelStep): WorkflowModelRunStep | null {\n const isRunStep = step.kind === 'run';\n return isRunStep ? step : null;\n}\n\nfunction agentStepOrNull(step: WorkflowModelStep): WorkflowModelAgentStep | null {\n const isAgentStep = step.kind === 'agent';\n return isAgentStep ? step : null;\n}\n\nfunction gateConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasGate = step.gate !== undefined;\n return hasGate ? {gate: stepGateConfig(step.gate)} : {};\n}\n\nfunction outputsConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasOutputs = step.outputs !== undefined;\n return hasOutputs ? {outputs: step.outputs} : {};\n}\n\nfunction resolveStepName(\n step: WorkflowModelStep,\n context: WorkflowEvaluationContext,\n definitionId: string,\n): {\n readonly value: string | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n} {\n const hasName = step.name !== undefined;\n if (!hasName) return {value: undefined, diagnostics: [], trace: []};\n\n const hasNameTemplate = step.templates?.name !== undefined;\n if (!hasNameTemplate) return {value: step.name, diagnostics: [], trace: []};\n\n const resolved = freezeStepField({\n field: 'step.name',\n template: {segments: step.templates.name},\n context,\n definitionId,\n errorField: 'step.name',\n });\n return {\n value: resolved.value,\n diagnostics: resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'step.name'})),\n trace: resolved.trace.map((entry) => ({...entry, field: 'step.name'})),\n };\n}\n\nfunction stepGateConfig(gate: NonNullable<WorkflowModelStep['gate']>): Record<string, unknown> {\n const hasSuccess = gate.success !== undefined;\n const hasOnFailure = gate.onFailure !== undefined;\n const hasOnFailureFeedback = gate.onFailure?.feedback !== undefined;\n const hasOnFailureFeedbackTemplate = gate.onFailure?.feedbackTemplate !== undefined;\n\n return {\n ...(hasSuccess\n ? {\n success: {\n language: gate.success.language,\n check: gate.success.check,\n source: gate.success.source,\n },\n }\n : {}),\n ...(hasOnFailure\n ? {\n on_failure: {\n restart_from: gate.onFailure.restartFrom,\n ...(hasOnFailureFeedback ? {feedback: gate.onFailure.feedback} : {}),\n ...(hasOnFailureFeedbackTemplate\n ? {feedback_template: {segments: gate.onFailure.feedbackTemplate}}\n : {}),\n },\n }\n : {}),\n };\n}\n"],"names":["capTraceEntries","resolveAgentStepConfig","freezeStepField","resolveRunStepConfig","resolveStepConfig","params","context","evaluationContext","effective","buildStepConfig","mode","authoredConfig","hasTemplates","config","name","resolveStepName","step","definitionId","configPlan","value","undefined","diagnostics","trace","gate","gateConfigForStep","outputs","outputsConfigForStep","runStep","runStepOrNull","isRunStep","run","agentStep","agentStepOrNull","Error","kind","agent","site","values","isAgentStep","hasGate","stepGateConfig","hasOutputs","hasName","hasNameTemplate","templates","resolved","field","template","segments","errorField","map","diagnostic","entry","hasSuccess","success","hasOnFailure","onFailure","hasOnFailureFeedback","feedback","hasOnFailureFeedbackTemplate","feedbackTemplate","language","check","source","on_failure","restart_from","restartFrom","feedback_template"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { WorkflowModel } from '@shipfox/api-definitions';
1
+ import type { WorkflowModel } from '@shipfox/api-definitions-dto';
2
2
  import { type ResolvedField } from '@shipfox/expression';
3
3
  import type { PersistedEvaluationTraceEntry, StepConfigDispatchPlan } from '#core/entities/step.js';
4
4
  import { type WorkflowStepEvaluationTraceEntry, type WorkflowStepTemplateDiagnostic } from './fields.js';
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAO5D,OAAO,EAKL,KAAK,aAAa,EAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,6BAA6B,EAAE,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAElG,OAAO,EAIL,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACpC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,KAAK,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAC,IAAI,EAAE,KAAK,CAAA;CAAC,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAOtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,KAAK,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,aAAa,CAyBtF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,6BAA6B,EAAE,CAAC;CACjD,GAAG,IAAI,CAoCP"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAOhE,OAAO,EAKL,KAAK,aAAa,EAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,6BAA6B,EAAE,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAElG,OAAO,EAIL,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACpC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,KAAK,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAC,IAAI,EAAE,KAAK,CAAA;CAAC,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAOtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,KAAK,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,aAAa,CAyBtF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,6BAA6B,EAAE,CAAC;CACjD,GAAG,IAAI,CAoCP"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/run.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions';\nimport {\n type MaterializedSecretBindingDto,\n materializedSecretBindingSchema,\n type SecretBindingSegmentDto,\n secretStoreSchema,\n} from '@shipfox/api-secrets-dto';\nimport {\n analyzeContextKeyAccess,\n type EvaluationTraceEntry,\n evaluationTraceEntry,\n hoistPlannedRunCommand,\n type ResolvedField,\n type ResolvedFieldSegment,\n runnerFillTarget,\n UnsafeRunInterpolationError,\n} from '@shipfox/expression';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport {\n resolveStepField,\n type StepConfigField,\n stepConfigInterpolationError,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\n\nexport type StepConfigMode = 'effective' | 'authored';\n\ninterface WinningEnvValue {\n readonly value: string;\n readonly template?: ResolvedField['segments'];\n}\n\nexport interface ResolveRunStepConfigParams {\n readonly step: WorkflowModelRunStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n}\n\ntype WorkflowEnvTemplates = Readonly<Record<string, ResolvedField['segments']>>;\n\nexport interface RunStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport function resolveRunStepConfig(params: ResolveRunStepConfigParams): RunStepConfig {\n const env = winningEnv(params);\n const envResolution = resolveEnv(env, params.context, params.mode, params.definitionId);\n const commandResolution = resolveCommand({\n step: params.step,\n envKeys: [...Object.keys(envResolution.env), ...Object.keys(envResolution.configPlan)],\n context: params.context,\n mode: params.mode,\n definitionId: params.definitionId,\n });\n const mergedEnv = {...envResolution.env, ...commandResolution.env};\n const hasEnvConfig = Object.keys(mergedEnv).length > 0;\n const envConfig = hasEnvConfig ? {env: mergedEnv} : {};\n const planEnv = {...envResolution.configPlan, ...commandResolution.configPlan};\n const hasConfigPlan = Object.keys(planEnv).length > 0;\n const configPlan = hasConfigPlan ? ({env: planEnv} satisfies StepConfigDispatchPlan) : null;\n const hasTemplates = envResolution.hasTemplates || commandResolution.hasTemplate;\n\n return {\n config: {run: commandResolution.command, ...envConfig},\n configPlan,\n diagnostics: [...envResolution.diagnostics, ...commandResolution.diagnostics],\n trace: [...envResolution.trace, ...commandResolution.trace],\n hasTemplates,\n };\n}\n\nexport function completeRunDispatchConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): void {\n const env = {...readConfigEnv(params.config)};\n const secretBindings: MaterializedSecretBindingDto[] = [];\n\n if (params.plan.run !== undefined) {\n const resolved = completeRunCommand({\n field: params.plan.run,\n context: params.context,\n definitionId: params.definitionId,\n reservedNames: Object.keys(env),\n trace: params.trace,\n });\n params.config.run = resolved.command;\n Object.assign(env, resolved.env);\n secretBindings.push(...resolved.secretBindings);\n }\n\n if (params.plan.env !== undefined) {\n for (const [key, field] of Object.entries(params.plan.env)) {\n const completed = completeDispatchField({\n field: 'env.value',\n traceField: 'env',\n errorField: 'env',\n template: field,\n context: params.context,\n definitionId: params.definitionId,\n envKey: key,\n trace: params.trace,\n });\n if (completed.kind === 'binding') secretBindings.push(completed.binding);\n else env[key] = completed.value;\n }\n }\n\n if (Object.keys(env).length > 0) params.config.env = env;\n if (secretBindings.length > 0) params.config.secret_bindings = secretBindings;\n}\n\nfunction completeRunCommand(params: {\n readonly field: ResolvedField;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly reservedNames: Iterable<string>;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): {\n readonly command: string;\n readonly env: Readonly<Record<string, string>>;\n readonly secretBindings: readonly MaterializedSecretBindingDto[];\n} {\n const hoisted = hoistPlannedRunCommand({\n field: params.field,\n reservedNames: params.reservedNames,\n });\n const env: Record<string, string> = {};\n const secretBindings: MaterializedSecretBindingDto[] = [];\n\n for (const binding of hoisted.bindings) {\n const completed = completeDispatchField({\n field: 'run',\n traceField: 'run',\n errorField: 'run',\n template: {segments: [binding.segment]},\n context: params.context,\n definitionId: params.definitionId,\n envKey: binding.name,\n trace: params.trace,\n });\n if (completed.kind === 'binding') secretBindings.push(completed.binding);\n else env[binding.name] = completed.value;\n }\n\n return {command: hoisted.command, env, secretBindings};\n}\n\ntype CompletedDispatchField =\n | {readonly kind: 'value'; readonly value: string}\n | {readonly kind: 'binding'; readonly binding: MaterializedSecretBindingDto};\n\nfunction completeDispatchField(params: {\n readonly field: 'run' | 'env.value';\n readonly traceField: StepConfigField;\n readonly errorField: StepConfigField;\n readonly template: ResolvedField;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly envKey?: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): CompletedDispatchField {\n const resolved = resolveStepField(params);\n params.trace.push(...tagTrace(resolved.trace, params.traceField, params.envKey));\n if (resolved.kind === 'frozen') return {kind: 'value', value: resolved.value};\n if (params.envKey !== undefined && containsOnlyRunnerSecretSegments(resolved.field)) {\n params.trace.push(\n ...runnerSecretReferenceTrace(resolved.field, params.traceField, params.envKey),\n );\n return {\n kind: 'binding',\n binding: secretBindingFromField(params.envKey, resolved.field),\n };\n }\n\n const source = resolved.field.segments.find((segment) => segment.kind === 'deferred')?.expression\n .source;\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: params.errorField,\n source: source ?? params.field,\n ...(params.envKey === undefined ? {} : {envKey: params.envKey}),\n });\n}\n\nfunction containsOnlyRunnerSecretSegments(field: ResolvedField): boolean {\n return field.segments.every((segment) => {\n if (segment.kind === 'literal') return true;\n return (\n segment.fillTarget === runnerFillTarget &&\n segment.roots.length === 1 &&\n segment.roots[0] === 'secrets'\n );\n });\n}\n\nfunction secretBindingFromField(\n target: string,\n field: ResolvedField,\n): MaterializedSecretBindingDto {\n const binding = {\n target,\n segments: field.segments.map(secretBindingSegment),\n };\n return materializedSecretBindingSchema.parse(binding);\n}\n\nfunction secretBindingSegment(segment: ResolvedFieldSegment): SecretBindingSegmentDto {\n if (segment.kind === 'literal') return {kind: 'literal', value: segment.value};\n\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n const reference = keyAccess.references.find((candidate) => candidate.root === 'secrets');\n if (reference === undefined) {\n throw new Error(\n `Runner secret segment did not contain a secret reference: ${segment.expression.source}`,\n );\n }\n\n return {\n kind: 'secret',\n store: secretStoreSchema.parse(reference.store ?? 'local'),\n key: reference.key,\n };\n}\n\nfunction resolveCommand(params: {\n readonly step: WorkflowModelRunStep;\n readonly envKeys: readonly string[];\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n}): {\n readonly command: string;\n readonly env: Readonly<Record<string, string>>;\n readonly configPlan: Readonly<Record<string, ResolvedField>>;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplate: boolean;\n} {\n const template = params.step.templates?.command;\n const hasTemplate = template !== undefined;\n if (!hasTemplate) {\n return {\n command: params.step.command.value,\n env: {},\n configPlan: {},\n diagnostics: [],\n trace: [],\n hasTemplate: false,\n };\n }\n\n const usesAuthoredMode = params.mode === 'authored';\n if (usesAuthoredMode) {\n return {\n command: params.step.command.value,\n env: {},\n configPlan: {},\n diagnostics: [],\n trace: [],\n hasTemplate: true,\n };\n }\n\n const env: Record<string, string> = {};\n const configPlan: Record<string, ResolvedField> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const hoisted = hoistCommand(template, params.envKeys, params.definitionId);\n\n for (const binding of hoisted.bindings) {\n const resolved = resolveStepField({\n field: 'run',\n template: {segments: [binding.segment]},\n context: params.context,\n definitionId: params.definitionId,\n errorField: 'run',\n });\n const resolvedToDispatchPlan = resolved.kind === 'residual';\n if (resolvedToDispatchPlan) configPlan[binding.name] = resolved.field;\n else env[binding.name] = resolved.value;\n diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'run' as const})),\n );\n trace.push(...tagTrace(resolved.trace, 'run'));\n }\n\n return {\n command: hoisted.command,\n env,\n configPlan,\n diagnostics,\n trace,\n hasTemplate: true,\n };\n}\n\nfunction hoistCommand(\n template: ResolvedField['segments'],\n reservedNames: readonly string[],\n definitionId: string,\n): ReturnType<typeof hoistPlannedRunCommand> {\n try {\n return hoistPlannedRunCommand({\n field: {segments: template},\n reservedNames,\n });\n } catch (error) {\n if (error instanceof UnsafeRunInterpolationError) {\n throw stepConfigInterpolationError({definitionId, errorField: 'run'}, error);\n }\n throw error;\n }\n}\n\nfunction resolveEnv(\n env: Readonly<Record<string, WinningEnvValue>>,\n context: WorkflowEvaluationContext,\n mode: StepConfigMode,\n definitionId: string,\n): {\n readonly env: Readonly<Record<string, string>>;\n readonly configPlan: Readonly<Record<string, ResolvedField>>;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n} {\n const resolvedEnv: Record<string, string> = {};\n const configPlan: Record<string, ResolvedField> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n let hasTemplates = false;\n\n for (const [key, entry] of Object.entries(env)) {\n const template = entry.template;\n const hasTemplate = template !== undefined;\n const usesAuthoredMode = mode === 'authored';\n const shouldUseAuthoredValue = !hasTemplate || usesAuthoredMode;\n\n if (shouldUseAuthoredValue) {\n resolvedEnv[key] = entry.value;\n hasTemplates ||= hasTemplate;\n continue;\n }\n\n hasTemplates = true;\n const resolved = resolveStepField({\n field: 'env.value',\n template: {segments: template},\n context,\n definitionId,\n errorField: 'env',\n envKey: key,\n });\n const resolvedToDispatchPlan = resolved.kind === 'residual';\n if (resolvedToDispatchPlan) configPlan[key] = resolved.field;\n else resolvedEnv[key] = resolved.value;\n diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({\n ...diagnostic,\n field: 'env' as const,\n envKey: key,\n })),\n );\n trace.push(...tagTrace(resolved.trace, 'env', key));\n }\n\n return {env: resolvedEnv, configPlan, diagnostics, trace, hasTemplates};\n}\n\nfunction tagTrace(\n trace: readonly EvaluationTraceEntry[],\n field: StepConfigField,\n envKey?: string,\n): WorkflowStepEvaluationTraceEntry[] {\n return trace.map((entry) => ({\n ...entry,\n field,\n ...(envKey === undefined ? {} : {envKey}),\n }));\n}\n\nfunction runnerSecretReferenceTrace(\n field: ResolvedField,\n stepField: StepConfigField,\n envKey: string,\n): WorkflowStepEvaluationTraceEntry[] {\n return field.segments.flatMap((segment) => {\n if (segment.kind === 'literal') return [];\n return [\n {\n ...evaluationTraceEntry({\n expression: segment.expression.source,\n roots: segment.roots,\n fillTarget: runnerFillTarget,\n evaluatedAt: 'step-dispatch',\n reference: true,\n }),\n field: stepField,\n envKey,\n },\n ];\n });\n}\n\nfunction winningEnv(params: {\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly step: WorkflowModelStep;\n}): Readonly<Record<string, WinningEnvValue>> {\n if (params.step.kind !== 'run') return {};\n\n return mergeEnvLayers(\n {env: params.workflowEnv, templates: params.workflowEnvTemplates},\n {env: params.jobEnv, templates: params.jobEnvTemplates},\n {env: params.step.env, templates: params.step.templates?.env},\n );\n}\n\nfunction mergeEnvLayers(\n ...layers: readonly {\n readonly env: Readonly<Record<string, string>> | undefined;\n readonly templates: WorkflowEnvTemplates | undefined;\n }[]\n): Readonly<Record<string, WinningEnvValue>> {\n const merged: Record<string, WinningEnvValue> = {};\n\n for (const layer of layers) {\n for (const [key, value] of Object.entries(layer.env ?? {})) {\n const template = layer.templates?.[key];\n const hasTemplate = template !== undefined;\n merged[key] = hasTemplate ? {value, template} : {value};\n }\n }\n\n return merged;\n}\n\nfunction readConfigEnv(config: Record<string, unknown>): Record<string, string> {\n const env = config.env;\n if (env === null || typeof env !== 'object' || Array.isArray(env)) return {};\n return Object.fromEntries(\n Object.entries(env).flatMap(([key, value]) =>\n typeof value === 'string' ? [[key, value]] : [],\n ),\n );\n}\n"],"names":["materializedSecretBindingSchema","secretStoreSchema","analyzeContextKeyAccess","evaluationTraceEntry","hoistPlannedRunCommand","runnerFillTarget","UnsafeRunInterpolationError","InterpolationUnresolvableError","resolveStepField","stepConfigInterpolationError","resolveRunStepConfig","params","env","winningEnv","envResolution","resolveEnv","context","mode","definitionId","commandResolution","resolveCommand","step","envKeys","Object","keys","configPlan","mergedEnv","hasEnvConfig","length","envConfig","planEnv","hasConfigPlan","hasTemplates","hasTemplate","config","run","command","diagnostics","trace","completeRunDispatchConfig","readConfigEnv","secretBindings","plan","undefined","resolved","completeRunCommand","field","reservedNames","assign","push","key","entries","completed","completeDispatchField","traceField","errorField","template","envKey","kind","binding","value","secret_bindings","hoisted","bindings","segments","segment","name","tagTrace","containsOnlyRunnerSecretSegments","runnerSecretReferenceTrace","secretBindingFromField","source","find","expression","every","fillTarget","roots","target","map","secretBindingSegment","parse","keyAccess","reference","references","candidate","root","Error","store","templates","usesAuthoredMode","hoistCommand","resolvedToDispatchPlan","diagnostic","error","resolvedEnv","entry","shouldUseAuthoredValue","stepField","flatMap","evaluatedAt","mergeEnvLayers","workflowEnv","workflowEnvTemplates","jobEnv","jobEnvTemplates","layers","merged","layer","Array","isArray","fromEntries"],"mappings":"AACA,SAEEA,+BAA+B,EAE/BC,iBAAiB,QACZ,2BAA2B;AAClC,SACEC,uBAAuB,EAEvBC,oBAAoB,EACpBC,sBAAsB,EAGtBC,gBAAgB,EAChBC,2BAA2B,QACtB,sBAAsB;AAE7B,SAAQC,8BAA8B,QAAO,kBAAkB;AAC/D,SACEC,gBAAgB,EAEhBC,4BAA4B,QAGvB,cAAc;AAmCrB,OAAO,SAASC,qBAAqBC,MAAkC;IACrE,MAAMC,MAAMC,WAAWF;IACvB,MAAMG,gBAAgBC,WAAWH,KAAKD,OAAOK,OAAO,EAAEL,OAAOM,IAAI,EAAEN,OAAOO,YAAY;IACtF,MAAMC,oBAAoBC,eAAe;QACvCC,MAAMV,OAAOU,IAAI;QACjBC,SAAS;eAAIC,OAAOC,IAAI,CAACV,cAAcF,GAAG;eAAMW,OAAOC,IAAI,CAACV,cAAcW,UAAU;SAAE;QACtFT,SAASL,OAAOK,OAAO;QACvBC,MAAMN,OAAOM,IAAI;QACjBC,cAAcP,OAAOO,YAAY;IACnC;IACA,MAAMQ,YAAY;QAAC,GAAGZ,cAAcF,GAAG;QAAE,GAAGO,kBAAkBP,GAAG;IAAA;IACjE,MAAMe,eAAeJ,OAAOC,IAAI,CAACE,WAAWE,MAAM,GAAG;IACrD,MAAMC,YAAYF,eAAe;QAACf,KAAKc;IAAS,IAAI,CAAC;IACrD,MAAMI,UAAU;QAAC,GAAGhB,cAAcW,UAAU;QAAE,GAAGN,kBAAkBM,UAAU;IAAA;IAC7E,MAAMM,gBAAgBR,OAAOC,IAAI,CAACM,SAASF,MAAM,GAAG;IACpD,MAAMH,aAAaM,gBAAiB;QAACnB,KAAKkB;IAAO,IAAsC;IACvF,MAAME,eAAelB,cAAckB,YAAY,IAAIb,kBAAkBc,WAAW;IAEhF,OAAO;QACLC,QAAQ;YAACC,KAAKhB,kBAAkBiB,OAAO;YAAE,GAAGP,SAAS;QAAA;QACrDJ;QACAY,aAAa;eAAIvB,cAAcuB,WAAW;eAAKlB,kBAAkBkB,WAAW;SAAC;QAC7EC,OAAO;eAAIxB,cAAcwB,KAAK;eAAKnB,kBAAkBmB,KAAK;SAAC;QAC3DN;IACF;AACF;AAEA,OAAO,SAASO,0BAA0B5B,MAMzC;IACC,MAAMC,MAAM;QAAC,GAAG4B,cAAc7B,OAAOuB,MAAM,CAAC;IAAA;IAC5C,MAAMO,iBAAiD,EAAE;IAEzD,IAAI9B,OAAO+B,IAAI,CAACP,GAAG,KAAKQ,WAAW;QACjC,MAAMC,WAAWC,mBAAmB;YAClCC,OAAOnC,OAAO+B,IAAI,CAACP,GAAG;YACtBnB,SAASL,OAAOK,OAAO;YACvBE,cAAcP,OAAOO,YAAY;YACjC6B,eAAexB,OAAOC,IAAI,CAACZ;YAC3B0B,OAAO3B,OAAO2B,KAAK;QACrB;QACA3B,OAAOuB,MAAM,CAACC,GAAG,GAAGS,SAASR,OAAO;QACpCb,OAAOyB,MAAM,CAACpC,KAAKgC,SAAShC,GAAG;QAC/B6B,eAAeQ,IAAI,IAAIL,SAASH,cAAc;IAChD;IAEA,IAAI9B,OAAO+B,IAAI,CAAC9B,GAAG,KAAK+B,WAAW;QACjC,KAAK,MAAM,CAACO,KAAKJ,MAAM,IAAIvB,OAAO4B,OAAO,CAACxC,OAAO+B,IAAI,CAAC9B,GAAG,EAAG;YAC1D,MAAMwC,YAAYC,sBAAsB;gBACtCP,OAAO;gBACPQ,YAAY;gBACZC,YAAY;gBACZC,UAAUV;gBACV9B,SAASL,OAAOK,OAAO;gBACvBE,cAAcP,OAAOO,YAAY;gBACjCuC,QAAQP;gBACRZ,OAAO3B,OAAO2B,KAAK;YACrB;YACA,IAAIc,UAAUM,IAAI,KAAK,WAAWjB,eAAeQ,IAAI,CAACG,UAAUO,OAAO;iBAClE/C,GAAG,CAACsC,IAAI,GAAGE,UAAUQ,KAAK;QACjC;IACF;IAEA,IAAIrC,OAAOC,IAAI,CAACZ,KAAKgB,MAAM,GAAG,GAAGjB,OAAOuB,MAAM,CAACtB,GAAG,GAAGA;IACrD,IAAI6B,eAAeb,MAAM,GAAG,GAAGjB,OAAOuB,MAAM,CAAC2B,eAAe,GAAGpB;AACjE;AAEA,SAASI,mBAAmBlC,MAM3B;IAKC,MAAMmD,UAAU1D,uBAAuB;QACrC0C,OAAOnC,OAAOmC,KAAK;QACnBC,eAAepC,OAAOoC,aAAa;IACrC;IACA,MAAMnC,MAA8B,CAAC;IACrC,MAAM6B,iBAAiD,EAAE;IAEzD,KAAK,MAAMkB,WAAWG,QAAQC,QAAQ,CAAE;QACtC,MAAMX,YAAYC,sBAAsB;YACtCP,OAAO;YACPQ,YAAY;YACZC,YAAY;YACZC,UAAU;gBAACQ,UAAU;oBAACL,QAAQM,OAAO;iBAAC;YAAA;YACtCjD,SAASL,OAAOK,OAAO;YACvBE,cAAcP,OAAOO,YAAY;YACjCuC,QAAQE,QAAQO,IAAI;YACpB5B,OAAO3B,OAAO2B,KAAK;QACrB;QACA,IAAIc,UAAUM,IAAI,KAAK,WAAWjB,eAAeQ,IAAI,CAACG,UAAUO,OAAO;aAClE/C,GAAG,CAAC+C,QAAQO,IAAI,CAAC,GAAGd,UAAUQ,KAAK;IAC1C;IAEA,OAAO;QAACxB,SAAS0B,QAAQ1B,OAAO;QAAExB;QAAK6B;IAAc;AACvD;AAMA,SAASY,sBAAsB1C,MAS9B;IACC,MAAMiC,WAAWpC,iBAAiBG;IAClCA,OAAO2B,KAAK,CAACW,IAAI,IAAIkB,SAASvB,SAASN,KAAK,EAAE3B,OAAO2C,UAAU,EAAE3C,OAAO8C,MAAM;IAC9E,IAAIb,SAASc,IAAI,KAAK,UAAU,OAAO;QAACA,MAAM;QAASE,OAAOhB,SAASgB,KAAK;IAAA;IAC5E,IAAIjD,OAAO8C,MAAM,KAAKd,aAAayB,iCAAiCxB,SAASE,KAAK,GAAG;QACnFnC,OAAO2B,KAAK,CAACW,IAAI,IACZoB,2BAA2BzB,SAASE,KAAK,EAAEnC,OAAO2C,UAAU,EAAE3C,OAAO8C,MAAM;QAEhF,OAAO;YACLC,MAAM;YACNC,SAASW,uBAAuB3D,OAAO8C,MAAM,EAAEb,SAASE,KAAK;QAC/D;IACF;IAEA,MAAMyB,SAAS3B,SAASE,KAAK,CAACkB,QAAQ,CAACQ,IAAI,CAAC,CAACP,UAAYA,QAAQP,IAAI,KAAK,aAAae,WACpFF;IACH,MAAM,IAAIhE,+BAA+BI,OAAOO,YAAY,EAAE;QAC5D4B,OAAOnC,OAAO4C,UAAU;QACxBgB,QAAQA,UAAU5D,OAAOmC,KAAK;QAC9B,GAAInC,OAAO8C,MAAM,KAAKd,YAAY,CAAC,IAAI;YAACc,QAAQ9C,OAAO8C,MAAM;QAAA,CAAC;IAChE;AACF;AAEA,SAASW,iCAAiCtB,KAAoB;IAC5D,OAAOA,MAAMkB,QAAQ,CAACU,KAAK,CAAC,CAACT;QAC3B,IAAIA,QAAQP,IAAI,KAAK,WAAW,OAAO;QACvC,OACEO,QAAQU,UAAU,KAAKtE,oBACvB4D,QAAQW,KAAK,CAAChD,MAAM,KAAK,KACzBqC,QAAQW,KAAK,CAAC,EAAE,KAAK;IAEzB;AACF;AAEA,SAASN,uBACPO,MAAc,EACd/B,KAAoB;IAEpB,MAAMa,UAAU;QACdkB;QACAb,UAAUlB,MAAMkB,QAAQ,CAACc,GAAG,CAACC;IAC/B;IACA,OAAO/E,gCAAgCgF,KAAK,CAACrB;AAC/C;AAEA,SAASoB,qBAAqBd,OAA6B;IACzD,IAAIA,QAAQP,IAAI,KAAK,WAAW,OAAO;QAACA,MAAM;QAAWE,OAAOK,QAAQL,KAAK;IAAA;IAE7E,MAAMqB,YAAY/E,wBAAwB+D,QAAQQ,UAAU;IAC5D,MAAMS,YAAYD,UAAUE,UAAU,CAACX,IAAI,CAAC,CAACY,YAAcA,UAAUC,IAAI,KAAK;IAC9E,IAAIH,cAAcvC,WAAW;QAC3B,MAAM,IAAI2C,MACR,CAAC,0DAA0D,EAAErB,QAAQQ,UAAU,CAACF,MAAM,EAAE;IAE5F;IAEA,OAAO;QACLb,MAAM;QACN6B,OAAOtF,kBAAkB+E,KAAK,CAACE,UAAUK,KAAK,IAAI;QAClDrC,KAAKgC,UAAUhC,GAAG;IACpB;AACF;AAEA,SAAS9B,eAAeT,MAMvB;IAQC,MAAM6C,WAAW7C,OAAOU,IAAI,CAACmE,SAAS,EAAEpD;IACxC,MAAMH,cAAcuB,aAAab;IACjC,IAAI,CAACV,aAAa;QAChB,OAAO;YACLG,SAASzB,OAAOU,IAAI,CAACe,OAAO,CAACwB,KAAK;YAClChD,KAAK,CAAC;YACNa,YAAY,CAAC;YACbY,aAAa,EAAE;YACfC,OAAO,EAAE;YACTL,aAAa;QACf;IACF;IAEA,MAAMwD,mBAAmB9E,OAAOM,IAAI,KAAK;IACzC,IAAIwE,kBAAkB;QACpB,OAAO;YACLrD,SAASzB,OAAOU,IAAI,CAACe,OAAO,CAACwB,KAAK;YAClChD,KAAK,CAAC;YACNa,YAAY,CAAC;YACbY,aAAa,EAAE;YACfC,OAAO,EAAE;YACTL,aAAa;QACf;IACF;IAEA,MAAMrB,MAA8B,CAAC;IACrC,MAAMa,aAA4C,CAAC;IACnD,MAAMY,cAAgD,EAAE;IACxD,MAAMC,QAA4C,EAAE;IACpD,MAAMwB,UAAU4B,aAAalC,UAAU7C,OAAOW,OAAO,EAAEX,OAAOO,YAAY;IAE1E,KAAK,MAAMyC,WAAWG,QAAQC,QAAQ,CAAE;QACtC,MAAMnB,WAAWpC,iBAAiB;YAChCsC,OAAO;YACPU,UAAU;gBAACQ,UAAU;oBAACL,QAAQM,OAAO;iBAAC;YAAA;YACtCjD,SAASL,OAAOK,OAAO;YACvBE,cAAcP,OAAOO,YAAY;YACjCqC,YAAY;QACd;QACA,MAAMoC,yBAAyB/C,SAASc,IAAI,KAAK;QACjD,IAAIiC,wBAAwBlE,UAAU,CAACkC,QAAQO,IAAI,CAAC,GAAGtB,SAASE,KAAK;aAChElC,GAAG,CAAC+C,QAAQO,IAAI,CAAC,GAAGtB,SAASgB,KAAK;QACvCvB,YAAYY,IAAI,IACXL,SAASP,WAAW,CAACyC,GAAG,CAAC,CAACc,aAAgB,CAAA;gBAAC,GAAGA,UAAU;gBAAE9C,OAAO;YAAc,CAAA;QAEpFR,MAAMW,IAAI,IAAIkB,SAASvB,SAASN,KAAK,EAAE;IACzC;IAEA,OAAO;QACLF,SAAS0B,QAAQ1B,OAAO;QACxBxB;QACAa;QACAY;QACAC;QACAL,aAAa;IACf;AACF;AAEA,SAASyD,aACPlC,QAAmC,EACnCT,aAAgC,EAChC7B,YAAoB;IAEpB,IAAI;QACF,OAAOd,uBAAuB;YAC5B0C,OAAO;gBAACkB,UAAUR;YAAQ;YAC1BT;QACF;IACF,EAAE,OAAO8C,OAAO;QACd,IAAIA,iBAAiBvF,6BAA6B;YAChD,MAAMG,6BAA6B;gBAACS;gBAAcqC,YAAY;YAAK,GAAGsC;QACxE;QACA,MAAMA;IACR;AACF;AAEA,SAAS9E,WACPH,GAA8C,EAC9CI,OAAkC,EAClCC,IAAoB,EACpBC,YAAoB;IAQpB,MAAM4E,cAAsC,CAAC;IAC7C,MAAMrE,aAA4C,CAAC;IACnD,MAAMY,cAAgD,EAAE;IACxD,MAAMC,QAA4C,EAAE;IACpD,IAAIN,eAAe;IAEnB,KAAK,MAAM,CAACkB,KAAK6C,MAAM,IAAIxE,OAAO4B,OAAO,CAACvC,KAAM;QAC9C,MAAM4C,WAAWuC,MAAMvC,QAAQ;QAC/B,MAAMvB,cAAcuB,aAAab;QACjC,MAAM8C,mBAAmBxE,SAAS;QAClC,MAAM+E,yBAAyB,CAAC/D,eAAewD;QAE/C,IAAIO,wBAAwB;YAC1BF,WAAW,CAAC5C,IAAI,GAAG6C,MAAMnC,KAAK;YAC9B5B,iBAAiBC;YACjB;QACF;QAEAD,eAAe;QACf,MAAMY,WAAWpC,iBAAiB;YAChCsC,OAAO;YACPU,UAAU;gBAACQ,UAAUR;YAAQ;YAC7BxC;YACAE;YACAqC,YAAY;YACZE,QAAQP;QACV;QACA,MAAMyC,yBAAyB/C,SAASc,IAAI,KAAK;QACjD,IAAIiC,wBAAwBlE,UAAU,CAACyB,IAAI,GAAGN,SAASE,KAAK;aACvDgD,WAAW,CAAC5C,IAAI,GAAGN,SAASgB,KAAK;QACtCvB,YAAYY,IAAI,IACXL,SAASP,WAAW,CAACyC,GAAG,CAAC,CAACc,aAAgB,CAAA;gBAC3C,GAAGA,UAAU;gBACb9C,OAAO;gBACPW,QAAQP;YACV,CAAA;QAEFZ,MAAMW,IAAI,IAAIkB,SAASvB,SAASN,KAAK,EAAE,OAAOY;IAChD;IAEA,OAAO;QAACtC,KAAKkF;QAAarE;QAAYY;QAAaC;QAAON;IAAY;AACxE;AAEA,SAASmC,SACP7B,KAAsC,EACtCQ,KAAsB,EACtBW,MAAe;IAEf,OAAOnB,MAAMwC,GAAG,CAAC,CAACiB,QAAW,CAAA;YAC3B,GAAGA,KAAK;YACRjD;YACA,GAAIW,WAAWd,YAAY,CAAC,IAAI;gBAACc;YAAM,CAAC;QAC1C,CAAA;AACF;AAEA,SAASY,2BACPvB,KAAoB,EACpBmD,SAA0B,EAC1BxC,MAAc;IAEd,OAAOX,MAAMkB,QAAQ,CAACkC,OAAO,CAAC,CAACjC;QAC7B,IAAIA,QAAQP,IAAI,KAAK,WAAW,OAAO,EAAE;QACzC,OAAO;YACL;gBACE,GAAGvD,qBAAqB;oBACtBsE,YAAYR,QAAQQ,UAAU,CAACF,MAAM;oBACrCK,OAAOX,QAAQW,KAAK;oBACpBD,YAAYtE;oBACZ8F,aAAa;oBACbjB,WAAW;gBACb,EAAE;gBACFpC,OAAOmD;gBACPxC;YACF;SACD;IACH;AACF;AAEA,SAAS5C,WAAWF,MAMnB;IACC,IAAIA,OAAOU,IAAI,CAACqC,IAAI,KAAK,OAAO,OAAO,CAAC;IAExC,OAAO0C,eACL;QAACxF,KAAKD,OAAO0F,WAAW;QAAEb,WAAW7E,OAAO2F,oBAAoB;IAAA,GAChE;QAAC1F,KAAKD,OAAO4F,MAAM;QAAEf,WAAW7E,OAAO6F,eAAe;IAAA,GACtD;QAAC5F,KAAKD,OAAOU,IAAI,CAACT,GAAG;QAAE4E,WAAW7E,OAAOU,IAAI,CAACmE,SAAS,EAAE5E;IAAG;AAEhE;AAEA,SAASwF,eACP,GAAGK,MAGA;IAEH,MAAMC,SAA0C,CAAC;IAEjD,KAAK,MAAMC,SAASF,OAAQ;QAC1B,KAAK,MAAM,CAACvD,KAAKU,MAAM,IAAIrC,OAAO4B,OAAO,CAACwD,MAAM/F,GAAG,IAAI,CAAC,GAAI;YAC1D,MAAM4C,WAAWmD,MAAMnB,SAAS,EAAE,CAACtC,IAAI;YACvC,MAAMjB,cAAcuB,aAAab;YACjC+D,MAAM,CAACxD,IAAI,GAAGjB,cAAc;gBAAC2B;gBAAOJ;YAAQ,IAAI;gBAACI;YAAK;QACxD;IACF;IAEA,OAAO8C;AACT;AAEA,SAASlE,cAAcN,MAA+B;IACpD,MAAMtB,MAAMsB,OAAOtB,GAAG;IACtB,IAAIA,QAAQ,QAAQ,OAAOA,QAAQ,YAAYgG,MAAMC,OAAO,CAACjG,MAAM,OAAO,CAAC;IAC3E,OAAOW,OAAOuF,WAAW,CACvBvF,OAAO4B,OAAO,CAACvC,KAAKsF,OAAO,CAAC,CAAC,CAAChD,KAAKU,MAAM,GACvC,OAAOA,UAAU,WAAW;YAAC;gBAACV;gBAAKU;aAAM;SAAC,GAAG,EAAE;AAGrD"}
1
+ {"version":3,"sources":["../../../src/core/step-config/run.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport {\n type MaterializedSecretBindingDto,\n materializedSecretBindingSchema,\n type SecretBindingSegmentDto,\n secretStoreSchema,\n} from '@shipfox/api-secrets-dto';\nimport {\n analyzeContextKeyAccess,\n type EvaluationTraceEntry,\n evaluationTraceEntry,\n hoistPlannedRunCommand,\n type ResolvedField,\n type ResolvedFieldSegment,\n runnerFillTarget,\n UnsafeRunInterpolationError,\n} from '@shipfox/expression';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport {\n resolveStepField,\n type StepConfigField,\n stepConfigInterpolationError,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\n\nexport type StepConfigMode = 'effective' | 'authored';\n\ninterface WinningEnvValue {\n readonly value: string;\n readonly template?: ResolvedField['segments'];\n}\n\nexport interface ResolveRunStepConfigParams {\n readonly step: WorkflowModelRunStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n}\n\ntype WorkflowEnvTemplates = Readonly<Record<string, ResolvedField['segments']>>;\n\nexport interface RunStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport function resolveRunStepConfig(params: ResolveRunStepConfigParams): RunStepConfig {\n const env = winningEnv(params);\n const envResolution = resolveEnv(env, params.context, params.mode, params.definitionId);\n const commandResolution = resolveCommand({\n step: params.step,\n envKeys: [...Object.keys(envResolution.env), ...Object.keys(envResolution.configPlan)],\n context: params.context,\n mode: params.mode,\n definitionId: params.definitionId,\n });\n const mergedEnv = {...envResolution.env, ...commandResolution.env};\n const hasEnvConfig = Object.keys(mergedEnv).length > 0;\n const envConfig = hasEnvConfig ? {env: mergedEnv} : {};\n const planEnv = {...envResolution.configPlan, ...commandResolution.configPlan};\n const hasConfigPlan = Object.keys(planEnv).length > 0;\n const configPlan = hasConfigPlan ? ({env: planEnv} satisfies StepConfigDispatchPlan) : null;\n const hasTemplates = envResolution.hasTemplates || commandResolution.hasTemplate;\n\n return {\n config: {run: commandResolution.command, ...envConfig},\n configPlan,\n diagnostics: [...envResolution.diagnostics, ...commandResolution.diagnostics],\n trace: [...envResolution.trace, ...commandResolution.trace],\n hasTemplates,\n };\n}\n\nexport function completeRunDispatchConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): void {\n const env = {...readConfigEnv(params.config)};\n const secretBindings: MaterializedSecretBindingDto[] = [];\n\n if (params.plan.run !== undefined) {\n const resolved = completeRunCommand({\n field: params.plan.run,\n context: params.context,\n definitionId: params.definitionId,\n reservedNames: Object.keys(env),\n trace: params.trace,\n });\n params.config.run = resolved.command;\n Object.assign(env, resolved.env);\n secretBindings.push(...resolved.secretBindings);\n }\n\n if (params.plan.env !== undefined) {\n for (const [key, field] of Object.entries(params.plan.env)) {\n const completed = completeDispatchField({\n field: 'env.value',\n traceField: 'env',\n errorField: 'env',\n template: field,\n context: params.context,\n definitionId: params.definitionId,\n envKey: key,\n trace: params.trace,\n });\n if (completed.kind === 'binding') secretBindings.push(completed.binding);\n else env[key] = completed.value;\n }\n }\n\n if (Object.keys(env).length > 0) params.config.env = env;\n if (secretBindings.length > 0) params.config.secret_bindings = secretBindings;\n}\n\nfunction completeRunCommand(params: {\n readonly field: ResolvedField;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly reservedNames: Iterable<string>;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): {\n readonly command: string;\n readonly env: Readonly<Record<string, string>>;\n readonly secretBindings: readonly MaterializedSecretBindingDto[];\n} {\n const hoisted = hoistPlannedRunCommand({\n field: params.field,\n reservedNames: params.reservedNames,\n });\n const env: Record<string, string> = {};\n const secretBindings: MaterializedSecretBindingDto[] = [];\n\n for (const binding of hoisted.bindings) {\n const completed = completeDispatchField({\n field: 'run',\n traceField: 'run',\n errorField: 'run',\n template: {segments: [binding.segment]},\n context: params.context,\n definitionId: params.definitionId,\n envKey: binding.name,\n trace: params.trace,\n });\n if (completed.kind === 'binding') secretBindings.push(completed.binding);\n else env[binding.name] = completed.value;\n }\n\n return {command: hoisted.command, env, secretBindings};\n}\n\ntype CompletedDispatchField =\n | {readonly kind: 'value'; readonly value: string}\n | {readonly kind: 'binding'; readonly binding: MaterializedSecretBindingDto};\n\nfunction completeDispatchField(params: {\n readonly field: 'run' | 'env.value';\n readonly traceField: StepConfigField;\n readonly errorField: StepConfigField;\n readonly template: ResolvedField;\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly envKey?: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): CompletedDispatchField {\n const resolved = resolveStepField(params);\n params.trace.push(...tagTrace(resolved.trace, params.traceField, params.envKey));\n if (resolved.kind === 'frozen') return {kind: 'value', value: resolved.value};\n if (params.envKey !== undefined && containsOnlyRunnerSecretSegments(resolved.field)) {\n params.trace.push(\n ...runnerSecretReferenceTrace(resolved.field, params.traceField, params.envKey),\n );\n return {\n kind: 'binding',\n binding: secretBindingFromField(params.envKey, resolved.field),\n };\n }\n\n const source = resolved.field.segments.find((segment) => segment.kind === 'deferred')?.expression\n .source;\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: params.errorField,\n source: source ?? params.field,\n ...(params.envKey === undefined ? {} : {envKey: params.envKey}),\n });\n}\n\nfunction containsOnlyRunnerSecretSegments(field: ResolvedField): boolean {\n return field.segments.every((segment) => {\n if (segment.kind === 'literal') return true;\n return (\n segment.fillTarget === runnerFillTarget &&\n segment.roots.length === 1 &&\n segment.roots[0] === 'secrets'\n );\n });\n}\n\nfunction secretBindingFromField(\n target: string,\n field: ResolvedField,\n): MaterializedSecretBindingDto {\n const binding = {\n target,\n segments: field.segments.map(secretBindingSegment),\n };\n return materializedSecretBindingSchema.parse(binding);\n}\n\nfunction secretBindingSegment(segment: ResolvedFieldSegment): SecretBindingSegmentDto {\n if (segment.kind === 'literal') return {kind: 'literal', value: segment.value};\n\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n const reference = keyAccess.references.find((candidate) => candidate.root === 'secrets');\n if (reference === undefined) {\n throw new Error(\n `Runner secret segment did not contain a secret reference: ${segment.expression.source}`,\n );\n }\n\n return {\n kind: 'secret',\n store: secretStoreSchema.parse(reference.store ?? 'local'),\n key: reference.key,\n };\n}\n\nfunction resolveCommand(params: {\n readonly step: WorkflowModelRunStep;\n readonly envKeys: readonly string[];\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n}): {\n readonly command: string;\n readonly env: Readonly<Record<string, string>>;\n readonly configPlan: Readonly<Record<string, ResolvedField>>;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplate: boolean;\n} {\n const template = params.step.templates?.command;\n const hasTemplate = template !== undefined;\n if (!hasTemplate) {\n return {\n command: params.step.command.value,\n env: {},\n configPlan: {},\n diagnostics: [],\n trace: [],\n hasTemplate: false,\n };\n }\n\n const usesAuthoredMode = params.mode === 'authored';\n if (usesAuthoredMode) {\n return {\n command: params.step.command.value,\n env: {},\n configPlan: {},\n diagnostics: [],\n trace: [],\n hasTemplate: true,\n };\n }\n\n const env: Record<string, string> = {};\n const configPlan: Record<string, ResolvedField> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const hoisted = hoistCommand(template, params.envKeys, params.definitionId);\n\n for (const binding of hoisted.bindings) {\n const resolved = resolveStepField({\n field: 'run',\n template: {segments: [binding.segment]},\n context: params.context,\n definitionId: params.definitionId,\n errorField: 'run',\n });\n const resolvedToDispatchPlan = resolved.kind === 'residual';\n if (resolvedToDispatchPlan) configPlan[binding.name] = resolved.field;\n else env[binding.name] = resolved.value;\n diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'run' as const})),\n );\n trace.push(...tagTrace(resolved.trace, 'run'));\n }\n\n return {\n command: hoisted.command,\n env,\n configPlan,\n diagnostics,\n trace,\n hasTemplate: true,\n };\n}\n\nfunction hoistCommand(\n template: ResolvedField['segments'],\n reservedNames: readonly string[],\n definitionId: string,\n): ReturnType<typeof hoistPlannedRunCommand> {\n try {\n return hoistPlannedRunCommand({\n field: {segments: template},\n reservedNames,\n });\n } catch (error) {\n if (error instanceof UnsafeRunInterpolationError) {\n throw stepConfigInterpolationError({definitionId, errorField: 'run'}, error);\n }\n throw error;\n }\n}\n\nfunction resolveEnv(\n env: Readonly<Record<string, WinningEnvValue>>,\n context: WorkflowEvaluationContext,\n mode: StepConfigMode,\n definitionId: string,\n): {\n readonly env: Readonly<Record<string, string>>;\n readonly configPlan: Readonly<Record<string, ResolvedField>>;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n} {\n const resolvedEnv: Record<string, string> = {};\n const configPlan: Record<string, ResolvedField> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n let hasTemplates = false;\n\n for (const [key, entry] of Object.entries(env)) {\n const template = entry.template;\n const hasTemplate = template !== undefined;\n const usesAuthoredMode = mode === 'authored';\n const shouldUseAuthoredValue = !hasTemplate || usesAuthoredMode;\n\n if (shouldUseAuthoredValue) {\n resolvedEnv[key] = entry.value;\n hasTemplates ||= hasTemplate;\n continue;\n }\n\n hasTemplates = true;\n const resolved = resolveStepField({\n field: 'env.value',\n template: {segments: template},\n context,\n definitionId,\n errorField: 'env',\n envKey: key,\n });\n const resolvedToDispatchPlan = resolved.kind === 'residual';\n if (resolvedToDispatchPlan) configPlan[key] = resolved.field;\n else resolvedEnv[key] = resolved.value;\n diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({\n ...diagnostic,\n field: 'env' as const,\n envKey: key,\n })),\n );\n trace.push(...tagTrace(resolved.trace, 'env', key));\n }\n\n return {env: resolvedEnv, configPlan, diagnostics, trace, hasTemplates};\n}\n\nfunction tagTrace(\n trace: readonly EvaluationTraceEntry[],\n field: StepConfigField,\n envKey?: string,\n): WorkflowStepEvaluationTraceEntry[] {\n return trace.map((entry) => ({\n ...entry,\n field,\n ...(envKey === undefined ? {} : {envKey}),\n }));\n}\n\nfunction runnerSecretReferenceTrace(\n field: ResolvedField,\n stepField: StepConfigField,\n envKey: string,\n): WorkflowStepEvaluationTraceEntry[] {\n return field.segments.flatMap((segment) => {\n if (segment.kind === 'literal') return [];\n return [\n {\n ...evaluationTraceEntry({\n expression: segment.expression.source,\n roots: segment.roots,\n fillTarget: runnerFillTarget,\n evaluatedAt: 'step-dispatch',\n reference: true,\n }),\n field: stepField,\n envKey,\n },\n ];\n });\n}\n\nfunction winningEnv(params: {\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly step: WorkflowModelStep;\n}): Readonly<Record<string, WinningEnvValue>> {\n if (params.step.kind !== 'run') return {};\n\n return mergeEnvLayers(\n {env: params.workflowEnv, templates: params.workflowEnvTemplates},\n {env: params.jobEnv, templates: params.jobEnvTemplates},\n {env: params.step.env, templates: params.step.templates?.env},\n );\n}\n\nfunction mergeEnvLayers(\n ...layers: readonly {\n readonly env: Readonly<Record<string, string>> | undefined;\n readonly templates: WorkflowEnvTemplates | undefined;\n }[]\n): Readonly<Record<string, WinningEnvValue>> {\n const merged: Record<string, WinningEnvValue> = {};\n\n for (const layer of layers) {\n for (const [key, value] of Object.entries(layer.env ?? {})) {\n const template = layer.templates?.[key];\n const hasTemplate = template !== undefined;\n merged[key] = hasTemplate ? {value, template} : {value};\n }\n }\n\n return merged;\n}\n\nfunction readConfigEnv(config: Record<string, unknown>): Record<string, string> {\n const env = config.env;\n if (env === null || typeof env !== 'object' || Array.isArray(env)) return {};\n return Object.fromEntries(\n Object.entries(env).flatMap(([key, value]) =>\n typeof value === 'string' ? [[key, value]] : [],\n ),\n );\n}\n"],"names":["materializedSecretBindingSchema","secretStoreSchema","analyzeContextKeyAccess","evaluationTraceEntry","hoistPlannedRunCommand","runnerFillTarget","UnsafeRunInterpolationError","InterpolationUnresolvableError","resolveStepField","stepConfigInterpolationError","resolveRunStepConfig","params","env","winningEnv","envResolution","resolveEnv","context","mode","definitionId","commandResolution","resolveCommand","step","envKeys","Object","keys","configPlan","mergedEnv","hasEnvConfig","length","envConfig","planEnv","hasConfigPlan","hasTemplates","hasTemplate","config","run","command","diagnostics","trace","completeRunDispatchConfig","readConfigEnv","secretBindings","plan","undefined","resolved","completeRunCommand","field","reservedNames","assign","push","key","entries","completed","completeDispatchField","traceField","errorField","template","envKey","kind","binding","value","secret_bindings","hoisted","bindings","segments","segment","name","tagTrace","containsOnlyRunnerSecretSegments","runnerSecretReferenceTrace","secretBindingFromField","source","find","expression","every","fillTarget","roots","target","map","secretBindingSegment","parse","keyAccess","reference","references","candidate","root","Error","store","templates","usesAuthoredMode","hoistCommand","resolvedToDispatchPlan","diagnostic","error","resolvedEnv","entry","shouldUseAuthoredValue","stepField","flatMap","evaluatedAt","mergeEnvLayers","workflowEnv","workflowEnvTemplates","jobEnv","jobEnvTemplates","layers","merged","layer","Array","isArray","fromEntries"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { type AgentDefaultsResolver } from '@shipfox/api-agent/core/resolve-agent-config';
2
- import type { WorkflowModel } from '@shipfox/api-definitions';
1
+ import type { WorkflowModel } from '@shipfox/api-definitions-dto';
2
+ import type { AgentDefaultsResolver } from './agent-defaults.js';
3
3
  import type { AgentToolMaterializationContext, AgentToolMaterializationSnapshot } from './agent-tools.js';
4
4
  import type { JobExecution } from './entities/job-execution.js';
5
5
  import type { TriggerPayload, WorkflowRun } from './entities/workflow-run.js';
@@ -14,7 +14,7 @@ export declare function materializeWorkflowRunJobs(params: {
14
14
  definitionId: string;
15
15
  agentToolContext?: AgentToolMaterializationContext | undefined;
16
16
  agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;
17
- }): readonly MaterializedWorkflowJob[];
17
+ }): Promise<readonly MaterializedWorkflowJob[]>;
18
18
  export declare function deriveInitialJobExecutionPlan(params: {
19
19
  run: WorkflowRun;
20
20
  modelJob: WorkflowModel['jobs'][number];
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-run-creation.d.ts","sourceRoot":"","sources":["../../src/core/workflow-run-creation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAK5E,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,6CAA6C,CAAC;AAGrD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1C,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IAC/D,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CACzE,GAAG,SAAS,uBAAuB,EAAE,CAerC;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,GAAG,EAAE,uBAAuB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC3C,GAAG;IACF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAClD,CAwCA;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,aAAa,CAAC,EAAE,SAAS,YAAY,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IAC7E,eAAe,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;CACvD,GAAG,SAAS,MAAM,EAAE,CAgBpB"}
1
+ {"version":3,"file":"workflow-run-creation.d.ts","sourceRoot":"","sources":["../../src/core/workflow-run-creation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAK5E,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,6CAA6C,CAAC;AAGrD,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1C,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IAC/D,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CACzE,GAAG,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAe9C;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,GAAG,EAAE,uBAAuB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC3C,GAAG;IACF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAClD,CAwCA;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,aAAa,CAAC,EAAE,SAAS,YAAY,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IAC7E,eAAe,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;CACvD,GAAG,SAAS,MAAM,EAAE,CAgBpB"}
@@ -1,18 +1,17 @@
1
- import { catalogDefaultAgentResolver } from '@shipfox/api-agent/core/resolve-agent-config';
2
1
  import { assembleCreationContext, assembleExecutionCreationContext } from './step-config/assemble-run-context.js';
3
2
  import { materializeJobRunner, materializeWorkflowModel } from './step-config/materialize-workflow-model.js';
4
3
  import { resolveJobExecutionName } from './step-config/resolve-job-execution-name.js';
5
- export function materializeWorkflowRunJobs(params) {
4
+ export async function materializeWorkflowRunJobs(params) {
6
5
  const context = assembleCreationContext({
7
6
  run: params.run,
8
7
  triggerPayload: params.triggerPayload,
9
8
  inputs: params.inputs ?? null,
10
9
  vars: params.vars
11
10
  });
12
- return materializeWorkflowModel({
11
+ return await materializeWorkflowModel({
13
12
  model: params.model,
14
13
  context,
15
- resolveAgentDefaults: params.resolveAgentDefaults ?? catalogDefaultAgentResolver,
14
+ resolveAgentDefaults: params.resolveAgentDefaults,
16
15
  definitionId: params.definitionId,
17
16
  agentToolContext: params.agentToolContext,
18
17
  agentToolSnapshot: params.agentToolSnapshot
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/workflow-run-creation.ts"],"sourcesContent":["import {\n type AgentDefaultsResolver,\n catalogDefaultAgentResolver,\n} from '@shipfox/api-agent/core/resolve-agent-config';\nimport type {WorkflowModel} from '@shipfox/api-definitions';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from './agent-tools.js';\nimport type {JobExecution} from './entities/job-execution.js';\nimport type {TriggerPayload, WorkflowRun} from './entities/workflow-run.js';\nimport {\n assembleCreationContext,\n assembleExecutionCreationContext,\n} from './step-config/assemble-run-context.js';\nimport {\n type MaterializedWorkflowJob,\n materializeJobRunner,\n materializeWorkflowModel,\n} from './step-config/materialize-workflow-model.js';\nimport {resolveJobExecutionName} from './step-config/resolve-job-execution-name.js';\n\nexport function materializeWorkflowRunJobs(params: {\n run: WorkflowRun;\n model: WorkflowModel;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | null | undefined;\n vars?: Record<string, string> | undefined;\n resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n definitionId: string;\n agentToolContext?: AgentToolMaterializationContext | undefined;\n agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}): readonly MaterializedWorkflowJob[] {\n const context = assembleCreationContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars: params.vars,\n });\n return materializeWorkflowModel({\n model: params.model,\n context,\n resolveAgentDefaults: params.resolveAgentDefaults ?? catalogDefaultAgentResolver,\n definitionId: params.definitionId,\n agentToolContext: params.agentToolContext,\n agentToolSnapshot: params.agentToolSnapshot,\n });\n}\n\nexport function deriveInitialJobExecutionPlan(params: {\n run: WorkflowRun;\n modelJob: WorkflowModel['jobs'][number];\n job: MaterializedWorkflowJob;\n jobId: string;\n sequence: number;\n fallbackName: string;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | null | undefined;\n vars?: Record<string, string> | undefined;\n}): {\n name: string;\n runner: readonly string[];\n evaluationTrace: JobExecution['evaluationTrace'];\n} {\n const nameContext = assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars: params.vars,\n jobId: params.jobId,\n sequence: params.sequence,\n executionName: params.fallbackName,\n status: 'pending',\n triggerEvents: [],\n priorExecutions: [],\n });\n const resolvedName = resolveJobExecutionName({\n definitionId: params.run.definitionId,\n job: params.job,\n fallbackName: params.fallbackName,\n context: nameContext.values,\n });\n const runnerContext = assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars: params.vars,\n jobId: params.jobId,\n sequence: params.sequence,\n executionName: resolvedName.value,\n status: 'pending',\n triggerEvents: [],\n priorExecutions: [],\n });\n return {\n name: resolvedName.value,\n runner: materializeJobRunner({\n job: params.modelJob,\n context: runnerContext,\n definitionId: params.run.definitionId,\n }),\n evaluationTrace: resolvedName.trace,\n };\n}\n\nexport function deriveJobExecutionRunner(params: {\n run: WorkflowRun;\n modelJob: WorkflowModel['jobs'][number];\n jobId: string;\n sequence: number;\n executionName: string;\n status: JobExecution['status'];\n triggerEvents?: readonly JobExecution['triggerEvents'][number][] | undefined;\n priorExecutions?: readonly JobExecution[] | undefined;\n}): readonly string[] {\n return materializeJobRunner({\n job: params.modelJob,\n context: assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.run.triggerPayload,\n inputs: params.run.inputs,\n jobId: params.jobId,\n sequence: params.sequence,\n executionName: params.executionName,\n status: params.status,\n triggerEvents: params.triggerEvents ?? [],\n priorExecutions: params.priorExecutions ?? [],\n }),\n definitionId: params.run.definitionId,\n });\n}\n"],"names":["catalogDefaultAgentResolver","assembleCreationContext","assembleExecutionCreationContext","materializeJobRunner","materializeWorkflowModel","resolveJobExecutionName","materializeWorkflowRunJobs","params","context","run","triggerPayload","inputs","vars","model","resolveAgentDefaults","definitionId","agentToolContext","agentToolSnapshot","deriveInitialJobExecutionPlan","nameContext","jobId","sequence","executionName","fallbackName","status","triggerEvents","priorExecutions","resolvedName","job","values","runnerContext","value","name","runner","modelJob","evaluationTrace","trace","deriveJobExecutionRunner"],"mappings":"AAAA,SAEEA,2BAA2B,QACtB,+CAA+C;AAQtD,SACEC,uBAAuB,EACvBC,gCAAgC,QAC3B,wCAAwC;AAC/C,SAEEC,oBAAoB,EACpBC,wBAAwB,QACnB,8CAA8C;AACrD,SAAQC,uBAAuB,QAAO,8CAA8C;AAEpF,OAAO,SAASC,2BAA2BC,MAU1C;IACC,MAAMC,UAAUP,wBAAwB;QACtCQ,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOG,cAAc;QACrCC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,MAAML,OAAOK,IAAI;IACnB;IACA,OAAOR,yBAAyB;QAC9BS,OAAON,OAAOM,KAAK;QACnBL;QACAM,sBAAsBP,OAAOO,oBAAoB,IAAId;QACrDe,cAAcR,OAAOQ,YAAY;QACjCC,kBAAkBT,OAAOS,gBAAgB;QACzCC,mBAAmBV,OAAOU,iBAAiB;IAC7C;AACF;AAEA,OAAO,SAASC,8BAA8BX,MAU7C;IAKC,MAAMY,cAAcjB,iCAAiC;QACnDO,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOG,cAAc;QACrCC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,MAAML,OAAOK,IAAI;QACjBQ,OAAOb,OAAOa,KAAK;QACnBC,UAAUd,OAAOc,QAAQ;QACzBC,eAAef,OAAOgB,YAAY;QAClCC,QAAQ;QACRC,eAAe,EAAE;QACjBC,iBAAiB,EAAE;IACrB;IACA,MAAMC,eAAetB,wBAAwB;QAC3CU,cAAcR,OAAOE,GAAG,CAACM,YAAY;QACrCa,KAAKrB,OAAOqB,GAAG;QACfL,cAAchB,OAAOgB,YAAY;QACjCf,SAASW,YAAYU,MAAM;IAC7B;IACA,MAAMC,gBAAgB5B,iCAAiC;QACrDO,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOG,cAAc;QACrCC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,MAAML,OAAOK,IAAI;QACjBQ,OAAOb,OAAOa,KAAK;QACnBC,UAAUd,OAAOc,QAAQ;QACzBC,eAAeK,aAAaI,KAAK;QACjCP,QAAQ;QACRC,eAAe,EAAE;QACjBC,iBAAiB,EAAE;IACrB;IACA,OAAO;QACLM,MAAML,aAAaI,KAAK;QACxBE,QAAQ9B,qBAAqB;YAC3ByB,KAAKrB,OAAO2B,QAAQ;YACpB1B,SAASsB;YACTf,cAAcR,OAAOE,GAAG,CAACM,YAAY;QACvC;QACAoB,iBAAiBR,aAAaS,KAAK;IACrC;AACF;AAEA,OAAO,SAASC,yBAAyB9B,MASxC;IACC,OAAOJ,qBAAqB;QAC1ByB,KAAKrB,OAAO2B,QAAQ;QACpB1B,SAASN,iCAAiC;YACxCO,KAAKF,OAAOE,GAAG;YACfC,gBAAgBH,OAAOE,GAAG,CAACC,cAAc;YACzCC,QAAQJ,OAAOE,GAAG,CAACE,MAAM;YACzBS,OAAOb,OAAOa,KAAK;YACnBC,UAAUd,OAAOc,QAAQ;YACzBC,eAAef,OAAOe,aAAa;YACnCE,QAAQjB,OAAOiB,MAAM;YACrBC,eAAelB,OAAOkB,aAAa,IAAI,EAAE;YACzCC,iBAAiBnB,OAAOmB,eAAe,IAAI,EAAE;QAC/C;QACAX,cAAcR,OAAOE,GAAG,CAACM,YAAY;IACvC;AACF"}
1
+ {"version":3,"sources":["../../src/core/workflow-run-creation.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {AgentDefaultsResolver} from './agent-defaults.js';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from './agent-tools.js';\nimport type {JobExecution} from './entities/job-execution.js';\nimport type {TriggerPayload, WorkflowRun} from './entities/workflow-run.js';\nimport {\n assembleCreationContext,\n assembleExecutionCreationContext,\n} from './step-config/assemble-run-context.js';\nimport {\n type MaterializedWorkflowJob,\n materializeJobRunner,\n materializeWorkflowModel,\n} from './step-config/materialize-workflow-model.js';\nimport {resolveJobExecutionName} from './step-config/resolve-job-execution-name.js';\n\nexport async function materializeWorkflowRunJobs(params: {\n run: WorkflowRun;\n model: WorkflowModel;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | null | undefined;\n vars?: Record<string, string> | undefined;\n resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n definitionId: string;\n agentToolContext?: AgentToolMaterializationContext | undefined;\n agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}): Promise<readonly MaterializedWorkflowJob[]> {\n const context = assembleCreationContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars: params.vars,\n });\n return await materializeWorkflowModel({\n model: params.model,\n context,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n agentToolContext: params.agentToolContext,\n agentToolSnapshot: params.agentToolSnapshot,\n });\n}\n\nexport function deriveInitialJobExecutionPlan(params: {\n run: WorkflowRun;\n modelJob: WorkflowModel['jobs'][number];\n job: MaterializedWorkflowJob;\n jobId: string;\n sequence: number;\n fallbackName: string;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | null | undefined;\n vars?: Record<string, string> | undefined;\n}): {\n name: string;\n runner: readonly string[];\n evaluationTrace: JobExecution['evaluationTrace'];\n} {\n const nameContext = assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars: params.vars,\n jobId: params.jobId,\n sequence: params.sequence,\n executionName: params.fallbackName,\n status: 'pending',\n triggerEvents: [],\n priorExecutions: [],\n });\n const resolvedName = resolveJobExecutionName({\n definitionId: params.run.definitionId,\n job: params.job,\n fallbackName: params.fallbackName,\n context: nameContext.values,\n });\n const runnerContext = assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars: params.vars,\n jobId: params.jobId,\n sequence: params.sequence,\n executionName: resolvedName.value,\n status: 'pending',\n triggerEvents: [],\n priorExecutions: [],\n });\n return {\n name: resolvedName.value,\n runner: materializeJobRunner({\n job: params.modelJob,\n context: runnerContext,\n definitionId: params.run.definitionId,\n }),\n evaluationTrace: resolvedName.trace,\n };\n}\n\nexport function deriveJobExecutionRunner(params: {\n run: WorkflowRun;\n modelJob: WorkflowModel['jobs'][number];\n jobId: string;\n sequence: number;\n executionName: string;\n status: JobExecution['status'];\n triggerEvents?: readonly JobExecution['triggerEvents'][number][] | undefined;\n priorExecutions?: readonly JobExecution[] | undefined;\n}): readonly string[] {\n return materializeJobRunner({\n job: params.modelJob,\n context: assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.run.triggerPayload,\n inputs: params.run.inputs,\n jobId: params.jobId,\n sequence: params.sequence,\n executionName: params.executionName,\n status: params.status,\n triggerEvents: params.triggerEvents ?? [],\n priorExecutions: params.priorExecutions ?? [],\n }),\n definitionId: params.run.definitionId,\n });\n}\n"],"names":["assembleCreationContext","assembleExecutionCreationContext","materializeJobRunner","materializeWorkflowModel","resolveJobExecutionName","materializeWorkflowRunJobs","params","context","run","triggerPayload","inputs","vars","model","resolveAgentDefaults","definitionId","agentToolContext","agentToolSnapshot","deriveInitialJobExecutionPlan","nameContext","jobId","sequence","executionName","fallbackName","status","triggerEvents","priorExecutions","resolvedName","job","values","runnerContext","value","name","runner","modelJob","evaluationTrace","trace","deriveJobExecutionRunner"],"mappings":"AAQA,SACEA,uBAAuB,EACvBC,gCAAgC,QAC3B,wCAAwC;AAC/C,SAEEC,oBAAoB,EACpBC,wBAAwB,QACnB,8CAA8C;AACrD,SAAQC,uBAAuB,QAAO,8CAA8C;AAEpF,OAAO,eAAeC,2BAA2BC,MAUhD;IACC,MAAMC,UAAUP,wBAAwB;QACtCQ,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOG,cAAc;QACrCC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,MAAML,OAAOK,IAAI;IACnB;IACA,OAAO,MAAMR,yBAAyB;QACpCS,OAAON,OAAOM,KAAK;QACnBL;QACAM,sBAAsBP,OAAOO,oBAAoB;QACjDC,cAAcR,OAAOQ,YAAY;QACjCC,kBAAkBT,OAAOS,gBAAgB;QACzCC,mBAAmBV,OAAOU,iBAAiB;IAC7C;AACF;AAEA,OAAO,SAASC,8BAA8BX,MAU7C;IAKC,MAAMY,cAAcjB,iCAAiC;QACnDO,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOG,cAAc;QACrCC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,MAAML,OAAOK,IAAI;QACjBQ,OAAOb,OAAOa,KAAK;QACnBC,UAAUd,OAAOc,QAAQ;QACzBC,eAAef,OAAOgB,YAAY;QAClCC,QAAQ;QACRC,eAAe,EAAE;QACjBC,iBAAiB,EAAE;IACrB;IACA,MAAMC,eAAetB,wBAAwB;QAC3CU,cAAcR,OAAOE,GAAG,CAACM,YAAY;QACrCa,KAAKrB,OAAOqB,GAAG;QACfL,cAAchB,OAAOgB,YAAY;QACjCf,SAASW,YAAYU,MAAM;IAC7B;IACA,MAAMC,gBAAgB5B,iCAAiC;QACrDO,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOG,cAAc;QACrCC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,MAAML,OAAOK,IAAI;QACjBQ,OAAOb,OAAOa,KAAK;QACnBC,UAAUd,OAAOc,QAAQ;QACzBC,eAAeK,aAAaI,KAAK;QACjCP,QAAQ;QACRC,eAAe,EAAE;QACjBC,iBAAiB,EAAE;IACrB;IACA,OAAO;QACLM,MAAML,aAAaI,KAAK;QACxBE,QAAQ9B,qBAAqB;YAC3ByB,KAAKrB,OAAO2B,QAAQ;YACpB1B,SAASsB;YACTf,cAAcR,OAAOE,GAAG,CAACM,YAAY;QACvC;QACAoB,iBAAiBR,aAAaS,KAAK;IACrC;AACF;AAEA,OAAO,SAASC,yBAAyB9B,MASxC;IACC,OAAOJ,qBAAqB;QAC1ByB,KAAKrB,OAAO2B,QAAQ;QACpB1B,SAASN,iCAAiC;YACxCO,KAAKF,OAAOE,GAAG;YACfC,gBAAgBH,OAAOE,GAAG,CAACC,cAAc;YACzCC,QAAQJ,OAAOE,GAAG,CAACE,MAAM;YACzBS,OAAOb,OAAOa,KAAK;YACnBC,UAAUd,OAAOc,QAAQ;YACzBC,eAAef,OAAOe,aAAa;YACnCE,QAAQjB,OAAOiB,MAAM;YACrBC,eAAelB,OAAOkB,aAAa,IAAI,EAAE;YACzCC,iBAAiBnB,OAAOmB,eAAe,IAAI,EAAE;QAC/C;QACAX,cAAcR,OAAOE,GAAG,CAACM,YAAY;IACvC;AACF"}
package/dist/db/db.d.ts CHANGED
@@ -464,7 +464,10 @@ export declare const schema: {
464
464
  tableName: "workflow_run_attempts";
465
465
  dataType: "json";
466
466
  columnType: "PgJsonb";
467
- data: import("@shipfox/api-definitions").WorkflowModel;
467
+ data: import("@shipfox/api-definitions-dto").WorkflowModel | {
468
+ version: 1;
469
+ model: import("@shipfox/api-definitions-dto").WorkflowModel;
470
+ };
468
471
  driverParam: unknown;
469
472
  notNull: false;
470
473
  hasDefault: false;
@@ -476,7 +479,10 @@ export declare const schema: {
476
479
  identity: undefined;
477
480
  generated: undefined;
478
481
  }, {}, {
479
- $type: import("@shipfox/api-definitions").WorkflowModel;
482
+ $type: import("@shipfox/api-definitions-dto").WorkflowModel | {
483
+ version: 1;
484
+ model: import("@shipfox/api-definitions-dto").WorkflowModel;
485
+ };
480
486
  }>;
481
487
  agentToolMaterialization: import("drizzle-orm/pg-core").PgColumn<{
482
488
  name: "agent_tool_materialization";
@@ -2941,7 +2947,10 @@ export declare function db(): NodePgDatabase<{
2941
2947
  tableName: "workflow_run_attempts";
2942
2948
  dataType: "json";
2943
2949
  columnType: "PgJsonb";
2944
- data: import("@shipfox/api-definitions").WorkflowModel;
2950
+ data: import("@shipfox/api-definitions-dto").WorkflowModel | {
2951
+ version: 1;
2952
+ model: import("@shipfox/api-definitions-dto").WorkflowModel;
2953
+ };
2945
2954
  driverParam: unknown;
2946
2955
  notNull: false;
2947
2956
  hasDefault: false;
@@ -2953,7 +2962,10 @@ export declare function db(): NodePgDatabase<{
2953
2962
  identity: undefined;
2954
2963
  generated: undefined;
2955
2964
  }, {}, {
2956
- $type: import("@shipfox/api-definitions").WorkflowModel;
2965
+ $type: import("@shipfox/api-definitions-dto").WorkflowModel | {
2966
+ version: 1;
2967
+ model: import("@shipfox/api-definitions-dto").WorkflowModel;
2968
+ };
2957
2969
  }>;
2958
2970
  agentToolMaterialization: import("drizzle-orm/pg-core").PgColumn<{
2959
2971
  name: "agent_tool_materialization";
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAWnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASlB,CAAC;AAIF,wBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGjB;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAI5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzE"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAWnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASlB,CAAC;AAIF,wBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGjB;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAI5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzE"}
@@ -1,4 +1,7 @@
1
- import type { AgentDefaultsResolver } from '@shipfox/api-agent/core/resolve-agent-config';
1
+ import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
2
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
3
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
4
+ import { type AgentDefaultsResolver } from '#core/agent-defaults.js';
2
5
  import { type JobStatus, type ResolutionReason } from '#core/entities/job.js';
3
6
  import type { JobExecutionStatus } from '#core/entities/job-execution.js';
4
7
  export interface ActivateJobListenerParams {
@@ -28,7 +31,10 @@ export interface DrainListenerEventsParams {
28
31
  jobId: string;
29
32
  expectedSequence: number;
30
33
  maxSize?: number | undefined;
34
+ integrations?: IntegrationsModuleClient | undefined;
35
+ projects?: ProjectsModuleClient | undefined;
31
36
  resolveAgentDefaults?: AgentDefaultsResolver | undefined;
37
+ agent?: AgentInterModuleClient | undefined;
32
38
  }
33
39
  export declare function drainListenerEventsIntoExecution(params: DrainListenerEventsParams): Promise<DrainListenerEventsResult>;
34
40
  export interface ListenerBufferPeek {
@@ -1 +1 @@
1
- {"version":3,"file":"job-listeners.d.ts","sourceRoot":"","sources":["../../src/db/job-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAC;AAOxF,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAC,kBAAkB,EAAyB,MAAM,iCAAiC,CAAC;AAkChG,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAyFpC;AAED,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,GACD;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAC,GAC3B;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC1D;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAqDpC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB7F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC,CAchE;AAwFD,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,kBAAkB,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;CAC7D,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAM5D"}
1
+ {"version":3,"file":"job-listeners.d.ts","sourceRoot":"","sources":["../../src/db/job-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAMpE,OAAO,EAAC,KAAK,qBAAqB,EAA8B,MAAM,yBAAyB,CAAC;AAEhG,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAC,kBAAkB,EAAyB,MAAM,iCAAiC,CAAC;AAkChG,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAyFpC;AAED,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,GACD;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAC,GAC3B;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,KAAK,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CA6DpC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB7F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC,CAchE;AAwFD,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,kBAAkB,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;CAC7D,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAM5D"}