@shipfox/api-workflows 16.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.
- package/.turbo/turbo-build.log +4 -4
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +20 -0
- package/dist/core/agent-tools.js +8 -3
- package/dist/core/agent-tools.js.map +1 -1
- package/dist/core/entities/step.d.ts +1 -1
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js +2 -1
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.js +2 -0
- package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
- package/dist/core/step-config/resolve-step-config.js +3 -1
- package/dist/core/step-config/resolve-step-config.js.map +1 -1
- package/dist/db/db.d.ts +8 -8
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema/steps.d.ts +2 -2
- package/dist/db/schema/workflow-run-attempts.d.ts +2 -2
- package/dist/db/workflow-runs/outbox.d.ts +1 -0
- package/dist/db/workflow-runs/outbox.d.ts.map +1 -1
- package/dist/db/workflow-runs/outbox.js +2 -1
- package/dist/db/workflow-runs/outbox.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js +49 -1
- package/dist/db/workflow-runs/run-create.js.map +1 -1
- package/dist/db/workflow-runs/steps.d.ts +6 -0
- package/dist/db/workflow-runs/steps.d.ts.map +1 -1
- package/dist/db/workflow-runs/steps.js +14 -0
- package/dist/db/workflow-runs/steps.js.map +1 -1
- package/dist/db/workflow-runs.d.ts +1 -1
- package/dist/db/workflow-runs.d.ts.map +1 -1
- package/dist/db/workflow-runs.js +1 -1
- package/dist/db/workflow-runs.js.map +1 -1
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +6 -1
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/core/agent-tools.test.ts +85 -0
- package/src/core/agent-tools.ts +11 -3
- package/src/core/entities/step.ts +1 -1
- package/src/core/errors.ts +2 -0
- package/src/core/job-execution.test.ts +1 -0
- package/src/core/run-workflow.test.ts +4 -0
- package/src/core/step-config/materialize-job-execution-steps.ts +2 -0
- package/src/core/step-config/resolve-step-config.ts +4 -1
- package/src/db/index.ts +1 -0
- package/src/db/workflow-runs/outbox.ts +2 -0
- package/src/db/workflow-runs/run-create.test.ts +41 -0
- package/src/db/workflow-runs/run-create.ts +81 -3
- package/src/db/workflow-runs/steps.ts +19 -0
- package/src/db/workflow-runs.ts +1 -0
- package/src/presentation/inter-module.test.ts +26 -0
- package/src/presentation/inter-module.ts +9 -1
- package/src/presentation/routes/agent-runtime-config.test.ts +2 -0
- package/test/factories/workflow-model.ts +74 -2
- package/test/fixtures/agent-inter-module.ts +2 -0
- 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";
|
package/dist/db/index.d.ts
CHANGED
|
@@ -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
|
package/dist/db/index.d.ts.map
CHANGED
|
@@ -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
|
package/dist/db/index.js.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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":"AAAA,SAEEA,8BAA8B,EAC9BC,kCAAkC,EAClCC,2BAA2B,EAC3BC,iCAAiC,EACjCC,+BAA+B,QAC1B,6BAA6B;AACpC,SAAQC,EAAE,QAAO,cAAc;AAI/B,SAAQC,yBAAyB,QAAO,sBAAsB;AAC9D,SAAQC,aAAa,QAAO,8BAA8B;AAC1D,SAAQC,KAAK,QAAO,qBAAqB;AACzC,SAAQC,wBAAwB,QAAO,cAAc;AAErD,OAAO,eAAeC,8BACpBC,EAAM,EACNC,MAKC;IAED,MAAMC,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMf;QACNgB,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBG,gBAAgBL,OAAOK,cAAc;YACrCC,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDC,aAAaP,SAASO,WAAW;YACjCC,WAAWR,SAASQ,SAAS;YAC7BC,gBAAgBV,OAAOU,cAAc;YACrCC,UAAUX,OAAOW,QAAQ,CAACC,WAAW;QACvC;IACF;AACF;AAEA,OAAO,eAAeC,kCACpBd,EAAM,EACNC,MAMC;IAED,IACEA,OAAOc,MAAM,KAAK,eAClBd,OAAOc,MAAM,KAAK,YAClBd,OAAOc,MAAM,KAAK,aAClB;QACA,MAAM,IAAIC,MAAM,CAAC,uDAAuD,EAAEf,OAAOc,MAAM,EAAE;IAC3F;IACA,MAAMb,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMd;QACNe,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBG,gBAAgBL,OAAOK,cAAc;YACrCC,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDO,QAAQd,OAAOc,MAAM;YACrBE,cAAchB,OAAOgB,YAAY;YACjCC,qBAAqBjB,OAAOiB,mBAAmB,IAAI;QACrD;IACF;AACF;AAEA,iFAAiF;AACjF,uFAAuF;AACvF,qFAAqF;AACrF,yEAAyE;AACzE,OAAO,eAAeC,2BACpBnB,EAAM,EACNC,MAA+E;IAE/E,MAAMC,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMb;QACNc,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBG,gBAAgBL,OAAOK,cAAc;YACrCC,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDO,QAAQd,OAAOc,MAAM;QACvB;IACF;AACF;AAEA,OAAO,eAAeK,iCACpBpB,EAAM,EACNC,
|
|
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":"AAAA,SAEEA,8BAA8B,EAC9BC,kCAAkC,EAClCC,2BAA2B,EAC3BC,iCAAiC,EACjCC,+BAA+B,QAC1B,6BAA6B;AACpC,SAAQC,EAAE,QAAO,cAAc;AAI/B,SAAQC,yBAAyB,QAAO,sBAAsB;AAC9D,SAAQC,aAAa,QAAO,8BAA8B;AAC1D,SAAQC,KAAK,QAAO,qBAAqB;AACzC,SAAQC,wBAAwB,QAAO,cAAc;AAErD,OAAO,eAAeC,8BACpBC,EAAM,EACNC,MAKC;IAED,MAAMC,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMf;QACNgB,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBG,gBAAgBL,OAAOK,cAAc;YACrCC,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDC,aAAaP,SAASO,WAAW;YACjCC,WAAWR,SAASQ,SAAS;YAC7BC,gBAAgBV,OAAOU,cAAc;YACrCC,UAAUX,OAAOW,QAAQ,CAACC,WAAW;QACvC;IACF;AACF;AAEA,OAAO,eAAeC,kCACpBd,EAAM,EACNC,MAMC;IAED,IACEA,OAAOc,MAAM,KAAK,eAClBd,OAAOc,MAAM,KAAK,YAClBd,OAAOc,MAAM,KAAK,aAClB;QACA,MAAM,IAAIC,MAAM,CAAC,uDAAuD,EAAEf,OAAOc,MAAM,EAAE;IAC3F;IACA,MAAMb,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMd;QACNe,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBG,gBAAgBL,OAAOK,cAAc;YACrCC,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDO,QAAQd,OAAOc,MAAM;YACrBE,cAAchB,OAAOgB,YAAY;YACjCC,qBAAqBjB,OAAOiB,mBAAmB,IAAI;QACrD;IACF;AACF;AAEA,iFAAiF;AACjF,uFAAuF;AACvF,qFAAqF;AACrF,yEAAyE;AACzE,OAAO,eAAeC,2BACpBnB,EAAM,EACNC,MAA+E;IAE/E,MAAMC,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMb;QACNc,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBG,gBAAgBL,OAAOK,cAAc;YACrCC,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDO,QAAQd,OAAOc,MAAM;QACvB;IACF;AACF;AAEA,OAAO,eAAeK,iCACpBpB,EAAM,EACNC,MAMC;IAED,MAAMC,WAAW,MAAMmB,uCAAuCrB,IAAIC,OAAOqB,MAAM;IAE/E,MAAM3B,0BAA0BK,IAAI;QAClCI,MAAMZ;QACNa,SAAS;YACPF,OAAOD,SAASC,KAAK;YACrBI,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnDC,aAAaP,SAASO,WAAW;YACjCC,WAAWR,SAASQ,SAAS;YAC7BY,QAAQrB,OAAOqB,MAAM;YACrBC,SAAStB,OAAOsB,OAAO;YACvBR,QAAQd,OAAOc,MAAM;YACrBS,YAAYvB,OAAOuB,UAAU;YAC7BC,eAAexB,OAAOwB,aAAa;QACrC;IACF;AACF;AAEA,eAAeJ,uCACbrB,EAAM,EACNsB,MAAc;IAQd,MAAMI,OAAO,MAAM1B,GAChB2B,MAAM,CAAC;QACNxB,OAAOP,cAAcO,KAAK;IAC5B,GACCyB,IAAI,CAAC/B,OACLgC,SAAS,CAACjC,eAAeF,GAAGG,MAAMS,cAAc,EAAEV,cAAckC,EAAE,GAClEC,KAAK,CAACrC,GAAGG,MAAMiC,EAAE,EAAER,SACnBU,KAAK,CAAC;IACT,MAAMC,OAAOP,IAAI,CAAC,EAAE;IACpB,IAAI,CAACO,MAAM;QACT,MAAM,IAAIjB,MAAM,CAAC,mDAAmD,EAAEM,OAAO,UAAU,CAAC;IAC1F;IAEA,OAAOxB,yBAAyBmC,KAAK9B,KAAK,EAAEH;AAC9C;AAEA,gFAAgF;AAChF,wEAAwE;AACxE,OAAO,eAAekC,+BACpBlC,EAAM,EACNC,MAMC;IAED,MAAMC,WAAW,MAAMJ,yBAAyBG,OAAOE,KAAK,EAAEH;IAE9D,MAAML,0BAA0BK,IAAI;QAClCI,MAAMX;QACNY,SAAS;YACPF,OAAOF,OAAOE,KAAK;YACnBI,eAAeL,SAASK,aAAa;YACrCC,sBAAsBN,SAASM,oBAAoB;YACnD2B,cAAclC,OAAOkC,YAAY;YACjCC,mBAAmBnC,OAAOmC,iBAAiB;YAC3CC,mBAAmBpC,OAAOoC,iBAAiB;YAC3CC,UAAUrC,OAAOqC,QAAQ;QAC3B;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/steps.ts"],"names":[],"mappings":"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"}
|