@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.
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +104 -0
- package/dist/core/agent-defaults.d.ts +17 -0
- package/dist/core/agent-defaults.d.ts.map +1 -0
- package/dist/core/agent-defaults.js +21 -0
- package/dist/core/agent-defaults.js.map +1 -0
- package/dist/core/agent-tool-capability-warning.d.ts +4 -0
- package/dist/core/agent-tool-capability-warning.d.ts.map +1 -1
- package/dist/core/agent-tool-capability-warning.js +15 -17
- package/dist/core/agent-tool-capability-warning.js.map +1 -1
- package/dist/core/agent-tools.d.ts +11 -9
- package/dist/core/agent-tools.d.ts.map +1 -1
- package/dist/core/agent-tools.js +23 -18
- package/dist/core/agent-tools.js.map +1 -1
- package/dist/core/checkout.d.ts +21 -7
- package/dist/core/checkout.d.ts.map +1 -1
- package/dist/core/checkout.js +23 -11
- package/dist/core/checkout.js.map +1 -1
- package/dist/core/entities/workflow-run-attempt.d.ts +1 -1
- package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -1
- package/dist/core/entities/workflow-run-attempt.js.map +1 -1
- package/dist/core/job-execution.d.ts +3 -1
- package/dist/core/job-execution.d.ts.map +1 -1
- package/dist/core/job-execution.js +14 -12
- package/dist/core/job-execution.js.map +1 -1
- package/dist/core/job-transition/derive-job-execution-outputs.d.ts +1 -1
- package/dist/core/job-transition/derive-job-execution-outputs.d.ts.map +1 -1
- package/dist/core/job-transition/derive-job-execution-outputs.js.map +1 -1
- package/dist/core/job-transition/derive-job-success.js +1 -1
- package/dist/core/job-transition/derive-job-success.js.map +1 -1
- package/dist/core/listener-execution-materialization.d.ts +3 -3
- package/dist/core/listener-execution-materialization.d.ts.map +1 -1
- package/dist/core/listener-execution-materialization.js +3 -4
- package/dist/core/listener-execution-materialization.js.map +1 -1
- package/dist/core/run-workflow.d.ts +12 -1
- package/dist/core/run-workflow.d.ts.map +1 -1
- package/dist/core/run-workflow.js +13 -8
- package/dist/core/run-workflow.js.map +1 -1
- package/dist/core/step-config/agent.d.ts +8 -8
- package/dist/core/step-config/agent.d.ts.map +1 -1
- package/dist/core/step-config/agent.js +12 -10
- package/dist/core/step-config/agent.js.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.d.ts +4 -4
- package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.js +2 -2
- package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts +3 -3
- package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.js +5 -6
- package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
- package/dist/core/step-config/materialize-workflow-model.d.ts +3 -3
- package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -1
- package/dist/core/step-config/materialize-workflow-model.js +4 -4
- package/dist/core/step-config/materialize-workflow-model.js.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.d.ts +1 -1
- package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.js.map +1 -1
- package/dist/core/step-config/resolve-step-config.d.ts +4 -4
- package/dist/core/step-config/resolve-step-config.d.ts.map +1 -1
- package/dist/core/step-config/resolve-step-config.js +6 -6
- package/dist/core/step-config/resolve-step-config.js.map +1 -1
- package/dist/core/step-config/run.d.ts +1 -1
- package/dist/core/step-config/run.d.ts.map +1 -1
- package/dist/core/step-config/run.js.map +1 -1
- package/dist/core/workflow-run-creation.d.ts +3 -3
- package/dist/core/workflow-run-creation.d.ts.map +1 -1
- package/dist/core/workflow-run-creation.js +3 -4
- package/dist/core/workflow-run-creation.js.map +1 -1
- package/dist/db/db.d.ts +16 -4
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/job-listeners.d.ts +7 -1
- package/dist/db/job-listeners.d.ts.map +1 -1
- package/dist/db/job-listeners.js +10 -5
- package/dist/db/job-listeners.js.map +1 -1
- package/dist/db/runner-lease-table.d.ts +5 -5
- package/dist/db/runner-lease-table.d.ts.map +1 -1
- package/dist/db/runner-lease-table.js +3 -2
- package/dist/db/runner-lease-table.js.map +1 -1
- package/dist/db/schema/workflow-run-attempts.d.ts +9 -3
- package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -1
- package/dist/db/schema/workflow-run-attempts.js +2 -1
- package/dist/db/schema/workflow-run-attempts.js.map +1 -1
- package/dist/db/schema/workflow-runs.js +1 -1
- package/dist/db/schema/workflow-runs.js.map +1 -1
- package/dist/db/workflow-runs/job-executions.d.ts +5 -0
- package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
- package/dist/db/workflow-runs/job-executions.js +14 -7
- package/dist/db/workflow-runs/job-executions.js.map +1 -1
- package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
- package/dist/db/workflow-runs/jobs.js +3 -1
- package/dist/db/workflow-runs/jobs.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts +9 -2
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js +12 -9
- package/dist/db/workflow-runs/run-create.js.map +1 -1
- package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-rerun.js +3 -1
- package/dist/db/workflow-runs/run-rerun.js.map +1 -1
- package/dist/index.d.ts +18 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -37
- package/dist/index.js.map +1 -1
- package/dist/presentation/dto/checkout-token.d.ts +14 -1
- package/dist/presentation/dto/checkout-token.d.ts.map +1 -1
- package/dist/presentation/dto/checkout-token.js.map +1 -1
- package/dist/presentation/index.d.ts +1 -1
- package/dist/presentation/index.d.ts.map +1 -1
- package/dist/presentation/index.js +1 -1
- package/dist/presentation/index.js.map +1 -1
- package/dist/presentation/inter-module.d.ts +18 -0
- package/dist/presentation/inter-module.d.ts.map +1 -0
- package/dist/presentation/inter-module.js +113 -0
- package/dist/presentation/inter-module.js.map +1 -0
- package/dist/presentation/routes/agent-runtime-config.d.ts +6 -1
- package/dist/presentation/routes/agent-runtime-config.d.ts.map +1 -1
- package/dist/presentation/routes/agent-runtime-config.js +59 -57
- package/dist/presentation/routes/agent-runtime-config.js.map +1 -1
- package/dist/presentation/routes/cancel-run.d.ts +2 -1
- package/dist/presentation/routes/cancel-run.d.ts.map +1 -1
- package/dist/presentation/routes/cancel-run.js +37 -34
- package/dist/presentation/routes/cancel-run.js.map +1 -1
- package/dist/presentation/routes/checkout-token.d.ts +8 -1
- package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
- package/dist/presentation/routes/checkout-token.js +65 -47
- package/dist/presentation/routes/checkout-token.js.map +1 -1
- package/dist/presentation/routes/get-run-aggregates.d.ts +2 -1
- package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
- package/dist/presentation/routes/get-run-aggregates.js +44 -53
- package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
- package/dist/presentation/routes/get-run.d.ts +2 -1
- package/dist/presentation/routes/get-run.d.ts.map +1 -1
- package/dist/presentation/routes/get-run.js +53 -50
- package/dist/presentation/routes/get-run.js.map +1 -1
- package/dist/presentation/routes/get-step-secrets.d.ts +3 -1
- package/dist/presentation/routes/get-step-secrets.d.ts.map +1 -1
- package/dist/presentation/routes/get-step-secrets.js +72 -68
- package/dist/presentation/routes/get-step-secrets.js.map +1 -1
- package/dist/presentation/routes/index.d.ts +19 -2
- package/dist/presentation/routes/index.d.ts.map +1 -1
- package/dist/presentation/routes/index.js +38 -30
- package/dist/presentation/routes/index.js.map +1 -1
- package/dist/presentation/routes/leased-step.d.ts +2 -0
- package/dist/presentation/routes/leased-step.d.ts.map +1 -1
- package/dist/presentation/routes/leased-step.js +1 -2
- package/dist/presentation/routes/leased-step.js.map +1 -1
- package/dist/presentation/routes/list-run-attempts.d.ts +2 -1
- package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -1
- package/dist/presentation/routes/list-run-attempts.js +29 -26
- package/dist/presentation/routes/list-run-attempts.js.map +1 -1
- package/dist/presentation/routes/list-runs.d.ts +2 -1
- package/dist/presentation/routes/list-runs.d.ts.map +1 -1
- package/dist/presentation/routes/list-runs.js +51 -60
- package/dist/presentation/routes/list-runs.js.map +1 -1
- package/dist/presentation/routes/next-step.d.ts +10 -1
- package/dist/presentation/routes/next-step.d.ts.map +1 -1
- package/dist/presentation/routes/next-step.js +64 -50
- package/dist/presentation/routes/next-step.js.map +1 -1
- package/dist/presentation/routes/project-access.d.ts +10 -0
- package/dist/presentation/routes/project-access.d.ts.map +1 -0
- package/dist/presentation/routes/project-access.js +17 -0
- package/dist/presentation/routes/project-access.js.map +1 -0
- package/dist/presentation/routes/report-step.d.ts +2 -1
- package/dist/presentation/routes/report-step.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.js +62 -61
- package/dist/presentation/routes/report-step.js.map +1 -1
- package/dist/presentation/routes/require-accessible-run.d.ts +3 -1
- package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -1
- package/dist/presentation/routes/require-accessible-run.js +3 -6
- package/dist/presentation/routes/require-accessible-run.js.map +1 -1
- package/dist/presentation/routes/rerun-run.d.ts +2 -1
- package/dist/presentation/routes/rerun-run.d.ts.map +1 -1
- package/dist/presentation/routes/rerun-run.js +46 -43
- package/dist/presentation/routes/rerun-run.js.map +1 -1
- package/dist/temporal/activities/index.d.ts +44 -9
- package/dist/temporal/activities/index.d.ts.map +1 -1
- package/dist/temporal/activities/index.js +13 -9
- package/dist/temporal/activities/index.js.map +1 -1
- package/dist/temporal/activities/orchestration-activities.d.ts +20 -11
- package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
- package/dist/temporal/activities/orchestration-activities.js +48 -33
- package/dist/temporal/activities/orchestration-activities.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +41 -44
- package/src/core/agent-defaults.test.ts +28 -0
- package/src/core/agent-defaults.ts +36 -0
- package/src/core/agent-tool-capability-warning.test.ts +36 -11
- package/src/core/agent-tool-capability-warning.ts +27 -25
- package/src/core/agent-tools.ts +33 -36
- package/src/core/checkout.test.ts +38 -25
- package/src/core/checkout.ts +41 -14
- package/src/core/entities/workflow-run-attempt.ts +1 -1
- package/src/core/job-execution.ts +19 -9
- package/src/core/job-transition/derive-job-execution-outputs.ts +1 -1
- package/src/core/job-transition/derive-job-success.ts +1 -1
- package/src/core/listener-execution-materialization.test.ts +4 -2
- package/src/core/listener-execution-materialization.ts +6 -9
- package/src/core/run-workflow.test.ts +43 -38
- package/src/core/run-workflow.ts +26 -9
- package/src/core/step-config/agent.ts +24 -26
- package/src/core/step-config/complete-step-dispatch-config.test.ts +22 -23
- package/src/core/step-config/complete-step-dispatch-config.ts +6 -6
- package/src/core/step-config/materialize-job-execution-steps.test.ts +34 -23
- package/src/core/step-config/materialize-job-execution-steps.ts +38 -39
- package/src/core/step-config/materialize-workflow-model.test.ts +94 -82
- package/src/core/step-config/materialize-workflow-model.ts +31 -29
- package/src/core/step-config/resolve-job-execution-name.ts +1 -1
- package/src/core/step-config/resolve-step-config.ts +11 -9
- package/src/core/step-config/run.ts +1 -1
- package/src/core/workflow-run-creation.test.ts +14 -10
- package/src/core/workflow-run-creation.ts +6 -9
- package/src/db/job-listeners.ts +20 -5
- package/src/db/runner-lease-table.ts +2 -2
- package/src/db/schema/workflow-run-attempts.ts +7 -3
- package/src/db/schema/workflow-runs.ts +1 -1
- package/src/db/workflow-runs/job-executions.ts +15 -1
- package/src/db/workflow-runs/jobs.ts +4 -1
- package/src/db/workflow-runs/run-create.test.ts +7 -1
- package/src/db/workflow-runs/run-create.ts +25 -15
- package/src/db/workflow-runs/run-rerun.test.ts +1 -1
- package/src/db/workflow-runs/run-rerun.ts +6 -3
- package/src/index.ts +75 -33
- package/src/presentation/dto/checkout-token.ts +7 -1
- package/src/presentation/index.ts +1 -1
- package/src/presentation/inter-module.test.ts +149 -0
- package/src/presentation/inter-module.ts +132 -0
- package/src/presentation/routes/agent-runtime-config.test.ts +53 -10
- package/src/presentation/routes/agent-runtime-config.ts +89 -64
- package/src/presentation/routes/cancel-run.test.ts +10 -20
- package/src/presentation/routes/cancel-run.ts +30 -27
- package/src/presentation/routes/checkout-token.test.ts +52 -33
- package/src/presentation/routes/checkout-token.ts +109 -49
- package/src/presentation/routes/get-run-aggregates.test.ts +13 -7
- package/src/presentation/routes/get-run-aggregates.ts +54 -57
- package/src/presentation/routes/get-run.test.ts +10 -18
- package/src/presentation/routes/get-run.ts +51 -48
- package/src/presentation/routes/get-step-secrets.test.ts +29 -7
- package/src/presentation/routes/get-step-secrets.ts +72 -61
- package/src/presentation/routes/index.test.ts +16 -1
- package/src/presentation/routes/index.ts +54 -29
- package/src/presentation/routes/leased-step.ts +3 -2
- package/src/presentation/routes/list-run-attempts.test.ts +9 -19
- package/src/presentation/routes/list-run-attempts.ts +21 -18
- package/src/presentation/routes/list-runs.test.ts +13 -7
- package/src/presentation/routes/list-runs.ts +64 -67
- package/src/presentation/routes/next-step.test.ts +30 -11
- package/src/presentation/routes/next-step.ts +68 -48
- package/src/presentation/routes/project-access.ts +16 -0
- package/src/presentation/routes/report-step.test.ts +18 -2
- package/src/presentation/routes/report-step.ts +51 -49
- package/src/presentation/routes/require-accessible-run.ts +5 -2
- package/src/presentation/routes/rerun-run.test.ts +9 -19
- package/src/presentation/routes/rerun-run.ts +39 -36
- package/src/temporal/activities/index.ts +32 -12
- package/src/temporal/activities/orchestration-activities.test.ts +10 -8
- package/src/temporal/activities/orchestration-activities.ts +74 -50
- package/src/temporal/workflows/job-execution-orchestration.test.ts +47 -2
- package/test/env.ts +1 -3
- package/test/factories/project.ts +10 -5
- package/test/factories/workflow-model.test.ts +5 -1
- package/test/factories/workflow-model.ts +1 -1
- package/test/factories/workflow-run.ts +1 -1
- package/test/fixtures/agent-inter-module.ts +27 -0
- package/test/fixtures/annotations-inter-module.ts +5 -0
- package/test/fixtures/auth-inter-module.ts +22 -0
- package/test/fixtures/lease-token.ts +2 -1
- package/test/fixtures/projects-inter-module.ts +8 -0
- package/test/fixtures/runners-inter-module.ts +52 -0
- package/test/fixtures/secrets-inter-module.ts +61 -0
- package/test/globalSetup.ts +11 -11
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/core/source-control.d.ts +0 -5
- package/dist/core/source-control.d.ts.map +0 -1
- package/dist/core/source-control.js +0 -19
- package/dist/core/source-control.js.map +0 -1
- package/src/core/source-control.test.ts +0 -17
- package/src/core/source-control.ts +0 -22
- package/src/temporal/workflows/job-execution-orchestration-timeout.test.ts +0 -165
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/core/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/core/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAQpE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE;QAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CAC3C;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiBzB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,KAAK,EACL,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;CAChC,GAAG,OAAO,CAAC;IACV,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,IAAI,CAAA;SAAC,CAAC;QACjE,SAAS,CAAC,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KAC3C,CAAC;IACF,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC,CAwBD"}
|
package/dist/core/checkout.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { getProjectById } from '@shipfox/api-projects';
|
|
2
1
|
import { getJobById, getWorkflowRunByAttemptId } from '#db/workflow-runs.js';
|
|
3
2
|
import { CheckoutIntentUnresolvedError, JobNotFoundError, WorkflowRunNotFoundError } from './errors.js';
|
|
4
3
|
/**
|
|
5
4
|
* Resolves what to check out for a job, keyed off the authoritative `jobId`
|
|
6
5
|
* (`workflowRunId`/`workflowRunAttemptId`/`workspaceId` in the lease claim are informational).
|
|
7
6
|
* Chain: job → attempt → run → project source metadata. Credential-free.
|
|
8
|
-
*/ export async function resolveCheckoutIntent(jobId) {
|
|
7
|
+
*/ export async function resolveCheckoutIntent(jobId, projects) {
|
|
9
8
|
const job = await getJobById(jobId);
|
|
10
9
|
if (!job) throw new JobNotFoundError(jobId);
|
|
11
10
|
const run = await getWorkflowRunByAttemptId(job.workflowRunAttemptId);
|
|
12
11
|
if (!run) throw new WorkflowRunNotFoundError(job.workflowRunAttemptId);
|
|
13
|
-
const project = await getProjectById(
|
|
14
|
-
|
|
12
|
+
const { project } = await projects.getProjectById({
|
|
13
|
+
projectId: run.projectId
|
|
14
|
+
});
|
|
15
|
+
if (project === null) throw new CheckoutIntentUnresolvedError(run.projectId);
|
|
15
16
|
return {
|
|
16
17
|
workspaceId: project.workspaceId,
|
|
17
18
|
connectionId: project.sourceConnectionId,
|
|
@@ -22,19 +23,30 @@ import { CheckoutIntentUnresolvedError, JobNotFoundError, WorkflowRunNotFoundErr
|
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* Resolves the job's checkout intent and exchanges it for a short-lived,
|
|
25
|
-
* scoped checkout spec. `ref`
|
|
26
|
-
*
|
|
27
|
-
*/ export async function createJobCheckoutSpec({ jobId,
|
|
28
|
-
const intent = await resolveCheckoutIntent(jobId);
|
|
29
|
-
const
|
|
26
|
+
* scoped checkout spec. Omitting `ref` lets the provider use the repository's
|
|
27
|
+
* default branch while preserving the JSON-only inter-module boundary.
|
|
28
|
+
*/ export async function createJobCheckoutSpec({ jobId, integrations, projects }) {
|
|
29
|
+
const intent = await resolveCheckoutIntent(jobId, projects);
|
|
30
|
+
const response = await integrations.createCheckoutSpec({
|
|
30
31
|
workspaceId: intent.workspaceId,
|
|
31
32
|
connectionId: intent.connectionId,
|
|
32
33
|
externalRepositoryId: intent.externalRepositoryId,
|
|
33
|
-
ref: undefined,
|
|
34
34
|
permissions: intent.permissions
|
|
35
35
|
});
|
|
36
|
+
const { credentials, gitAuthor, ...checkout } = response;
|
|
36
37
|
return {
|
|
37
|
-
spec
|
|
38
|
+
spec: {
|
|
39
|
+
...checkout,
|
|
40
|
+
...credentials ? {
|
|
41
|
+
credentials: {
|
|
42
|
+
...credentials,
|
|
43
|
+
expiresAt: new Date(credentials.expiresAt)
|
|
44
|
+
}
|
|
45
|
+
} : {},
|
|
46
|
+
...gitAuthor ? {
|
|
47
|
+
gitAuthor
|
|
48
|
+
} : {}
|
|
49
|
+
},
|
|
38
50
|
persistCredentials: intent.persistCredentials
|
|
39
51
|
};
|
|
40
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/checkout.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["../../src/core/checkout.ts"],"sourcesContent":["import type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {getJobById, getWorkflowRunByAttemptId} from '#db/workflow-runs.js';\nimport {\n CheckoutIntentUnresolvedError,\n JobNotFoundError,\n WorkflowRunNotFoundError,\n} from './errors.js';\n\nexport interface CheckoutIntent {\n workspaceId: string;\n connectionId: string;\n externalRepositoryId: string;\n persistCredentials: boolean;\n permissions: {contents: 'read' | 'write'};\n}\n\n/**\n * Resolves what to check out for a job, keyed off the authoritative `jobId`\n * (`workflowRunId`/`workflowRunAttemptId`/`workspaceId` in the lease claim are informational).\n * Chain: job → attempt → run → project source metadata. Credential-free.\n */\nexport async function resolveCheckoutIntent(\n jobId: string,\n projects: ProjectsModuleClient,\n): Promise<CheckoutIntent> {\n const job = await getJobById(jobId);\n if (!job) throw new JobNotFoundError(jobId);\n\n const run = await getWorkflowRunByAttemptId(job.workflowRunAttemptId);\n if (!run) throw new WorkflowRunNotFoundError(job.workflowRunAttemptId);\n\n const {project} = await projects.getProjectById({projectId: run.projectId});\n if (project === null) throw new CheckoutIntentUnresolvedError(run.projectId);\n\n return {\n workspaceId: project.workspaceId,\n connectionId: project.sourceConnectionId,\n externalRepositoryId: project.sourceExternalRepositoryId,\n persistCredentials: job.checkout.persistCredentials,\n permissions: job.checkout.permissions,\n };\n}\n\n/**\n * Resolves the job's checkout intent and exchanges it for a short-lived,\n * scoped checkout spec. Omitting `ref` lets the provider use the repository's\n * default branch while preserving the JSON-only inter-module boundary.\n */\nexport async function createJobCheckoutSpec({\n jobId,\n integrations,\n projects,\n}: {\n jobId: string;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): Promise<{\n spec: {\n repositoryUrl: string;\n ref: string;\n credentials?: {username: string; token: string; expiresAt: Date};\n gitAuthor?: {name: string; email: string};\n };\n persistCredentials: boolean;\n}> {\n const intent = await resolveCheckoutIntent(jobId, projects);\n const response = await integrations.createCheckoutSpec({\n workspaceId: intent.workspaceId,\n connectionId: intent.connectionId,\n externalRepositoryId: intent.externalRepositoryId,\n permissions: intent.permissions,\n });\n const {credentials, gitAuthor, ...checkout} = response;\n return {\n spec: {\n ...checkout,\n ...(credentials\n ? {\n credentials: {\n ...credentials,\n expiresAt: new Date(credentials.expiresAt),\n },\n }\n : {}),\n ...(gitAuthor ? {gitAuthor} : {}),\n },\n persistCredentials: intent.persistCredentials,\n };\n}\n"],"names":["getJobById","getWorkflowRunByAttemptId","CheckoutIntentUnresolvedError","JobNotFoundError","WorkflowRunNotFoundError","resolveCheckoutIntent","jobId","projects","job","run","workflowRunAttemptId","project","getProjectById","projectId","workspaceId","connectionId","sourceConnectionId","externalRepositoryId","sourceExternalRepositoryId","persistCredentials","checkout","permissions","createJobCheckoutSpec","integrations","intent","response","createCheckoutSpec","credentials","gitAuthor","spec","expiresAt","Date"],"mappings":"AAEA,SAAQA,UAAU,EAAEC,yBAAyB,QAAO,uBAAuB;AAC3E,SACEC,6BAA6B,EAC7BC,gBAAgB,EAChBC,wBAAwB,QACnB,cAAc;AAUrB;;;;CAIC,GACD,OAAO,eAAeC,sBACpBC,KAAa,EACbC,QAA8B;IAE9B,MAAMC,MAAM,MAAMR,WAAWM;IAC7B,IAAI,CAACE,KAAK,MAAM,IAAIL,iBAAiBG;IAErC,MAAMG,MAAM,MAAMR,0BAA0BO,IAAIE,oBAAoB;IACpE,IAAI,CAACD,KAAK,MAAM,IAAIL,yBAAyBI,IAAIE,oBAAoB;IAErE,MAAM,EAACC,OAAO,EAAC,GAAG,MAAMJ,SAASK,cAAc,CAAC;QAACC,WAAWJ,IAAII,SAAS;IAAA;IACzE,IAAIF,YAAY,MAAM,MAAM,IAAIT,8BAA8BO,IAAII,SAAS;IAE3E,OAAO;QACLC,aAAaH,QAAQG,WAAW;QAChCC,cAAcJ,QAAQK,kBAAkB;QACxCC,sBAAsBN,QAAQO,0BAA0B;QACxDC,oBAAoBX,IAAIY,QAAQ,CAACD,kBAAkB;QACnDE,aAAab,IAAIY,QAAQ,CAACC,WAAW;IACvC;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeC,sBAAsB,EAC1ChB,KAAK,EACLiB,YAAY,EACZhB,QAAQ,EAKT;IASC,MAAMiB,SAAS,MAAMnB,sBAAsBC,OAAOC;IAClD,MAAMkB,WAAW,MAAMF,aAAaG,kBAAkB,CAAC;QACrDZ,aAAaU,OAAOV,WAAW;QAC/BC,cAAcS,OAAOT,YAAY;QACjCE,sBAAsBO,OAAOP,oBAAoB;QACjDI,aAAaG,OAAOH,WAAW;IACjC;IACA,MAAM,EAACM,WAAW,EAAEC,SAAS,EAAE,GAAGR,UAAS,GAAGK;IAC9C,OAAO;QACLI,MAAM;YACJ,GAAGT,QAAQ;YACX,GAAIO,cACA;gBACEA,aAAa;oBACX,GAAGA,WAAW;oBACdG,WAAW,IAAIC,KAAKJ,YAAYG,SAAS;gBAC3C;YACF,IACA,CAAC,CAAC;YACN,GAAIF,YAAY;gBAACA;YAAS,IAAI,CAAC,CAAC;QAClC;QACAT,oBAAoBK,OAAOL,kBAAkB;IAC/C;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowModel } from '@shipfox/api-definitions';
|
|
1
|
+
import type { WorkflowModel } from '@shipfox/api-definitions-dto';
|
|
2
2
|
import type { AgentToolMaterializationSnapshot } from '#core/agent-tools.js';
|
|
3
3
|
import type { WorkflowRunStatus } from './workflow-run.js';
|
|
4
4
|
export type RerunMode = 'all' | 'failed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run-attempt.d.ts","sourceRoot":"","sources":["../../../src/core/entities/workflow-run-attempt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"workflow-run-attempt.d.ts","sourceRoot":"","sources":["../../../src/core/entities/workflow-run-attempt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAC,gCAAgC,EAAC,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,wBAAwB,EAAE,gCAAgC,GAAG,IAAI,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/entities/workflow-run-attempt.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions';\nimport type {AgentToolMaterializationSnapshot} from '#core/agent-tools.js';\nimport type {WorkflowRunStatus} from './workflow-run.js';\n\nexport type RerunMode = 'all' | 'failed';\n\nexport interface WorkflowRunAttempt {\n id: string;\n workflowRunId: string;\n attempt: number;\n status: WorkflowRunStatus;\n rerunMode: RerunMode | null;\n rerunByUserId: string | null;\n model: WorkflowModel | null;\n agentToolMaterialization: AgentToolMaterializationSnapshot | null;\n version: number;\n createdAt: Date;\n updatedAt: Date;\n startedAt: Date | null;\n finishedAt: Date | null;\n}\n"],"names":[],"mappings":"AAMA,WAcC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/entities/workflow-run-attempt.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {AgentToolMaterializationSnapshot} from '#core/agent-tools.js';\nimport type {WorkflowRunStatus} from './workflow-run.js';\n\nexport type RerunMode = 'all' | 'failed';\n\nexport interface WorkflowRunAttempt {\n id: string;\n workflowRunId: string;\n attempt: number;\n status: WorkflowRunStatus;\n rerunMode: RerunMode | null;\n rerunByUserId: string | null;\n model: WorkflowModel | null;\n agentToolMaterialization: AgentToolMaterializationSnapshot | null;\n version: number;\n createdAt: Date;\n updatedAt: Date;\n startedAt: Date | null;\n finishedAt: Date | null;\n}\n"],"names":[],"mappings":"AAMA,WAcC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
|
|
1
2
|
import type { LogOutcomeDto } from '@shipfox/api-workflows-dto';
|
|
2
3
|
import type { Step } from './entities/step.js';
|
|
3
4
|
import { type StepProgressionOutcome } from './step-transition/apply-step-transition.js';
|
|
@@ -15,9 +16,10 @@ export interface NextStepForLeasedJobExecutionParams {
|
|
|
15
16
|
jobId: string;
|
|
16
17
|
jobExecutionId: string;
|
|
17
18
|
runnerSessionId: string;
|
|
19
|
+
agent?: AgentInterModuleClient | undefined;
|
|
18
20
|
}
|
|
19
21
|
export declare function nextStepForLeasedJobExecution(params: NextStepForLeasedJobExecutionParams): Promise<NextStep>;
|
|
20
|
-
export declare function nextStepForJob(jobId: string): Promise<NextStep>;
|
|
22
|
+
export declare function nextStepForJob(jobId: string, agent?: AgentInterModuleClient | undefined): Promise<NextStep>;
|
|
21
23
|
export interface RecordStepResultParams {
|
|
22
24
|
jobExecutionId: string;
|
|
23
25
|
stepId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-execution.d.ts","sourceRoot":"","sources":["../../src/core/job-execution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-execution.d.ts","sourceRoot":"","sources":["../../src/core/job-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AA8B9D,OAAO,KAAK,EAAgC,IAAI,EAAmB,MAAM,oBAAoB,CAAC;AAa9F,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,4CAA4C,CAAC;AAcpD,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAElF,KAAK,gBAAgB,GAAG,uBAAuB,CAAC;AAUhD,MAAM,MAAM,QAAQ,GAChB;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAC,GAC/C;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAC,CAAC;AAqQ7C,MAAM,WAAW,mCAAmC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mCAAmC,GAC1C,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,sBAAsB,GAAG,SAAS,GACzC,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAGvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AAa7D,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAQlC;AAsGD,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,EACZ,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,0BAA0B,CAU5B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { catalogDefaultAgentResolver } from '@shipfox/api-agent/core/resolve-agent-config';
|
|
2
1
|
import { coerceStepOutputs, evaluatePlannedPredicateAtSite } from '@shipfox/expression';
|
|
3
2
|
import { withTransaction } from '#db/db.js';
|
|
4
3
|
import { countStepAttempts, dispatchStepWithCompletedConfig, finishStepAttempt, getDirectDependencyJobContexts, getJobExecutionById, getLatestJobExecutionByJobId, getStepAttemptsByJobExecutionId, getStepsByJobExecutionIdForUpdate, insertRunningStepAttempt, lockActiveJobExecutionLeaseForUpdate, markStepRunning, markStepSkipped, settleJobFailed, writeJobStepsSettledOutbox } from '#db/workflow-runs.js';
|
|
5
4
|
import { recordWorkflowJobExecutionStepsSettled, recordWorkflowStepRestartEnqueued } from '#metrics/instance.js';
|
|
5
|
+
import { createAgentDefaultsResolver } from './agent-defaults.js';
|
|
6
6
|
import { defaultStepConditionTrace, explicitConditionTrace } from './condition-trace.js';
|
|
7
7
|
import { AgentConfigUnresolvableError, InterpolationUnresolvableError, JobLeaseNotActiveError, JobNotFoundError, StepAttemptAheadError, StepNotFoundError, StepNotRunningError } from './errors.js';
|
|
8
8
|
import { assembleStepDispatchContext } from './step-config/assemble-run-context.js';
|
|
@@ -11,7 +11,7 @@ import { applyStepTransition } from './step-transition/apply-step-transition.js'
|
|
|
11
11
|
import { decideStepTransition, deriveCompletion, isTerminal } from './step-transition/decide-step-transition.js';
|
|
12
12
|
import { evaluateGate, evaluateGateFeedback, gateResultPayload, readStepGate } from './step-transition/evaluate-gate.js';
|
|
13
13
|
import { readStepOutputs } from './step-transition/read-step-outputs.js';
|
|
14
|
-
async function nextStepForJobExecutionInTransaction(jobExecutionId, tx) {
|
|
14
|
+
async function nextStepForJobExecutionInTransaction(jobExecutionId, tx, agent) {
|
|
15
15
|
const steps = await getStepsByJobExecutionIdForUpdate(jobExecutionId, tx);
|
|
16
16
|
const hasNoSteps = steps.length === 0;
|
|
17
17
|
// An unknown or step-less execution has nothing to progress; rejecting it stops
|
|
@@ -42,10 +42,11 @@ async function nextStepForJobExecutionInTransaction(jobExecutionId, tx) {
|
|
|
42
42
|
jobExecution,
|
|
43
43
|
attempts,
|
|
44
44
|
jobs,
|
|
45
|
-
tx
|
|
45
|
+
tx,
|
|
46
|
+
agent
|
|
46
47
|
});
|
|
47
48
|
}
|
|
48
|
-
async function resolveNextPendingStep({ jobExecutionId, steps, jobExecution, attempts, jobs, tx }) {
|
|
49
|
+
async function resolveNextPendingStep({ jobExecutionId, steps, jobExecution, attempts, jobs, tx, agent }) {
|
|
49
50
|
let skippedAny = false;
|
|
50
51
|
let currentSteps = steps;
|
|
51
52
|
while(true){
|
|
@@ -82,7 +83,8 @@ async function resolveNextPendingStep({ jobExecutionId, steps, jobExecution, att
|
|
|
82
83
|
pending,
|
|
83
84
|
jobExecution,
|
|
84
85
|
context,
|
|
85
|
-
tx
|
|
86
|
+
tx,
|
|
87
|
+
agent
|
|
86
88
|
});
|
|
87
89
|
}
|
|
88
90
|
const skipped = await markStepSkipped({
|
|
@@ -115,12 +117,12 @@ async function dispatchPendingStep(params) {
|
|
|
115
117
|
dispatched: true
|
|
116
118
|
};
|
|
117
119
|
}
|
|
118
|
-
async function dispatchPendingStepWithConfigPlan({ jobExecutionId, pending, jobExecution, context, tx }) {
|
|
120
|
+
async function dispatchPendingStepWithConfigPlan({ jobExecutionId, pending, jobExecution, context, tx, agent }) {
|
|
119
121
|
try {
|
|
120
|
-
const completed = completeStepDispatchConfig({
|
|
122
|
+
const completed = await completeStepDispatchConfig({
|
|
121
123
|
step: pending,
|
|
122
124
|
context,
|
|
123
|
-
resolveAgentDefaults:
|
|
125
|
+
resolveAgentDefaults: agent ? createAgentDefaultsResolver(agent, null) : undefined,
|
|
124
126
|
definitionId: jobExecution.jobId
|
|
125
127
|
});
|
|
126
128
|
const marked = await dispatchStepWithCompletedConfig({
|
|
@@ -161,7 +163,7 @@ async function dispatchPendingStepWithConfigPlan({ jobExecutionId, pending, jobE
|
|
|
161
163
|
error: failureError
|
|
162
164
|
});
|
|
163
165
|
if (status) recordWorkflowJobExecutionStepsSettled(status);
|
|
164
|
-
return status === null ? nextStepForJobExecutionInTransaction(jobExecutionId, tx) : {
|
|
166
|
+
return status === null ? nextStepForJobExecutionInTransaction(jobExecutionId, tx, agent) : {
|
|
165
167
|
kind: 'done',
|
|
166
168
|
status
|
|
167
169
|
};
|
|
@@ -235,14 +237,14 @@ export function nextStepForLeasedJobExecution(params) {
|
|
|
235
237
|
return withTransaction(async (tx)=>{
|
|
236
238
|
const leaseIsActive = await lockActiveJobExecutionLeaseForUpdate(params, tx);
|
|
237
239
|
if (!leaseIsActive) throw new JobLeaseNotActiveError(params.jobExecutionId);
|
|
238
|
-
return nextStepForJobExecutionInTransaction(params.jobExecutionId, tx);
|
|
240
|
+
return nextStepForJobExecutionInTransaction(params.jobExecutionId, tx, params.agent);
|
|
239
241
|
});
|
|
240
242
|
}
|
|
241
|
-
export function nextStepForJob(jobId) {
|
|
243
|
+
export function nextStepForJob(jobId, agent) {
|
|
242
244
|
return withTransaction(async (tx)=>{
|
|
243
245
|
const jobExecution = await getLatestJobExecutionByJobId(jobId, tx);
|
|
244
246
|
if (!jobExecution) throw new JobNotFoundError(jobId);
|
|
245
|
-
return nextStepForJobExecutionInTransaction(jobExecution.id, tx);
|
|
247
|
+
return nextStepForJobExecutionInTransaction(jobExecution.id, tx, agent);
|
|
246
248
|
});
|
|
247
249
|
}
|
|
248
250
|
function outcomeFromSteps(steps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/job-execution.ts"],"sourcesContent":["import {catalogDefaultAgentResolver} from '@shipfox/api-agent/core/resolve-agent-config';\nimport type {LogOutcomeDto} from '@shipfox/api-workflows-dto';\nimport {\n coerceStepOutputs,\n evaluatePlannedPredicateAtSite,\n type StepOutputCoercionError,\n} from '@shipfox/expression';\nimport {type Tx, withTransaction} from '#db/db.js';\nimport {\n countStepAttempts,\n dispatchStepWithCompletedConfig,\n finishStepAttempt,\n getDirectDependencyJobContexts,\n getJobExecutionById,\n getLatestJobExecutionByJobId,\n getStepAttemptsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n insertRunningStepAttempt,\n lockActiveJobExecutionLeaseForUpdate,\n markStepRunning,\n markStepSkipped,\n settleJobFailed,\n writeJobStepsSettledOutbox,\n} from '#db/workflow-runs.js';\nimport {\n recordWorkflowJobExecutionStepsSettled,\n recordWorkflowStepRestartEnqueued,\n} from '#metrics/instance.js';\nimport {defaultStepConditionTrace, explicitConditionTrace} from './condition-trace.js';\nimport type {JobExecution} from './entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry, Step, StepStatusReason} from './entities/step.js';\nimport {\n AgentConfigUnresolvableError,\n InterpolationUnresolvableError,\n JobLeaseNotActiveError,\n JobNotFoundError,\n StepAttemptAheadError,\n StepNotFoundError,\n StepNotRunningError,\n} from './errors.js';\nimport {assembleStepDispatchContext} from './step-config/assemble-run-context.js';\nimport {completeStepDispatchConfig} from './step-config/complete-step-dispatch-config.js';\nimport type {WorkflowEvaluationContext} from './step-config/workflow-evaluation-context.js';\nimport {\n applyStepTransition,\n type StepProgressionMetrics,\n type StepProgressionOutcome,\n} from './step-transition/apply-step-transition.js';\nimport {\n decideStepTransition,\n deriveCompletion,\n isTerminal,\n type StepTransitionDecision,\n} from './step-transition/decide-step-transition.js';\nimport {\n evaluateGate,\n evaluateGateFeedback,\n gateResultPayload,\n readStepGate,\n} from './step-transition/evaluate-gate.js';\nimport {readStepOutputs} from './step-transition/read-step-outputs.js';\nimport type {RuntimeCompletionStatus} from './workflow-scheduling/runtime-dag.js';\n\ntype CompletionStatus = RuntimeCompletionStatus;\n\ntype ReportedStepResult = {\n readonly status: 'succeeded' | 'failed';\n readonly error: Record<string, unknown> | null;\n readonly output: Record<string, unknown> | null;\n readonly response: string | null;\n readonly exitCode: number | null;\n};\n\nexport type NextStep =\n | {kind: 'step'; step: Step; dispatched: boolean}\n | {kind: 'done'; status: CompletionStatus};\n\ntype DispatchConfigError = InterpolationUnresolvableError | AgentConfigUnresolvableError;\n\ninterface PendingStepDispatchParams {\n readonly jobExecutionId: string;\n readonly pending: Step;\n readonly jobExecution: JobExecution;\n readonly context: WorkflowEvaluationContext;\n readonly tx: Tx;\n}\n\ninterface ResolvePendingStepParams {\n readonly jobExecutionId: string;\n readonly steps: Step[];\n readonly jobExecution: JobExecution;\n readonly attempts: Awaited<ReturnType<typeof getStepAttemptsByJobExecutionId>>;\n readonly jobs: Awaited<ReturnType<typeof getDirectDependencyJobContexts>>;\n readonly tx: Tx;\n}\n\ntype StepConditionOutcome =\n | {kind: 'run'}\n | {\n kind: 'skip';\n statusReason: StepStatusReason;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[];\n };\n\nasync function nextStepForJobExecutionInTransaction(\n jobExecutionId: string,\n tx: Tx,\n): Promise<NextStep> {\n const steps = await getStepsByJobExecutionIdForUpdate(jobExecutionId, tx);\n const hasNoSteps = steps.length === 0;\n\n // An unknown or step-less execution has nothing to progress; rejecting it stops\n // a bad id from deriving a vacuous 'succeeded' completion below.\n if (hasNoSteps) throw new JobNotFoundError(jobExecutionId);\n\n // Re-deliver the in-flight step rather than advancing, so a retried pull\n // cannot skip a step.\n const running = steps.find((step) => step.status === 'running');\n const hasRunningStep = running !== undefined;\n if (hasRunningStep) return {kind: 'step', step: running, dispatched: false};\n\n const firstPending = steps.find((step) => step.status === 'pending');\n const hasPendingStep = firstPending !== undefined;\n if (!hasPendingStep) return {kind: 'done', status: deriveCompletion(steps)};\n\n const jobExecution = await getJobExecutionById(jobExecutionId, tx);\n if (!jobExecution) throw new JobNotFoundError(jobExecutionId);\n\n const attempts = await getStepAttemptsByJobExecutionId(jobExecutionId, tx);\n const jobs = await getDirectDependencyJobContexts(jobExecution.jobId, tx);\n\n return resolveNextPendingStep({jobExecutionId, steps, jobExecution, attempts, jobs, tx});\n}\n\nasync function resolveNextPendingStep({\n jobExecutionId,\n steps,\n jobExecution,\n attempts,\n jobs,\n tx,\n}: ResolvePendingStepParams): Promise<NextStep> {\n let skippedAny = false;\n let currentSteps = steps;\n\n while (true) {\n const pending = currentSteps.find((step) => step.status === 'pending');\n if (pending === undefined) {\n const status = deriveCompletion(currentSteps);\n if (skippedAny) {\n await writeJobStepsSettledOutbox(tx, {\n jobId: jobExecution.jobId,\n jobExecutionId,\n status,\n });\n recordWorkflowJobExecutionStepsSettled(status);\n }\n return {kind: 'done', status};\n }\n\n const context = assembleStepDispatchContext({\n steps: currentSteps,\n attempts,\n targetStepId: pending.id,\n jobExecution,\n jobs,\n });\n const condition = evaluateStepCondition({step: pending, context});\n if (condition.kind === 'run') {\n return dispatchPendingStep({jobExecutionId, pending, jobExecution, context, tx});\n }\n\n const skipped = await markStepSkipped(\n {\n jobExecutionId,\n stepId: pending.id,\n statusReason: condition.statusReason,\n evaluationTrace: condition.evaluationTrace,\n },\n tx,\n );\n const skippedStep = skipped ?? {\n ...pending,\n status: 'skipped' as const,\n statusReason: condition.statusReason,\n evaluationTrace: condition.evaluationTrace,\n error: null,\n };\n currentSteps = currentSteps.map((step) => (step.id === pending.id ? skippedStep : step));\n skippedAny = true;\n }\n}\n\nasync function dispatchPendingStep(params: PendingStepDispatchParams): Promise<NextStep> {\n const hasConfigPlan = params.pending.configPlan !== null;\n if (hasConfigPlan) return dispatchPendingStepWithConfigPlan(params);\n\n const marked = await markStepRunning(\n {jobExecutionId: params.jobExecutionId, stepId: params.pending.id},\n params.tx,\n );\n return {kind: 'step', step: marked ?? params.pending, dispatched: true};\n}\n\nasync function dispatchPendingStepWithConfigPlan({\n jobExecutionId,\n pending,\n jobExecution,\n context,\n tx,\n}: PendingStepDispatchParams): Promise<NextStep> {\n try {\n const completed = completeStepDispatchConfig({\n step: pending,\n context,\n resolveAgentDefaults: catalogDefaultAgentResolver,\n definitionId: jobExecution.jobId,\n });\n const marked = await dispatchStepWithCompletedConfig(\n {\n jobExecutionId,\n stepId: pending.id,\n config: completed.config,\n evaluationTrace: completed.trace,\n },\n tx,\n );\n return {kind: 'step', step: marked ?? {...pending, config: completed.config}, dispatched: true};\n } catch (error) {\n const configError = toDispatchConfigError(error);\n const isConfigError = configError !== null;\n if (!isConfigError) throw error;\n\n const failureError = dispatchConfigError(configError);\n await insertRunningStepAttempt(\n {\n jobExecutionId,\n stepId: pending.id,\n attempt: pending.currentAttempt,\n },\n tx,\n );\n await finishStepAttempt(\n {\n stepId: pending.id,\n attempt: pending.currentAttempt,\n status: 'failed',\n error: failureError,\n logOutcome: 'abandoned',\n },\n tx,\n );\n const status = await settleJobFailed(tx, {\n jobId: jobExecution.jobId,\n jobExecutionId,\n failedStepId: pending.id,\n error: failureError,\n });\n if (status) recordWorkflowJobExecutionStepsSettled(status);\n return status === null\n ? nextStepForJobExecutionInTransaction(jobExecutionId, tx)\n : {kind: 'done', status};\n }\n}\n\nfunction evaluateStepCondition(params: {\n readonly step: Step;\n readonly context: WorkflowEvaluationContext;\n}): StepConditionOutcome {\n const condition = params.step.condition;\n if (condition === null) {\n const execution = params.context.values.execution as {failed?: unknown} | undefined;\n return execution?.failed === true\n ? {\n kind: 'skip',\n statusReason: 'default_gate_rejected',\n evaluationTrace: defaultStepConditionTrace(),\n }\n : {kind: 'run'};\n }\n\n const outcome = evaluatePlannedPredicateAtSite({\n expression: condition,\n field: 'step.if',\n site: params.context.site,\n context: params.context.values,\n });\n const evaluationTrace = explicitConditionTrace({\n expression: condition,\n field: 'step.if',\n route: outcome.route,\n site: params.context.site,\n value: outcome.value,\n degraded: outcome.evaluationFailed,\n });\n if (outcome.evaluationFailed) {\n return {kind: 'skip', statusReason: 'condition_errored', evaluationTrace};\n }\n return outcome.value\n ? {kind: 'run'}\n : {kind: 'skip', statusReason: 'condition_rejected', evaluationTrace};\n}\n\nfunction toDispatchConfigError(error: unknown): DispatchConfigError | null {\n const isInterpolationError = error instanceof InterpolationUnresolvableError;\n if (isInterpolationError) return error;\n\n const isAgentConfigError = error instanceof AgentConfigUnresolvableError;\n if (isAgentConfigError) return error;\n\n return null;\n}\n\nfunction dispatchConfigError(error: DispatchConfigError): Record<string, unknown> {\n if (error instanceof InterpolationUnresolvableError) {\n return {\n message: error.message,\n reason: 'config_unresolvable',\n field: error.envKey === undefined ? error.field : `${error.field}.${error.envKey}`,\n source: error.source,\n };\n }\n\n return {\n message: error.message,\n reason: 'config_unresolvable',\n field: 'agent',\n source: 'agent',\n };\n}\n\nexport interface NextStepForLeasedJobExecutionParams {\n jobId: string;\n jobExecutionId: string;\n runnerSessionId: string;\n}\n\nexport function nextStepForLeasedJobExecution(\n params: NextStepForLeasedJobExecutionParams,\n): Promise<NextStep> {\n return withTransaction(async (tx) => {\n const leaseIsActive = await lockActiveJobExecutionLeaseForUpdate(params, tx);\n if (!leaseIsActive) throw new JobLeaseNotActiveError(params.jobExecutionId);\n\n return nextStepForJobExecutionInTransaction(params.jobExecutionId, tx);\n });\n}\n\nexport function nextStepForJob(jobId: string): Promise<NextStep> {\n return withTransaction(async (tx) => {\n const jobExecution = await getLatestJobExecutionByJobId(jobId, tx);\n if (!jobExecution) throw new JobNotFoundError(jobId);\n\n return nextStepForJobExecutionInTransaction(jobExecution.id, tx);\n });\n}\n\nexport interface RecordStepResultParams {\n jobExecutionId: string;\n stepId: string;\n status: 'succeeded' | 'failed';\n error?: Record<string, unknown> | null;\n // Structured runner output feeds gate predicates and audit/history on the\n // attempt row; the current step projection keeps only status/error.\n output?: Record<string, unknown> | null;\n response?: string | null;\n exitCode?: number | null;\n // The attempt the runner was dispatched. Omitted = \"the step's current\n // attempt\" (back-compat for callers that don't track attempts yet).\n attempt?: number;\n logOutcome?: LogOutcomeDto;\n}\n\nexport type RecordStepResultOutcome = StepProgressionOutcome;\n\ninterface RecordStepResultTransactionResult {\n outcome: RecordStepResultOutcome;\n metrics: StepProgressionMetrics;\n}\n\nfunction outcomeFromSteps(steps: Step[]): RecordStepResultOutcome {\n return steps.every((step) => isTerminal(step.status))\n ? {jobFinished: true, status: deriveCompletion(steps)}\n : {jobFinished: false};\n}\n\nexport async function recordStepResult(\n params: RecordStepResultParams,\n): Promise<RecordStepResultOutcome> {\n const progression = await withTransaction<RecordStepResultTransactionResult>((tx) =>\n recordStepResultInTransaction(params, tx),\n );\n\n recordStepProgressionMetrics(progression.metrics);\n\n return progression.outcome;\n}\n\nasync function recordStepResultInTransaction(\n params: RecordStepResultParams,\n tx: Tx,\n): Promise<RecordStepResultTransactionResult> {\n const jobExecutionId = params.jobExecutionId;\n\n const jobExecution = await getJobExecutionById(jobExecutionId, tx);\n if (!jobExecution) throw new JobNotFoundError(jobExecutionId);\n\n const steps = await getStepsByJobExecutionIdForUpdate(jobExecutionId, tx);\n const target = steps.find((step) => step.id === params.stepId);\n const hasTargetStep = target !== undefined;\n\n if (!hasTargetStep) throw new StepNotFoundError(params.stepId, jobExecutionId);\n\n const current = target.currentAttempt;\n const reported = params.attempt ?? current;\n const reportClassification = classifyReportedStep(target, reported, jobExecution.jobId);\n if (reportClassification instanceof Error) throw reportClassification;\n if (reportClassification === 'noop') return {outcome: outcomeFromSteps(steps), metrics: {}};\n\n // Migration/back-compat boundary: a running step may predate the\n // step_attempts table or have been marked running by legacy code. Create\n // the audit row just before finalization if dispatch did not already do it.\n await insertRunningStepAttempt(\n {\n jobExecutionId,\n stepId: params.stepId,\n attempt: current,\n config: target.config,\n },\n tx,\n );\n\n let result: ReportedStepResult = {\n status: params.status,\n error: params.error ?? null,\n output: params.output ?? null,\n response: params.response ?? null,\n exitCode: params.exitCode ?? null,\n };\n const outputCoercion = coerceReportedStepOutput(target.config, result);\n if (outputCoercion.kind === 'coerced') {\n result = {...result, output: outputCoercion.output};\n }\n if (outputCoercion.kind === 'failed') {\n result = {\n status: 'failed',\n error: outputInvalidError(outputCoercion.error),\n output: null,\n response: result.response,\n exitCode: result.exitCode,\n };\n }\n\n // Evaluate the gate (if any) at the service boundary — the only place the CEL\n // engine runs — and pass the precomputed outcome into the pure decision.\n const shouldEvaluateGate = outputCoercion.kind !== 'failed';\n const gate = shouldEvaluateGate ? readStepGate(target.config) : undefined;\n const gateOutcome = shouldEvaluateGate ? evaluateGate(gate, result) : {kind: 'no-gate' as const};\n const hasRestartPolicy = gate?.onFailure?.restartFrom !== undefined;\n // The restart cap is bounded on the gating step's OWN attempts, not its\n // current_attempt (which a rewind inflates for downstream steps).\n const gatingAttemptCount = hasRestartPolicy\n ? await countStepAttempts(params.stepId, tx)\n : undefined;\n const decision = decideStepTransition({\n steps,\n target,\n reportedAttempt: reported,\n result,\n gateOutcome,\n ...(gate?.onFailure ? {gateOnFailure: gate.onFailure} : {}),\n ...(gatingAttemptCount !== undefined ? {gatingAttemptCount} : {}),\n });\n const resolvedDecision = resolveRestartFeedback({\n decision,\n gate,\n result,\n definitionId: jobExecution.jobId,\n });\n\n return applyStepTransition(\n resolvedDecision,\n {\n jobId: jobExecution.jobId,\n jobExecutionId,\n result,\n logOutcome: params.logOutcome ?? 'drained',\n gateResult: gateResultPayload(gateOutcome, result.exitCode),\n },\n tx,\n );\n}\n\ntype OutputCoercionResult =\n | {kind: 'not-applicable'}\n | {kind: 'coerced'; output: Record<string, unknown>}\n | {kind: 'failed'; error: StepOutputCoercionError};\n\nexport type ReportedStepClassification = 'proceed' | 'noop' | Error;\n\nexport function classifyReportedStep(\n target: Step,\n reportedAttempt: number,\n jobId: string,\n): ReportedStepClassification {\n const currentAttempt = target.currentAttempt;\n if (reportedAttempt > currentAttempt) {\n return new StepAttemptAheadError(target.id, jobId, reportedAttempt, currentAttempt);\n }\n\n if (reportedAttempt < currentAttempt) return 'noop';\n if (isTerminal(target.status)) return 'noop';\n if (target.status === 'pending') return new StepNotRunningError(target.id, jobId);\n return 'proceed';\n}\n\nfunction coerceReportedStepOutput(\n config: Record<string, unknown>,\n result: ReportedStepResult,\n): OutputCoercionResult {\n if (result.status !== 'succeeded') return {kind: 'not-applicable'};\n\n const declarations = readStepOutputs(config);\n if (declarations === undefined) return {kind: 'not-applicable'};\n\n const coerced = coerceStepOutputs({declarations, output: result.output});\n if (!coerced.ok) return {kind: 'failed', error: coerced.error};\n return {kind: 'coerced', output: coerced.output};\n}\n\nfunction outputInvalidError(error: StepOutputCoercionError): Record<string, unknown> {\n return {\n message: error.message,\n reason: 'output_invalid',\n field: `outputs.${error.key}`,\n outputKey: error.key,\n issue: error.reason,\n ...(error.expectedType === undefined ? {} : {expectedType: error.expectedType}),\n ...(error.schemaError === undefined ? {} : {schemaError: error.schemaError}),\n };\n}\n\nfunction resolveRestartFeedback(params: {\n decision: StepTransitionDecision;\n gate: ReturnType<typeof readStepGate>;\n result: ReportedStepResult;\n definitionId: string;\n}): StepTransitionDecision {\n if (params.decision.kind !== 'restart-job-from-step') return params.decision;\n if (params.gate === undefined) return params.decision;\n\n try {\n return {\n ...params.decision,\n feedback: evaluateGateFeedback({\n gate: params.gate,\n result: params.result,\n definitionId: params.definitionId,\n }),\n };\n } catch (error) {\n if (error instanceof InterpolationUnresolvableError) {\n return {\n kind: 'fail-job',\n failedStepId: params.decision.failedStepId,\n attempt: params.decision.attempt,\n failureError: dispatchConfigError(error),\n };\n }\n throw error;\n }\n}\n\nfunction recordStepProgressionMetrics(metrics: StepProgressionMetrics): void {\n const settledStatus = metrics.jobStepsSettledStatus;\n const hasSettledStatus = settledStatus !== undefined;\n if (hasSettledStatus) recordWorkflowJobExecutionStepsSettled(settledStatus);\n\n const restartWasEnqueued = metrics.stepRestartEnqueued === true;\n if (restartWasEnqueued) recordWorkflowStepRestartEnqueued();\n}\n"],"names":["catalogDefaultAgentResolver","coerceStepOutputs","evaluatePlannedPredicateAtSite","withTransaction","countStepAttempts","dispatchStepWithCompletedConfig","finishStepAttempt","getDirectDependencyJobContexts","getJobExecutionById","getLatestJobExecutionByJobId","getStepAttemptsByJobExecutionId","getStepsByJobExecutionIdForUpdate","insertRunningStepAttempt","lockActiveJobExecutionLeaseForUpdate","markStepRunning","markStepSkipped","settleJobFailed","writeJobStepsSettledOutbox","recordWorkflowJobExecutionStepsSettled","recordWorkflowStepRestartEnqueued","defaultStepConditionTrace","explicitConditionTrace","AgentConfigUnresolvableError","InterpolationUnresolvableError","JobLeaseNotActiveError","JobNotFoundError","StepAttemptAheadError","StepNotFoundError","StepNotRunningError","assembleStepDispatchContext","completeStepDispatchConfig","applyStepTransition","decideStepTransition","deriveCompletion","isTerminal","evaluateGate","evaluateGateFeedback","gateResultPayload","readStepGate","readStepOutputs","nextStepForJobExecutionInTransaction","jobExecutionId","tx","steps","hasNoSteps","length","running","find","step","status","hasRunningStep","undefined","kind","dispatched","firstPending","hasPendingStep","jobExecution","attempts","jobs","jobId","resolveNextPendingStep","skippedAny","currentSteps","pending","context","targetStepId","id","condition","evaluateStepCondition","dispatchPendingStep","skipped","stepId","statusReason","evaluationTrace","skippedStep","error","map","params","hasConfigPlan","configPlan","dispatchPendingStepWithConfigPlan","marked","completed","resolveAgentDefaults","definitionId","config","trace","configError","toDispatchConfigError","isConfigError","failureError","dispatchConfigError","attempt","currentAttempt","logOutcome","failedStepId","execution","values","failed","outcome","expression","field","site","route","value","degraded","evaluationFailed","isInterpolationError","isAgentConfigError","message","reason","envKey","source","nextStepForLeasedJobExecution","leaseIsActive","nextStepForJob","outcomeFromSteps","every","jobFinished","recordStepResult","progression","recordStepResultInTransaction","recordStepProgressionMetrics","metrics","target","hasTargetStep","current","reported","reportClassification","classifyReportedStep","Error","result","output","response","exitCode","outputCoercion","coerceReportedStepOutput","outputInvalidError","shouldEvaluateGate","gate","gateOutcome","hasRestartPolicy","onFailure","restartFrom","gatingAttemptCount","decision","reportedAttempt","gateOnFailure","resolvedDecision","resolveRestartFeedback","gateResult","declarations","coerced","ok","key","outputKey","issue","expectedType","schemaError","feedback","settledStatus","jobStepsSettledStatus","hasSettledStatus","restartWasEnqueued","stepRestartEnqueued"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/job-execution.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {LogOutcomeDto} from '@shipfox/api-workflows-dto';\nimport {\n coerceStepOutputs,\n evaluatePlannedPredicateAtSite,\n type StepOutputCoercionError,\n} from '@shipfox/expression';\nimport {type Tx, withTransaction} from '#db/db.js';\nimport {\n countStepAttempts,\n dispatchStepWithCompletedConfig,\n finishStepAttempt,\n getDirectDependencyJobContexts,\n getJobExecutionById,\n getLatestJobExecutionByJobId,\n getStepAttemptsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n insertRunningStepAttempt,\n lockActiveJobExecutionLeaseForUpdate,\n markStepRunning,\n markStepSkipped,\n settleJobFailed,\n writeJobStepsSettledOutbox,\n} from '#db/workflow-runs.js';\nimport {\n recordWorkflowJobExecutionStepsSettled,\n recordWorkflowStepRestartEnqueued,\n} from '#metrics/instance.js';\nimport {createAgentDefaultsResolver} from './agent-defaults.js';\nimport {defaultStepConditionTrace, explicitConditionTrace} from './condition-trace.js';\nimport type {JobExecution} from './entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry, Step, StepStatusReason} from './entities/step.js';\nimport {\n AgentConfigUnresolvableError,\n InterpolationUnresolvableError,\n JobLeaseNotActiveError,\n JobNotFoundError,\n StepAttemptAheadError,\n StepNotFoundError,\n StepNotRunningError,\n} from './errors.js';\nimport {assembleStepDispatchContext} from './step-config/assemble-run-context.js';\nimport {completeStepDispatchConfig} from './step-config/complete-step-dispatch-config.js';\nimport type {WorkflowEvaluationContext} from './step-config/workflow-evaluation-context.js';\nimport {\n applyStepTransition,\n type StepProgressionMetrics,\n type StepProgressionOutcome,\n} from './step-transition/apply-step-transition.js';\nimport {\n decideStepTransition,\n deriveCompletion,\n isTerminal,\n type StepTransitionDecision,\n} from './step-transition/decide-step-transition.js';\nimport {\n evaluateGate,\n evaluateGateFeedback,\n gateResultPayload,\n readStepGate,\n} from './step-transition/evaluate-gate.js';\nimport {readStepOutputs} from './step-transition/read-step-outputs.js';\nimport type {RuntimeCompletionStatus} from './workflow-scheduling/runtime-dag.js';\n\ntype CompletionStatus = RuntimeCompletionStatus;\n\ntype ReportedStepResult = {\n readonly status: 'succeeded' | 'failed';\n readonly error: Record<string, unknown> | null;\n readonly output: Record<string, unknown> | null;\n readonly response: string | null;\n readonly exitCode: number | null;\n};\n\nexport type NextStep =\n | {kind: 'step'; step: Step; dispatched: boolean}\n | {kind: 'done'; status: CompletionStatus};\n\ntype DispatchConfigError = InterpolationUnresolvableError | AgentConfigUnresolvableError;\n\ninterface PendingStepDispatchParams {\n readonly jobExecutionId: string;\n readonly pending: Step;\n readonly jobExecution: JobExecution;\n readonly context: WorkflowEvaluationContext;\n readonly tx: Tx;\n readonly agent?: AgentInterModuleClient | undefined;\n}\n\ninterface ResolvePendingStepParams {\n readonly jobExecutionId: string;\n readonly steps: Step[];\n readonly jobExecution: JobExecution;\n readonly attempts: Awaited<ReturnType<typeof getStepAttemptsByJobExecutionId>>;\n readonly jobs: Awaited<ReturnType<typeof getDirectDependencyJobContexts>>;\n readonly tx: Tx;\n readonly agent?: AgentInterModuleClient | undefined;\n}\n\ntype StepConditionOutcome =\n | {kind: 'run'}\n | {\n kind: 'skip';\n statusReason: StepStatusReason;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[];\n };\n\nasync function nextStepForJobExecutionInTransaction(\n jobExecutionId: string,\n tx: Tx,\n agent?: AgentInterModuleClient | undefined,\n): Promise<NextStep> {\n const steps = await getStepsByJobExecutionIdForUpdate(jobExecutionId, tx);\n const hasNoSteps = steps.length === 0;\n\n // An unknown or step-less execution has nothing to progress; rejecting it stops\n // a bad id from deriving a vacuous 'succeeded' completion below.\n if (hasNoSteps) throw new JobNotFoundError(jobExecutionId);\n\n // Re-deliver the in-flight step rather than advancing, so a retried pull\n // cannot skip a step.\n const running = steps.find((step) => step.status === 'running');\n const hasRunningStep = running !== undefined;\n if (hasRunningStep) return {kind: 'step', step: running, dispatched: false};\n\n const firstPending = steps.find((step) => step.status === 'pending');\n const hasPendingStep = firstPending !== undefined;\n if (!hasPendingStep) return {kind: 'done', status: deriveCompletion(steps)};\n\n const jobExecution = await getJobExecutionById(jobExecutionId, tx);\n if (!jobExecution) throw new JobNotFoundError(jobExecutionId);\n\n const attempts = await getStepAttemptsByJobExecutionId(jobExecutionId, tx);\n const jobs = await getDirectDependencyJobContexts(jobExecution.jobId, tx);\n\n return resolveNextPendingStep({jobExecutionId, steps, jobExecution, attempts, jobs, tx, agent});\n}\n\nasync function resolveNextPendingStep({\n jobExecutionId,\n steps,\n jobExecution,\n attempts,\n jobs,\n tx,\n agent,\n}: ResolvePendingStepParams): Promise<NextStep> {\n let skippedAny = false;\n let currentSteps = steps;\n\n while (true) {\n const pending = currentSteps.find((step) => step.status === 'pending');\n if (pending === undefined) {\n const status = deriveCompletion(currentSteps);\n if (skippedAny) {\n await writeJobStepsSettledOutbox(tx, {\n jobId: jobExecution.jobId,\n jobExecutionId,\n status,\n });\n recordWorkflowJobExecutionStepsSettled(status);\n }\n return {kind: 'done', status};\n }\n\n const context = assembleStepDispatchContext({\n steps: currentSteps,\n attempts,\n targetStepId: pending.id,\n jobExecution,\n jobs,\n });\n const condition = evaluateStepCondition({step: pending, context});\n if (condition.kind === 'run') {\n return dispatchPendingStep({jobExecutionId, pending, jobExecution, context, tx, agent});\n }\n\n const skipped = await markStepSkipped(\n {\n jobExecutionId,\n stepId: pending.id,\n statusReason: condition.statusReason,\n evaluationTrace: condition.evaluationTrace,\n },\n tx,\n );\n const skippedStep = skipped ?? {\n ...pending,\n status: 'skipped' as const,\n statusReason: condition.statusReason,\n evaluationTrace: condition.evaluationTrace,\n error: null,\n };\n currentSteps = currentSteps.map((step) => (step.id === pending.id ? skippedStep : step));\n skippedAny = true;\n }\n}\n\nasync function dispatchPendingStep(params: PendingStepDispatchParams): Promise<NextStep> {\n const hasConfigPlan = params.pending.configPlan !== null;\n if (hasConfigPlan) return dispatchPendingStepWithConfigPlan(params);\n\n const marked = await markStepRunning(\n {jobExecutionId: params.jobExecutionId, stepId: params.pending.id},\n params.tx,\n );\n return {kind: 'step', step: marked ?? params.pending, dispatched: true};\n}\n\nasync function dispatchPendingStepWithConfigPlan({\n jobExecutionId,\n pending,\n jobExecution,\n context,\n tx,\n agent,\n}: PendingStepDispatchParams): Promise<NextStep> {\n try {\n const completed = await completeStepDispatchConfig({\n step: pending,\n context,\n resolveAgentDefaults: agent ? createAgentDefaultsResolver(agent, null) : undefined,\n definitionId: jobExecution.jobId,\n });\n const marked = await dispatchStepWithCompletedConfig(\n {\n jobExecutionId,\n stepId: pending.id,\n config: completed.config,\n evaluationTrace: completed.trace,\n },\n tx,\n );\n return {kind: 'step', step: marked ?? {...pending, config: completed.config}, dispatched: true};\n } catch (error) {\n const configError = toDispatchConfigError(error);\n const isConfigError = configError !== null;\n if (!isConfigError) throw error;\n\n const failureError = dispatchConfigError(configError);\n await insertRunningStepAttempt(\n {\n jobExecutionId,\n stepId: pending.id,\n attempt: pending.currentAttempt,\n },\n tx,\n );\n await finishStepAttempt(\n {\n stepId: pending.id,\n attempt: pending.currentAttempt,\n status: 'failed',\n error: failureError,\n logOutcome: 'abandoned',\n },\n tx,\n );\n const status = await settleJobFailed(tx, {\n jobId: jobExecution.jobId,\n jobExecutionId,\n failedStepId: pending.id,\n error: failureError,\n });\n if (status) recordWorkflowJobExecutionStepsSettled(status);\n return status === null\n ? nextStepForJobExecutionInTransaction(jobExecutionId, tx, agent)\n : {kind: 'done', status};\n }\n}\n\nfunction evaluateStepCondition(params: {\n readonly step: Step;\n readonly context: WorkflowEvaluationContext;\n}): StepConditionOutcome {\n const condition = params.step.condition;\n if (condition === null) {\n const execution = params.context.values.execution as {failed?: unknown} | undefined;\n return execution?.failed === true\n ? {\n kind: 'skip',\n statusReason: 'default_gate_rejected',\n evaluationTrace: defaultStepConditionTrace(),\n }\n : {kind: 'run'};\n }\n\n const outcome = evaluatePlannedPredicateAtSite({\n expression: condition,\n field: 'step.if',\n site: params.context.site,\n context: params.context.values,\n });\n const evaluationTrace = explicitConditionTrace({\n expression: condition,\n field: 'step.if',\n route: outcome.route,\n site: params.context.site,\n value: outcome.value,\n degraded: outcome.evaluationFailed,\n });\n if (outcome.evaluationFailed) {\n return {kind: 'skip', statusReason: 'condition_errored', evaluationTrace};\n }\n return outcome.value\n ? {kind: 'run'}\n : {kind: 'skip', statusReason: 'condition_rejected', evaluationTrace};\n}\n\nfunction toDispatchConfigError(error: unknown): DispatchConfigError | null {\n const isInterpolationError = error instanceof InterpolationUnresolvableError;\n if (isInterpolationError) return error;\n\n const isAgentConfigError = error instanceof AgentConfigUnresolvableError;\n if (isAgentConfigError) return error;\n\n return null;\n}\n\nfunction dispatchConfigError(error: DispatchConfigError): Record<string, unknown> {\n if (error instanceof InterpolationUnresolvableError) {\n return {\n message: error.message,\n reason: 'config_unresolvable',\n field: error.envKey === undefined ? error.field : `${error.field}.${error.envKey}`,\n source: error.source,\n };\n }\n\n return {\n message: error.message,\n reason: 'config_unresolvable',\n field: 'agent',\n source: 'agent',\n };\n}\n\nexport interface NextStepForLeasedJobExecutionParams {\n jobId: string;\n jobExecutionId: string;\n runnerSessionId: string;\n agent?: AgentInterModuleClient | undefined;\n}\n\nexport function nextStepForLeasedJobExecution(\n params: NextStepForLeasedJobExecutionParams,\n): Promise<NextStep> {\n return withTransaction(async (tx) => {\n const leaseIsActive = await lockActiveJobExecutionLeaseForUpdate(params, tx);\n if (!leaseIsActive) throw new JobLeaseNotActiveError(params.jobExecutionId);\n\n return nextStepForJobExecutionInTransaction(params.jobExecutionId, tx, params.agent);\n });\n}\n\nexport function nextStepForJob(\n jobId: string,\n agent?: AgentInterModuleClient | undefined,\n): Promise<NextStep> {\n return withTransaction(async (tx) => {\n const jobExecution = await getLatestJobExecutionByJobId(jobId, tx);\n if (!jobExecution) throw new JobNotFoundError(jobId);\n\n return nextStepForJobExecutionInTransaction(jobExecution.id, tx, agent);\n });\n}\n\nexport interface RecordStepResultParams {\n jobExecutionId: string;\n stepId: string;\n status: 'succeeded' | 'failed';\n error?: Record<string, unknown> | null;\n // Structured runner output feeds gate predicates and audit/history on the\n // attempt row; the current step projection keeps only status/error.\n output?: Record<string, unknown> | null;\n response?: string | null;\n exitCode?: number | null;\n // The attempt the runner was dispatched. Omitted = \"the step's current\n // attempt\" (back-compat for callers that don't track attempts yet).\n attempt?: number;\n logOutcome?: LogOutcomeDto;\n}\n\nexport type RecordStepResultOutcome = StepProgressionOutcome;\n\ninterface RecordStepResultTransactionResult {\n outcome: RecordStepResultOutcome;\n metrics: StepProgressionMetrics;\n}\n\nfunction outcomeFromSteps(steps: Step[]): RecordStepResultOutcome {\n return steps.every((step) => isTerminal(step.status))\n ? {jobFinished: true, status: deriveCompletion(steps)}\n : {jobFinished: false};\n}\n\nexport async function recordStepResult(\n params: RecordStepResultParams,\n): Promise<RecordStepResultOutcome> {\n const progression = await withTransaction<RecordStepResultTransactionResult>((tx) =>\n recordStepResultInTransaction(params, tx),\n );\n\n recordStepProgressionMetrics(progression.metrics);\n\n return progression.outcome;\n}\n\nasync function recordStepResultInTransaction(\n params: RecordStepResultParams,\n tx: Tx,\n): Promise<RecordStepResultTransactionResult> {\n const jobExecutionId = params.jobExecutionId;\n\n const jobExecution = await getJobExecutionById(jobExecutionId, tx);\n if (!jobExecution) throw new JobNotFoundError(jobExecutionId);\n\n const steps = await getStepsByJobExecutionIdForUpdate(jobExecutionId, tx);\n const target = steps.find((step) => step.id === params.stepId);\n const hasTargetStep = target !== undefined;\n\n if (!hasTargetStep) throw new StepNotFoundError(params.stepId, jobExecutionId);\n\n const current = target.currentAttempt;\n const reported = params.attempt ?? current;\n const reportClassification = classifyReportedStep(target, reported, jobExecution.jobId);\n if (reportClassification instanceof Error) throw reportClassification;\n if (reportClassification === 'noop') return {outcome: outcomeFromSteps(steps), metrics: {}};\n\n // Migration/back-compat boundary: a running step may predate the\n // step_attempts table or have been marked running by legacy code. Create\n // the audit row just before finalization if dispatch did not already do it.\n await insertRunningStepAttempt(\n {\n jobExecutionId,\n stepId: params.stepId,\n attempt: current,\n config: target.config,\n },\n tx,\n );\n\n let result: ReportedStepResult = {\n status: params.status,\n error: params.error ?? null,\n output: params.output ?? null,\n response: params.response ?? null,\n exitCode: params.exitCode ?? null,\n };\n const outputCoercion = coerceReportedStepOutput(target.config, result);\n if (outputCoercion.kind === 'coerced') {\n result = {...result, output: outputCoercion.output};\n }\n if (outputCoercion.kind === 'failed') {\n result = {\n status: 'failed',\n error: outputInvalidError(outputCoercion.error),\n output: null,\n response: result.response,\n exitCode: result.exitCode,\n };\n }\n\n // Evaluate the gate (if any) at the service boundary — the only place the CEL\n // engine runs — and pass the precomputed outcome into the pure decision.\n const shouldEvaluateGate = outputCoercion.kind !== 'failed';\n const gate = shouldEvaluateGate ? readStepGate(target.config) : undefined;\n const gateOutcome = shouldEvaluateGate ? evaluateGate(gate, result) : {kind: 'no-gate' as const};\n const hasRestartPolicy = gate?.onFailure?.restartFrom !== undefined;\n // The restart cap is bounded on the gating step's OWN attempts, not its\n // current_attempt (which a rewind inflates for downstream steps).\n const gatingAttemptCount = hasRestartPolicy\n ? await countStepAttempts(params.stepId, tx)\n : undefined;\n const decision = decideStepTransition({\n steps,\n target,\n reportedAttempt: reported,\n result,\n gateOutcome,\n ...(gate?.onFailure ? {gateOnFailure: gate.onFailure} : {}),\n ...(gatingAttemptCount !== undefined ? {gatingAttemptCount} : {}),\n });\n const resolvedDecision = resolveRestartFeedback({\n decision,\n gate,\n result,\n definitionId: jobExecution.jobId,\n });\n\n return applyStepTransition(\n resolvedDecision,\n {\n jobId: jobExecution.jobId,\n jobExecutionId,\n result,\n logOutcome: params.logOutcome ?? 'drained',\n gateResult: gateResultPayload(gateOutcome, result.exitCode),\n },\n tx,\n );\n}\n\ntype OutputCoercionResult =\n | {kind: 'not-applicable'}\n | {kind: 'coerced'; output: Record<string, unknown>}\n | {kind: 'failed'; error: StepOutputCoercionError};\n\nexport type ReportedStepClassification = 'proceed' | 'noop' | Error;\n\nexport function classifyReportedStep(\n target: Step,\n reportedAttempt: number,\n jobId: string,\n): ReportedStepClassification {\n const currentAttempt = target.currentAttempt;\n if (reportedAttempt > currentAttempt) {\n return new StepAttemptAheadError(target.id, jobId, reportedAttempt, currentAttempt);\n }\n\n if (reportedAttempt < currentAttempt) return 'noop';\n if (isTerminal(target.status)) return 'noop';\n if (target.status === 'pending') return new StepNotRunningError(target.id, jobId);\n return 'proceed';\n}\n\nfunction coerceReportedStepOutput(\n config: Record<string, unknown>,\n result: ReportedStepResult,\n): OutputCoercionResult {\n if (result.status !== 'succeeded') return {kind: 'not-applicable'};\n\n const declarations = readStepOutputs(config);\n if (declarations === undefined) return {kind: 'not-applicable'};\n\n const coerced = coerceStepOutputs({declarations, output: result.output});\n if (!coerced.ok) return {kind: 'failed', error: coerced.error};\n return {kind: 'coerced', output: coerced.output};\n}\n\nfunction outputInvalidError(error: StepOutputCoercionError): Record<string, unknown> {\n return {\n message: error.message,\n reason: 'output_invalid',\n field: `outputs.${error.key}`,\n outputKey: error.key,\n issue: error.reason,\n ...(error.expectedType === undefined ? {} : {expectedType: error.expectedType}),\n ...(error.schemaError === undefined ? {} : {schemaError: error.schemaError}),\n };\n}\n\nfunction resolveRestartFeedback(params: {\n decision: StepTransitionDecision;\n gate: ReturnType<typeof readStepGate>;\n result: ReportedStepResult;\n definitionId: string;\n}): StepTransitionDecision {\n if (params.decision.kind !== 'restart-job-from-step') return params.decision;\n if (params.gate === undefined) return params.decision;\n\n try {\n return {\n ...params.decision,\n feedback: evaluateGateFeedback({\n gate: params.gate,\n result: params.result,\n definitionId: params.definitionId,\n }),\n };\n } catch (error) {\n if (error instanceof InterpolationUnresolvableError) {\n return {\n kind: 'fail-job',\n failedStepId: params.decision.failedStepId,\n attempt: params.decision.attempt,\n failureError: dispatchConfigError(error),\n };\n }\n throw error;\n }\n}\n\nfunction recordStepProgressionMetrics(metrics: StepProgressionMetrics): void {\n const settledStatus = metrics.jobStepsSettledStatus;\n const hasSettledStatus = settledStatus !== undefined;\n if (hasSettledStatus) recordWorkflowJobExecutionStepsSettled(settledStatus);\n\n const restartWasEnqueued = metrics.stepRestartEnqueued === true;\n if (restartWasEnqueued) recordWorkflowStepRestartEnqueued();\n}\n"],"names":["coerceStepOutputs","evaluatePlannedPredicateAtSite","withTransaction","countStepAttempts","dispatchStepWithCompletedConfig","finishStepAttempt","getDirectDependencyJobContexts","getJobExecutionById","getLatestJobExecutionByJobId","getStepAttemptsByJobExecutionId","getStepsByJobExecutionIdForUpdate","insertRunningStepAttempt","lockActiveJobExecutionLeaseForUpdate","markStepRunning","markStepSkipped","settleJobFailed","writeJobStepsSettledOutbox","recordWorkflowJobExecutionStepsSettled","recordWorkflowStepRestartEnqueued","createAgentDefaultsResolver","defaultStepConditionTrace","explicitConditionTrace","AgentConfigUnresolvableError","InterpolationUnresolvableError","JobLeaseNotActiveError","JobNotFoundError","StepAttemptAheadError","StepNotFoundError","StepNotRunningError","assembleStepDispatchContext","completeStepDispatchConfig","applyStepTransition","decideStepTransition","deriveCompletion","isTerminal","evaluateGate","evaluateGateFeedback","gateResultPayload","readStepGate","readStepOutputs","nextStepForJobExecutionInTransaction","jobExecutionId","tx","agent","steps","hasNoSteps","length","running","find","step","status","hasRunningStep","undefined","kind","dispatched","firstPending","hasPendingStep","jobExecution","attempts","jobs","jobId","resolveNextPendingStep","skippedAny","currentSteps","pending","context","targetStepId","id","condition","evaluateStepCondition","dispatchPendingStep","skipped","stepId","statusReason","evaluationTrace","skippedStep","error","map","params","hasConfigPlan","configPlan","dispatchPendingStepWithConfigPlan","marked","completed","resolveAgentDefaults","definitionId","config","trace","configError","toDispatchConfigError","isConfigError","failureError","dispatchConfigError","attempt","currentAttempt","logOutcome","failedStepId","execution","values","failed","outcome","expression","field","site","route","value","degraded","evaluationFailed","isInterpolationError","isAgentConfigError","message","reason","envKey","source","nextStepForLeasedJobExecution","leaseIsActive","nextStepForJob","outcomeFromSteps","every","jobFinished","recordStepResult","progression","recordStepResultInTransaction","recordStepProgressionMetrics","metrics","target","hasTargetStep","current","reported","reportClassification","classifyReportedStep","Error","result","output","response","exitCode","outputCoercion","coerceReportedStepOutput","outputInvalidError","shouldEvaluateGate","gate","gateOutcome","hasRestartPolicy","onFailure","restartFrom","gatingAttemptCount","decision","reportedAttempt","gateOnFailure","resolvedDecision","resolveRestartFeedback","gateResult","declarations","coerced","ok","key","outputKey","issue","expectedType","schemaError","feedback","settledStatus","jobStepsSettledStatus","hasSettledStatus","restartWasEnqueued","stepRestartEnqueued"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowModel } from '@shipfox/api-definitions';
|
|
1
|
+
import type { WorkflowModel } from '@shipfox/api-definitions-dto';
|
|
2
2
|
import type { Job } from '../entities/job.js';
|
|
3
3
|
import type { JobExecution } from '../entities/job-execution.js';
|
|
4
4
|
import type { Step, StepAttempt } from '../entities/step.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-job-execution-outputs.d.ts","sourceRoot":"","sources":["../../../src/core/job-transition/derive-job-execution-outputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"derive-job-execution-outputs.d.ts","sourceRoot":"","sources":["../../../src/core/job-transition/derive-job-execution-outputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAC,IAAI,EAAE,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,wCAAwC,CAAC;AAGhD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IACpC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC3C,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAmBjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/job-transition/derive-job-execution-outputs.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions';\nimport type {Job} from '../entities/job.js';\nimport type {JobExecution} from '../entities/job-execution.js';\nimport type {Step, StepAttempt} from '../entities/step.js';\nimport type {WorkflowRun} from '../entities/workflow-run.js';\nimport {\n assembleExecutionResolutionContext,\n type JobContextInput,\n} from '../step-config/assemble-run-context.js';\nimport {materializeJobOutputs} from '../step-config/materialize-workflow-model.js';\n\nexport function deriveJobExecutionOutputs(params: {\n run: WorkflowRun;\n modelJob: WorkflowModel['jobs'][number];\n job: Job;\n jobExecution: JobExecution;\n executions: readonly JobExecution[];\n steps: readonly Step[];\n attempts: readonly StepAttempt[];\n jobs: readonly JobContextInput[];\n vars?: Record<string, string> | undefined;\n}): Record<string, unknown> | null {\n const context = assembleExecutionResolutionContext({\n run: params.run,\n triggerPayload: params.run.triggerPayload,\n inputs: params.run.inputs,\n vars: params.vars,\n job: params.job,\n jobExecution: params.jobExecution,\n executions: params.executions,\n steps: params.steps,\n attempts: params.attempts,\n jobs: params.jobs,\n });\n\n return materializeJobOutputs({\n job: params.modelJob,\n context,\n definitionId: params.run.definitionId,\n });\n}\n"],"names":["assembleExecutionResolutionContext","materializeJobOutputs","deriveJobExecutionOutputs","params","context","run","triggerPayload","inputs","vars","job","jobExecution","executions","steps","attempts","jobs","modelJob","definitionId"],"mappings":"AAKA,SACEA,kCAAkC,QAE7B,yCAAyC;AAChD,SAAQC,qBAAqB,QAAO,+CAA+C;AAEnF,OAAO,SAASC,0BAA0BC,MAUzC;IACC,MAAMC,UAAUJ,mCAAmC;QACjDK,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOE,GAAG,CAACC,cAAc;QACzCC,QAAQJ,OAAOE,GAAG,CAACE,MAAM;QACzBC,MAAML,OAAOK,IAAI;QACjBC,KAAKN,OAAOM,GAAG;QACfC,cAAcP,OAAOO,YAAY;QACjCC,YAAYR,OAAOQ,UAAU;QAC7BC,OAAOT,OAAOS,KAAK;QACnBC,UAAUV,OAAOU,QAAQ;QACzBC,MAAMX,OAAOW,IAAI;IACnB;IAEA,OAAOb,sBAAsB;QAC3BQ,KAAKN,OAAOY,QAAQ;QACpBX;QACAY,cAAcb,OAAOE,GAAG,CAACW,YAAY;IACvC;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/job-transition/derive-job-execution-outputs.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {Job} from '../entities/job.js';\nimport type {JobExecution} from '../entities/job-execution.js';\nimport type {Step, StepAttempt} from '../entities/step.js';\nimport type {WorkflowRun} from '../entities/workflow-run.js';\nimport {\n assembleExecutionResolutionContext,\n type JobContextInput,\n} from '../step-config/assemble-run-context.js';\nimport {materializeJobOutputs} from '../step-config/materialize-workflow-model.js';\n\nexport function deriveJobExecutionOutputs(params: {\n run: WorkflowRun;\n modelJob: WorkflowModel['jobs'][number];\n job: Job;\n jobExecution: JobExecution;\n executions: readonly JobExecution[];\n steps: readonly Step[];\n attempts: readonly StepAttempt[];\n jobs: readonly JobContextInput[];\n vars?: Record<string, string> | undefined;\n}): Record<string, unknown> | null {\n const context = assembleExecutionResolutionContext({\n run: params.run,\n triggerPayload: params.run.triggerPayload,\n inputs: params.run.inputs,\n vars: params.vars,\n job: params.job,\n jobExecution: params.jobExecution,\n executions: params.executions,\n steps: params.steps,\n attempts: params.attempts,\n jobs: params.jobs,\n });\n\n return materializeJobOutputs({\n job: params.modelJob,\n context,\n definitionId: params.run.definitionId,\n });\n}\n"],"names":["assembleExecutionResolutionContext","materializeJobOutputs","deriveJobExecutionOutputs","params","context","run","triggerPayload","inputs","vars","job","jobExecution","executions","steps","attempts","jobs","modelJob","definitionId"],"mappings":"AAKA,SACEA,kCAAkC,QAE7B,yCAAyC;AAChD,SAAQC,qBAAqB,QAAO,+CAA+C;AAEnF,OAAO,SAASC,0BAA0BC,MAUzC;IACC,MAAMC,UAAUJ,mCAAmC;QACjDK,KAAKF,OAAOE,GAAG;QACfC,gBAAgBH,OAAOE,GAAG,CAACC,cAAc;QACzCC,QAAQJ,OAAOE,GAAG,CAACE,MAAM;QACzBC,MAAML,OAAOK,IAAI;QACjBC,KAAKN,OAAOM,GAAG;QACfC,cAAcP,OAAOO,YAAY;QACjCC,YAAYR,OAAOQ,UAAU;QAC7BC,OAAOT,OAAOS,KAAK;QACnBC,UAAUV,OAAOU,QAAQ;QACzBC,MAAMX,OAAOW,IAAI;IACnB;IAEA,OAAOb,sBAAsB;QAC3BQ,KAAKN,OAAOY,QAAQ;QACpBX;QACAY,cAAcb,OAAOE,GAAG,CAACW,YAAY;IACvC;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_JOB_SUCCESS } from '@shipfox/api-definitions';
|
|
1
|
+
import { DEFAULT_JOB_SUCCESS } from '@shipfox/api-definitions-dto';
|
|
2
2
|
import { capTraceEntries, createWorkflowExpression, evaluatePlannedPredicateAtSite, predicateTraceEntry } from '@shipfox/expression';
|
|
3
3
|
import { assembleExecutionsContext, assembleJobsContext } from '../step-config/assemble-run-context.js';
|
|
4
4
|
export function deriveJobSuccess(params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/job-transition/derive-job-success.ts"],"sourcesContent":["import {DEFAULT_JOB_SUCCESS} from '@shipfox/api-definitions';\nimport {\n capTraceEntries,\n createWorkflowExpression,\n evaluatePlannedPredicateAtSite,\n predicateTraceEntry,\n} from '@shipfox/expression';\nimport type {JobStatusReason} from '../entities/job.js';\nimport type {JobExecution} from '../entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry} from '../entities/step.js';\nimport {\n assembleExecutionsContext,\n assembleJobsContext,\n type JobContextInput,\n} from '../step-config/assemble-run-context.js';\nimport type {RuntimeCompletionStatus} from '../workflow-scheduling/runtime-dag.js';\n\nexport interface DeriveJobSuccessResult {\n status: RuntimeCompletionStatus;\n statusReason: JobStatusReason | null;\n trace: readonly PersistedEvaluationTraceEntry[];\n}\n\nexport function deriveJobSuccess(params: {\n success: string | null;\n executions: readonly JobExecution[];\n jobs: readonly JobContextInput[];\n}): DeriveJobSuccessResult {\n const expression = createWorkflowExpression({\n source: params.success ?? DEFAULT_JOB_SUCCESS,\n check: {mode: 'syntax'},\n });\n const context = {\n ...assembleExecutionsContext(params.executions),\n ...assembleJobsContext(params.jobs),\n };\n const outcome = evaluatePlannedPredicateAtSite({\n expression,\n field: 'job.success',\n site: 'job-resolution',\n context,\n });\n const trace = capTraceEntries([\n {\n ...predicateTraceEntry({\n expression: expression.source,\n route: outcome.route,\n site: 'job-resolution',\n value: outcome.value,\n degraded: outcome.evaluationFailed,\n }),\n field: 'job.success',\n },\n ]);\n const passed = outcome.value;\n const status: RuntimeCompletionStatus = passed ? 'succeeded' : 'failed';\n if (status === 'succeeded') return {status, statusReason: null, trace};\n\n return {\n status,\n statusReason: outcome.evaluationFailed\n ? 'unknown'\n : (params.executions.find((execution) => execution.statusReason)?.statusReason ??\n 'step_failed'),\n trace,\n };\n}\n"],"names":["DEFAULT_JOB_SUCCESS","capTraceEntries","createWorkflowExpression","evaluatePlannedPredicateAtSite","predicateTraceEntry","assembleExecutionsContext","assembleJobsContext","deriveJobSuccess","params","expression","source","success","check","mode","context","executions","jobs","outcome","field","site","trace","route","value","degraded","evaluationFailed","passed","status","statusReason","find","execution"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO
|
|
1
|
+
{"version":3,"sources":["../../../src/core/job-transition/derive-job-success.ts"],"sourcesContent":["import {DEFAULT_JOB_SUCCESS} from '@shipfox/api-definitions-dto';\nimport {\n capTraceEntries,\n createWorkflowExpression,\n evaluatePlannedPredicateAtSite,\n predicateTraceEntry,\n} from '@shipfox/expression';\nimport type {JobStatusReason} from '../entities/job.js';\nimport type {JobExecution} from '../entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry} from '../entities/step.js';\nimport {\n assembleExecutionsContext,\n assembleJobsContext,\n type JobContextInput,\n} from '../step-config/assemble-run-context.js';\nimport type {RuntimeCompletionStatus} from '../workflow-scheduling/runtime-dag.js';\n\nexport interface DeriveJobSuccessResult {\n status: RuntimeCompletionStatus;\n statusReason: JobStatusReason | null;\n trace: readonly PersistedEvaluationTraceEntry[];\n}\n\nexport function deriveJobSuccess(params: {\n success: string | null;\n executions: readonly JobExecution[];\n jobs: readonly JobContextInput[];\n}): DeriveJobSuccessResult {\n const expression = createWorkflowExpression({\n source: params.success ?? DEFAULT_JOB_SUCCESS,\n check: {mode: 'syntax'},\n });\n const context = {\n ...assembleExecutionsContext(params.executions),\n ...assembleJobsContext(params.jobs),\n };\n const outcome = evaluatePlannedPredicateAtSite({\n expression,\n field: 'job.success',\n site: 'job-resolution',\n context,\n });\n const trace = capTraceEntries([\n {\n ...predicateTraceEntry({\n expression: expression.source,\n route: outcome.route,\n site: 'job-resolution',\n value: outcome.value,\n degraded: outcome.evaluationFailed,\n }),\n field: 'job.success',\n },\n ]);\n const passed = outcome.value;\n const status: RuntimeCompletionStatus = passed ? 'succeeded' : 'failed';\n if (status === 'succeeded') return {status, statusReason: null, trace};\n\n return {\n status,\n statusReason: outcome.evaluationFailed\n ? 'unknown'\n : (params.executions.find((execution) => execution.statusReason)?.statusReason ??\n 'step_failed'),\n trace,\n };\n}\n"],"names":["DEFAULT_JOB_SUCCESS","capTraceEntries","createWorkflowExpression","evaluatePlannedPredicateAtSite","predicateTraceEntry","assembleExecutionsContext","assembleJobsContext","deriveJobSuccess","params","expression","source","success","check","mode","context","executions","jobs","outcome","field","site","trace","route","value","degraded","evaluationFailed","passed","status","statusReason","find","execution"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,+BAA+B;AACjE,SACEC,eAAe,EACfC,wBAAwB,EACxBC,8BAA8B,EAC9BC,mBAAmB,QACd,sBAAsB;AAI7B,SACEC,yBAAyB,EACzBC,mBAAmB,QAEd,yCAAyC;AAShD,OAAO,SAASC,iBAAiBC,MAIhC;IACC,MAAMC,aAAaP,yBAAyB;QAC1CQ,QAAQF,OAAOG,OAAO,IAAIX;QAC1BY,OAAO;YAACC,MAAM;QAAQ;IACxB;IACA,MAAMC,UAAU;QACd,GAAGT,0BAA0BG,OAAOO,UAAU,CAAC;QAC/C,GAAGT,oBAAoBE,OAAOQ,IAAI,CAAC;IACrC;IACA,MAAMC,UAAUd,+BAA+B;QAC7CM;QACAS,OAAO;QACPC,MAAM;QACNL;IACF;IACA,MAAMM,QAAQnB,gBAAgB;QAC5B;YACE,GAAGG,oBAAoB;gBACrBK,YAAYA,WAAWC,MAAM;gBAC7BW,OAAOJ,QAAQI,KAAK;gBACpBF,MAAM;gBACNG,OAAOL,QAAQK,KAAK;gBACpBC,UAAUN,QAAQO,gBAAgB;YACpC,EAAE;YACFN,OAAO;QACT;KACD;IACD,MAAMO,SAASR,QAAQK,KAAK;IAC5B,MAAMI,SAAkCD,SAAS,cAAc;IAC/D,IAAIC,WAAW,aAAa,OAAO;QAACA;QAAQC,cAAc;QAAMP;IAAK;IAErE,OAAO;QACLM;QACAC,cAAcV,QAAQO,gBAAgB,GAClC,YACChB,OAAOO,UAAU,CAACa,IAAI,CAAC,CAACC,YAAcA,UAAUF,YAAY,GAAGA,gBAChE;QACJP;IACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
1
|
+
import type { WorkflowModel } from '@shipfox/api-definitions-dto';
|
|
2
|
+
import type { AgentDefaultsResolver } from './agent-defaults.js';
|
|
3
3
|
import type { AgentToolMaterializationContext, AgentToolMaterializationSnapshot } from './agent-tools.js';
|
|
4
4
|
import type { Job } from './entities/job.js';
|
|
5
5
|
import type { JobExecution, JobExecutionStatus, WorkflowExecutionEvent } from './entities/job-execution.js';
|
|
@@ -26,5 +26,5 @@ export interface MaterializedListenerExecution {
|
|
|
26
26
|
readonly evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;
|
|
27
27
|
readonly steps: readonly MaterializedWorkflowStep[];
|
|
28
28
|
}
|
|
29
|
-
export declare function materializeListenerExecution(params: MaterializeListenerExecutionParams): MaterializedListenerExecution
|
|
29
|
+
export declare function materializeListenerExecution(params: MaterializeListenerExecutionParams): Promise<MaterializedListenerExecution>;
|
|
30
30
|
//# sourceMappingURL=listener-execution-materialization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener-execution-materialization.d.ts","sourceRoot":"","sources":["../../src/core/listener-execution-materialization.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"listener-execution-materialization.d.ts","sourceRoot":"","sources":["../../src/core/listener-execution-materialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAO5D,OAAO,EAEL,KAAK,wBAAwB,EAI9B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAChB,WAAW,EACT,IAAI,GACJ,MAAM,GACN,cAAc,GACd,WAAW,GACX,aAAa,GACb,WAAW,GACX,gBAAgB,GAChB,QAAQ,CACX,CAAC;IACF,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC1D,QAAQ,CAAC,eAAe,EAAE,SAAS,YAAY,EAAE,CAAC;IAClD,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,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC1D,QAAQ,CAAC,eAAe,EAAE,SAAS,6BAA6B,EAAE,GAAG,IAAI,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACrD;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,6BAA6B,CAAC,CAyDxC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { catalogDefaultAgentResolver } from '@shipfox/api-agent/core/resolve-agent-config';
|
|
2
1
|
import { AgentConfigUnresolvableError, AgentIntegrationMaterializationError, InterpolationUnresolvableError, InvalidJobRunnerLabelsError } from './errors.js';
|
|
3
2
|
import { assembleExecutionCreationContext, materializeJobExecutionSteps, materializeJobRunner, resolveJobExecutionName } from './step-config/index.js';
|
|
4
|
-
export function materializeListenerExecution(params) {
|
|
3
|
+
export async function materializeListenerExecution(params) {
|
|
5
4
|
const fallbackName = `${params.job.key} #${params.sequence}`;
|
|
6
5
|
let executionName = fallbackName;
|
|
7
6
|
let evaluationTrace = [];
|
|
@@ -36,11 +35,11 @@ export function materializeListenerExecution(params) {
|
|
|
36
35
|
context,
|
|
37
36
|
definitionId: params.run.definitionId
|
|
38
37
|
});
|
|
39
|
-
steps = materializeJobExecutionSteps({
|
|
38
|
+
steps = await materializeJobExecutionSteps({
|
|
40
39
|
model: params.model,
|
|
41
40
|
job: modelJob,
|
|
42
41
|
context,
|
|
43
|
-
resolveAgentDefaults: params.resolveAgentDefaults
|
|
42
|
+
resolveAgentDefaults: params.resolveAgentDefaults,
|
|
44
43
|
definitionId: params.run.definitionId,
|
|
45
44
|
agentToolContext: params.agentToolContext,
|
|
46
45
|
agentToolSnapshot: params.agentToolSnapshot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/listener-execution-materialization.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/core/listener-execution-materialization.ts"],"sourcesContent":["import type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {AgentDefaultsResolver} from './agent-defaults.js';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from './agent-tools.js';\nimport type {Job} from './entities/job.js';\nimport type {\n JobExecution,\n JobExecutionStatus,\n WorkflowExecutionEvent,\n} from './entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry} from './entities/step.js';\nimport type {WorkflowRun} from './entities/workflow-run.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n InterpolationUnresolvableError,\n InvalidJobRunnerLabelsError,\n} from './errors.js';\nimport {\n assembleExecutionCreationContext,\n type MaterializedWorkflowStep,\n materializeJobExecutionSteps,\n materializeJobRunner,\n resolveJobExecutionName,\n} from './step-config/index.js';\n\nexport interface MaterializeListenerExecutionParams {\n readonly model: WorkflowModel | null;\n readonly run: Pick<\n WorkflowRun,\n | 'id'\n | 'name'\n | 'definitionId'\n | 'projectId'\n | 'workspaceId'\n | 'createdAt'\n | 'triggerPayload'\n | 'inputs'\n >;\n readonly job: Pick<Job, 'id' | 'key'>;\n readonly sequence: number;\n readonly triggerEvents: readonly WorkflowExecutionEvent[];\n readonly priorExecutions: readonly JobExecution[];\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface MaterializedListenerExecution {\n readonly name: string;\n readonly runner: readonly string[];\n readonly status: JobExecutionStatus;\n readonly statusReason: 'unknown' | null;\n readonly triggerEvents: readonly WorkflowExecutionEvent[];\n readonly evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;\n readonly steps: readonly MaterializedWorkflowStep[];\n}\n\nexport async function materializeListenerExecution(\n params: MaterializeListenerExecutionParams,\n): Promise<MaterializedListenerExecution> {\n const fallbackName = `${params.job.key} #${params.sequence}`;\n let executionName = fallbackName;\n let evaluationTrace: readonly PersistedEvaluationTraceEntry[] = [];\n let runner: readonly string[] = [];\n let steps: readonly MaterializedWorkflowStep[] = [];\n let status: JobExecutionStatus = 'pending';\n\n try {\n if (!params.model) throw new PermanentListenerMaterializationError('Run attempt has no model');\n const modelJob = params.model.jobs.find((job) => job.key === params.job.key);\n if (!modelJob) {\n throw new PermanentListenerMaterializationError(\n `Workflow model has no job key: ${params.job.key}`,\n );\n }\n\n const resolvedName = resolveJobExecutionName({\n definitionId: params.run.definitionId,\n job: modelJob,\n fallbackName,\n context: listenerExecutionContext({...params, executionName, status}).values,\n });\n executionName = resolvedName.value;\n evaluationTrace = resolvedName.trace;\n\n const context = listenerExecutionContext({...params, executionName, status});\n runner = materializeJobRunner({\n job: modelJob,\n context,\n definitionId: params.run.definitionId,\n });\n steps = await materializeJobExecutionSteps({\n model: params.model,\n job: modelJob,\n context,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.run.definitionId,\n agentToolContext: params.agentToolContext,\n agentToolSnapshot: params.agentToolSnapshot,\n });\n } catch (error) {\n if (!isPermanentListenerMaterializationError(error)) throw error;\n status = 'failed';\n steps = [];\n runner = [];\n }\n\n return {\n name: executionName,\n runner,\n status,\n statusReason: status === 'failed' ? 'unknown' : null,\n triggerEvents: params.triggerEvents,\n evaluationTrace: evaluationTrace.length === 0 ? null : evaluationTrace,\n steps,\n };\n}\n\nfunction listenerExecutionContext(\n params: Pick<\n MaterializeListenerExecutionParams,\n 'run' | 'job' | 'sequence' | 'triggerEvents' | 'priorExecutions'\n > & {\n readonly executionName: string;\n readonly status: JobExecutionStatus;\n },\n) {\n return assembleExecutionCreationContext({\n run: params.run,\n triggerPayload: params.run.triggerPayload,\n inputs: params.run.inputs,\n jobId: params.job.id,\n sequence: params.sequence,\n executionName: params.executionName,\n status: params.status,\n triggerEvents: params.triggerEvents,\n priorExecutions: params.priorExecutions,\n });\n}\n\nclass PermanentListenerMaterializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'PermanentListenerMaterializationError';\n }\n}\n\nfunction isPermanentListenerMaterializationError(error: unknown): boolean {\n return (\n error instanceof PermanentListenerMaterializationError ||\n error instanceof InterpolationUnresolvableError ||\n error instanceof InvalidJobRunnerLabelsError ||\n error instanceof AgentConfigUnresolvableError ||\n error instanceof AgentIntegrationMaterializationError\n );\n}\n"],"names":["AgentConfigUnresolvableError","AgentIntegrationMaterializationError","InterpolationUnresolvableError","InvalidJobRunnerLabelsError","assembleExecutionCreationContext","materializeJobExecutionSteps","materializeJobRunner","resolveJobExecutionName","materializeListenerExecution","params","fallbackName","job","key","sequence","executionName","evaluationTrace","runner","steps","status","model","PermanentListenerMaterializationError","modelJob","jobs","find","resolvedName","definitionId","run","context","listenerExecutionContext","values","value","trace","resolveAgentDefaults","agentToolContext","agentToolSnapshot","error","isPermanentListenerMaterializationError","name","statusReason","triggerEvents","length","triggerPayload","inputs","jobId","id","priorExecutions","Error","message"],"mappings":"AAcA,SACEA,4BAA4B,EAC5BC,oCAAoC,EACpCC,8BAA8B,EAC9BC,2BAA2B,QACtB,cAAc;AACrB,SACEC,gCAAgC,EAEhCC,4BAA4B,EAC5BC,oBAAoB,EACpBC,uBAAuB,QAClB,yBAAyB;AAkChC,OAAO,eAAeC,6BACpBC,MAA0C;IAE1C,MAAMC,eAAe,GAAGD,OAAOE,GAAG,CAACC,GAAG,CAAC,EAAE,EAAEH,OAAOI,QAAQ,EAAE;IAC5D,IAAIC,gBAAgBJ;IACpB,IAAIK,kBAA4D,EAAE;IAClE,IAAIC,SAA4B,EAAE;IAClC,IAAIC,QAA6C,EAAE;IACnD,IAAIC,SAA6B;IAEjC,IAAI;QACF,IAAI,CAACT,OAAOU,KAAK,EAAE,MAAM,IAAIC,sCAAsC;QACnE,MAAMC,WAAWZ,OAAOU,KAAK,CAACG,IAAI,CAACC,IAAI,CAAC,CAACZ,MAAQA,IAAIC,GAAG,KAAKH,OAAOE,GAAG,CAACC,GAAG;QAC3E,IAAI,CAACS,UAAU;YACb,MAAM,IAAID,sCACR,CAAC,+BAA+B,EAAEX,OAAOE,GAAG,CAACC,GAAG,EAAE;QAEtD;QAEA,MAAMY,eAAejB,wBAAwB;YAC3CkB,cAAchB,OAAOiB,GAAG,CAACD,YAAY;YACrCd,KAAKU;YACLX;YACAiB,SAASC,yBAAyB;gBAAC,GAAGnB,MAAM;gBAAEK;gBAAeI;YAAM,GAAGW,MAAM;QAC9E;QACAf,gBAAgBU,aAAaM,KAAK;QAClCf,kBAAkBS,aAAaO,KAAK;QAEpC,MAAMJ,UAAUC,yBAAyB;YAAC,GAAGnB,MAAM;YAAEK;YAAeI;QAAM;QAC1EF,SAASV,qBAAqB;YAC5BK,KAAKU;YACLM;YACAF,cAAchB,OAAOiB,GAAG,CAACD,YAAY;QACvC;QACAR,QAAQ,MAAMZ,6BAA6B;YACzCc,OAAOV,OAAOU,KAAK;YACnBR,KAAKU;YACLM;YACAK,sBAAsBvB,OAAOuB,oBAAoB;YACjDP,cAAchB,OAAOiB,GAAG,CAACD,YAAY;YACrCQ,kBAAkBxB,OAAOwB,gBAAgB;YACzCC,mBAAmBzB,OAAOyB,iBAAiB;QAC7C;IACF,EAAE,OAAOC,OAAO;QACd,IAAI,CAACC,wCAAwCD,QAAQ,MAAMA;QAC3DjB,SAAS;QACTD,QAAQ,EAAE;QACVD,SAAS,EAAE;IACb;IAEA,OAAO;QACLqB,MAAMvB;QACNE;QACAE;QACAoB,cAAcpB,WAAW,WAAW,YAAY;QAChDqB,eAAe9B,OAAO8B,aAAa;QACnCxB,iBAAiBA,gBAAgByB,MAAM,KAAK,IAAI,OAAOzB;QACvDE;IACF;AACF;AAEA,SAASW,yBACPnB,MAMC;IAED,OAAOL,iCAAiC;QACtCsB,KAAKjB,OAAOiB,GAAG;QACfe,gBAAgBhC,OAAOiB,GAAG,CAACe,cAAc;QACzCC,QAAQjC,OAAOiB,GAAG,CAACgB,MAAM;QACzBC,OAAOlC,OAAOE,GAAG,CAACiC,EAAE;QACpB/B,UAAUJ,OAAOI,QAAQ;QACzBC,eAAeL,OAAOK,aAAa;QACnCI,QAAQT,OAAOS,MAAM;QACrBqB,eAAe9B,OAAO8B,aAAa;QACnCM,iBAAiBpC,OAAOoC,eAAe;IACzC;AACF;AAEA,IAAA,AAAMzB,wCAAN,MAAMA,8CAA8C0B;IAClD,YAAYC,OAAe,CAAE;QAC3B,KAAK,CAACA;QACN,IAAI,CAACV,IAAI,GAAG;IACd;AACF;AAEA,SAASD,wCAAwCD,KAAc;IAC7D,OACEA,iBAAiBf,yCACjBe,iBAAiBjC,kCACjBiC,iBAAiBhC,+BACjBgC,iBAAiBnC,gCACjBmC,iBAAiBlC;AAErB"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
|
|
2
|
+
import type { DefinitionsInterModuleClient } from '@shipfox/api-definitions-dto/inter-module';
|
|
3
|
+
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
|
|
4
|
+
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
|
|
5
|
+
import type { SecretsInterModuleClient } from '@shipfox/api-secrets-dto/inter-module';
|
|
1
6
|
import type { TriggerPayload, WorkflowRun } from './entities/workflow-run.js';
|
|
2
7
|
export interface RunWorkflowParams {
|
|
3
8
|
workspaceId: string;
|
|
@@ -6,6 +11,12 @@ export interface RunWorkflowParams {
|
|
|
6
11
|
triggerPayload: TriggerPayload;
|
|
7
12
|
inputs?: Record<string, unknown> | undefined;
|
|
8
13
|
triggerIdempotencyKey?: string | undefined;
|
|
14
|
+
integrations?: IntegrationsModuleClient | undefined;
|
|
15
|
+
projects?: ProjectsModuleClient | undefined;
|
|
9
16
|
}
|
|
10
|
-
export declare function runWorkflow(params: RunWorkflowParams
|
|
17
|
+
export declare function runWorkflow(definitions: DefinitionsInterModuleClient, params: RunWorkflowParams & {
|
|
18
|
+
agent: AgentInterModuleClient;
|
|
19
|
+
}, options?: {
|
|
20
|
+
secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;
|
|
21
|
+
}): Promise<WorkflowRun>;
|
|
11
22
|
//# sourceMappingURL=run-workflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-workflow.d.ts","sourceRoot":"","sources":["../../src/core/run-workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-workflow.d.ts","sourceRoot":"","sources":["../../src/core/run-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAGpF,OAAO,KAAK,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAI5E,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,4BAA4B,EACzC,MAAM,EAAE,iBAAiB,GAAG;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAC,EAC3D,OAAO,GAAE;IAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;CAAM,GAClF,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
|