@shipfox/api-workflows 2.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 +2 -0
- package/.turbo/turbo-type$colon$emit.log +1 -0
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +311 -0
- package/LICENSE +21 -0
- package/dist/core/agent-tool-capability-warning.d.ts +7 -0
- package/dist/core/agent-tool-capability-warning.d.ts.map +1 -0
- package/dist/core/agent-tool-capability-warning.js +149 -0
- package/dist/core/agent-tool-capability-warning.js.map +1 -0
- package/dist/core/agent-tools.d.ts +51 -0
- package/dist/core/agent-tools.d.ts.map +1 -0
- package/dist/core/agent-tools.js +296 -0
- package/dist/core/agent-tools.js.map +1 -0
- package/dist/core/checkout.d.ts +29 -0
- package/dist/core/checkout.d.ts.map +1 -0
- package/dist/core/checkout.js +42 -0
- package/dist/core/checkout.js.map +1 -0
- package/dist/core/condition-trace.d.ts +13 -0
- package/dist/core/condition-trace.d.ts.map +1 -0
- package/dist/core/condition-trace.js +51 -0
- package/dist/core/condition-trace.js.map +1 -0
- package/dist/core/entities/index.d.ts +5 -0
- package/dist/core/entities/index.d.ts.map +1 -0
- package/dist/core/entities/index.js +3 -0
- package/dist/core/entities/index.js.map +1 -0
- package/dist/core/entities/job-execution.d.ts +30 -0
- package/dist/core/entities/job-execution.d.ts.map +1 -0
- package/dist/core/entities/job-execution.js +3 -0
- package/dist/core/entities/job-execution.js.map +1 -0
- package/dist/core/entities/job-listener-event.d.ts +15 -0
- package/dist/core/entities/job-listener-event.d.ts.map +1 -0
- package/dist/core/entities/job-listener-event.js +3 -0
- package/dist/core/entities/job-listener-event.js.map +1 -0
- package/dist/core/entities/job.d.ts +54 -0
- package/dist/core/entities/job.d.ts.map +1 -0
- package/dist/core/entities/job.js +29 -0
- package/dist/core/entities/job.js.map +1 -0
- package/dist/core/entities/step.d.ts +86 -0
- package/dist/core/entities/step.d.ts.map +1 -0
- package/dist/core/entities/step.js +12 -0
- package/dist/core/entities/step.js.map +1 -0
- package/dist/core/entities/workflow-run-attempt.d.ts +20 -0
- package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -0
- package/dist/core/entities/workflow-run-attempt.js +3 -0
- package/dist/core/entities/workflow-run-attempt.js.map +1 -0
- package/dist/core/entities/workflow-run.d.ts +66 -0
- package/dist/core/entities/workflow-run.d.ts.map +1 -0
- package/dist/core/entities/workflow-run.js +10 -0
- package/dist/core/entities/workflow-run.js.map +1 -0
- package/dist/core/errors.d.ts +85 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +134 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/job-execution-outcome.d.ts +29 -0
- package/dist/core/job-execution-outcome.d.ts.map +1 -0
- package/dist/core/job-execution-outcome.js +31 -0
- package/dist/core/job-execution-outcome.js.map +1 -0
- package/dist/core/job-execution.d.ts +37 -0
- package/dist/core/job-execution.d.ts.map +1 -0
- package/dist/core/job-execution.js +425 -0
- package/dist/core/job-execution.js.map +1 -0
- package/dist/core/job-transition/decide-job-activation.d.ts +29 -0
- package/dist/core/job-transition/decide-job-activation.d.ts.map +1 -0
- package/dist/core/job-transition/decide-job-activation.js +51 -0
- package/dist/core/job-transition/decide-job-activation.js.map +1 -0
- package/dist/core/job-transition/derive-job-execution-outputs.d.ts +18 -0
- package/dist/core/job-transition/derive-job-execution-outputs.d.ts.map +1 -0
- package/dist/core/job-transition/derive-job-execution-outputs.js +23 -0
- package/dist/core/job-transition/derive-job-execution-outputs.js.map +1 -0
- package/dist/core/job-transition/derive-job-success.d.ts +16 -0
- package/dist/core/job-transition/derive-job-success.d.ts.map +1 -0
- package/dist/core/job-transition/derive-job-success.js +47 -0
- package/dist/core/job-transition/derive-job-success.js.map +1 -0
- package/dist/core/job-transition/index.d.ts +5 -0
- package/dist/core/job-transition/index.d.ts.map +1 -0
- package/dist/core/job-transition/index.js +6 -0
- package/dist/core/job-transition/index.js.map +1 -0
- package/dist/core/job-transition/runtime-completion-status-for-job.d.ts +4 -0
- package/dist/core/job-transition/runtime-completion-status-for-job.d.ts.map +1 -0
- package/dist/core/job-transition/runtime-completion-status-for-job.js +8 -0
- package/dist/core/job-transition/runtime-completion-status-for-job.js.map +1 -0
- package/dist/core/listener-execution-materialization.d.ts +30 -0
- package/dist/core/listener-execution-materialization.d.ts.map +1 -0
- package/dist/core/listener-execution-materialization.js +87 -0
- package/dist/core/listener-execution-materialization.js.map +1 -0
- package/dist/core/run-workflow.d.ts +11 -0
- package/dist/core/run-workflow.d.ts.map +1 -0
- package/dist/core/run-workflow.js +28 -0
- package/dist/core/run-workflow.js.map +1 -0
- package/dist/core/source-control.d.ts +5 -0
- package/dist/core/source-control.d.ts.map +1 -0
- package/dist/core/source-control.js +19 -0
- package/dist/core/source-control.js.map +1 -0
- package/dist/core/step-config/agent.d.ts +49 -0
- package/dist/core/step-config/agent.d.ts.map +1 -0
- package/dist/core/step-config/agent.js +337 -0
- package/dist/core/step-config/agent.js.map +1 -0
- package/dist/core/step-config/assemble-run-context.d.ts +94 -0
- package/dist/core/step-config/assemble-run-context.d.ts.map +1 -0
- package/dist/core/step-config/assemble-run-context.js +393 -0
- package/dist/core/step-config/assemble-run-context.js.map +1 -0
- package/dist/core/step-config/complete-step-dispatch-config.d.ts +13 -0
- package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -0
- package/dist/core/step-config/complete-step-dispatch-config.js +38 -0
- package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -0
- package/dist/core/step-config/fields.d.ts +38 -0
- package/dist/core/step-config/fields.d.ts.map +1 -0
- package/dist/core/step-config/fields.js +72 -0
- package/dist/core/step-config/fields.js.map +1 -0
- package/dist/core/step-config/index.d.ts +8 -0
- package/dist/core/step-config/index.d.ts.map +1 -0
- package/dist/core/step-config/index.js +7 -0
- package/dist/core/step-config/index.js.map +1 -0
- package/dist/core/step-config/materialize-job-execution-steps.d.ts +35 -0
- package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -0
- package/dist/core/step-config/materialize-job-execution-steps.js +92 -0
- package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -0
- package/dist/core/step-config/materialize-workflow-model.d.ts +42 -0
- package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -0
- package/dist/core/step-config/materialize-workflow-model.js +96 -0
- package/dist/core/step-config/materialize-workflow-model.js.map +1 -0
- package/dist/core/step-config/resolve-job-execution-name.d.ts +18 -0
- package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -0
- package/dist/core/step-config/resolve-job-execution-name.js +36 -0
- package/dist/core/step-config/resolve-job-execution-name.js.map +1 -0
- package/dist/core/step-config/resolve-step-config.d.ts +33 -0
- package/dist/core/step-config/resolve-step-config.d.ts.map +1 -0
- package/dist/core/step-config/resolve-step-config.js +164 -0
- package/dist/core/step-config/resolve-step-config.js.map +1 -0
- package/dist/core/step-config/run.d.ts +39 -0
- package/dist/core/step-config/run.d.ts.map +1 -0
- package/dist/core/step-config/run.js +360 -0
- package/dist/core/step-config/run.js.map +1 -0
- package/dist/core/step-config/workflow-evaluation-context.d.ts +6 -0
- package/dist/core/step-config/workflow-evaluation-context.d.ts.map +1 -0
- package/dist/core/step-config/workflow-evaluation-context.js +3 -0
- package/dist/core/step-config/workflow-evaluation-context.js.map +1 -0
- package/dist/core/step-transition/apply-step-transition.d.ts +26 -0
- package/dist/core/step-transition/apply-step-transition.d.ts.map +1 -0
- package/dist/core/step-transition/apply-step-transition.js +141 -0
- package/dist/core/step-transition/apply-step-transition.js.map +1 -0
- package/dist/core/step-transition/decide-step-transition.d.ts +71 -0
- package/dist/core/step-transition/decide-step-transition.d.ts.map +1 -0
- package/dist/core/step-transition/decide-step-transition.js +110 -0
- package/dist/core/step-transition/decide-step-transition.js.map +1 -0
- package/dist/core/step-transition/evaluate-gate.d.ts +28 -0
- package/dist/core/step-transition/evaluate-gate.d.ts.map +1 -0
- package/dist/core/step-transition/evaluate-gate.js +159 -0
- package/dist/core/step-transition/evaluate-gate.js.map +1 -0
- package/dist/core/step-transition/read-step-outputs.d.ts +3 -0
- package/dist/core/step-transition/read-step-outputs.d.ts.map +1 -0
- package/dist/core/step-transition/read-step-outputs.js +24 -0
- package/dist/core/step-transition/read-step-outputs.js.map +1 -0
- package/dist/core/workflow-run-creation.d.ts +43 -0
- package/dist/core/workflow-run-creation.d.ts.map +1 -0
- package/dist/core/workflow-run-creation.js +80 -0
- package/dist/core/workflow-run-creation.js.map +1 -0
- package/dist/core/workflow-scheduling/index.d.ts +5 -0
- package/dist/core/workflow-scheduling/index.d.ts.map +1 -0
- package/dist/core/workflow-scheduling/index.js +4 -0
- package/dist/core/workflow-scheduling/index.js.map +1 -0
- package/dist/core/workflow-scheduling/run-progress.d.ts +20 -0
- package/dist/core/workflow-scheduling/run-progress.d.ts.map +1 -0
- package/dist/core/workflow-scheduling/run-progress.js +40 -0
- package/dist/core/workflow-scheduling/run-progress.js.map +1 -0
- package/dist/core/workflow-scheduling/runtime-dag.d.ts +10 -0
- package/dist/core/workflow-scheduling/runtime-dag.d.ts.map +1 -0
- package/dist/core/workflow-scheduling/runtime-dag.js +3 -0
- package/dist/core/workflow-scheduling/runtime-dag.js.map +1 -0
- package/dist/core/workflow-scheduling/runtime-scheduling-command.d.ts +16 -0
- package/dist/core/workflow-scheduling/runtime-scheduling-command.d.ts.map +1 -0
- package/dist/core/workflow-scheduling/runtime-scheduling-command.js +3 -0
- package/dist/core/workflow-scheduling/runtime-scheduling-command.js.map +1 -0
- package/dist/core/workflow-scheduling/schedule-runtime-dag.d.ts +9 -0
- package/dist/core/workflow-scheduling/schedule-runtime-dag.d.ts.map +1 -0
- package/dist/core/workflow-scheduling/schedule-runtime-dag.js +72 -0
- package/dist/core/workflow-scheduling/schedule-runtime-dag.js.map +1 -0
- package/dist/db/db.d.ts +4959 -0
- package/dist/db/db.d.ts.map +1 -0
- package/dist/db/db.js +37 -0
- package/dist/db/db.js.map +1 -0
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +10 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/job-listener-events.d.ts +18 -0
- package/dist/db/job-listener-events.d.ts.map +1 -0
- package/dist/db/job-listener-events.js +59 -0
- package/dist/db/job-listener-events.js.map +1 -0
- package/dist/db/job-listeners.d.ts +55 -0
- package/dist/db/job-listeners.d.ts.map +1 -0
- package/dist/db/job-listeners.js +358 -0
- package/dist/db/job-listeners.js.map +1 -0
- package/dist/db/outbox-writes.d.ts +12 -0
- package/dist/db/outbox-writes.d.ts.map +1 -0
- package/dist/db/outbox-writes.js +20 -0
- package/dist/db/outbox-writes.js.map +1 -0
- package/dist/db/runner-lease-table.d.ts +469 -0
- package/dist/db/runner-lease-table.d.ts.map +1 -0
- package/dist/db/runner-lease-table.js +42 -0
- package/dist/db/runner-lease-table.js.map +1 -0
- package/dist/db/schema/common.d.ts +2 -0
- package/dist/db/schema/common.d.ts.map +1 -0
- package/dist/db/schema/common.js +4 -0
- package/dist/db/schema/common.js.map +1 -0
- package/dist/db/schema/job-executions.d.ts +311 -0
- package/dist/db/schema/job-executions.d.ts.map +1 -0
- package/dist/db/schema/job-executions.js +76 -0
- package/dist/db/schema/job-executions.js.map +1 -0
- package/dist/db/schema/job-listener-events.d.ts +200 -0
- package/dist/db/schema/job-listener-events.d.ts.map +1 -0
- package/dist/db/schema/job-listener-events.js +50 -0
- package/dist/db/schema/job-listener-events.js.map +1 -0
- package/dist/db/schema/jobs.d.ts +542 -0
- package/dist/db/schema/jobs.d.ts.map +1 -0
- package/dist/db/schema/jobs.js +121 -0
- package/dist/db/schema/jobs.js.map +1 -0
- package/dist/db/schema/outbox.d.ts +195 -0
- package/dist/db/schema/outbox.d.ts.map +1 -0
- package/dist/db/schema/outbox.js +5 -0
- package/dist/db/schema/outbox.js.map +1 -0
- package/dist/db/schema/step-attempts.d.ts +330 -0
- package/dist/db/schema/step-attempts.d.ts.map +1 -0
- package/dist/db/schema/step-attempts.js +80 -0
- package/dist/db/schema/step-attempts.js.map +1 -0
- package/dist/db/schema/steps.d.ts +352 -0
- package/dist/db/schema/steps.d.ts.map +1 -0
- package/dist/db/schema/steps.js +80 -0
- package/dist/db/schema/steps.js.map +1 -0
- package/dist/db/schema/workflow-run-attempts.d.ts +239 -0
- package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -0
- package/dist/db/schema/workflow-run-attempts.js +53 -0
- package/dist/db/schema/workflow-run-attempts.js.map +1 -0
- package/dist/db/schema/workflow-runs.d.ts +360 -0
- package/dist/db/schema/workflow-runs.d.ts.map +1 -0
- package/dist/db/schema/workflow-runs.js +85 -0
- package/dist/db/schema/workflow-runs.js.map +1 -0
- package/dist/db/workflow-runs/job-executions.d.ts +49 -0
- package/dist/db/workflow-runs/job-executions.d.ts.map +1 -0
- package/dist/db/workflow-runs/job-executions.js +271 -0
- package/dist/db/workflow-runs/job-executions.js.map +1 -0
- package/dist/db/workflow-runs/jobs.d.ts +60 -0
- package/dist/db/workflow-runs/jobs.d.ts.map +1 -0
- package/dist/db/workflow-runs/jobs.js +288 -0
- package/dist/db/workflow-runs/jobs.js.map +1 -0
- package/dist/db/workflow-runs/outbox.d.ts +20 -0
- package/dist/db/workflow-runs/outbox.d.ts.map +1 -0
- package/dist/db/workflow-runs/outbox.js +68 -0
- package/dist/db/workflow-runs/outbox.js.map +1 -0
- package/dist/db/workflow-runs/queries.d.ts +71 -0
- package/dist/db/workflow-runs/queries.d.ts.map +1 -0
- package/dist/db/workflow-runs/queries.js +253 -0
- package/dist/db/workflow-runs/queries.js.map +1 -0
- package/dist/db/workflow-runs/run-create.d.ts +32 -0
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -0
- package/dist/db/workflow-runs/run-create.js +288 -0
- package/dist/db/workflow-runs/run-create.js.map +1 -0
- package/dist/db/workflow-runs/run-graph.d.ts +27 -0
- package/dist/db/workflow-runs/run-graph.d.ts.map +1 -0
- package/dist/db/workflow-runs/run-graph.js +63 -0
- package/dist/db/workflow-runs/run-graph.js.map +1 -0
- package/dist/db/workflow-runs/run-rerun.d.ts +8 -0
- package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -0
- package/dist/db/workflow-runs/run-rerun.js +207 -0
- package/dist/db/workflow-runs/run-rerun.js.map +1 -0
- package/dist/db/workflow-runs/run-status.d.ts +24 -0
- package/dist/db/workflow-runs/run-status.d.ts.map +1 -0
- package/dist/db/workflow-runs/run-status.js +249 -0
- package/dist/db/workflow-runs/run-status.js.map +1 -0
- package/dist/db/workflow-runs/runs.d.ts +7 -0
- package/dist/db/workflow-runs/runs.d.ts.map +1 -0
- package/dist/db/workflow-runs/runs.js +5 -0
- package/dist/db/workflow-runs/runs.js.map +1 -0
- package/dist/db/workflow-runs/shared.d.ts +24 -0
- package/dist/db/workflow-runs/shared.d.ts.map +1 -0
- package/dist/db/workflow-runs/shared.js +50 -0
- package/dist/db/workflow-runs/shared.js.map +1 -0
- package/dist/db/workflow-runs/steps.d.ts +83 -0
- package/dist/db/workflow-runs/steps.d.ts.map +1 -0
- package/dist/db/workflow-runs/steps.js +246 -0
- package/dist/db/workflow-runs/steps.js.map +1 -0
- package/dist/db/workflow-runs.d.ts +12 -0
- package/dist/db/workflow-runs.d.ts.map +1 -0
- package/dist/db/workflow-runs.js +8 -0
- package/dist/db/workflow-runs.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +3 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/instance.d.ts +20 -0
- package/dist/metrics/instance.d.ts.map +1 -0
- package/dist/metrics/instance.js +127 -0
- package/dist/metrics/instance.js.map +1 -0
- package/dist/metrics/service.d.ts +2 -0
- package/dist/metrics/service.d.ts.map +1 -0
- package/dist/metrics/service.js +30 -0
- package/dist/metrics/service.js.map +1 -0
- package/dist/presentation/dto/checkout-token.d.ts +6 -0
- package/dist/presentation/dto/checkout-token.d.ts.map +1 -0
- package/dist/presentation/dto/checkout-token.js +74 -0
- package/dist/presentation/dto/checkout-token.js.map +1 -0
- package/dist/presentation/dto/index.d.ts +4 -0
- package/dist/presentation/dto/index.d.ts.map +1 -0
- package/dist/presentation/dto/index.js +5 -0
- package/dist/presentation/dto/index.js.map +1 -0
- package/dist/presentation/dto/job.d.ts +6 -0
- package/dist/presentation/dto/job.d.ts.map +1 -0
- package/dist/presentation/dto/job.js +59 -0
- package/dist/presentation/dto/job.js.map +1 -0
- package/dist/presentation/dto/step.d.ts +6 -0
- package/dist/presentation/dto/step.d.ts.map +1 -0
- package/dist/presentation/dto/step.js +162 -0
- package/dist/presentation/dto/step.js.map +1 -0
- package/dist/presentation/dto/workflow-run.d.ts +6 -0
- package/dist/presentation/dto/workflow-run.d.ts.map +1 -0
- package/dist/presentation/dto/workflow-run.js +35 -0
- package/dist/presentation/dto/workflow-run.js.map +1 -0
- package/dist/presentation/index.d.ts +3 -0
- package/dist/presentation/index.d.ts.map +1 -0
- package/dist/presentation/index.js +4 -0
- package/dist/presentation/index.js.map +1 -0
- package/dist/presentation/routes/agent-runtime-config.d.ts +2 -0
- package/dist/presentation/routes/agent-runtime-config.d.ts.map +1 -0
- package/dist/presentation/routes/agent-runtime-config.js +71 -0
- package/dist/presentation/routes/agent-runtime-config.js.map +1 -0
- package/dist/presentation/routes/cancel-run.d.ts +2 -0
- package/dist/presentation/routes/cancel-run.d.ts.map +1 -0
- package/dist/presentation/routes/cancel-run.js +46 -0
- package/dist/presentation/routes/cancel-run.js.map +1 -0
- package/dist/presentation/routes/checkout-token.d.ts +2 -0
- package/dist/presentation/routes/checkout-token.d.ts.map +1 -0
- package/dist/presentation/routes/checkout-token.js +64 -0
- package/dist/presentation/routes/checkout-token.js.map +1 -0
- package/dist/presentation/routes/get-run-aggregates.d.ts +2 -0
- package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -0
- package/dist/presentation/routes/get-run-aggregates.js +60 -0
- package/dist/presentation/routes/get-run-aggregates.js.map +1 -0
- package/dist/presentation/routes/get-run.d.ts +2 -0
- package/dist/presentation/routes/get-run.d.ts.map +1 -0
- package/dist/presentation/routes/get-run.js +60 -0
- package/dist/presentation/routes/get-run.js.map +1 -0
- package/dist/presentation/routes/get-step-secrets.d.ts +2 -0
- package/dist/presentation/routes/get-step-secrets.d.ts.map +1 -0
- package/dist/presentation/routes/get-step-secrets.js +115 -0
- package/dist/presentation/routes/get-step-secrets.js.map +1 -0
- package/dist/presentation/routes/index.d.ts +4 -0
- package/dist/presentation/routes/index.d.ts.map +1 -0
- package/dist/presentation/routes/index.js +41 -0
- package/dist/presentation/routes/index.js.map +1 -0
- package/dist/presentation/routes/leased-step.d.ts +14 -0
- package/dist/presentation/routes/leased-step.d.ts.map +1 -0
- package/dist/presentation/routes/leased-step.js +50 -0
- package/dist/presentation/routes/leased-step.js.map +1 -0
- package/dist/presentation/routes/list-run-attempts.d.ts +2 -0
- package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -0
- package/dist/presentation/routes/list-run-attempts.js +35 -0
- package/dist/presentation/routes/list-run-attempts.js.map +1 -0
- package/dist/presentation/routes/list-runs.d.ts +2 -0
- package/dist/presentation/routes/list-runs.d.ts.map +1 -0
- package/dist/presentation/routes/list-runs.js +70 -0
- package/dist/presentation/routes/list-runs.js.map +1 -0
- package/dist/presentation/routes/next-step.d.ts +2 -0
- package/dist/presentation/routes/next-step.d.ts.map +1 -0
- package/dist/presentation/routes/next-step.js +65 -0
- package/dist/presentation/routes/next-step.js.map +1 -0
- package/dist/presentation/routes/report-step.d.ts +2 -0
- package/dist/presentation/routes/report-step.d.ts.map +1 -0
- package/dist/presentation/routes/report-step.js +73 -0
- package/dist/presentation/routes/report-step.js.map +1 -0
- package/dist/presentation/routes/require-accessible-run.d.ts +7 -0
- package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -0
- package/dist/presentation/routes/require-accessible-run.js +25 -0
- package/dist/presentation/routes/require-accessible-run.js.map +1 -0
- package/dist/presentation/routes/rerun-run.d.ts +2 -0
- package/dist/presentation/routes/rerun-run.d.ts.map +1 -0
- package/dist/presentation/routes/rerun-run.js +56 -0
- package/dist/presentation/routes/rerun-run.js.map +1 -0
- package/dist/presentation/subscribers/index.d.ts +8 -0
- package/dist/presentation/subscribers/index.d.ts.map +1 -0
- package/dist/presentation/subscribers/index.js +9 -0
- package/dist/presentation/subscribers/index.js.map +1 -0
- package/dist/presentation/subscribers/on-job-event-delivered.d.ts +3 -0
- package/dist/presentation/subscribers/on-job-event-delivered.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-job-event-delivered.js +24 -0
- package/dist/presentation/subscribers/on-job-event-delivered.js.map +1 -0
- package/dist/presentation/subscribers/on-job-steps-settled.d.ts +3 -0
- package/dist/presentation/subscribers/on-job-steps-settled.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-job-steps-settled.js +36 -0
- package/dist/presentation/subscribers/on-job-steps-settled.js.map +1 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.d.ts +3 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.js +20 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.js.map +1 -0
- package/dist/presentation/subscribers/on-runner-job-lease-expired.d.ts +3 -0
- package/dist/presentation/subscribers/on-runner-job-lease-expired.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-runner-job-lease-expired.js +35 -0
- package/dist/presentation/subscribers/on-runner-job-lease-expired.js.map +1 -0
- package/dist/presentation/subscribers/on-runner-job-queued.d.ts +3 -0
- package/dist/presentation/subscribers/on-runner-job-queued.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-runner-job-queued.js +20 -0
- package/dist/presentation/subscribers/on-runner-job-queued.js.map +1 -0
- package/dist/presentation/subscribers/on-workflow-run-attempt-created.d.ts +3 -0
- package/dist/presentation/subscribers/on-workflow-run-attempt-created.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-workflow-run-attempt-created.js +35 -0
- package/dist/presentation/subscribers/on-workflow-run-attempt-created.js.map +1 -0
- package/dist/presentation/subscribers/on-workflow-run-cancelled.d.ts +3 -0
- package/dist/presentation/subscribers/on-workflow-run-cancelled.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-workflow-run-cancelled.js +25 -0
- package/dist/presentation/subscribers/on-workflow-run-cancelled.js.map +1 -0
- package/dist/temporal/activities/index.d.ts +23 -0
- package/dist/temporal/activities/index.d.ts.map +1 -0
- package/dist/temporal/activities/index.js +26 -0
- package/dist/temporal/activities/index.js.map +1 -0
- package/dist/temporal/activities/orchestration-activities.d.ts +130 -0
- package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -0
- package/dist/temporal/activities/orchestration-activities.js +188 -0
- package/dist/temporal/activities/orchestration-activities.js.map +1 -0
- package/dist/temporal/constants.d.ts +7 -0
- package/dist/temporal/constants.d.ts.map +1 -0
- package/dist/temporal/constants.js +8 -0
- package/dist/temporal/constants.js.map +1 -0
- package/dist/temporal/index.d.ts +3 -0
- package/dist/temporal/index.d.ts.map +1 -0
- package/dist/temporal/index.js +4 -0
- package/dist/temporal/index.js.map +1 -0
- package/dist/temporal/workflow-not-found.d.ts +2 -0
- package/dist/temporal/workflow-not-found.d.ts.map +1 -0
- package/dist/temporal/workflow-not-found.js +10 -0
- package/dist/temporal/workflow-not-found.js.map +1 -0
- package/dist/temporal/workflows/deadline.d.ts +3 -0
- package/dist/temporal/workflows/deadline.d.ts.map +1 -0
- package/dist/temporal/workflows/deadline.js +8 -0
- package/dist/temporal/workflows/deadline.js.map +1 -0
- package/dist/temporal/workflows/index.d.ts +4 -0
- package/dist/temporal/workflows/index.d.ts.map +1 -0
- package/dist/temporal/workflows/index.js +5 -0
- package/dist/temporal/workflows/index.js.map +1 -0
- package/dist/temporal/workflows/job-execution-orchestration.d.ts +27 -0
- package/dist/temporal/workflows/job-execution-orchestration.d.ts.map +1 -0
- package/dist/temporal/workflows/job-execution-orchestration.js +265 -0
- package/dist/temporal/workflows/job-execution-orchestration.js.map +1 -0
- package/dist/temporal/workflows/job-listener-orchestration.d.ts +40 -0
- package/dist/temporal/workflows/job-listener-orchestration.d.ts.map +1 -0
- package/dist/temporal/workflows/job-listener-orchestration.js +332 -0
- package/dist/temporal/workflows/job-listener-orchestration.js.map +1 -0
- package/dist/temporal/workflows/run-orchestration.d.ts +8 -0
- package/dist/temporal/workflows/run-orchestration.d.ts.map +1 -0
- package/dist/temporal/workflows/run-orchestration.js +243 -0
- package/dist/temporal/workflows/run-orchestration.js.map +1 -0
- package/dist/temporal/workflows/test-env.d.ts +114 -0
- package/dist/temporal/workflows/test-env.d.ts.map +1 -0
- package/dist/temporal/workflows/test-env.js +323 -0
- package/dist/temporal/workflows/test-env.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -0
- package/drizzle/0000_initial.sql +211 -0
- package/drizzle/0001_agent_tool_materialization.sql +1 -0
- package/drizzle/meta/0000_snapshot.json +1613 -0
- package/drizzle/meta/_journal.json +20 -0
- package/drizzle.config.ts +7 -0
- package/package.json +91 -0
- package/src/core/README.md +79 -0
- package/src/core/agent-tool-capability-warning.test.ts +280 -0
- package/src/core/agent-tool-capability-warning.ts +200 -0
- package/src/core/agent-tools.ts +422 -0
- package/src/core/checkout.test.ts +112 -0
- package/src/core/checkout.ts +63 -0
- package/src/core/condition-trace.ts +64 -0
- package/src/core/entities/index.ts +9 -0
- package/src/core/entities/job-execution.ts +32 -0
- package/src/core/entities/job-listener-event.ts +15 -0
- package/src/core/entities/job.ts +91 -0
- package/src/core/entities/step.ts +126 -0
- package/src/core/entities/workflow-run-attempt.ts +21 -0
- package/src/core/entities/workflow-run.ts +94 -0
- package/src/core/errors.test.ts +45 -0
- package/src/core/errors.ts +209 -0
- package/src/core/index.ts +54 -0
- package/src/core/job-execution-outcome.ts +64 -0
- package/src/core/job-execution.test.ts +1560 -0
- package/src/core/job-execution.ts +581 -0
- package/src/core/job-transition/decide-job-activation.test.ts +196 -0
- package/src/core/job-transition/decide-job-activation.ts +79 -0
- package/src/core/job-transition/derive-job-execution-outputs.ts +41 -0
- package/src/core/job-transition/derive-job-success.test.ts +133 -0
- package/src/core/job-transition/derive-job-success.ts +67 -0
- package/src/core/job-transition/index.ts +11 -0
- package/src/core/job-transition/runtime-completion-status-for-job.ts +14 -0
- package/src/core/listener-execution-materialization.test.ts +49 -0
- package/src/core/listener-execution-materialization.ts +162 -0
- package/src/core/run-workflow.test.ts +229 -0
- package/src/core/run-workflow.ts +41 -0
- package/src/core/source-control.test.ts +17 -0
- package/src/core/source-control.ts +22 -0
- package/src/core/step-config/agent.ts +459 -0
- package/src/core/step-config/assemble-run-context.test.ts +1021 -0
- package/src/core/step-config/assemble-run-context.ts +535 -0
- package/src/core/step-config/complete-step-dispatch-config.test.ts +354 -0
- package/src/core/step-config/complete-step-dispatch-config.ts +40 -0
- package/src/core/step-config/fields.ts +111 -0
- package/src/core/step-config/index.ts +41 -0
- package/src/core/step-config/materialize-job-execution-steps.test.ts +494 -0
- package/src/core/step-config/materialize-job-execution-steps.ts +136 -0
- package/src/core/step-config/materialize-workflow-model.test.ts +1214 -0
- package/src/core/step-config/materialize-workflow-model.ts +140 -0
- package/src/core/step-config/resolve-job-execution-name.test.ts +94 -0
- package/src/core/step-config/resolve-job-execution-name.ts +51 -0
- package/src/core/step-config/resolve-step-config.ts +199 -0
- package/src/core/step-config/run.ts +467 -0
- package/src/core/step-config/workflow-evaluation-context.ts +6 -0
- package/src/core/step-transition/apply-step-transition.ts +163 -0
- package/src/core/step-transition/decide-step-transition.test.ts +307 -0
- package/src/core/step-transition/decide-step-transition.ts +200 -0
- package/src/core/step-transition/evaluate-gate.test.ts +317 -0
- package/src/core/step-transition/evaluate-gate.ts +168 -0
- package/src/core/step-transition/read-step-outputs.ts +27 -0
- package/src/core/workflow-run-creation.test.ts +155 -0
- package/src/core/workflow-run-creation.ts +131 -0
- package/src/core/workflow-scheduling/index.ts +15 -0
- package/src/core/workflow-scheduling/run-progress.test.ts +46 -0
- package/src/core/workflow-scheduling/run-progress.ts +68 -0
- package/src/core/workflow-scheduling/runtime-dag.ts +10 -0
- package/src/core/workflow-scheduling/runtime-scheduling-command.ts +20 -0
- package/src/core/workflow-scheduling/schedule-runtime-dag.test.ts +197 -0
- package/src/core/workflow-scheduling/schedule-runtime-dag.ts +115 -0
- package/src/db/db.ts +40 -0
- package/src/db/index.ts +86 -0
- package/src/db/job-listener-events.test.ts +113 -0
- package/src/db/job-listener-events.ts +73 -0
- package/src/db/job-listeners.test.ts +865 -0
- package/src/db/job-listeners.ts +564 -0
- package/src/db/outbox-writes.ts +40 -0
- package/src/db/rerun-listener.test.ts +64 -0
- package/src/db/run-timeout.test.ts +102 -0
- package/src/db/runner-lease-table.ts +39 -0
- package/src/db/schema/common.ts +3 -0
- package/src/db/schema/job-executions.ts +85 -0
- package/src/db/schema/job-listener-events.ts +58 -0
- package/src/db/schema/jobs.ts +136 -0
- package/src/db/schema/outbox.ts +4 -0
- package/src/db/schema/step-attempts.ts +99 -0
- package/src/db/schema/steps.ts +99 -0
- package/src/db/schema/workflow-run-attempts.ts +59 -0
- package/src/db/schema/workflow-runs.ts +112 -0
- package/src/db/workflow-runs/job-executions.test.ts +99 -0
- package/src/db/workflow-runs/job-executions.ts +421 -0
- package/src/db/workflow-runs/job-status.test.ts +532 -0
- package/src/db/workflow-runs/jobs.test.ts +194 -0
- package/src/db/workflow-runs/jobs.ts +418 -0
- package/src/db/workflow-runs/outbox.ts +109 -0
- package/src/db/workflow-runs/queries.test.ts +256 -0
- package/src/db/workflow-runs/queries.ts +437 -0
- package/src/db/workflow-runs/run-create.test.ts +1281 -0
- package/src/db/workflow-runs/run-create.ts +373 -0
- package/src/db/workflow-runs/run-graph.ts +95 -0
- package/src/db/workflow-runs/run-rerun.test.ts +625 -0
- package/src/db/workflow-runs/run-rerun.ts +266 -0
- package/src/db/workflow-runs/run-status.test.ts +425 -0
- package/src/db/workflow-runs/run-status.ts +391 -0
- package/src/db/workflow-runs/runs.ts +17 -0
- package/src/db/workflow-runs/shared.ts +84 -0
- package/src/db/workflow-runs/steps.test.ts +191 -0
- package/src/db/workflow-runs/steps.ts +476 -0
- package/src/db/workflow-runs.ts +111 -0
- package/src/index.ts +99 -0
- package/src/metrics/index.ts +1 -0
- package/src/metrics/instance.ts +160 -0
- package/src/metrics/service.ts +30 -0
- package/src/presentation/dto/checkout-token.test.ts +107 -0
- package/src/presentation/dto/checkout-token.ts +85 -0
- package/src/presentation/dto/index.ts +3 -0
- package/src/presentation/dto/job.test.ts +108 -0
- package/src/presentation/dto/job.ts +64 -0
- package/src/presentation/dto/step.test.ts +307 -0
- package/src/presentation/dto/step.ts +145 -0
- package/src/presentation/dto/workflow-run.ts +38 -0
- package/src/presentation/index.ts +10 -0
- package/src/presentation/routes/agent-runtime-config.test.ts +478 -0
- package/src/presentation/routes/agent-runtime-config.ts +81 -0
- package/src/presentation/routes/cancel-run.test.ts +156 -0
- package/src/presentation/routes/cancel-run.ts +37 -0
- package/src/presentation/routes/checkout-token.test.ts +366 -0
- package/src/presentation/routes/checkout-token.ts +61 -0
- package/src/presentation/routes/get-run-aggregates.test.ts +114 -0
- package/src/presentation/routes/get-run-aggregates.ts +69 -0
- package/src/presentation/routes/get-run.test.ts +604 -0
- package/src/presentation/routes/get-run.ts +66 -0
- package/src/presentation/routes/get-step-secrets.test.ts +260 -0
- package/src/presentation/routes/get-step-secrets.ts +117 -0
- package/src/presentation/routes/index.test.ts +71 -0
- package/src/presentation/routes/index.ts +42 -0
- package/src/presentation/routes/leased-step.ts +54 -0
- package/src/presentation/routes/list-run-attempts.test.ts +163 -0
- package/src/presentation/routes/list-run-attempts.ts +27 -0
- package/src/presentation/routes/list-runs.test.ts +244 -0
- package/src/presentation/routes/list-runs.ts +83 -0
- package/src/presentation/routes/next-step.test.ts +366 -0
- package/src/presentation/routes/next-step.ts +62 -0
- package/src/presentation/routes/report-step.test.ts +374 -0
- package/src/presentation/routes/report-step.ts +61 -0
- package/src/presentation/routes/require-accessible-run.ts +27 -0
- package/src/presentation/routes/rerun-run.test.ts +202 -0
- package/src/presentation/routes/rerun-run.ts +48 -0
- package/src/presentation/subscribers/index.ts +7 -0
- package/src/presentation/subscribers/on-job-event-delivered.test.ts +71 -0
- package/src/presentation/subscribers/on-job-event-delivered.ts +30 -0
- package/src/presentation/subscribers/on-job-steps-settled.test.ts +75 -0
- package/src/presentation/subscribers/on-job-steps-settled.ts +42 -0
- package/src/presentation/subscribers/on-runner-job-claimed.test.ts +57 -0
- package/src/presentation/subscribers/on-runner-job-claimed.ts +23 -0
- package/src/presentation/subscribers/on-runner-job-lease-expired.test.ts +73 -0
- package/src/presentation/subscribers/on-runner-job-lease-expired.ts +36 -0
- package/src/presentation/subscribers/on-runner-job-queued.test.ts +57 -0
- package/src/presentation/subscribers/on-runner-job-queued.ts +23 -0
- package/src/presentation/subscribers/on-workflow-run-attempt-created.test.ts +69 -0
- package/src/presentation/subscribers/on-workflow-run-attempt-created.ts +40 -0
- package/src/presentation/subscribers/on-workflow-run-cancelled.test.ts +59 -0
- package/src/presentation/subscribers/on-workflow-run-cancelled.ts +29 -0
- package/src/temporal/activities/index.ts +45 -0
- package/src/temporal/activities/orchestration-activities.test.ts +115 -0
- package/src/temporal/activities/orchestration-activities.ts +305 -0
- package/src/temporal/constants.ts +6 -0
- package/src/temporal/index.ts +6 -0
- package/src/temporal/workflow-not-found.ts +9 -0
- package/src/temporal/workflows/deadline.ts +7 -0
- package/src/temporal/workflows/index.ts +11 -0
- package/src/temporal/workflows/job-execution-orchestration-timeout.test.ts +165 -0
- package/src/temporal/workflows/job-execution-orchestration.test.ts +311 -0
- package/src/temporal/workflows/job-execution-orchestration.ts +314 -0
- package/src/temporal/workflows/job-listener-orchestration-continuation.test.ts +93 -0
- package/src/temporal/workflows/job-listener-orchestration.test.ts +406 -0
- package/src/temporal/workflows/job-listener-orchestration.ts +490 -0
- package/src/temporal/workflows/run-orchestration.test.ts +409 -0
- package/src/temporal/workflows/run-orchestration.ts +283 -0
- package/src/temporal/workflows/test-env.ts +409 -0
- package/test/env.ts +11 -0
- package/test/factories/job.ts +83 -0
- package/test/factories/project.ts +16 -0
- package/test/factories/workflow-model.test.ts +26 -0
- package/test/factories/workflow-model.ts +268 -0
- package/test/factories/workflow-run.ts +58 -0
- package/test/fixtures/active-lease-token.ts +85 -0
- package/test/fixtures/job-with-steps.ts +42 -0
- package/test/fixtures/lease-token.ts +44 -0
- package/test/fixtures/strip-setup-step.ts +23 -0
- package/test/globalSetup.ts +54 -0
- package/test/helpers/workflow-runs.ts +210 -0
- package/test/index.ts +3 -0
- package/test/setup.ts +17 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +3 -0
- package/tsconfig.test.json +8 -0
- package/vitest.config.ts +12 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { and, asc, count, eq, gte, inArray, sql } from 'drizzle-orm';
|
|
2
|
+
import { deriveCompletion, isTerminal } from '#core/step-transition/decide-step-transition.js';
|
|
3
|
+
import { db } from '../db.js';
|
|
4
|
+
import { jobExecutions } from '../schema/job-executions.js';
|
|
5
|
+
import { stepAttempts, toStepAttempt } from '../schema/step-attempts.js';
|
|
6
|
+
import { steps, toStep } from '../schema/steps.js';
|
|
7
|
+
import { writeJobStepsSettledOutbox, writeStepAttemptTerminatedOutbox } from './outbox.js';
|
|
8
|
+
import { NON_TERMINAL_STEP_STATUS_FILTER } from './shared.js';
|
|
9
|
+
export async function getStepByIdForJobExecution(params) {
|
|
10
|
+
const rows = await db().select().from(steps).where(and(eq(steps.id, params.stepId), eq(steps.jobExecutionId, params.jobExecutionId))).limit(1);
|
|
11
|
+
const row = rows[0];
|
|
12
|
+
if (!row) return undefined;
|
|
13
|
+
return toStep(row);
|
|
14
|
+
}
|
|
15
|
+
export async function getStepById(stepId) {
|
|
16
|
+
const rows = await db().select().from(steps).where(eq(steps.id, stepId)).limit(1);
|
|
17
|
+
const row = rows[0];
|
|
18
|
+
if (!row) return undefined;
|
|
19
|
+
return toStep(row);
|
|
20
|
+
}
|
|
21
|
+
export async function getStepsByJobId(jobId) {
|
|
22
|
+
const rows = await db().select({
|
|
23
|
+
step: steps
|
|
24
|
+
}).from(steps).innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id)).where(eq(jobExecutions.jobId, jobId)).orderBy(asc(steps.position));
|
|
25
|
+
return rows.map((row)=>toStep(row.step));
|
|
26
|
+
}
|
|
27
|
+
export async function getStepsByJobExecutionId(jobExecutionId) {
|
|
28
|
+
const rows = await db().select().from(steps).where(eq(steps.jobExecutionId, jobExecutionId)).orderBy(asc(steps.position));
|
|
29
|
+
return rows.map(toStep);
|
|
30
|
+
}
|
|
31
|
+
export async function bulkUpdateStepStatuses(params, tx) {
|
|
32
|
+
if (!tx) {
|
|
33
|
+
await db().transaction((transaction)=>bulkUpdateStepStatuses(params, transaction));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
await tx.update(steps).set({
|
|
37
|
+
status: params.status,
|
|
38
|
+
statusReason: null,
|
|
39
|
+
updatedAt: new Date()
|
|
40
|
+
}).where(and(eq(steps.jobExecutionId, params.jobExecutionId), NON_TERMINAL_STEP_STATUS_FILTER));
|
|
41
|
+
// Finalize open attempt rows so a timed-out/cancelled sweep does not leave
|
|
42
|
+
// phantom in-flight work for gate and restart logic.
|
|
43
|
+
const finalizedAttempts = await tx.update(stepAttempts).set({
|
|
44
|
+
status: params.status,
|
|
45
|
+
logOutcome: 'abandoned',
|
|
46
|
+
finishedAt: new Date()
|
|
47
|
+
}).from(steps).where(and(eq(stepAttempts.stepId, steps.id), eq(steps.jobExecutionId, params.jobExecutionId), eq(stepAttempts.status, 'running'))).returning({
|
|
48
|
+
stepId: stepAttempts.stepId,
|
|
49
|
+
attempt: stepAttempts.attempt,
|
|
50
|
+
logOutcome: stepAttempts.logOutcome
|
|
51
|
+
});
|
|
52
|
+
if (finalizedAttempts.length > 0) {
|
|
53
|
+
for (const attempt of finalizedAttempts){
|
|
54
|
+
await writeStepAttemptTerminatedOutbox(tx, {
|
|
55
|
+
stepId: attempt.stepId,
|
|
56
|
+
attempt: attempt.attempt,
|
|
57
|
+
logOutcome: attempt.logOutcome ?? 'abandoned'
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Per-step progression primitives. They take a mandatory `tx` because they only
|
|
63
|
+
// run inside the job-execution service's transaction, and every write guards on
|
|
64
|
+
// the never-downgrade predicate so a late or duplicate write cannot overwrite an
|
|
65
|
+
// already-terminal row.
|
|
66
|
+
export async function getStepsByJobExecutionIdForUpdate(jobExecutionId, tx) {
|
|
67
|
+
const rows = await tx.select().from(steps).where(eq(steps.jobExecutionId, jobExecutionId)).orderBy(asc(steps.position)).for('update');
|
|
68
|
+
return rows.map(toStep);
|
|
69
|
+
}
|
|
70
|
+
export async function getStepAttemptsByJobExecutionId(jobExecutionId, tx) {
|
|
71
|
+
const rows = await tx.select().from(stepAttempts).where(eq(stepAttempts.jobExecutionId, jobExecutionId)).orderBy(asc(stepAttempts.executionOrder), asc(stepAttempts.id));
|
|
72
|
+
return rows.map(toStepAttempt);
|
|
73
|
+
}
|
|
74
|
+
export async function markStepRunning(params, tx) {
|
|
75
|
+
const rows = await tx.update(steps).set({
|
|
76
|
+
status: 'running',
|
|
77
|
+
statusReason: null,
|
|
78
|
+
evaluationTrace: null,
|
|
79
|
+
updatedAt: new Date()
|
|
80
|
+
}).where(and(eq(steps.id, params.stepId), eq(steps.jobExecutionId, params.jobExecutionId), NON_TERMINAL_STEP_STATUS_FILTER)).returning();
|
|
81
|
+
const row = rows[0];
|
|
82
|
+
if (!row) return null;
|
|
83
|
+
const step = toStep(row);
|
|
84
|
+
// Open the attempt this dispatch runs. onConflictDoNothing makes a racing
|
|
85
|
+
// re-dispatch a no-op against the unique (step_id, attempt) anchor; normal
|
|
86
|
+
// re-delivery returns the already-running step without calling this.
|
|
87
|
+
await insertRunningStepAttempt({
|
|
88
|
+
jobExecutionId: step.jobExecutionId,
|
|
89
|
+
stepId: step.id,
|
|
90
|
+
attempt: step.currentAttempt,
|
|
91
|
+
config: step.config
|
|
92
|
+
}, tx);
|
|
93
|
+
return step;
|
|
94
|
+
}
|
|
95
|
+
export async function dispatchStepWithCompletedConfig(params, tx) {
|
|
96
|
+
const rows = await tx.update(steps).set({
|
|
97
|
+
status: 'running',
|
|
98
|
+
statusReason: null,
|
|
99
|
+
evaluationTrace: null,
|
|
100
|
+
config: params.config,
|
|
101
|
+
updatedAt: new Date()
|
|
102
|
+
}).where(and(eq(steps.id, params.stepId), eq(steps.jobExecutionId, params.jobExecutionId), NON_TERMINAL_STEP_STATUS_FILTER)).returning();
|
|
103
|
+
const row = rows[0];
|
|
104
|
+
if (!row) return null;
|
|
105
|
+
const step = toStep(row);
|
|
106
|
+
await insertRunningStepAttempt({
|
|
107
|
+
jobExecutionId: step.jobExecutionId,
|
|
108
|
+
stepId: step.id,
|
|
109
|
+
attempt: step.currentAttempt,
|
|
110
|
+
config: params.config,
|
|
111
|
+
evaluationTrace: params.evaluationTrace
|
|
112
|
+
}, tx);
|
|
113
|
+
return step;
|
|
114
|
+
}
|
|
115
|
+
export async function markStepSkipped(params, tx) {
|
|
116
|
+
const rows = await tx.update(steps).set({
|
|
117
|
+
status: 'skipped',
|
|
118
|
+
statusReason: params.statusReason,
|
|
119
|
+
evaluationTrace: params.evaluationTrace,
|
|
120
|
+
error: null,
|
|
121
|
+
updatedAt: new Date()
|
|
122
|
+
}).where(and(eq(steps.id, params.stepId), eq(steps.jobExecutionId, params.jobExecutionId), eq(steps.status, 'pending'))).returning();
|
|
123
|
+
const row = rows[0];
|
|
124
|
+
return row ? toStep(row) : null;
|
|
125
|
+
}
|
|
126
|
+
export async function settleJobFailed(tx, params) {
|
|
127
|
+
await applyStepResult({
|
|
128
|
+
jobExecutionId: params.jobExecutionId,
|
|
129
|
+
stepId: params.failedStepId,
|
|
130
|
+
status: 'failed',
|
|
131
|
+
error: params.error
|
|
132
|
+
}, tx);
|
|
133
|
+
const after = await getStepsByJobExecutionIdForUpdate(params.jobExecutionId, tx);
|
|
134
|
+
if (!after.every((step)=>isTerminal(step.status))) return null;
|
|
135
|
+
const status = deriveCompletion(after);
|
|
136
|
+
await writeJobStepsSettledOutbox(tx, {
|
|
137
|
+
jobId: params.jobId,
|
|
138
|
+
jobExecutionId: params.jobExecutionId,
|
|
139
|
+
status
|
|
140
|
+
});
|
|
141
|
+
return status;
|
|
142
|
+
}
|
|
143
|
+
export async function insertRunningStepAttempt(params, tx) {
|
|
144
|
+
const [{ nextExecutionOrder } = {
|
|
145
|
+
nextExecutionOrder: 1
|
|
146
|
+
}] = await tx.select({
|
|
147
|
+
nextExecutionOrder: sql`coalesce(max(${stepAttempts.executionOrder}), 0) + 1`
|
|
148
|
+
}).from(stepAttempts).where(eq(stepAttempts.jobExecutionId, params.jobExecutionId));
|
|
149
|
+
await tx.insert(stepAttempts).values({
|
|
150
|
+
jobExecutionId: params.jobExecutionId,
|
|
151
|
+
stepId: params.stepId,
|
|
152
|
+
attempt: params.attempt,
|
|
153
|
+
executionOrder: nextExecutionOrder,
|
|
154
|
+
status: 'running',
|
|
155
|
+
config: params.config ?? null,
|
|
156
|
+
evaluationTrace: params.evaluationTrace ?? null
|
|
157
|
+
}).onConflictDoNothing({
|
|
158
|
+
target: [
|
|
159
|
+
stepAttempts.stepId,
|
|
160
|
+
stepAttempts.attempt
|
|
161
|
+
]
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Finalize the running attempt to a terminal state. The `status='running'` guard
|
|
165
|
+
// makes this idempotent: a duplicate report finds the attempt already terminal
|
|
166
|
+
// and updates nothing (never-downgrade for the audit row).
|
|
167
|
+
export async function finishStepAttempt(params, tx) {
|
|
168
|
+
const rows = await tx.update(stepAttempts).set({
|
|
169
|
+
status: params.status,
|
|
170
|
+
output: params.output ?? null,
|
|
171
|
+
response: params.response ?? null,
|
|
172
|
+
error: params.error ?? null,
|
|
173
|
+
exitCode: params.exitCode ?? null,
|
|
174
|
+
logOutcome: params.logOutcome,
|
|
175
|
+
gateResult: params.gateResult ?? null,
|
|
176
|
+
restartFeedback: params.restartFeedback ?? null,
|
|
177
|
+
finishedAt: new Date()
|
|
178
|
+
}).where(and(eq(stepAttempts.stepId, params.stepId), eq(stepAttempts.attempt, params.attempt), eq(stepAttempts.status, 'running'))).returning({
|
|
179
|
+
stepId: stepAttempts.stepId,
|
|
180
|
+
attempt: stepAttempts.attempt,
|
|
181
|
+
logOutcome: stepAttempts.logOutcome
|
|
182
|
+
});
|
|
183
|
+
const row = rows[0];
|
|
184
|
+
if (!row) return;
|
|
185
|
+
await writeStepAttemptTerminatedOutbox(tx, {
|
|
186
|
+
stepId: row.stepId,
|
|
187
|
+
attempt: row.attempt,
|
|
188
|
+
logOutcome: row.logOutcome ?? params.logOutcome
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// Restart-only: rewind every step at or after `fromPosition` back to pending,
|
|
192
|
+
// clearing its result and bumping both `version` and `current_attempt` so the next
|
|
193
|
+
// dispatch opens a fresh attempt. This DELIBERATELY bypasses the never-downgrade
|
|
194
|
+
// guard used everywhere else — it is the one place that resurrects terminal steps
|
|
195
|
+
// — so it must only be called from the durable-restart path, never the ordinary
|
|
196
|
+
// report path. It must run in the same transaction as the failed-attempt write.
|
|
197
|
+
export async function rewindStepsToPending(params, tx) {
|
|
198
|
+
await tx.update(steps).set({
|
|
199
|
+
status: 'pending',
|
|
200
|
+
statusReason: null,
|
|
201
|
+
error: null,
|
|
202
|
+
version: sql`${steps.version} + 1`,
|
|
203
|
+
currentAttempt: sql`${steps.currentAttempt} + 1`,
|
|
204
|
+
updatedAt: new Date()
|
|
205
|
+
}).where(and(eq(steps.jobExecutionId, params.jobExecutionId), gte(steps.position, params.fromPosition)));
|
|
206
|
+
}
|
|
207
|
+
// Count a single step's own attempts. Used to bound the restart cap on the
|
|
208
|
+
// gating step's actual executions — `steps.current_attempt` can't be used for
|
|
209
|
+
// the cap because a rewind also bumps it for downstream steps swept into the
|
|
210
|
+
// rewind range (which would inflate a later gate's cap in a multi-gate job).
|
|
211
|
+
export async function countStepAttempts(stepId, tx) {
|
|
212
|
+
const rows = await tx.select({
|
|
213
|
+
total: count()
|
|
214
|
+
}).from(stepAttempts).where(eq(stepAttempts.stepId, stepId));
|
|
215
|
+
return Number(rows[0]?.total ?? 0);
|
|
216
|
+
}
|
|
217
|
+
export async function getStepAttempts(jobId) {
|
|
218
|
+
const rows = await db().select({
|
|
219
|
+
stepAttempt: stepAttempts
|
|
220
|
+
}).from(stepAttempts).innerJoin(steps, eq(stepAttempts.stepId, steps.id)).innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id)).where(eq(jobExecutions.jobId, jobId)).orderBy(asc(stepAttempts.executionOrder));
|
|
221
|
+
return rows.map((row)=>toStepAttempt(row.stepAttempt));
|
|
222
|
+
}
|
|
223
|
+
export async function getStepAttemptsByJobIds(jobIds) {
|
|
224
|
+
if (jobIds.length === 0) return [];
|
|
225
|
+
const rows = await db().select({
|
|
226
|
+
stepAttempt: stepAttempts,
|
|
227
|
+
jobId: jobExecutions.jobId
|
|
228
|
+
}).from(stepAttempts).innerJoin(steps, eq(stepAttempts.stepId, steps.id)).innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id)).where(inArray(jobExecutions.jobId, jobIds)).orderBy(asc(jobExecutions.jobId), asc(stepAttempts.executionOrder));
|
|
229
|
+
return rows.map((row)=>toStepAttempt(row.stepAttempt));
|
|
230
|
+
}
|
|
231
|
+
export async function applyStepResult(params, tx) {
|
|
232
|
+
await tx.update(steps).set({
|
|
233
|
+
status: params.status,
|
|
234
|
+
statusReason: null,
|
|
235
|
+
error: params.error ?? null,
|
|
236
|
+
updatedAt: new Date()
|
|
237
|
+
}).where(and(eq(steps.id, params.stepId), eq(steps.jobExecutionId, params.jobExecutionId), NON_TERMINAL_STEP_STATUS_FILTER));
|
|
238
|
+
}
|
|
239
|
+
export async function cancelRemainingSteps(params, tx) {
|
|
240
|
+
await bulkUpdateStepStatuses({
|
|
241
|
+
jobExecutionId: params.jobExecutionId,
|
|
242
|
+
status: 'cancelled'
|
|
243
|
+
}, tx);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
//# sourceMappingURL=steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/db/workflow-runs/steps.ts"],"sourcesContent":["import type {LogOutcomeDto} from '@shipfox/api-workflows-dto';\nimport {and, asc, count, eq, gte, inArray, sql} from 'drizzle-orm';\nimport type {\n PersistedEvaluationTraceEntry,\n Step,\n StepAttempt,\n StepAttemptStatus,\n StepStatus,\n StepStatusReason,\n} from '#core/entities/step.js';\nimport {deriveCompletion, isTerminal} from '#core/step-transition/decide-step-transition.js';\nimport {db, type Tx} from '../db.js';\nimport {jobExecutions} from '../schema/job-executions.js';\nimport {stepAttempts, toStepAttempt} from '../schema/step-attempts.js';\nimport {steps, toStep} from '../schema/steps.js';\nimport {writeJobStepsSettledOutbox, writeStepAttemptTerminatedOutbox} from './outbox.js';\nimport {NON_TERMINAL_STEP_STATUS_FILTER} from './shared.js';\n\nexport async function getStepByIdForJobExecution(params: {\n stepId: string;\n jobExecutionId: string;\n}): Promise<Step | undefined> {\n const rows = await db()\n .select()\n .from(steps)\n .where(and(eq(steps.id, params.stepId), eq(steps.jobExecutionId, params.jobExecutionId)))\n .limit(1);\n\n const row = rows[0];\n if (!row) return undefined;\n return toStep(row);\n}\n\nexport async function getStepById(stepId: string): Promise<Step | undefined> {\n const rows = await db().select().from(steps).where(eq(steps.id, stepId)).limit(1);\n\n const row = rows[0];\n if (!row) return undefined;\n return toStep(row);\n}\n\nexport async function getStepsByJobId(jobId: string): Promise<Step[]> {\n const rows = await db()\n .select({step: steps})\n .from(steps)\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(asc(steps.position));\n return rows.map((row) => toStep(row.step));\n}\n\nexport async function getStepsByJobExecutionId(jobExecutionId: string): Promise<Step[]> {\n const rows = await db()\n .select()\n .from(steps)\n .where(eq(steps.jobExecutionId, jobExecutionId))\n .orderBy(asc(steps.position));\n return rows.map(toStep);\n}\n\nexport interface BulkUpdateStepStatusesParams {\n jobExecutionId: string;\n status: Extract<StepStatus, 'failed' | 'cancelled'>;\n}\n\nexport async function bulkUpdateStepStatuses(\n params: BulkUpdateStepStatusesParams,\n tx?: Tx,\n): Promise<void> {\n if (!tx) {\n await db().transaction((transaction) => bulkUpdateStepStatuses(params, transaction));\n return;\n }\n\n await tx\n .update(steps)\n .set({\n status: params.status,\n statusReason: null,\n updatedAt: new Date(),\n })\n .where(and(eq(steps.jobExecutionId, params.jobExecutionId), NON_TERMINAL_STEP_STATUS_FILTER));\n\n // Finalize open attempt rows so a timed-out/cancelled sweep does not leave\n // phantom in-flight work for gate and restart logic.\n const finalizedAttempts = await tx\n .update(stepAttempts)\n .set({status: params.status, logOutcome: 'abandoned', finishedAt: new Date()})\n .from(steps)\n .where(\n and(\n eq(stepAttempts.stepId, steps.id),\n eq(steps.jobExecutionId, params.jobExecutionId),\n eq(stepAttempts.status, 'running'),\n ),\n )\n .returning({\n stepId: stepAttempts.stepId,\n attempt: stepAttempts.attempt,\n logOutcome: stepAttempts.logOutcome,\n });\n\n if (finalizedAttempts.length > 0) {\n for (const attempt of finalizedAttempts) {\n await writeStepAttemptTerminatedOutbox(tx, {\n stepId: attempt.stepId,\n attempt: attempt.attempt,\n logOutcome: attempt.logOutcome ?? 'abandoned',\n });\n }\n }\n}\n\n// Per-step progression primitives. They take a mandatory `tx` because they only\n// run inside the job-execution service's transaction, and every write guards on\n// the never-downgrade predicate so a late or duplicate write cannot overwrite an\n// already-terminal row.\n\nexport async function getStepsByJobExecutionIdForUpdate(\n jobExecutionId: string,\n tx: Tx,\n): Promise<Step[]> {\n const rows = await tx\n .select()\n .from(steps)\n .where(eq(steps.jobExecutionId, jobExecutionId))\n .orderBy(asc(steps.position))\n .for('update');\n return rows.map(toStep);\n}\n\nexport async function getStepAttemptsByJobExecutionId(\n jobExecutionId: string,\n tx: Tx,\n): Promise<StepAttempt[]> {\n const rows = await tx\n .select()\n .from(stepAttempts)\n .where(eq(stepAttempts.jobExecutionId, jobExecutionId))\n .orderBy(asc(stepAttempts.executionOrder), asc(stepAttempts.id));\n return rows.map(toStepAttempt);\n}\n\nexport interface MarkStepRunningParams {\n jobExecutionId: string;\n stepId: string;\n}\n\nexport async function markStepRunning(params: MarkStepRunningParams, tx: Tx): Promise<Step | null> {\n const rows = await tx\n .update(steps)\n .set({\n status: 'running',\n statusReason: null,\n evaluationTrace: null,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(steps.id, params.stepId),\n eq(steps.jobExecutionId, params.jobExecutionId),\n NON_TERMINAL_STEP_STATUS_FILTER,\n ),\n )\n .returning();\n const row = rows[0];\n if (!row) return null;\n const step = toStep(row);\n // Open the attempt this dispatch runs. onConflictDoNothing makes a racing\n // re-dispatch a no-op against the unique (step_id, attempt) anchor; normal\n // re-delivery returns the already-running step without calling this.\n await insertRunningStepAttempt(\n {\n jobExecutionId: step.jobExecutionId,\n stepId: step.id,\n attempt: step.currentAttempt,\n config: step.config,\n },\n tx,\n );\n return step;\n}\n\nexport interface DispatchStepWithCompletedConfigParams {\n jobExecutionId: string;\n stepId: string;\n config: Record<string, unknown>;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;\n}\n\nexport async function dispatchStepWithCompletedConfig(\n params: DispatchStepWithCompletedConfigParams,\n tx: Tx,\n): Promise<Step | null> {\n const rows = await tx\n .update(steps)\n .set({\n status: 'running',\n statusReason: null,\n evaluationTrace: null,\n config: params.config,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(steps.id, params.stepId),\n eq(steps.jobExecutionId, params.jobExecutionId),\n NON_TERMINAL_STEP_STATUS_FILTER,\n ),\n )\n .returning();\n const row = rows[0];\n if (!row) return null;\n const step = toStep(row);\n await insertRunningStepAttempt(\n {\n jobExecutionId: step.jobExecutionId,\n stepId: step.id,\n attempt: step.currentAttempt,\n config: params.config,\n evaluationTrace: params.evaluationTrace,\n },\n tx,\n );\n return step;\n}\n\nexport interface MarkStepSkippedParams {\n jobExecutionId: string;\n stepId: string;\n statusReason: StepStatusReason;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[];\n}\n\nexport async function markStepSkipped(params: MarkStepSkippedParams, tx: Tx): Promise<Step | null> {\n const rows = await tx\n .update(steps)\n .set({\n status: 'skipped',\n statusReason: params.statusReason,\n evaluationTrace: params.evaluationTrace,\n error: null,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(steps.id, params.stepId),\n eq(steps.jobExecutionId, params.jobExecutionId),\n eq(steps.status, 'pending'),\n ),\n )\n .returning();\n const row = rows[0];\n return row ? toStep(row) : null;\n}\n\nexport async function settleJobFailed(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n failedStepId: string;\n error: Record<string, unknown>;\n },\n): Promise<'succeeded' | 'failed' | null> {\n await applyStepResult(\n {\n jobExecutionId: params.jobExecutionId,\n stepId: params.failedStepId,\n status: 'failed',\n error: params.error,\n },\n tx,\n );\n\n const after = await getStepsByJobExecutionIdForUpdate(params.jobExecutionId, tx);\n if (!after.every((step) => isTerminal(step.status))) return null;\n\n const status = deriveCompletion(after);\n await writeJobStepsSettledOutbox(tx, {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n status,\n });\n return status;\n}\n\nexport interface InsertRunningStepAttemptParams {\n jobExecutionId: string;\n stepId: string;\n attempt: number;\n config?: Record<string, unknown> | null;\n evaluationTrace?: readonly PersistedEvaluationTraceEntry[] | null;\n}\n\nexport async function insertRunningStepAttempt(\n params: InsertRunningStepAttemptParams,\n tx: Tx,\n): Promise<void> {\n const [{nextExecutionOrder} = {nextExecutionOrder: 1}] = await tx\n .select({\n nextExecutionOrder: sql<number>`coalesce(max(${stepAttempts.executionOrder}), 0) + 1`,\n })\n .from(stepAttempts)\n .where(eq(stepAttempts.jobExecutionId, params.jobExecutionId));\n\n await tx\n .insert(stepAttempts)\n .values({\n jobExecutionId: params.jobExecutionId,\n stepId: params.stepId,\n attempt: params.attempt,\n executionOrder: nextExecutionOrder,\n status: 'running',\n config: params.config ?? null,\n evaluationTrace: params.evaluationTrace ?? null,\n })\n .onConflictDoNothing({target: [stepAttempts.stepId, stepAttempts.attempt]});\n}\n\nexport interface FinishStepAttemptParams {\n stepId: string;\n attempt: number;\n status: Exclude<StepAttemptStatus, 'running'>;\n error?: Record<string, unknown> | null;\n output?: Record<string, unknown> | null;\n response?: string | null;\n exitCode?: number | null;\n logOutcome: LogOutcomeDto;\n gateResult?: Record<string, unknown> | null;\n restartFeedback?: string | null;\n}\n\n// Finalize the running attempt to a terminal state. The `status='running'` guard\n// makes this idempotent: a duplicate report finds the attempt already terminal\n// and updates nothing (never-downgrade for the audit row).\nexport async function finishStepAttempt(params: FinishStepAttemptParams, tx: Tx): Promise<void> {\n const rows = await tx\n .update(stepAttempts)\n .set({\n status: params.status,\n output: params.output ?? null,\n response: params.response ?? null,\n error: params.error ?? null,\n exitCode: params.exitCode ?? null,\n logOutcome: params.logOutcome,\n gateResult: params.gateResult ?? null,\n restartFeedback: params.restartFeedback ?? null,\n finishedAt: new Date(),\n })\n .where(\n and(\n eq(stepAttempts.stepId, params.stepId),\n eq(stepAttempts.attempt, params.attempt),\n eq(stepAttempts.status, 'running'),\n ),\n )\n .returning({\n stepId: stepAttempts.stepId,\n attempt: stepAttempts.attempt,\n logOutcome: stepAttempts.logOutcome,\n });\n\n const row = rows[0];\n if (!row) return;\n\n await writeStepAttemptTerminatedOutbox(tx, {\n stepId: row.stepId,\n attempt: row.attempt,\n logOutcome: row.logOutcome ?? params.logOutcome,\n });\n}\n\nexport interface RewindStepsToPendingParams {\n jobExecutionId: string;\n fromPosition: number;\n}\n\n// Restart-only: rewind every step at or after `fromPosition` back to pending,\n// clearing its result and bumping both `version` and `current_attempt` so the next\n// dispatch opens a fresh attempt. This DELIBERATELY bypasses the never-downgrade\n// guard used everywhere else — it is the one place that resurrects terminal steps\n// — so it must only be called from the durable-restart path, never the ordinary\n// report path. It must run in the same transaction as the failed-attempt write.\nexport async function rewindStepsToPending(\n params: RewindStepsToPendingParams,\n tx: Tx,\n): Promise<void> {\n await tx\n .update(steps)\n .set({\n status: 'pending',\n statusReason: null,\n error: null,\n version: sql`${steps.version} + 1`,\n currentAttempt: sql`${steps.currentAttempt} + 1`,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(steps.jobExecutionId, params.jobExecutionId),\n gte(steps.position, params.fromPosition),\n ),\n );\n}\n\n// Count a single step's own attempts. Used to bound the restart cap on the\n// gating step's actual executions — `steps.current_attempt` can't be used for\n// the cap because a rewind also bumps it for downstream steps swept into the\n// rewind range (which would inflate a later gate's cap in a multi-gate job).\nexport async function countStepAttempts(stepId: string, tx: Tx): Promise<number> {\n const rows = await tx\n .select({total: count()})\n .from(stepAttempts)\n .where(eq(stepAttempts.stepId, stepId));\n return Number(rows[0]?.total ?? 0);\n}\n\nexport async function getStepAttempts(jobId: string): Promise<StepAttempt[]> {\n const rows = await db()\n .select({stepAttempt: stepAttempts})\n .from(stepAttempts)\n .innerJoin(steps, eq(stepAttempts.stepId, steps.id))\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(asc(stepAttempts.executionOrder));\n return rows.map((row) => toStepAttempt(row.stepAttempt));\n}\n\nexport async function getStepAttemptsByJobIds(jobIds: string[]): Promise<StepAttempt[]> {\n if (jobIds.length === 0) return [];\n const rows = await db()\n .select({stepAttempt: stepAttempts, jobId: jobExecutions.jobId})\n .from(stepAttempts)\n .innerJoin(steps, eq(stepAttempts.stepId, steps.id))\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(inArray(jobExecutions.jobId, jobIds))\n .orderBy(asc(jobExecutions.jobId), asc(stepAttempts.executionOrder));\n return rows.map((row) => toStepAttempt(row.stepAttempt));\n}\n\nexport interface ApplyStepResultParams {\n jobExecutionId: string;\n stepId: string;\n status: 'succeeded' | 'failed';\n error: Record<string, unknown> | null;\n}\n\nexport async function applyStepResult(params: ApplyStepResultParams, tx: Tx): Promise<void> {\n await tx\n .update(steps)\n .set({\n status: params.status,\n statusReason: null,\n error: params.error ?? null,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(steps.id, params.stepId),\n eq(steps.jobExecutionId, params.jobExecutionId),\n NON_TERMINAL_STEP_STATUS_FILTER,\n ),\n );\n}\n\nexport interface CancelRemainingStepsParams {\n jobExecutionId: string;\n}\n\nexport async function cancelRemainingSteps(\n params: CancelRemainingStepsParams,\n tx: Tx,\n): Promise<void> {\n await bulkUpdateStepStatuses({jobExecutionId: params.jobExecutionId, status: 'cancelled'}, tx);\n}\n"],"names":["and","asc","count","eq","gte","inArray","sql","deriveCompletion","isTerminal","db","jobExecutions","stepAttempts","toStepAttempt","steps","toStep","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","NON_TERMINAL_STEP_STATUS_FILTER","getStepByIdForJobExecution","params","rows","select","from","where","id","stepId","jobExecutionId","limit","row","undefined","getStepById","getStepsByJobId","jobId","step","innerJoin","orderBy","position","map","getStepsByJobExecutionId","bulkUpdateStepStatuses","tx","transaction","update","set","status","statusReason","updatedAt","Date","finalizedAttempts","logOutcome","finishedAt","returning","attempt","length","getStepsByJobExecutionIdForUpdate","for","getStepAttemptsByJobExecutionId","executionOrder","markStepRunning","evaluationTrace","insertRunningStepAttempt","currentAttempt","config","dispatchStepWithCompletedConfig","markStepSkipped","error","settleJobFailed","applyStepResult","failedStepId","after","every","nextExecutionOrder","insert","values","onConflictDoNothing","target","finishStepAttempt","output","response","exitCode","gateResult","restartFeedback","rewindStepsToPending","version","fromPosition","countStepAttempts","total","Number","getStepAttempts","stepAttempt","getStepAttemptsByJobIds","jobIds","cancelRemainingSteps"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type { UpdateJobExecutionStatusAtVersionParams, UpdateJobExecutionStatusParams, } from './workflow-runs/job-executions.js';
|
|
2
|
+
export { failJobExecutionAsTimedOut, getFirstJobExecutionByJobId, getJobExecutionById, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getLatestJobExecutionByJobId, lockActiveJobExecutionLeaseForUpdate, recordJobExecutionQueuedAt, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, updateJobExecutionStatus, } from './workflow-runs/job-executions.js';
|
|
3
|
+
export type { EvaluateJobActivationsParams, EvaluateJobSuccessResult, JobActivationDecision, JobScope, UpdateJobStatusAtVersionParams, UpdateJobStatusParams, } from './workflow-runs/jobs.js';
|
|
4
|
+
export { evaluateJobActivations, evaluateJobSuccess, getDirectDependencyJobContexts, getJobById, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, resolveJobStatusFromJobExecutions, updateJobStatus, updateJobStatusAtVersion, } from './workflow-runs/jobs.js';
|
|
5
|
+
export { writeJobStepsSettledOutbox, writeStepAttemptTerminatedOutbox, writeStepRestartEnqueuedOutbox, } from './workflow-runs/outbox.js';
|
|
6
|
+
export type { ListWorkflowRunsParams, ListWorkflowRunsResult, WorkflowJobExecutionDepth, WorkflowJobExecutionDepthParams, WorkflowRunAggregates, WorkflowRunCursor, WorkflowRunFilters, } from './workflow-runs/queries.js';
|
|
7
|
+
export { buildWorkflowRunListConditions, getJobExecutionDetail, getLatestAttempt, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRuns, listWorkflowRunsByProject, } from './workflow-runs/queries.js';
|
|
8
|
+
export type { CancelWorkflowRunParams, CreateRerunWorkflowRunParams, CreateWorkflowRunParams, FailWorkflowRunAsTimedOutParams, UpdateWorkflowRunStatusParams, } from './workflow-runs/runs.js';
|
|
9
|
+
export { cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, failWorkflowRunAsTimedOut, updateWorkflowRunStatus, } from './workflow-runs/runs.js';
|
|
10
|
+
export type { ApplyStepResultParams, BulkUpdateStepStatusesParams, CancelRemainingStepsParams, DispatchStepWithCompletedConfigParams, FinishStepAttemptParams, InsertRunningStepAttemptParams, MarkStepRunningParams, MarkStepSkippedParams, RewindStepsToPendingParams, } from './workflow-runs/steps.js';
|
|
11
|
+
export { applyStepResult, bulkUpdateStepStatuses, cancelRemainingSteps, countStepAttempts, dispatchStepWithCompletedConfig, finishStepAttempt, getStepAttempts, getStepAttemptsByJobExecutionId, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getStepsByJobId, insertRunningStepAttempt, markStepRunning, markStepSkipped, rewindStepsToPending, settleJobFailed, } from './workflow-runs/steps.js';
|
|
12
|
+
//# sourceMappingURL=workflow-runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-runs.d.ts","sourceRoot":"","sources":["../../src/db/workflow-runs.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uCAAuC,EACvC,8BAA8B,GAC/B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,sCAAsC,EACtC,4BAA4B,EAC5B,oCAAoC,EACpC,0BAA0B,EAC1B,2BAA2B,EAC3B,mCAAmC,EACnC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,QAAQ,EACR,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,8BAA8B,EAC9B,UAAU,EACV,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,iCAAiC,EACjC,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,EAC1B,qCAAqC,EACrC,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,+BAA+B,EAC/B,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAC/B,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,eAAe,GAChB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { failJobExecutionAsTimedOut, getFirstJobExecutionByJobId, getJobExecutionById, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getLatestJobExecutionByJobId, lockActiveJobExecutionLeaseForUpdate, recordJobExecutionQueuedAt, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, updateJobExecutionStatus } from './workflow-runs/job-executions.js';
|
|
2
|
+
export { evaluateJobActivations, evaluateJobSuccess, getDirectDependencyJobContexts, getJobById, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, resolveJobStatusFromJobExecutions, updateJobStatus, updateJobStatusAtVersion } from './workflow-runs/jobs.js';
|
|
3
|
+
export { writeJobStepsSettledOutbox, writeStepAttemptTerminatedOutbox, writeStepRestartEnqueuedOutbox } from './workflow-runs/outbox.js';
|
|
4
|
+
export { buildWorkflowRunListConditions, getJobExecutionDetail, getLatestAttempt, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRuns, listWorkflowRunsByProject } from './workflow-runs/queries.js';
|
|
5
|
+
export { cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, failWorkflowRunAsTimedOut, updateWorkflowRunStatus } from './workflow-runs/runs.js';
|
|
6
|
+
export { applyStepResult, bulkUpdateStepStatuses, cancelRemainingSteps, countStepAttempts, dispatchStepWithCompletedConfig, finishStepAttempt, getStepAttempts, getStepAttemptsByJobExecutionId, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getStepsByJobId, insertRunningStepAttempt, markStepRunning, markStepSkipped, rewindStepsToPending, settleJobFailed } from './workflow-runs/steps.js';
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=workflow-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/db/workflow-runs.ts"],"sourcesContent":["export type {\n UpdateJobExecutionStatusAtVersionParams,\n UpdateJobExecutionStatusParams,\n} from './workflow-runs/job-executions.js';\nexport {\n failJobExecutionAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobExecutionById,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getLatestJobExecutionByJobId,\n lockActiveJobExecutionLeaseForUpdate,\n recordJobExecutionQueuedAt,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n updateJobExecutionStatus,\n} from './workflow-runs/job-executions.js';\nexport type {\n EvaluateJobActivationsParams,\n EvaluateJobSuccessResult,\n JobActivationDecision,\n JobScope,\n UpdateJobStatusAtVersionParams,\n UpdateJobStatusParams,\n} from './workflow-runs/jobs.js';\nexport {\n evaluateJobActivations,\n evaluateJobSuccess,\n getDirectDependencyJobContexts,\n getJobById,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n resolveJobStatusFromJobExecutions,\n updateJobStatus,\n updateJobStatusAtVersion,\n} from './workflow-runs/jobs.js';\nexport {\n writeJobStepsSettledOutbox,\n writeStepAttemptTerminatedOutbox,\n writeStepRestartEnqueuedOutbox,\n} from './workflow-runs/outbox.js';\nexport type {\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunCursor,\n WorkflowRunFilters,\n} from './workflow-runs/queries.js';\nexport {\n buildWorkflowRunListConditions,\n getJobExecutionDetail,\n getLatestAttempt,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n} from './workflow-runs/queries.js';\nexport type {\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n FailWorkflowRunAsTimedOutParams,\n UpdateWorkflowRunStatusParams,\n} from './workflow-runs/runs.js';\nexport {\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n failWorkflowRunAsTimedOut,\n updateWorkflowRunStatus,\n} from './workflow-runs/runs.js';\nexport type {\n ApplyStepResultParams,\n BulkUpdateStepStatusesParams,\n CancelRemainingStepsParams,\n DispatchStepWithCompletedConfigParams,\n FinishStepAttemptParams,\n InsertRunningStepAttemptParams,\n MarkStepRunningParams,\n MarkStepSkippedParams,\n RewindStepsToPendingParams,\n} from './workflow-runs/steps.js';\nexport {\n applyStepResult,\n bulkUpdateStepStatuses,\n cancelRemainingSteps,\n countStepAttempts,\n dispatchStepWithCompletedConfig,\n finishStepAttempt,\n getStepAttempts,\n getStepAttemptsByJobExecutionId,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getStepsByJobId,\n insertRunningStepAttempt,\n markStepRunning,\n markStepSkipped,\n rewindStepsToPending,\n settleJobFailed,\n} from './workflow-runs/steps.js';\n"],"names":["failJobExecutionAsTimedOut","getFirstJobExecutionByJobId","getJobExecutionById","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getLatestJobExecutionByJobId","lockActiveJobExecutionLeaseForUpdate","recordJobExecutionQueuedAt","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","updateJobExecutionStatus","evaluateJobActivations","evaluateJobSuccess","getDirectDependencyJobContexts","getJobById","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","resolveJobStatusFromJobExecutions","updateJobStatus","updateJobStatusAtVersion","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","writeStepRestartEnqueuedOutbox","buildWorkflowRunListConditions","getJobExecutionDetail","getLatestAttempt","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listWorkflowRuns","listWorkflowRunsByProject","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","failWorkflowRunAsTimedOut","updateWorkflowRunStatus","applyStepResult","bulkUpdateStepStatuses","cancelRemainingSteps","countStepAttempts","dispatchStepWithCompletedConfig","finishStepAttempt","getStepAttempts","getStepAttemptsByJobExecutionId","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getStepsByJobId","insertRunningStepAttempt","markStepRunning","markStepSkipped","rewindStepsToPending","settleJobFailed"],"mappings":"AAIA,SACEA,0BAA0B,EAC1BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,uBAAuB,EACvBC,sCAAsC,EACtCC,4BAA4B,EAC5BC,oCAAoC,EACpCC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,mCAAmC,EACnCC,wBAAwB,QACnB,oCAAoC;AAS3C,SACEC,sBAAsB,EACtBC,kBAAkB,EAClBC,8BAA8B,EAC9BC,UAAU,EACVC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,iCAAiC,EACjCC,eAAe,EACfC,wBAAwB,QACnB,0BAA0B;AACjC,SACEC,0BAA0B,EAC1BC,gCAAgC,EAChCC,8BAA8B,QACzB,4BAA4B;AAUnC,SACEC,8BAA8B,EAC9BC,qBAAqB,EACrBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,gBAAgB,EAChBC,yBAAyB,QACpB,6BAA6B;AAQpC,SACEC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,yBAAyB,EACzBC,uBAAuB,QAClB,0BAA0B;AAYjC,SACEC,eAAe,EACfC,sBAAsB,EACtBC,oBAAoB,EACpBC,iBAAiB,EACjBC,+BAA+B,EAC/BC,iBAAiB,EACjBC,eAAe,EACfC,+BAA+B,EAC/BC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,eAAe,EACfC,wBAAwB,EACxBC,eAAe,EACfC,eAAe,EACfC,oBAAoB,EACpBC,eAAe,QACV,2BAA2B"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ShipfoxModule } from '@shipfox/node-module';
|
|
2
|
+
export { clearAgentToolMaterializationServices, setAgentToolMaterializationServices, } from '#core/agent-tools.js';
|
|
3
|
+
export type { Job, JobListenerEvent, JobListenerEventDisposition, RunWorkflowParams, Step, TriggerPayload, WorkflowRun, WorkflowSourceSnapshot, } from '#core/index.js';
|
|
4
|
+
export { DefinitionNotFoundError, InterpolationUnresolvableError, isPermanentRunWorkflowError, ProjectMismatchError, runWorkflow, WorkflowRunNotCancellableError, } from '#core/index.js';
|
|
5
|
+
export { setSourceControl } from '#core/source-control.js';
|
|
6
|
+
export { closeDb, type DeliverEventToListenerParams, type DeliverEventToListenerResult, db, deliverEventToListener, getStepById, getStepByIdForJobExecution, migrationsPath, workflowsOutbox, } from '#db/index.js';
|
|
7
|
+
export { routes } from '#presentation/index.js';
|
|
8
|
+
export { loadRunningLeasedStep } from '#presentation/routes/leased-step.js';
|
|
9
|
+
export declare const workflowsModule: ShipfoxModule;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAe3E,OAAO,EACL,qCAAqC,EACrC,mCAAmC,GACpC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,GAAG,EACH,gBAAgB,EAChB,2BAA2B,EAC3B,iBAAiB,EACjB,IAAI,EACJ,cAAc,EACd,WAAW,EACX,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,2BAA2B,EAC3B,oBAAoB,EACpB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AACzD,OAAO,EACL,OAAO,EACP,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,EAAE,EACF,sBAAsB,EACtB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,qCAAqC,CAAC;AAO1E,eAAO,MAAM,eAAe,EAAE,aAyB7B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { dirname, resolve } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { RUNNER_JOB_CLAIMED, RUNNER_JOB_LEASE_EXPIRED, RUNNER_JOB_QUEUED } from '@shipfox/api-runners-dto';
|
|
4
|
+
import { WORKFLOWS_JOB_EVENT_DELIVERED, WORKFLOWS_JOB_STEPS_SETTLED, WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED, WORKFLOWS_WORKFLOW_RUN_CANCELLED, workflowsEventSchemas } from '@shipfox/api-workflows-dto';
|
|
5
|
+
import { subscriberFactory } from '@shipfox/node-module';
|
|
6
|
+
import { db, migrationsPath, workflowsOutbox } from '#db/index.js';
|
|
7
|
+
import { registerWorkflowsServiceMetrics } from '#metrics/index.js';
|
|
8
|
+
import { onJobEventDelivered, onJobStepsSettled, onRunnerJobClaimed, onRunnerJobLeaseExpired, onRunnerJobQueued, onWorkflowRunAttemptCreated, onWorkflowRunCancelled, routes } from '#presentation/index.js';
|
|
9
|
+
import { createOrchestrationActivities, WORKFLOWS_TASK_QUEUE } from '#temporal/index.js';
|
|
10
|
+
export { clearAgentToolMaterializationServices, setAgentToolMaterializationServices } from '#core/agent-tools.js';
|
|
11
|
+
export { DefinitionNotFoundError, InterpolationUnresolvableError, isPermanentRunWorkflowError, ProjectMismatchError, runWorkflow, WorkflowRunNotCancellableError } from '#core/index.js';
|
|
12
|
+
export { setSourceControl } from '#core/source-control.js';
|
|
13
|
+
export { closeDb, db, deliverEventToListener, getStepById, getStepByIdForJobExecution, migrationsPath, workflowsOutbox } from '#db/index.js';
|
|
14
|
+
export { routes } from '#presentation/index.js';
|
|
15
|
+
export { loadRunningLeasedStep } from '#presentation/routes/leased-step.js';
|
|
16
|
+
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
17
|
+
const workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');
|
|
18
|
+
const subscriber = subscriberFactory();
|
|
19
|
+
export const workflowsModule = {
|
|
20
|
+
name: 'workflows',
|
|
21
|
+
database: {
|
|
22
|
+
db,
|
|
23
|
+
migrationsPath
|
|
24
|
+
},
|
|
25
|
+
routes,
|
|
26
|
+
metrics: registerWorkflowsServiceMetrics,
|
|
27
|
+
publishers: [
|
|
28
|
+
{
|
|
29
|
+
name: 'workflows',
|
|
30
|
+
table: workflowsOutbox,
|
|
31
|
+
db,
|
|
32
|
+
eventSchemas: workflowsEventSchemas
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
subscribers: [
|
|
36
|
+
subscriber(WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED, onWorkflowRunAttemptCreated),
|
|
37
|
+
subscriber(WORKFLOWS_WORKFLOW_RUN_CANCELLED, onWorkflowRunCancelled),
|
|
38
|
+
subscriber(WORKFLOWS_JOB_EVENT_DELIVERED, onJobEventDelivered),
|
|
39
|
+
subscriber(WORKFLOWS_JOB_STEPS_SETTLED, onJobStepsSettled),
|
|
40
|
+
subscriber(RUNNER_JOB_LEASE_EXPIRED, onRunnerJobLeaseExpired),
|
|
41
|
+
subscriber(RUNNER_JOB_QUEUED, onRunnerJobQueued),
|
|
42
|
+
subscriber(RUNNER_JOB_CLAIMED, onRunnerJobClaimed)
|
|
43
|
+
],
|
|
44
|
+
workers: [
|
|
45
|
+
{
|
|
46
|
+
taskQueue: WORKFLOWS_TASK_QUEUE,
|
|
47
|
+
workflowsPath,
|
|
48
|
+
activities: createOrchestrationActivities,
|
|
49
|
+
workflows: []
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport {\n RUNNER_JOB_CLAIMED,\n RUNNER_JOB_LEASE_EXPIRED,\n RUNNER_JOB_QUEUED,\n type RunnersEventMap,\n} from '@shipfox/api-runners-dto';\nimport {\n WORKFLOWS_JOB_EVENT_DELIVERED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED,\n WORKFLOWS_WORKFLOW_RUN_CANCELLED,\n type WorkflowsEventMapDto,\n workflowsEventSchemas,\n} from '@shipfox/api-workflows-dto';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {db, migrationsPath, workflowsOutbox} from '#db/index.js';\nimport {registerWorkflowsServiceMetrics} from '#metrics/index.js';\nimport {\n onJobEventDelivered,\n onJobStepsSettled,\n onRunnerJobClaimed,\n onRunnerJobLeaseExpired,\n onRunnerJobQueued,\n onWorkflowRunAttemptCreated,\n onWorkflowRunCancelled,\n routes,\n} from '#presentation/index.js';\nimport {createOrchestrationActivities, WORKFLOWS_TASK_QUEUE} from '#temporal/index.js';\n\nexport {\n clearAgentToolMaterializationServices,\n setAgentToolMaterializationServices,\n} from '#core/agent-tools.js';\nexport type {\n Job,\n JobListenerEvent,\n JobListenerEventDisposition,\n RunWorkflowParams,\n Step,\n TriggerPayload,\n WorkflowRun,\n WorkflowSourceSnapshot,\n} from '#core/index.js';\nexport {\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n isPermanentRunWorkflowError,\n ProjectMismatchError,\n runWorkflow,\n WorkflowRunNotCancellableError,\n} from '#core/index.js';\nexport {setSourceControl} from '#core/source-control.js';\nexport {\n closeDb,\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n db,\n deliverEventToListener,\n getStepById,\n getStepByIdForJobExecution,\n migrationsPath,\n workflowsOutbox,\n} from '#db/index.js';\nexport {routes} from '#presentation/index.js';\nexport {loadRunningLeasedStep} from '#presentation/routes/leased-step.js';\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');\nconst workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');\n\nconst subscriber = subscriberFactory<WorkflowsEventMapDto & RunnersEventMap>();\n\nexport const workflowsModule: ShipfoxModule = {\n name: 'workflows',\n database: {db, migrationsPath},\n routes,\n metrics: registerWorkflowsServiceMetrics,\n publishers: [\n {name: 'workflows', table: workflowsOutbox, db, eventSchemas: workflowsEventSchemas},\n ],\n subscribers: [\n subscriber(WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED, onWorkflowRunAttemptCreated),\n subscriber(WORKFLOWS_WORKFLOW_RUN_CANCELLED, onWorkflowRunCancelled),\n subscriber(WORKFLOWS_JOB_EVENT_DELIVERED, onJobEventDelivered),\n subscriber(WORKFLOWS_JOB_STEPS_SETTLED, onJobStepsSettled),\n subscriber(RUNNER_JOB_LEASE_EXPIRED, onRunnerJobLeaseExpired),\n subscriber(RUNNER_JOB_QUEUED, onRunnerJobQueued),\n subscriber(RUNNER_JOB_CLAIMED, onRunnerJobClaimed),\n ],\n workers: [\n {\n taskQueue: WORKFLOWS_TASK_QUEUE,\n workflowsPath,\n activities: createOrchestrationActivities,\n workflows: [],\n },\n ],\n};\n"],"names":["dirname","resolve","fileURLToPath","RUNNER_JOB_CLAIMED","RUNNER_JOB_LEASE_EXPIRED","RUNNER_JOB_QUEUED","WORKFLOWS_JOB_EVENT_DELIVERED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED","WORKFLOWS_WORKFLOW_RUN_CANCELLED","workflowsEventSchemas","subscriberFactory","db","migrationsPath","workflowsOutbox","registerWorkflowsServiceMetrics","onJobEventDelivered","onJobStepsSettled","onRunnerJobClaimed","onRunnerJobLeaseExpired","onRunnerJobQueued","onWorkflowRunAttemptCreated","onWorkflowRunCancelled","routes","createOrchestrationActivities","WORKFLOWS_TASK_QUEUE","clearAgentToolMaterializationServices","setAgentToolMaterializationServices","DefinitionNotFoundError","InterpolationUnresolvableError","isPermanentRunWorkflowError","ProjectMismatchError","runWorkflow","WorkflowRunNotCancellableError","setSourceControl","closeDb","deliverEventToListener","getStepById","getStepByIdForJobExecution","loadRunningLeasedStep","packageRoot","url","workflowsPath","subscriber","workflowsModule","name","database","metrics","publishers","table","eventSchemas","subscribers","workers","taskQueue","activities","workflows"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AACvC,SACEC,kBAAkB,EAClBC,wBAAwB,EACxBC,iBAAiB,QAEZ,2BAA2B;AAClC,SACEC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,sCAAsC,EACtCC,gCAAgC,EAEhCC,qBAAqB,QAChB,6BAA6B;AACpC,SAA4BC,iBAAiB,QAAO,uBAAuB;AAC3E,SAAQC,EAAE,EAAEC,cAAc,EAAEC,eAAe,QAAO,eAAe;AACjE,SAAQC,+BAA+B,QAAO,oBAAoB;AAClE,SACEC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAkB,EAClBC,uBAAuB,EACvBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,sBAAsB,EACtBC,MAAM,QACD,yBAAyB;AAChC,SAAQC,6BAA6B,EAAEC,oBAAoB,QAAO,qBAAqB;AAEvF,SACEC,qCAAqC,EACrCC,mCAAmC,QAC9B,uBAAuB;AAW9B,SACEC,uBAAuB,EACvBC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,oBAAoB,EACpBC,WAAW,EACXC,8BAA8B,QACzB,iBAAiB;AACxB,SAAQC,gBAAgB,QAAO,0BAA0B;AACzD,SACEC,OAAO,EAGPvB,EAAE,EACFwB,sBAAsB,EACtBC,WAAW,EACXC,0BAA0B,EAC1BzB,cAAc,EACdC,eAAe,QACV,eAAe;AACtB,SAAQS,MAAM,QAAO,yBAAyB;AAC9C,SAAQgB,qBAAqB,QAAO,sCAAsC;AAE1E,MAAMC,cAAcvC,QAAQD,QAAQE,cAAc,YAAYuC,GAAG,IAAI;AACrE,MAAMC,gBAAgBzC,QAAQuC,aAAa;AAE3C,MAAMG,aAAahC;AAEnB,OAAO,MAAMiC,kBAAiC;IAC5CC,MAAM;IACNC,UAAU;QAAClC;QAAIC;IAAc;IAC7BU;IACAwB,SAAShC;IACTiC,YAAY;QACV;YAACH,MAAM;YAAaI,OAAOnC;YAAiBF;YAAIsC,cAAcxC;QAAqB;KACpF;IACDyC,aAAa;QACXR,WAAWnC,wCAAwCa;QACnDsB,WAAWlC,kCAAkCa;QAC7CqB,WAAWrC,+BAA+BU;QAC1C2B,WAAWpC,6BAA6BU;QACxC0B,WAAWvC,0BAA0Be;QACrCwB,WAAWtC,mBAAmBe;QAC9BuB,WAAWxC,oBAAoBe;KAChC;IACDkC,SAAS;QACP;YACEC,WAAW5B;YACXiB;YACAY,YAAY9B;YACZ+B,WAAW,EAAE;QACf;KACD;AACH,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,+BAA+B,EAAC,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/metrics/index.ts"],"sourcesContent":["export {registerWorkflowsServiceMetrics} from './service.js';\n"],"names":["registerWorkflowsServiceMetrics"],"mappings":"AAAA,SAAQA,+BAA+B,QAAO,eAAe"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { JobStatus, ResolutionReason } from '#core/entities/job.js';
|
|
2
|
+
import type { JobExecutionStatus } from '#core/entities/job-execution.js';
|
|
3
|
+
import type { WorkflowRunStatus } from '#core/entities/workflow-run.js';
|
|
4
|
+
import type { RuntimeCompletionStatus } from '#core/workflow-scheduling/runtime-dag.js';
|
|
5
|
+
export declare function recordWorkflowRunCreated(provider: string): void;
|
|
6
|
+
export declare function recordWorkflowRunStatusChanged(status: WorkflowRunStatus): void;
|
|
7
|
+
export declare function recordWorkflowJobStatusChanged(status: JobStatus): void;
|
|
8
|
+
export declare function recordWorkflowJobExecutionStatusChanged(status: JobExecutionStatus): void;
|
|
9
|
+
export declare function recordWorkflowJobExecutionQueued(): void;
|
|
10
|
+
export declare function recordWorkflowJobExecutionStarted(): void;
|
|
11
|
+
export declare function recordWorkflowJobExecutionStepsSettled(status: Extract<RuntimeCompletionStatus, 'failed' | 'succeeded'>): void;
|
|
12
|
+
export declare function recordWorkflowJobExecutionTimedOut(): void;
|
|
13
|
+
export declare function recordWorkflowJobExecutionLeaseExpiryResolved(status: RuntimeCompletionStatus): void;
|
|
14
|
+
export declare function recordWorkflowStepRestartEnqueued(): void;
|
|
15
|
+
export declare function recordListenerEventReceived(provider: string): void;
|
|
16
|
+
export declare function recordWorkflowListenerExecution(outcome: 'succeeded' | 'failed' | 'cancelled'): void;
|
|
17
|
+
export declare function recordWorkflowListenerResolved(reason: ResolutionReason): void;
|
|
18
|
+
export declare function recordListenerEventsCoalesced(batchSize: number): void;
|
|
19
|
+
export declare function recordWorkflowAgentToolWarningFailed(reason: 'budget' | 'lookup' | 'write'): void;
|
|
20
|
+
//# sourceMappingURL=instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/metrics/instance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0CAA0C,CAAC;AA2FtF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAE9E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEtE;AAED,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAExF;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE,QAAQ,GAAG,WAAW,CAAC,GAC/D,IAAI,CAEN;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,uBAAuB,GAC9B,IAAI,CAEN;AAED,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAElE;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAC5C,IAAI,CAEN;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAE7E;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE;AAED,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAEhG"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { instanceMetrics } from '@shipfox/node-opentelemetry';
|
|
2
|
+
const meter = instanceMetrics.getMeter('workflows');
|
|
3
|
+
const runCreatedCount = meter.createCounter('workflows_run_created', {
|
|
4
|
+
description: 'Workflow runs created by bounded trigger provider'
|
|
5
|
+
});
|
|
6
|
+
const runStatusChangedCount = meter.createCounter('workflows_run_status_changed', {
|
|
7
|
+
description: 'Workflow run status transitions by resulting status'
|
|
8
|
+
});
|
|
9
|
+
const jobStatusChangedCount = meter.createCounter('workflows_job_status_changed', {
|
|
10
|
+
description: 'Workflow job status transitions by resulting status'
|
|
11
|
+
});
|
|
12
|
+
const jobExecutionStatusChangedCount = meter.createCounter('workflows_job_execution_status_changed', {
|
|
13
|
+
description: 'Workflow job execution status transitions by resulting status'
|
|
14
|
+
});
|
|
15
|
+
const jobExecutionQueuedCount = meter.createCounter('workflows_job_execution_queued', {
|
|
16
|
+
description: 'Workflow job executions first marked as queued from runner queue events'
|
|
17
|
+
});
|
|
18
|
+
const jobExecutionStartedCount = meter.createCounter('workflows_job_execution_started', {
|
|
19
|
+
description: 'Workflow job executions first marked as started from runner claim events'
|
|
20
|
+
});
|
|
21
|
+
const jobExecutionStepsSettledCount = meter.createCounter('workflows_job_execution_steps_settled', {
|
|
22
|
+
description: 'Job execution steps-settled events enqueued by resulting completion status'
|
|
23
|
+
});
|
|
24
|
+
const jobExecutionTimedOutCount = meter.createCounter('workflows_job_execution_timed_out', {
|
|
25
|
+
description: 'Workflow job executions failed by the execution orchestration timeout path'
|
|
26
|
+
});
|
|
27
|
+
const jobExecutionLeaseExpiryResolvedCount = meter.createCounter('workflows_job_execution_lease_expiry_resolved', {
|
|
28
|
+
description: 'Runner lease-expiry resolutions by resulting runtime status'
|
|
29
|
+
});
|
|
30
|
+
const stepRestartEnqueuedCount = meter.createCounter('workflows_step_restart_enqueued', {
|
|
31
|
+
description: 'Durable step restart events enqueued after a restartable gate failure'
|
|
32
|
+
});
|
|
33
|
+
const listenerEventsReceivedCount = meter.createCounter('workflows_listener_events_received', {
|
|
34
|
+
description: 'Listener integration events buffered by bounded trigger provider'
|
|
35
|
+
});
|
|
36
|
+
const listenerExecutionsCount = meter.createCounter('workflows_listener_executions', {
|
|
37
|
+
description: 'Listener job execution firings by terminal outcome'
|
|
38
|
+
});
|
|
39
|
+
const listenerResolvedCount = meter.createCounter('workflows_listener_resolved', {
|
|
40
|
+
description: 'Listener resolutions by bounded reason'
|
|
41
|
+
});
|
|
42
|
+
const agentToolWarningFailedCount = meter.createCounter('workflows_agent_tool_warning_failed', {
|
|
43
|
+
description: 'Agent tool capability warning failures by bounded reason'
|
|
44
|
+
});
|
|
45
|
+
const listenerEventsCoalesced = meter.createHistogram('workflows_listener_events_coalesced', {
|
|
46
|
+
description: 'Listener firing batch sizes',
|
|
47
|
+
unit: '1',
|
|
48
|
+
advice: {
|
|
49
|
+
explicitBucketBoundaries: [
|
|
50
|
+
1,
|
|
51
|
+
2,
|
|
52
|
+
5,
|
|
53
|
+
10,
|
|
54
|
+
25,
|
|
55
|
+
50,
|
|
56
|
+
100,
|
|
57
|
+
250
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
export function recordWorkflowRunCreated(provider) {
|
|
62
|
+
runCreatedCount.add(1, {
|
|
63
|
+
provider
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export function recordWorkflowRunStatusChanged(status) {
|
|
67
|
+
runStatusChangedCount.add(1, {
|
|
68
|
+
status
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function recordWorkflowJobStatusChanged(status) {
|
|
72
|
+
jobStatusChangedCount.add(1, {
|
|
73
|
+
status
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export function recordWorkflowJobExecutionStatusChanged(status) {
|
|
77
|
+
jobExecutionStatusChangedCount.add(1, {
|
|
78
|
+
status
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function recordWorkflowJobExecutionQueued() {
|
|
82
|
+
jobExecutionQueuedCount.add(1);
|
|
83
|
+
}
|
|
84
|
+
export function recordWorkflowJobExecutionStarted() {
|
|
85
|
+
jobExecutionStartedCount.add(1);
|
|
86
|
+
}
|
|
87
|
+
export function recordWorkflowJobExecutionStepsSettled(status) {
|
|
88
|
+
jobExecutionStepsSettledCount.add(1, {
|
|
89
|
+
status
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
export function recordWorkflowJobExecutionTimedOut() {
|
|
93
|
+
jobExecutionTimedOutCount.add(1);
|
|
94
|
+
}
|
|
95
|
+
export function recordWorkflowJobExecutionLeaseExpiryResolved(status) {
|
|
96
|
+
jobExecutionLeaseExpiryResolvedCount.add(1, {
|
|
97
|
+
status
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
export function recordWorkflowStepRestartEnqueued() {
|
|
101
|
+
stepRestartEnqueuedCount.add(1);
|
|
102
|
+
}
|
|
103
|
+
export function recordListenerEventReceived(provider) {
|
|
104
|
+
listenerEventsReceivedCount.add(1, {
|
|
105
|
+
provider
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export function recordWorkflowListenerExecution(outcome) {
|
|
109
|
+
listenerExecutionsCount.add(1, {
|
|
110
|
+
outcome
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
export function recordWorkflowListenerResolved(reason) {
|
|
114
|
+
listenerResolvedCount.add(1, {
|
|
115
|
+
reason
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export function recordListenerEventsCoalesced(batchSize) {
|
|
119
|
+
listenerEventsCoalesced.record(batchSize);
|
|
120
|
+
}
|
|
121
|
+
export function recordWorkflowAgentToolWarningFailed(reason) {
|
|
122
|
+
agentToolWarningFailedCount.add(1, {
|
|
123
|
+
reason
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=instance.js.map
|