@shipfox/api-workflows 15.0.0 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/.turbo/turbo-type.log +1 -0
  3. package/CHANGELOG.md +36 -0
  4. package/dist/core/agent-tools.js +8 -3
  5. package/dist/core/agent-tools.js.map +1 -1
  6. package/dist/core/entities/step.d.ts +1 -1
  7. package/dist/core/entities/step.d.ts.map +1 -1
  8. package/dist/core/entities/step.js +2 -1
  9. package/dist/core/entities/step.js.map +1 -1
  10. package/dist/core/errors.d.ts +1 -1
  11. package/dist/core/errors.d.ts.map +1 -1
  12. package/dist/core/errors.js.map +1 -1
  13. package/dist/core/step-config/materialize-job-execution-steps.js +2 -0
  14. package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
  15. package/dist/core/step-config/resolve-step-config.js +3 -1
  16. package/dist/core/step-config/resolve-step-config.js.map +1 -1
  17. package/dist/db/db.d.ts +8 -8
  18. package/dist/db/index.d.ts +1 -1
  19. package/dist/db/index.d.ts.map +1 -1
  20. package/dist/db/index.js +1 -1
  21. package/dist/db/index.js.map +1 -1
  22. package/dist/db/schema/steps.d.ts +2 -2
  23. package/dist/db/schema/workflow-run-attempts.d.ts +2 -2
  24. package/dist/db/workflow-runs/outbox.d.ts +1 -0
  25. package/dist/db/workflow-runs/outbox.d.ts.map +1 -1
  26. package/dist/db/workflow-runs/outbox.js +2 -1
  27. package/dist/db/workflow-runs/outbox.js.map +1 -1
  28. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  29. package/dist/db/workflow-runs/run-create.js +49 -1
  30. package/dist/db/workflow-runs/run-create.js.map +1 -1
  31. package/dist/db/workflow-runs/steps.d.ts +6 -0
  32. package/dist/db/workflow-runs/steps.d.ts.map +1 -1
  33. package/dist/db/workflow-runs/steps.js +14 -0
  34. package/dist/db/workflow-runs/steps.js.map +1 -1
  35. package/dist/db/workflow-runs.d.ts +1 -1
  36. package/dist/db/workflow-runs.d.ts.map +1 -1
  37. package/dist/db/workflow-runs.js +1 -1
  38. package/dist/db/workflow-runs.js.map +1 -1
  39. package/dist/presentation/inter-module.d.ts.map +1 -1
  40. package/dist/presentation/inter-module.js +6 -1
  41. package/dist/presentation/inter-module.js.map +1 -1
  42. package/dist/tsconfig.test.tsbuildinfo +1 -1
  43. package/package.json +8 -8
  44. package/src/core/agent-tools.test.ts +85 -0
  45. package/src/core/agent-tools.ts +11 -3
  46. package/src/core/entities/step.ts +1 -1
  47. package/src/core/errors.ts +2 -0
  48. package/src/core/job-execution.test.ts +1 -0
  49. package/src/core/run-workflow.test.ts +4 -0
  50. package/src/core/step-config/materialize-job-execution-steps.ts +2 -0
  51. package/src/core/step-config/resolve-step-config.ts +4 -1
  52. package/src/db/index.ts +1 -0
  53. package/src/db/workflow-runs/outbox.ts +2 -0
  54. package/src/db/workflow-runs/run-create.test.ts +41 -0
  55. package/src/db/workflow-runs/run-create.ts +81 -3
  56. package/src/db/workflow-runs/steps.ts +19 -0
  57. package/src/db/workflow-runs.ts +1 -0
  58. package/src/presentation/inter-module.test.ts +26 -0
  59. package/src/presentation/inter-module.ts +9 -1
  60. package/src/presentation/routes/agent-runtime-config.test.ts +2 -0
  61. package/test/factories/workflow-model.ts +74 -2
  62. package/test/fixtures/agent-inter-module.ts +2 -0
  63. package/tsconfig.build.tsbuildinfo +1 -1
package/dist/db/db.d.ts CHANGED
@@ -554,7 +554,7 @@ export declare const schema: {
554
554
  dataType: "json";
555
555
  columnType: "PgJsonb";
556
556
  data: import("@shipfox/api-definitions-dto").WorkflowModel | {
557
- version: 2;
557
+ version: 2 | 3;
558
558
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
559
559
  };
560
560
  driverParam: unknown;
@@ -569,7 +569,7 @@ export declare const schema: {
569
569
  generated: undefined;
570
570
  }, {}, {
571
571
  $type: import("@shipfox/api-definitions-dto").WorkflowModel | {
572
- version: 2;
572
+ version: 2 | 3;
573
573
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
574
574
  };
575
575
  }>;
@@ -1952,7 +1952,7 @@ export declare const schema: {
1952
1952
  tableName: "steps";
1953
1953
  dataType: "string";
1954
1954
  columnType: "PgText";
1955
- data: "agent" | "checkout" | "run" | "setup";
1955
+ data: "agent" | "checkout" | "run" | "setup" | "tool";
1956
1956
  driverParam: string;
1957
1957
  notNull: true;
1958
1958
  hasDefault: false;
@@ -1964,7 +1964,7 @@ export declare const schema: {
1964
1964
  identity: undefined;
1965
1965
  generated: undefined;
1966
1966
  }, {}, {
1967
- $type: "agent" | "checkout" | "run" | "setup";
1967
+ $type: "agent" | "checkout" | "run" | "setup" | "tool";
1968
1968
  }>;
1969
1969
  config: import("drizzle-orm/pg-core").PgColumn<{
1970
1970
  name: "config";
@@ -3224,7 +3224,7 @@ export declare function db(): NodePgDatabase<{
3224
3224
  dataType: "json";
3225
3225
  columnType: "PgJsonb";
3226
3226
  data: import("@shipfox/api-definitions-dto").WorkflowModel | {
3227
- version: 2;
3227
+ version: 2 | 3;
3228
3228
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
3229
3229
  };
3230
3230
  driverParam: unknown;
@@ -3239,7 +3239,7 @@ export declare function db(): NodePgDatabase<{
3239
3239
  generated: undefined;
3240
3240
  }, {}, {
3241
3241
  $type: import("@shipfox/api-definitions-dto").WorkflowModel | {
3242
- version: 2;
3242
+ version: 2 | 3;
3243
3243
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
3244
3244
  };
3245
3245
  }>;
@@ -4622,7 +4622,7 @@ export declare function db(): NodePgDatabase<{
4622
4622
  tableName: "steps";
4623
4623
  dataType: "string";
4624
4624
  columnType: "PgText";
4625
- data: "agent" | "checkout" | "run" | "setup";
4625
+ data: "agent" | "checkout" | "run" | "setup" | "tool";
4626
4626
  driverParam: string;
4627
4627
  notNull: true;
4628
4628
  hasDefault: false;
@@ -4634,7 +4634,7 @@ export declare function db(): NodePgDatabase<{
4634
4634
  identity: undefined;
4635
4635
  generated: undefined;
4636
4636
  }, {}, {
4637
- $type: "agent" | "checkout" | "run" | "setup";
4637
+ $type: "agent" | "checkout" | "run" | "setup" | "tool";
4638
4638
  }>;
4639
4639
  config: import("drizzle-orm/pg-core").PgColumn<{
4640
4640
  name: "config";
@@ -5,6 +5,6 @@ export { activateJobListener, countActiveListeners, drainListenerEventsIntoExecu
5
5
  export { workflowsOutbox } from './schema/outbox.js';
6
6
  export { workflowRunCounters } from './schema/workflow-run-counters.js';
7
7
  export type { BulkUpdateStepStatusesParams, CancelWorkflowRunParams, CreateRerunWorkflowRunParams, CreateWorkflowRunParams, EvaluateJobActivationsParams, FailWorkflowRunAsTimedOutParams, JobActivationDecision, ListWorkflowRunsParams, ListWorkflowRunsResult, StepAttemptDetail, UpdateJobExecutionStatusParams, UpdateJobStatusParams, UpdateWorkflowRunStatusParams, WorkflowJobExecutionDepth, WorkflowJobExecutionDepthParams, WorkflowRunAggregates, WorkflowRunFilters, WorkflowRunJobRawStatusCount, WorkflowRunJobStatusCount, WorkflowRunJobSummary, WorkflowRunJobSummaryTarget, WorkflowRunJobsSummary, } from './workflow-runs.js';
8
- export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus, } from './workflow-runs.js';
8
+ export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listStepAttemptIdsByJobId, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus, } from './workflow-runs.js';
9
9
  export declare const migrationsPath: string;
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gCAAgC,EAChC,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,mBAAmB,EAAC,MAAM,mCAAmC,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,8BAA8B,EAC9B,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,sCAAsC,EACtC,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,mCAAmC,EACnC,iCAAiC,EACjC,wBAAwB,EACxB,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAoE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gCAAgC,EAChC,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,mBAAmB,EAAC,MAAM,mCAAmC,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,8BAA8B,EAC9B,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,sCAAsC,EACtC,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EACzB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,mCAAmC,EACnC,iCAAiC,EACjC,wBAAwB,EACxB,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAoE,CAAC"}
package/dist/db/index.js CHANGED
@@ -5,7 +5,7 @@ export { deliverEventToListener } from './job-listener-events.js';
5
5
  export { activateJobListener, countActiveListeners, drainListenerEventsIntoExecution, peekListenerBuffer, resolveJobListener, settleListenerJobExecution } from './job-listeners.js';
6
6
  export { workflowsOutbox } from './schema/outbox.js';
7
7
  export { workflowRunCounters } from './schema/workflow-run-counters.js';
8
- export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus } from './workflow-runs.js';
8
+ export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listStepAttemptIdsByJobId, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus } from './workflow-runs.js';
9
9
  export const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');
10
10
 
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/db/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nexport {closeDb, db, schema} from './db.js';\nexport {\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n deliverEventToListener,\n} from './job-listener-events.js';\nexport type {\n ActivateJobListenerParams,\n ActivateJobListenerResult,\n DrainListenerEventsParams,\n DrainListenerEventsResult,\n ListenerBufferPeek,\n} from './job-listeners.js';\nexport {\n activateJobListener,\n countActiveListeners,\n drainListenerEventsIntoExecution,\n peekListenerBuffer,\n resolveJobListener,\n settleListenerJobExecution,\n} from './job-listeners.js';\nexport {workflowsOutbox} from './schema/outbox.js';\nexport {workflowRunCounters} from './schema/workflow-run-counters.js';\nexport type {\n BulkUpdateStepStatusesParams,\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n EvaluateJobActivationsParams,\n FailWorkflowRunAsTimedOutParams,\n JobActivationDecision,\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n StepAttemptDetail,\n UpdateJobExecutionStatusParams,\n UpdateJobStatusParams,\n UpdateWorkflowRunStatusParams,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunFilters,\n WorkflowRunJobRawStatusCount,\n WorkflowRunJobStatusCount,\n WorkflowRunJobSummary,\n WorkflowRunJobSummaryTarget,\n WorkflowRunJobsSummary,\n} from './workflow-runs.js';\nexport {\n bulkUpdateStepStatuses,\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n evaluateJobActivations,\n failJobExecutionAsTimedOut,\n failWorkflowRunAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobById,\n getJobExecutionById,\n getJobExecutionDetail,\n getJobExecutionFailureOrigin,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n getLatestAttempt,\n getLatestJobExecutionByJobId,\n getStepAttemptDetail,\n getStepAttempts,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listWorkflowRunJobSummaries,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n queueJobExecution,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n resolveJobStatusFromJobExecutions,\n updateJobExecutionStatus,\n updateJobStatus,\n updateWorkflowRunStatus,\n} from './workflow-runs.js';\n\nexport const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');\n"],"names":["dirname","resolve","fileURLToPath","closeDb","db","schema","deliverEventToListener","activateJobListener","countActiveListeners","drainListenerEventsIntoExecution","peekListenerBuffer","resolveJobListener","settleListenerJobExecution","workflowsOutbox","workflowRunCounters","bulkUpdateStepStatuses","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","evaluateJobActivations","failJobExecutionAsTimedOut","failWorkflowRunAsTimedOut","getFirstJobExecutionByJobId","getJobById","getJobExecutionById","getJobExecutionDetail","getJobExecutionFailureOrigin","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","getLatestAttempt","getLatestJobExecutionByJobId","getStepAttemptDetail","getStepAttempts","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listWorkflowRunJobSummaries","listWorkflowRuns","listWorkflowRunsByProject","queueJobExecution","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","resolveJobStatusFromJobExecutions","updateJobExecutionStatus","updateJobStatus","updateWorkflowRunStatus","migrationsPath","url"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SAAQC,OAAO,EAAEC,EAAE,EAAEC,MAAM,QAAO,UAAU;AAC5C,SAGEC,sBAAsB,QACjB,2BAA2B;AAQlC,SACEC,mBAAmB,EACnBC,oBAAoB,EACpBC,gCAAgC,EAChCC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B,QACrB,qBAAqB;AAC5B,SAAQC,eAAe,QAAO,qBAAqB;AACnD,SAAQC,mBAAmB,QAAO,oCAAoC;AAyBtE,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,0BAA0B,EAC1BC,yBAAyB,EACzBC,2BAA2B,EAC3BC,UAAU,EACVC,mBAAmB,EACnBC,qBAAqB,EACrBC,4BAA4B,EAC5BC,uBAAuB,EACvBC,sCAAsC,EACtCC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,oBAAoB,EACpBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,2BAA2B,EAC3BC,gBAAgB,EAChBC,yBAAyB,EACzBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,mCAAmC,EACnCC,iCAAiC,EACjCC,wBAAwB,EACxBC,eAAe,EACfC,uBAAuB,QAClB,qBAAqB;AAE5B,OAAO,MAAMC,iBAAiBzD,QAAQD,QAAQE,cAAc,YAAYyD,GAAG,IAAI,iBAAiB"}
1
+ {"version":3,"sources":["../../src/db/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nexport {closeDb, db, schema} from './db.js';\nexport {\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n deliverEventToListener,\n} from './job-listener-events.js';\nexport type {\n ActivateJobListenerParams,\n ActivateJobListenerResult,\n DrainListenerEventsParams,\n DrainListenerEventsResult,\n ListenerBufferPeek,\n} from './job-listeners.js';\nexport {\n activateJobListener,\n countActiveListeners,\n drainListenerEventsIntoExecution,\n peekListenerBuffer,\n resolveJobListener,\n settleListenerJobExecution,\n} from './job-listeners.js';\nexport {workflowsOutbox} from './schema/outbox.js';\nexport {workflowRunCounters} from './schema/workflow-run-counters.js';\nexport type {\n BulkUpdateStepStatusesParams,\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n EvaluateJobActivationsParams,\n FailWorkflowRunAsTimedOutParams,\n JobActivationDecision,\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n StepAttemptDetail,\n UpdateJobExecutionStatusParams,\n UpdateJobStatusParams,\n UpdateWorkflowRunStatusParams,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunFilters,\n WorkflowRunJobRawStatusCount,\n WorkflowRunJobStatusCount,\n WorkflowRunJobSummary,\n WorkflowRunJobSummaryTarget,\n WorkflowRunJobsSummary,\n} from './workflow-runs.js';\nexport {\n bulkUpdateStepStatuses,\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n evaluateJobActivations,\n failJobExecutionAsTimedOut,\n failWorkflowRunAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobById,\n getJobExecutionById,\n getJobExecutionDetail,\n getJobExecutionFailureOrigin,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n getLatestAttempt,\n getLatestJobExecutionByJobId,\n getStepAttemptDetail,\n getStepAttempts,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listStepAttemptIdsByJobId,\n listWorkflowRunJobSummaries,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n queueJobExecution,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n resolveJobStatusFromJobExecutions,\n updateJobExecutionStatus,\n updateJobStatus,\n updateWorkflowRunStatus,\n} from './workflow-runs.js';\n\nexport const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');\n"],"names":["dirname","resolve","fileURLToPath","closeDb","db","schema","deliverEventToListener","activateJobListener","countActiveListeners","drainListenerEventsIntoExecution","peekListenerBuffer","resolveJobListener","settleListenerJobExecution","workflowsOutbox","workflowRunCounters","bulkUpdateStepStatuses","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","evaluateJobActivations","failJobExecutionAsTimedOut","failWorkflowRunAsTimedOut","getFirstJobExecutionByJobId","getJobById","getJobExecutionById","getJobExecutionDetail","getJobExecutionFailureOrigin","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","getLatestAttempt","getLatestJobExecutionByJobId","getStepAttemptDetail","getStepAttempts","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listStepAttemptIdsByJobId","listWorkflowRunJobSummaries","listWorkflowRuns","listWorkflowRunsByProject","queueJobExecution","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","resolveJobStatusFromJobExecutions","updateJobExecutionStatus","updateJobStatus","updateWorkflowRunStatus","migrationsPath","url"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SAAQC,OAAO,EAAEC,EAAE,EAAEC,MAAM,QAAO,UAAU;AAC5C,SAGEC,sBAAsB,QACjB,2BAA2B;AAQlC,SACEC,mBAAmB,EACnBC,oBAAoB,EACpBC,gCAAgC,EAChCC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B,QACrB,qBAAqB;AAC5B,SAAQC,eAAe,QAAO,qBAAqB;AACnD,SAAQC,mBAAmB,QAAO,oCAAoC;AAyBtE,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,0BAA0B,EAC1BC,yBAAyB,EACzBC,2BAA2B,EAC3BC,UAAU,EACVC,mBAAmB,EACnBC,qBAAqB,EACrBC,4BAA4B,EAC5BC,uBAAuB,EACvBC,sCAAsC,EACtCC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,oBAAoB,EACpBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,yBAAyB,EACzBC,2BAA2B,EAC3BC,gBAAgB,EAChBC,yBAAyB,EACzBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,mCAAmC,EACnCC,iCAAiC,EACjCC,wBAAwB,EACxBC,eAAe,EACfC,uBAAuB,QAClB,qBAAqB;AAE5B,OAAO,MAAMC,iBAAiB1D,QAAQD,QAAQE,cAAc,YAAY0D,GAAG,IAAI,iBAAiB"}
@@ -151,7 +151,7 @@ export declare const steps: import("drizzle-orm/pg-core").PgTableWithColumns<{
151
151
  tableName: "steps";
152
152
  dataType: "string";
153
153
  columnType: "PgText";
154
- data: "agent" | "checkout" | "run" | "setup";
154
+ data: "agent" | "checkout" | "run" | "setup" | "tool";
155
155
  driverParam: string;
156
156
  notNull: true;
157
157
  hasDefault: false;
@@ -163,7 +163,7 @@ export declare const steps: import("drizzle-orm/pg-core").PgTableWithColumns<{
163
163
  identity: undefined;
164
164
  generated: undefined;
165
165
  }, {}, {
166
- $type: "agent" | "checkout" | "run" | "setup";
166
+ $type: "agent" | "checkout" | "run" | "setup" | "tool";
167
167
  }>;
168
168
  config: import("drizzle-orm/pg-core").PgColumn<{
169
169
  name: "config";
@@ -113,7 +113,7 @@ export declare const workflowRunAttempts: import("drizzle-orm/pg-core").PgTableW
113
113
  dataType: "json";
114
114
  columnType: "PgJsonb";
115
115
  data: WorkflowModel | {
116
- version: 2;
116
+ version: 2 | 3;
117
117
  model: WorkflowModel;
118
118
  };
119
119
  driverParam: unknown;
@@ -128,7 +128,7 @@ export declare const workflowRunAttempts: import("drizzle-orm/pg-core").PgTableW
128
128
  generated: undefined;
129
129
  }, {}, {
130
130
  $type: WorkflowModel | {
131
- version: 2;
131
+ version: 2 | 3;
132
132
  model: WorkflowModel;
133
133
  };
134
134
  }>;
@@ -21,6 +21,7 @@ export declare function writeJobStepsSettledOutbox(tx: Tx, params: {
21
21
  status: 'succeeded' | 'failed';
22
22
  }): Promise<void>;
23
23
  export declare function writeStepAttemptTerminatedOutbox(tx: Tx, params: {
24
+ stepAttemptId: string;
24
25
  stepId: string;
25
26
  attempt: number;
26
27
  status: 'succeeded' | 'failed' | 'cancelled';
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/outbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,UAAU,CAAC;AAMjC,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iCAAiC,CACrD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACjD,GACA,OAAO,CAAC,IAAI,CAAC,CAsBf;AAMD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAC,GAC9E,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,gCAAgC,CACpD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,UAAU,EAAE,aAAa,CAAC;CAC3B,GACA,OAAO,CAAC,IAAI,CAAC,CAiBf;AA8BD,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/outbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,UAAU,CAAC;AAMjC,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iCAAiC,CACrD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACjD,GACA,OAAO,CAAC,IAAI,CAAC,CAsBf;AAMD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAC,GAC9E,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,gCAAgC,CACpD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,UAAU,EAAE,aAAa,CAAC;CAC3B,GACA,OAAO,CAAC,IAAI,CAAC,CAkBf;AA8BD,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -68,7 +68,8 @@ export async function writeStepAttemptTerminatedOutbox(tx, params) {
68
68
  stepId: params.stepId,
69
69
  attempt: params.attempt,
70
70
  status: params.status,
71
- logOutcome: params.logOutcome
71
+ logOutcome: params.logOutcome,
72
+ stepAttemptId: params.stepAttemptId
72
73
  }
73
74
  });
74
75
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/workflow-runs/outbox.ts"],"sourcesContent":["import {\n type LogOutcomeDto,\n WORKFLOWS_JOB_EXECUTION_QUEUED,\n WORKFLOWS_JOB_EXECUTION_TERMINATED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n WORKFLOWS_STEP_RESTART_ENQUEUED,\n} from '@shipfox/api-workflows-dto';\nimport {eq} from 'drizzle-orm';\nimport type {JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecutionStatus} from '#core/entities/job-execution.js';\nimport type {Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions} from '../schema/job-executions.js';\nimport {steps} from '../schema/steps.js';\nimport {getWorkflowContextForJob} from './shared.js';\n\nexport async function writeJobExecutionQueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n requiredLabels: string[];\n queuedAt: Date;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_QUEUED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n requiredLabels: params.requiredLabels,\n queuedAt: params.queuedAt.toISOString(),\n },\n });\n}\n\nexport async function writeJobExecutionTerminatedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n status: JobExecutionStatus;\n statusReason: JobStatusReason | null;\n statusReasonMessage?: string | null | undefined;\n },\n): Promise<void> {\n if (\n params.status !== 'succeeded' &&\n params.status !== 'failed' &&\n params.status !== 'cancelled'\n ) {\n throw new Error(`Cannot enqueue terminal job execution event for status ${params.status}`);\n }\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_TERMINATED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n statusReason: params.statusReason,\n statusReasonMessage: params.statusReasonMessage ?? null,\n },\n });\n}\n\n// Enqueue the steps-settled signal in the same transaction as the final per-step\n// result, so per-step execution observes it exactly once (the outbox is at-least-once;\n// the job workflow dedupes the signal). Drives the Temporal JOB_FINISHED_SIGNAL; the\n// job's terminal fact is emitted separately by updateJobStatusAtVersion.\nexport async function writeJobStepsSettledOutbox(\n tx: Tx,\n params: {jobId: string; jobExecutionId: string; status: 'succeeded' | 'failed'},\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_STEPS_SETTLED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n },\n });\n}\n\nexport async function writeStepAttemptTerminatedOutbox(\n tx: Tx,\n params: {\n stepId: string;\n attempt: number;\n status: 'succeeded' | 'failed' | 'cancelled';\n logOutcome: LogOutcomeDto;\n },\n): Promise<void> {\n const identity = await getStepAttemptTerminatedOutboxIdentity(tx, params.stepId);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n payload: {\n jobId: identity.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n stepId: params.stepId,\n attempt: params.attempt,\n status: params.status,\n logOutcome: params.logOutcome,\n },\n });\n}\n\nasync function getStepAttemptTerminatedOutboxIdentity(\n tx: Tx,\n stepId: string,\n): Promise<{\n jobId: string;\n workflowRunId: string;\n workflowRunAttemptId: string;\n workspaceId: string;\n projectId: string;\n}> {\n const rows = await tx\n .select({\n jobId: jobExecutions.jobId,\n })\n .from(steps)\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(eq(steps.id, stepId))\n .limit(1);\n const step = rows[0];\n if (!step) {\n throw new Error(`Cannot enqueue step-attempt-terminated event: step ${stepId} not found`);\n }\n\n return getWorkflowContextForJob(step.jobId, tx);\n}\n\n// Enqueue the durable audit record of a restart, in the same transaction as the\n// rewind. Looks up the workflow run id like writeJobStepsSettledOutbox.\nexport async function writeStepRestartEnqueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n failedStepId: string;\n failedStepAttempt: number;\n restartFromStepId: string;\n feedback: string;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_RESTART_ENQUEUED,\n payload: {\n jobId: params.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n failedStepId: params.failedStepId,\n failedStepAttempt: params.failedStepAttempt,\n restartFromStepId: params.restartFromStepId,\n feedback: params.feedback,\n },\n });\n}\n"],"names":["WORKFLOWS_JOB_EXECUTION_QUEUED","WORKFLOWS_JOB_EXECUTION_TERMINATED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_STEP_ATTEMPT_TERMINATED","WORKFLOWS_STEP_RESTART_ENQUEUED","eq","writeWorkflowsOutboxEvent","jobExecutions","steps","getWorkflowContextForJob","writeJobExecutionQueuedOutbox","tx","params","identity","jobId","type","payload","jobExecutionId","workflowRunId","workflowRunAttemptId","workspaceId","projectId","requiredLabels","queuedAt","toISOString","writeJobExecutionTerminatedOutbox","status","Error","statusReason","statusReasonMessage","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","getStepAttemptTerminatedOutboxIdentity","stepId","attempt","logOutcome","rows","select","from","innerJoin","id","where","limit","step","writeStepRestartEnqueuedOutbox","failedStepId","failedStepAttempt","restartFromStepId","feedback"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/workflow-runs/outbox.ts"],"sourcesContent":["import {\n type LogOutcomeDto,\n WORKFLOWS_JOB_EXECUTION_QUEUED,\n WORKFLOWS_JOB_EXECUTION_TERMINATED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n WORKFLOWS_STEP_RESTART_ENQUEUED,\n} from '@shipfox/api-workflows-dto';\nimport {eq} from 'drizzle-orm';\nimport type {JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecutionStatus} from '#core/entities/job-execution.js';\nimport type {Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions} from '../schema/job-executions.js';\nimport {steps} from '../schema/steps.js';\nimport {getWorkflowContextForJob} from './shared.js';\n\nexport async function writeJobExecutionQueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n requiredLabels: string[];\n queuedAt: Date;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_QUEUED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n requiredLabels: params.requiredLabels,\n queuedAt: params.queuedAt.toISOString(),\n },\n });\n}\n\nexport async function writeJobExecutionTerminatedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n status: JobExecutionStatus;\n statusReason: JobStatusReason | null;\n statusReasonMessage?: string | null | undefined;\n },\n): Promise<void> {\n if (\n params.status !== 'succeeded' &&\n params.status !== 'failed' &&\n params.status !== 'cancelled'\n ) {\n throw new Error(`Cannot enqueue terminal job execution event for status ${params.status}`);\n }\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_TERMINATED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n statusReason: params.statusReason,\n statusReasonMessage: params.statusReasonMessage ?? null,\n },\n });\n}\n\n// Enqueue the steps-settled signal in the same transaction as the final per-step\n// result, so per-step execution observes it exactly once (the outbox is at-least-once;\n// the job workflow dedupes the signal). Drives the Temporal JOB_FINISHED_SIGNAL; the\n// job's terminal fact is emitted separately by updateJobStatusAtVersion.\nexport async function writeJobStepsSettledOutbox(\n tx: Tx,\n params: {jobId: string; jobExecutionId: string; status: 'succeeded' | 'failed'},\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_STEPS_SETTLED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n },\n });\n}\n\nexport async function writeStepAttemptTerminatedOutbox(\n tx: Tx,\n params: {\n stepAttemptId: string;\n stepId: string;\n attempt: number;\n status: 'succeeded' | 'failed' | 'cancelled';\n logOutcome: LogOutcomeDto;\n },\n): Promise<void> {\n const identity = await getStepAttemptTerminatedOutboxIdentity(tx, params.stepId);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n payload: {\n jobId: identity.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n stepId: params.stepId,\n attempt: params.attempt,\n status: params.status,\n logOutcome: params.logOutcome,\n stepAttemptId: params.stepAttemptId,\n },\n });\n}\n\nasync function getStepAttemptTerminatedOutboxIdentity(\n tx: Tx,\n stepId: string,\n): Promise<{\n jobId: string;\n workflowRunId: string;\n workflowRunAttemptId: string;\n workspaceId: string;\n projectId: string;\n}> {\n const rows = await tx\n .select({\n jobId: jobExecutions.jobId,\n })\n .from(steps)\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(eq(steps.id, stepId))\n .limit(1);\n const step = rows[0];\n if (!step) {\n throw new Error(`Cannot enqueue step-attempt-terminated event: step ${stepId} not found`);\n }\n\n return getWorkflowContextForJob(step.jobId, tx);\n}\n\n// Enqueue the durable audit record of a restart, in the same transaction as the\n// rewind. Looks up the workflow run id like writeJobStepsSettledOutbox.\nexport async function writeStepRestartEnqueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n failedStepId: string;\n failedStepAttempt: number;\n restartFromStepId: string;\n feedback: string;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_RESTART_ENQUEUED,\n payload: {\n jobId: params.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n failedStepId: params.failedStepId,\n failedStepAttempt: params.failedStepAttempt,\n restartFromStepId: params.restartFromStepId,\n feedback: params.feedback,\n },\n });\n}\n"],"names":["WORKFLOWS_JOB_EXECUTION_QUEUED","WORKFLOWS_JOB_EXECUTION_TERMINATED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_STEP_ATTEMPT_TERMINATED","WORKFLOWS_STEP_RESTART_ENQUEUED","eq","writeWorkflowsOutboxEvent","jobExecutions","steps","getWorkflowContextForJob","writeJobExecutionQueuedOutbox","tx","params","identity","jobId","type","payload","jobExecutionId","workflowRunId","workflowRunAttemptId","workspaceId","projectId","requiredLabels","queuedAt","toISOString","writeJobExecutionTerminatedOutbox","status","Error","statusReason","statusReasonMessage","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","getStepAttemptTerminatedOutboxIdentity","stepId","attempt","logOutcome","stepAttemptId","rows","select","from","innerJoin","id","where","limit","step","writeStepRestartEnqueuedOutbox","failedStepId","failedStepAttempt","restartFromStepId","feedback"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAQpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAoB/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACvC,SAAS,CAAC,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAChF,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0M7F;AA2BD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAkC9C"}
1
+ {"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAQpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAoB/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACvC,SAAS,CAAC,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAChF,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0M7F;AA2BD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAkC9C"}
@@ -356,7 +356,7 @@ function referencedVariables(model, jobs) {
356
356
  collectFieldVariableReferences(step.templates?.name, references, {
357
357
  field: 'step.name'
358
358
  });
359
- collectFieldVariableReferences(step.templates?.workingDirectory, references, {
359
+ collectFieldVariableReferences(step.kind === 'tool' ? undefined : step.templates?.workingDirectory, references, {
360
360
  field: 'step.working_directory'
361
361
  });
362
362
  if (step.kind === 'run') {
@@ -374,6 +374,16 @@ function referencedVariables(model, jobs) {
374
374
  collectFieldVariableReferences(step.templates?.provider, references, {
375
375
  field: 'agent.provider'
376
376
  });
377
+ } else if (step.kind === 'tool') {
378
+ collectTemplateTreeVariableReferences(step.templates?.with, references, {
379
+ field: 'tool.with'
380
+ });
381
+ for (const [key, expression] of Object.entries(step.outputMappings ?? {})){
382
+ collectExpressionVariableReferences(expression, references, {
383
+ field: 'tool.outputs',
384
+ envKey: key
385
+ });
386
+ }
377
387
  } else if (step.kind === 'checkout') {
378
388
  for (const [key, field] of WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS){
379
389
  collectFieldVariableReferences(step.checkout.templates?.[key], references, {
@@ -420,6 +430,44 @@ function collectFieldVariableReferences(template, references, source) {
420
430
  }
421
431
  }
422
432
  }
433
+ /**
434
+ * Collect `vars.*` references from a tool step's `with` template tree: a
435
+ * `WorkflowJsonTemplateTree` mirrors the authored `with` payload with every
436
+ * interpolated string leaf replaced by its parsed template, so walk it like
437
+ * the authored structure and collect from each leaf template.
438
+ */ function collectTemplateTreeVariableReferences(tree, references, source) {
439
+ if (tree === undefined) return;
440
+ if (Array.isArray(tree)) {
441
+ // A field template is itself an array of segments; a `with` list is an
442
+ // array of child trees. Segments carry a `kind`, so distinguish the two.
443
+ if (tree.every((element)=>isFieldTemplateSegment(element))) {
444
+ collectFieldVariableReferences(tree, references, source);
445
+ return;
446
+ }
447
+ for (const child of tree)collectTemplateTreeVariableReferences(child, references, source);
448
+ return;
449
+ }
450
+ if (typeof tree === 'object') {
451
+ for (const child of Object.values(tree)){
452
+ collectTemplateTreeVariableReferences(child, references, source);
453
+ }
454
+ }
455
+ }
456
+ function isFieldTemplateSegment(value) {
457
+ return typeof value === 'object' && value !== null && (value.kind === 'literal' || value.kind === 'deferred');
458
+ }
459
+ function collectExpressionVariableReferences(expression, references, source) {
460
+ const keyAccess = analyzeContextKeyAccess(expression);
461
+ for (const reference of keyAccess.references){
462
+ if (reference.root !== 'vars') continue;
463
+ references.push({
464
+ key: reference.key,
465
+ field: source.field,
466
+ source: expression.source,
467
+ envKey: source.envKey
468
+ });
469
+ }
470
+ }
423
471
  function logTemplateDiagnostics(params) {
424
472
  if (params.diagnostics.length === 0) return;
425
473
  logger().warn({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/workflow-runs/run-create.ts"],"sourcesContent":["import {\n createWorkflowModelSnapshot,\n WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS,\n type WorkflowModel,\n} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {\n analyzeContextKeyAccess,\n type ResolvedFieldSegment,\n type WorkflowExpression,\n} from '@shipfox/expression';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {eq, sql} from 'drizzle-orm';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport {\n createAgentToolMaterializationSnapshot,\n loadAgentToolMaterializationContext,\n} from '#core/agent-tools.js';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowRunDevSource,\n WorkflowRunOrigin,\n WorkflowSourceSnapshot,\n} from '#core/entities/workflow-run.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport {resolveWorkflowRunTriggerReference} from '#core/resolve-trigger-reference.js';\nimport {assembleCreationContext} from '#core/step-config/assemble-run-context.js';\nimport type {MaterializedWorkflowJob} from '#core/step-config/materialize-workflow-model.js';\nimport type {WorkflowStepTemplateDiagnostic} from '#core/step-config/resolve-step-config.js';\nimport {resolveWorkflowRunName} from '#core/step-config/resolve-workflow-run-name.js';\nimport {\n deriveInitialJobExecutionPlan,\n materializeWorkflowRunJobs,\n} from '#core/workflow-run-creation.js';\nimport {\n recordWorkflowDisplayNameResolutionDegraded,\n recordWorkflowRunCreated,\n} from '#metrics/instance.js';\nimport {db, type Tx} from '../db.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {workflowRunCounters} from '../schema/workflow-run-counters.js';\nimport {toWorkflowRun, type WorkflowRunDevSourceDb, workflowRuns} from '../schema/workflow-runs.js';\nimport {type MaterializedRunGraphJob, persistMaterializedRunGraph} from './run-graph.js';\n\nexport type WorkflowModelJob = WorkflowModel['jobs'][number];\n\nexport interface ReferencedVariable {\n readonly key: string;\n readonly field: InterpolationUnresolvableError['field'];\n readonly source: string;\n readonly envKey?: string | undefined;\n}\n\nexport interface CreateWorkflowRunParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n name?: string | undefined;\n model: WorkflowModel;\n triggerPayload: TriggerPayload;\n triggerConnectionId?: string | undefined;\n inputs?: Record<string, unknown> | undefined;\n sourceSnapshot?: WorkflowSourceSnapshot | null | undefined;\n triggerIdempotencyKey?: string | undefined;\n /** Run provenance. Defaults to a synced run with no dev source. */\n origin?: WorkflowRunOrigin | undefined;\n devSource?: WorkflowRunDevSource | null | undefined;\n resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function createWorkflowRun(params: CreateWorkflowRunParams): Promise<WorkflowRun> {\n const triggerReference = await resolveWorkflowRunTriggerReference({\n workspaceId: params.workspaceId,\n triggerConnectionId: params.triggerConnectionId,\n triggerPayload: params.triggerPayload,\n integrations: params.integrations,\n projects: params.projects,\n });\n const staticName = params.name ?? params.model.name;\n const agentToolContext =\n params.integrations === undefined\n ? undefined\n : await loadAgentToolMaterializationContext({\n model: params.model,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n integrations: params.integrations,\n projects: params.projects,\n });\n const agentToolMaterialization = createAgentToolMaterializationSnapshot({\n model: params.model,\n context: agentToolContext,\n });\n const result = await db().transaction(async (tx) => {\n // Serialize idempotent trigger resolution separately from per-definition number\n // allocation so a replay never consumes a number, including when two deliveries\n // race before either run is visible.\n if (params.triggerIdempotencyKey) {\n await tx.execute(\n sql`select pg_advisory_xact_lock(hashtext(${params.triggerIdempotencyKey}))`,\n );\n const existing = await tx\n .select()\n .from(workflowRuns)\n .where(eq(workflowRuns.triggerIdempotencyKey, params.triggerIdempotencyKey))\n .limit(1);\n const existingRow = existing[0];\n if (existingRow) return {run: toWorkflowRun(existingRow), created: false};\n }\n\n // Keep allocation on the existing transaction so a trigger burst cannot pin\n // every pool connection and then wait for a second connection per run.\n const number = await allocateWorkflowRunNumber(tx, params.definitionId);\n\n const insertResult = await tx\n .insert(workflowRuns)\n .values({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n number,\n name: null,\n workflowName: staticName,\n status: 'pending',\n currentAttempt: 1,\n triggerProvider: params.triggerPayload.provider ?? null,\n triggerSource: params.triggerPayload.source,\n triggerEvent: params.triggerPayload.event,\n triggerPayload: params.triggerPayload,\n triggerReference,\n inputs: params.inputs ?? null,\n sourceSnapshot: params.sourceSnapshot ?? null,\n triggerIdempotencyKey: params.triggerIdempotencyKey ?? null,\n origin: params.origin ?? 'synced',\n devSource:\n params.devSource === undefined || params.devSource === null\n ? null\n : toWorkflowRunDevSourceDb(params.devSource),\n })\n .onConflictDoNothing({target: workflowRuns.triggerIdempotencyKey})\n .returning();\n\n const runRow = insertResult[0];\n if (!runRow) {\n // Conflict path: skip jobs/steps/outbox so the first insert keeps ownership of side effects.\n if (!params.triggerIdempotencyKey) {\n throw new Error('Insert returned no rows');\n }\n const existing = await tx\n .select()\n .from(workflowRuns)\n .where(eq(workflowRuns.triggerIdempotencyKey, params.triggerIdempotencyKey))\n .limit(1);\n const existingRow = existing[0];\n if (!existingRow) {\n throw new Error(\n `Idempotency conflict but existing run missing for key ${params.triggerIdempotencyKey}`,\n );\n }\n return {run: toWorkflowRun(existingRow), created: false};\n }\n\n // Resolving run-creation templates and predicates here gives them a stable variable snapshot\n // and interpolation access to the inserted run id. Run-name resolution is display-only and\n // persists only a resolved override. If resolution fails, the transaction rolls back the run,\n // jobs, steps, and outbox event together. Listening steps are resolved later when a job\n // execution is created.\n const provisionalRun = toWorkflowRun(runRow);\n const oneShotJobs = params.model.jobs.filter((job) => job.mode !== 'listening');\n const vars = await loadReferencedVariables({\n model: params.model,\n jobs: oneShotJobs,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n secrets: params.secrets,\n });\n const runNameResolution = resolveWorkflowRunName({\n runName: params.model.runName,\n context: assembleCreationContext({\n run: provisionalRun,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars,\n }).values,\n });\n const [resolvedRunRow] = await tx\n .update(workflowRuns)\n .set({name: runNameResolution.value, updatedAt: new Date()})\n .where(eq(workflowRuns.id, provisionalRun.id))\n .returning();\n if (!resolvedRunRow)\n throw new Error(`Workflow run missing after name resolution: ${runRow.id}`);\n const run = toWorkflowRun(resolvedRunRow);\n const [attemptRow] = await tx\n .insert(workflowRunAttempts)\n .values({\n workflowRunId: runRow.id,\n attempt: 1,\n status: 'pending',\n model: createWorkflowModelSnapshot(params.model),\n vars,\n agentToolMaterialization,\n })\n .returning();\n if (!attemptRow) throw new Error('Insert returned no rows');\n\n const materializedJobs = await materializeWorkflowRunJobs({\n run,\n model: params.model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n agentToolContext,\n agentToolSnapshot: agentToolMaterialization,\n });\n\n const graphJobs = materializeRunGraphJobs({\n params,\n run,\n vars,\n materializedJobs,\n });\n await persistMaterializedRunGraph(tx, {\n run,\n workflowRunAttempt: attemptRow,\n materializedJobs: graphJobs,\n });\n\n logTemplateDiagnostics({\n workflowRunId: runRow.id,\n diagnostics: materializedJobs.flatMap((job) =>\n job.steps.flatMap((step) =>\n (step.diagnostics ?? []).map((diagnostic) => ({\n jobKey: job.key,\n stepName: step.name,\n ...diagnostic,\n })),\n ),\n ),\n });\n\n return {\n run,\n created: true,\n nameDegradation: runNameResolution.degradation,\n };\n });\n\n if (result.created && result.nameDegradation !== undefined) {\n recordWorkflowDisplayNameResolutionDegraded('workflow.run_name', result.nameDegradation.cause);\n logger().warn(\n {\n workflowRunId: result.run.id,\n definitionId: result.run.definitionId,\n field: 'workflow.run_name',\n cause: result.nameDegradation.cause,\n ...(result.nameDegradation.expression === undefined\n ? {}\n : {expression: result.nameDegradation.expression.slice(0, 256)}),\n },\n 'Workflow run name resolution degraded to the static workflow name',\n );\n }\n\n if (result.created) {\n recordWorkflowRunCreated(result.run.triggerPayload.provider ?? result.run.triggerSource);\n }\n\n return result.run;\n}\n\nasync function allocateWorkflowRunNumber(tx: Tx, definitionId: string): Promise<number> {\n const [counterRow] = await tx\n .insert(workflowRunCounters)\n .values({definitionId, nextNumber: 2})\n .onConflictDoUpdate({\n target: workflowRunCounters.definitionId,\n set: {nextNumber: sql`${workflowRunCounters.nextNumber} + 1`},\n })\n .returning({number: sql<number>`${workflowRunCounters.nextNumber} - 1`});\n if (!counterRow) throw new Error('Run counter allocation returned no rows');\n return counterRow.number;\n}\n\n// The run entity carries camelCase dev-source fields while the persisted jsonb uses\n// snake_case keys, so the write boundary maps explicitly rather than spreading.\nfunction toWorkflowRunDevSourceDb(source: WorkflowRunDevSource): WorkflowRunDevSourceDb {\n return {\n ref: source.ref,\n commit: source.commit,\n config_path: source.configPath,\n initiated_by_user_id: source.initiatedByUserId,\n replay_of_event_id: source.replayOfEventId,\n };\n}\n\nexport async function loadReferencedVariables(params: {\n readonly model: WorkflowModel;\n readonly jobs?: readonly WorkflowModelJob[] | undefined;\n readonly workspaceId: string;\n readonly projectId: string;\n readonly definitionId: string;\n readonly secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<Record<string, string> | undefined> {\n const references = referencedVariables(params.model, params.jobs ?? params.model.jobs);\n const keys = [...new Set(references.map((reference) => reference.key))].sort();\n if (keys.length === 0) return undefined;\n\n const requiresSecrets = (reference: ReferencedVariable) =>\n reference.field !== 'job.execution_name' && reference.field !== 'workflow.run_name';\n const requiredReferences = references.filter(requiresSecrets);\n const requiredKeys = new Set(requiredReferences.map((reference) => reference.key));\n if (!params.secrets) {\n if (requiredKeys.size === 0) return undefined;\n throw new Error('Secrets client is not configured.');\n }\n const {values: vars} = await params.secrets.getVariablesByNamespace({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n namespace: '',\n });\n const missingKey = [...requiredKeys].find((key) => !(key in vars));\n if (missingKey !== undefined) {\n const reference = requiredReferences.find((candidate) => candidate.key === missingKey);\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: reference?.field ?? 'env',\n source: reference?.source ?? `vars.${missingKey}`,\n ...(reference?.envKey === undefined ? {} : {envKey: reference.envKey}),\n });\n }\n\n const referencedVars: Record<string, string> = {};\n for (const key of keys) {\n const value = vars[key];\n if (value !== undefined) referencedVars[key] = value;\n }\n return referencedVars;\n}\n\nfunction materializeRunGraphJobs(params: {\n readonly params: CreateWorkflowRunParams;\n readonly run: WorkflowRun;\n readonly vars: Record<string, string> | undefined;\n readonly materializedJobs: readonly MaterializedWorkflowJob[];\n}): readonly MaterializedRunGraphJob[] {\n return params.materializedJobs.map((job, jobIndex) => ({\n job: {\n key: job.key,\n mode: job.mode,\n name: job.name ?? null,\n status: 'pending' as const,\n checkoutPersistCredentials: job.checkout.persistCredentials,\n checkoutPermissionsContents: job.checkout.permissions.contents,\n success: job.success ?? null,\n executionTimeoutMs: job.executionTimeoutMs ?? null,\n listeningTimeoutMs: job.listening?.timeoutMs ?? null,\n maxExecutions: job.listening?.maxExecutions ?? null,\n onResolve: job.listening?.onResolve ?? null,\n batchDebounceMs: job.listening?.batch?.debounceMs ?? null,\n batchMaxSize: job.listening?.batch?.maxSize ?? null,\n batchMaxWaitMs: job.listening?.batch?.maxWaitMs ?? null,\n listeningOn: job.listening?.on ? [...job.listening.on] : null,\n listeningUntil: job.listening?.until ? [...job.listening.until] : null,\n dependencies: [...job.dependencies],\n runner: job.runner.length === 0 ? null : [...job.runner],\n position: job.position,\n },\n createExecution: (jobRow) => {\n if (jobRow.mode === 'listening') return undefined;\n\n const fallbackName = jobRow.name ?? jobRow.key;\n const modelJob = params.params.model.jobs[jobIndex];\n if (!modelJob) return undefined;\n const executionPlan = deriveInitialJobExecutionPlan({\n run: params.run,\n modelJob,\n job,\n jobId: jobRow.id,\n sequence: 1,\n fallbackName,\n triggerPayload: params.params.triggerPayload,\n inputs: params.params.inputs ?? null,\n vars: params.vars,\n });\n\n return {\n sequence: 1,\n // Persist only the resolved override. The core entity supplies the\n // static job name/key when this is null.\n name: executionPlan.nameOverride,\n runner: [...executionPlan.runner],\n status: 'pending' as const,\n evaluationTrace:\n executionPlan.evaluationTrace?.length === 0 ? null : executionPlan.evaluationTrace,\n };\n },\n createSteps: () =>\n job.steps.map((step) => ({\n key: step.key,\n name: step.name,\n sourceLocation: step.sourceLocation,\n status: step.status,\n type: step.type,\n config: step.config,\n condition: step.condition ?? null,\n configPlan: step.configPlan ?? null,\n authoredConfig: step.authoredConfig,\n position: step.position,\n })),\n }));\n}\n\nfunction referencedVariables(\n model: WorkflowModel,\n jobs: readonly WorkflowModelJob[],\n): readonly ReferencedVariable[] {\n const references: ReferencedVariable[] = [];\n\n for (const job of model.jobs) {\n collectPredicateVariableReferences(job.if, references);\n collectPredicateVariableReferences(job.success, references);\n\n for (const trigger of [...(job.listening?.on ?? []), ...(job.listening?.until ?? [])]) {\n collectPredicateVariableReferences(trigger.filter, references);\n }\n\n for (const step of job.steps) {\n collectPredicateVariableReferences(step.if, references);\n collectPredicateVariableReferences(step.gate?.success, references);\n }\n }\n\n collectFieldVariableReferences(model.runName, references, {field: 'workflow.run_name'});\n\n if (jobs.length > 0) {\n collectTemplateVariableReferences(model.templates?.env, references);\n }\n\n for (const job of jobs) {\n collectFieldVariableReferences(job.executionName, references, {field: 'job.execution_name'});\n for (const template of job.runnerTemplates ?? []) {\n collectFieldVariableReferences(template, references, {field: 'job.runner'});\n }\n collectTemplateVariableReferences(job.outputs, references, {field: 'job.outputs'});\n collectTemplateVariableReferences(job.templates?.env, references);\n\n for (const step of job.steps) {\n collectFieldVariableReferences(step.templates?.name, references, {field: 'step.name'});\n collectFieldVariableReferences(step.templates?.workingDirectory, references, {\n field: 'step.working_directory',\n });\n if (step.kind === 'run') {\n collectFieldVariableReferences(step.templates?.command, references, {field: 'run'});\n collectTemplateVariableReferences(step.templates?.env, references);\n } else if (step.kind === 'agent') {\n collectFieldVariableReferences(step.templates?.prompt, references, {field: 'agent.prompt'});\n collectFieldVariableReferences(step.templates?.model, references, {field: 'agent.model'});\n collectFieldVariableReferences(step.templates?.provider, references, {\n field: 'agent.provider',\n });\n } else if (step.kind === 'checkout') {\n for (const [key, field] of WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS) {\n collectFieldVariableReferences(step.checkout.templates?.[key], references, {field});\n }\n }\n }\n }\n\n return references;\n}\n\nfunction collectPredicateVariableReferences(\n expression: WorkflowExpression | string | undefined,\n references: ReferencedVariable[],\n): void {\n if (expression === undefined) return;\n\n const keyAccess = analyzeContextKeyAccess(expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: 'env',\n source: typeof expression === 'string' ? expression : expression.source,\n });\n }\n}\n\nfunction collectTemplateVariableReferences(\n templates: Readonly<Record<string, readonly ResolvedFieldSegment[]>> | undefined,\n references: ReferencedVariable[],\n source?: {\n readonly field: InterpolationUnresolvableError['field'];\n },\n): void {\n for (const [envKey, template] of Object.entries(templates ?? {})) {\n collectFieldVariableReferences(\n template,\n references,\n source === undefined ? {field: 'env', envKey} : source,\n );\n }\n}\n\nfunction collectFieldVariableReferences(\n template: readonly ResolvedFieldSegment[] | undefined,\n references: ReferencedVariable[],\n source: {\n readonly field: InterpolationUnresolvableError['field'];\n readonly envKey?: string | undefined;\n },\n): void {\n for (const segment of template ?? []) {\n if (segment.kind === 'literal') continue;\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: source.field,\n source: segment.expression.source,\n envKey: source.envKey,\n });\n }\n }\n}\n\nfunction logTemplateDiagnostics(params: {\n readonly workflowRunId: string;\n readonly diagnostics: readonly (WorkflowStepTemplateDiagnostic & {\n readonly jobKey: string;\n readonly stepName: string;\n })[];\n}): void {\n if (params.diagnostics.length === 0) return;\n\n logger().warn(\n {workflowRunId: params.workflowRunId, diagnostics: params.diagnostics},\n 'Workflow interpolation resolved with diagnostics',\n );\n}\n"],"names":["createWorkflowModelSnapshot","WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS","analyzeContextKeyAccess","logger","eq","sql","createAgentToolMaterializationSnapshot","loadAgentToolMaterializationContext","InterpolationUnresolvableError","resolveWorkflowRunTriggerReference","assembleCreationContext","resolveWorkflowRunName","deriveInitialJobExecutionPlan","materializeWorkflowRunJobs","recordWorkflowDisplayNameResolutionDegraded","recordWorkflowRunCreated","db","workflowRunAttempts","workflowRunCounters","toWorkflowRun","workflowRuns","persistMaterializedRunGraph","createWorkflowRun","params","triggerReference","workspaceId","triggerConnectionId","triggerPayload","integrations","projects","staticName","name","model","agentToolContext","undefined","projectId","agentToolMaterialization","context","result","transaction","tx","triggerIdempotencyKey","execute","existing","select","from","where","limit","existingRow","run","created","number","allocateWorkflowRunNumber","definitionId","insertResult","insert","values","workflowName","status","currentAttempt","triggerProvider","provider","triggerSource","source","triggerEvent","event","inputs","sourceSnapshot","origin","devSource","toWorkflowRunDevSourceDb","onConflictDoNothing","target","returning","runRow","Error","provisionalRun","oneShotJobs","jobs","filter","job","mode","vars","loadReferencedVariables","secrets","runNameResolution","runName","resolvedRunRow","update","set","value","updatedAt","Date","id","attemptRow","workflowRunId","attempt","materializedJobs","resolveAgentDefaults","agentToolSnapshot","graphJobs","materializeRunGraphJobs","workflowRunAttempt","logTemplateDiagnostics","diagnostics","flatMap","steps","step","map","diagnostic","jobKey","key","stepName","nameDegradation","degradation","cause","warn","field","expression","slice","counterRow","nextNumber","onConflictDoUpdate","ref","commit","config_path","configPath","initiated_by_user_id","initiatedByUserId","replay_of_event_id","replayOfEventId","references","referencedVariables","keys","Set","reference","sort","length","requiresSecrets","requiredReferences","requiredKeys","size","getVariablesByNamespace","namespace","missingKey","find","candidate","envKey","referencedVars","jobIndex","checkoutPersistCredentials","checkout","persistCredentials","checkoutPermissionsContents","permissions","contents","success","executionTimeoutMs","listeningTimeoutMs","listening","timeoutMs","maxExecutions","onResolve","batchDebounceMs","batch","debounceMs","batchMaxSize","maxSize","batchMaxWaitMs","maxWaitMs","listeningOn","on","listeningUntil","until","dependencies","runner","position","createExecution","jobRow","fallbackName","modelJob","executionPlan","jobId","sequence","nameOverride","evaluationTrace","createSteps","sourceLocation","type","config","condition","configPlan","authoredConfig","collectPredicateVariableReferences","if","trigger","gate","collectFieldVariableReferences","collectTemplateVariableReferences","templates","env","executionName","template","runnerTemplates","outputs","workingDirectory","kind","command","prompt","keyAccess","root","push","Object","entries","segment"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/workflow-runs/run-create.ts"],"sourcesContent":["import {\n createWorkflowModelSnapshot,\n WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS,\n type WorkflowJsonTemplateTree,\n type WorkflowModel,\n} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {\n analyzeContextKeyAccess,\n type ResolvedFieldSegment,\n type WorkflowExpression,\n} from '@shipfox/expression';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {eq, sql} from 'drizzle-orm';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport {\n createAgentToolMaterializationSnapshot,\n loadAgentToolMaterializationContext,\n} from '#core/agent-tools.js';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowRunDevSource,\n WorkflowRunOrigin,\n WorkflowSourceSnapshot,\n} from '#core/entities/workflow-run.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport {resolveWorkflowRunTriggerReference} from '#core/resolve-trigger-reference.js';\nimport {assembleCreationContext} from '#core/step-config/assemble-run-context.js';\nimport type {MaterializedWorkflowJob} from '#core/step-config/materialize-workflow-model.js';\nimport type {WorkflowStepTemplateDiagnostic} from '#core/step-config/resolve-step-config.js';\nimport {resolveWorkflowRunName} from '#core/step-config/resolve-workflow-run-name.js';\nimport {\n deriveInitialJobExecutionPlan,\n materializeWorkflowRunJobs,\n} from '#core/workflow-run-creation.js';\nimport {\n recordWorkflowDisplayNameResolutionDegraded,\n recordWorkflowRunCreated,\n} from '#metrics/instance.js';\nimport {db, type Tx} from '../db.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {workflowRunCounters} from '../schema/workflow-run-counters.js';\nimport {toWorkflowRun, type WorkflowRunDevSourceDb, workflowRuns} from '../schema/workflow-runs.js';\nimport {type MaterializedRunGraphJob, persistMaterializedRunGraph} from './run-graph.js';\n\nexport type WorkflowModelJob = WorkflowModel['jobs'][number];\n\nexport interface ReferencedVariable {\n readonly key: string;\n readonly field: InterpolationUnresolvableError['field'];\n readonly source: string;\n readonly envKey?: string | undefined;\n}\n\nexport interface CreateWorkflowRunParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n name?: string | undefined;\n model: WorkflowModel;\n triggerPayload: TriggerPayload;\n triggerConnectionId?: string | undefined;\n inputs?: Record<string, unknown> | undefined;\n sourceSnapshot?: WorkflowSourceSnapshot | null | undefined;\n triggerIdempotencyKey?: string | undefined;\n /** Run provenance. Defaults to a synced run with no dev source. */\n origin?: WorkflowRunOrigin | undefined;\n devSource?: WorkflowRunDevSource | null | undefined;\n resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function createWorkflowRun(params: CreateWorkflowRunParams): Promise<WorkflowRun> {\n const triggerReference = await resolveWorkflowRunTriggerReference({\n workspaceId: params.workspaceId,\n triggerConnectionId: params.triggerConnectionId,\n triggerPayload: params.triggerPayload,\n integrations: params.integrations,\n projects: params.projects,\n });\n const staticName = params.name ?? params.model.name;\n const agentToolContext =\n params.integrations === undefined\n ? undefined\n : await loadAgentToolMaterializationContext({\n model: params.model,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n integrations: params.integrations,\n projects: params.projects,\n });\n const agentToolMaterialization = createAgentToolMaterializationSnapshot({\n model: params.model,\n context: agentToolContext,\n });\n const result = await db().transaction(async (tx) => {\n // Serialize idempotent trigger resolution separately from per-definition number\n // allocation so a replay never consumes a number, including when two deliveries\n // race before either run is visible.\n if (params.triggerIdempotencyKey) {\n await tx.execute(\n sql`select pg_advisory_xact_lock(hashtext(${params.triggerIdempotencyKey}))`,\n );\n const existing = await tx\n .select()\n .from(workflowRuns)\n .where(eq(workflowRuns.triggerIdempotencyKey, params.triggerIdempotencyKey))\n .limit(1);\n const existingRow = existing[0];\n if (existingRow) return {run: toWorkflowRun(existingRow), created: false};\n }\n\n // Keep allocation on the existing transaction so a trigger burst cannot pin\n // every pool connection and then wait for a second connection per run.\n const number = await allocateWorkflowRunNumber(tx, params.definitionId);\n\n const insertResult = await tx\n .insert(workflowRuns)\n .values({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n number,\n name: null,\n workflowName: staticName,\n status: 'pending',\n currentAttempt: 1,\n triggerProvider: params.triggerPayload.provider ?? null,\n triggerSource: params.triggerPayload.source,\n triggerEvent: params.triggerPayload.event,\n triggerPayload: params.triggerPayload,\n triggerReference,\n inputs: params.inputs ?? null,\n sourceSnapshot: params.sourceSnapshot ?? null,\n triggerIdempotencyKey: params.triggerIdempotencyKey ?? null,\n origin: params.origin ?? 'synced',\n devSource:\n params.devSource === undefined || params.devSource === null\n ? null\n : toWorkflowRunDevSourceDb(params.devSource),\n })\n .onConflictDoNothing({target: workflowRuns.triggerIdempotencyKey})\n .returning();\n\n const runRow = insertResult[0];\n if (!runRow) {\n // Conflict path: skip jobs/steps/outbox so the first insert keeps ownership of side effects.\n if (!params.triggerIdempotencyKey) {\n throw new Error('Insert returned no rows');\n }\n const existing = await tx\n .select()\n .from(workflowRuns)\n .where(eq(workflowRuns.triggerIdempotencyKey, params.triggerIdempotencyKey))\n .limit(1);\n const existingRow = existing[0];\n if (!existingRow) {\n throw new Error(\n `Idempotency conflict but existing run missing for key ${params.triggerIdempotencyKey}`,\n );\n }\n return {run: toWorkflowRun(existingRow), created: false};\n }\n\n // Resolving run-creation templates and predicates here gives them a stable variable snapshot\n // and interpolation access to the inserted run id. Run-name resolution is display-only and\n // persists only a resolved override. If resolution fails, the transaction rolls back the run,\n // jobs, steps, and outbox event together. Listening steps are resolved later when a job\n // execution is created.\n const provisionalRun = toWorkflowRun(runRow);\n const oneShotJobs = params.model.jobs.filter((job) => job.mode !== 'listening');\n const vars = await loadReferencedVariables({\n model: params.model,\n jobs: oneShotJobs,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n secrets: params.secrets,\n });\n const runNameResolution = resolveWorkflowRunName({\n runName: params.model.runName,\n context: assembleCreationContext({\n run: provisionalRun,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars,\n }).values,\n });\n const [resolvedRunRow] = await tx\n .update(workflowRuns)\n .set({name: runNameResolution.value, updatedAt: new Date()})\n .where(eq(workflowRuns.id, provisionalRun.id))\n .returning();\n if (!resolvedRunRow)\n throw new Error(`Workflow run missing after name resolution: ${runRow.id}`);\n const run = toWorkflowRun(resolvedRunRow);\n const [attemptRow] = await tx\n .insert(workflowRunAttempts)\n .values({\n workflowRunId: runRow.id,\n attempt: 1,\n status: 'pending',\n model: createWorkflowModelSnapshot(params.model),\n vars,\n agentToolMaterialization,\n })\n .returning();\n if (!attemptRow) throw new Error('Insert returned no rows');\n\n const materializedJobs = await materializeWorkflowRunJobs({\n run,\n model: params.model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n agentToolContext,\n agentToolSnapshot: agentToolMaterialization,\n });\n\n const graphJobs = materializeRunGraphJobs({\n params,\n run,\n vars,\n materializedJobs,\n });\n await persistMaterializedRunGraph(tx, {\n run,\n workflowRunAttempt: attemptRow,\n materializedJobs: graphJobs,\n });\n\n logTemplateDiagnostics({\n workflowRunId: runRow.id,\n diagnostics: materializedJobs.flatMap((job) =>\n job.steps.flatMap((step) =>\n (step.diagnostics ?? []).map((diagnostic) => ({\n jobKey: job.key,\n stepName: step.name,\n ...diagnostic,\n })),\n ),\n ),\n });\n\n return {\n run,\n created: true,\n nameDegradation: runNameResolution.degradation,\n };\n });\n\n if (result.created && result.nameDegradation !== undefined) {\n recordWorkflowDisplayNameResolutionDegraded('workflow.run_name', result.nameDegradation.cause);\n logger().warn(\n {\n workflowRunId: result.run.id,\n definitionId: result.run.definitionId,\n field: 'workflow.run_name',\n cause: result.nameDegradation.cause,\n ...(result.nameDegradation.expression === undefined\n ? {}\n : {expression: result.nameDegradation.expression.slice(0, 256)}),\n },\n 'Workflow run name resolution degraded to the static workflow name',\n );\n }\n\n if (result.created) {\n recordWorkflowRunCreated(result.run.triggerPayload.provider ?? result.run.triggerSource);\n }\n\n return result.run;\n}\n\nasync function allocateWorkflowRunNumber(tx: Tx, definitionId: string): Promise<number> {\n const [counterRow] = await tx\n .insert(workflowRunCounters)\n .values({definitionId, nextNumber: 2})\n .onConflictDoUpdate({\n target: workflowRunCounters.definitionId,\n set: {nextNumber: sql`${workflowRunCounters.nextNumber} + 1`},\n })\n .returning({number: sql<number>`${workflowRunCounters.nextNumber} - 1`});\n if (!counterRow) throw new Error('Run counter allocation returned no rows');\n return counterRow.number;\n}\n\n// The run entity carries camelCase dev-source fields while the persisted jsonb uses\n// snake_case keys, so the write boundary maps explicitly rather than spreading.\nfunction toWorkflowRunDevSourceDb(source: WorkflowRunDevSource): WorkflowRunDevSourceDb {\n return {\n ref: source.ref,\n commit: source.commit,\n config_path: source.configPath,\n initiated_by_user_id: source.initiatedByUserId,\n replay_of_event_id: source.replayOfEventId,\n };\n}\n\nexport async function loadReferencedVariables(params: {\n readonly model: WorkflowModel;\n readonly jobs?: readonly WorkflowModelJob[] | undefined;\n readonly workspaceId: string;\n readonly projectId: string;\n readonly definitionId: string;\n readonly secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<Record<string, string> | undefined> {\n const references = referencedVariables(params.model, params.jobs ?? params.model.jobs);\n const keys = [...new Set(references.map((reference) => reference.key))].sort();\n if (keys.length === 0) return undefined;\n\n const requiresSecrets = (reference: ReferencedVariable) =>\n reference.field !== 'job.execution_name' && reference.field !== 'workflow.run_name';\n const requiredReferences = references.filter(requiresSecrets);\n const requiredKeys = new Set(requiredReferences.map((reference) => reference.key));\n if (!params.secrets) {\n if (requiredKeys.size === 0) return undefined;\n throw new Error('Secrets client is not configured.');\n }\n const {values: vars} = await params.secrets.getVariablesByNamespace({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n namespace: '',\n });\n const missingKey = [...requiredKeys].find((key) => !(key in vars));\n if (missingKey !== undefined) {\n const reference = requiredReferences.find((candidate) => candidate.key === missingKey);\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: reference?.field ?? 'env',\n source: reference?.source ?? `vars.${missingKey}`,\n ...(reference?.envKey === undefined ? {} : {envKey: reference.envKey}),\n });\n }\n\n const referencedVars: Record<string, string> = {};\n for (const key of keys) {\n const value = vars[key];\n if (value !== undefined) referencedVars[key] = value;\n }\n return referencedVars;\n}\n\nfunction materializeRunGraphJobs(params: {\n readonly params: CreateWorkflowRunParams;\n readonly run: WorkflowRun;\n readonly vars: Record<string, string> | undefined;\n readonly materializedJobs: readonly MaterializedWorkflowJob[];\n}): readonly MaterializedRunGraphJob[] {\n return params.materializedJobs.map((job, jobIndex) => ({\n job: {\n key: job.key,\n mode: job.mode,\n name: job.name ?? null,\n status: 'pending' as const,\n checkoutPersistCredentials: job.checkout.persistCredentials,\n checkoutPermissionsContents: job.checkout.permissions.contents,\n success: job.success ?? null,\n executionTimeoutMs: job.executionTimeoutMs ?? null,\n listeningTimeoutMs: job.listening?.timeoutMs ?? null,\n maxExecutions: job.listening?.maxExecutions ?? null,\n onResolve: job.listening?.onResolve ?? null,\n batchDebounceMs: job.listening?.batch?.debounceMs ?? null,\n batchMaxSize: job.listening?.batch?.maxSize ?? null,\n batchMaxWaitMs: job.listening?.batch?.maxWaitMs ?? null,\n listeningOn: job.listening?.on ? [...job.listening.on] : null,\n listeningUntil: job.listening?.until ? [...job.listening.until] : null,\n dependencies: [...job.dependencies],\n runner: job.runner.length === 0 ? null : [...job.runner],\n position: job.position,\n },\n createExecution: (jobRow) => {\n if (jobRow.mode === 'listening') return undefined;\n\n const fallbackName = jobRow.name ?? jobRow.key;\n const modelJob = params.params.model.jobs[jobIndex];\n if (!modelJob) return undefined;\n const executionPlan = deriveInitialJobExecutionPlan({\n run: params.run,\n modelJob,\n job,\n jobId: jobRow.id,\n sequence: 1,\n fallbackName,\n triggerPayload: params.params.triggerPayload,\n inputs: params.params.inputs ?? null,\n vars: params.vars,\n });\n\n return {\n sequence: 1,\n // Persist only the resolved override. The core entity supplies the\n // static job name/key when this is null.\n name: executionPlan.nameOverride,\n runner: [...executionPlan.runner],\n status: 'pending' as const,\n evaluationTrace:\n executionPlan.evaluationTrace?.length === 0 ? null : executionPlan.evaluationTrace,\n };\n },\n createSteps: () =>\n job.steps.map((step) => ({\n key: step.key,\n name: step.name,\n sourceLocation: step.sourceLocation,\n status: step.status,\n type: step.type,\n config: step.config,\n condition: step.condition ?? null,\n configPlan: step.configPlan ?? null,\n authoredConfig: step.authoredConfig,\n position: step.position,\n })),\n }));\n}\n\nfunction referencedVariables(\n model: WorkflowModel,\n jobs: readonly WorkflowModelJob[],\n): readonly ReferencedVariable[] {\n const references: ReferencedVariable[] = [];\n\n for (const job of model.jobs) {\n collectPredicateVariableReferences(job.if, references);\n collectPredicateVariableReferences(job.success, references);\n\n for (const trigger of [...(job.listening?.on ?? []), ...(job.listening?.until ?? [])]) {\n collectPredicateVariableReferences(trigger.filter, references);\n }\n\n for (const step of job.steps) {\n collectPredicateVariableReferences(step.if, references);\n collectPredicateVariableReferences(step.gate?.success, references);\n }\n }\n\n collectFieldVariableReferences(model.runName, references, {field: 'workflow.run_name'});\n\n if (jobs.length > 0) {\n collectTemplateVariableReferences(model.templates?.env, references);\n }\n\n for (const job of jobs) {\n collectFieldVariableReferences(job.executionName, references, {field: 'job.execution_name'});\n for (const template of job.runnerTemplates ?? []) {\n collectFieldVariableReferences(template, references, {field: 'job.runner'});\n }\n collectTemplateVariableReferences(job.outputs, references, {field: 'job.outputs'});\n collectTemplateVariableReferences(job.templates?.env, references);\n\n for (const step of job.steps) {\n collectFieldVariableReferences(step.templates?.name, references, {field: 'step.name'});\n collectFieldVariableReferences(\n step.kind === 'tool' ? undefined : step.templates?.workingDirectory,\n references,\n {\n field: 'step.working_directory',\n },\n );\n if (step.kind === 'run') {\n collectFieldVariableReferences(step.templates?.command, references, {field: 'run'});\n collectTemplateVariableReferences(step.templates?.env, references);\n } else if (step.kind === 'agent') {\n collectFieldVariableReferences(step.templates?.prompt, references, {field: 'agent.prompt'});\n collectFieldVariableReferences(step.templates?.model, references, {field: 'agent.model'});\n collectFieldVariableReferences(step.templates?.provider, references, {\n field: 'agent.provider',\n });\n } else if (step.kind === 'tool') {\n collectTemplateTreeVariableReferences(step.templates?.with, references, {\n field: 'tool.with',\n });\n for (const [key, expression] of Object.entries(step.outputMappings ?? {})) {\n collectExpressionVariableReferences(expression, references, {\n field: 'tool.outputs',\n envKey: key,\n });\n }\n } else if (step.kind === 'checkout') {\n for (const [key, field] of WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS) {\n collectFieldVariableReferences(step.checkout.templates?.[key], references, {field});\n }\n }\n }\n }\n\n return references;\n}\n\nfunction collectPredicateVariableReferences(\n expression: WorkflowExpression | string | undefined,\n references: ReferencedVariable[],\n): void {\n if (expression === undefined) return;\n\n const keyAccess = analyzeContextKeyAccess(expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: 'env',\n source: typeof expression === 'string' ? expression : expression.source,\n });\n }\n}\n\nfunction collectTemplateVariableReferences(\n templates: Readonly<Record<string, readonly ResolvedFieldSegment[]>> | undefined,\n references: ReferencedVariable[],\n source?: {\n readonly field: InterpolationUnresolvableError['field'];\n },\n): void {\n for (const [envKey, template] of Object.entries(templates ?? {})) {\n collectFieldVariableReferences(\n template,\n references,\n source === undefined ? {field: 'env', envKey} : source,\n );\n }\n}\n\nfunction collectFieldVariableReferences(\n template: readonly ResolvedFieldSegment[] | undefined,\n references: ReferencedVariable[],\n source: {\n readonly field: InterpolationUnresolvableError['field'];\n readonly envKey?: string | undefined;\n },\n): void {\n for (const segment of template ?? []) {\n if (segment.kind === 'literal') continue;\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: source.field,\n source: segment.expression.source,\n envKey: source.envKey,\n });\n }\n }\n}\n\n/**\n * Collect `vars.*` references from a tool step's `with` template tree: a\n * `WorkflowJsonTemplateTree` mirrors the authored `with` payload with every\n * interpolated string leaf replaced by its parsed template, so walk it like\n * the authored structure and collect from each leaf template.\n */\nfunction collectTemplateTreeVariableReferences(\n tree: WorkflowJsonTemplateTree | undefined,\n references: ReferencedVariable[],\n source: {\n readonly field: InterpolationUnresolvableError['field'];\n readonly envKey?: string | undefined;\n },\n): void {\n if (tree === undefined) return;\n\n if (Array.isArray(tree)) {\n // A field template is itself an array of segments; a `with` list is an\n // array of child trees. Segments carry a `kind`, so distinguish the two.\n if (tree.every((element) => isFieldTemplateSegment(element))) {\n collectFieldVariableReferences(tree, references, source);\n return;\n }\n for (const child of tree) collectTemplateTreeVariableReferences(child, references, source);\n return;\n }\n\n if (typeof tree === 'object') {\n for (const child of Object.values(tree)) {\n collectTemplateTreeVariableReferences(child, references, source);\n }\n }\n}\n\nfunction isFieldTemplateSegment(value: unknown): value is ResolvedFieldSegment {\n return (\n typeof value === 'object' &&\n value !== null &&\n ((value as {kind?: unknown}).kind === 'literal' ||\n (value as {kind?: unknown}).kind === 'deferred')\n );\n}\n\nfunction collectExpressionVariableReferences(\n expression: WorkflowExpression,\n references: ReferencedVariable[],\n source: {\n readonly field: InterpolationUnresolvableError['field'];\n readonly envKey?: string | undefined;\n },\n): void {\n const keyAccess = analyzeContextKeyAccess(expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: source.field,\n source: expression.source,\n envKey: source.envKey,\n });\n }\n}\n\nfunction logTemplateDiagnostics(params: {\n readonly workflowRunId: string;\n readonly diagnostics: readonly (WorkflowStepTemplateDiagnostic & {\n readonly jobKey: string;\n readonly stepName: string;\n })[];\n}): void {\n if (params.diagnostics.length === 0) return;\n\n logger().warn(\n {workflowRunId: params.workflowRunId, diagnostics: params.diagnostics},\n 'Workflow interpolation resolved with diagnostics',\n );\n}\n"],"names":["createWorkflowModelSnapshot","WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS","analyzeContextKeyAccess","logger","eq","sql","createAgentToolMaterializationSnapshot","loadAgentToolMaterializationContext","InterpolationUnresolvableError","resolveWorkflowRunTriggerReference","assembleCreationContext","resolveWorkflowRunName","deriveInitialJobExecutionPlan","materializeWorkflowRunJobs","recordWorkflowDisplayNameResolutionDegraded","recordWorkflowRunCreated","db","workflowRunAttempts","workflowRunCounters","toWorkflowRun","workflowRuns","persistMaterializedRunGraph","createWorkflowRun","params","triggerReference","workspaceId","triggerConnectionId","triggerPayload","integrations","projects","staticName","name","model","agentToolContext","undefined","projectId","agentToolMaterialization","context","result","transaction","tx","triggerIdempotencyKey","execute","existing","select","from","where","limit","existingRow","run","created","number","allocateWorkflowRunNumber","definitionId","insertResult","insert","values","workflowName","status","currentAttempt","triggerProvider","provider","triggerSource","source","triggerEvent","event","inputs","sourceSnapshot","origin","devSource","toWorkflowRunDevSourceDb","onConflictDoNothing","target","returning","runRow","Error","provisionalRun","oneShotJobs","jobs","filter","job","mode","vars","loadReferencedVariables","secrets","runNameResolution","runName","resolvedRunRow","update","set","value","updatedAt","Date","id","attemptRow","workflowRunId","attempt","materializedJobs","resolveAgentDefaults","agentToolSnapshot","graphJobs","materializeRunGraphJobs","workflowRunAttempt","logTemplateDiagnostics","diagnostics","flatMap","steps","step","map","diagnostic","jobKey","key","stepName","nameDegradation","degradation","cause","warn","field","expression","slice","counterRow","nextNumber","onConflictDoUpdate","ref","commit","config_path","configPath","initiated_by_user_id","initiatedByUserId","replay_of_event_id","replayOfEventId","references","referencedVariables","keys","Set","reference","sort","length","requiresSecrets","requiredReferences","requiredKeys","size","getVariablesByNamespace","namespace","missingKey","find","candidate","envKey","referencedVars","jobIndex","checkoutPersistCredentials","checkout","persistCredentials","checkoutPermissionsContents","permissions","contents","success","executionTimeoutMs","listeningTimeoutMs","listening","timeoutMs","maxExecutions","onResolve","batchDebounceMs","batch","debounceMs","batchMaxSize","maxSize","batchMaxWaitMs","maxWaitMs","listeningOn","on","listeningUntil","until","dependencies","runner","position","createExecution","jobRow","fallbackName","modelJob","executionPlan","jobId","sequence","nameOverride","evaluationTrace","createSteps","sourceLocation","type","config","condition","configPlan","authoredConfig","collectPredicateVariableReferences","if","trigger","gate","collectFieldVariableReferences","collectTemplateVariableReferences","templates","env","executionName","template","runnerTemplates","outputs","kind","workingDirectory","command","prompt","collectTemplateTreeVariableReferences","with","Object","entries","outputMappings","collectExpressionVariableReferences","keyAccess","root","push","segment","tree","Array","isArray","every","element","isFieldTemplateSegment","child"],"mappings":"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"}
@@ -96,6 +96,12 @@ export interface RewindStepsToPendingParams {
96
96
  export declare function rewindStepsToPending(params: RewindStepsToPendingParams, tx: Tx): Promise<void>;
97
97
  export declare function countStepAttempts(stepId: string, tx: Tx): Promise<number>;
98
98
  export declare function getStepAttempts(jobId: string): Promise<StepAttempt[]>;
99
+ /**
100
+ * Lists only the step attempt ids of a job, without materializing the full
101
+ * attempt entities. The session release sweep only needs the ids to release
102
+ * claims, so this keeps the per-job-terminated query off a full-row projection.
103
+ */
104
+ export declare function listStepAttemptIdsByJobId(jobId: string): Promise<string[]>;
99
105
  export declare function getStepAttemptsByJobIds(jobIds: string[]): Promise<StepAttempt[]>;
100
106
  export interface ApplyStepResultParams {
101
107
  jobExecutionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EACV,6BAA6B,EAC7B,IAAI,EACJ,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAK,KAAK,EAAE,EAAC,MAAM,UAAU,CAAC;AAUrC,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAU5B;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAM3E;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAuChD;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA0BzC;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAQpE;AAED,wBAAsB,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAOtF;AAED,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;CACrD;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,4BAA4B,EACpC,EAAE,CAAC,EAAE,EAAE,GACN,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAOD,wBAAsB,iCAAiC,CACrD,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,IAAI,EAAE,CAAC,CAQjB;AAED,wBAAsB,+BAA+B,CACnD,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,WAAW,EAAE,CAAC,CAOxB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAiCjG;AAED,MAAM,WAAW,qCAAqC;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,eAAe,EAAE,SAAS,6BAA6B,EAAE,GAAG,IAAI,CAAC;CAClE;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,EAC7C,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAgCtB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,gBAAgB,CAAC;IAC/B,eAAe,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC3D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAoBjG;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACA,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC,CAqBxC;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,SAAS,6BAA6B,EAAE,GAAG,IAAI,CAAC;CACnE;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,8BAA8B,EACtC,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAKD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC9F;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,EAClC,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,IAAI,CAAC,CAiBf;AAMD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/E;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAS3E;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQhF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAUtF;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACvC;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB1F;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,EAClC,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,IAAI,CAAC,CAEf"}