@shipfox/api-workflows 11.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +100 -0
- package/README.md +75 -0
- package/dist/core/agent-defaults.d.ts +2 -1
- package/dist/core/agent-defaults.d.ts.map +1 -1
- package/dist/core/agent-defaults.js.map +1 -1
- package/dist/core/checkout.d.ts +7 -21
- package/dist/core/checkout.d.ts.map +1 -1
- package/dist/core/checkout.js +122 -41
- package/dist/core/checkout.js.map +1 -1
- package/dist/core/entities/job-execution.d.ts +8 -0
- package/dist/core/entities/job-execution.d.ts.map +1 -1
- package/dist/core/entities/job-execution.js +13 -1
- package/dist/core/entities/job-execution.js.map +1 -1
- package/dist/core/entities/job-listener-event.d.ts +2 -0
- package/dist/core/entities/job-listener-event.d.ts.map +1 -1
- package/dist/core/entities/job-listener-event.js.map +1 -1
- package/dist/core/entities/step.d.ts +13 -3
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js +6 -0
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/entities/workflow-run-attempt.d.ts +1 -0
- 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/entities/workflow-run.d.ts +17 -0
- package/dist/core/entities/workflow-run.d.ts.map +1 -1
- package/dist/core/entities/workflow-run.js.map +1 -1
- package/dist/core/errors.d.ts +9 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +10 -5
- package/dist/core/errors.js.map +1 -1
- package/dist/core/job-execution.d.ts.map +1 -1
- package/dist/core/job-execution.js +14 -8
- package/dist/core/job-execution.js.map +1 -1
- package/dist/core/job-transition/decide-job-activation.d.ts +1 -0
- package/dist/core/job-transition/decide-job-activation.d.ts.map +1 -1
- package/dist/core/job-transition/decide-job-activation.js +1 -0
- package/dist/core/job-transition/decide-job-activation.js.map +1 -1
- package/dist/core/job-transition/derive-job-success.d.ts +1 -0
- package/dist/core/job-transition/derive-job-success.d.ts.map +1 -1
- package/dist/core/job-transition/derive-job-success.js +5 -8
- package/dist/core/job-transition/derive-job-success.js.map +1 -1
- package/dist/core/listener-execution-materialization.d.ts +6 -3
- package/dist/core/listener-execution-materialization.d.ts.map +1 -1
- package/dist/core/listener-execution-materialization.js +44 -6
- package/dist/core/listener-execution-materialization.js.map +1 -1
- package/dist/core/resolve-trigger-reference.d.ts +11 -0
- package/dist/core/resolve-trigger-reference.d.ts.map +1 -0
- package/dist/core/resolve-trigger-reference.js +39 -0
- package/dist/core/resolve-trigger-reference.js.map +1 -0
- package/dist/core/run-workflow.d.ts +1 -0
- package/dist/core/run-workflow.d.ts.map +1 -1
- package/dist/core/run-workflow.js +1 -0
- package/dist/core/run-workflow.js.map +1 -1
- package/dist/core/step-config/agent.d.ts +1 -2
- package/dist/core/step-config/agent.d.ts.map +1 -1
- package/dist/core/step-config/agent.js +22 -7
- package/dist/core/step-config/agent.js.map +1 -1
- package/dist/core/step-config/assemble-run-context.d.ts +19 -8
- package/dist/core/step-config/assemble-run-context.d.ts.map +1 -1
- package/dist/core/step-config/assemble-run-context.js +51 -19
- package/dist/core/step-config/assemble-run-context.js.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.js +72 -4
- package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -1
- package/dist/core/step-config/index.d.ts +1 -0
- package/dist/core/step-config/index.d.ts.map +1 -1
- package/dist/core/step-config/index.js +1 -0
- package/dist/core/step-config/index.js.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.js +49 -8
- 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 +9 -5
- package/dist/core/step-config/materialize-workflow-model.js.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.d.ts +3 -3
- package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.js +24 -13
- package/dist/core/step-config/resolve-job-execution-name.js.map +1 -1
- package/dist/core/step-config/resolve-step-config.d.ts.map +1 -1
- package/dist/core/step-config/resolve-step-config.js +174 -9
- package/dist/core/step-config/resolve-step-config.js.map +1 -1
- package/dist/core/step-config/resolve-workflow-run-name.d.ts +19 -0
- package/dist/core/step-config/resolve-workflow-run-name.d.ts.map +1 -0
- package/dist/core/step-config/resolve-workflow-run-name.js +73 -0
- package/dist/core/step-config/resolve-workflow-run-name.js.map +1 -0
- package/dist/core/step-transition/decide-step-transition.js.map +1 -1
- package/dist/core/step-transition/evaluate-gate.d.ts +2 -1
- package/dist/core/step-transition/evaluate-gate.d.ts.map +1 -1
- package/dist/core/step-transition/evaluate-gate.js +5 -3
- package/dist/core/step-transition/evaluate-gate.js.map +1 -1
- package/dist/core/workflow-run-creation.d.ts +3 -0
- package/dist/core/workflow-run-creation.d.ts.map +1 -1
- package/dist/core/workflow-run-creation.js +22 -7
- package/dist/core/workflow-run-creation.js.map +1 -1
- package/dist/db/db.d.ts +278 -10
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +2 -0
- package/dist/db/db.js.map +1 -1
- package/dist/db/index.d.ts +3 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/job-listener-events.d.ts +2 -0
- package/dist/db/job-listener-events.d.ts.map +1 -1
- package/dist/db/job-listener-events.js +1 -0
- package/dist/db/job-listener-events.js.map +1 -1
- package/dist/db/job-listeners.d.ts +2 -0
- package/dist/db/job-listeners.d.ts.map +1 -1
- package/dist/db/job-listeners.js +81 -21
- package/dist/db/job-listeners.js.map +1 -1
- package/dist/db/schema/job-executions.d.ts +3 -3
- package/dist/db/schema/job-executions.d.ts.map +1 -1
- package/dist/db/schema/job-executions.js +8 -4
- package/dist/db/schema/job-executions.js.map +1 -1
- package/dist/db/schema/job-listener-events.d.ts +20 -0
- package/dist/db/schema/job-listener-events.d.ts.map +1 -1
- package/dist/db/schema/job-listener-events.js +2 -0
- package/dist/db/schema/job-listener-events.js.map +1 -1
- package/dist/db/schema/step-attempts.js +2 -2
- package/dist/db/schema/step-attempts.js.map +1 -1
- package/dist/db/schema/steps.d.ts +4 -2
- package/dist/db/schema/steps.d.ts.map +1 -1
- package/dist/db/schema/steps.js +1 -1
- package/dist/db/schema/steps.js.map +1 -1
- package/dist/db/schema/workflow-run-attempts.d.ts +21 -2
- package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -1
- package/dist/db/schema/workflow-run-attempts.js +2 -0
- package/dist/db/schema/workflow-run-attempts.js.map +1 -1
- package/dist/db/schema/workflow-run-counters.d.ts +43 -0
- package/dist/db/schema/workflow-run-counters.d.ts.map +1 -0
- package/dist/db/schema/workflow-run-counters.js +10 -0
- package/dist/db/schema/workflow-run-counters.js.map +1 -0
- package/dist/db/schema/workflow-runs.d.ts +54 -1
- package/dist/db/schema/workflow-runs.d.ts.map +1 -1
- package/dist/db/schema/workflow-runs.js +10 -2
- package/dist/db/schema/workflow-runs.js.map +1 -1
- package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
- package/dist/db/workflow-runs/job-executions.js +35 -14
- package/dist/db/workflow-runs/job-executions.js.map +1 -1
- package/dist/db/workflow-runs/jobs.d.ts +2 -0
- package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
- package/dist/db/workflow-runs/jobs.js +9 -5
- package/dist/db/workflow-runs/jobs.js.map +1 -1
- package/dist/db/workflow-runs/queries.d.ts +51 -0
- package/dist/db/workflow-runs/queries.d.ts.map +1 -1
- package/dist/db/workflow-runs/queries.js +82 -2
- package/dist/db/workflow-runs/queries.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts +1 -0
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js +159 -32
- 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 +13 -5
- package/dist/db/workflow-runs/run-rerun.js.map +1 -1
- package/dist/db/workflow-runs/shared.d.ts +1 -0
- package/dist/db/workflow-runs/shared.d.ts.map +1 -1
- package/dist/db/workflow-runs/shared.js +2 -1
- package/dist/db/workflow-runs/shared.js.map +1 -1
- package/dist/db/workflow-runs/steps.js +3 -3
- package/dist/db/workflow-runs/steps.js.map +1 -1
- package/dist/db/workflow-runs.d.ts +4 -3
- package/dist/db/workflow-runs.d.ts.map +1 -1
- package/dist/db/workflow-runs.js +3 -2
- package/dist/db/workflow-runs.js.map +1 -1
- package/dist/metrics/instance.d.ts +1 -0
- package/dist/metrics/instance.d.ts.map +1 -1
- package/dist/metrics/instance.js +9 -0
- package/dist/metrics/instance.js.map +1 -1
- package/dist/presentation/dto/checkout-token.d.ts +1 -0
- package/dist/presentation/dto/checkout-token.d.ts.map +1 -1
- package/dist/presentation/dto/checkout-token.js +1 -0
- package/dist/presentation/dto/checkout-token.js.map +1 -1
- package/dist/presentation/dto/index.d.ts +1 -1
- package/dist/presentation/dto/index.d.ts.map +1 -1
- package/dist/presentation/dto/index.js +1 -1
- package/dist/presentation/dto/index.js.map +1 -1
- package/dist/presentation/dto/step.d.ts.map +1 -1
- package/dist/presentation/dto/step.js +2 -2
- package/dist/presentation/dto/step.js.map +1 -1
- package/dist/presentation/dto/workflow-run.d.ts +3 -1
- package/dist/presentation/dto/workflow-run.d.ts.map +1 -1
- package/dist/presentation/dto/workflow-run.js +34 -0
- package/dist/presentation/dto/workflow-run.js.map +1 -1
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +31 -3
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/presentation/routes/checkout-token.d.ts +1 -1
- package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
- package/dist/presentation/routes/checkout-token.js +32 -20
- package/dist/presentation/routes/checkout-token.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 +2 -1
- package/dist/presentation/routes/leased-step.js.map +1 -1
- package/dist/presentation/routes/list-runs.d.ts.map +1 -1
- package/dist/presentation/routes/list-runs.js +9 -3
- package/dist/presentation/routes/list-runs.js.map +1 -1
- package/dist/presentation/routes/project-access.d.ts +1 -0
- package/dist/presentation/routes/project-access.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.js +9 -2
- package/dist/presentation/routes/report-step.js.map +1 -1
- package/dist/presentation/subscribers/on-job-steps-settled.js +1 -1
- package/dist/presentation/subscribers/on-job-steps-settled.js.map +1 -1
- package/dist/presentation/subscribers/on-runner-job-claimed.d.ts.map +1 -1
- package/dist/presentation/subscribers/on-runner-job-claimed.js +21 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.js.map +1 -1
- package/dist/temporal/activities/index.d.ts.map +1 -1
- package/dist/temporal/activities/index.js +2 -1
- package/dist/temporal/activities/index.js.map +1 -1
- package/dist/temporal/activities/orchestration-activities.d.ts +1 -0
- package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
- package/dist/temporal/activities/orchestration-activities.js.map +1 -1
- package/dist/temporal/constants.d.ts +1 -0
- package/dist/temporal/constants.d.ts.map +1 -1
- package/dist/temporal/constants.js +1 -0
- package/dist/temporal/constants.js.map +1 -1
- package/dist/temporal/index.d.ts +1 -1
- package/dist/temporal/index.d.ts.map +1 -1
- package/dist/temporal/index.js +1 -1
- package/dist/temporal/index.js.map +1 -1
- package/dist/temporal/workflows/index.bundle.js +82 -43
- package/dist/temporal/workflows/index.d.ts +1 -1
- package/dist/temporal/workflows/index.d.ts.map +1 -1
- package/dist/temporal/workflows/index.js +1 -1
- package/dist/temporal/workflows/index.js.map +1 -1
- package/dist/temporal/workflows/job-execution-orchestration.d.ts +5 -0
- package/dist/temporal/workflows/job-execution-orchestration.d.ts.map +1 -1
- package/dist/temporal/workflows/job-execution-orchestration.js +77 -43
- package/dist/temporal/workflows/job-execution-orchestration.js.map +1 -1
- package/dist/temporal/workflows/test-env.d.ts +5 -1
- package/dist/temporal/workflows/test-env.d.ts.map +1 -1
- package/dist/temporal/workflows/test-env.js +32 -11
- package/dist/temporal/workflows/test-env.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0000_initial.sql +14 -2
- package/drizzle/0001_windy_sunfire.sql +1 -0
- package/drizzle/meta/0000_snapshot.json +93 -1
- package/drizzle/meta/0001_snapshot.json +1711 -0
- package/drizzle/meta/_journal.json +2 -2
- package/package.json +21 -21
- package/src/core/agent-defaults.ts +2 -1
- package/src/core/checkout.test.ts +378 -67
- package/src/core/checkout.ts +142 -59
- package/src/core/entities/job-execution.test.ts +21 -0
- package/src/core/entities/job-execution.ts +24 -0
- package/src/core/entities/job-listener-event.ts +3 -0
- package/src/core/entities/step.ts +15 -3
- package/src/core/entities/workflow-run-attempt.ts +1 -0
- package/src/core/entities/workflow-run.ts +16 -0
- package/src/core/errors.ts +21 -7
- package/src/core/job-execution.ts +27 -4
- package/src/core/job-transition/decide-job-activation.test.ts +4 -0
- package/src/core/job-transition/decide-job-activation.ts +2 -0
- package/src/core/job-transition/derive-job-success.test.ts +12 -0
- package/src/core/job-transition/derive-job-success.ts +6 -9
- package/src/core/listener-execution-materialization.test.ts +2 -0
- package/src/core/listener-execution-materialization.ts +57 -11
- package/src/core/resolve-trigger-reference.test.ts +160 -0
- package/src/core/resolve-trigger-reference.ts +53 -0
- package/src/core/run-workflow.ts +2 -0
- package/src/core/step-config/agent.ts +29 -12
- package/src/core/step-config/assemble-run-context.test.ts +149 -6
- package/src/core/step-config/assemble-run-context.ts +87 -25
- package/src/core/step-config/complete-step-dispatch-config.test.ts +125 -2
- package/src/core/step-config/complete-step-dispatch-config.ts +83 -1
- package/src/core/step-config/index.ts +7 -0
- package/src/core/step-config/materialize-job-execution-steps.test.ts +250 -1
- package/src/core/step-config/materialize-job-execution-steps.ts +57 -10
- package/src/core/step-config/materialize-workflow-model.test.ts +212 -4
- package/src/core/step-config/materialize-workflow-model.ts +33 -28
- package/src/core/step-config/resolve-job-execution-name.test.ts +37 -15
- package/src/core/step-config/resolve-job-execution-name.ts +30 -15
- package/src/core/step-config/resolve-step-config.ts +175 -10
- package/src/core/step-config/resolve-workflow-run-name.test.ts +115 -0
- package/src/core/step-config/resolve-workflow-run-name.ts +108 -0
- package/src/core/step-transition/decide-step-transition.ts +2 -2
- package/src/core/step-transition/evaluate-gate.test.ts +8 -0
- package/src/core/step-transition/evaluate-gate.ts +8 -1
- package/src/core/workflow-run-creation.test.ts +7 -4
- package/src/core/workflow-run-creation.ts +13 -7
- package/src/db/db.ts +2 -0
- package/src/db/index.ts +6 -0
- package/src/db/job-listener-events.test.ts +19 -0
- package/src/db/job-listener-events.ts +3 -0
- package/src/db/job-listeners.test.ts +187 -5
- package/src/db/job-listeners.ts +122 -30
- package/src/db/schema/job-executions.ts +12 -5
- package/src/db/schema/job-listener-events.ts +3 -0
- package/src/db/schema/step-attempts.ts +2 -2
- package/src/db/schema/steps.ts +2 -1
- package/src/db/schema/workflow-run-attempts.ts +2 -0
- package/src/db/schema/workflow-run-counters.ts +13 -0
- package/src/db/schema/workflow-runs.ts +11 -2
- package/src/db/workflow-runs/job-executions.ts +37 -15
- package/src/db/workflow-runs/jobs.ts +17 -4
- package/src/db/workflow-runs/queries.test.ts +206 -0
- package/src/db/workflow-runs/queries.ts +146 -2
- package/src/db/workflow-runs/run-create.test.ts +606 -8
- package/src/db/workflow-runs/run-create.ts +185 -40
- package/src/db/workflow-runs/run-rerun.test.ts +61 -2
- package/src/db/workflow-runs/run-rerun.ts +15 -5
- package/src/db/workflow-runs/shared.ts +2 -0
- package/src/db/workflow-runs/steps.ts +3 -3
- package/src/db/workflow-runs.ts +7 -0
- package/src/metrics/instance.ts +14 -0
- package/src/presentation/dto/checkout-token.test.ts +19 -9
- package/src/presentation/dto/checkout-token.ts +2 -1
- package/src/presentation/dto/index.ts +1 -1
- package/src/presentation/dto/job.test.ts +9 -0
- package/src/presentation/dto/step.test.ts +12 -0
- package/src/presentation/dto/step.ts +5 -2
- package/src/presentation/dto/workflow-run.ts +44 -2
- package/src/presentation/inter-module.test.ts +165 -0
- package/src/presentation/inter-module.ts +38 -4
- package/src/presentation/routes/checkout-token.test.ts +357 -142
- package/src/presentation/routes/checkout-token.ts +56 -26
- package/src/presentation/routes/get-run.test.ts +2 -0
- package/src/presentation/routes/get-step-secrets.test.ts +7 -2
- package/src/presentation/routes/leased-step.ts +9 -1
- package/src/presentation/routes/list-runs.test.ts +57 -0
- package/src/presentation/routes/list-runs.ts +8 -3
- package/src/presentation/routes/report-step.test.ts +25 -0
- package/src/presentation/routes/report-step.ts +10 -2
- package/src/presentation/subscribers/on-job-steps-settled.ts +1 -1
- package/src/presentation/subscribers/on-runner-job-claimed.test.ts +49 -0
- package/src/presentation/subscribers/on-runner-job-claimed.ts +22 -0
- package/src/temporal/activities/index.ts +1 -0
- package/src/temporal/activities/orchestration-activities.ts +1 -0
- package/src/temporal/constants.ts +1 -0
- package/src/temporal/index.ts +1 -0
- package/src/temporal/workflows/index.ts +1 -0
- package/src/temporal/workflows/job-execution-orchestration.test.ts +142 -6
- package/src/temporal/workflows/job-execution-orchestration.ts +99 -50
- package/src/temporal/workflows/run-orchestration.test.ts +1 -1
- package/src/temporal/workflows/test-env.ts +50 -13
- package/test/factories/project.ts +2 -0
- package/test/factories/workflow-model.ts +80 -26
- package/test/factories/workflow-run.ts +4 -1
- package/test/fixtures/agent-inter-module.ts +2 -1
- package/test/fixtures/job-with-steps.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/drizzle/0001_agent_tool_materialization.sql +0 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { AgentIntegrationMcpServerConfigDto, MaterializedAgentIntegrationConfigDto } from '@shipfox/api-agent-dto';
|
|
2
2
|
import type { EvaluationTraceEntry, EvaluationTraceLimitEntry, ResolvedField, WorkflowExpression } from '@shipfox/expression';
|
|
3
|
-
import type {
|
|
3
|
+
import type { Harness } from '@shipfox/workflow-document';
|
|
4
4
|
import type { InterpolationUnresolvableField } from '../errors.js';
|
|
5
5
|
export type StepStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'skipped';
|
|
6
|
+
export declare const STEP_TYPES: readonly ["setup", "run", "agent", "checkout"];
|
|
7
|
+
export type StepType = (typeof STEP_TYPES)[number];
|
|
6
8
|
export declare const STEP_STATUS_REASONS: readonly ["default_gate_rejected", "condition_rejected", "condition_errored"];
|
|
7
9
|
export type StepStatusReason = (typeof STEP_STATUS_REASONS)[number];
|
|
8
10
|
export declare function toStepStatusReason(value: string | null): StepStatusReason | null;
|
|
@@ -30,14 +32,22 @@ export interface StepConfigEvaluationTraceEntry extends EvaluationTraceEntry {
|
|
|
30
32
|
readonly envKey?: string;
|
|
31
33
|
}
|
|
32
34
|
export interface StepConfigDispatchPlan {
|
|
35
|
+
working_directory?: ResolvedField;
|
|
33
36
|
run?: ResolvedField;
|
|
34
37
|
env?: Readonly<Record<string, ResolvedField>>;
|
|
38
|
+
checkout?: {
|
|
39
|
+
project?: ResolvedField;
|
|
40
|
+
connection?: ResolvedField;
|
|
41
|
+
repository?: ResolvedField;
|
|
42
|
+
ref?: ResolvedField;
|
|
43
|
+
path?: ResolvedField;
|
|
44
|
+
};
|
|
35
45
|
agent?: {
|
|
36
46
|
prompt?: ResolvedField;
|
|
37
47
|
model?: ResolvedField;
|
|
38
48
|
provider?: ResolvedField;
|
|
39
49
|
harness?: Harness;
|
|
40
|
-
thinking?:
|
|
50
|
+
thinking?: ResolvedField;
|
|
41
51
|
tools?: readonly string[];
|
|
42
52
|
integrations?: readonly MaterializedAgentIntegrationConfigDto[];
|
|
43
53
|
mcpServers?: readonly AgentIntegrationMcpServerConfigDto[];
|
|
@@ -53,7 +63,7 @@ export interface Step {
|
|
|
53
63
|
status: StepStatus;
|
|
54
64
|
statusReason: StepStatusReason | null;
|
|
55
65
|
evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;
|
|
56
|
-
type:
|
|
66
|
+
type: StepType;
|
|
57
67
|
config: Record<string, unknown>;
|
|
58
68
|
condition: WorkflowExpression | null;
|
|
59
69
|
configPlan: StepConfigDispatchPlan | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/core/entities/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kCAAkC,EAClC,qCAAqC,EACtC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,oBAAoB,EACpB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/core/entities/step.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/entities/step.ts"],"sourcesContent":["import type {\n AgentIntegrationMcpServerConfigDto,\n MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport type {\n EvaluationTraceEntry,\n EvaluationTraceLimitEntry,\n ResolvedField,\n WorkflowExpression,\n} from '@shipfox/expression';\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../../src/core/entities/step.ts"],"sourcesContent":["import type {\n AgentIntegrationMcpServerConfigDto,\n MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport type {\n EvaluationTraceEntry,\n EvaluationTraceLimitEntry,\n ResolvedField,\n WorkflowExpression,\n} from '@shipfox/expression';\nimport type {Harness} from '@shipfox/workflow-document';\nimport type {InterpolationUnresolvableField} from '../errors.js';\n\nexport type StepStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'skipped';\n\nexport const STEP_TYPES = ['setup', 'run', 'agent', 'checkout'] as const;\n\nexport type StepType = (typeof STEP_TYPES)[number];\n\nexport const STEP_STATUS_REASONS = [\n 'default_gate_rejected',\n 'condition_rejected',\n 'condition_errored',\n] as const;\n\nexport type StepStatusReason = (typeof STEP_STATUS_REASONS)[number];\n\nconst STEP_STATUS_REASON_SET = new Set<StepStatusReason>(STEP_STATUS_REASONS);\n\nexport function toStepStatusReason(value: string | null): StepStatusReason | null {\n if (value === null) return null;\n return STEP_STATUS_REASON_SET.has(value as StepStatusReason) ? (value as StepStatusReason) : null;\n}\n\nexport type StepAttemptLogOutcome = 'drained' | 'abandoned';\n\n// A step_attempts row exists only once an attempt is dispatched, so it is never\n// 'pending' or 'skipped'.\nexport type StepAttemptStatus = Exclude<StepStatus, 'pending' | 'skipped'>;\n\nexport interface StepSourceLocation {\n startLine: number;\n endLine: number;\n}\n\n/**\n * Trace entry after a resolver-local expression trace is attached to workflow\n * storage.\n *\n * Step config traces are stored on step attempts with the resolved attempt\n * config; job-level traces are stored on the job or job-execution row whose\n * value/status they explain. Keep `field` as the authored field path that\n * produced the trace, not as a step-only enum.\n */\nexport type PersistedEvaluationTraceEntry =\n | (EvaluationTraceEntry & {\n readonly field: string;\n readonly envKey?: string;\n })\n | EvaluationTraceLimitEntry;\n\nexport interface StepConfigEvaluationTraceEntry extends EvaluationTraceEntry {\n readonly field: InterpolationUnresolvableField;\n readonly envKey?: string;\n}\n\nexport interface StepConfigDispatchPlan {\n working_directory?: ResolvedField;\n run?: ResolvedField;\n env?: Readonly<Record<string, ResolvedField>>;\n checkout?: {\n project?: ResolvedField;\n connection?: ResolvedField;\n repository?: ResolvedField;\n ref?: ResolvedField;\n path?: ResolvedField;\n };\n agent?: {\n prompt?: ResolvedField;\n model?: ResolvedField;\n provider?: ResolvedField;\n harness?: Harness;\n thinking?: ResolvedField;\n tools?: readonly string[];\n integrations?: readonly MaterializedAgentIntegrationConfigDto[];\n mcpServers?: readonly AgentIntegrationMcpServerConfigDto[];\n };\n trace?: readonly (StepConfigEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface Step {\n id: string;\n jobExecutionId: string;\n key: string | null;\n name: string;\n sourceLocation: StepSourceLocation | null;\n status: StepStatus;\n statusReason: StepStatusReason | null;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;\n type: StepType;\n config: Record<string, unknown>;\n condition: WorkflowExpression | null;\n configPlan: StepConfigDispatchPlan | null;\n authoredConfig: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n position: number;\n version: number;\n // Execution-attempt identity for the current projection: which attempt the\n // status/output/error above reflect. Distinct from `version` (the optimistic\n // row counter). Starts at 1 and is bumped when a step is rewound.\n currentAttempt: number;\n createdAt: Date;\n updatedAt: Date;\n}\n\n// Append-only execution history: one row per dispatched attempt of a step. The\n// current projection lives on `Step`; this is the audit trail and the\n// idempotency anchor (unique on (stepId, attempt)).\nexport interface StepAttempt {\n id: string;\n stepId: string;\n attempt: number;\n executionOrder: number;\n status: StepAttemptStatus;\n config: Record<string, unknown> | null;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;\n output: Record<string, unknown> | null;\n response: string | null;\n error: Record<string, unknown> | null;\n exitCode: number | null;\n gateResult: Record<string, unknown> | null;\n restartFeedback: string | null;\n logOutcome: StepAttemptLogOutcome | null;\n startedAt: Date;\n finishedAt: Date | null;\n createdAt: Date;\n}\n"],"names":["STEP_TYPES","STEP_STATUS_REASONS","STEP_STATUS_REASON_SET","Set","toStepStatusReason","value","has"],"mappings":"AAeA,OAAO,MAAMA,aAAa;IAAC;IAAS;IAAO;IAAS;CAAW,CAAU;AAIzE,OAAO,MAAMC,sBAAsB;IACjC;IACA;IACA;CACD,CAAU;AAIX,MAAMC,yBAAyB,IAAIC,IAAsBF;AAEzD,OAAO,SAASG,mBAAmBC,KAAoB;IACrD,IAAIA,UAAU,MAAM,OAAO;IAC3B,OAAOH,uBAAuBI,GAAG,CAACD,SAA8BA,QAA6B;AAC/F"}
|
|
@@ -10,6 +10,7 @@ export interface WorkflowRunAttempt {
|
|
|
10
10
|
rerunMode: RerunMode | null;
|
|
11
11
|
rerunByUserId: string | null;
|
|
12
12
|
model: WorkflowModel | null;
|
|
13
|
+
vars: Record<string, string> | null;
|
|
13
14
|
agentToolMaterialization: AgentToolMaterializationSnapshot | null;
|
|
14
15
|
version: number;
|
|
15
16
|
createdAt: Date;
|
|
@@ -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,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
|
+
{"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,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,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-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,
|
|
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 vars: Record<string, string> | 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,WAeC"}
|
|
@@ -5,6 +5,15 @@ import type { WorkflowRunAttempt } from './workflow-run-attempt.js';
|
|
|
5
5
|
export type WorkflowRunStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';
|
|
6
6
|
export type TerminalWorkflowRunStatus = Extract<WorkflowRunStatus, 'succeeded' | 'failed' | 'cancelled'>;
|
|
7
7
|
export declare function isWorkflowRunTerminal(status: WorkflowRunStatus): status is TerminalWorkflowRunStatus;
|
|
8
|
+
export interface WorkflowRunTriggerReference {
|
|
9
|
+
project: {
|
|
10
|
+
id: string;
|
|
11
|
+
} | null;
|
|
12
|
+
repository: string | null;
|
|
13
|
+
ref: string | null;
|
|
14
|
+
commit: string | null;
|
|
15
|
+
actor: string | null;
|
|
16
|
+
}
|
|
8
17
|
export interface WorkflowSourceSnapshot {
|
|
9
18
|
content: string;
|
|
10
19
|
format: 'yaml';
|
|
@@ -32,13 +41,21 @@ export interface WorkflowRun {
|
|
|
32
41
|
workspaceId: string;
|
|
33
42
|
projectId: string;
|
|
34
43
|
definitionId: string;
|
|
44
|
+
number: number;
|
|
45
|
+
/** Effective runtime name: the resolved override, or workflowName when absent. */
|
|
35
46
|
name: string;
|
|
47
|
+
/** Static workflow-name snapshot preserved from the definition at creation. */
|
|
48
|
+
workflowName: string;
|
|
49
|
+
/** Nullable resolved override retained for rerun fidelity. */
|
|
50
|
+
nameOverride: string | null;
|
|
36
51
|
status: WorkflowRunStatus;
|
|
37
52
|
currentAttempt: number;
|
|
38
53
|
triggerProvider: string | null;
|
|
39
54
|
triggerSource: string;
|
|
40
55
|
triggerEvent: string;
|
|
41
56
|
triggerPayload: TriggerPayload;
|
|
57
|
+
/** Provider-neutral trigger facts captured at run creation, when available. */
|
|
58
|
+
triggerReference?: WorkflowRunTriggerReference | null | undefined;
|
|
42
59
|
inputs: Record<string, unknown> | null;
|
|
43
60
|
sourceSnapshot: WorkflowSourceSnapshot | null;
|
|
44
61
|
triggerIdempotencyKey: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run.d.ts","sourceRoot":"","sources":["../../../src/core/entities/workflow-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAC,IAAI,EAAE,WAAW,EAAC,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE7F,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,iBAAiB,EACjB,WAAW,GAAG,QAAQ,GAAG,WAAW,CACrC,CAAC;AAQF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,GACxB,MAAM,IAAI,yBAAyB,CAErC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GACtB;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,GAID;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,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;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,GAAG;IAC5C,aAAa,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"workflow-run.d.ts","sourceRoot":"","sources":["../../../src/core/entities/workflow-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAC,IAAI,EAAE,WAAW,EAAC,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE7F,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,iBAAiB,EACjB,WAAW,GAAG,QAAQ,GAAG,WAAW,CACrC,CAAC;AAQF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,GACxB,MAAM,IAAI,yBAAyB,CAErC;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GACtB;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,GAID;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,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;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,GAAG;IAC5C,aAAa,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/entities/workflow-run.ts"],"sourcesContent":["import type {Job} from './job.js';\nimport type {JobExecution} from './job-execution.js';\nimport type {Step, StepAttempt} from './step.js';\nimport type {WorkflowRunAttempt} from './workflow-run-attempt.js';\n\nexport type WorkflowRunStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';\n\nexport type TerminalWorkflowRunStatus = Extract<\n WorkflowRunStatus,\n 'succeeded' | 'failed' | 'cancelled'\n>;\n\nconst TERMINAL_WORKFLOW_RUN_STATUSES = new Set<WorkflowRunStatus>([\n 'succeeded',\n 'failed',\n 'cancelled',\n]);\n\nexport function isWorkflowRunTerminal(\n status: WorkflowRunStatus,\n): status is TerminalWorkflowRunStatus {\n return TERMINAL_WORKFLOW_RUN_STATUSES.has(status);\n}\n\nexport interface WorkflowSourceSnapshot {\n content: string;\n format: 'yaml';\n}\n\nexport type TriggerPayload =\n | {\n source: 'manual';\n provider?: 'manual' | undefined;\n event: 'fire';\n subscriptionId: string;\n userId: string;\n }\n | {\n source: 'cron';\n provider?: 'cron' | undefined;\n event: 'tick';\n scheduleId: string;\n }\n // Integration sources (github, gitlab, sentry, …) flow through opaquely: the\n // run records what fired it and carries the raw event payload, without the\n // triggers module having to know each source's shape.\n | {\n source: string;\n provider?: string | undefined;\n event: string;\n deliveryId: string;\n data: unknown;\n };\n\nexport interface WorkflowRun {\n id: string;\n workspaceId: string;\n projectId: string;\n definitionId: string;\n name: string;\n status: WorkflowRunStatus;\n currentAttempt: number;\n triggerProvider: string | null;\n triggerSource: string;\n triggerEvent: string;\n triggerPayload: TriggerPayload;\n inputs: Record<string, unknown> | null;\n sourceSnapshot: WorkflowSourceSnapshot | null;\n triggerIdempotencyKey: string | null;\n timeoutMs: number;\n version: number;\n createdAt: Date;\n updatedAt: Date;\n startedAt: Date | null;\n finishedAt: Date | null;\n}\n\nexport interface StepDetail extends Step {\n attempts: StepAttempt[];\n}\n\nexport interface JobExecutionDetail extends JobExecution {\n steps: StepDetail[];\n}\n\nexport interface WorkflowJobDetail extends Job {\n jobExecutions: JobExecutionDetail[];\n}\n\nexport interface WorkflowRunDetail extends WorkflowRun {\n runAttempt: WorkflowRunAttempt;\n latestAttempt: number;\n jobs: WorkflowJobDetail[];\n}\n"],"names":["TERMINAL_WORKFLOW_RUN_STATUSES","Set","isWorkflowRunTerminal","status","has"],"mappings":"AAYA,MAAMA,iCAAiC,IAAIC,IAAuB;IAChE;IACA;IACA;CACD;AAED,OAAO,SAASC,sBACdC,MAAyB;IAEzB,OAAOH,+BAA+BI,GAAG,CAACD;AAC5C"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/entities/workflow-run.ts"],"sourcesContent":["import type {Job} from './job.js';\nimport type {JobExecution} from './job-execution.js';\nimport type {Step, StepAttempt} from './step.js';\nimport type {WorkflowRunAttempt} from './workflow-run-attempt.js';\n\nexport type WorkflowRunStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';\n\nexport type TerminalWorkflowRunStatus = Extract<\n WorkflowRunStatus,\n 'succeeded' | 'failed' | 'cancelled'\n>;\n\nconst TERMINAL_WORKFLOW_RUN_STATUSES = new Set<WorkflowRunStatus>([\n 'succeeded',\n 'failed',\n 'cancelled',\n]);\n\nexport function isWorkflowRunTerminal(\n status: WorkflowRunStatus,\n): status is TerminalWorkflowRunStatus {\n return TERMINAL_WORKFLOW_RUN_STATUSES.has(status);\n}\n\nexport interface WorkflowRunTriggerReference {\n project: {id: string} | null;\n repository: string | null;\n ref: string | null;\n commit: string | null;\n actor: string | null;\n}\n\nexport interface WorkflowSourceSnapshot {\n content: string;\n format: 'yaml';\n}\n\nexport type TriggerPayload =\n | {\n source: 'manual';\n provider?: 'manual' | undefined;\n event: 'fire';\n subscriptionId: string;\n userId: string;\n }\n | {\n source: 'cron';\n provider?: 'cron' | undefined;\n event: 'tick';\n scheduleId: string;\n }\n // Integration sources (github, gitlab, sentry, …) flow through opaquely: the\n // run records what fired it and carries the raw event payload, without the\n // triggers module having to know each source's shape.\n | {\n source: string;\n provider?: string | undefined;\n event: string;\n deliveryId: string;\n data: unknown;\n };\n\nexport interface WorkflowRun {\n id: string;\n workspaceId: string;\n projectId: string;\n definitionId: string;\n number: number;\n /** Effective runtime name: the resolved override, or workflowName when absent. */\n name: string;\n /** Static workflow-name snapshot preserved from the definition at creation. */\n workflowName: string;\n /** Nullable resolved override retained for rerun fidelity. */\n nameOverride: string | null;\n status: WorkflowRunStatus;\n currentAttempt: number;\n triggerProvider: string | null;\n triggerSource: string;\n triggerEvent: string;\n triggerPayload: TriggerPayload;\n /** Provider-neutral trigger facts captured at run creation, when available. */\n triggerReference?: WorkflowRunTriggerReference | null | undefined;\n inputs: Record<string, unknown> | null;\n sourceSnapshot: WorkflowSourceSnapshot | null;\n triggerIdempotencyKey: string | null;\n timeoutMs: number;\n version: number;\n createdAt: Date;\n updatedAt: Date;\n startedAt: Date | null;\n finishedAt: Date | null;\n}\n\nexport interface StepDetail extends Step {\n attempts: StepAttempt[];\n}\n\nexport interface JobExecutionDetail extends JobExecution {\n steps: StepDetail[];\n}\n\nexport interface WorkflowJobDetail extends Job {\n jobExecutions: JobExecutionDetail[];\n}\n\nexport interface WorkflowRunDetail extends WorkflowRun {\n runAttempt: WorkflowRunAttempt;\n latestAttempt: number;\n jobs: WorkflowJobDetail[];\n}\n"],"names":["TERMINAL_WORKFLOW_RUN_STATUSES","Set","isWorkflowRunTerminal","status","has"],"mappings":"AAYA,MAAMA,iCAAiC,IAAIC,IAAuB;IAChE;IACA;IACA;CACD;AAED,OAAO,SAASC,sBACdC,MAAyB;IAEzB,OAAOH,+BAA+BI,GAAG,CAACD;AAC5C"}
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export declare class AgentConfigUnresolvableError extends Error {
|
|
|
25
25
|
export declare class AgentIntegrationMaterializationError extends Error {
|
|
26
26
|
constructor(message: string);
|
|
27
27
|
}
|
|
28
|
-
export type InterpolationUnresolvableField = 'run' | 'env' | 'agent.prompt' | 'agent.model' | 'agent.provider' | 'job.runner' | 'job.outputs' | 'job.
|
|
28
|
+
export type InterpolationUnresolvableField = 'run' | 'env' | 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking' | 'job.runner' | 'job.outputs' | 'job.execution_name' | 'workflow.run_name' | 'step.name' | 'step.working_directory' | 'step.feedback' | 'checkout.project' | 'checkout.connection' | 'checkout.repository' | 'checkout.ref' | 'checkout.path';
|
|
29
29
|
export declare class InterpolationUnresolvableError extends Error {
|
|
30
30
|
readonly definitionId: string;
|
|
31
31
|
readonly field: InterpolationUnresolvableField;
|
|
@@ -75,7 +75,14 @@ export declare class NoFailedJobsError extends Error {
|
|
|
75
75
|
constructor(workflowRunId: string);
|
|
76
76
|
}
|
|
77
77
|
export declare class CheckoutIntentUnresolvedError extends Error {
|
|
78
|
-
constructor(
|
|
78
|
+
constructor(target: {
|
|
79
|
+
kind: 'project' | 'connection';
|
|
80
|
+
value: string;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export declare class CheckoutConfigInvalidError extends Error {
|
|
84
|
+
readonly stepId: string;
|
|
85
|
+
constructor(stepId: string);
|
|
79
86
|
}
|
|
80
87
|
export declare class StepNotFoundError extends Error {
|
|
81
88
|
constructor(stepId: string, jobId: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAElE,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,YAAY,EAAE,MAAM;CAIjC;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;CAMlE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;CAIzC;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;CAIzC;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;CAIzC;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAEnD,QAAQ,CAAC,YAAY,EAAE,MAAM;gBAApB,YAAY,EAAE,MAAM,EAC7B,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS;CAKrC;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,8BAA8B,GACtC,KAAK,GACL,KAAK,GACL,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/core/errors.js
CHANGED
|
@@ -113,14 +113,19 @@ export class NoFailedJobsError extends Error {
|
|
|
113
113
|
this.name = 'NoFailedJobsError';
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
// The
|
|
117
|
-
// there is nothing to check out.
|
|
116
|
+
// The checkout target cannot be resolved, so there is nothing to check out.
|
|
118
117
|
export class CheckoutIntentUnresolvedError extends Error {
|
|
119
|
-
constructor(
|
|
120
|
-
super(`Checkout intent unresolved:
|
|
118
|
+
constructor(target){
|
|
119
|
+
super(`Checkout intent unresolved: ${target.kind} ${target.value} not found`);
|
|
121
120
|
this.name = 'CheckoutIntentUnresolvedError';
|
|
122
121
|
}
|
|
123
122
|
}
|
|
123
|
+
export class CheckoutConfigInvalidError extends Error {
|
|
124
|
+
constructor(stepId){
|
|
125
|
+
super(`Checkout config is invalid for step ${stepId}`), this.stepId = stepId;
|
|
126
|
+
this.name = 'CheckoutConfigInvalidError';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
124
129
|
export class StepNotFoundError extends Error {
|
|
125
130
|
constructor(stepId, jobId){
|
|
126
131
|
super(`Step ${stepId} not found in job ${jobId}`);
|
|
@@ -135,7 +140,7 @@ export class StepNotRunningError extends Error {
|
|
|
135
140
|
}
|
|
136
141
|
// A report whose attempt is ahead of the step's current attempt. The host
|
|
137
142
|
// allocates attempt numbers, so a runner can never report one it was not
|
|
138
|
-
// dispatched
|
|
143
|
+
// dispatched: this is a protocol error, not an idempotent no-op.
|
|
139
144
|
export class StepAttemptAheadError extends Error {
|
|
140
145
|
constructor(stepId, jobId, reportedAttempt, currentAttempt){
|
|
141
146
|
super(`Step ${stepId} in job ${jobId} reported attempt ${reportedAttempt} ahead of current attempt ${currentAttempt}`), this.stepId = stepId, this.jobId = jobId, this.reportedAttempt = reportedAttempt, this.currentAttempt = currentAttempt;
|
package/dist/core/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["import type {JobStatus} from './entities/job.js';\nimport type {WorkflowRunStatus} from './entities/workflow-run.js';\n\nexport class DefinitionNotFoundError extends Error {\n constructor(definitionId: string) {\n super(`Definition not found: ${definitionId}`);\n this.name = 'DefinitionNotFoundError';\n }\n}\n\nexport class ProjectMismatchError extends Error {\n constructor(definitionProjectId: string, requestProjectId: string) {\n super(\n `Definition belongs to project ${definitionProjectId}, but request targets project ${requestProjectId}`,\n );\n this.name = 'ProjectMismatchError';\n }\n}\n\nexport class WorkspaceSuspendedError extends Error {\n constructor(readonly workspaceId: string) {\n super(`Workspace is suspended: ${workspaceId}`);\n this.name = 'WorkspaceSuspendedError';\n }\n}\n\nexport class WorkspaceDeletedError extends Error {\n constructor(readonly workspaceId: string) {\n super(`Workspace is deleted: ${workspaceId}`);\n this.name = 'WorkspaceDeletedError';\n }\n}\n\nexport class WorkspaceNotFoundError extends Error {\n constructor(readonly workspaceId: string) {\n super(`Workspace not found: ${workspaceId}`);\n this.name = 'WorkspaceNotFoundError';\n }\n}\n\nexport class AgentConfigUnresolvableError extends Error {\n constructor(\n readonly definitionId: string,\n options?: ErrorOptions | undefined,\n ) {\n super(`Agent configuration cannot be resolved for definition ${definitionId}`, options);\n this.name = 'AgentConfigUnresolvableError';\n }\n}\n\nexport class AgentIntegrationMaterializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AgentIntegrationMaterializationError';\n }\n}\n\nexport type InterpolationUnresolvableField =\n | 'run'\n | 'env'\n | 'agent.prompt'\n | 'agent.model'\n | 'agent.provider'\n | 'job.runner'\n | 'job.outputs'\n | 'job.name'\n | 'step.name'\n | 'step.feedback';\n\nexport class InterpolationUnresolvableError extends Error {\n readonly field: InterpolationUnresolvableField;\n readonly source: string;\n readonly envKey?: string;\n\n constructor(\n readonly definitionId: string,\n params: {\n readonly field: InterpolationUnresolvableField;\n readonly source: string;\n readonly envKey?: string;\n readonly cause?: unknown;\n },\n ) {\n super(interpolationUnresolvableMessage(definitionId, params), {cause: params.cause});\n this.name = 'InterpolationUnresolvableError';\n this.field = params.field;\n this.source = params.source;\n if (params.envKey !== undefined) this.envKey = params.envKey;\n }\n}\n\nfunction interpolationUnresolvableMessage(\n definitionId: string,\n params: {\n readonly field: InterpolationUnresolvableField;\n readonly source: string;\n readonly envKey?: string;\n },\n): string {\n const envSuffix = params.envKey === undefined ? '' : ` (${params.envKey})`;\n return `Workflow interpolation cannot be resolved for definition ${definitionId}: ${params.field}${envSuffix} uses \\`${params.source}\\`. Use has(x) ? x : '' for optional references.`;\n}\n\n/**\n * True when a `runWorkflow` failure can never succeed on retry: the definition is gone or\n * the subscription points at the wrong project. Callers (e.g. the trigger dispatcher) use this\n * to skip a permanently-broken target instead of retrying it forever. Every other failure is\n * treated as transient so at-least-once delivery can converge.\n */\nexport function isPermanentRunWorkflowError(error: unknown): boolean {\n return (\n error instanceof DefinitionNotFoundError ||\n error instanceof ProjectMismatchError ||\n error instanceof AgentConfigUnresolvableError ||\n error instanceof AgentIntegrationMaterializationError ||\n error instanceof InterpolationUnresolvableError ||\n error instanceof InvalidJobRunnerLabelsError\n );\n}\n\nexport class JobNotFoundError extends Error {\n constructor(jobId: string) {\n super(`Job not found or has no steps: ${jobId}`);\n this.name = 'JobNotFoundError';\n }\n}\n\nexport class InvalidJobRunnerLabelsError extends Error {\n constructor(readonly labels: readonly string[]) {\n super(`Job runner labels are invalid: ${labels.join(', ')}`);\n this.name = 'InvalidJobRunnerLabelsError';\n }\n}\n\n// The job named by a lease is terminal, so it must not exchange its lease for\n// fresh checkout credentials. Server state is the final gate, not the token.\nexport class JobNotActiveError extends Error {\n constructor(\n readonly jobId: string,\n readonly status: JobStatus,\n ) {\n super(`Job ${jobId} is ${status} and cannot mint checkout credentials`);\n this.name = 'JobNotActiveError';\n }\n}\n\nexport class WorkflowRunNotFoundError extends Error {\n constructor(workflowRunId: string) {\n super(`Workflow run not found: ${workflowRunId}`);\n this.name = 'WorkflowRunNotFoundError';\n }\n}\n\nexport class WorkflowRunNotCancellableError extends Error {\n constructor(\n readonly workflowRunId: string,\n readonly status: WorkflowRunStatus,\n ) {\n super(`Workflow run ${workflowRunId} is ${status} and cannot be cancelled`);\n this.name = 'WorkflowRunNotCancellableError';\n }\n}\n\nexport class SourceRunNotFoundError extends Error {\n constructor(workflowRunId: string) {\n super(`Source workflow run not found: ${workflowRunId}`);\n this.name = 'SourceRunNotFoundError';\n }\n}\n\nexport class RunNotTerminalError extends Error {\n constructor(workflowRunId: string) {\n super(`Workflow run is not terminal: ${workflowRunId}`);\n this.name = 'RunNotTerminalError';\n }\n}\n\nexport class NoFailedJobsError extends Error {\n constructor(workflowRunId: string) {\n super(`Workflow run has no failed or cancelled jobs to re-run: ${workflowRunId}`);\n this.name = 'NoFailedJobsError';\n }\n}\n\n// The run's project (and therefore its source repository) cannot be resolved, so\n// there is nothing to check out.\nexport class CheckoutIntentUnresolvedError extends Error {\n constructor(projectId: string) {\n super(`Checkout intent unresolved: project ${projectId} not found`);\n this.name = 'CheckoutIntentUnresolvedError';\n }\n}\n\nexport class StepNotFoundError extends Error {\n constructor(stepId: string, jobId: string) {\n super(`Step ${stepId} not found in job ${jobId}`);\n this.name = 'StepNotFoundError';\n }\n}\n\nexport class StepNotRunningError extends Error {\n constructor(stepId: string, jobId: string) {\n super(`Step ${stepId} in job ${jobId} is not running and cannot accept a result`);\n this.name = 'StepNotRunningError';\n }\n}\n\n// A report whose attempt is ahead of the step's current attempt. The host\n// allocates attempt numbers, so a runner can never report one it was not\n// dispatched — this is a protocol error, not an idempotent no-op.\nexport class StepAttemptAheadError extends Error {\n constructor(\n readonly stepId: string,\n readonly jobId: string,\n readonly reportedAttempt: number,\n readonly currentAttempt: number,\n ) {\n super(\n `Step ${stepId} in job ${jobId} reported attempt ${reportedAttempt} ahead of current attempt ${currentAttempt}`,\n );\n this.name = 'StepAttemptAheadError';\n }\n}\n"],"names":["DefinitionNotFoundError","Error","definitionId","name","ProjectMismatchError","definitionProjectId","requestProjectId","WorkspaceSuspendedError","workspaceId","WorkspaceDeletedError","WorkspaceNotFoundError","AgentConfigUnresolvableError","options","AgentIntegrationMaterializationError","message","InterpolationUnresolvableError","params","interpolationUnresolvableMessage","cause","field","source","envKey","undefined","envSuffix","isPermanentRunWorkflowError","error","InvalidJobRunnerLabelsError","JobNotFoundError","jobId","labels","join","JobNotActiveError","status","WorkflowRunNotFoundError","workflowRunId","WorkflowRunNotCancellableError","SourceRunNotFoundError","RunNotTerminalError","NoFailedJobsError","CheckoutIntentUnresolvedError","projectId","StepNotFoundError","stepId","StepNotRunningError","StepAttemptAheadError","reportedAttempt","currentAttempt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["import type {JobStatus} from './entities/job.js';\nimport type {WorkflowRunStatus} from './entities/workflow-run.js';\n\nexport class DefinitionNotFoundError extends Error {\n constructor(definitionId: string) {\n super(`Definition not found: ${definitionId}`);\n this.name = 'DefinitionNotFoundError';\n }\n}\n\nexport class ProjectMismatchError extends Error {\n constructor(definitionProjectId: string, requestProjectId: string) {\n super(\n `Definition belongs to project ${definitionProjectId}, but request targets project ${requestProjectId}`,\n );\n this.name = 'ProjectMismatchError';\n }\n}\n\nexport class WorkspaceSuspendedError extends Error {\n constructor(readonly workspaceId: string) {\n super(`Workspace is suspended: ${workspaceId}`);\n this.name = 'WorkspaceSuspendedError';\n }\n}\n\nexport class WorkspaceDeletedError extends Error {\n constructor(readonly workspaceId: string) {\n super(`Workspace is deleted: ${workspaceId}`);\n this.name = 'WorkspaceDeletedError';\n }\n}\n\nexport class WorkspaceNotFoundError extends Error {\n constructor(readonly workspaceId: string) {\n super(`Workspace not found: ${workspaceId}`);\n this.name = 'WorkspaceNotFoundError';\n }\n}\n\nexport class AgentConfigUnresolvableError extends Error {\n constructor(\n readonly definitionId: string,\n options?: ErrorOptions | undefined,\n ) {\n super(`Agent configuration cannot be resolved for definition ${definitionId}`, options);\n this.name = 'AgentConfigUnresolvableError';\n }\n}\n\nexport class AgentIntegrationMaterializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AgentIntegrationMaterializationError';\n }\n}\n\nexport type InterpolationUnresolvableField =\n | 'run'\n | 'env'\n | 'agent.prompt'\n | 'agent.model'\n | 'agent.provider'\n | 'agent.thinking'\n | 'job.runner'\n | 'job.outputs'\n | 'job.execution_name'\n | 'workflow.run_name'\n | 'step.name'\n | 'step.working_directory'\n | 'step.feedback'\n | 'checkout.project'\n | 'checkout.connection'\n | 'checkout.repository'\n | 'checkout.ref'\n | 'checkout.path';\n\nexport class InterpolationUnresolvableError extends Error {\n readonly field: InterpolationUnresolvableField;\n readonly source: string;\n readonly envKey?: string;\n\n constructor(\n readonly definitionId: string,\n params: {\n readonly field: InterpolationUnresolvableField;\n readonly source: string;\n readonly envKey?: string;\n readonly cause?: unknown;\n },\n ) {\n super(interpolationUnresolvableMessage(definitionId, params), {cause: params.cause});\n this.name = 'InterpolationUnresolvableError';\n this.field = params.field;\n this.source = params.source;\n if (params.envKey !== undefined) this.envKey = params.envKey;\n }\n}\n\nfunction interpolationUnresolvableMessage(\n definitionId: string,\n params: {\n readonly field: InterpolationUnresolvableField;\n readonly source: string;\n readonly envKey?: string;\n },\n): string {\n const envSuffix = params.envKey === undefined ? '' : ` (${params.envKey})`;\n return `Workflow interpolation cannot be resolved for definition ${definitionId}: ${params.field}${envSuffix} uses \\`${params.source}\\`. Use has(x) ? x : '' for optional references.`;\n}\n\n/**\n * True when a `runWorkflow` failure can never succeed on retry: the definition is gone or\n * the subscription points at the wrong project. Callers (e.g. the trigger dispatcher) use this\n * to skip a permanently-broken target instead of retrying it forever. Every other failure is\n * treated as transient so at-least-once delivery can converge.\n */\nexport function isPermanentRunWorkflowError(error: unknown): boolean {\n return (\n error instanceof DefinitionNotFoundError ||\n error instanceof ProjectMismatchError ||\n error instanceof AgentConfigUnresolvableError ||\n error instanceof AgentIntegrationMaterializationError ||\n error instanceof InterpolationUnresolvableError ||\n error instanceof InvalidJobRunnerLabelsError\n );\n}\n\nexport class JobNotFoundError extends Error {\n constructor(jobId: string) {\n super(`Job not found or has no steps: ${jobId}`);\n this.name = 'JobNotFoundError';\n }\n}\n\nexport class InvalidJobRunnerLabelsError extends Error {\n constructor(readonly labels: readonly string[]) {\n super(`Job runner labels are invalid: ${labels.join(', ')}`);\n this.name = 'InvalidJobRunnerLabelsError';\n }\n}\n\n// The job named by a lease is terminal, so it must not exchange its lease for\n// fresh checkout credentials. Server state is the final gate, not the token.\nexport class JobNotActiveError extends Error {\n constructor(\n readonly jobId: string,\n readonly status: JobStatus,\n ) {\n super(`Job ${jobId} is ${status} and cannot mint checkout credentials`);\n this.name = 'JobNotActiveError';\n }\n}\n\nexport class WorkflowRunNotFoundError extends Error {\n constructor(workflowRunId: string) {\n super(`Workflow run not found: ${workflowRunId}`);\n this.name = 'WorkflowRunNotFoundError';\n }\n}\n\nexport class WorkflowRunNotCancellableError extends Error {\n constructor(\n readonly workflowRunId: string,\n readonly status: WorkflowRunStatus,\n ) {\n super(`Workflow run ${workflowRunId} is ${status} and cannot be cancelled`);\n this.name = 'WorkflowRunNotCancellableError';\n }\n}\n\nexport class SourceRunNotFoundError extends Error {\n constructor(workflowRunId: string) {\n super(`Source workflow run not found: ${workflowRunId}`);\n this.name = 'SourceRunNotFoundError';\n }\n}\n\nexport class RunNotTerminalError extends Error {\n constructor(workflowRunId: string) {\n super(`Workflow run is not terminal: ${workflowRunId}`);\n this.name = 'RunNotTerminalError';\n }\n}\n\nexport class NoFailedJobsError extends Error {\n constructor(workflowRunId: string) {\n super(`Workflow run has no failed or cancelled jobs to re-run: ${workflowRunId}`);\n this.name = 'NoFailedJobsError';\n }\n}\n\n// The checkout target cannot be resolved, so there is nothing to check out.\nexport class CheckoutIntentUnresolvedError extends Error {\n constructor(target: {kind: 'project' | 'connection'; value: string}) {\n super(`Checkout intent unresolved: ${target.kind} ${target.value} not found`);\n this.name = 'CheckoutIntentUnresolvedError';\n }\n}\n\nexport class CheckoutConfigInvalidError extends Error {\n constructor(readonly stepId: string) {\n super(`Checkout config is invalid for step ${stepId}`);\n this.name = 'CheckoutConfigInvalidError';\n }\n}\n\nexport class StepNotFoundError extends Error {\n constructor(stepId: string, jobId: string) {\n super(`Step ${stepId} not found in job ${jobId}`);\n this.name = 'StepNotFoundError';\n }\n}\n\nexport class StepNotRunningError extends Error {\n constructor(stepId: string, jobId: string) {\n super(`Step ${stepId} in job ${jobId} is not running and cannot accept a result`);\n this.name = 'StepNotRunningError';\n }\n}\n\n// A report whose attempt is ahead of the step's current attempt. The host\n// allocates attempt numbers, so a runner can never report one it was not\n// dispatched: this is a protocol error, not an idempotent no-op.\nexport class StepAttemptAheadError extends Error {\n constructor(\n readonly stepId: string,\n readonly jobId: string,\n readonly reportedAttempt: number,\n readonly currentAttempt: number,\n ) {\n super(\n `Step ${stepId} in job ${jobId} reported attempt ${reportedAttempt} ahead of current attempt ${currentAttempt}`,\n );\n this.name = 'StepAttemptAheadError';\n }\n}\n"],"names":["DefinitionNotFoundError","Error","definitionId","name","ProjectMismatchError","definitionProjectId","requestProjectId","WorkspaceSuspendedError","workspaceId","WorkspaceDeletedError","WorkspaceNotFoundError","AgentConfigUnresolvableError","options","AgentIntegrationMaterializationError","message","InterpolationUnresolvableError","params","interpolationUnresolvableMessage","cause","field","source","envKey","undefined","envSuffix","isPermanentRunWorkflowError","error","InvalidJobRunnerLabelsError","JobNotFoundError","jobId","labels","join","JobNotActiveError","status","WorkflowRunNotFoundError","workflowRunId","WorkflowRunNotCancellableError","SourceRunNotFoundError","RunNotTerminalError","NoFailedJobsError","CheckoutIntentUnresolvedError","target","kind","value","CheckoutConfigInvalidError","stepId","StepNotFoundError","StepNotRunningError","StepAttemptAheadError","reportedAttempt","currentAttempt"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAY9F,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;AAkR7C,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mCAAmC,GAC1C,OAAO,CAAC,QAAQ,CAAC,CAInB;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;AA6GD,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,6 +1,6 @@
|
|
|
1
1
|
import { coerceStepOutputs, evaluatePlannedPredicateAtSite } from '@shipfox/expression';
|
|
2
2
|
import { withTransaction } from '#db/db.js';
|
|
3
|
-
import { countStepAttempts, dispatchStepWithCompletedConfig, finishStepAttempt, getDirectDependencyJobContexts, getJobExecutionById, getLatestJobExecutionByJobId, getStepAttemptsByJobExecutionId, getStepsByJobExecutionIdForUpdate, insertRunningStepAttempt, markStepRunning, markStepSkipped, settleJobFailed, writeJobStepsSettledOutbox } from '#db/workflow-runs.js';
|
|
3
|
+
import { countStepAttempts, dispatchStepWithCompletedConfig, finishStepAttempt, getDirectDependencyJobContexts, getJobExecutionById, getLatestJobExecutionByJobId, getStepAttemptsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowContextForJob, insertRunningStepAttempt, markStepRunning, markStepSkipped, settleJobFailed, writeJobStepsSettledOutbox } from '#db/workflow-runs.js';
|
|
4
4
|
import { recordWorkflowJobExecutionStepsSettled, recordWorkflowStepRestartEnqueued } from '#metrics/instance.js';
|
|
5
5
|
import { createAgentDefaultsResolver } from './agent-defaults.js';
|
|
6
6
|
import { defaultStepConditionTrace, explicitConditionTrace } from './condition-trace.js';
|
|
@@ -36,17 +36,19 @@ async function nextStepForJobExecutionInTransaction(jobExecutionId, tx, agent) {
|
|
|
36
36
|
if (!jobExecution) throw new JobNotFoundError(jobExecutionId);
|
|
37
37
|
const attempts = await getStepAttemptsByJobExecutionId(jobExecutionId, tx);
|
|
38
38
|
const jobs = await getDirectDependencyJobContexts(jobExecution.jobId, tx);
|
|
39
|
+
const workflowContext = await getWorkflowContextForJob(jobExecution.jobId, tx);
|
|
39
40
|
return resolveNextPendingStep({
|
|
40
41
|
jobExecutionId,
|
|
41
42
|
steps,
|
|
42
43
|
jobExecution,
|
|
43
44
|
attempts,
|
|
44
45
|
jobs,
|
|
46
|
+
vars: workflowContext.vars ?? undefined,
|
|
45
47
|
tx,
|
|
46
48
|
agent
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
|
-
async function resolveNextPendingStep({ jobExecutionId, steps, jobExecution, attempts, jobs, tx, agent }) {
|
|
51
|
+
async function resolveNextPendingStep({ jobExecutionId, steps, jobExecution, attempts, jobs, vars, tx, agent }) {
|
|
50
52
|
let skippedAny = false;
|
|
51
53
|
let currentSteps = steps;
|
|
52
54
|
while(true){
|
|
@@ -71,7 +73,8 @@ async function resolveNextPendingStep({ jobExecutionId, steps, jobExecution, att
|
|
|
71
73
|
attempts,
|
|
72
74
|
targetStepId: pending.id,
|
|
73
75
|
jobExecution,
|
|
74
|
-
jobs
|
|
76
|
+
jobs,
|
|
77
|
+
vars
|
|
75
78
|
});
|
|
76
79
|
const condition = evaluateStepCondition({
|
|
77
80
|
step: pending,
|
|
@@ -304,11 +307,12 @@ async function recordStepResultInTransaction(params, tx) {
|
|
|
304
307
|
exitCode: result.exitCode
|
|
305
308
|
};
|
|
306
309
|
}
|
|
307
|
-
// Evaluate the gate (if any) at the service boundary
|
|
308
|
-
// engine runs
|
|
310
|
+
// Evaluate the gate (if any) at the service boundary. This is the only place
|
|
311
|
+
// the CEL engine runs. Pass the precomputed outcome into the pure decision.
|
|
309
312
|
const shouldEvaluateGate = outputCoercion.kind !== 'failed';
|
|
310
313
|
const gate = shouldEvaluateGate ? readStepGate(target.config) : undefined;
|
|
311
|
-
const
|
|
314
|
+
const vars = gate === undefined ? undefined : (await getWorkflowContextForJob(jobExecution.jobId, tx)).vars ?? undefined;
|
|
315
|
+
const gateOutcome = shouldEvaluateGate ? evaluateGate(gate, result, vars) : {
|
|
312
316
|
kind: 'no-gate'
|
|
313
317
|
};
|
|
314
318
|
const hasRestartPolicy = gate?.onFailure?.restartFrom !== undefined;
|
|
@@ -332,7 +336,8 @@ async function recordStepResultInTransaction(params, tx) {
|
|
|
332
336
|
decision,
|
|
333
337
|
gate,
|
|
334
338
|
result,
|
|
335
|
-
definitionId: jobExecution.jobId
|
|
339
|
+
definitionId: jobExecution.jobId,
|
|
340
|
+
vars
|
|
336
341
|
});
|
|
337
342
|
return applyStepTransition(resolvedDecision, {
|
|
338
343
|
jobId: jobExecution.jobId,
|
|
@@ -397,7 +402,8 @@ function resolveRestartFeedback(params) {
|
|
|
397
402
|
feedback: evaluateGateFeedback({
|
|
398
403
|
gate: params.gate,
|
|
399
404
|
result: params.result,
|
|
400
|
-
definitionId: params.definitionId
|
|
405
|
+
definitionId: params.definitionId,
|
|
406
|
+
vars: params.vars
|
|
401
407
|
})
|
|
402
408
|
};
|
|
403
409
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
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 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 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 jobExecutionId: string;\n agent?: AgentInterModuleClient | undefined;\n}\n\nexport function nextStepForLeasedJobExecution(\n params: NextStepForLeasedJobExecutionParams,\n): Promise<NextStep> {\n return withTransaction((tx) =>\n 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","markStepRunning","markStepSkipped","settleJobFailed","writeJobStepsSettledOutbox","recordWorkflowJobExecutionStepsSettled","recordWorkflowStepRestartEnqueued","createAgentDefaultsResolver","defaultStepConditionTrace","explicitConditionTrace","AgentConfigUnresolvableError","InterpolationUnresolvableError","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","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 getWorkflowContextForJob,\n insertRunningStepAttempt,\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 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 vars: Record<string, string> | undefined;\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 const workflowContext = await getWorkflowContextForJob(jobExecution.jobId, tx);\n\n return resolveNextPendingStep({\n jobExecutionId,\n steps,\n jobExecution,\n attempts,\n jobs,\n vars: workflowContext.vars ?? undefined,\n tx,\n agent,\n });\n}\n\nasync function resolveNextPendingStep({\n jobExecutionId,\n steps,\n jobExecution,\n attempts,\n jobs,\n vars,\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 vars,\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 jobExecutionId: string;\n agent?: AgentInterModuleClient | undefined;\n}\n\nexport function nextStepForLeasedJobExecution(\n params: NextStepForLeasedJobExecutionParams,\n): Promise<NextStep> {\n return withTransaction((tx) =>\n 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. This is the only place\n // the CEL engine runs. Pass the precomputed outcome into the pure decision.\n const shouldEvaluateGate = outputCoercion.kind !== 'failed';\n const gate = shouldEvaluateGate ? readStepGate(target.config) : undefined;\n const vars =\n gate === undefined\n ? undefined\n : ((await getWorkflowContextForJob(jobExecution.jobId, tx)).vars ?? undefined);\n const gateOutcome = shouldEvaluateGate\n ? evaluateGate(gate, result, vars)\n : {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 vars,\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 vars?: Record<string, string> | undefined;\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 vars: params.vars,\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","getWorkflowContextForJob","insertRunningStepAttempt","markStepRunning","markStepSkipped","settleJobFailed","writeJobStepsSettledOutbox","recordWorkflowJobExecutionStepsSettled","recordWorkflowStepRestartEnqueued","createAgentDefaultsResolver","defaultStepConditionTrace","explicitConditionTrace","AgentConfigUnresolvableError","InterpolationUnresolvableError","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","workflowContext","resolveNextPendingStep","vars","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","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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"}
|
|
@@ -24,6 +24,7 @@ export interface DecideJobActivationInput {
|
|
|
24
24
|
job: Job;
|
|
25
25
|
condition?: WorkflowExpression | undefined;
|
|
26
26
|
dependencies: readonly JobContextInput[];
|
|
27
|
+
vars?: Record<string, string> | undefined;
|
|
27
28
|
}
|
|
28
29
|
export declare function decideJobActivation(input: DecideJobActivationInput): JobActivationDecision;
|
|
29
30
|
//# sourceMappingURL=decide-job-activation.d.ts.map
|