@shipfox/api-workflows 4.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +104 -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 +41 -44
  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,27 +1,32 @@
1
- import { catalogDefaultAgentResolver } from '@shipfox/api-agent/core/resolve-agent-config';
2
- import { createWorkspaceAgentDefaultsResolver } from '@shipfox/api-agent/core/workspace-agent-defaults-resolver';
3
- import { getDefinitionById } from '@shipfox/api-definitions';
1
+ import { workflowModelFromSnapshot } from '@shipfox/api-definitions-dto';
4
2
  import { createWorkflowRun } from '#db/workflow-runs.js';
3
+ import { createAgentDefaultsResolver } from './agent-defaults.js';
5
4
  import { DefinitionNotFoundError, ProjectMismatchError } from './errors.js';
6
5
  import { modelHasAgentStep } from './step-config/materialize-workflow-model.js';
7
- export async function runWorkflow(params) {
8
- const definition = await getDefinitionById(params.definitionId);
6
+ export async function runWorkflow(definitions, params, options = {}) {
7
+ const { definition } = await definitions.getDefinitionForWorkflowRun({
8
+ definitionId: params.definitionId
9
+ });
9
10
  if (!definition) throw new DefinitionNotFoundError(params.definitionId);
10
11
  if (definition.projectId !== params.projectId) {
11
12
  throw new ProjectMismatchError(definition.projectId, params.projectId);
12
13
  }
13
- const resolveAgentDefaults = modelHasAgentStep(definition.model) ? await createWorkspaceAgentDefaultsResolver(params.workspaceId) : catalogDefaultAgentResolver;
14
+ const model = workflowModelFromSnapshot(definition.model);
15
+ const resolveAgentDefaults = createAgentDefaultsResolver(params.agent, modelHasAgentStep(model) ? params.workspaceId : null);
14
16
  return createWorkflowRun({
15
17
  workspaceId: params.workspaceId,
16
18
  projectId: params.projectId,
17
19
  definitionId: definition.id,
18
20
  name: definition.name,
19
- model: definition.model,
21
+ model,
20
22
  triggerPayload: params.triggerPayload,
21
23
  inputs: params.inputs,
22
24
  sourceSnapshot: definition.sourceSnapshot,
23
25
  triggerIdempotencyKey: params.triggerIdempotencyKey,
24
- resolveAgentDefaults
26
+ resolveAgentDefaults,
27
+ secrets: options.secrets,
28
+ integrations: params.integrations,
29
+ projects: params.projects
25
30
  });
26
31
  }
27
32
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/run-workflow.ts"],"sourcesContent":["import {catalogDefaultAgentResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport {createWorkspaceAgentDefaultsResolver} from '@shipfox/api-agent/core/workspace-agent-defaults-resolver';\nimport {getDefinitionById} from '@shipfox/api-definitions';\nimport {createWorkflowRun} from '#db/workflow-runs.js';\nimport type {TriggerPayload, WorkflowRun} from './entities/workflow-run.js';\nimport {DefinitionNotFoundError, ProjectMismatchError} from './errors.js';\nimport {modelHasAgentStep} from './step-config/materialize-workflow-model.js';\n\nexport interface RunWorkflowParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | undefined;\n triggerIdempotencyKey?: string | undefined;\n}\n\nexport async function runWorkflow(params: RunWorkflowParams): Promise<WorkflowRun> {\n const definition = await getDefinitionById(params.definitionId);\n if (!definition) throw new DefinitionNotFoundError(params.definitionId);\n\n if (definition.projectId !== params.projectId) {\n throw new ProjectMismatchError(definition.projectId, params.projectId);\n }\n const resolveAgentDefaults = modelHasAgentStep(definition.model)\n ? await createWorkspaceAgentDefaultsResolver(params.workspaceId)\n : catalogDefaultAgentResolver;\n\n return createWorkflowRun({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: definition.id,\n name: definition.name,\n model: definition.model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs,\n sourceSnapshot: definition.sourceSnapshot,\n triggerIdempotencyKey: params.triggerIdempotencyKey,\n resolveAgentDefaults,\n });\n}\n"],"names":["catalogDefaultAgentResolver","createWorkspaceAgentDefaultsResolver","getDefinitionById","createWorkflowRun","DefinitionNotFoundError","ProjectMismatchError","modelHasAgentStep","runWorkflow","params","definition","definitionId","projectId","resolveAgentDefaults","model","workspaceId","id","name","triggerPayload","inputs","sourceSnapshot","triggerIdempotencyKey"],"mappings":"AAAA,SAAQA,2BAA2B,QAAO,+CAA+C;AACzF,SAAQC,oCAAoC,QAAO,4DAA4D;AAC/G,SAAQC,iBAAiB,QAAO,2BAA2B;AAC3D,SAAQC,iBAAiB,QAAO,uBAAuB;AAEvD,SAAQC,uBAAuB,EAAEC,oBAAoB,QAAO,cAAc;AAC1E,SAAQC,iBAAiB,QAAO,8CAA8C;AAW9E,OAAO,eAAeC,YAAYC,MAAyB;IACzD,MAAMC,aAAa,MAAMP,kBAAkBM,OAAOE,YAAY;IAC9D,IAAI,CAACD,YAAY,MAAM,IAAIL,wBAAwBI,OAAOE,YAAY;IAEtE,IAAID,WAAWE,SAAS,KAAKH,OAAOG,SAAS,EAAE;QAC7C,MAAM,IAAIN,qBAAqBI,WAAWE,SAAS,EAAEH,OAAOG,SAAS;IACvE;IACA,MAAMC,uBAAuBN,kBAAkBG,WAAWI,KAAK,IAC3D,MAAMZ,qCAAqCO,OAAOM,WAAW,IAC7Dd;IAEJ,OAAOG,kBAAkB;QACvBW,aAAaN,OAAOM,WAAW;QAC/BH,WAAWH,OAAOG,SAAS;QAC3BD,cAAcD,WAAWM,EAAE;QAC3BC,MAAMP,WAAWO,IAAI;QACrBH,OAAOJ,WAAWI,KAAK;QACvBI,gBAAgBT,OAAOS,cAAc;QACrCC,QAAQV,OAAOU,MAAM;QACrBC,gBAAgBV,WAAWU,cAAc;QACzCC,uBAAuBZ,OAAOY,qBAAqB;QACnDR;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/core/run-workflow.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport {workflowModelFromSnapshot} from '@shipfox/api-definitions-dto';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {createWorkflowRun} from '#db/workflow-runs.js';\nimport {createAgentDefaultsResolver} from './agent-defaults.js';\nimport type {TriggerPayload, WorkflowRun} from './entities/workflow-run.js';\nimport {DefinitionNotFoundError, ProjectMismatchError} from './errors.js';\nimport {modelHasAgentStep} from './step-config/materialize-workflow-model.js';\n\nexport interface RunWorkflowParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | undefined;\n triggerIdempotencyKey?: string | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function runWorkflow(\n definitions: DefinitionsInterModuleClient,\n params: RunWorkflowParams & {agent: AgentInterModuleClient},\n options: {secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>} = {},\n): Promise<WorkflowRun> {\n const {definition} = await definitions.getDefinitionForWorkflowRun({\n definitionId: params.definitionId,\n });\n if (!definition) throw new DefinitionNotFoundError(params.definitionId);\n\n if (definition.projectId !== params.projectId) {\n throw new ProjectMismatchError(definition.projectId, params.projectId);\n }\n const model = workflowModelFromSnapshot(definition.model);\n const resolveAgentDefaults = createAgentDefaultsResolver(\n params.agent,\n modelHasAgentStep(model) ? params.workspaceId : null,\n );\n\n return createWorkflowRun({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: definition.id,\n name: definition.name,\n model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs,\n sourceSnapshot: definition.sourceSnapshot,\n triggerIdempotencyKey: params.triggerIdempotencyKey,\n resolveAgentDefaults,\n secrets: options.secrets,\n integrations: params.integrations,\n projects: params.projects,\n });\n}\n"],"names":["workflowModelFromSnapshot","createWorkflowRun","createAgentDefaultsResolver","DefinitionNotFoundError","ProjectMismatchError","modelHasAgentStep","runWorkflow","definitions","params","options","definition","getDefinitionForWorkflowRun","definitionId","projectId","model","resolveAgentDefaults","agent","workspaceId","id","name","triggerPayload","inputs","sourceSnapshot","triggerIdempotencyKey","secrets","integrations","projects"],"mappings":"AACA,SAAQA,yBAAyB,QAAO,+BAA+B;AAKvE,SAAQC,iBAAiB,QAAO,uBAAuB;AACvD,SAAQC,2BAA2B,QAAO,sBAAsB;AAEhE,SAAQC,uBAAuB,EAAEC,oBAAoB,QAAO,cAAc;AAC1E,SAAQC,iBAAiB,QAAO,8CAA8C;AAa9E,OAAO,eAAeC,YACpBC,WAAyC,EACzCC,MAA2D,EAC3DC,UAAiF,CAAC,CAAC;IAEnF,MAAM,EAACC,UAAU,EAAC,GAAG,MAAMH,YAAYI,2BAA2B,CAAC;QACjEC,cAAcJ,OAAOI,YAAY;IACnC;IACA,IAAI,CAACF,YAAY,MAAM,IAAIP,wBAAwBK,OAAOI,YAAY;IAEtE,IAAIF,WAAWG,SAAS,KAAKL,OAAOK,SAAS,EAAE;QAC7C,MAAM,IAAIT,qBAAqBM,WAAWG,SAAS,EAAEL,OAAOK,SAAS;IACvE;IACA,MAAMC,QAAQd,0BAA0BU,WAAWI,KAAK;IACxD,MAAMC,uBAAuBb,4BAC3BM,OAAOQ,KAAK,EACZX,kBAAkBS,SAASN,OAAOS,WAAW,GAAG;IAGlD,OAAOhB,kBAAkB;QACvBgB,aAAaT,OAAOS,WAAW;QAC/BJ,WAAWL,OAAOK,SAAS;QAC3BD,cAAcF,WAAWQ,EAAE;QAC3BC,MAAMT,WAAWS,IAAI;QACrBL;QACAM,gBAAgBZ,OAAOY,cAAc;QACrCC,QAAQb,OAAOa,MAAM;QACrBC,gBAAgBZ,WAAWY,cAAc;QACzCC,uBAAuBf,OAAOe,qBAAqB;QACnDR;QACAS,SAASf,QAAQe,OAAO;QACxBC,cAAcjB,OAAOiB,YAAY;QACjCC,UAAUlB,OAAOkB,QAAQ;IAC3B;AACF"}
@@ -1,6 +1,6 @@
1
- import type { AgentDefaultsResolver } from '@shipfox/api-agent/core/resolve-agent-config';
2
1
  import { type AgentThinking } from '@shipfox/api-agent-dto';
3
- import type { WorkflowModel } from '@shipfox/api-definitions';
2
+ import type { WorkflowModel } from '@shipfox/api-definitions-dto';
3
+ import type { AgentDefaultsResolver, ResolvedAgentDefaults } from '#core/agent-defaults.js';
4
4
  import { type AgentToolMaterializationContext, type AgentToolMaterializationSnapshot } from '#core/agent-tools.js';
5
5
  import type { PersistedEvaluationTraceEntry, StepConfigDispatchPlan } from '#core/entities/step.js';
6
6
  import { type WorkflowStepEvaluationTraceEntry, type WorkflowStepTemplateDiagnostic } from './fields.js';
@@ -17,7 +17,7 @@ export interface ResolveAgentStepConfigParams {
17
17
  readonly context: WorkflowEvaluationContext;
18
18
  readonly mode: StepConfigMode;
19
19
  readonly definitionId: string;
20
- readonly resolveAgentDefaults: AgentDefaultsResolver;
20
+ readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;
21
21
  readonly agentToolContext?: AgentToolMaterializationContext | undefined;
22
22
  readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;
23
23
  }
@@ -28,22 +28,22 @@ export interface AgentStepConfig {
28
28
  readonly trace: readonly WorkflowStepEvaluationTraceEntry[];
29
29
  readonly hasTemplates: boolean;
30
30
  }
31
- export declare function resolveAgentStepConfig(params: ResolveAgentStepConfigParams): AgentStepConfig;
31
+ export declare function resolveAgentStepConfig(params: ResolveAgentStepConfigParams): Promise<AgentStepConfig>;
32
32
  export declare function completeAgentConfig(params: {
33
33
  readonly config: Record<string, unknown>;
34
34
  readonly plan: StepConfigDispatchPlan;
35
35
  readonly context: WorkflowEvaluationContext;
36
- readonly resolveAgentDefaults: AgentDefaultsResolver;
36
+ readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;
37
37
  readonly definitionId: string;
38
38
  readonly trace: PersistedEvaluationTraceEntry[];
39
- }): void;
39
+ }): Promise<void>;
40
40
  export declare function completeAgentDefaults(params: {
41
41
  readonly harness: WorkflowModelAgentStep['harness'] | undefined;
42
42
  readonly provider: string | undefined;
43
43
  readonly model: string | undefined;
44
44
  readonly thinking: AgentThinking | undefined;
45
- readonly resolveAgentDefaults: AgentDefaultsResolver;
45
+ readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;
46
46
  readonly definitionId: string;
47
- }): ReturnType<AgentDefaultsResolver>;
47
+ }): Promise<ResolvedAgentDefaults>;
48
48
  export {};
49
49
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAGhE,OAAO,KAAK,EAAC,qBAAqB,EAAE,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EAEtC,MAAM,sBAAsB,CAAC;AAC9B,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,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAC,CAAC;AAC1E,KAAK,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAc/C,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAED,MAAM,WAAW,eAAe;IAC9B,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,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED,wBAAsB,mBAAmB,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,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,6BAA6B,EAAE,CAAC;CACjD,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDhB;AAsBD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmBjC"}
@@ -1,17 +1,18 @@
1
- import { InvalidAgentModelError, UnsupportedHarnessProviderError, UnsupportedHarnessThinkingError, UnsupportedModelProviderError } from '@shipfox/api-agent/core/errors';
2
1
  import { AGENT_INTEGRATION_MCP_AUTH, AGENT_INTEGRATION_MCP_ENDPOINT, AGENT_INTEGRATION_MCP_SERVER_NAME, AGENT_INTEGRATION_MCP_TRANSPORT } from '@shipfox/api-agent-dto';
2
+ import { agentInterModuleContract } from '@shipfox/api-agent-dto/inter-module';
3
+ import { isInterModuleKnownError } from '@shipfox/inter-module';
3
4
  import { materializeAgentIntegrations } from '#core/agent-tools.js';
4
5
  import { AgentConfigUnresolvableError } from '#core/errors.js';
5
6
  import { completeStepFieldWithTrace, literalField, resolveStepField } from './fields.js';
6
- export function resolveAgentStepConfig(params) {
7
+ export async function resolveAgentStepConfig(params) {
7
8
  const fields = resolveAgentFields(params);
8
9
  const usesAuthoredMode = params.mode === 'authored';
9
10
  if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);
10
11
  const hasDeferredModelOrProvider = fields.model?.kind === 'residual' || fields.provider?.kind === 'residual';
11
12
  if (hasDeferredModelOrProvider) return deferredAgentStepConfig(params, fields);
12
- return agentStepConfigWithDefaults(params.step, params, fields);
13
+ return await agentStepConfigWithDefaults(params.step, params, fields);
13
14
  }
14
- export function completeAgentConfig(params) {
15
+ export async function completeAgentConfig(params) {
15
16
  const agent = params.plan.agent;
16
17
  if (agent === undefined) return;
17
18
  const prompt = agent.prompt === undefined ? readConfigString(params.config, 'prompt') : completeAgentField({
@@ -29,7 +30,7 @@ export function completeAgentConfig(params) {
29
30
  template: agent.provider,
30
31
  params
31
32
  });
32
- const defaults = completeAgentDefaults({
33
+ const defaults = await completeAgentDefaults({
33
34
  harness: agent.harness ?? readConfigHarness(params.config),
34
35
  provider,
35
36
  model,
@@ -68,16 +69,17 @@ function completeAgentField(args) {
68
69
  })));
69
70
  return resolved.value;
70
71
  }
71
- export function completeAgentDefaults(params) {
72
+ export async function completeAgentDefaults(params) {
73
+ if (!params.resolveAgentDefaults) throw new Error('Agent defaults resolver is required');
72
74
  try {
73
- return params.resolveAgentDefaults({
75
+ return await params.resolveAgentDefaults({
74
76
  harness: params.harness,
75
77
  provider: params.provider,
76
78
  model: params.model,
77
79
  thinking: params.thinking
78
80
  });
79
81
  } catch (error) {
80
- if (error instanceof UnsupportedModelProviderError || error instanceof UnsupportedHarnessProviderError || error instanceof UnsupportedHarnessThinkingError || error instanceof InvalidAgentModelError) {
82
+ if (isInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, error) && error.code === 'agent-config-invalid') {
81
83
  throw new AgentConfigUnresolvableError(params.definitionId, {
82
84
  cause: error
83
85
  });
@@ -181,11 +183,11 @@ function deferredAgentStepConfig(params, fields) {
181
183
  hasTemplates: fields.hasTemplates
182
184
  };
183
185
  }
184
- function agentStepConfigWithDefaults(step, params, fields) {
186
+ async function agentStepConfigWithDefaults(step, params, fields) {
185
187
  const providerValue = frozenFieldValue(fields.provider);
186
188
  const modelValue = frozenFieldValue(fields.model);
187
189
  const promptIsDeferred = fields.prompt.kind === 'residual';
188
- const resolved = completeAgentDefaults({
190
+ const resolved = await completeAgentDefaults({
189
191
  harness: step.harness,
190
192
  provider: providerValue,
191
193
  model: modelValue,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/agent.ts"],"sourcesContent":["import {\n InvalidAgentModelError,\n UnsupportedHarnessProviderError,\n UnsupportedHarnessThinkingError,\n UnsupportedModelProviderError,\n} from '@shipfox/api-agent/core/errors';\nimport type {AgentDefaultsResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport {\n AGENT_INTEGRATION_MCP_AUTH,\n AGENT_INTEGRATION_MCP_ENDPOINT,\n AGENT_INTEGRATION_MCP_SERVER_NAME,\n AGENT_INTEGRATION_MCP_TRANSPORT,\n type AgentIntegrationMcpServerConfigDto,\n type AgentThinking,\n type MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport type {WorkflowModel} from '@shipfox/api-definitions';\nimport type {ResolvedField, SiteResolvedField} from '@shipfox/expression';\nimport {\n type AgentToolMaterializationContext,\n type AgentToolMaterializationSnapshot,\n materializeAgentIntegrations,\n} from '#core/agent-tools.js';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {AgentConfigUnresolvableError} from '#core/errors.js';\nimport {\n completeStepFieldWithTrace,\n literalField,\n resolveStepField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype StepConfigMode = 'effective' | 'authored';\ntype FieldResolution =\n | {readonly kind: 'frozen'; readonly value: string}\n | {readonly kind: 'residual'; readonly field: ResolvedField};\n\ninterface AgentFieldResolutions {\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly prompt: FieldResolution;\n readonly model: FieldResolution | undefined;\n readonly provider: FieldResolution | undefined;\n readonly hasTemplates: boolean;\n}\n\nexport interface ResolveAgentStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelAgentStep;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n readonly resolveAgentDefaults: AgentDefaultsResolver;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface AgentStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport function resolveAgentStepConfig(params: ResolveAgentStepConfigParams): AgentStepConfig {\n const fields = resolveAgentFields(params);\n const usesAuthoredMode = params.mode === 'authored';\n\n if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);\n\n const hasDeferredModelOrProvider =\n fields.model?.kind === 'residual' || fields.provider?.kind === 'residual';\n if (hasDeferredModelOrProvider) return deferredAgentStepConfig(params, fields);\n\n return agentStepConfigWithDefaults(params.step, params, fields);\n}\n\nexport function completeAgentConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults: AgentDefaultsResolver;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): void {\n const agent = params.plan.agent;\n if (agent === undefined) return;\n\n const prompt =\n agent.prompt === undefined\n ? readConfigString(params.config, 'prompt')\n : completeAgentField({\n field: 'agent.prompt',\n template: agent.prompt,\n params,\n });\n const model =\n agent.model === undefined\n ? readConfigString(params.config, 'model')\n : completeAgentField({\n field: 'agent.model',\n template: agent.model,\n params,\n });\n const provider =\n agent.provider === undefined\n ? readConfigString(params.config, 'provider')\n : completeAgentField({\n field: 'agent.provider',\n template: agent.provider,\n params,\n });\n\n const defaults = completeAgentDefaults({\n harness: agent.harness ?? readConfigHarness(params.config),\n provider,\n model,\n thinking: agent.thinking ?? readConfigThinking(params.config),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n params.config.harness = defaults.harness;\n params.config.provider = defaults.provider;\n params.config.model = defaults.model;\n params.config.thinking = defaults.thinking;\n params.config.prompt = prompt;\n if (agent.tools !== undefined) params.config.tools = [...agent.tools];\n const integrations = agent.integrations === undefined ? undefined : [...agent.integrations];\n if (integrations !== undefined) params.config.integrations = integrations;\n const mcpServers =\n agent.mcpServers ??\n (integrations === undefined ? undefined : agentIntegrationMcpServers(integrations));\n if (mcpServers !== undefined) params.config.mcpServers = [...mcpServers];\n}\n\nfunction completeAgentField(args: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly template: ResolvedField;\n readonly params: {\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n };\n}): string {\n const resolved = completeStepFieldWithTrace({\n field: args.field,\n errorField: args.field,\n template: args.template,\n context: args.params.context,\n definitionId: args.params.definitionId,\n });\n args.params.trace.push(...resolved.trace.map((entry) => ({...entry, field: args.field})));\n return resolved.value;\n}\n\nexport function completeAgentDefaults(params: {\n readonly harness: WorkflowModelAgentStep['harness'] | undefined;\n readonly provider: string | undefined;\n readonly model: string | undefined;\n readonly thinking: AgentThinking | undefined;\n readonly resolveAgentDefaults: AgentDefaultsResolver;\n readonly definitionId: string;\n}): ReturnType<AgentDefaultsResolver> {\n try {\n return params.resolveAgentDefaults({\n harness: params.harness,\n provider: params.provider,\n model: params.model,\n thinking: params.thinking,\n });\n } catch (error) {\n if (\n error instanceof UnsupportedModelProviderError ||\n error instanceof UnsupportedHarnessProviderError ||\n error instanceof UnsupportedHarnessThinkingError ||\n error instanceof InvalidAgentModelError\n ) {\n throw new AgentConfigUnresolvableError(params.definitionId, {cause: error});\n }\n throw error;\n }\n}\n\nfunction resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldResolutions {\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const prompt = resolveAgentField({\n field: 'agent.prompt',\n value: params.step.prompt,\n template: params.step.templates?.prompt,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const model = resolveOptionalAgentField({\n field: 'agent.model',\n value: params.step.model,\n template: params.step.templates?.model,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const provider = resolveOptionalAgentField({\n field: 'agent.provider',\n value: params.step.provider,\n template: params.step.templates?.provider,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const hasTemplates =\n params.step.templates?.prompt !== undefined ||\n params.step.templates?.model !== undefined ||\n params.step.templates?.provider !== undefined;\n\n return {diagnostics, trace, prompt, model, provider, hasTemplates};\n}\n\nfunction authoredAgentStepConfig(\n step: WorkflowModelAgentStep,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n return {\n config: {\n ...(step.provider === undefined ? {} : {provider: step.provider}),\n ...(step.model === undefined ? {} : {model: step.model}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...authoredAgentIntegrationsConfig(step),\n prompt: step.prompt,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction deferredAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const {step} = params;\n return {\n config: {},\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),\n ...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentStepConfigWithDefaults(\n step: WorkflowModelAgentStep,\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const providerValue = frozenFieldValue(fields.provider);\n const modelValue = frozenFieldValue(fields.model);\n const promptIsDeferred = fields.prompt.kind === 'residual';\n\n const resolved = completeAgentDefaults({\n harness: step.harness,\n provider: providerValue,\n model: modelValue,\n thinking: step.thinking,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n if (promptIsDeferred) {\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n },\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n }\n\n const promptValue = frozenFieldValue(fields.prompt) ?? step.prompt;\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n prompt: promptValue,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentToolsConfig(\n step: WorkflowModelAgentStep,\n): {readonly tools: readonly string[]} | Record<string, never> {\n return step.tools === undefined ? {} : {tools: [...step.tools]};\n}\n\nfunction authoredAgentIntegrationsConfig(\n step: WorkflowModelAgentStep,\n):\n | {readonly integrations: NonNullable<WorkflowModelAgentStep['integrations']>}\n | Record<string, never> {\n return step.integrations === undefined ? {} : {integrations: step.integrations};\n}\n\nfunction materializedAgentIntegrationsConfig(params: ResolveAgentStepConfigParams):\n | {\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n readonly mcpServers: readonly AgentIntegrationMcpServerConfigDto[];\n }\n | Record<string, never> {\n const integrations = materializeAgentIntegrations({\n jobKey: params.jobKey,\n stepId: params.step.id,\n integrations: params.step.integrations,\n context: params.agentToolContext,\n snapshot: params.agentToolSnapshot,\n });\n return integrations === undefined\n ? {}\n : {integrations, mcpServers: agentIntegrationMcpServers(integrations)};\n}\n\nfunction agentIntegrationMcpServers(\n integrations: readonly MaterializedAgentIntegrationConfigDto[],\n): readonly AgentIntegrationMcpServerConfigDto[] {\n return [\n {\n name: AGENT_INTEGRATION_MCP_SERVER_NAME,\n transport: AGENT_INTEGRATION_MCP_TRANSPORT,\n endpoint: AGENT_INTEGRATION_MCP_ENDPOINT,\n auth: AGENT_INTEGRATION_MCP_AUTH,\n integrations: [...integrations],\n },\n ];\n}\n\nfunction dispatchPlanField(field: FieldResolution): ResolvedField {\n const isResidual = field.kind === 'residual';\n return isResidual ? field.field : literalField(field.value);\n}\n\nfunction frozenFieldValue(field: FieldResolution | undefined): string | undefined {\n const isFrozen = field?.kind === 'frozen';\n return isFrozen ? field.value : undefined;\n}\n\nfunction resolveAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution {\n const hasTemplate = params.template !== undefined;\n const usesAuthoredMode = params.mode === 'authored';\n if (!hasTemplate || usesAuthoredMode) {\n return {kind: 'frozen', value: params.value};\n }\n\n const resolved = resolveStepField({\n field: params.field,\n template: {segments: params.template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: params.field,\n });\n params.diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: params.field})),\n );\n params.trace.push(...resolved.trace.map((entry) => ({...entry, field: params.field})));\n return fieldResolution(resolved);\n}\n\nfunction resolveOptionalAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string | undefined;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution | undefined {\n const hasValue = params.value !== undefined;\n if (!hasValue) return undefined;\n return resolveAgentField({...params, value: params.value});\n}\n\nfunction fieldResolution(resolved: SiteResolvedField): FieldResolution {\n if (resolved.kind === 'residual') return {kind: 'residual', field: resolved.field};\n return {kind: 'frozen', value: resolved.value};\n}\n\nfunction readConfigString(config: Record<string, unknown>, key: string): string | undefined {\n const value = config[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readConfigThinking(config: Record<string, unknown>): AgentThinking | undefined {\n const value = config.thinking;\n return value === 'off' ||\n value === 'minimal' ||\n value === 'low' ||\n value === 'medium' ||\n value === 'high' ||\n value === 'xhigh'\n ? value\n : undefined;\n}\n\nfunction readConfigHarness(\n config: Record<string, unknown>,\n): WorkflowModelAgentStep['harness'] | undefined {\n return config.harness === 'pi' || config.harness === 'claude' ? config.harness : undefined;\n}\n"],"names":["InvalidAgentModelError","UnsupportedHarnessProviderError","UnsupportedHarnessThinkingError","UnsupportedModelProviderError","AGENT_INTEGRATION_MCP_AUTH","AGENT_INTEGRATION_MCP_ENDPOINT","AGENT_INTEGRATION_MCP_SERVER_NAME","AGENT_INTEGRATION_MCP_TRANSPORT","materializeAgentIntegrations","AgentConfigUnresolvableError","completeStepFieldWithTrace","literalField","resolveStepField","resolveAgentStepConfig","params","fields","resolveAgentFields","usesAuthoredMode","mode","authoredAgentStepConfig","step","hasDeferredModelOrProvider","model","kind","provider","deferredAgentStepConfig","agentStepConfigWithDefaults","completeAgentConfig","agent","plan","undefined","prompt","readConfigString","config","completeAgentField","field","template","defaults","completeAgentDefaults","harness","readConfigHarness","thinking","readConfigThinking","resolveAgentDefaults","definitionId","tools","integrations","mcpServers","agentIntegrationMcpServers","args","resolved","errorField","context","trace","push","map","entry","value","error","cause","diagnostics","resolveAgentField","templates","resolveOptionalAgentField","hasTemplates","agentToolsConfig","authoredAgentIntegrationsConfig","configPlan","dispatchPlanField","materializedAgentIntegrationsConfig","providerValue","frozenFieldValue","modelValue","promptIsDeferred","promptValue","jobKey","stepId","id","agentToolContext","snapshot","agentToolSnapshot","name","transport","endpoint","auth","isResidual","isFrozen","hasTemplate","segments","diagnostic","fieldResolution","hasValue","key"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/step-config/agent.ts"],"sourcesContent":["import {\n AGENT_INTEGRATION_MCP_AUTH,\n AGENT_INTEGRATION_MCP_ENDPOINT,\n AGENT_INTEGRATION_MCP_SERVER_NAME,\n AGENT_INTEGRATION_MCP_TRANSPORT,\n type AgentIntegrationMcpServerConfigDto,\n type AgentThinking,\n type MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {ResolvedField, SiteResolvedField} from '@shipfox/expression';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport type {AgentDefaultsResolver, ResolvedAgentDefaults} from '#core/agent-defaults.js';\nimport {\n type AgentToolMaterializationContext,\n type AgentToolMaterializationSnapshot,\n materializeAgentIntegrations,\n} from '#core/agent-tools.js';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {AgentConfigUnresolvableError} from '#core/errors.js';\nimport {\n completeStepFieldWithTrace,\n literalField,\n resolveStepField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype StepConfigMode = 'effective' | 'authored';\ntype FieldResolution =\n | {readonly kind: 'frozen'; readonly value: string}\n | {readonly kind: 'residual'; readonly field: ResolvedField};\n\ninterface AgentFieldResolutions {\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly prompt: FieldResolution;\n readonly model: FieldResolution | undefined;\n readonly provider: FieldResolution | undefined;\n readonly hasTemplates: boolean;\n}\n\nexport interface ResolveAgentStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelAgentStep;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface AgentStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n): Promise<AgentStepConfig> {\n const fields = resolveAgentFields(params);\n const usesAuthoredMode = params.mode === 'authored';\n\n if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);\n\n const hasDeferredModelOrProvider =\n fields.model?.kind === 'residual' || fields.provider?.kind === 'residual';\n if (hasDeferredModelOrProvider) return deferredAgentStepConfig(params, fields);\n\n return await agentStepConfigWithDefaults(params.step, params, fields);\n}\n\nexport async function completeAgentConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): Promise<void> {\n const agent = params.plan.agent;\n if (agent === undefined) return;\n\n const prompt =\n agent.prompt === undefined\n ? readConfigString(params.config, 'prompt')\n : completeAgentField({\n field: 'agent.prompt',\n template: agent.prompt,\n params,\n });\n const model =\n agent.model === undefined\n ? readConfigString(params.config, 'model')\n : completeAgentField({\n field: 'agent.model',\n template: agent.model,\n params,\n });\n const provider =\n agent.provider === undefined\n ? readConfigString(params.config, 'provider')\n : completeAgentField({\n field: 'agent.provider',\n template: agent.provider,\n params,\n });\n\n const defaults = await completeAgentDefaults({\n harness: agent.harness ?? readConfigHarness(params.config),\n provider,\n model,\n thinking: agent.thinking ?? readConfigThinking(params.config),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n params.config.harness = defaults.harness;\n params.config.provider = defaults.provider;\n params.config.model = defaults.model;\n params.config.thinking = defaults.thinking;\n params.config.prompt = prompt;\n if (agent.tools !== undefined) params.config.tools = [...agent.tools];\n const integrations = agent.integrations === undefined ? undefined : [...agent.integrations];\n if (integrations !== undefined) params.config.integrations = integrations;\n const mcpServers =\n agent.mcpServers ??\n (integrations === undefined ? undefined : agentIntegrationMcpServers(integrations));\n if (mcpServers !== undefined) params.config.mcpServers = [...mcpServers];\n}\n\nfunction completeAgentField(args: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly template: ResolvedField;\n readonly params: {\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n };\n}): string {\n const resolved = completeStepFieldWithTrace({\n field: args.field,\n errorField: args.field,\n template: args.template,\n context: args.params.context,\n definitionId: args.params.definitionId,\n });\n args.params.trace.push(...resolved.trace.map((entry) => ({...entry, field: args.field})));\n return resolved.value;\n}\n\nexport async function completeAgentDefaults(params: {\n readonly harness: WorkflowModelAgentStep['harness'] | undefined;\n readonly provider: string | undefined;\n readonly model: string | undefined;\n readonly thinking: AgentThinking | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n}): Promise<ResolvedAgentDefaults> {\n if (!params.resolveAgentDefaults) throw new Error('Agent defaults resolver is required');\n\n try {\n return await params.resolveAgentDefaults({\n harness: params.harness,\n provider: params.provider,\n model: params.model,\n thinking: params.thinking,\n });\n } catch (error) {\n if (\n isInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, error) &&\n error.code === 'agent-config-invalid'\n ) {\n throw new AgentConfigUnresolvableError(params.definitionId, {cause: error});\n }\n throw error;\n }\n}\n\nfunction resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldResolutions {\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const prompt = resolveAgentField({\n field: 'agent.prompt',\n value: params.step.prompt,\n template: params.step.templates?.prompt,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const model = resolveOptionalAgentField({\n field: 'agent.model',\n value: params.step.model,\n template: params.step.templates?.model,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const provider = resolveOptionalAgentField({\n field: 'agent.provider',\n value: params.step.provider,\n template: params.step.templates?.provider,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const hasTemplates =\n params.step.templates?.prompt !== undefined ||\n params.step.templates?.model !== undefined ||\n params.step.templates?.provider !== undefined;\n\n return {diagnostics, trace, prompt, model, provider, hasTemplates};\n}\n\nfunction authoredAgentStepConfig(\n step: WorkflowModelAgentStep,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n return {\n config: {\n ...(step.provider === undefined ? {} : {provider: step.provider}),\n ...(step.model === undefined ? {} : {model: step.model}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...authoredAgentIntegrationsConfig(step),\n prompt: step.prompt,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction deferredAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const {step} = params;\n return {\n config: {},\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),\n ...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nasync function agentStepConfigWithDefaults(\n step: WorkflowModelAgentStep,\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): Promise<AgentStepConfig> {\n const providerValue = frozenFieldValue(fields.provider);\n const modelValue = frozenFieldValue(fields.model);\n const promptIsDeferred = fields.prompt.kind === 'residual';\n\n const resolved = await completeAgentDefaults({\n harness: step.harness,\n provider: providerValue,\n model: modelValue,\n thinking: step.thinking,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n if (promptIsDeferred) {\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n },\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n }\n\n const promptValue = frozenFieldValue(fields.prompt) ?? step.prompt;\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n prompt: promptValue,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentToolsConfig(\n step: WorkflowModelAgentStep,\n): {readonly tools: readonly string[]} | Record<string, never> {\n return step.tools === undefined ? {} : {tools: [...step.tools]};\n}\n\nfunction authoredAgentIntegrationsConfig(\n step: WorkflowModelAgentStep,\n):\n | {readonly integrations: NonNullable<WorkflowModelAgentStep['integrations']>}\n | Record<string, never> {\n return step.integrations === undefined ? {} : {integrations: step.integrations};\n}\n\nfunction materializedAgentIntegrationsConfig(params: ResolveAgentStepConfigParams):\n | {\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n readonly mcpServers: readonly AgentIntegrationMcpServerConfigDto[];\n }\n | Record<string, never> {\n const integrations = materializeAgentIntegrations({\n jobKey: params.jobKey,\n stepId: params.step.id,\n integrations: params.step.integrations,\n context: params.agentToolContext,\n snapshot: params.agentToolSnapshot,\n });\n return integrations === undefined\n ? {}\n : {integrations, mcpServers: agentIntegrationMcpServers(integrations)};\n}\n\nfunction agentIntegrationMcpServers(\n integrations: readonly MaterializedAgentIntegrationConfigDto[],\n): readonly AgentIntegrationMcpServerConfigDto[] {\n return [\n {\n name: AGENT_INTEGRATION_MCP_SERVER_NAME,\n transport: AGENT_INTEGRATION_MCP_TRANSPORT,\n endpoint: AGENT_INTEGRATION_MCP_ENDPOINT,\n auth: AGENT_INTEGRATION_MCP_AUTH,\n integrations: [...integrations],\n },\n ];\n}\n\nfunction dispatchPlanField(field: FieldResolution): ResolvedField {\n const isResidual = field.kind === 'residual';\n return isResidual ? field.field : literalField(field.value);\n}\n\nfunction frozenFieldValue(field: FieldResolution | undefined): string | undefined {\n const isFrozen = field?.kind === 'frozen';\n return isFrozen ? field.value : undefined;\n}\n\nfunction resolveAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution {\n const hasTemplate = params.template !== undefined;\n const usesAuthoredMode = params.mode === 'authored';\n if (!hasTemplate || usesAuthoredMode) {\n return {kind: 'frozen', value: params.value};\n }\n\n const resolved = resolveStepField({\n field: params.field,\n template: {segments: params.template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: params.field,\n });\n params.diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: params.field})),\n );\n params.trace.push(...resolved.trace.map((entry) => ({...entry, field: params.field})));\n return fieldResolution(resolved);\n}\n\nfunction resolveOptionalAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string | undefined;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution | undefined {\n const hasValue = params.value !== undefined;\n if (!hasValue) return undefined;\n return resolveAgentField({...params, value: params.value});\n}\n\nfunction fieldResolution(resolved: SiteResolvedField): FieldResolution {\n if (resolved.kind === 'residual') return {kind: 'residual', field: resolved.field};\n return {kind: 'frozen', value: resolved.value};\n}\n\nfunction readConfigString(config: Record<string, unknown>, key: string): string | undefined {\n const value = config[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readConfigThinking(config: Record<string, unknown>): AgentThinking | undefined {\n const value = config.thinking;\n return value === 'off' ||\n value === 'minimal' ||\n value === 'low' ||\n value === 'medium' ||\n value === 'high' ||\n value === 'xhigh'\n ? value\n : undefined;\n}\n\nfunction readConfigHarness(\n config: Record<string, unknown>,\n): WorkflowModelAgentStep['harness'] | undefined {\n return config.harness === 'pi' || config.harness === 'claude' ? config.harness : undefined;\n}\n"],"names":["AGENT_INTEGRATION_MCP_AUTH","AGENT_INTEGRATION_MCP_ENDPOINT","AGENT_INTEGRATION_MCP_SERVER_NAME","AGENT_INTEGRATION_MCP_TRANSPORT","agentInterModuleContract","isInterModuleKnownError","materializeAgentIntegrations","AgentConfigUnresolvableError","completeStepFieldWithTrace","literalField","resolveStepField","resolveAgentStepConfig","params","fields","resolveAgentFields","usesAuthoredMode","mode","authoredAgentStepConfig","step","hasDeferredModelOrProvider","model","kind","provider","deferredAgentStepConfig","agentStepConfigWithDefaults","completeAgentConfig","agent","plan","undefined","prompt","readConfigString","config","completeAgentField","field","template","defaults","completeAgentDefaults","harness","readConfigHarness","thinking","readConfigThinking","resolveAgentDefaults","definitionId","tools","integrations","mcpServers","agentIntegrationMcpServers","args","resolved","errorField","context","trace","push","map","entry","value","Error","error","methods","resolveAgentConfig","code","cause","diagnostics","resolveAgentField","templates","resolveOptionalAgentField","hasTemplates","agentToolsConfig","authoredAgentIntegrationsConfig","configPlan","dispatchPlanField","materializedAgentIntegrationsConfig","providerValue","frozenFieldValue","modelValue","promptIsDeferred","promptValue","jobKey","stepId","id","agentToolContext","snapshot","agentToolSnapshot","name","transport","endpoint","auth","isResidual","isFrozen","hasTemplate","segments","diagnostic","fieldResolution","hasValue","key"],"mappings":"AAAA,SACEA,0BAA0B,EAC1BC,8BAA8B,EAC9BC,iCAAiC,EACjCC,+BAA+B,QAI1B,yBAAyB;AAChC,SAAQC,wBAAwB,QAAO,sCAAsC;AAG7E,SAAQC,uBAAuB,QAAO,wBAAwB;AAE9D,SAGEC,4BAA4B,QACvB,uBAAuB;AAE9B,SAAQC,4BAA4B,QAAO,kBAAkB;AAC7D,SACEC,0BAA0B,EAC1BC,YAAY,EACZC,gBAAgB,QAGX,cAAc;AAuCrB,OAAO,eAAeC,uBACpBC,MAAoC;IAEpC,MAAMC,SAASC,mBAAmBF;IAClC,MAAMG,mBAAmBH,OAAOI,IAAI,KAAK;IAEzC,IAAID,kBAAkB,OAAOE,wBAAwBL,OAAOM,IAAI,EAAEL;IAElE,MAAMM,6BACJN,OAAOO,KAAK,EAAEC,SAAS,cAAcR,OAAOS,QAAQ,EAAED,SAAS;IACjE,IAAIF,4BAA4B,OAAOI,wBAAwBX,QAAQC;IAEvE,OAAO,MAAMW,4BAA4BZ,OAAOM,IAAI,EAAEN,QAAQC;AAChE;AAEA,OAAO,eAAeY,oBAAoBb,MAOzC;IACC,MAAMc,QAAQd,OAAOe,IAAI,CAACD,KAAK;IAC/B,IAAIA,UAAUE,WAAW;IAEzB,MAAMC,SACJH,MAAMG,MAAM,KAAKD,YACbE,iBAAiBlB,OAAOmB,MAAM,EAAE,YAChCC,mBAAmB;QACjBC,OAAO;QACPC,UAAUR,MAAMG,MAAM;QACtBjB;IACF;IACN,MAAMQ,QACJM,MAAMN,KAAK,KAAKQ,YACZE,iBAAiBlB,OAAOmB,MAAM,EAAE,WAChCC,mBAAmB;QACjBC,OAAO;QACPC,UAAUR,MAAMN,KAAK;QACrBR;IACF;IACN,MAAMU,WACJI,MAAMJ,QAAQ,KAAKM,YACfE,iBAAiBlB,OAAOmB,MAAM,EAAE,cAChCC,mBAAmB;QACjBC,OAAO;QACPC,UAAUR,MAAMJ,QAAQ;QACxBV;IACF;IAEN,MAAMuB,WAAW,MAAMC,sBAAsB;QAC3CC,SAASX,MAAMW,OAAO,IAAIC,kBAAkB1B,OAAOmB,MAAM;QACzDT;QACAF;QACAmB,UAAUb,MAAMa,QAAQ,IAAIC,mBAAmB5B,OAAOmB,MAAM;QAC5DU,sBAAsB7B,OAAO6B,oBAAoB;QACjDC,cAAc9B,OAAO8B,YAAY;IACnC;IACA9B,OAAOmB,MAAM,CAACM,OAAO,GAAGF,SAASE,OAAO;IACxCzB,OAAOmB,MAAM,CAACT,QAAQ,GAAGa,SAASb,QAAQ;IAC1CV,OAAOmB,MAAM,CAACX,KAAK,GAAGe,SAASf,KAAK;IACpCR,OAAOmB,MAAM,CAACQ,QAAQ,GAAGJ,SAASI,QAAQ;IAC1C3B,OAAOmB,MAAM,CAACF,MAAM,GAAGA;IACvB,IAAIH,MAAMiB,KAAK,KAAKf,WAAWhB,OAAOmB,MAAM,CAACY,KAAK,GAAG;WAAIjB,MAAMiB,KAAK;KAAC;IACrE,MAAMC,eAAelB,MAAMkB,YAAY,KAAKhB,YAAYA,YAAY;WAAIF,MAAMkB,YAAY;KAAC;IAC3F,IAAIA,iBAAiBhB,WAAWhB,OAAOmB,MAAM,CAACa,YAAY,GAAGA;IAC7D,MAAMC,aACJnB,MAAMmB,UAAU,IACfD,CAAAA,iBAAiBhB,YAAYA,YAAYkB,2BAA2BF,aAAY;IACnF,IAAIC,eAAejB,WAAWhB,OAAOmB,MAAM,CAACc,UAAU,GAAG;WAAIA;KAAW;AAC1E;AAEA,SAASb,mBAAmBe,IAQ3B;IACC,MAAMC,WAAWxC,2BAA2B;QAC1CyB,OAAOc,KAAKd,KAAK;QACjBgB,YAAYF,KAAKd,KAAK;QACtBC,UAAUa,KAAKb,QAAQ;QACvBgB,SAASH,KAAKnC,MAAM,CAACsC,OAAO;QAC5BR,cAAcK,KAAKnC,MAAM,CAAC8B,YAAY;IACxC;IACAK,KAAKnC,MAAM,CAACuC,KAAK,CAACC,IAAI,IAAIJ,SAASG,KAAK,CAACE,GAAG,CAAC,CAACC,QAAW,CAAA;YAAC,GAAGA,KAAK;YAAErB,OAAOc,KAAKd,KAAK;QAAA,CAAA;IACrF,OAAOe,SAASO,KAAK;AACvB;AAEA,OAAO,eAAenB,sBAAsBxB,MAO3C;IACC,IAAI,CAACA,OAAO6B,oBAAoB,EAAE,MAAM,IAAIe,MAAM;IAElD,IAAI;QACF,OAAO,MAAM5C,OAAO6B,oBAAoB,CAAC;YACvCJ,SAASzB,OAAOyB,OAAO;YACvBf,UAAUV,OAAOU,QAAQ;YACzBF,OAAOR,OAAOQ,KAAK;YACnBmB,UAAU3B,OAAO2B,QAAQ;QAC3B;IACF,EAAE,OAAOkB,OAAO;QACd,IACEpD,wBAAwBD,yBAAyBsD,OAAO,CAACC,kBAAkB,EAAEF,UAC7EA,MAAMG,IAAI,KAAK,wBACf;YACA,MAAM,IAAIrD,6BAA6BK,OAAO8B,YAAY,EAAE;gBAACmB,OAAOJ;YAAK;QAC3E;QACA,MAAMA;IACR;AACF;AAEA,SAAS3C,mBAAmBF,MAAoC;IAC9D,MAAMkD,cAAgD,EAAE;IACxD,MAAMX,QAA4C,EAAE;IACpD,MAAMtB,SAASkC,kBAAkB;QAC/B9B,OAAO;QACPsB,OAAO3C,OAAOM,IAAI,CAACW,MAAM;QACzBK,UAAUtB,OAAOM,IAAI,CAAC8C,SAAS,EAAEnC;QACjCqB,SAAStC,OAAOsC,OAAO;QACvBlC,MAAMJ,OAAOI,IAAI;QACjB8C;QACAX;QACAT,cAAc9B,OAAO8B,YAAY;IACnC;IACA,MAAMtB,QAAQ6C,0BAA0B;QACtChC,OAAO;QACPsB,OAAO3C,OAAOM,IAAI,CAACE,KAAK;QACxBc,UAAUtB,OAAOM,IAAI,CAAC8C,SAAS,EAAE5C;QACjC8B,SAAStC,OAAOsC,OAAO;QACvBlC,MAAMJ,OAAOI,IAAI;QACjB8C;QACAX;QACAT,cAAc9B,OAAO8B,YAAY;IACnC;IACA,MAAMpB,WAAW2C,0BAA0B;QACzChC,OAAO;QACPsB,OAAO3C,OAAOM,IAAI,CAACI,QAAQ;QAC3BY,UAAUtB,OAAOM,IAAI,CAAC8C,SAAS,EAAE1C;QACjC4B,SAAStC,OAAOsC,OAAO;QACvBlC,MAAMJ,OAAOI,IAAI;QACjB8C;QACAX;QACAT,cAAc9B,OAAO8B,YAAY;IACnC;IACA,MAAMwB,eACJtD,OAAOM,IAAI,CAAC8C,SAAS,EAAEnC,WAAWD,aAClChB,OAAOM,IAAI,CAAC8C,SAAS,EAAE5C,UAAUQ,aACjChB,OAAOM,IAAI,CAAC8C,SAAS,EAAE1C,aAAaM;IAEtC,OAAO;QAACkC;QAAaX;QAAOtB;QAAQT;QAAOE;QAAU4C;IAAY;AACnE;AAEA,SAASjD,wBACPC,IAA4B,EAC5BL,MAA6B;IAE7B,OAAO;QACLkB,QAAQ;YACN,GAAIb,KAAKI,QAAQ,KAAKM,YAAY,CAAC,IAAI;gBAACN,UAAUJ,KAAKI,QAAQ;YAAA,CAAC;YAChE,GAAIJ,KAAKE,KAAK,KAAKQ,YAAY,CAAC,IAAI;gBAACR,OAAOF,KAAKE,KAAK;YAAA,CAAC;YACvD,GAAIF,KAAKmB,OAAO,KAAKT,YAAY,CAAC,IAAI;gBAACS,SAASnB,KAAKmB,OAAO;YAAA,CAAC;YAC7D,GAAInB,KAAKqB,QAAQ,KAAKX,YAAY,CAAC,IAAI;gBAACW,UAAUrB,KAAKqB,QAAQ;YAAA,CAAC;YAChE,GAAG4B,iBAAiBjD,KAAK;YACzB,GAAGkD,gCAAgClD,KAAK;YACxCW,QAAQX,KAAKW,MAAM;QACrB;QACAwC,YAAY;QACZP,aAAajD,OAAOiD,WAAW;QAC/BX,OAAOtC,OAAOsC,KAAK;QACnBe,cAAcrD,OAAOqD,YAAY;IACnC;AACF;AAEA,SAAS3C,wBACPX,MAAoC,EACpCC,MAA6B;IAE7B,MAAM,EAACK,IAAI,EAAC,GAAGN;IACf,OAAO;QACLmB,QAAQ,CAAC;QACTsC,YAAY;YACV3C,OAAO;gBACLG,QAAQyC,kBAAkBzD,OAAOgB,MAAM;gBACvC,GAAIhB,OAAOO,KAAK,KAAKQ,YAAY,CAAC,IAAI;oBAACR,OAAOkD,kBAAkBzD,OAAOO,KAAK;gBAAC,CAAC;gBAC9E,GAAIP,OAAOS,QAAQ,KAAKM,YAAY,CAAC,IAAI;oBAACN,UAAUgD,kBAAkBzD,OAAOS,QAAQ;gBAAC,CAAC;gBACvF,GAAIJ,KAAKmB,OAAO,KAAKT,YAAY,CAAC,IAAI;oBAACS,SAASnB,KAAKmB,OAAO;gBAAA,CAAC;gBAC7D,GAAInB,KAAKqB,QAAQ,KAAKX,YAAY,CAAC,IAAI;oBAACW,UAAUrB,KAAKqB,QAAQ;gBAAA,CAAC;gBAChE,GAAG4B,iBAAiBjD,KAAK;gBACzB,GAAGqD,oCAAoC3D,OAAO;YAChD;QACF;QACAkD,aAAajD,OAAOiD,WAAW;QAC/BX,OAAOtC,OAAOsC,KAAK;QACnBe,cAAcrD,OAAOqD,YAAY;IACnC;AACF;AAEA,eAAe1C,4BACbN,IAA4B,EAC5BN,MAAoC,EACpCC,MAA6B;IAE7B,MAAM2D,gBAAgBC,iBAAiB5D,OAAOS,QAAQ;IACtD,MAAMoD,aAAaD,iBAAiB5D,OAAOO,KAAK;IAChD,MAAMuD,mBAAmB9D,OAAOgB,MAAM,CAACR,IAAI,KAAK;IAEhD,MAAM2B,WAAW,MAAMZ,sBAAsB;QAC3CC,SAASnB,KAAKmB,OAAO;QACrBf,UAAUkD;QACVpD,OAAOsD;QACPnC,UAAUrB,KAAKqB,QAAQ;QACvBE,sBAAsB7B,OAAO6B,oBAAoB;QACjDC,cAAc9B,OAAO8B,YAAY;IACnC;IACA,IAAIiC,kBAAkB;QACpB,OAAO;YACL5C,QAAQ;gBACNT,UAAU0B,SAAS1B,QAAQ;gBAC3BF,OAAO4B,SAAS5B,KAAK;gBACrBiB,SAASW,SAASX,OAAO;gBACzBE,UAAUS,SAAST,QAAQ;YAC7B;YACA8B,YAAY;gBACV3C,OAAO;oBACLG,QAAQyC,kBAAkBzD,OAAOgB,MAAM;oBACvC,GAAGsC,iBAAiBjD,KAAK;oBACzB,GAAGqD,oCAAoC3D,OAAO;gBAChD;YACF;YACAkD,aAAajD,OAAOiD,WAAW;YAC/BX,OAAOtC,OAAOsC,KAAK;YACnBe,cAAcrD,OAAOqD,YAAY;QACnC;IACF;IAEA,MAAMU,cAAcH,iBAAiB5D,OAAOgB,MAAM,KAAKX,KAAKW,MAAM;IAClE,OAAO;QACLE,QAAQ;YACNT,UAAU0B,SAAS1B,QAAQ;YAC3BF,OAAO4B,SAAS5B,KAAK;YACrBiB,SAASW,SAASX,OAAO;YACzBE,UAAUS,SAAST,QAAQ;YAC3B,GAAG4B,iBAAiBjD,KAAK;YACzB,GAAGqD,oCAAoC3D,OAAO;YAC9CiB,QAAQ+C;QACV;QACAP,YAAY;QACZP,aAAajD,OAAOiD,WAAW;QAC/BX,OAAOtC,OAAOsC,KAAK;QACnBe,cAAcrD,OAAOqD,YAAY;IACnC;AACF;AAEA,SAASC,iBACPjD,IAA4B;IAE5B,OAAOA,KAAKyB,KAAK,KAAKf,YAAY,CAAC,IAAI;QAACe,OAAO;eAAIzB,KAAKyB,KAAK;SAAC;IAAA;AAChE;AAEA,SAASyB,gCACPlD,IAA4B;IAI5B,OAAOA,KAAK0B,YAAY,KAAKhB,YAAY,CAAC,IAAI;QAACgB,cAAc1B,KAAK0B,YAAY;IAAA;AAChF;AAEA,SAAS2B,oCAAoC3D,MAAoC;IAM/E,MAAMgC,eAAetC,6BAA6B;QAChDuE,QAAQjE,OAAOiE,MAAM;QACrBC,QAAQlE,OAAOM,IAAI,CAAC6D,EAAE;QACtBnC,cAAchC,OAAOM,IAAI,CAAC0B,YAAY;QACtCM,SAAStC,OAAOoE,gBAAgB;QAChCC,UAAUrE,OAAOsE,iBAAiB;IACpC;IACA,OAAOtC,iBAAiBhB,YACpB,CAAC,IACD;QAACgB;QAAcC,YAAYC,2BAA2BF;IAAa;AACzE;AAEA,SAASE,2BACPF,YAA8D;IAE9D,OAAO;QACL;YACEuC,MAAMjF;YACNkF,WAAWjF;YACXkF,UAAUpF;YACVqF,MAAMtF;YACN4C,cAAc;mBAAIA;aAAa;QACjC;KACD;AACH;AAEA,SAAS0B,kBAAkBrC,KAAsB;IAC/C,MAAMsD,aAAatD,MAAMZ,IAAI,KAAK;IAClC,OAAOkE,aAAatD,MAAMA,KAAK,GAAGxB,aAAawB,MAAMsB,KAAK;AAC5D;AAEA,SAASkB,iBAAiBxC,KAAkC;IAC1D,MAAMuD,WAAWvD,OAAOZ,SAAS;IACjC,OAAOmE,WAAWvD,MAAMsB,KAAK,GAAG3B;AAClC;AAEA,SAASmC,kBAAkBnD,MAS1B;IACC,MAAM6E,cAAc7E,OAAOsB,QAAQ,KAAKN;IACxC,MAAMb,mBAAmBH,OAAOI,IAAI,KAAK;IACzC,IAAI,CAACyE,eAAe1E,kBAAkB;QACpC,OAAO;YAACM,MAAM;YAAUkC,OAAO3C,OAAO2C,KAAK;QAAA;IAC7C;IAEA,MAAMP,WAAWtC,iBAAiB;QAChCuB,OAAOrB,OAAOqB,KAAK;QACnBC,UAAU;YAACwD,UAAU9E,OAAOsB,QAAQ;QAAA;QACpCgB,SAAStC,OAAOsC,OAAO;QACvBR,cAAc9B,OAAO8B,YAAY;QACjCO,YAAYrC,OAAOqB,KAAK;IAC1B;IACArB,OAAOkD,WAAW,CAACV,IAAI,IAClBJ,SAASc,WAAW,CAACT,GAAG,CAAC,CAACsC,aAAgB,CAAA;YAAC,GAAGA,UAAU;YAAE1D,OAAOrB,OAAOqB,KAAK;QAAA,CAAA;IAElFrB,OAAOuC,KAAK,CAACC,IAAI,IAAIJ,SAASG,KAAK,CAACE,GAAG,CAAC,CAACC,QAAW,CAAA;YAAC,GAAGA,KAAK;YAAErB,OAAOrB,OAAOqB,KAAK;QAAA,CAAA;IAClF,OAAO2D,gBAAgB5C;AACzB;AAEA,SAASiB,0BAA0BrD,MASlC;IACC,MAAMiF,WAAWjF,OAAO2C,KAAK,KAAK3B;IAClC,IAAI,CAACiE,UAAU,OAAOjE;IACtB,OAAOmC,kBAAkB;QAAC,GAAGnD,MAAM;QAAE2C,OAAO3C,OAAO2C,KAAK;IAAA;AAC1D;AAEA,SAASqC,gBAAgB5C,QAA2B;IAClD,IAAIA,SAAS3B,IAAI,KAAK,YAAY,OAAO;QAACA,MAAM;QAAYY,OAAOe,SAASf,KAAK;IAAA;IACjF,OAAO;QAACZ,MAAM;QAAUkC,OAAOP,SAASO,KAAK;IAAA;AAC/C;AAEA,SAASzB,iBAAiBC,MAA+B,EAAE+D,GAAW;IACpE,MAAMvC,QAAQxB,MAAM,CAAC+D,IAAI;IACzB,OAAO,OAAOvC,UAAU,WAAWA,QAAQ3B;AAC7C;AAEA,SAASY,mBAAmBT,MAA+B;IACzD,MAAMwB,QAAQxB,OAAOQ,QAAQ;IAC7B,OAAOgB,UAAU,SACfA,UAAU,aACVA,UAAU,SACVA,UAAU,YACVA,UAAU,UACVA,UAAU,UACRA,QACA3B;AACN;AAEA,SAASU,kBACPP,MAA+B;IAE/B,OAAOA,OAAOM,OAAO,KAAK,QAAQN,OAAOM,OAAO,KAAK,WAAWN,OAAOM,OAAO,GAAGT;AACnF"}
@@ -1,13 +1,13 @@
1
- import type { AgentDefaultsResolver } from '@shipfox/api-agent/core/resolve-agent-config';
1
+ import type { AgentDefaultsResolver } from '#core/agent-defaults.js';
2
2
  import type { PersistedEvaluationTraceEntry, Step } from '#core/entities/step.js';
3
3
  import type { WorkflowEvaluationContext } from './workflow-evaluation-context.js';
4
4
  export declare function completeStepDispatchConfig(params: {
5
5
  readonly step: Step;
6
6
  readonly context: WorkflowEvaluationContext;
7
- readonly resolveAgentDefaults: AgentDefaultsResolver;
7
+ readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;
8
8
  readonly definitionId: string;
9
- }): {
9
+ }): Promise<{
10
10
  readonly config: Record<string, unknown>;
11
11
  readonly trace: readonly PersistedEvaluationTraceEntry[];
12
- };
12
+ }>;
13
13
  //# sourceMappingURL=complete-step-dispatch-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"complete-step-dispatch-config.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/complete-step-dispatch-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAC;AAExF,OAAO,KAAK,EAAC,6BAA6B,EAAE,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAGhF,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAwBA"}
1
+ {"version":3,"file":"complete-step-dispatch-config.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/complete-step-dispatch-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAC,6BAA6B,EAAE,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAGhF,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAAC,CAwBD"}
@@ -1,7 +1,7 @@
1
1
  import { capTraceEntries } from '@shipfox/expression';
2
2
  import { completeAgentConfig } from './agent.js';
3
3
  import { completeRunDispatchConfig } from './run.js';
4
- export function completeStepDispatchConfig(params) {
4
+ export async function completeStepDispatchConfig(params) {
5
5
  const plan = params.step.configPlan;
6
6
  if (plan === null) return {
7
7
  config: params.step.config,
@@ -21,7 +21,7 @@ export function completeStepDispatchConfig(params) {
21
21
  definitionId: params.definitionId,
22
22
  trace
23
23
  });
24
- completeAgentConfig({
24
+ await completeAgentConfig({
25
25
  config,
26
26
  plan,
27
27
  context: params.context,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/complete-step-dispatch-config.ts"],"sourcesContent":["import type {AgentDefaultsResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport {capTraceEntries} from '@shipfox/expression';\nimport type {PersistedEvaluationTraceEntry, Step} from '#core/entities/step.js';\nimport {completeAgentConfig} from './agent.js';\nimport {completeRunDispatchConfig} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\nexport function completeStepDispatchConfig(params: {\n readonly step: Step;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults: AgentDefaultsResolver;\n readonly definitionId: string;\n}): {\n readonly config: Record<string, unknown>;\n readonly trace: readonly PersistedEvaluationTraceEntry[];\n} {\n const plan = params.step.configPlan;\n if (plan === null) return {config: params.step.config, trace: []};\n\n const config = {...params.step.config};\n delete config.secret_bindings;\n const trace: PersistedEvaluationTraceEntry[] = [...(plan.trace ?? [])];\n completeRunDispatchConfig({\n config,\n plan,\n context: params.context,\n definitionId: params.definitionId,\n trace,\n });\n completeAgentConfig({\n config,\n plan,\n context: params.context,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n trace,\n });\n\n return {config, trace: capTraceEntries(trace)};\n}\n"],"names":["capTraceEntries","completeAgentConfig","completeRunDispatchConfig","completeStepDispatchConfig","params","plan","step","configPlan","config","trace","secret_bindings","context","definitionId","resolveAgentDefaults"],"mappings":"AACA,SAAQA,eAAe,QAAO,sBAAsB;AAEpD,SAAQC,mBAAmB,QAAO,aAAa;AAC/C,SAAQC,yBAAyB,QAAO,WAAW;AAGnD,OAAO,SAASC,2BAA2BC,MAK1C;IAIC,MAAMC,OAAOD,OAAOE,IAAI,CAACC,UAAU;IACnC,IAAIF,SAAS,MAAM,OAAO;QAACG,QAAQJ,OAAOE,IAAI,CAACE,MAAM;QAAEC,OAAO,EAAE;IAAA;IAEhE,MAAMD,SAAS;QAAC,GAAGJ,OAAOE,IAAI,CAACE,MAAM;IAAA;IACrC,OAAOA,OAAOE,eAAe;IAC7B,MAAMD,QAAyC;WAAKJ,KAAKI,KAAK,IAAI,EAAE;KAAE;IACtEP,0BAA0B;QACxBM;QACAH;QACAM,SAASP,OAAOO,OAAO;QACvBC,cAAcR,OAAOQ,YAAY;QACjCH;IACF;IACAR,oBAAoB;QAClBO;QACAH;QACAM,SAASP,OAAOO,OAAO;QACvBE,sBAAsBT,OAAOS,oBAAoB;QACjDD,cAAcR,OAAOQ,YAAY;QACjCH;IACF;IAEA,OAAO;QAACD;QAAQC,OAAOT,gBAAgBS;IAAM;AAC/C"}
1
+ {"version":3,"sources":["../../../src/core/step-config/complete-step-dispatch-config.ts"],"sourcesContent":["import {capTraceEntries} from '@shipfox/expression';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport type {PersistedEvaluationTraceEntry, Step} from '#core/entities/step.js';\nimport {completeAgentConfig} from './agent.js';\nimport {completeRunDispatchConfig} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\nexport async function completeStepDispatchConfig(params: {\n readonly step: Step;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n}): Promise<{\n readonly config: Record<string, unknown>;\n readonly trace: readonly PersistedEvaluationTraceEntry[];\n}> {\n const plan = params.step.configPlan;\n if (plan === null) return {config: params.step.config, trace: []};\n\n const config = {...params.step.config};\n delete config.secret_bindings;\n const trace: PersistedEvaluationTraceEntry[] = [...(plan.trace ?? [])];\n completeRunDispatchConfig({\n config,\n plan,\n context: params.context,\n definitionId: params.definitionId,\n trace,\n });\n await completeAgentConfig({\n config,\n plan,\n context: params.context,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n trace,\n });\n\n return {config, trace: capTraceEntries(trace)};\n}\n"],"names":["capTraceEntries","completeAgentConfig","completeRunDispatchConfig","completeStepDispatchConfig","params","plan","step","configPlan","config","trace","secret_bindings","context","definitionId","resolveAgentDefaults"],"mappings":"AAAA,SAAQA,eAAe,QAAO,sBAAsB;AAGpD,SAAQC,mBAAmB,QAAO,aAAa;AAC/C,SAAQC,yBAAyB,QAAO,WAAW;AAGnD,OAAO,eAAeC,2BAA2BC,MAKhD;IAIC,MAAMC,OAAOD,OAAOE,IAAI,CAACC,UAAU;IACnC,IAAIF,SAAS,MAAM,OAAO;QAACG,QAAQJ,OAAOE,IAAI,CAACE,MAAM;QAAEC,OAAO,EAAE;IAAA;IAEhE,MAAMD,SAAS;QAAC,GAAGJ,OAAOE,IAAI,CAACE,MAAM;IAAA;IACrC,OAAOA,OAAOE,eAAe;IAC7B,MAAMD,QAAyC;WAAKJ,KAAKI,KAAK,IAAI,EAAE;KAAE;IACtEP,0BAA0B;QACxBM;QACAH;QACAM,SAASP,OAAOO,OAAO;QACvBC,cAAcR,OAAOQ,YAAY;QACjCH;IACF;IACA,MAAMR,oBAAoB;QACxBO;QACAH;QACAM,SAASP,OAAOO,OAAO;QACvBE,sBAAsBT,OAAOS,oBAAoB;QACjDD,cAAcR,OAAOQ,YAAY;QACjCH;IACF;IAEA,OAAO;QAACD;QAAQC,OAAOT,gBAAgBS;IAAM;AAC/C"}
@@ -1,6 +1,6 @@
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';
3
2
  import type { WorkflowExpression } 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 WorkflowStepTemplateDiagnostic } from './resolve-step-config.js';
@@ -30,6 +30,6 @@ export interface MaterializeJobExecutionStepsParams {
30
30
  readonly agentToolContext?: AgentToolMaterializationContext | undefined;
31
31
  readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;
32
32
  }
33
- export declare function materializeJobExecutionSteps(params: MaterializeJobExecutionStepsParams): readonly MaterializedWorkflowStep[];
33
+ export declare function materializeJobExecutionSteps(params: MaterializeJobExecutionStepsParams): Promise<readonly MaterializedWorkflowStep[]>;
34
34
  export {};
35
35
  //# sourceMappingURL=materialize-job-execution-steps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"materialize-job-execution-steps.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/materialize-job-execution-steps.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAoB,KAAK,8BAA8B,EAAC,MAAM,0BAA0B,CAAC;AAChG,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,sBAAsB,GAAG,WAAW,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAI/E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAiBD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kCAAkC,GACzC,SAAS,wBAAwB,EAAE,CA6CrC"}
1
+ {"version":3,"file":"materialize-job-execution-steps.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/materialize-job-execution-steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAC5D,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;AACnE,OAAO,EAAoB,KAAK,8BAA8B,EAAC,MAAM,0BAA0B,CAAC;AAChG,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,sBAAsB,GAAG,WAAW,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAI/E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAiBD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC,CA+C9C"}
@@ -1,4 +1,3 @@
1
- import { catalogDefaultAgentResolver } from '@shipfox/api-agent/core/resolve-agent-config';
2
1
  import { resolveStepConfig } from './resolve-step-config.js';
3
2
  const FIRST_LINE_PATTERN = /\r?\n/;
4
3
  // Synthetic "Set up job" step prepended when a job execution's steps are materialized.
@@ -15,11 +14,11 @@ const SETUP_STEP = {
15
14
  authoredConfig: null,
16
15
  position: 0
17
16
  };
18
- export function materializeJobExecutionSteps(params) {
19
- const { model, job, context, resolveAgentDefaults = catalogDefaultAgentResolver, definitionId = model.name, agentToolContext, agentToolSnapshot } = params;
17
+ export async function materializeJobExecutionSteps(params) {
18
+ const { model, job, context, resolveAgentDefaults, definitionId = model.name, agentToolContext, agentToolSnapshot } = params;
20
19
  return [
21
20
  SETUP_STEP,
22
- ...job.steps.map((step, stepPosition)=>{
21
+ ...await Promise.all(job.steps.map(async (step, stepPosition)=>{
23
22
  // The trusted context exposes the stable job key; the authored display field remains `job.name`.
24
23
  const stepContext = {
25
24
  ...context.values,
@@ -27,7 +26,7 @@ export function materializeJobExecutionSteps(params) {
27
26
  key: job.key
28
27
  }
29
28
  };
30
- const resolved = resolveStepConfig({
29
+ const resolved = await resolveStepConfig({
31
30
  jobKey: job.key,
32
31
  step,
33
32
  workflowEnv: model.env,
@@ -58,7 +57,7 @@ export function materializeJobExecutionSteps(params) {
58
57
  },
59
58
  position: stepPosition + 1
60
59
  };
61
- })
60
+ }))
62
61
  ];
63
62
  }
64
63
  function materializedConfigPlan(configPlan, trace) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/materialize-job-execution-steps.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 {WorkflowExpression} from '@shipfox/expression';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport type {StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {resolveStepConfig, type WorkflowStepTemplateDiagnostic} from './resolve-step-config.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowSourceLocation = NonNullable<WorkflowModelStep['sourceLocation']>;\n\nconst FIRST_LINE_PATTERN = /\\r?\\n/;\n\nexport interface MaterializedWorkflowStep {\n readonly key: string | null;\n readonly name: string;\n readonly sourceLocation: WorkflowSourceLocation | null;\n readonly status: 'pending';\n readonly type: WorkflowModelStep['kind'] | 'setup';\n readonly config: Readonly<Record<string, unknown>>;\n readonly condition?: WorkflowExpression;\n readonly configPlan?: StepConfigDispatchPlan;\n readonly authoredConfig: Readonly<Record<string, unknown>> | null;\n readonly diagnostics?: readonly WorkflowStepTemplateDiagnostic[];\n readonly position: number;\n}\n\nexport interface MaterializeJobExecutionStepsParams {\n readonly model: WorkflowModel;\n readonly job: WorkflowModelJob;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId?: string | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\n// Synthetic \"Set up job\" step prepended when a job execution's steps are materialized.\n// The runner prepares the workspace here; failures report through the normal step\n// protocol instead of hanging the job until the lease/timeout fires. Its config is\n// credential-free.\nconst SETUP_STEP: MaterializedWorkflowStep = {\n key: null,\n name: 'Set up job',\n sourceLocation: null,\n status: 'pending',\n type: 'setup',\n config: {},\n authoredConfig: null,\n position: 0,\n};\n\nexport function materializeJobExecutionSteps(\n params: MaterializeJobExecutionStepsParams,\n): readonly MaterializedWorkflowStep[] {\n const {\n model,\n job,\n context,\n resolveAgentDefaults = catalogDefaultAgentResolver,\n definitionId = model.name,\n agentToolContext,\n agentToolSnapshot,\n } = params;\n\n return [\n SETUP_STEP,\n ...job.steps.map((step, stepPosition) => {\n // The trusted context exposes the stable job key; the authored display field remains `job.name`.\n const stepContext = {...context.values, job: {key: job.key}};\n const resolved = resolveStepConfig({\n jobKey: job.key,\n step,\n workflowEnv: model.env,\n workflowEnvTemplates: model.templates?.env,\n jobEnv: job.env,\n jobEnvTemplates: job.templates?.env,\n context: stepContext,\n site: context.site,\n resolveAgentDefaults,\n definitionId,\n agentToolContext,\n agentToolSnapshot,\n });\n return {\n key: step.key ?? null,\n name: resolved.name ?? stepDisplayName(step),\n sourceLocation: step.sourceLocation ?? null,\n status: 'pending' as const,\n type: step.kind,\n config: resolved.config,\n ...(step.if === undefined ? {} : {condition: step.if}),\n authoredConfig: resolved.authoredConfig,\n ...materializedConfigPlan(resolved.configPlan, resolved.trace),\n ...(resolved.diagnostics.length === 0 ? {} : {diagnostics: resolved.diagnostics}),\n position: stepPosition + 1,\n };\n }),\n ];\n}\n\nfunction materializedConfigPlan(\n configPlan: StepConfigDispatchPlan | null,\n trace: NonNullable<StepConfigDispatchPlan['trace']>,\n): {readonly configPlan?: StepConfigDispatchPlan} {\n if (configPlan === null && trace.length === 0) return {};\n return {configPlan: {...(configPlan ?? {}), ...(trace.length === 0 ? {} : {trace})}};\n}\n\nfunction stepDisplayName(step: WorkflowModelStep): string {\n switch (step.kind) {\n case 'run':\n return firstLine(step.command.value);\n case 'agent':\n return step.model === undefined\n ? firstLine(step.prompt)\n : `${step.model} · ${firstLine(step.prompt)}`;\n default:\n return assertNever(step);\n }\n}\n\nfunction firstLine(value: string): string {\n return value.split(FIRST_LINE_PATTERN, 1)[0]?.trim() || value.trim();\n}\n\nfunction assertNever(value: never): never {\n throw new Error(`Unhandled workflow step kind: ${JSON.stringify(value)}`);\n}\n"],"names":["catalogDefaultAgentResolver","resolveStepConfig","FIRST_LINE_PATTERN","SETUP_STEP","key","name","sourceLocation","status","type","config","authoredConfig","position","materializeJobExecutionSteps","params","model","job","context","resolveAgentDefaults","definitionId","agentToolContext","agentToolSnapshot","steps","map","step","stepPosition","stepContext","values","resolved","jobKey","workflowEnv","env","workflowEnvTemplates","templates","jobEnv","jobEnvTemplates","site","stepDisplayName","kind","if","undefined","condition","materializedConfigPlan","configPlan","trace","diagnostics","length","firstLine","command","value","prompt","assertNever","split","trim","Error","JSON","stringify"],"mappings":"AAAA,SAEEA,2BAA2B,QACtB,+CAA+C;AAQtD,SAAQC,iBAAiB,QAA4C,2BAA2B;AAOhG,MAAMC,qBAAqB;AA0B3B,uFAAuF;AACvF,kFAAkF;AAClF,mFAAmF;AACnF,mBAAmB;AACnB,MAAMC,aAAuC;IAC3CC,KAAK;IACLC,MAAM;IACNC,gBAAgB;IAChBC,QAAQ;IACRC,MAAM;IACNC,QAAQ,CAAC;IACTC,gBAAgB;IAChBC,UAAU;AACZ;AAEA,OAAO,SAASC,6BACdC,MAA0C;IAE1C,MAAM,EACJC,KAAK,EACLC,GAAG,EACHC,OAAO,EACPC,uBAAuBjB,2BAA2B,EAClDkB,eAAeJ,MAAMT,IAAI,EACzBc,gBAAgB,EAChBC,iBAAiB,EAClB,GAAGP;IAEJ,OAAO;QACLV;WACGY,IAAIM,KAAK,CAACC,GAAG,CAAC,CAACC,MAAMC;YACtB,iGAAiG;YACjG,MAAMC,cAAc;gBAAC,GAAGT,QAAQU,MAAM;gBAAEX,KAAK;oBAACX,KAAKW,IAAIX,GAAG;gBAAA;YAAC;YAC3D,MAAMuB,WAAW1B,kBAAkB;gBACjC2B,QAAQb,IAAIX,GAAG;gBACfmB;gBACAM,aAAaf,MAAMgB,GAAG;gBACtBC,sBAAsBjB,MAAMkB,SAAS,EAAEF;gBACvCG,QAAQlB,IAAIe,GAAG;gBACfI,iBAAiBnB,IAAIiB,SAAS,EAAEF;gBAChCd,SAASS;gBACTU,MAAMnB,QAAQmB,IAAI;gBAClBlB;gBACAC;gBACAC;gBACAC;YACF;YACA,OAAO;gBACLhB,KAAKmB,KAAKnB,GAAG,IAAI;gBACjBC,MAAMsB,SAAStB,IAAI,IAAI+B,gBAAgBb;gBACvCjB,gBAAgBiB,KAAKjB,cAAc,IAAI;gBACvCC,QAAQ;gBACRC,MAAMe,KAAKc,IAAI;gBACf5B,QAAQkB,SAASlB,MAAM;gBACvB,GAAIc,KAAKe,EAAE,KAAKC,YAAY,CAAC,IAAI;oBAACC,WAAWjB,KAAKe,EAAE;gBAAA,CAAC;gBACrD5B,gBAAgBiB,SAASjB,cAAc;gBACvC,GAAG+B,uBAAuBd,SAASe,UAAU,EAAEf,SAASgB,KAAK,CAAC;gBAC9D,GAAIhB,SAASiB,WAAW,CAACC,MAAM,KAAK,IAAI,CAAC,IAAI;oBAACD,aAAajB,SAASiB,WAAW;gBAAA,CAAC;gBAChFjC,UAAUa,eAAe;YAC3B;QACF;KACD;AACH;AAEA,SAASiB,uBACPC,UAAyC,EACzCC,KAAmD;IAEnD,IAAID,eAAe,QAAQC,MAAME,MAAM,KAAK,GAAG,OAAO,CAAC;IACvD,OAAO;QAACH,YAAY;YAAC,GAAIA,cAAc,CAAC,CAAC;YAAG,GAAIC,MAAME,MAAM,KAAK,IAAI,CAAC,IAAI;gBAACF;YAAK,CAAC;QAAC;IAAC;AACrF;AAEA,SAASP,gBAAgBb,IAAuB;IAC9C,OAAQA,KAAKc,IAAI;QACf,KAAK;YACH,OAAOS,UAAUvB,KAAKwB,OAAO,CAACC,KAAK;QACrC,KAAK;YACH,OAAOzB,KAAKT,KAAK,KAAKyB,YAClBO,UAAUvB,KAAK0B,MAAM,IACrB,GAAG1B,KAAKT,KAAK,CAAC,GAAG,EAAEgC,UAAUvB,KAAK0B,MAAM,GAAG;QACjD;YACE,OAAOC,YAAY3B;IACvB;AACF;AAEA,SAASuB,UAAUE,KAAa;IAC9B,OAAOA,MAAMG,KAAK,CAACjD,oBAAoB,EAAE,CAAC,EAAE,EAAEkD,UAAUJ,MAAMI,IAAI;AACpE;AAEA,SAASF,YAAYF,KAAY;IAC/B,MAAM,IAAIK,MAAM,CAAC,8BAA8B,EAAEC,KAAKC,SAAS,CAACP,QAAQ;AAC1E"}
1
+ {"version":3,"sources":["../../../src/core/step-config/materialize-job-execution-steps.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {WorkflowExpression} 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 {resolveStepConfig, type WorkflowStepTemplateDiagnostic} from './resolve-step-config.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowSourceLocation = NonNullable<WorkflowModelStep['sourceLocation']>;\n\nconst FIRST_LINE_PATTERN = /\\r?\\n/;\n\nexport interface MaterializedWorkflowStep {\n readonly key: string | null;\n readonly name: string;\n readonly sourceLocation: WorkflowSourceLocation | null;\n readonly status: 'pending';\n readonly type: WorkflowModelStep['kind'] | 'setup';\n readonly config: Readonly<Record<string, unknown>>;\n readonly condition?: WorkflowExpression;\n readonly configPlan?: StepConfigDispatchPlan;\n readonly authoredConfig: Readonly<Record<string, unknown>> | null;\n readonly diagnostics?: readonly WorkflowStepTemplateDiagnostic[];\n readonly position: number;\n}\n\nexport interface MaterializeJobExecutionStepsParams {\n readonly model: WorkflowModel;\n readonly job: WorkflowModelJob;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId?: string | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\n// Synthetic \"Set up job\" step prepended when a job execution's steps are materialized.\n// The runner prepares the workspace here; failures report through the normal step\n// protocol instead of hanging the job until the lease/timeout fires. Its config is\n// credential-free.\nconst SETUP_STEP: MaterializedWorkflowStep = {\n key: null,\n name: 'Set up job',\n sourceLocation: null,\n status: 'pending',\n type: 'setup',\n config: {},\n authoredConfig: null,\n position: 0,\n};\n\nexport async function materializeJobExecutionSteps(\n params: MaterializeJobExecutionStepsParams,\n): Promise<readonly MaterializedWorkflowStep[]> {\n const {\n model,\n job,\n context,\n resolveAgentDefaults,\n definitionId = model.name,\n agentToolContext,\n agentToolSnapshot,\n } = params;\n\n return [\n SETUP_STEP,\n ...(await Promise.all(\n job.steps.map(async (step, stepPosition) => {\n // The trusted context exposes the stable job key; the authored display field remains `job.name`.\n const stepContext = {...context.values, job: {key: job.key}};\n const resolved = await resolveStepConfig({\n jobKey: job.key,\n step,\n workflowEnv: model.env,\n workflowEnvTemplates: model.templates?.env,\n jobEnv: job.env,\n jobEnvTemplates: job.templates?.env,\n context: stepContext,\n site: context.site,\n resolveAgentDefaults,\n definitionId,\n agentToolContext,\n agentToolSnapshot,\n });\n return {\n key: step.key ?? null,\n name: resolved.name ?? stepDisplayName(step),\n sourceLocation: step.sourceLocation ?? null,\n status: 'pending' as const,\n type: step.kind,\n config: resolved.config,\n ...(step.if === undefined ? {} : {condition: step.if}),\n authoredConfig: resolved.authoredConfig,\n ...materializedConfigPlan(resolved.configPlan, resolved.trace),\n ...(resolved.diagnostics.length === 0 ? {} : {diagnostics: resolved.diagnostics}),\n position: stepPosition + 1,\n };\n }),\n )),\n ];\n}\n\nfunction materializedConfigPlan(\n configPlan: StepConfigDispatchPlan | null,\n trace: NonNullable<StepConfigDispatchPlan['trace']>,\n): {readonly configPlan?: StepConfigDispatchPlan} {\n if (configPlan === null && trace.length === 0) return {};\n return {configPlan: {...(configPlan ?? {}), ...(trace.length === 0 ? {} : {trace})}};\n}\n\nfunction stepDisplayName(step: WorkflowModelStep): string {\n switch (step.kind) {\n case 'run':\n return firstLine(step.command.value);\n case 'agent':\n return step.model === undefined\n ? firstLine(step.prompt)\n : `${step.model} · ${firstLine(step.prompt)}`;\n default:\n return assertNever(step);\n }\n}\n\nfunction firstLine(value: string): string {\n return value.split(FIRST_LINE_PATTERN, 1)[0]?.trim() || value.trim();\n}\n\nfunction assertNever(value: never): never {\n throw new Error(`Unhandled workflow step kind: ${JSON.stringify(value)}`);\n}\n"],"names":["resolveStepConfig","FIRST_LINE_PATTERN","SETUP_STEP","key","name","sourceLocation","status","type","config","authoredConfig","position","materializeJobExecutionSteps","params","model","job","context","resolveAgentDefaults","definitionId","agentToolContext","agentToolSnapshot","Promise","all","steps","map","step","stepPosition","stepContext","values","resolved","jobKey","workflowEnv","env","workflowEnvTemplates","templates","jobEnv","jobEnvTemplates","site","stepDisplayName","kind","if","undefined","condition","materializedConfigPlan","configPlan","trace","diagnostics","length","firstLine","command","value","prompt","assertNever","split","trim","Error","JSON","stringify"],"mappings":"AAQA,SAAQA,iBAAiB,QAA4C,2BAA2B;AAOhG,MAAMC,qBAAqB;AA0B3B,uFAAuF;AACvF,kFAAkF;AAClF,mFAAmF;AACnF,mBAAmB;AACnB,MAAMC,aAAuC;IAC3CC,KAAK;IACLC,MAAM;IACNC,gBAAgB;IAChBC,QAAQ;IACRC,MAAM;IACNC,QAAQ,CAAC;IACTC,gBAAgB;IAChBC,UAAU;AACZ;AAEA,OAAO,eAAeC,6BACpBC,MAA0C;IAE1C,MAAM,EACJC,KAAK,EACLC,GAAG,EACHC,OAAO,EACPC,oBAAoB,EACpBC,eAAeJ,MAAMT,IAAI,EACzBc,gBAAgB,EAChBC,iBAAiB,EAClB,GAAGP;IAEJ,OAAO;QACLV;WACI,MAAMkB,QAAQC,GAAG,CACnBP,IAAIQ,KAAK,CAACC,GAAG,CAAC,OAAOC,MAAMC;YACzB,iGAAiG;YACjG,MAAMC,cAAc;gBAAC,GAAGX,QAAQY,MAAM;gBAAEb,KAAK;oBAACX,KAAKW,IAAIX,GAAG;gBAAA;YAAC;YAC3D,MAAMyB,WAAW,MAAM5B,kBAAkB;gBACvC6B,QAAQf,IAAIX,GAAG;gBACfqB;gBACAM,aAAajB,MAAMkB,GAAG;gBACtBC,sBAAsBnB,MAAMoB,SAAS,EAAEF;gBACvCG,QAAQpB,IAAIiB,GAAG;gBACfI,iBAAiBrB,IAAImB,SAAS,EAAEF;gBAChChB,SAASW;gBACTU,MAAMrB,QAAQqB,IAAI;gBAClBpB;gBACAC;gBACAC;gBACAC;YACF;YACA,OAAO;gBACLhB,KAAKqB,KAAKrB,GAAG,IAAI;gBACjBC,MAAMwB,SAASxB,IAAI,IAAIiC,gBAAgBb;gBACvCnB,gBAAgBmB,KAAKnB,cAAc,IAAI;gBACvCC,QAAQ;gBACRC,MAAMiB,KAAKc,IAAI;gBACf9B,QAAQoB,SAASpB,MAAM;gBACvB,GAAIgB,KAAKe,EAAE,KAAKC,YAAY,CAAC,IAAI;oBAACC,WAAWjB,KAAKe,EAAE;gBAAA,CAAC;gBACrD9B,gBAAgBmB,SAASnB,cAAc;gBACvC,GAAGiC,uBAAuBd,SAASe,UAAU,EAAEf,SAASgB,KAAK,CAAC;gBAC9D,GAAIhB,SAASiB,WAAW,CAACC,MAAM,KAAK,IAAI,CAAC,IAAI;oBAACD,aAAajB,SAASiB,WAAW;gBAAA,CAAC;gBAChFnC,UAAUe,eAAe;YAC3B;QACF;KAEH;AACH;AAEA,SAASiB,uBACPC,UAAyC,EACzCC,KAAmD;IAEnD,IAAID,eAAe,QAAQC,MAAME,MAAM,KAAK,GAAG,OAAO,CAAC;IACvD,OAAO;QAACH,YAAY;YAAC,GAAIA,cAAc,CAAC,CAAC;YAAG,GAAIC,MAAME,MAAM,KAAK,IAAI,CAAC,IAAI;gBAACF;YAAK,CAAC;QAAC;IAAC;AACrF;AAEA,SAASP,gBAAgBb,IAAuB;IAC9C,OAAQA,KAAKc,IAAI;QACf,KAAK;YACH,OAAOS,UAAUvB,KAAKwB,OAAO,CAACC,KAAK;QACrC,KAAK;YACH,OAAOzB,KAAKX,KAAK,KAAK2B,YAClBO,UAAUvB,KAAK0B,MAAM,IACrB,GAAG1B,KAAKX,KAAK,CAAC,GAAG,EAAEkC,UAAUvB,KAAK0B,MAAM,GAAG;QACjD;YACE,OAAOC,YAAY3B;IACvB;AACF;AAEA,SAASuB,UAAUE,KAAa;IAC9B,OAAOA,MAAMG,KAAK,CAACnD,oBAAoB,EAAE,CAAC,EAAE,EAAEoD,UAAUJ,MAAMI,IAAI;AACpE;AAEA,SAASF,YAAYF,KAAY;IAC/B,MAAM,IAAIK,MAAM,CAAC,8BAA8B,EAAEC,KAAKC,SAAS,CAACP,QAAQ;AAC1E"}
@@ -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 '#core/agent-defaults.js';
3
3
  import type { AgentToolMaterializationContext, AgentToolMaterializationSnapshot } from '#core/agent-tools.js';
4
4
  import { type MaterializedWorkflowStep } from './materialize-job-execution-steps.js';
5
5
  import type { WorkflowEvaluationContext } from './workflow-evaluation-context.js';
@@ -26,7 +26,7 @@ export interface MaterializeWorkflowModelParams {
26
26
  readonly agentToolContext?: AgentToolMaterializationContext | undefined;
27
27
  readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;
28
28
  }
29
- export declare function materializeWorkflowModel(params: MaterializeWorkflowModelParams): readonly MaterializedWorkflowJob[];
29
+ export declare function materializeWorkflowModel(params: MaterializeWorkflowModelParams): Promise<readonly MaterializedWorkflowJob[]>;
30
30
  export declare function materializeJobRunner(params: {
31
31
  readonly job: WorkflowModelJob;
32
32
  readonly context: WorkflowEvaluationContext;
@@ -1 +1 @@
1
- {"version":3,"file":"materialize-workflow-model.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/materialize-workflow-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,8BAA8B,GACrC,SAAS,uBAAuB,EAAE,CAoCpC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,SAAS,MAAM,EAAE,CAgBpB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBhC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE/D"}
1
+ {"version":3,"file":"materialize-workflow-model.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/materialize-workflow-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAC;AAEhF,KAAK,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClF;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAsC7C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,SAAS,MAAM,EAAE,CAgBpB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBhC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE/D"}
@@ -2,7 +2,7 @@ import { canonicalizeLabels, findInvalidLabels, MAX_RUNNER_LABELS } from '@shipf
2
2
  import { InvalidJobRunnerLabelsError } from '#core/errors.js';
3
3
  import { completeStepField } from './fields.js';
4
4
  import { materializeJobExecutionSteps } from './materialize-job-execution-steps.js';
5
- export function materializeWorkflowModel(params) {
5
+ export async function materializeWorkflowModel(params) {
6
6
  const { model, context = {
7
7
  site: 'run-creation',
8
8
  values: {}
@@ -11,7 +11,7 @@ export function materializeWorkflowModel(params) {
11
11
  job.id,
12
12
  job
13
13
  ]));
14
- return model.jobs.map((job, position)=>({
14
+ return await Promise.all(model.jobs.map(async (job, position)=>({
15
15
  key: job.key,
16
16
  mode: job.mode,
17
17
  ...job.success === undefined ? {} : {
@@ -33,7 +33,7 @@ export function materializeWorkflowModel(params) {
33
33
  dependencies: dependencySourceNames(job, jobsById),
34
34
  runner: job.runner,
35
35
  position,
36
- steps: job.mode === 'listening' ? [] : materializeJobExecutionSteps({
36
+ steps: job.mode === 'listening' ? [] : await materializeJobExecutionSteps({
37
37
  model,
38
38
  job,
39
39
  context,
@@ -42,7 +42,7 @@ export function materializeWorkflowModel(params) {
42
42
  agentToolContext,
43
43
  agentToolSnapshot
44
44
  })
45
- }));
45
+ })));
46
46
  }
47
47
  export function materializeJobRunner(params) {
48
48
  const resolvedLabels = (params.job.runnerTemplates ?? []).map((template)=>completeStepField({