@calmo/task-runner 3.4.0 → 3.5.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 (95) hide show
  1. package/.github/dependabot.yml +7 -7
  2. package/.github/workflows/ci.yml +4 -4
  3. package/.jules/backlog_maniac.md +1 -0
  4. package/.jules/nexus.md +1 -0
  5. package/.jules/sentinel.md +1 -0
  6. package/.releaserc.json +2 -7
  7. package/AGENTS.md +21 -16
  8. package/CHANGELOG.md +192 -174
  9. package/README.md +95 -88
  10. package/coverage/coverage-final.json +9 -9
  11. package/coverage/index.html +9 -9
  12. package/coverage/lcov-report/index.html +9 -9
  13. package/coverage/lcov-report/src/EventBus.ts.html +30 -24
  14. package/coverage/lcov-report/src/TaskGraphValidationError.ts.html +12 -3
  15. package/coverage/lcov-report/src/TaskGraphValidator.ts.html +152 -137
  16. package/coverage/lcov-report/src/TaskRunner.ts.html +48 -45
  17. package/coverage/lcov-report/src/TaskRunnerBuilder.ts.html +29 -5
  18. package/coverage/lcov-report/src/TaskRunnerExecutionConfig.ts.html +1 -1
  19. package/coverage/lcov-report/src/TaskStateManager.ts.html +82 -52
  20. package/coverage/lcov-report/src/WorkflowExecutor.ts.html +210 -66
  21. package/coverage/lcov-report/src/contracts/RunnerEvents.ts.html +1 -1
  22. package/coverage/lcov-report/src/contracts/index.html +1 -1
  23. package/coverage/lcov-report/src/index.html +16 -16
  24. package/coverage/lcov-report/src/strategies/DryRunExecutionStrategy.ts.html +4 -4
  25. package/coverage/lcov-report/src/strategies/RetryingExecutionStrategy.ts.html +29 -11
  26. package/coverage/lcov-report/src/strategies/StandardExecutionStrategy.ts.html +7 -7
  27. package/coverage/lcov-report/src/strategies/index.html +1 -1
  28. package/coverage/lcov.info +426 -383
  29. package/coverage/src/EventBus.ts.html +30 -24
  30. package/coverage/src/TaskGraphValidationError.ts.html +12 -3
  31. package/coverage/src/TaskGraphValidator.ts.html +152 -137
  32. package/coverage/src/TaskRunner.ts.html +48 -45
  33. package/coverage/src/TaskRunnerBuilder.ts.html +29 -5
  34. package/coverage/src/TaskRunnerExecutionConfig.ts.html +1 -1
  35. package/coverage/src/TaskStateManager.ts.html +82 -52
  36. package/coverage/src/WorkflowExecutor.ts.html +210 -66
  37. package/coverage/src/contracts/RunnerEvents.ts.html +1 -1
  38. package/coverage/src/contracts/index.html +1 -1
  39. package/coverage/src/index.html +16 -16
  40. package/coverage/src/strategies/DryRunExecutionStrategy.ts.html +4 -4
  41. package/coverage/src/strategies/RetryingExecutionStrategy.ts.html +29 -11
  42. package/coverage/src/strategies/StandardExecutionStrategy.ts.html +7 -7
  43. package/coverage/src/strategies/index.html +1 -1
  44. package/dist/EventBus.js +13 -11
  45. package/dist/EventBus.js.map +1 -1
  46. package/dist/TaskGraphValidationError.js.map +1 -1
  47. package/dist/TaskGraphValidator.js +9 -9
  48. package/dist/TaskGraphValidator.js.map +1 -1
  49. package/dist/TaskRunner.js.map +1 -1
  50. package/dist/TaskRunnerBuilder.js.map +1 -1
  51. package/dist/TaskStateManager.d.ts +6 -0
  52. package/dist/TaskStateManager.js +11 -2
  53. package/dist/TaskStateManager.js.map +1 -1
  54. package/dist/TaskStep.d.ts +5 -0
  55. package/dist/WorkflowExecutor.js +49 -7
  56. package/dist/WorkflowExecutor.js.map +1 -1
  57. package/dist/strategies/RetryingExecutionStrategy.js +3 -1
  58. package/dist/strategies/RetryingExecutionStrategy.js.map +1 -1
  59. package/dist/strategies/StandardExecutionStrategy.js +1 -1
  60. package/dist/strategies/StandardExecutionStrategy.js.map +1 -1
  61. package/openspec/AGENTS.md +81 -15
  62. package/openspec/changes/archive/2026-01-18-add-concurrency-control/proposal.md +7 -4
  63. package/openspec/changes/archive/2026-01-18-add-concurrency-control/tasks.md +1 -0
  64. package/openspec/changes/archive/2026-01-18-add-external-task-cancellation/proposal.md +4 -1
  65. package/openspec/changes/archive/2026-01-18-add-external-task-cancellation/tasks.md +2 -1
  66. package/openspec/changes/archive/2026-01-18-add-integration-tests/proposal.md +3 -0
  67. package/openspec/changes/archive/2026-01-18-add-integration-tests/tasks.md +1 -0
  68. package/openspec/changes/archive/2026-01-18-add-task-retry-policy/proposal.md +3 -0
  69. package/openspec/changes/archive/2026-01-18-add-task-retry-policy/tasks.md +1 -0
  70. package/openspec/changes/archive/2026-01-18-add-workflow-preview/proposal.md +3 -0
  71. package/openspec/changes/archive/2026-01-18-add-workflow-preview/tasks.md +1 -0
  72. package/openspec/changes/archive/2026-01-18-feat-conditional-execution/proposal.md +35 -0
  73. package/openspec/changes/archive/2026-01-18-feat-conditional-execution/tasks.md +32 -0
  74. package/openspec/changes/archive/2026-01-18-refactor-core-architecture/proposal.md +3 -0
  75. package/openspec/changes/archive/2026-01-18-refactor-core-architecture/tasks.md +1 -0
  76. package/openspec/changes/feat-per-task-timeout/proposal.md +11 -6
  77. package/openspec/changes/feat-per-task-timeout/tasks.md +1 -1
  78. package/openspec/project.md +21 -15
  79. package/package.json +2 -1
  80. package/src/EventBus.ts +18 -16
  81. package/src/TaskGraph.ts +8 -8
  82. package/src/TaskGraphValidationError.ts +4 -1
  83. package/src/TaskGraphValidator.ts +148 -143
  84. package/src/TaskRunner.ts +42 -41
  85. package/src/TaskRunnerBuilder.ts +11 -3
  86. package/src/TaskStateManager.ts +12 -2
  87. package/src/TaskStep.ts +6 -0
  88. package/src/WorkflowExecutor.ts +63 -15
  89. package/src/contracts/ITaskGraphValidator.ts +12 -12
  90. package/src/contracts/ValidationError.ts +6 -6
  91. package/src/contracts/ValidationResult.ts +4 -4
  92. package/src/strategies/DryRunExecutionStrategy.ts +3 -3
  93. package/src/strategies/RetryingExecutionStrategy.ts +15 -9
  94. package/src/strategies/StandardExecutionStrategy.ts +4 -4
  95. package/test-report.xml +132 -108
@@ -153,7 +153,15 @@
153
153
  <a name='L88'></a><a href='#L88'>88</a>
154
154
  <a name='L89'></a><a href='#L89'>89</a>
155
155
  <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
163
+ <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-neutral">&nbsp;</span>
157
165
  <span class="cline-any cline-neutral">&nbsp;</span>
158
166
  <span class="cline-any cline-neutral">&nbsp;</span>
159
167
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -186,6 +194,10 @@
186
194
  <span class="cline-any cline-yes">12x</span>
187
195
  <span class="cline-any cline-neutral">&nbsp;</span>
188
196
  <span class="cline-any cline-yes">12x</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
201
  <span class="cline-any cline-yes">1x</span>
190
202
  <span class="cline-any cline-neutral">&nbsp;</span>
191
203
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -250,7 +262,9 @@ import { TaskResult } from "../TaskResult.js";
250
262
  /**
251
263
  * Execution strategy that retries tasks upon failure based on their retry configuration.
252
264
  */
253
- export class RetryingExecutionStrategy&lt;TContext&gt; implements IExecutionStrategy&lt;TContext&gt; {
265
+ export class RetryingExecutionStrategy&lt;
266
+ TContext,
267
+ &gt; implements IExecutionStrategy&lt;TContext&gt; {
254
268
  constructor(private innerStrategy: IExecutionStrategy&lt;TContext&gt;) {}
255
269
  &nbsp;
256
270
  async execute(
@@ -275,7 +289,11 @@ export class RetryingExecutionStrategy&lt;TContext&gt; implements IExecutionStra
275
289
  &nbsp;
276
290
  const result = await this.innerStrategy.execute(step, context, signal);
277
291
  &nbsp;
278
- if (result.status === "success" || result.status === "cancelled" || result.status === "skipped") {
292
+ if (
293
+ result.status === "success" ||
294
+ result.status === "cancelled" ||
295
+ result.status === "skipped"
296
+ ) {
279
297
  return result;
280
298
  }
281
299
  &nbsp;
@@ -296,13 +314,13 @@ export class RetryingExecutionStrategy&lt;TContext&gt; implements IExecutionStra
296
314
  try {
297
315
  await this.sleep(delay, signal);
298
316
  } catch (e) {
299
- if (signal?.aborted) {
300
- return {
301
- status: "cancelled",
302
- message: "Task cancelled during retry delay",
303
- };
304
- }
305
- throw e;
317
+ if (signal?.aborted) {
318
+ return {
319
+ status: "cancelled",
320
+ message: "Task cancelled during retry delay",
321
+ };
322
+ }
323
+ throw e;
306
324
  }
307
325
  }
308
326
  }
@@ -340,7 +358,7 @@ export class RetryingExecutionStrategy&lt;TContext&gt; implements IExecutionStra
340
358
  <div class='footer quiet pad2 space-top1 center small'>
341
359
  Code coverage generated by
342
360
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
343
- at 2026-01-18T20:19:46.886Z
361
+ at 2026-01-18T23:00:28.573Z
344
362
  </div>
345
363
  <script src="../../prettify.js"></script>
346
364
  <script>
@@ -113,8 +113,8 @@
113
113
  <span class="cline-any cline-neutral">&nbsp;</span>
114
114
  <span class="cline-any cline-neutral">&nbsp;</span>
115
115
  <span class="cline-any cline-neutral">&nbsp;</span>
116
- <span class="cline-any cline-yes">128x</span>
117
- <span class="cline-any cline-yes">128x</span>
116
+ <span class="cline-any cline-yes">131x</span>
117
+ <span class="cline-any cline-yes">131x</span>
118
118
  <span class="cline-any cline-neutral">&nbsp;</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
120
  <span class="cline-any cline-yes">10x</span>
@@ -140,9 +140,9 @@ import { TaskResult } from "../TaskResult.js";
140
140
  /**
141
141
  * Standard execution strategy that runs the task's run method.
142
142
  */
143
- export class StandardExecutionStrategy&lt;TContext&gt;
144
- implements IExecutionStrategy&lt;TContext&gt;
145
- {
143
+ export class StandardExecutionStrategy&lt;
144
+ TContext,
145
+ &gt; implements IExecutionStrategy&lt;TContext&gt; {
146
146
  async execute(
147
147
  step: TaskStep&lt;TContext&gt;,
148
148
  context: TContext,
@@ -154,7 +154,7 @@ export class StandardExecutionStrategy&lt;TContext&gt;
154
154
  // Check if error is due to abort
155
155
  if (
156
156
  signal?.aborted &amp;&amp;
157
- (e instanceof Error &amp;&amp; e.name === "AbortError" || signal.reason === e)
157
+ ((e instanceof Error &amp;&amp; e.name === "AbortError") || signal.reason === e)
158
158
  ) {
159
159
  return {
160
160
  status: "cancelled",
@@ -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:19:46.886Z
178
+ at 2026-01-18T23:00:28.573Z
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:19:46.886Z
134
+ at 2026-01-18T23:00:28.573Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>