@calmo/task-runner 3.3.0 → 3.4.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 (52) hide show
  1. package/.jules/backlog_maniac.md +3 -0
  2. package/CHANGELOG.md +10 -0
  3. package/coverage/coverage-final.json +5 -4
  4. package/coverage/index.html +7 -7
  5. package/coverage/lcov-report/index.html +7 -7
  6. package/coverage/lcov-report/src/EventBus.ts.html +2 -2
  7. package/coverage/lcov-report/src/TaskGraphValidationError.ts.html +121 -0
  8. package/coverage/lcov-report/src/TaskGraphValidator.ts.html +15 -15
  9. package/coverage/lcov-report/src/TaskRunner.ts.html +25 -13
  10. package/coverage/lcov-report/src/TaskRunnerBuilder.ts.html +1 -1
  11. package/coverage/lcov-report/src/TaskRunnerExecutionConfig.ts.html +1 -1
  12. package/coverage/lcov-report/src/TaskStateManager.ts.html +1 -1
  13. package/coverage/lcov-report/src/WorkflowExecutor.ts.html +1 -1
  14. package/coverage/lcov-report/src/contracts/RunnerEvents.ts.html +1 -1
  15. package/coverage/lcov-report/src/contracts/index.html +1 -1
  16. package/coverage/lcov-report/src/index.html +19 -4
  17. package/coverage/lcov-report/src/strategies/DryRunExecutionStrategy.ts.html +1 -1
  18. package/coverage/lcov-report/src/strategies/RetryingExecutionStrategy.ts.html +2 -2
  19. package/coverage/lcov-report/src/strategies/StandardExecutionStrategy.ts.html +1 -1
  20. package/coverage/lcov-report/src/strategies/index.html +1 -1
  21. package/coverage/lcov.info +112 -98
  22. package/coverage/src/EventBus.ts.html +2 -2
  23. package/coverage/src/TaskGraphValidationError.ts.html +121 -0
  24. package/coverage/src/TaskGraphValidator.ts.html +15 -15
  25. package/coverage/src/TaskRunner.ts.html +25 -13
  26. package/coverage/src/TaskRunnerBuilder.ts.html +1 -1
  27. package/coverage/src/TaskRunnerExecutionConfig.ts.html +1 -1
  28. package/coverage/src/TaskStateManager.ts.html +1 -1
  29. package/coverage/src/WorkflowExecutor.ts.html +1 -1
  30. package/coverage/src/contracts/RunnerEvents.ts.html +1 -1
  31. package/coverage/src/contracts/index.html +1 -1
  32. package/coverage/src/index.html +19 -4
  33. package/coverage/src/strategies/DryRunExecutionStrategy.ts.html +1 -1
  34. package/coverage/src/strategies/RetryingExecutionStrategy.ts.html +2 -2
  35. package/coverage/src/strategies/StandardExecutionStrategy.ts.html +1 -1
  36. package/coverage/src/strategies/index.html +1 -1
  37. package/dist/TaskGraphValidationError.d.ts +9 -0
  38. package/dist/TaskGraphValidationError.js +13 -0
  39. package/dist/TaskGraphValidationError.js.map +1 -0
  40. package/dist/TaskRunner.js +2 -1
  41. package/dist/TaskRunner.js.map +1 -1
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +1 -0
  44. package/dist/index.js.map +1 -1
  45. package/openspec/changes/archive/2026-01-18-add-concurrency-control/tasks.md +9 -0
  46. package/package.json +1 -1
  47. package/src/TaskGraphValidationError.ts +12 -0
  48. package/src/TaskRunner.ts +5 -1
  49. package/src/index.ts +1 -0
  50. package/test-report.xml +109 -107
  51. package/openspec/changes/add-concurrency-control/tasks.md +0 -9
  52. /package/openspec/changes/{add-concurrency-control → archive/2026-01-18-add-concurrency-control}/proposal.md +0 -0
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>227/227</span>
28
+ <span class='fraction'>230/230</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>42/42</span>
42
+ <span class='fraction'>43/43</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>223/223</span>
49
+ <span class='fraction'>226/226</span>
50
50
  </div>
51
51
 
52
52
 
@@ -93,6 +93,21 @@
93
93
  <td data-value="15" class="abs high">15/15</td>
94
94
  </tr>
95
95
 
96
+ <tr>
97
+ <td class="file high" data-value="TaskGraphValidationError.ts"><a href="TaskGraphValidationError.ts.html">TaskGraphValidationError.ts</a></td>
98
+ <td data-value="100" class="pic high">
99
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
100
+ </td>
101
+ <td data-value="100" class="pct high">100%</td>
102
+ <td data-value="3" class="abs high">3/3</td>
103
+ <td data-value="100" class="pct high">100%</td>
104
+ <td data-value="0" class="abs high">0/0</td>
105
+ <td data-value="100" class="pct high">100%</td>
106
+ <td data-value="1" class="abs high">1/1</td>
107
+ <td data-value="100" class="pct high">100%</td>
108
+ <td data-value="3" class="abs high">3/3</td>
109
+ </tr>
110
+
96
111
  <tr>
97
112
  <td class="file high" data-value="TaskGraphValidator.ts"><a href="TaskGraphValidator.ts.html">TaskGraphValidator.ts</a></td>
98
113
  <td data-value="100" class="pic high">
@@ -191,7 +206,7 @@
191
206
  <div class='footer quiet pad2 space-top1 center small'>
192
207
  Code coverage generated by
193
208
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2026-01-18T20:12:36.619Z
209
+ at 2026-01-18T20:19:46.875Z
195
210
  </div>
196
211
  <script src="../prettify.js"></script>
197
212
  <script>
@@ -163,7 +163,7 @@ export class DryRunExecutionStrategy&lt;TContext&gt;
163
163
  <div class='footer quiet pad2 space-top1 center small'>
164
164
  Code coverage generated by
165
165
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
166
- at 2026-01-18T20:12:36.619Z
166
+ at 2026-01-18T20:19:46.875Z
167
167
  </div>
168
168
  <script src="../../prettify.js"></script>
169
169
  <script>
@@ -161,7 +161,7 @@
161
161
  <span class="cline-any cline-neutral">&nbsp;</span>
162
162
  <span class="cline-any cline-neutral">&nbsp;</span>
163
163
  <span class="cline-any cline-neutral">&nbsp;</span>
164
- <span class="cline-any cline-yes">66x</span>
164
+ <span class="cline-any cline-yes">67x</span>
165
165
  <span class="cline-any cline-neutral">&nbsp;</span>
166
166
  <span class="cline-any cline-neutral">&nbsp;</span>
167
167
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -340,7 +340,7 @@ export class RetryingExecutionStrategy&lt;TContext&gt; implements IExecutionStra
340
340
  <div class='footer quiet pad2 space-top1 center small'>
341
341
  Code coverage generated by
342
342
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
343
- at 2026-01-18T20:12:36.619Z
343
+ at 2026-01-18T20:19:46.875Z
344
344
  </div>
345
345
  <script src="../../prettify.js"></script>
346
346
  <script>
@@ -175,7 +175,7 @@ export class StandardExecutionStrategy&lt;TContext&gt;
175
175
  <div class='footer quiet pad2 space-top1 center small'>
176
176
  Code coverage generated by
177
177
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
178
- at 2026-01-18T20:12:36.619Z
178
+ at 2026-01-18T20:19:46.875Z
179
179
  </div>
180
180
  <script src="../../prettify.js"></script>
181
181
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-01-18T20:12:36.619Z
134
+ at 2026-01-18T20:19:46.875Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>
@@ -0,0 +1,9 @@
1
+ import { ValidationResult } from "./contracts/ValidationResult.js";
2
+ /**
3
+ * Error thrown when a task graph fails validation.
4
+ * Contains the validation result with detailed error information.
5
+ */
6
+ export declare class TaskGraphValidationError extends Error {
7
+ result: ValidationResult;
8
+ constructor(result: ValidationResult, message: string);
9
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Error thrown when a task graph fails validation.
3
+ * Contains the validation result with detailed error information.
4
+ */
5
+ export class TaskGraphValidationError extends Error {
6
+ result;
7
+ constructor(result, message) {
8
+ super(message);
9
+ this.result = result;
10
+ this.name = "TaskGraphValidationError";
11
+ }
12
+ }
13
+ //# sourceMappingURL=TaskGraphValidationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskGraphValidationError.js","sourceRoot":"","sources":["../src/TaskGraphValidationError.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC9B;IAAnB,YAAmB,MAAwB,EAAE,OAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,WAAM,GAAN,MAAM,CAAkB;QAEzC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF"}
@@ -2,6 +2,7 @@ import { TaskGraphValidator } from "./TaskGraphValidator.js";
2
2
  import { EventBus } from "./EventBus.js";
3
3
  import { WorkflowExecutor } from "./WorkflowExecutor.js";
4
4
  import { TaskStateManager } from "./TaskStateManager.js";
5
+ import { TaskGraphValidationError } from "./TaskGraphValidationError.js";
5
6
  import { StandardExecutionStrategy } from "./strategies/StandardExecutionStrategy.js";
6
7
  import { RetryingExecutionStrategy } from "./strategies/RetryingExecutionStrategy.js";
7
8
  import { DryRunExecutionStrategy } from "./strategies/DryRunExecutionStrategy.js";
@@ -105,7 +106,7 @@ export class TaskRunner {
105
106
  };
106
107
  const validationResult = this.validator.validate(taskGraph);
107
108
  if (!validationResult.isValid) {
108
- throw new Error(this.validator.createErrorMessage(validationResult));
109
+ throw new TaskGraphValidationError(validationResult, this.validator.createErrorMessage(validationResult));
109
110
  }
110
111
  const stateManager = new TaskStateManager(this.eventBus);
111
112
  let strategy = this.executionStrategy;
@@ -1 +1 @@
1
- {"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../src/TaskRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../src/TaskRunner.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { TaskRunner } from "./TaskRunner.js";
2
2
  export { TaskRunnerBuilder } from "./TaskRunnerBuilder.js";
3
3
  export { TaskStateManager } from "./TaskStateManager.js";
4
+ export { TaskGraphValidationError } from "./TaskGraphValidationError.js";
4
5
  export { StandardExecutionStrategy } from "./strategies/StandardExecutionStrategy.js";
5
6
  export { RetryingExecutionStrategy } from "./strategies/RetryingExecutionStrategy.js";
6
7
  export type { IExecutionStrategy } from "./strategies/IExecutionStrategy.js";
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { TaskRunner } from "./TaskRunner.js";
2
2
  export { TaskRunnerBuilder } from "./TaskRunnerBuilder.js";
3
3
  export { TaskStateManager } from "./TaskStateManager.js";
4
+ export { TaskGraphValidationError } from "./TaskGraphValidationError.js";
4
5
  export { StandardExecutionStrategy } from "./strategies/StandardExecutionStrategy.js";
5
6
  export { RetryingExecutionStrategy } from "./strategies/RetryingExecutionStrategy.js";
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -0,0 +1,9 @@
1
+ ## Implementation
2
+ - [x] 1.1 Update `TaskRunnerExecutionConfig` to include an optional `concurrency` property.
3
+ - [x] 1.2 Update `WorkflowExecutor` to accept the `concurrency` limit.
4
+ - [x] 1.3 Implement a task queueing mechanism in `WorkflowExecutor` to manage pending tasks.
5
+ - [x] 1.4 Update execution logic to check available concurrency slots before starting a task.
6
+ - [x] 1.5 Ensure task completion triggers the execution of queued tasks.
7
+ - [x] 1.6 Verify that unlimited concurrency (default behavior) is preserved when no limit is set.
8
+ - [x] 1.7 Add unit tests for concurrency limits (e.g., ensure no more than N tasks run at once).
9
+ - [x] 1.8 Add integration tests with mixed dependencies and concurrency limits.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calmo/task-runner",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,12 @@
1
+ import { ValidationResult } from "./contracts/ValidationResult.js";
2
+
3
+ /**
4
+ * Error thrown when a task graph fails validation.
5
+ * Contains the validation result with detailed error information.
6
+ */
7
+ export class TaskGraphValidationError extends Error {
8
+ constructor(public result: ValidationResult, message: string) {
9
+ super(message);
10
+ this.name = "TaskGraphValidationError";
11
+ }
12
+ }
package/src/TaskRunner.ts CHANGED
@@ -7,6 +7,7 @@ import { EventBus } from "./EventBus.js";
7
7
  import { WorkflowExecutor } from "./WorkflowExecutor.js";
8
8
  import { TaskRunnerExecutionConfig } from "./TaskRunnerExecutionConfig.js";
9
9
  import { TaskStateManager } from "./TaskStateManager.js";
10
+ import { TaskGraphValidationError } from "./TaskGraphValidationError.js";
10
11
  import { IExecutionStrategy } from "./strategies/IExecutionStrategy.js";
11
12
  import { StandardExecutionStrategy } from "./strategies/StandardExecutionStrategy.js";
12
13
  import { RetryingExecutionStrategy } from "./strategies/RetryingExecutionStrategy.js";
@@ -138,7 +139,10 @@ export class TaskRunner<TContext> {
138
139
 
139
140
  const validationResult = this.validator.validate(taskGraph);
140
141
  if (!validationResult.isValid) {
141
- throw new Error(this.validator.createErrorMessage(validationResult));
142
+ throw new TaskGraphValidationError(
143
+ validationResult,
144
+ this.validator.createErrorMessage(validationResult)
145
+ );
142
146
  }
143
147
 
144
148
  const stateManager = new TaskStateManager(this.eventBus);
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { TaskRunner } from "./TaskRunner.js";
2
2
  export { TaskRunnerBuilder } from "./TaskRunnerBuilder.js";
3
3
  export { TaskStateManager } from "./TaskStateManager.js";
4
+ export { TaskGraphValidationError } from "./TaskGraphValidationError.js";
4
5
  export { StandardExecutionStrategy } from "./strategies/StandardExecutionStrategy.js";
5
6
  export { RetryingExecutionStrategy } from "./strategies/RetryingExecutionStrategy.js";
6
7
  export type { IExecutionStrategy } from "./strategies/IExecutionStrategy.js";