takos-actions-engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/coverage/base.css +224 -0
  2. package/coverage/block-navigation.js +87 -0
  3. package/coverage/clover.xml +3477 -0
  4. package/coverage/coverage-final.json +20 -0
  5. package/coverage/favicon.png +0 -0
  6. package/coverage/index.html +176 -0
  7. package/coverage/prettify.css +1 -0
  8. package/coverage/prettify.js +2 -0
  9. package/coverage/sort-arrow-sprite.png +0 -0
  10. package/coverage/sorter.js +210 -0
  11. package/coverage/src/context/base.ts.html +1792 -0
  12. package/coverage/src/context/env.ts.html +1243 -0
  13. package/coverage/src/context/index.html +161 -0
  14. package/coverage/src/context/index.ts.html +229 -0
  15. package/coverage/src/context/secrets.ts.html +1276 -0
  16. package/coverage/src/index.html +131 -0
  17. package/coverage/src/index.ts.html +502 -0
  18. package/coverage/src/parser/expression.ts.html +2854 -0
  19. package/coverage/src/parser/index.html +161 -0
  20. package/coverage/src/parser/index.ts.html +163 -0
  21. package/coverage/src/parser/validator.ts.html +1588 -0
  22. package/coverage/src/parser/workflow.ts.html +616 -0
  23. package/coverage/src/scheduler/dependency.ts.html +1138 -0
  24. package/coverage/src/scheduler/index.html +221 -0
  25. package/coverage/src/scheduler/index.ts.html +214 -0
  26. package/coverage/src/scheduler/job-context.ts.html +265 -0
  27. package/coverage/src/scheduler/job-policy.ts.html +559 -0
  28. package/coverage/src/scheduler/job.ts.html +1816 -0
  29. package/coverage/src/scheduler/listener-registry.ts.html +199 -0
  30. package/coverage/src/scheduler/step.ts.html +2206 -0
  31. package/coverage/src/scheduler/steps-context.ts.html +217 -0
  32. package/coverage/src/types.ts.html +1897 -0
  33. package/coverage/src/utils/index.html +116 -0
  34. package/coverage/src/utils/needs.ts.html +127 -0
  35. package/dist/__tests__/context/env.test.d.ts +2 -0
  36. package/dist/__tests__/context/env.test.d.ts.map +1 -0
  37. package/dist/__tests__/context/env.test.js +28 -0
  38. package/dist/__tests__/context/env.test.js.map +1 -0
  39. package/dist/__tests__/index.test.d.ts +2 -0
  40. package/dist/__tests__/index.test.d.ts.map +1 -0
  41. package/dist/__tests__/index.test.js +50 -0
  42. package/dist/__tests__/index.test.js.map +1 -0
  43. package/dist/__tests__/parser/expression.test.d.ts +2 -0
  44. package/dist/__tests__/parser/expression.test.d.ts.map +1 -0
  45. package/dist/__tests__/parser/expression.test.js +116 -0
  46. package/dist/__tests__/parser/expression.test.js.map +1 -0
  47. package/dist/__tests__/parser/workflow.test.d.ts +2 -0
  48. package/dist/__tests__/parser/workflow.test.d.ts.map +1 -0
  49. package/dist/__tests__/parser/workflow.test.js +134 -0
  50. package/dist/__tests__/parser/workflow.test.js.map +1 -0
  51. package/dist/__tests__/scheduler/dependency.test.d.ts +2 -0
  52. package/dist/__tests__/scheduler/dependency.test.d.ts.map +1 -0
  53. package/dist/__tests__/scheduler/dependency.test.js +41 -0
  54. package/dist/__tests__/scheduler/dependency.test.js.map +1 -0
  55. package/dist/__tests__/scheduler/job-context.test.d.ts +2 -0
  56. package/dist/__tests__/scheduler/job-context.test.d.ts.map +1 -0
  57. package/dist/__tests__/scheduler/job-context.test.js +108 -0
  58. package/dist/__tests__/scheduler/job-context.test.js.map +1 -0
  59. package/dist/__tests__/scheduler/job-policy.test.d.ts +2 -0
  60. package/dist/__tests__/scheduler/job-policy.test.d.ts.map +1 -0
  61. package/dist/__tests__/scheduler/job-policy.test.js +159 -0
  62. package/dist/__tests__/scheduler/job-policy.test.js.map +1 -0
  63. package/dist/__tests__/scheduler/job.test.d.ts +2 -0
  64. package/dist/__tests__/scheduler/job.test.d.ts.map +1 -0
  65. package/dist/__tests__/scheduler/job.test.js +826 -0
  66. package/dist/__tests__/scheduler/job.test.js.map +1 -0
  67. package/dist/__tests__/scheduler/listener-registry.test.d.ts +2 -0
  68. package/dist/__tests__/scheduler/listener-registry.test.d.ts.map +1 -0
  69. package/dist/__tests__/scheduler/listener-registry.test.js +79 -0
  70. package/dist/__tests__/scheduler/listener-registry.test.js.map +1 -0
  71. package/dist/__tests__/scheduler/step.test.d.ts +2 -0
  72. package/dist/__tests__/scheduler/step.test.d.ts.map +1 -0
  73. package/dist/__tests__/scheduler/step.test.js +209 -0
  74. package/dist/__tests__/scheduler/step.test.js.map +1 -0
  75. package/dist/__tests__/scheduler/steps-context.test.d.ts +2 -0
  76. package/dist/__tests__/scheduler/steps-context.test.d.ts.map +1 -0
  77. package/dist/__tests__/scheduler/steps-context.test.js +43 -0
  78. package/dist/__tests__/scheduler/steps-context.test.js.map +1 -0
  79. package/dist/constants.d.ts +47 -0
  80. package/dist/constants.d.ts.map +1 -0
  81. package/dist/constants.js +53 -0
  82. package/dist/constants.js.map +1 -0
  83. package/dist/context.d.ts +37 -0
  84. package/dist/context.d.ts.map +1 -0
  85. package/dist/context.js +105 -0
  86. package/dist/context.js.map +1 -0
  87. package/dist/index.d.ts +9 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +10 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/parser/evaluator-builtins.d.ts +14 -0
  92. package/dist/parser/evaluator-builtins.d.ts.map +1 -0
  93. package/dist/parser/evaluator-builtins.js +258 -0
  94. package/dist/parser/evaluator-builtins.js.map +1 -0
  95. package/dist/parser/evaluator.d.ts +38 -0
  96. package/dist/parser/evaluator.d.ts.map +1 -0
  97. package/dist/parser/evaluator.js +257 -0
  98. package/dist/parser/evaluator.js.map +1 -0
  99. package/dist/parser/expression.d.ts +20 -0
  100. package/dist/parser/expression.d.ts.map +1 -0
  101. package/dist/parser/expression.js +128 -0
  102. package/dist/parser/expression.js.map +1 -0
  103. package/dist/parser/tokenizer.d.ts +26 -0
  104. package/dist/parser/tokenizer.d.ts.map +1 -0
  105. package/dist/parser/tokenizer.js +162 -0
  106. package/dist/parser/tokenizer.js.map +1 -0
  107. package/dist/parser/validator.d.ts +13 -0
  108. package/dist/parser/validator.d.ts.map +1 -0
  109. package/dist/parser/validator.js +383 -0
  110. package/dist/parser/validator.js.map +1 -0
  111. package/dist/parser/workflow.d.ts +30 -0
  112. package/dist/parser/workflow.d.ts.map +1 -0
  113. package/dist/parser/workflow.js +152 -0
  114. package/dist/parser/workflow.js.map +1 -0
  115. package/dist/scheduler/dependency.d.ts +37 -0
  116. package/dist/scheduler/dependency.d.ts.map +1 -0
  117. package/dist/scheduler/dependency.js +133 -0
  118. package/dist/scheduler/dependency.js.map +1 -0
  119. package/dist/scheduler/job-policy.d.ts +23 -0
  120. package/dist/scheduler/job-policy.d.ts.map +1 -0
  121. package/dist/scheduler/job-policy.js +117 -0
  122. package/dist/scheduler/job-policy.js.map +1 -0
  123. package/dist/scheduler/job.d.ts +151 -0
  124. package/dist/scheduler/job.d.ts.map +1 -0
  125. package/dist/scheduler/job.js +348 -0
  126. package/dist/scheduler/job.js.map +1 -0
  127. package/dist/scheduler/step-output-parser.d.ts +14 -0
  128. package/dist/scheduler/step-output-parser.d.ts.map +1 -0
  129. package/dist/scheduler/step-output-parser.js +70 -0
  130. package/dist/scheduler/step-output-parser.js.map +1 -0
  131. package/dist/scheduler/step.d.ts +74 -0
  132. package/dist/scheduler/step.d.ts.map +1 -0
  133. package/dist/scheduler/step.js +387 -0
  134. package/dist/scheduler/step.js.map +1 -0
  135. package/dist/types.d.ts +499 -0
  136. package/dist/types.d.ts.map +1 -0
  137. package/dist/types.js +5 -0
  138. package/dist/types.js.map +1 -0
  139. package/dist/workflow-models.d.ts +504 -0
  140. package/dist/workflow-models.d.ts.map +1 -0
  141. package/dist/workflow-models.js +5 -0
  142. package/dist/workflow-models.js.map +1 -0
  143. package/package.json +29 -0
  144. package/src/__tests__/context/env.test.ts +38 -0
  145. package/src/__tests__/index.test.ts +55 -0
  146. package/src/__tests__/parser/expression.test.ts +151 -0
  147. package/src/__tests__/parser/workflow.test.ts +151 -0
  148. package/src/__tests__/scheduler/dependency.test.ts +51 -0
  149. package/src/__tests__/scheduler/job-context.test.ts +119 -0
  150. package/src/__tests__/scheduler/job-policy.test.ts +195 -0
  151. package/src/__tests__/scheduler/job.test.ts +1014 -0
  152. package/src/__tests__/scheduler/listener-registry.test.ts +95 -0
  153. package/src/__tests__/scheduler/step.test.ts +258 -0
  154. package/src/__tests__/scheduler/steps-context.test.ts +49 -0
  155. package/src/constants.ts +61 -0
  156. package/src/context.ts +153 -0
  157. package/src/index.ts +64 -0
  158. package/src/parser/evaluator-builtins.ts +315 -0
  159. package/src/parser/evaluator.ts +333 -0
  160. package/src/parser/expression.ts +154 -0
  161. package/src/parser/tokenizer.ts +191 -0
  162. package/src/parser/validator.ts +444 -0
  163. package/src/parser/workflow.ts +176 -0
  164. package/src/scheduler/dependency.ts +180 -0
  165. package/src/scheduler/job-policy.ts +198 -0
  166. package/src/scheduler/job.ts +523 -0
  167. package/src/scheduler/step-output-parser.ts +94 -0
  168. package/src/scheduler/step.ts +543 -0
  169. package/src/workflow-models.ts +593 -0
  170. package/tsconfig.json +14 -0
  171. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,133 @@
1
+ import { normalizeNeedsInput } from './job.js';
2
+ /**
3
+ * Error thrown when dependency resolution fails
4
+ */
5
+ export class DependencyError extends Error {
6
+ jobs;
7
+ constructor(message, jobs) {
8
+ super(message);
9
+ this.jobs = jobs;
10
+ this.name = 'DependencyError';
11
+ }
12
+ }
13
+ function getOrCreateGraphSet(map, key) {
14
+ const existing = map.get(key);
15
+ if (existing) {
16
+ return existing;
17
+ }
18
+ const created = new Set();
19
+ map.set(key, created);
20
+ return created;
21
+ }
22
+ const EMPTY_JOB_SET = new Set();
23
+ /**
24
+ * Build dependency graph from workflow
25
+ */
26
+ export function buildDependencyGraph(workflow) {
27
+ const nodes = new Set();
28
+ const edges = new Map();
29
+ const reverseEdges = new Map();
30
+ // Initialize all nodes
31
+ for (const jobId of Object.keys(workflow.jobs)) {
32
+ nodes.add(jobId);
33
+ edges.set(jobId, new Set());
34
+ reverseEdges.set(jobId, new Set());
35
+ }
36
+ // Build edges from 'needs' declarations
37
+ for (const [jobId, job] of Object.entries(workflow.jobs)) {
38
+ const needs = normalizeNeedsInput(job.needs);
39
+ for (const need of needs) {
40
+ if (!nodes.has(need)) {
41
+ throw new DependencyError(`Job "${jobId}" depends on unknown job "${need}"`, [jobId, need]);
42
+ }
43
+ getOrCreateGraphSet(edges, jobId).add(need);
44
+ getOrCreateGraphSet(reverseEdges, need).add(jobId);
45
+ }
46
+ }
47
+ return { nodes, edges, reverseEdges };
48
+ }
49
+ /**
50
+ * Detect circular dependencies in graph
51
+ * Returns the cycle path if found, empty array otherwise
52
+ */
53
+ export function detectCycle(graph) {
54
+ const visited = new Set();
55
+ const recursionStack = new Set();
56
+ const path = [];
57
+ function dfs(node) {
58
+ visited.add(node);
59
+ recursionStack.add(node);
60
+ path.push(node);
61
+ const dependencies = graph.edges.get(node) || EMPTY_JOB_SET;
62
+ for (const dep of dependencies) {
63
+ if (!visited.has(dep)) {
64
+ const cycle = dfs(dep);
65
+ if (cycle)
66
+ return cycle;
67
+ }
68
+ else if (recursionStack.has(dep)) {
69
+ // Found cycle - return the cycle path
70
+ const cycleStart = path.indexOf(dep);
71
+ return [...path.slice(cycleStart), dep];
72
+ }
73
+ }
74
+ path.pop();
75
+ recursionStack.delete(node);
76
+ return null;
77
+ }
78
+ for (const node of graph.nodes) {
79
+ if (!visited.has(node)) {
80
+ const cycle = dfs(node);
81
+ if (cycle)
82
+ return cycle;
83
+ }
84
+ }
85
+ return [];
86
+ }
87
+ function assertAcyclic(graph) {
88
+ const cycle = detectCycle(graph);
89
+ if (cycle.length > 0) {
90
+ throw new DependencyError(`Circular dependency detected: ${cycle.join(' -> ')}`, cycle);
91
+ }
92
+ }
93
+ /**
94
+ * Group jobs into parallel execution phases
95
+ * Jobs in the same phase can run in parallel
96
+ */
97
+ export function groupIntoPhases(graph) {
98
+ // Check for cycles first
99
+ assertAcyclic(graph);
100
+ const phases = [];
101
+ const assigned = new Set();
102
+ while (assigned.size < graph.nodes.size) {
103
+ const phase = [];
104
+ for (const node of graph.nodes) {
105
+ if (assigned.has(node))
106
+ continue;
107
+ // Check if all dependencies are assigned
108
+ const dependencies = graph.edges.get(node) || EMPTY_JOB_SET;
109
+ let canAdd = true;
110
+ for (const dep of dependencies) {
111
+ if (!assigned.has(dep)) {
112
+ canAdd = false;
113
+ break;
114
+ }
115
+ }
116
+ if (canAdd) {
117
+ phase.push(node);
118
+ }
119
+ }
120
+ if (phase.length === 0) {
121
+ // This should not happen if cycle detection works
122
+ throw new DependencyError('Unable to resolve dependencies');
123
+ }
124
+ // Sort phase for deterministic order
125
+ phase.sort();
126
+ phases.push(phase);
127
+ for (const node of phase) {
128
+ assigned.add(node);
129
+ }
130
+ }
131
+ return phases;
132
+ }
133
+ //# sourceMappingURL=dependency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency.js","sourceRoot":"","sources":["../../src/scheduler/dependency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Job policy helpers — context builders, result factories, and step-control logic.
3
+ */
4
+ import type { JobResult, ExecutionContext, Conclusion, Step, StepResult } from '../workflow-models.js';
5
+ export interface JobExecutionState {
6
+ failed: boolean;
7
+ cancelled: boolean;
8
+ }
9
+ export interface StepControl {
10
+ shouldStopJob: boolean;
11
+ shouldMarkJobFailed: boolean;
12
+ shouldCancelWorkflow: boolean;
13
+ }
14
+ export declare function buildNeedsContext(needs: string[], results: ReadonlyMap<string, JobResult>): ExecutionContext['needs'];
15
+ export declare function buildJobExecutionContext(context: ExecutionContext, needsContext: ExecutionContext['needs'], envSources: Array<Record<string, string> | undefined>): ExecutionContext;
16
+ export declare function buildStepsContext(stepResults: StepResult[]): ExecutionContext['steps'];
17
+ export declare function createCompletedJobResult(id: string, name: string | undefined, conclusion: Conclusion): JobResult;
18
+ export declare function createInProgressJobResult(id: string, name: string | undefined): JobResult;
19
+ export declare function classifyStepControl(step: Step, result: StepResult, failFast: boolean): StepControl;
20
+ export declare function collectStepOutputs(steps: StepResult[]): Record<string, string>;
21
+ export declare function finalizeJobResult(result: JobResult, executionState: JobExecutionState): void;
22
+ export declare function getDependencySkipReason(needs: string[], results: ReadonlyMap<string, JobResult>): string | null;
23
+ //# sourceMappingURL=job-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-policy.d.ts","sourceRoot":"","sources":["../../src/scheduler/job-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,UAAU,EACX,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAiBD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GACtC,gBAAgB,CAAC,OAAO,CAAC,CAgB3B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACvC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,GACpD,gBAAgB,CAgBlB;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAetF;AAID,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,EAAE,UAAU,GACrB,SAAS,CASX;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,SAAS,CASX;AAID,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,OAAO,GAChB,WAAW,CAOb;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW9E;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,iBAAiB,GAChC,IAAI,CASN;AAID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GACtC,MAAM,GAAG,IAAI,CAgBf"}
@@ -0,0 +1,117 @@
1
+ function normalizeNeedsResult(conclusion) {
2
+ if (conclusion === 'failure' ||
3
+ conclusion === 'cancelled' ||
4
+ conclusion === 'skipped') {
5
+ return conclusion;
6
+ }
7
+ return 'success';
8
+ }
9
+ export function buildNeedsContext(needs, results) {
10
+ const needsContext = {};
11
+ for (const need of needs) {
12
+ const needResult = results.get(need);
13
+ if (!needResult) {
14
+ continue;
15
+ }
16
+ needsContext[need] = {
17
+ outputs: { ...needResult.outputs },
18
+ result: normalizeNeedsResult(needResult.conclusion),
19
+ };
20
+ }
21
+ return needsContext;
22
+ }
23
+ export function buildJobExecutionContext(context, needsContext, envSources) {
24
+ const env = Object.assign({}, ...envSources.filter((source) => Boolean(source)));
25
+ return {
26
+ ...context,
27
+ env,
28
+ needs: needsContext,
29
+ job: {
30
+ ...context.job,
31
+ status: 'success',
32
+ },
33
+ steps: {},
34
+ };
35
+ }
36
+ export function buildStepsContext(stepResults) {
37
+ const stepsContext = {};
38
+ for (const stepResult of stepResults) {
39
+ if (stepResult.id) {
40
+ const conclusion = stepResult.conclusion || 'success';
41
+ stepsContext[stepResult.id] = {
42
+ outputs: { ...stepResult.outputs },
43
+ outcome: conclusion,
44
+ conclusion,
45
+ };
46
+ }
47
+ }
48
+ return stepsContext;
49
+ }
50
+ // --- Result factories ---
51
+ export function createCompletedJobResult(id, name, conclusion) {
52
+ return {
53
+ id,
54
+ name,
55
+ steps: [],
56
+ outputs: {},
57
+ status: 'completed',
58
+ conclusion,
59
+ };
60
+ }
61
+ export function createInProgressJobResult(id, name) {
62
+ return {
63
+ id,
64
+ name,
65
+ steps: [],
66
+ outputs: {},
67
+ status: 'in_progress',
68
+ startedAt: new Date(),
69
+ };
70
+ }
71
+ // --- Step control classification ---
72
+ export function classifyStepControl(step, result, failFast) {
73
+ const shouldStopJob = result.conclusion === 'failure' && !step['continue-on-error'];
74
+ return {
75
+ shouldStopJob,
76
+ shouldMarkJobFailed: shouldStopJob,
77
+ shouldCancelWorkflow: shouldStopJob && failFast,
78
+ };
79
+ }
80
+ // --- Output collection ---
81
+ export function collectStepOutputs(steps) {
82
+ const outputs = {};
83
+ for (const stepResult of steps) {
84
+ if (!stepResult.id) {
85
+ continue;
86
+ }
87
+ Object.assign(outputs, stepResult.outputs);
88
+ }
89
+ return outputs;
90
+ }
91
+ // --- Job finalization ---
92
+ export function finalizeJobResult(result, executionState) {
93
+ result.status = 'completed';
94
+ result.conclusion = executionState.cancelled
95
+ ? 'cancelled'
96
+ : executionState.failed
97
+ ? 'failure'
98
+ : 'success';
99
+ result.completedAt = new Date();
100
+ result.outputs = collectStepOutputs(result.steps);
101
+ }
102
+ // --- Dependency skip detection ---
103
+ export function getDependencySkipReason(needs, results) {
104
+ for (const need of needs) {
105
+ const dependencyResult = results.get(need);
106
+ if (!dependencyResult) {
107
+ continue;
108
+ }
109
+ if (dependencyResult.conclusion === 'success') {
110
+ continue;
111
+ }
112
+ const dependencyOutcome = dependencyResult.conclusion ?? 'did not succeed';
113
+ return `Dependency "${need}" ${dependencyOutcome}`;
114
+ }
115
+ return null;
116
+ }
117
+ //# sourceMappingURL=job-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-policy.js","sourceRoot":"","sources":["../../src/scheduler/job-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Job scheduler and execution management
3
+ */
4
+ import type { Workflow, Job, JobResult, ExecutionPlan, ExecutionContext, Conclusion } from '../workflow-models.js';
5
+ import { type StepRunnerOptions } from './step.js';
6
+ export declare function normalizeNeedsInput(needs: unknown): string[];
7
+ /**
8
+ * Job scheduler options
9
+ */
10
+ export interface JobSchedulerOptions {
11
+ /** Maximum parallel jobs (0 = unlimited) */
12
+ maxParallel?: number;
13
+ /** Fail fast - cancel remaining jobs on first failure */
14
+ failFast?: boolean;
15
+ /** Step runner options */
16
+ stepRunner?: StepRunnerOptions;
17
+ }
18
+ /**
19
+ * Job scheduler event types
20
+ */
21
+ export type JobSchedulerEvent = {
22
+ type: 'job:start';
23
+ jobId: string;
24
+ job: Job;
25
+ } | {
26
+ type: 'job:complete';
27
+ jobId: string;
28
+ result: JobResult;
29
+ } | {
30
+ type: 'job:skip';
31
+ jobId: string;
32
+ reason: string;
33
+ result: JobResult;
34
+ } | {
35
+ type: 'phase:start';
36
+ phase: number;
37
+ jobs: string[];
38
+ } | {
39
+ type: 'phase:complete';
40
+ phase: number;
41
+ } | {
42
+ type: 'workflow:start';
43
+ phases: string[][];
44
+ } | {
45
+ type: 'workflow:complete';
46
+ results: Record<string, JobResult>;
47
+ };
48
+ /**
49
+ * Job scheduler event listener
50
+ */
51
+ export type JobSchedulerListener = (event: JobSchedulerEvent) => void;
52
+ /**
53
+ * Job scheduler for workflow execution
54
+ */
55
+ export declare class JobScheduler {
56
+ private workflow;
57
+ private options;
58
+ private graph;
59
+ private results;
60
+ private listeners;
61
+ private cancelled;
62
+ private running;
63
+ private stepRunner;
64
+ constructor(workflow: Workflow, options?: JobSchedulerOptions);
65
+ /**
66
+ * Add event listener. Returns an unsubscribe function.
67
+ */
68
+ on(listener: JobSchedulerListener): () => void;
69
+ /**
70
+ * Emit event to all listeners
71
+ */
72
+ private emit;
73
+ /**
74
+ * Cancel workflow execution
75
+ */
76
+ cancel(): void;
77
+ /**
78
+ * Reset scheduler runtime state for a new run.
79
+ * Keeps listeners and configuration intact.
80
+ */
81
+ private reset;
82
+ /**
83
+ * Create execution plan
84
+ */
85
+ createPlan(): ExecutionPlan;
86
+ /**
87
+ * Run all jobs in workflow
88
+ */
89
+ run(context: ExecutionContext): Promise<Record<string, JobResult>>;
90
+ /**
91
+ * Run jobs in a single phase
92
+ */
93
+ private runPhase;
94
+ /**
95
+ * Mark pending chunks as cancelled from the specified index.
96
+ */
97
+ private markPendingChunksCancelled;
98
+ /**
99
+ * Mark jobs as cancelled if they don't already have a result.
100
+ */
101
+ private markJobsCancelled;
102
+ /**
103
+ * Run a single job
104
+ */
105
+ private runJob;
106
+ /**
107
+ * Resolve runJob short-circuit result when cancellation state allows bypassing execution.
108
+ */
109
+ private getCancellationShortCircuitResult;
110
+ /**
111
+ * Execute all steps for a job and return the final execution state.
112
+ */
113
+ private executeJobSteps;
114
+ /**
115
+ * Finalize and record a completed job result.
116
+ */
117
+ private finalizeAndStoreJobResult;
118
+ /**
119
+ * Create, store, and emit skip result for a job.
120
+ */
121
+ private skipJob;
122
+ /**
123
+ * Store terminal job result and emit terminal job events.
124
+ */
125
+ private completeTerminalJob;
126
+ /**
127
+ * Emit terminal observation events for a job.
128
+ */
129
+ private emitTerminalObservationEvents;
130
+ /**
131
+ * Build execution context with needs data
132
+ */
133
+ private buildJobContext;
134
+ /**
135
+ * Build step context with previous step outputs
136
+ */
137
+ private buildStepContext;
138
+ /**
139
+ * Get current results
140
+ */
141
+ getResults(): Record<string, JobResult>;
142
+ /**
143
+ * Get overall conclusion
144
+ */
145
+ getConclusion(): Conclusion;
146
+ }
147
+ /**
148
+ * Create execution plan for workflow
149
+ */
150
+ export declare function createExecutionPlan(workflow: Workflow): ExecutionPlan;
151
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../src/scheduler/job.ts"],"names":[],"mappings":"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"}