@eldrforge/kodrdriv 1.2.23 → 1.2.24

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 (66) hide show
  1. package/PARALLEL-EXECUTION-FIXES.md +132 -0
  2. package/PARALLEL_EXECUTION_FIX.md +146 -0
  3. package/RECOVERY-FIXES.md +72 -0
  4. package/dist/arguments.js +26 -3
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +3 -3
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +13 -13
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/link.js +13 -13
  11. package/dist/commands/link.js.map +1 -1
  12. package/dist/commands/publish.js +200 -146
  13. package/dist/commands/publish.js.map +1 -1
  14. package/dist/commands/review.js +6 -6
  15. package/dist/commands/review.js.map +1 -1
  16. package/dist/commands/select-audio.js +4 -4
  17. package/dist/commands/select-audio.js.map +1 -1
  18. package/dist/commands/tree.js +242 -318
  19. package/dist/commands/tree.js.map +1 -1
  20. package/dist/commands/unlink.js +8 -8
  21. package/dist/commands/unlink.js.map +1 -1
  22. package/dist/commands/versions.js +3 -3
  23. package/dist/commands/versions.js.map +1 -1
  24. package/dist/constants.js +4 -4
  25. package/dist/constants.js.map +1 -1
  26. package/dist/content/diff.js +5 -2
  27. package/dist/content/diff.js.map +1 -1
  28. package/dist/content/files.js +4 -4
  29. package/dist/content/files.js.map +1 -1
  30. package/dist/execution/CommandValidator.js +160 -0
  31. package/dist/execution/CommandValidator.js.map +1 -0
  32. package/dist/execution/DependencyChecker.js +102 -0
  33. package/dist/execution/DependencyChecker.js.map +1 -0
  34. package/dist/execution/DynamicTaskPool.js +455 -0
  35. package/dist/execution/DynamicTaskPool.js.map +1 -0
  36. package/dist/execution/RecoveryManager.js +502 -0
  37. package/dist/execution/RecoveryManager.js.map +1 -0
  38. package/dist/execution/ResourceMonitor.js +125 -0
  39. package/dist/execution/ResourceMonitor.js.map +1 -0
  40. package/dist/execution/Scheduler.js +98 -0
  41. package/dist/execution/Scheduler.js.map +1 -0
  42. package/dist/execution/TreeExecutionAdapter.js +170 -0
  43. package/dist/execution/TreeExecutionAdapter.js.map +1 -0
  44. package/dist/logging.js +3 -3
  45. package/dist/logging.js.map +1 -1
  46. package/dist/ui/ProgressFormatter.js +230 -0
  47. package/dist/ui/ProgressFormatter.js.map +1 -0
  48. package/dist/util/checkpointManager.js +168 -0
  49. package/dist/util/checkpointManager.js.map +1 -0
  50. package/dist/util/dependencyGraph.js +224 -0
  51. package/dist/util/dependencyGraph.js.map +1 -0
  52. package/dist/util/fileLock.js +204 -0
  53. package/dist/util/fileLock.js.map +1 -0
  54. package/dist/util/general.js +5 -5
  55. package/dist/util/general.js.map +1 -1
  56. package/dist/util/gitMutex.js +116 -0
  57. package/dist/util/gitMutex.js.map +1 -0
  58. package/dist/util/mutex.js +96 -0
  59. package/dist/util/mutex.js.map +1 -0
  60. package/dist/util/performance.js +4 -4
  61. package/dist/util/performance.js.map +1 -1
  62. package/dist/util/safety.js +4 -4
  63. package/dist/util/safety.js.map +1 -1
  64. package/dist/util/storage.js +2 -2
  65. package/dist/util/storage.js.map +1 -1
  66. package/package.json +6 -6
@@ -0,0 +1,455 @@
1
+ import { EventEmitter } from 'events';
2
+ import { randomUUID } from 'crypto';
3
+ import { getLogger } from '../logging.js';
4
+ import { findAllDependents } from '../util/dependencyGraph.js';
5
+ import { CheckpointManager } from '../util/checkpointManager.js';
6
+ import { DependencyChecker } from './DependencyChecker.js';
7
+ import { ResourceMonitor } from './ResourceMonitor.js';
8
+ import { Scheduler } from './Scheduler.js';
9
+
10
+ function _define_property(obj, key, value) {
11
+ if (key in obj) {
12
+ Object.defineProperty(obj, key, {
13
+ value: value,
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true
17
+ });
18
+ } else {
19
+ obj[key] = value;
20
+ }
21
+ return obj;
22
+ }
23
+ /**
24
+ * DynamicTaskPool manages parallel execution of packages with dependency awareness
25
+ */ class DynamicTaskPool extends EventEmitter {
26
+ /**
27
+ * Main execution entry point
28
+ */ async execute() {
29
+ this.logger.info(`Starting parallel execution with max concurrency: ${this.config.maxConcurrency}`);
30
+ this.emit('execution:started', {
31
+ totalPackages: this.graph.packages.size
32
+ });
33
+ try {
34
+ // Load checkpoint if continuing
35
+ if (this.config.continue) {
36
+ await this.loadCheckpoint();
37
+ }
38
+ // Initialize ready queue
39
+ this.updateReadyQueue();
40
+ // Main execution loop
41
+ while(!this.isComplete()){
42
+ // Schedule as many packages as we can
43
+ const availableSlots = this.resourceMonitor.getAvailableSlots();
44
+ if (availableSlots > 0 && this.state.ready.length > 0) {
45
+ const toSchedule = this.scheduler.getNext(availableSlots, this.state);
46
+ for (const packageName of toSchedule){
47
+ await this.schedulePackage(packageName);
48
+ }
49
+ }
50
+ // Check if we're stuck
51
+ if (this.runningTasks.size === 0) {
52
+ if (this.state.ready.length > 0) {
53
+ throw new Error('Deadlock detected: packages ready but cannot execute');
54
+ }
55
+ break; // No more work to do
56
+ }
57
+ // Wait for next package to complete
58
+ const completedTask = await this.waitForNext();
59
+ await this.handleTaskCompletion(completedTask);
60
+ // Update ready queue
61
+ this.updateReadyQueue();
62
+ // Save checkpoint periodically
63
+ if (this.shouldCheckpoint()) {
64
+ await this.saveCheckpoint();
65
+ }
66
+ }
67
+ // Final checkpoint and cleanup
68
+ // Only cleanup if everything completed (no failures, no skipped packages)
69
+ const allCompleted = this.state.failed.length === 0 && this.state.skipped.length === 0;
70
+ if (allCompleted) {
71
+ await this.checkpointManager.cleanup();
72
+ } else {
73
+ await this.saveCheckpoint();
74
+ }
75
+ // Build and return result
76
+ const result = this.buildExecutionResult();
77
+ this.emit('execution:completed', {
78
+ result
79
+ });
80
+ return result;
81
+ } catch (error) {
82
+ // Save checkpoint on error
83
+ await this.saveCheckpoint();
84
+ throw error;
85
+ }
86
+ }
87
+ /**
88
+ * Initialize execution state
89
+ */ initializeState() {
90
+ const buildOrder = Array.from(this.graph.packages.keys());
91
+ return {
92
+ pending: [
93
+ ...buildOrder
94
+ ],
95
+ ready: [],
96
+ running: [],
97
+ completed: [],
98
+ failed: [],
99
+ skipped: []
100
+ };
101
+ }
102
+ /**
103
+ * Schedule a package for execution
104
+ */ async schedulePackage(packageName) {
105
+ // Move from ready to running
106
+ this.state.ready = this.state.ready.filter((p)=>p !== packageName);
107
+ // Allocate resource
108
+ if (!this.resourceMonitor.allocate()) {
109
+ throw new Error(`Failed to allocate resource for ${packageName}`);
110
+ }
111
+ // Record start time
112
+ this.packageStartTimes.set(packageName, new Date());
113
+ // Create abort controller
114
+ const controller = new AbortController();
115
+ // Start execution
116
+ const promise = this.executePackage(packageName, controller.signal);
117
+ // Track running task
118
+ const task = {
119
+ packageName,
120
+ startTime: new Date(),
121
+ promise,
122
+ controller
123
+ };
124
+ this.runningTasks.set(packageName, task);
125
+ // Update state
126
+ this.state.running.push({
127
+ name: packageName,
128
+ startTime: task.startTime.toISOString(),
129
+ elapsedTime: 0
130
+ });
131
+ // Emit event
132
+ this.emit('package:started', {
133
+ packageName
134
+ });
135
+ this.logger.verbose(`Scheduled ${packageName} (${this.runningTasks.size}/${this.config.maxConcurrency} slots used)`);
136
+ }
137
+ /**
138
+ * Execute a single package (placeholder - will be overridden or use callback)
139
+ */ async executePackage(_packageName, _signal) {
140
+ // This is a placeholder that will be replaced with actual execution logic
141
+ // In the real implementation, this would call the tree.ts executePackage function
142
+ throw new Error('executePackage must be implemented');
143
+ }
144
+ /**
145
+ * Wait for next task to complete
146
+ */ async waitForNext() {
147
+ const runningTasks = Array.from(this.runningTasks.entries());
148
+ const promises = runningTasks.map(([name, task])=>task.promise.then((result)=>({
149
+ packageName: name,
150
+ result,
151
+ error: null
152
+ })).catch((error)=>({
153
+ packageName: name,
154
+ result: null,
155
+ error
156
+ })));
157
+ return await Promise.race(promises);
158
+ }
159
+ /**
160
+ * Handle task completion
161
+ */ async handleTaskCompletion(task) {
162
+ const { packageName, result, error } = task;
163
+ // Remove from running
164
+ this.runningTasks.delete(packageName);
165
+ this.state.running = this.state.running.filter((r)=>r.name !== packageName);
166
+ this.resourceMonitor.release();
167
+ // Record timing
168
+ const endTime = new Date();
169
+ this.packageEndTimes.set(packageName, endTime);
170
+ const startTime = this.packageStartTimes.get(packageName);
171
+ const duration = endTime.getTime() - startTime.getTime();
172
+ this.packageDurations.set(packageName, duration);
173
+ if (error) {
174
+ await this.handleFailure(packageName, error);
175
+ } else {
176
+ await this.handleSuccess(packageName, result);
177
+ }
178
+ }
179
+ /**
180
+ * Handle successful package completion
181
+ */ async handleSuccess(packageName, result) {
182
+ this.state.completed.push(packageName);
183
+ const duration = this.packageDurations.get(packageName);
184
+ this.logger.info(`✓ ${packageName} completed successfully (${this.formatDuration(duration)})`);
185
+ this.emit('package:completed', {
186
+ packageName,
187
+ result
188
+ });
189
+ // Track published version if applicable
190
+ if (result.publishedVersion) {
191
+ this.publishedVersions.push({
192
+ name: packageName,
193
+ version: result.publishedVersion,
194
+ time: new Date()
195
+ });
196
+ }
197
+ }
198
+ /**
199
+ * Handle package failure
200
+ */ async handleFailure(packageName, error) {
201
+ const attemptNumber = (this.retryAttempts.get(packageName) || 0) + 1;
202
+ this.retryAttempts.set(packageName, attemptNumber);
203
+ const isRetriable = this.isRetriableError(error);
204
+ const maxRetries = this.config.maxRetries || 3;
205
+ const canRetry = isRetriable && attemptNumber < maxRetries;
206
+ if (canRetry) {
207
+ // Schedule retry
208
+ this.logger.warn(`⟳ ${packageName} failed (attempt ${attemptNumber}/${maxRetries}), will retry`);
209
+ this.state.pending.push(packageName);
210
+ this.emit('package:retrying', {
211
+ packageName,
212
+ attemptNumber
213
+ });
214
+ // Apply backoff delay
215
+ const delay = this.calculateRetryDelay(attemptNumber);
216
+ await new Promise((resolve)=>setTimeout(resolve, delay));
217
+ } else {
218
+ // Permanent failure
219
+ const dependencies = Array.from(this.graph.edges.get(packageName) || []);
220
+ const dependents = Array.from(findAllDependents(packageName, this.graph));
221
+ const failureInfo = {
222
+ name: packageName,
223
+ error: error.message,
224
+ stack: error.stack,
225
+ isRetriable,
226
+ attemptNumber,
227
+ failedAt: new Date().toISOString(),
228
+ dependencies,
229
+ dependents
230
+ };
231
+ this.state.failed.push(failureInfo);
232
+ this.logger.error(`✗ ${packageName} failed permanently: ${error.message}`);
233
+ this.emit('package:failed', {
234
+ packageName,
235
+ error
236
+ });
237
+ // Cascade failure to dependents
238
+ await this.cascadeFailure(packageName);
239
+ }
240
+ }
241
+ /**
242
+ * Cascade failure to dependent packages
243
+ */ async cascadeFailure(failedPackage) {
244
+ const toSkip = findAllDependents(failedPackage, this.graph);
245
+ for (const dependent of toSkip){
246
+ // Remove from pending/ready
247
+ this.state.pending = this.state.pending.filter((p)=>p !== dependent);
248
+ this.state.ready = this.state.ready.filter((p)=>p !== dependent);
249
+ // Add to skipped
250
+ if (!this.state.skipped.includes(dependent)) {
251
+ this.state.skipped.push(dependent);
252
+ this.logger.warn(`⊘ Skipping ${dependent} (depends on failed ${failedPackage})`);
253
+ this.emit('package:skipped', {
254
+ packageName: dependent,
255
+ reason: `Depends on failed ${failedPackage}`
256
+ });
257
+ }
258
+ }
259
+ }
260
+ /**
261
+ * Update ready queue
262
+ */ updateReadyQueue() {
263
+ const nowReady = [];
264
+ for (const packageName of this.state.pending){
265
+ if (this.dependencyChecker.isReady(packageName, this.state)) {
266
+ nowReady.push(packageName);
267
+ }
268
+ }
269
+ for (const packageName of nowReady){
270
+ this.state.pending = this.state.pending.filter((p)=>p !== packageName);
271
+ this.state.ready.push(packageName);
272
+ }
273
+ }
274
+ /**
275
+ * Check if execution is complete
276
+ */ isComplete() {
277
+ return this.state.pending.length === 0 && this.state.ready.length === 0 && this.runningTasks.size === 0;
278
+ }
279
+ /**
280
+ * Determine if should save checkpoint
281
+ */ shouldCheckpoint() {
282
+ // Checkpoint after each completion for now
283
+ // Could be optimized to checkpoint less frequently
284
+ return true;
285
+ }
286
+ /**
287
+ * Save checkpoint
288
+ */ async saveCheckpoint() {
289
+ const checkpoint = {
290
+ version: '1.0.0',
291
+ executionId: this.executionId,
292
+ createdAt: this.startTime.toISOString(),
293
+ lastUpdated: new Date().toISOString(),
294
+ command: this.config.command,
295
+ originalConfig: this.config.config,
296
+ dependencyGraph: {
297
+ packages: Array.from(this.graph.packages.values()).map((pkg)=>({
298
+ name: pkg.name,
299
+ version: pkg.version,
300
+ path: pkg.path,
301
+ dependencies: Array.from(pkg.dependencies)
302
+ })),
303
+ edges: Array.from(this.graph.edges.entries()).map(([pkg, deps])=>[
304
+ pkg,
305
+ Array.from(deps)
306
+ ])
307
+ },
308
+ buildOrder: [
309
+ ...this.state.pending,
310
+ ...this.state.ready,
311
+ ...this.state.running.map((r)=>r.name),
312
+ ...this.state.completed,
313
+ ...this.state.failed.map((f)=>f.name),
314
+ ...this.state.skipped
315
+ ],
316
+ executionMode: 'parallel',
317
+ maxConcurrency: this.config.maxConcurrency,
318
+ state: this.state,
319
+ publishedVersions: this.publishedVersions.map((pv)=>({
320
+ packageName: pv.name,
321
+ version: pv.version,
322
+ publishTime: pv.time.toISOString()
323
+ })),
324
+ retryAttempts: Object.fromEntries(this.retryAttempts),
325
+ lastRetryTime: {},
326
+ packageStartTimes: Object.fromEntries(Array.from(this.packageStartTimes.entries()).map(([k, v])=>[
327
+ k,
328
+ v.toISOString()
329
+ ])),
330
+ packageEndTimes: Object.fromEntries(Array.from(this.packageEndTimes.entries()).map(([k, v])=>[
331
+ k,
332
+ v.toISOString()
333
+ ])),
334
+ packageDurations: Object.fromEntries(this.packageDurations),
335
+ totalStartTime: this.startTime.toISOString(),
336
+ recoveryHints: [],
337
+ canRecover: true
338
+ };
339
+ await this.checkpointManager.save(checkpoint);
340
+ this.emit('checkpoint:saved', {
341
+ timestamp: new Date()
342
+ });
343
+ }
344
+ /**
345
+ * Load checkpoint
346
+ */ async loadCheckpoint() {
347
+ const checkpoint = await this.checkpointManager.load();
348
+ if (!checkpoint) {
349
+ this.logger.warn('No checkpoint found, starting fresh');
350
+ return;
351
+ }
352
+ this.logger.info('Loading checkpoint...');
353
+ this.logger.info(`Execution ID: ${checkpoint.executionId}`);
354
+ this.logger.info(`Completed: ${checkpoint.state.completed.length} packages`);
355
+ this.logger.info(`Failed: ${checkpoint.state.failed.length} packages`);
356
+ // Restore state
357
+ this.executionId = checkpoint.executionId;
358
+ this.startTime = new Date(checkpoint.totalStartTime);
359
+ this.state = checkpoint.state;
360
+ // Restore timing data
361
+ for (const [pkg, time] of Object.entries(checkpoint.packageStartTimes)){
362
+ this.packageStartTimes.set(pkg, new Date(time));
363
+ }
364
+ for (const [pkg, time] of Object.entries(checkpoint.packageEndTimes)){
365
+ this.packageEndTimes.set(pkg, new Date(time));
366
+ }
367
+ for (const [pkg, duration] of Object.entries(checkpoint.packageDurations)){
368
+ this.packageDurations.set(pkg, duration);
369
+ }
370
+ // Restore retry attempts
371
+ for (const [pkg, attempts] of Object.entries(checkpoint.retryAttempts)){
372
+ this.retryAttempts.set(pkg, attempts);
373
+ }
374
+ // Clear running state (cannot resume mid-execution)
375
+ for (const running of this.state.running){
376
+ this.state.pending.push(running.name);
377
+ }
378
+ this.state.running = [];
379
+ }
380
+ /**
381
+ * Build execution result
382
+ */ buildExecutionResult() {
383
+ const totalDuration = Date.now() - this.startTime.getTime();
384
+ const completedDurations = Array.from(this.packageDurations.values());
385
+ const averageDuration = completedDurations.length > 0 ? completedDurations.reduce((a, b)=>a + b, 0) / completedDurations.length : 0;
386
+ const metrics = {
387
+ totalDuration,
388
+ averagePackageDuration: averageDuration,
389
+ peakConcurrency: this.resourceMonitor.getMetrics().peakConcurrency,
390
+ averageConcurrency: this.resourceMonitor.getMetrics().averageConcurrency
391
+ };
392
+ return {
393
+ success: this.state.failed.length === 0,
394
+ totalPackages: this.graph.packages.size,
395
+ completed: this.state.completed,
396
+ failed: this.state.failed,
397
+ skipped: this.state.skipped,
398
+ metrics
399
+ };
400
+ }
401
+ /**
402
+ * Check if error is retriable
403
+ */ isRetriableError(error) {
404
+ const retriablePatterns = [
405
+ /ETIMEDOUT/i,
406
+ /ECONNRESET/i,
407
+ /ENOTFOUND/i,
408
+ /rate limit/i,
409
+ /temporary failure/i,
410
+ /try again/i,
411
+ /gateway timeout/i,
412
+ /service unavailable/i
413
+ ];
414
+ return retriablePatterns.some((pattern)=>pattern.test(error.message || String(error)));
415
+ }
416
+ /**
417
+ * Calculate retry delay with exponential backoff
418
+ */ calculateRetryDelay(attemptNumber) {
419
+ const initialDelay = this.config.initialRetryDelay || 5000;
420
+ const maxDelay = this.config.maxRetryDelay || 60000;
421
+ const multiplier = this.config.backoffMultiplier || 2;
422
+ const delay = Math.min(initialDelay * Math.pow(multiplier, attemptNumber - 1), maxDelay);
423
+ // Add jitter
424
+ const jitter = Math.random() * 0.1 * delay;
425
+ return delay + jitter;
426
+ }
427
+ /**
428
+ * Format duration in human-readable format
429
+ */ formatDuration(ms) {
430
+ const seconds = Math.floor(ms / 1000);
431
+ const minutes = Math.floor(seconds / 60);
432
+ if (minutes > 0) {
433
+ return `${minutes}m ${seconds % 60}s`;
434
+ }
435
+ return `${seconds}s`;
436
+ }
437
+ constructor(config){
438
+ super(), _define_property(this, "config", void 0), _define_property(this, "graph", void 0), _define_property(this, "state", void 0), _define_property(this, "dependencyChecker", void 0), _define_property(this, "resourceMonitor", void 0), _define_property(this, "scheduler", void 0), _define_property(this, "checkpointManager", void 0), _define_property(this, "logger", getLogger()), // Execution tracking
439
+ _define_property(this, "executionId", void 0), _define_property(this, "startTime", void 0), _define_property(this, "runningTasks", new Map()), _define_property(this, "packageStartTimes", new Map()), _define_property(this, "packageEndTimes", new Map()), _define_property(this, "packageDurations", new Map()), _define_property(this, "retryAttempts", new Map()), _define_property(this, "publishedVersions", []);
440
+ this.config = config;
441
+ this.graph = config.graph;
442
+ this.executionId = randomUUID();
443
+ this.startTime = new Date();
444
+ // Initialize components
445
+ this.dependencyChecker = new DependencyChecker(this.graph);
446
+ this.resourceMonitor = new ResourceMonitor(config.maxConcurrency);
447
+ this.scheduler = new Scheduler(this.graph, this.dependencyChecker);
448
+ this.checkpointManager = new CheckpointManager(config.checkpointPath || process.cwd());
449
+ // Initialize state
450
+ this.state = this.initializeState();
451
+ }
452
+ }
453
+
454
+ export { DynamicTaskPool };
455
+ //# sourceMappingURL=DynamicTaskPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicTaskPool.js","sources":["../../src/execution/DynamicTaskPool.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { randomUUID } from 'crypto';\nimport { getLogger } from '../logging';\nimport { Config } from '../types';\nimport {\n DependencyGraph,\n findAllDependents\n} from '../util/dependencyGraph';\nimport {\n ParallelExecutionCheckpoint,\n ExecutionState,\n ExecutionResult,\n PackageResult,\n ExecutionMetrics,\n FailedPackageSnapshot\n} from '../types/parallelExecution';\nimport { CheckpointManager } from '../util/checkpointManager';\nimport { DependencyChecker } from './DependencyChecker';\nimport { ResourceMonitor } from './ResourceMonitor';\nimport { Scheduler } from './Scheduler';\n\nexport interface PoolConfig {\n graph: DependencyGraph;\n maxConcurrency: number;\n command: string;\n config: Config;\n checkpointPath?: string;\n continue?: boolean;\n maxRetries?: number;\n initialRetryDelay?: number;\n maxRetryDelay?: number;\n backoffMultiplier?: number;\n}\n\ninterface CompletedTask {\n packageName: string;\n result: PackageResult | null;\n error: Error | null;\n}\n\ninterface RunningTask {\n packageName: string;\n startTime: Date;\n promise: Promise<PackageResult>;\n controller: AbortController;\n}\n\n/**\n * DynamicTaskPool manages parallel execution of packages with dependency awareness\n */\nexport class DynamicTaskPool extends EventEmitter {\n private config: PoolConfig;\n private graph: DependencyGraph;\n private state: ExecutionState;\n private dependencyChecker: DependencyChecker;\n private resourceMonitor: ResourceMonitor;\n private scheduler: Scheduler;\n private checkpointManager: CheckpointManager;\n private logger = getLogger();\n\n // Execution tracking\n private executionId: string;\n private startTime: Date;\n private runningTasks = new Map<string, RunningTask>();\n private packageStartTimes = new Map<string, Date>();\n private packageEndTimes = new Map<string, Date>();\n private packageDurations = new Map<string, number>();\n private retryAttempts = new Map<string, number>();\n private publishedVersions: Array<{name: string, version: string, time: Date}> = [];\n\n constructor(config: PoolConfig) {\n super();\n this.config = config;\n this.graph = config.graph;\n this.executionId = randomUUID();\n this.startTime = new Date();\n\n // Initialize components\n this.dependencyChecker = new DependencyChecker(this.graph);\n this.resourceMonitor = new ResourceMonitor(config.maxConcurrency);\n this.scheduler = new Scheduler(this.graph, this.dependencyChecker);\n this.checkpointManager = new CheckpointManager(\n config.checkpointPath || process.cwd()\n );\n\n // Initialize state\n this.state = this.initializeState();\n }\n\n /**\n * Main execution entry point\n */\n async execute(): Promise<ExecutionResult> {\n this.logger.info(`Starting parallel execution with max concurrency: ${this.config.maxConcurrency}`);\n this.emit('execution:started', { totalPackages: this.graph.packages.size });\n\n try {\n // Load checkpoint if continuing\n if (this.config.continue) {\n await this.loadCheckpoint();\n }\n\n // Initialize ready queue\n this.updateReadyQueue();\n\n // Main execution loop\n while (!this.isComplete()) {\n // Schedule as many packages as we can\n const availableSlots = this.resourceMonitor.getAvailableSlots();\n if (availableSlots > 0 && this.state.ready.length > 0) {\n const toSchedule = this.scheduler.getNext(availableSlots, this.state);\n\n for (const packageName of toSchedule) {\n await this.schedulePackage(packageName);\n }\n }\n\n // Check if we're stuck\n if (this.runningTasks.size === 0) {\n if (this.state.ready.length > 0) {\n throw new Error('Deadlock detected: packages ready but cannot execute');\n }\n break; // No more work to do\n }\n\n // Wait for next package to complete\n const completedTask = await this.waitForNext();\n await this.handleTaskCompletion(completedTask);\n\n // Update ready queue\n this.updateReadyQueue();\n\n // Save checkpoint periodically\n if (this.shouldCheckpoint()) {\n await this.saveCheckpoint();\n }\n }\n\n // Final checkpoint and cleanup\n // Only cleanup if everything completed (no failures, no skipped packages)\n const allCompleted = this.state.failed.length === 0 && this.state.skipped.length === 0;\n if (allCompleted) {\n await this.checkpointManager.cleanup();\n } else {\n await this.saveCheckpoint();\n }\n\n // Build and return result\n const result = this.buildExecutionResult();\n this.emit('execution:completed', { result });\n\n return result;\n } catch (error) {\n // Save checkpoint on error\n await this.saveCheckpoint();\n throw error;\n }\n }\n\n /**\n * Initialize execution state\n */\n private initializeState(): ExecutionState {\n const buildOrder = Array.from(this.graph.packages.keys());\n\n return {\n pending: [...buildOrder],\n ready: [],\n running: [],\n completed: [],\n failed: [],\n skipped: []\n };\n }\n\n /**\n * Schedule a package for execution\n */\n private async schedulePackage(packageName: string): Promise<void> {\n // Move from ready to running\n this.state.ready = this.state.ready.filter(p => p !== packageName);\n\n // Allocate resource\n if (!this.resourceMonitor.allocate()) {\n throw new Error(`Failed to allocate resource for ${packageName}`);\n }\n\n // Record start time\n this.packageStartTimes.set(packageName, new Date());\n\n // Create abort controller\n const controller = new AbortController();\n\n // Start execution\n const promise = this.executePackage(packageName, controller.signal);\n\n // Track running task\n const task: RunningTask = {\n packageName,\n startTime: new Date(),\n promise,\n controller\n };\n\n this.runningTasks.set(packageName, task);\n\n // Update state\n this.state.running.push({\n name: packageName,\n startTime: task.startTime.toISOString(),\n elapsedTime: 0\n });\n\n // Emit event\n this.emit('package:started', { packageName });\n\n this.logger.verbose(\n `Scheduled ${packageName} (${this.runningTasks.size}/${this.config.maxConcurrency} slots used)`\n );\n }\n\n /**\n * Execute a single package (placeholder - will be overridden or use callback)\n */\n private async executePackage(\n _packageName: string,\n _signal: AbortSignal\n ): Promise<PackageResult> {\n // This is a placeholder that will be replaced with actual execution logic\n // In the real implementation, this would call the tree.ts executePackage function\n throw new Error('executePackage must be implemented');\n }\n\n /**\n * Wait for next task to complete\n */\n private async waitForNext(): Promise<CompletedTask> {\n const runningTasks = Array.from(this.runningTasks.entries());\n\n const promises = runningTasks.map(([name, task]) =>\n task.promise\n .then(result => ({ packageName: name, result, error: null }))\n .catch(error => ({ packageName: name, result: null, error }))\n );\n\n return await Promise.race(promises);\n }\n\n /**\n * Handle task completion\n */\n private async handleTaskCompletion(task: CompletedTask): Promise<void> {\n const { packageName, result, error } = task;\n\n // Remove from running\n this.runningTasks.delete(packageName);\n this.state.running = this.state.running.filter(r => r.name !== packageName);\n this.resourceMonitor.release();\n\n // Record timing\n const endTime = new Date();\n this.packageEndTimes.set(packageName, endTime);\n\n const startTime = this.packageStartTimes.get(packageName)!;\n const duration = endTime.getTime() - startTime.getTime();\n this.packageDurations.set(packageName, duration);\n\n if (error) {\n await this.handleFailure(packageName, error);\n } else {\n await this.handleSuccess(packageName, result!);\n }\n }\n\n /**\n * Handle successful package completion\n */\n private async handleSuccess(packageName: string, result: PackageResult): Promise<void> {\n this.state.completed.push(packageName);\n\n const duration = this.packageDurations.get(packageName)!;\n this.logger.info(`✓ ${packageName} completed successfully (${this.formatDuration(duration)})`);\n\n this.emit('package:completed', { packageName, result });\n\n // Track published version if applicable\n if (result.publishedVersion) {\n this.publishedVersions.push({\n name: packageName,\n version: result.publishedVersion,\n time: new Date()\n });\n }\n }\n\n /**\n * Handle package failure\n */\n private async handleFailure(packageName: string, error: Error): Promise<void> {\n const attemptNumber = (this.retryAttempts.get(packageName) || 0) + 1;\n this.retryAttempts.set(packageName, attemptNumber);\n\n const isRetriable = this.isRetriableError(error);\n const maxRetries = this.config.maxRetries || 3;\n const canRetry = isRetriable && attemptNumber < maxRetries;\n\n if (canRetry) {\n // Schedule retry\n this.logger.warn(\n `⟳ ${packageName} failed (attempt ${attemptNumber}/${maxRetries}), will retry`\n );\n\n this.state.pending.push(packageName);\n this.emit('package:retrying', { packageName, attemptNumber });\n\n // Apply backoff delay\n const delay = this.calculateRetryDelay(attemptNumber);\n await new Promise(resolve => setTimeout(resolve, delay));\n } else {\n // Permanent failure\n const dependencies = Array.from(this.graph.edges.get(packageName) || []);\n const dependents = Array.from(findAllDependents(packageName, this.graph));\n\n const failureInfo: FailedPackageSnapshot = {\n name: packageName,\n error: error.message,\n stack: error.stack,\n isRetriable,\n attemptNumber,\n failedAt: new Date().toISOString(),\n dependencies,\n dependents\n };\n\n this.state.failed.push(failureInfo);\n\n this.logger.error(`✗ ${packageName} failed permanently: ${error.message}`);\n this.emit('package:failed', { packageName, error });\n\n // Cascade failure to dependents\n await this.cascadeFailure(packageName);\n }\n }\n\n /**\n * Cascade failure to dependent packages\n */\n private async cascadeFailure(failedPackage: string): Promise<void> {\n const toSkip = findAllDependents(failedPackage, this.graph);\n\n for (const dependent of toSkip) {\n // Remove from pending/ready\n this.state.pending = this.state.pending.filter(p => p !== dependent);\n this.state.ready = this.state.ready.filter(p => p !== dependent);\n\n // Add to skipped\n if (!this.state.skipped.includes(dependent)) {\n this.state.skipped.push(dependent);\n this.logger.warn(`⊘ Skipping ${dependent} (depends on failed ${failedPackage})`);\n this.emit('package:skipped', {\n packageName: dependent,\n reason: `Depends on failed ${failedPackage}`\n });\n }\n }\n }\n\n /**\n * Update ready queue\n */\n private updateReadyQueue(): void {\n const nowReady: string[] = [];\n\n for (const packageName of this.state.pending) {\n if (this.dependencyChecker.isReady(packageName, this.state)) {\n nowReady.push(packageName);\n }\n }\n\n for (const packageName of nowReady) {\n this.state.pending = this.state.pending.filter(p => p !== packageName);\n this.state.ready.push(packageName);\n }\n }\n\n /**\n * Check if execution is complete\n */\n private isComplete(): boolean {\n return (\n this.state.pending.length === 0 &&\n this.state.ready.length === 0 &&\n this.runningTasks.size === 0\n );\n }\n\n /**\n * Determine if should save checkpoint\n */\n private shouldCheckpoint(): boolean {\n // Checkpoint after each completion for now\n // Could be optimized to checkpoint less frequently\n return true;\n }\n\n /**\n * Save checkpoint\n */\n private async saveCheckpoint(): Promise<void> {\n const checkpoint: ParallelExecutionCheckpoint = {\n version: '1.0.0',\n executionId: this.executionId,\n createdAt: this.startTime.toISOString(),\n lastUpdated: new Date().toISOString(),\n command: this.config.command,\n originalConfig: this.config.config,\n dependencyGraph: {\n packages: Array.from(this.graph.packages.values()).map(pkg => ({\n name: pkg.name,\n version: pkg.version,\n path: pkg.path,\n dependencies: Array.from(pkg.dependencies)\n })),\n edges: Array.from(this.graph.edges.entries()).map(([pkg, deps]) => [\n pkg,\n Array.from(deps)\n ])\n },\n buildOrder: [\n ...this.state.pending,\n ...this.state.ready,\n ...this.state.running.map(r => r.name),\n ...this.state.completed,\n ...this.state.failed.map(f => f.name),\n ...this.state.skipped\n ],\n executionMode: 'parallel',\n maxConcurrency: this.config.maxConcurrency,\n state: this.state,\n publishedVersions: this.publishedVersions.map(pv => ({\n packageName: pv.name,\n version: pv.version,\n publishTime: pv.time.toISOString()\n })),\n retryAttempts: Object.fromEntries(this.retryAttempts),\n lastRetryTime: {},\n packageStartTimes: Object.fromEntries(\n Array.from(this.packageStartTimes.entries()).map(([k, v]) => [k, v.toISOString()])\n ),\n packageEndTimes: Object.fromEntries(\n Array.from(this.packageEndTimes.entries()).map(([k, v]) => [k, v.toISOString()])\n ),\n packageDurations: Object.fromEntries(this.packageDurations),\n totalStartTime: this.startTime.toISOString(),\n recoveryHints: [],\n canRecover: true\n };\n\n await this.checkpointManager.save(checkpoint);\n this.emit('checkpoint:saved', { timestamp: new Date() });\n }\n\n /**\n * Load checkpoint\n */\n private async loadCheckpoint(): Promise<void> {\n const checkpoint = await this.checkpointManager.load();\n\n if (!checkpoint) {\n this.logger.warn('No checkpoint found, starting fresh');\n return;\n }\n\n this.logger.info('Loading checkpoint...');\n this.logger.info(`Execution ID: ${checkpoint.executionId}`);\n this.logger.info(`Completed: ${checkpoint.state.completed.length} packages`);\n this.logger.info(`Failed: ${checkpoint.state.failed.length} packages`);\n\n // Restore state\n this.executionId = checkpoint.executionId;\n this.startTime = new Date(checkpoint.totalStartTime);\n this.state = checkpoint.state;\n\n // Restore timing data\n for (const [pkg, time] of Object.entries(checkpoint.packageStartTimes)) {\n this.packageStartTimes.set(pkg, new Date(time));\n }\n for (const [pkg, time] of Object.entries(checkpoint.packageEndTimes)) {\n this.packageEndTimes.set(pkg, new Date(time));\n }\n for (const [pkg, duration] of Object.entries(checkpoint.packageDurations)) {\n this.packageDurations.set(pkg, duration);\n }\n\n // Restore retry attempts\n for (const [pkg, attempts] of Object.entries(checkpoint.retryAttempts)) {\n this.retryAttempts.set(pkg, attempts);\n }\n\n // Clear running state (cannot resume mid-execution)\n for (const running of this.state.running) {\n this.state.pending.push(running.name);\n }\n this.state.running = [];\n }\n\n /**\n * Build execution result\n */\n private buildExecutionResult(): ExecutionResult {\n const totalDuration = Date.now() - this.startTime.getTime();\n const completedDurations = Array.from(this.packageDurations.values());\n const averageDuration = completedDurations.length > 0\n ? completedDurations.reduce((a, b) => a + b, 0) / completedDurations.length\n : 0;\n\n const metrics: ExecutionMetrics = {\n totalDuration,\n averagePackageDuration: averageDuration,\n peakConcurrency: this.resourceMonitor.getMetrics().peakConcurrency,\n averageConcurrency: this.resourceMonitor.getMetrics().averageConcurrency\n };\n\n return {\n success: this.state.failed.length === 0,\n totalPackages: this.graph.packages.size,\n completed: this.state.completed,\n failed: this.state.failed,\n skipped: this.state.skipped,\n metrics\n };\n }\n\n /**\n * Check if error is retriable\n */\n private isRetriableError(error: Error): boolean {\n const retriablePatterns = [\n /ETIMEDOUT/i,\n /ECONNRESET/i,\n /ENOTFOUND/i,\n /rate limit/i,\n /temporary failure/i,\n /try again/i,\n /gateway timeout/i,\n /service unavailable/i\n ];\n\n return retriablePatterns.some(pattern =>\n pattern.test(error.message || String(error))\n );\n }\n\n /**\n * Calculate retry delay with exponential backoff\n */\n private calculateRetryDelay(attemptNumber: number): number {\n const initialDelay = this.config.initialRetryDelay || 5000;\n const maxDelay = this.config.maxRetryDelay || 60000;\n const multiplier = this.config.backoffMultiplier || 2;\n\n const delay = Math.min(\n initialDelay * Math.pow(multiplier, attemptNumber - 1),\n maxDelay\n );\n\n // Add jitter\n const jitter = Math.random() * 0.1 * delay;\n\n return delay + jitter;\n }\n\n /**\n * Format duration in human-readable format\n */\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n }\n}\n"],"names":["DynamicTaskPool","EventEmitter","execute","logger","info","config","maxConcurrency","emit","totalPackages","graph","packages","size","continue","loadCheckpoint","updateReadyQueue","isComplete","availableSlots","resourceMonitor","getAvailableSlots","state","ready","length","toSchedule","scheduler","getNext","packageName","schedulePackage","runningTasks","Error","completedTask","waitForNext","handleTaskCompletion","shouldCheckpoint","saveCheckpoint","allCompleted","failed","skipped","checkpointManager","cleanup","result","buildExecutionResult","error","initializeState","buildOrder","Array","from","keys","pending","running","completed","filter","p","allocate","packageStartTimes","set","Date","controller","AbortController","promise","executePackage","signal","task","startTime","push","name","toISOString","elapsedTime","verbose","_packageName","_signal","entries","promises","map","then","catch","Promise","race","delete","r","release","endTime","packageEndTimes","get","duration","getTime","packageDurations","handleFailure","handleSuccess","formatDuration","publishedVersion","publishedVersions","version","time","attemptNumber","retryAttempts","isRetriable","isRetriableError","maxRetries","canRetry","warn","delay","calculateRetryDelay","resolve","setTimeout","dependencies","edges","dependents","findAllDependents","failureInfo","message","stack","failedAt","cascadeFailure","failedPackage","toSkip","dependent","includes","reason","nowReady","dependencyChecker","isReady","checkpoint","executionId","createdAt","lastUpdated","command","originalConfig","dependencyGraph","values","pkg","path","deps","f","executionMode","pv","publishTime","Object","fromEntries","lastRetryTime","k","v","totalStartTime","recoveryHints","canRecover","save","timestamp","load","attempts","totalDuration","now","completedDurations","averageDuration","reduce","a","b","metrics","averagePackageDuration","peakConcurrency","getMetrics","averageConcurrency","success","retriablePatterns","some","pattern","test","String","initialDelay","initialRetryDelay","maxDelay","maxRetryDelay","multiplier","backoffMultiplier","Math","min","pow","jitter","random","ms","seconds","floor","minutes","getLogger","Map","randomUUID","DependencyChecker","ResourceMonitor","Scheduler","CheckpointManager","checkpointPath","process","cwd"],"mappings":"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"}