@eldrforge/kodrdriv 1.2.28 → 1.2.123

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 (82) hide show
  1. package/dist/application.js +16 -13
  2. package/dist/application.js.map +1 -1
  3. package/dist/arguments.js +5 -5
  4. package/dist/arguments.js.map +1 -1
  5. package/dist/commands/audio-review.js +2 -5
  6. package/dist/commands/audio-review.js.map +1 -1
  7. package/dist/commands/clean.js +2 -4
  8. package/dist/commands/clean.js.map +1 -1
  9. package/dist/commands/commit.js +3 -6
  10. package/dist/commands/commit.js.map +1 -1
  11. package/dist/commands/development.js +7 -7
  12. package/dist/commands/development.js.map +1 -1
  13. package/dist/commands/link.js +3 -7
  14. package/dist/commands/link.js.map +1 -1
  15. package/dist/commands/precommit.js +99 -0
  16. package/dist/commands/precommit.js.map +1 -0
  17. package/dist/commands/publish.js +47 -32
  18. package/dist/commands/publish.js.map +1 -1
  19. package/dist/commands/release.js +3 -7
  20. package/dist/commands/release.js.map +1 -1
  21. package/dist/commands/review.js +4 -6
  22. package/dist/commands/review.js.map +1 -1
  23. package/dist/commands/tree.js +271 -88
  24. package/dist/commands/tree.js.map +1 -1
  25. package/dist/commands/unlink.js +3 -7
  26. package/dist/commands/unlink.js.map +1 -1
  27. package/dist/commands/updates.js +2 -4
  28. package/dist/commands/updates.js.map +1 -1
  29. package/dist/commands/versions.js +3 -7
  30. package/dist/commands/versions.js.map +1 -1
  31. package/dist/constants.js +4 -2
  32. package/dist/constants.js.map +1 -1
  33. package/dist/content/files.js +2 -4
  34. package/dist/content/files.js.map +1 -1
  35. package/dist/execution/CommandValidator.js +33 -1
  36. package/dist/execution/CommandValidator.js.map +1 -1
  37. package/dist/execution/DynamicTaskPool.js +96 -9
  38. package/dist/execution/DynamicTaskPool.js.map +1 -1
  39. package/dist/execution/ResourceMonitor.js +26 -1
  40. package/dist/execution/ResourceMonitor.js.map +1 -1
  41. package/dist/execution/TreeExecutionAdapter.js +6 -3
  42. package/dist/execution/TreeExecutionAdapter.js.map +1 -1
  43. package/dist/util/checkpointManager.js +2 -4
  44. package/dist/util/checkpointManager.js.map +1 -1
  45. package/dist/util/dependencyGraph.js +2 -4
  46. package/dist/util/dependencyGraph.js.map +1 -1
  47. package/dist/util/general.js +7 -107
  48. package/dist/util/general.js.map +1 -1
  49. package/dist/util/gitMutex.js +63 -18
  50. package/dist/util/gitMutex.js.map +1 -1
  51. package/dist/util/precommitOptimizations.js +310 -0
  52. package/dist/util/precommitOptimizations.js.map +1 -0
  53. package/dist/util/storageAdapter.js +2 -6
  54. package/dist/util/storageAdapter.js.map +1 -1
  55. package/dist/utils/branchState.js +178 -45
  56. package/dist/utils/branchState.js.map +1 -1
  57. package/package.json +6 -5
  58. package/AI-FRIENDLY-LOGGING-GUIDE.md +0 -237
  59. package/AI-LOGGING-MIGRATION-COMPLETE.md +0 -371
  60. package/ALREADY-PUBLISHED-PACKAGES-FIX.md +0 -264
  61. package/AUDIT-BRANCHES-PROGRESS-FIX.md +0 -90
  62. package/AUDIT-EXAMPLE-OUTPUT.md +0 -113
  63. package/CHECKPOINT-RECOVERY-FIX.md +0 -450
  64. package/LOGGING-MIGRATION-STATUS.md +0 -186
  65. package/MONOREPO-PUBLISH-IMPROVEMENTS.md +0 -281
  66. package/PARALLEL-EXECUTION-FIXES.md +0 -132
  67. package/PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md +0 -405
  68. package/PARALLEL-PUBLISH-IMPROVEMENTS-IMPLEMENTED.md +0 -439
  69. package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +0 -375
  70. package/PARALLEL_EXECUTION_FIX.md +0 -146
  71. package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +0 -294
  72. package/RECOVERY-FIXES.md +0 -72
  73. package/SUBMODULE-LOCK-FIX.md +0 -132
  74. package/VERSION-AUDIT-FIX.md +0 -333
  75. package/WORKFLOW-PRECHECK-IMPLEMENTATION.md +0 -239
  76. package/WORKFLOW-SKIP-SUMMARY.md +0 -121
  77. package/dist/util/safety.js +0 -166
  78. package/dist/util/safety.js.map +0 -1
  79. package/dist/util/stdin.js +0 -133
  80. package/dist/util/stdin.js.map +0 -1
  81. package/dist/util/storage.js +0 -187
  82. package/dist/util/storage.js.map +0 -1
@@ -1 +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(`EXECUTION_STARTING: Starting parallel execution | Max Concurrency: ${this.config.maxConcurrency} | Mode: parallel | Purpose: Execute packages with dependency awareness`);\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 due to dependencies)\n // Note: skippedNoChanges is OK - those packages successfully ran but had nothing to do\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 skippedNoChanges: []\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 // Check if this was skipped due to no changes\n if (result.skippedNoChanges) {\n this.state.skippedNoChanges.push(packageName);\n const duration = this.packageDurations.get(packageName)!;\n this.logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Duration: ${this.formatDuration(duration)} | Reason: no-changes`);\n this.emit('package:skipped-no-changes', { packageName, result });\n } else {\n this.state.completed.push(packageName);\n const duration = this.packageDurations.get(packageName)!;\n this.logger.info(`PACKAGE_EXECUTION_COMPLETE: Package execution finished successfully | Package: ${packageName} | Duration: ${this.formatDuration(duration)} | Status: success`);\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 /**\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 // Extract detailed error information\n const errorDetails = this.extractErrorDetails(error, packageName);\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 errorDetails\n };\n\n this.state.failed.push(failureInfo);\n\n this.logger.error(`PACKAGE_FAILED_PERMANENT: Package failed permanently | Package: ${packageName} | Error: ${error.message} | Status: failed | Retriable: false`);\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(`PACKAGE_SKIPPED_DEPENDENCY: Package skipped due to failed dependency | Package: ${dependent} | Failed Dependency: ${failedPackage} | Reason: dependency-failed`);\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('CHECKPOINT_NOT_FOUND: No checkpoint file found | Action: Starting fresh execution | Path: ' + this.config.checkpointPath);\n return;\n }\n\n this.logger.info('CHECKPOINT_LOADING: Loading execution checkpoint | Purpose: Resume previous execution | Path: ' + this.config.checkpointPath);\n this.logger.info(`CHECKPOINT_EXECUTION_ID: Checkpoint execution identifier | ID: ${checkpoint.executionId}`);\n this.logger.info(`CHECKPOINT_STATE_COMPLETED: Completed packages from checkpoint | Count: ${checkpoint.state.completed.length} packages`);\n this.logger.info(`CHECKPOINT_STATE_FAILED: Failed packages from checkpoint | Count: ${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 // CRITICAL FIX: Re-evaluate skipped packages\n // After loading checkpoint (especially with --mark-completed), packages that were\n // skipped due to failed dependencies might now be eligible to run if those\n // dependencies are now completed. Move them back to pending for reassessment.\n const unblocked: string[] = [];\n for (const packageName of this.state.skipped) {\n // Check if all dependencies are now completed\n const dependencies = this.graph.edges.get(packageName) || new Set();\n const allDepsCompleted = Array.from(dependencies).every(dep =>\n this.state.completed.includes(dep) || this.state.skippedNoChanges.includes(dep)\n );\n\n // Check if any dependencies are still failed\n const anyDepsFailed = Array.from(dependencies).some(dep =>\n this.state.failed.some(f => f.name === dep)\n );\n\n if (allDepsCompleted && !anyDepsFailed) {\n unblocked.push(packageName);\n }\n }\n\n // Move unblocked packages back to pending\n if (unblocked.length > 0) {\n this.logger.info(`PACKAGES_UNBLOCKED: Dependencies satisfied, packages now ready | Count: ${unblocked.length} | Packages: ${unblocked.join(', ')} | Status: ready-to-execute`);\n for (const packageName of unblocked) {\n this.state.skipped = this.state.skipped.filter(p => p !== packageName);\n this.state.pending.push(packageName);\n }\n }\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 skippedNoChanges: this.state.skippedNoChanges,\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 /**\n * Extract detailed error information from error message and stack\n */\n private extractErrorDetails(error: Error, packageName: string): { type?: string; context?: string; logFile?: string; suggestion?: string } | undefined {\n const errorMsg = error.message || '';\n const errorStack = error.stack || '';\n const fullText = `${errorMsg}\\n${errorStack}`;\n\n // Test coverage failure\n if (fullText.match(/coverage.*below.*threshold|coverage.*insufficient/i)) {\n const coverageMatch = fullText.match(/(\\w+):\\s*(\\d+\\.?\\d*)%.*threshold:\\s*(\\d+\\.?\\d*)%/i);\n return {\n type: 'test_coverage',\n context: coverageMatch\n ? `${coverageMatch[1]}: ${coverageMatch[2]}% (threshold: ${coverageMatch[3]}%)`\n : 'Coverage below threshold',\n logFile: this.getLogFilePath(packageName),\n suggestion: `cd ${this.getPackagePath(packageName)} && npm test -- --coverage`\n };\n }\n\n // Build/compile errors\n if (fullText.match(/compilation.*failed|build.*failed|tsc.*error/i)) {\n return {\n type: 'build_error',\n context: this.extractFirstErrorLine(fullText),\n logFile: this.getLogFilePath(packageName),\n suggestion: `cd ${this.getPackagePath(packageName)} && npm run build`\n };\n }\n\n // Merge conflicts\n if (fullText.match(/merge.*conflict|conflict.*marker|<<<<<<<|>>>>>>>/i)) {\n return {\n type: 'merge_conflict',\n context: 'Unresolved merge conflicts detected',\n logFile: this.getLogFilePath(packageName),\n suggestion: `cd ${this.getPackagePath(packageName)} && git status`\n };\n }\n\n // Test failures\n if (fullText.match(/test.*failed|tests.*failed|\\d+\\s+failing/i)) {\n const failMatch = fullText.match(/(\\d+)\\s+failing/i);\n return {\n type: 'test_failure',\n context: failMatch ? `${failMatch[1]} test(s) failing` : 'Tests failed',\n logFile: this.getLogFilePath(packageName),\n suggestion: `cd ${this.getPackagePath(packageName)} && npm test`\n };\n }\n\n // Timeout errors\n if (fullText.match(/timeout|timed.*out/i)) {\n return {\n type: 'timeout',\n context: this.extractFirstErrorLine(fullText),\n logFile: this.getLogFilePath(packageName),\n suggestion: 'Consider increasing timeout or checking for stuck processes'\n };\n }\n\n // Generic error with log file\n return {\n type: 'unknown',\n context: errorMsg.split('\\n')[0].substring(0, 200),\n logFile: this.getLogFilePath(packageName)\n };\n }\n\n private extractFirstErrorLine(text: string): string {\n const lines = text.split('\\n');\n for (const line of lines) {\n if (line.match(/error|failed|exception/i) && line.trim().length > 10) {\n return line.trim().substring(0, 200);\n }\n }\n return text.split('\\n')[0].substring(0, 200);\n }\n\n private getPackagePath(packageName: string): string {\n const pkgInfo = this.graph.packages.get(packageName);\n return pkgInfo?.path || '.';\n }\n\n private getLogFilePath(packageName: string): string {\n const pkgPath = this.getPackagePath(packageName);\n const outputDir = this.config.config.outputDirectory || 'output/kodrdriv';\n // Try to find the most recent log file\n return `${pkgPath}/${outputDir}/publish_*.log`;\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","skippedNoChanges","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","errorDetails","extractErrorDetails","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","checkpointPath","attempts","unblocked","Set","allDepsCompleted","every","dep","anyDepsFailed","some","join","totalDuration","now","completedDurations","averageDuration","reduce","a","b","metrics","averagePackageDuration","peakConcurrency","getMetrics","averageConcurrency","success","retriablePatterns","pattern","test","String","initialDelay","initialRetryDelay","maxDelay","maxRetryDelay","multiplier","backoffMultiplier","Math","min","pow","jitter","random","ms","seconds","floor","minutes","errorMsg","errorStack","fullText","match","coverageMatch","type","context","logFile","getLogFilePath","suggestion","getPackagePath","extractFirstErrorLine","failMatch","split","substring","text","lines","line","trim","pkgInfo","pkgPath","outputDir","outputDirectory","getLogger","Map","randomUUID","DependencyChecker","ResourceMonitor","Scheduler","CheckpointManager","process","cwd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+CA;;IAGO,MAAMA,eAAAA,SAAwBC,YAAAA,CAAAA;AAuCjC;;AAEC,QACD,MAAMC,OAAAA,GAAoC;AACtC,QAAA,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,mEAAmE,EAAE,IAAI,CAACC,MAAM,CAACC,cAAc,CAAC,uEAAuE,CAAC,CAAA;QAC1L,IAAI,CAACC,IAAI,CAAC,mBAAA,EAAqB;AAAEC,YAAAA,aAAAA,EAAe,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC;AAAK,SAAA,CAAA;QAEzE,IAAI;;AAEA,YAAA,IAAI,IAAI,CAACN,MAAM,CAACO,QAAQ,EAAE;gBACtB,MAAM,IAAI,CAACC,cAAc,EAAA;AAC7B,YAAA;;AAGA,YAAA,IAAI,CAACC,gBAAgB,EAAA;;AAGrB,YAAA,MAAO,CAAC,IAAI,CAACC,UAAU,EAAA,CAAI;;AAEvB,gBAAA,MAAMC,cAAAA,GAAiB,IAAI,CAACC,eAAe,CAACC,iBAAiB,EAAA;gBAC7D,IAAIF,cAAAA,GAAiB,CAAA,IAAK,IAAI,CAACG,KAAK,CAACC,KAAK,CAACC,MAAM,GAAG,CAAA,EAAG;oBACnD,MAAMC,UAAAA,GAAa,IAAI,CAACC,SAAS,CAACC,OAAO,CAACR,cAAAA,EAAgB,IAAI,CAACG,KAAK,CAAA;oBAEpE,KAAK,MAAMM,eAAeH,UAAAA,CAAY;wBAClC,MAAM,IAAI,CAACI,eAAe,CAACD,WAAAA,CAAAA;AAC/B,oBAAA;AACJ,gBAAA;;AAGA,gBAAA,IAAI,IAAI,CAACE,YAAY,CAAChB,IAAI,KAAK,CAAA,EAAG;oBAC9B,IAAI,IAAI,CAACQ,KAAK,CAACC,KAAK,CAACC,MAAM,GAAG,CAAA,EAAG;AAC7B,wBAAA,MAAM,IAAIO,KAAAA,CAAM,sDAAA,CAAA;AACpB,oBAAA;AACA,oBAAA,MAAA;AACJ,gBAAA;;AAGA,gBAAA,MAAMC,aAAAA,GAAgB,MAAM,IAAI,CAACC,WAAW,EAAA;gBAC5C,MAAM,IAAI,CAACC,oBAAoB,CAACF,aAAAA,CAAAA;;AAGhC,gBAAA,IAAI,CAACf,gBAAgB,EAAA;;gBAGrB,IAAI,IAAI,CAACkB,gBAAgB,EAAA,EAAI;oBACzB,MAAM,IAAI,CAACC,cAAc,EAAA;AAC7B,gBAAA;AACJ,YAAA;;;;AAKA,YAAA,MAAMC,eAAe,IAAI,CAACf,KAAK,CAACgB,MAAM,CAACd,MAAM,KAAK,CAAA,IAAK,IAAI,CAACF,KAAK,CAACiB,OAAO,CAACf,MAAM,KAAK,CAAA;AACrF,YAAA,IAAIa,YAAAA,EAAc;AACd,gBAAA,MAAM,IAAI,CAACG,iBAAiB,CAACC,OAAO,EAAA;YACxC,CAAA,MAAO;gBACH,MAAM,IAAI,CAACL,cAAc,EAAA;AAC7B,YAAA;;YAGA,MAAMM,MAAAA,GAAS,IAAI,CAACC,oBAAoB,EAAA;YACxC,IAAI,CAACjC,IAAI,CAAC,qBAAA,EAAuB;AAAEgC,gBAAAA;AAAO,aAAA,CAAA;YAE1C,OAAOA,MAAAA;AACX,QAAA,CAAA,CAAE,OAAOE,KAAAA,EAAO;;YAEZ,MAAM,IAAI,CAACR,cAAc,EAAA;YACzB,MAAMQ,KAAAA;AACV,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,eAAQC,GAAkC;QACtC,MAAMC,UAAAA,GAAaC,KAAAA,CAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACC,QAAQ,CAACoC,IAAI,EAAA,CAAA;QAEtD,OAAO;YACHC,OAAAA,EAAS;AAAIJ,gBAAAA,GAAAA;AAAW,aAAA;AACxBvB,YAAAA,KAAAA,EAAO,EAAE;AACT4B,YAAAA,OAAAA,EAAS,EAAE;AACXC,YAAAA,SAAAA,EAAW,EAAE;AACbd,YAAAA,MAAAA,EAAQ,EAAE;AACVC,YAAAA,OAAAA,EAAS,EAAE;AACXc,YAAAA,gBAAAA,EAAkB;AACtB,SAAA;AACJ,IAAA;AAEA;;QAGA,MAAcxB,eAAAA,CAAgBD,WAAmB,EAAiB;;AAE9D,QAAA,IAAI,CAACN,KAAK,CAACC,KAAK,GAAG,IAAI,CAACD,KAAK,CAACC,KAAK,CAAC+B,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAM3B,WAAAA,CAAAA;;AAGtD,QAAA,IAAI,CAAC,IAAI,CAACR,eAAe,CAACoC,QAAQ,EAAA,EAAI;AAClC,YAAA,MAAM,IAAIzB,KAAAA,CAAM,CAAC,gCAAgC,EAAEH,WAAAA,CAAAA,CAAa,CAAA;AACpE,QAAA;;AAGA,QAAA,IAAI,CAAC6B,iBAAiB,CAACC,GAAG,CAAC9B,aAAa,IAAI+B,IAAAA,EAAAA,CAAAA;;AAG5C,QAAA,MAAMC,aAAa,IAAIC,eAAAA,EAAAA;;AAGvB,QAAA,MAAMC,UAAU,IAAI,CAACC,cAAc,CAACnC,WAAAA,EAAagC,WAAWI,MAAM,CAAA;;AAGlE,QAAA,MAAMC,IAAAA,GAAoB;AACtBrC,YAAAA,WAAAA;AACAsC,YAAAA,SAAAA,EAAW,IAAIP,IAAAA,EAAAA;AACfG,YAAAA,OAAAA;AACAF,YAAAA;AACJ,SAAA;AAEA,QAAA,IAAI,CAAC9B,YAAY,CAAC4B,GAAG,CAAC9B,WAAAA,EAAaqC,IAAAA,CAAAA;;AAGnC,QAAA,IAAI,CAAC3C,KAAK,CAAC6B,OAAO,CAACgB,IAAI,CAAC;YACpBC,IAAAA,EAAMxC,WAAAA;YACNsC,SAAAA,EAAWD,IAAAA,CAAKC,SAAS,CAACG,WAAW,EAAA;YACrCC,WAAAA,EAAa;AACjB,SAAA,CAAA;;QAGA,IAAI,CAAC5D,IAAI,CAAC,iBAAA,EAAmB;AAAEkB,YAAAA;AAAY,SAAA,CAAA;QAE3C,IAAI,CAACtB,MAAM,CAACiE,OAAO,CACf,CAAC,UAAU,EAAE3C,WAAAA,CAAY,EAAE,EAAE,IAAI,CAACE,YAAY,CAAChB,IAAI,CAAC,CAAC,EAAE,IAAI,CAACN,MAAM,CAACC,cAAc,CAAC,YAAY,CAAC,CAAA;AAEvG,IAAA;AAEA;;AAEC,QACD,MAAcsD,cAAAA,CACVS,YAAoB,EACpBC,OAAoB,EACE;;;AAGtB,QAAA,MAAM,IAAI1C,KAAAA,CAAM,oCAAA,CAAA;AACpB,IAAA;AAEA;;AAEC,QACD,MAAcE,WAAAA,GAAsC;QAChD,MAAMH,YAAAA,GAAeiB,MAAMC,IAAI,CAAC,IAAI,CAAClB,YAAY,CAAC4C,OAAO,EAAA,CAAA;AAEzD,QAAA,MAAMC,WAAW7C,YAAAA,CAAa8C,GAAG,CAAC,CAAC,CAACR,IAAAA,EAAMH,IAAAA,CAAK,GAC3CA,IAAAA,CAAKH,OAAO,CACPe,IAAI,CAACnC,CAAAA,UAAW;oBAAEd,WAAAA,EAAawC,IAAAA;AAAM1B,oBAAAA,MAAAA;oBAAQE,KAAAA,EAAO;AAAK,iBAAA,CAAA,CAAA,CACzDkC,KAAK,CAAClC,CAAAA,SAAU;oBAAEhB,WAAAA,EAAawC,IAAAA;oBAAM1B,MAAAA,EAAQ,IAAA;AAAME,oBAAAA;iBAAM,CAAA,CAAA,CAAA;QAGlE,OAAO,MAAMmC,OAAAA,CAAQC,IAAI,CAACL,QAAAA,CAAAA;AAC9B,IAAA;AAEA;;QAGA,MAAczC,oBAAAA,CAAqB+B,IAAmB,EAAiB;AACnE,QAAA,MAAM,EAAErC,WAAW,EAAEc,MAAM,EAAEE,KAAK,EAAE,GAAGqB,IAAAA;;AAGvC,QAAA,IAAI,CAACnC,YAAY,CAACmD,MAAM,CAACrD,WAAAA,CAAAA;AACzB,QAAA,IAAI,CAACN,KAAK,CAAC6B,OAAO,GAAG,IAAI,CAAC7B,KAAK,CAAC6B,OAAO,CAACG,MAAM,CAAC4B,CAAAA,CAAAA,GAAKA,CAAAA,CAAEd,IAAI,KAAKxC,WAAAA,CAAAA;QAC/D,IAAI,CAACR,eAAe,CAAC+D,OAAO,EAAA;;AAG5B,QAAA,MAAMC,UAAU,IAAIzB,IAAAA,EAAAA;AACpB,QAAA,IAAI,CAAC0B,eAAe,CAAC3B,GAAG,CAAC9B,WAAAA,EAAawD,OAAAA,CAAAA;AAEtC,QAAA,MAAMlB,YAAY,IAAI,CAACT,iBAAiB,CAAC6B,GAAG,CAAC1D,WAAAA,CAAAA;AAC7C,QAAA,MAAM2D,QAAAA,GAAWH,OAAAA,CAAQI,OAAO,EAAA,GAAKtB,UAAUsB,OAAO,EAAA;AACtD,QAAA,IAAI,CAACC,gBAAgB,CAAC/B,GAAG,CAAC9B,WAAAA,EAAa2D,QAAAA,CAAAA;AAEvC,QAAA,IAAI3C,KAAAA,EAAO;AACP,YAAA,MAAM,IAAI,CAAC8C,aAAa,CAAC9D,WAAAA,EAAagB,KAAAA,CAAAA;QAC1C,CAAA,MAAO;AACH,YAAA,MAAM,IAAI,CAAC+C,aAAa,CAAC/D,WAAAA,EAAac,MAAAA,CAAAA;AAC1C,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,MAAciD,aAAAA,CAAc/D,WAAmB,EAAEc,MAAqB,EAAiB;;QAEnF,IAAIA,MAAAA,CAAOW,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC/B,KAAK,CAAC+B,gBAAgB,CAACc,IAAI,CAACvC,WAAAA,CAAAA;AACjC,YAAA,MAAM2D,WAAW,IAAI,CAACE,gBAAgB,CAACH,GAAG,CAAC1D,WAAAA,CAAAA;AAC3C,YAAA,IAAI,CAACtB,MAAM,CAACC,IAAI,CAAC,CAAC,8EAA8E,EAAEqB,WAAAA,CAAY,aAAa,EAAE,IAAI,CAACgE,cAAc,CAACL,QAAAA,CAAAA,CAAU,qBAAqB,CAAC,CAAA;YACjL,IAAI,CAAC7E,IAAI,CAAC,4BAAA,EAA8B;AAAEkB,gBAAAA,WAAAA;AAAac,gBAAAA;AAAO,aAAA,CAAA;QAClE,CAAA,MAAO;AACH,YAAA,IAAI,CAACpB,KAAK,CAAC8B,SAAS,CAACe,IAAI,CAACvC,WAAAA,CAAAA;AAC1B,YAAA,MAAM2D,WAAW,IAAI,CAACE,gBAAgB,CAACH,GAAG,CAAC1D,WAAAA,CAAAA;AAC3C,YAAA,IAAI,CAACtB,MAAM,CAACC,IAAI,CAAC,CAAC,+EAA+E,EAAEqB,WAAAA,CAAY,aAAa,EAAE,IAAI,CAACgE,cAAc,CAACL,QAAAA,CAAAA,CAAU,kBAAkB,CAAC,CAAA;YAC/K,IAAI,CAAC7E,IAAI,CAAC,mBAAA,EAAqB;AAAEkB,gBAAAA,WAAAA;AAAac,gBAAAA;AAAO,aAAA,CAAA;;YAGrD,IAAIA,MAAAA,CAAOmD,gBAAgB,EAAE;AACzB,gBAAA,IAAI,CAACC,iBAAiB,CAAC3B,IAAI,CAAC;oBACxBC,IAAAA,EAAMxC,WAAAA;AACNmE,oBAAAA,OAAAA,EAASrD,OAAOmD,gBAAgB;AAChCG,oBAAAA,IAAAA,EAAM,IAAIrC,IAAAA;AACd,iBAAA,CAAA;AACJ,YAAA;AACJ,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,MAAc+B,aAAAA,CAAc9D,WAAmB,EAAEgB,KAAY,EAAiB;QAC1E,MAAMqD,aAAAA,GAAgB,CAAC,IAAI,CAACC,aAAa,CAACZ,GAAG,CAAC1D,WAAAA,CAAAA,IAAgB,CAAA,IAAK,CAAA;AACnE,QAAA,IAAI,CAACsE,aAAa,CAACxC,GAAG,CAAC9B,WAAAA,EAAaqE,aAAAA,CAAAA;AAEpC,QAAA,MAAME,WAAAA,GAAc,IAAI,CAACC,gBAAgB,CAACxD,KAAAA,CAAAA;AAC1C,QAAA,MAAMyD,aAAa,IAAI,CAAC7F,MAAM,CAAC6F,UAAU,IAAI,CAAA;QAC7C,MAAMC,QAAAA,GAAWH,eAAeF,aAAAA,GAAgBI,UAAAA;AAEhD,QAAA,IAAIC,QAAAA,EAAU;;AAEV,YAAA,IAAI,CAAChG,MAAM,CAACiG,IAAI,CACZ,CAAC,EAAE,EAAE3E,WAAAA,CAAY,iBAAiB,EAAEqE,aAAAA,CAAc,CAAC,EAAEI,UAAAA,CAAW,aAAa,CAAC,CAAA;AAGlF,YAAA,IAAI,CAAC/E,KAAK,CAAC4B,OAAO,CAACiB,IAAI,CAACvC,WAAAA,CAAAA;YACxB,IAAI,CAAClB,IAAI,CAAC,kBAAA,EAAoB;AAAEkB,gBAAAA,WAAAA;AAAaqE,gBAAAA;AAAc,aAAA,CAAA;;AAG3D,YAAA,MAAMO,KAAAA,GAAQ,IAAI,CAACC,mBAAmB,CAACR,aAAAA,CAAAA;AACvC,YAAA,MAAM,IAAIlB,OAAAA,CAAQ2B,CAAAA,OAAAA,GAAWC,WAAWD,OAAAA,EAASF,KAAAA,CAAAA,CAAAA;QACrD,CAAA,MAAO;;AAEH,YAAA,MAAMI,YAAAA,GAAe7D,KAAAA,CAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACiG,KAAK,CAACvB,GAAG,CAAC1D,gBAAgB,EAAE,CAAA;YACvE,MAAMkF,UAAAA,GAAa/D,MAAMC,IAAI,CAAC+D,kBAAkBnF,WAAAA,EAAa,IAAI,CAAChB,KAAK,CAAA,CAAA;;AAGvE,YAAA,MAAMoG,YAAAA,GAAe,IAAI,CAACC,mBAAmB,CAACrE,KAAAA,EAAOhB,WAAAA,CAAAA;AAErD,YAAA,MAAMsF,WAAAA,GAAqC;gBACvC9C,IAAAA,EAAMxC,WAAAA;AACNgB,gBAAAA,KAAAA,EAAOA,MAAMuE,OAAO;AACpBC,gBAAAA,KAAAA,EAAOxE,MAAMwE,KAAK;AAClBjB,gBAAAA,WAAAA;AACAF,gBAAAA,aAAAA;gBACAoB,QAAAA,EAAU,IAAI1D,OAAOU,WAAW,EAAA;AAChCuC,gBAAAA,YAAAA;AACAE,gBAAAA,UAAAA;AACAE,gBAAAA;AACJ,aAAA;AAEA,YAAA,IAAI,CAAC1F,KAAK,CAACgB,MAAM,CAAC6B,IAAI,CAAC+C,WAAAA,CAAAA;AAEvB,YAAA,IAAI,CAAC5G,MAAM,CAACsC,KAAK,CAAC,CAAC,gEAAgE,EAAEhB,WAAAA,CAAY,UAAU,EAAEgB,KAAAA,CAAMuE,OAAO,CAAC,oCAAoC,CAAC,CAAA;YAChK,IAAI,CAACzG,IAAI,CAAC,gBAAA,EAAkB;AAAEkB,gBAAAA,WAAAA;AAAagB,gBAAAA;AAAM,aAAA,CAAA;;YAGjD,MAAM,IAAI,CAAC0E,cAAc,CAAC1F,WAAAA,CAAAA;AAC9B,QAAA;AACJ,IAAA;AAEA;;QAGA,MAAc0F,cAAAA,CAAeC,aAAqB,EAAiB;AAC/D,QAAA,MAAMC,MAAAA,GAAST,iBAAAA,CAAkBQ,aAAAA,EAAe,IAAI,CAAC3G,KAAK,CAAA;QAE1D,KAAK,MAAM6G,aAAaD,MAAAA,CAAQ;;AAE5B,YAAA,IAAI,CAAClG,KAAK,CAAC4B,OAAO,GAAG,IAAI,CAAC5B,KAAK,CAAC4B,OAAO,CAACI,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAMkE,SAAAA,CAAAA;AAC1D,YAAA,IAAI,CAACnG,KAAK,CAACC,KAAK,GAAG,IAAI,CAACD,KAAK,CAACC,KAAK,CAAC+B,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAMkE,SAAAA,CAAAA;;YAGtD,IAAI,CAAC,IAAI,CAACnG,KAAK,CAACiB,OAAO,CAACmF,QAAQ,CAACD,SAAAA,CAAAA,EAAY;AACzC,gBAAA,IAAI,CAACnG,KAAK,CAACiB,OAAO,CAAC4B,IAAI,CAACsD,SAAAA,CAAAA;AACxB,gBAAA,IAAI,CAACnH,MAAM,CAACiG,IAAI,CAAC,CAAC,gFAAgF,EAAEkB,SAAAA,CAAU,sBAAsB,EAAEF,aAAAA,CAAc,4BAA4B,CAAC,CAAA;gBACjL,IAAI,CAAC7G,IAAI,CAAC,iBAAA,EAAmB;oBACzBkB,WAAAA,EAAa6F,SAAAA;oBACbE,MAAAA,EAAQ,CAAC,kBAAkB,EAAEJ,aAAAA,CAAAA;AACjC,iBAAA,CAAA;AACJ,YAAA;AACJ,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,gBAAQtG,GAAyB;AAC7B,QAAA,MAAM2G,WAAqB,EAAE;AAE7B,QAAA,KAAK,MAAMhG,WAAAA,IAAe,IAAI,CAACN,KAAK,CAAC4B,OAAO,CAAE;YAC1C,IAAI,IAAI,CAAC2E,iBAAiB,CAACC,OAAO,CAAClG,WAAAA,EAAa,IAAI,CAACN,KAAK,CAAA,EAAG;AACzDsG,gBAAAA,QAAAA,CAASzD,IAAI,CAACvC,WAAAA,CAAAA;AAClB,YAAA;AACJ,QAAA;QAEA,KAAK,MAAMA,eAAegG,QAAAA,CAAU;AAChC,YAAA,IAAI,CAACtG,KAAK,CAAC4B,OAAO,GAAG,IAAI,CAAC5B,KAAK,CAAC4B,OAAO,CAACI,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAM3B,WAAAA,CAAAA;AAC1D,YAAA,IAAI,CAACN,KAAK,CAACC,KAAK,CAAC4C,IAAI,CAACvC,WAAAA,CAAAA;AAC1B,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,UAAQV,GAAsB;QAC1B,OACI,IAAI,CAACI,KAAK,CAAC4B,OAAO,CAAC1B,MAAM,KAAK,CAAA,IAC9B,IAAI,CAACF,KAAK,CAACC,KAAK,CAACC,MAAM,KAAK,CAAA,IAC5B,IAAI,CAACM,YAAY,CAAChB,IAAI,KAAK,CAAA;AAEnC,IAAA;AAEA;;AAEC,QACD,gBAAQqB,GAA4B;;;QAGhC,OAAO,IAAA;AACX,IAAA;AAEA;;AAEC,QACD,MAAcC,cAAAA,GAAgC;AAC1C,QAAA,MAAM2F,UAAAA,GAA0C;YAC5ChC,OAAAA,EAAS,OAAA;YACTiC,WAAAA,EAAa,IAAI,CAACA,WAAW;AAC7BC,YAAAA,SAAAA,EAAW,IAAI,CAAC/D,SAAS,CAACG,WAAW,EAAA;YACrC6D,WAAAA,EAAa,IAAIvE,OAAOU,WAAW,EAAA;AACnC8D,YAAAA,OAAAA,EAAS,IAAI,CAAC3H,MAAM,CAAC2H,OAAO;AAC5BC,YAAAA,cAAAA,EAAgB,IAAI,CAAC5H,MAAM,CAACA,MAAM;YAClC6H,eAAAA,EAAiB;AACbxH,gBAAAA,QAAAA,EAAUkC,KAAAA,CAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACC,QAAQ,CAACyH,MAAM,EAAA,CAAA,CAAI1D,GAAG,CAAC2D,CAAAA,OAAQ;AAC3DnE,wBAAAA,IAAAA,EAAMmE,IAAInE,IAAI;AACd2B,wBAAAA,OAAAA,EAASwC,IAAIxC,OAAO;AACpByC,wBAAAA,IAAAA,EAAMD,IAAIC,IAAI;AACd5B,wBAAAA,YAAAA,EAAc7D,KAAAA,CAAMC,IAAI,CAACuF,GAAAA,CAAI3B,YAAY;qBAC7C,CAAA,CAAA;AACAC,gBAAAA,KAAAA,EAAO9D,MAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACiG,KAAK,CAACnC,OAAO,IAAIE,GAAG,CAAC,CAAC,CAAC2D,GAAAA,EAAKE,KAAK,GAAK;AAC/DF,wBAAAA,GAAAA;AACAxF,wBAAAA,KAAAA,CAAMC,IAAI,CAACyF,IAAAA;AACd,qBAAA;AACL,aAAA;YACA3F,UAAAA,EAAY;mBACL,IAAI,CAACxB,KAAK,CAAC4B,OAAO;mBAClB,IAAI,CAAC5B,KAAK,CAACC,KAAK;mBAChB,IAAI,CAACD,KAAK,CAAC6B,OAAO,CAACyB,GAAG,CAACM,CAAAA,CAAAA,GAAKA,CAAAA,CAAEd,IAAI,CAAA;mBAClC,IAAI,CAAC9C,KAAK,CAAC8B,SAAS;mBACpB,IAAI,CAAC9B,KAAK,CAACgB,MAAM,CAACsC,GAAG,CAAC8D,CAAAA,CAAAA,GAAKA,CAAAA,CAAEtE,IAAI,CAAA;mBACjC,IAAI,CAAC9C,KAAK,CAACiB;AACjB,aAAA;YACDoG,aAAAA,EAAe,UAAA;AACflI,YAAAA,cAAAA,EAAgB,IAAI,CAACD,MAAM,CAACC,cAAc;YAC1Ca,KAAAA,EAAO,IAAI,CAACA,KAAK;YACjBwE,iBAAAA,EAAmB,IAAI,CAACA,iBAAiB,CAAClB,GAAG,CAACgE,CAAAA,MAAO;AACjDhH,oBAAAA,WAAAA,EAAagH,GAAGxE,IAAI;AACpB2B,oBAAAA,OAAAA,EAAS6C,GAAG7C,OAAO;oBACnB8C,WAAAA,EAAaD,EAAAA,CAAG5C,IAAI,CAAC3B,WAAW;iBACpC,CAAA,CAAA;AACA6B,YAAAA,aAAAA,EAAe4C,MAAAA,CAAOC,WAAW,CAAC,IAAI,CAAC7C,aAAa,CAAA;AACpD8C,YAAAA,aAAAA,EAAe,EAAC;AAChBvF,YAAAA,iBAAAA,EAAmBqF,OAAOC,WAAW,CACjChG,MAAMC,IAAI,CAAC,IAAI,CAACS,iBAAiB,CAACiB,OAAO,IAAIE,GAAG,CAAC,CAAC,CAACqE,CAAAA,EAAGC,EAAE,GAAK;AAACD,oBAAAA,CAAAA;AAAGC,oBAAAA,CAAAA,CAAE7E,WAAW;AAAG,iBAAA,CAAA,CAAA;AAErFgB,YAAAA,eAAAA,EAAiByD,OAAOC,WAAW,CAC/BhG,MAAMC,IAAI,CAAC,IAAI,CAACqC,eAAe,CAACX,OAAO,IAAIE,GAAG,CAAC,CAAC,CAACqE,CAAAA,EAAGC,EAAE,GAAK;AAACD,oBAAAA,CAAAA;AAAGC,oBAAAA,CAAAA,CAAE7E,WAAW;AAAG,iBAAA,CAAA,CAAA;AAEnFoB,YAAAA,gBAAAA,EAAkBqD,MAAAA,CAAOC,WAAW,CAAC,IAAI,CAACtD,gBAAgB,CAAA;AAC1D0D,YAAAA,cAAAA,EAAgB,IAAI,CAACjF,SAAS,CAACG,WAAW,EAAA;AAC1C+E,YAAAA,aAAAA,EAAe,EAAE;YACjBC,UAAAA,EAAY;AAChB,SAAA;AAEA,QAAA,MAAM,IAAI,CAAC7G,iBAAiB,CAAC8G,IAAI,CAACvB,UAAAA,CAAAA;QAClC,IAAI,CAACrH,IAAI,CAAC,kBAAA,EAAoB;AAAE6I,YAAAA,SAAAA,EAAW,IAAI5F,IAAAA;AAAO,SAAA,CAAA;AAC1D,IAAA;AAEA;;AAEC,QACD,MAAc3C,cAAAA,GAAgC;AAC1C,QAAA,MAAM+G,aAAa,MAAM,IAAI,CAACvF,iBAAiB,CAACgH,IAAI,EAAA;AAEpD,QAAA,IAAI,CAACzB,UAAAA,EAAY;YACb,IAAI,CAACzH,MAAM,CAACiG,IAAI,CAAC,+FAA+F,IAAI,CAAC/F,MAAM,CAACiJ,cAAc,CAAA;AAC1I,YAAA;AACJ,QAAA;QAEA,IAAI,CAACnJ,MAAM,CAACC,IAAI,CAAC,mGAAmG,IAAI,CAACC,MAAM,CAACiJ,cAAc,CAAA;QAC9I,IAAI,CAACnJ,MAAM,CAACC,IAAI,CAAC,CAAC,+DAA+D,EAAEwH,UAAAA,CAAWC,WAAW,CAAA,CAAE,CAAA;AAC3G,QAAA,IAAI,CAAC1H,MAAM,CAACC,IAAI,CAAC,CAAC,wEAAwE,EAAEwH,UAAAA,CAAWzG,KAAK,CAAC8B,SAAS,CAAC5B,MAAM,CAAC,SAAS,CAAC,CAAA;AACxI,QAAA,IAAI,CAAClB,MAAM,CAACC,IAAI,CAAC,CAAC,kEAAkE,EAAEwH,UAAAA,CAAWzG,KAAK,CAACgB,MAAM,CAACd,MAAM,CAAC,SAAS,CAAC,CAAA;;AAG/H,QAAA,IAAI,CAACwG,WAAW,GAAGD,UAAAA,CAAWC,WAAW;AACzC,QAAA,IAAI,CAAC9D,SAAS,GAAG,IAAIP,IAAAA,CAAKoE,WAAWoB,cAAc,CAAA;AACnD,QAAA,IAAI,CAAC7H,KAAK,GAAGyG,UAAAA,CAAWzG,KAAK;;QAG7B,KAAK,MAAM,CAACiH,GAAAA,EAAKvC,IAAAA,CAAK,IAAI8C,OAAOpE,OAAO,CAACqD,UAAAA,CAAWtE,iBAAiB,CAAA,CAAG;AACpE,YAAA,IAAI,CAACA,iBAAiB,CAACC,GAAG,CAAC6E,GAAAA,EAAK,IAAI5E,IAAAA,CAAKqC,IAAAA,CAAAA,CAAAA;AAC7C,QAAA;QACA,KAAK,MAAM,CAACuC,GAAAA,EAAKvC,IAAAA,CAAK,IAAI8C,OAAOpE,OAAO,CAACqD,UAAAA,CAAW1C,eAAe,CAAA,CAAG;AAClE,YAAA,IAAI,CAACA,eAAe,CAAC3B,GAAG,CAAC6E,GAAAA,EAAK,IAAI5E,IAAAA,CAAKqC,IAAAA,CAAAA,CAAAA;AAC3C,QAAA;QACA,KAAK,MAAM,CAACuC,GAAAA,EAAKhD,QAAAA,CAAS,IAAIuD,OAAOpE,OAAO,CAACqD,UAAAA,CAAWtC,gBAAgB,CAAA,CAAG;AACvE,YAAA,IAAI,CAACA,gBAAgB,CAAC/B,GAAG,CAAC6E,GAAAA,EAAKhD,QAAAA,CAAAA;AACnC,QAAA;;QAGA,KAAK,MAAM,CAACgD,GAAAA,EAAKmB,QAAAA,CAAS,IAAIZ,OAAOpE,OAAO,CAACqD,UAAAA,CAAW7B,aAAa,CAAA,CAAG;AACpE,YAAA,IAAI,CAACA,aAAa,CAACxC,GAAG,CAAC6E,GAAAA,EAAKmB,QAAAA,CAAAA;AAChC,QAAA;;AAGA,QAAA,KAAK,MAAMvG,OAAAA,IAAW,IAAI,CAAC7B,KAAK,CAAC6B,OAAO,CAAE;YACtC,IAAI,CAAC7B,KAAK,CAAC4B,OAAO,CAACiB,IAAI,CAAChB,QAAQiB,IAAI,CAAA;AACxC,QAAA;AACA,QAAA,IAAI,CAAC9C,KAAK,CAAC6B,OAAO,GAAG,EAAE;;;;;AAMvB,QAAA,MAAMwG,YAAsB,EAAE;AAC9B,QAAA,KAAK,MAAM/H,WAAAA,IAAe,IAAI,CAACN,KAAK,CAACiB,OAAO,CAAE;;YAE1C,MAAMqE,YAAAA,GAAe,IAAI,CAAChG,KAAK,CAACiG,KAAK,CAACvB,GAAG,CAAC1D,WAAAA,CAAAA,IAAgB,IAAIgI,GAAAA,EAAAA;YAC9D,MAAMC,gBAAAA,GAAmB9G,KAAAA,CAAMC,IAAI,CAAC4D,YAAAA,CAAAA,CAAckD,KAAK,CAACC,CAAAA,GAAAA,GACpD,IAAI,CAACzI,KAAK,CAAC8B,SAAS,CAACsE,QAAQ,CAACqC,GAAAA,CAAAA,IAAQ,IAAI,CAACzI,KAAK,CAAC+B,gBAAgB,CAACqE,QAAQ,CAACqC,GAAAA,CAAAA,CAAAA;;YAI/E,MAAMC,aAAAA,GAAgBjH,MAAMC,IAAI,CAAC4D,cAAcqD,IAAI,CAACF,CAAAA,GAAAA,GAChD,IAAI,CAACzI,KAAK,CAACgB,MAAM,CAAC2H,IAAI,CAACvB,CAAAA,CAAAA,GAAKA,CAAAA,CAAEtE,IAAI,KAAK2F,GAAAA,CAAAA,CAAAA;YAG3C,IAAIF,gBAAAA,IAAoB,CAACG,aAAAA,EAAe;AACpCL,gBAAAA,SAAAA,CAAUxF,IAAI,CAACvC,WAAAA,CAAAA;AACnB,YAAA;AACJ,QAAA;;QAGA,IAAI+H,SAAAA,CAAUnI,MAAM,GAAG,CAAA,EAAG;AACtB,YAAA,IAAI,CAAClB,MAAM,CAACC,IAAI,CAAC,CAAC,wEAAwE,EAAEoJ,SAAAA,CAAUnI,MAAM,CAAC,aAAa,EAAEmI,SAAAA,CAAUO,IAAI,CAAC,IAAA,CAAA,CAAM,2BAA2B,CAAC,CAAA;YAC7K,KAAK,MAAMtI,eAAe+H,SAAAA,CAAW;AACjC,gBAAA,IAAI,CAACrI,KAAK,CAACiB,OAAO,GAAG,IAAI,CAACjB,KAAK,CAACiB,OAAO,CAACe,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAM3B,WAAAA,CAAAA;AAC1D,gBAAA,IAAI,CAACN,KAAK,CAAC4B,OAAO,CAACiB,IAAI,CAACvC,WAAAA,CAAAA;AAC5B,YAAA;AACJ,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,oBAAQe,GAAwC;QAC5C,MAAMwH,aAAAA,GAAgBxG,KAAKyG,GAAG,EAAA,GAAK,IAAI,CAAClG,SAAS,CAACsB,OAAO,EAAA;QACzD,MAAM6E,kBAAAA,GAAqBtH,MAAMC,IAAI,CAAC,IAAI,CAACyC,gBAAgB,CAAC6C,MAAM,EAAA,CAAA;AAClE,QAAA,MAAMgC,kBAAkBD,kBAAAA,CAAmB7I,MAAM,GAAG,CAAA,GAC9C6I,mBAAmBE,MAAM,CAAC,CAACC,CAAAA,EAAGC,IAAMD,CAAAA,GAAIC,CAAAA,EAAG,CAAA,CAAA,GAAKJ,kBAAAA,CAAmB7I,MAAM,GACzE,CAAA;AAEN,QAAA,MAAMkJ,OAAAA,GAA4B;AAC9BP,YAAAA,aAAAA;YACAQ,sBAAAA,EAAwBL,eAAAA;AACxBM,YAAAA,eAAAA,EAAiB,IAAI,CAACxJ,eAAe,CAACyJ,UAAU,GAAGD,eAAe;AAClEE,YAAAA,kBAAAA,EAAoB,IAAI,CAAC1J,eAAe,CAACyJ,UAAU,GAAGC;AAC1D,SAAA;QAEA,OAAO;AACHC,YAAAA,OAAAA,EAAS,IAAI,CAACzJ,KAAK,CAACgB,MAAM,CAACd,MAAM,KAAK,CAAA;AACtCb,YAAAA,aAAAA,EAAe,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,IAAI;AACvCsC,YAAAA,SAAAA,EAAW,IAAI,CAAC9B,KAAK,CAAC8B,SAAS;AAC/Bd,YAAAA,MAAAA,EAAQ,IAAI,CAAChB,KAAK,CAACgB,MAAM;AACzBC,YAAAA,OAAAA,EAAS,IAAI,CAACjB,KAAK,CAACiB,OAAO;AAC3Bc,YAAAA,gBAAAA,EAAkB,IAAI,CAAC/B,KAAK,CAAC+B,gBAAgB;AAC7CqH,YAAAA;AACJ,SAAA;AACJ,IAAA;AAEA;;QAGQtE,gBAAAA,CAAiBxD,KAAY,EAAW;AAC5C,QAAA,MAAMoI,iBAAAA,GAAoB;AACtB,YAAA,YAAA;AACA,YAAA,aAAA;AACA,YAAA,YAAA;AACA,YAAA,aAAA;AACA,YAAA,oBAAA;AACA,YAAA,YAAA;AACA,YAAA,kBAAA;AACA,YAAA;AACH,SAAA;QAED,OAAOA,iBAAAA,CAAkBf,IAAI,CAACgB,CAAAA,OAAAA,GAC1BA,OAAAA,CAAQC,IAAI,CAACtI,KAAAA,CAAMuE,OAAO,IAAIgE,MAAAA,CAAOvI,KAAAA,CAAAA,CAAAA,CAAAA;AAE7C,IAAA;AAEA;;QAGQ6D,mBAAAA,CAAoBR,aAAqB,EAAU;AACvD,QAAA,MAAMmF,eAAe,IAAI,CAAC5K,MAAM,CAAC6K,iBAAiB,IAAI,IAAA;AACtD,QAAA,MAAMC,WAAW,IAAI,CAAC9K,MAAM,CAAC+K,aAAa,IAAI,KAAA;AAC9C,QAAA,MAAMC,aAAa,IAAI,CAAChL,MAAM,CAACiL,iBAAiB,IAAI,CAAA;QAEpD,MAAMjF,KAAAA,GAAQkF,IAAAA,CAAKC,GAAG,CAClBP,YAAAA,GAAeM,KAAKE,GAAG,CAACJ,UAAAA,EAAYvF,aAAAA,GAAgB,CAAA,CAAA,EACpDqF,QAAAA,CAAAA;;AAIJ,QAAA,MAAMO,MAAAA,GAASH,IAAAA,CAAKI,MAAM,EAAA,GAAK,GAAA,GAAMtF,KAAAA;AAErC,QAAA,OAAOA,KAAAA,GAAQqF,MAAAA;AACnB,IAAA;AAEA;;QAGQjG,cAAAA,CAAemG,EAAU,EAAU;AACvC,QAAA,MAAMC,OAAAA,GAAUN,IAAAA,CAAKO,KAAK,CAACF,EAAAA,GAAK,IAAA,CAAA;AAChC,QAAA,MAAMG,OAAAA,GAAUR,IAAAA,CAAKO,KAAK,CAACD,OAAAA,GAAU,EAAA,CAAA;AAErC,QAAA,IAAIE,UAAU,CAAA,EAAG;AACb,YAAA,OAAO,GAAGA,OAAAA,CAAQ,EAAE,EAAEF,OAAAA,GAAU,EAAA,CAAG,CAAC,CAAC;AACzC,QAAA;QACA,OAAO,CAAA,EAAGA,OAAAA,CAAQ,CAAC,CAAC;AACxB,IAAA;AAEA;;AAEC,QACD,mBAAQ/E,CAAoBrE,KAAY,EAAEhB,WAAmB,EAA0F;QACnJ,MAAMuK,QAAAA,GAAWvJ,KAAAA,CAAMuE,OAAO,IAAI,EAAA;QAClC,MAAMiF,UAAAA,GAAaxJ,KAAAA,CAAMwE,KAAK,IAAI,EAAA;AAClC,QAAA,MAAMiF,QAAAA,GAAW,CAAA,EAAGF,QAAAA,CAAS,EAAE,EAAEC,UAAAA,CAAAA,CAAY;;QAG7C,IAAIC,QAAAA,CAASC,KAAK,CAAC,oDAAA,CAAA,EAAuD;YACtE,MAAMC,aAAAA,GAAgBF,QAAAA,CAASC,KAAK,CAAC,mDAAA,CAAA;YACrC,OAAO;gBACHE,IAAAA,EAAM,eAAA;gBACNC,OAAAA,EAASF,aAAAA,GACH,GAAGA,aAAa,CAAC,EAAE,CAAC,EAAE,EAAEA,aAAa,CAAC,EAAE,CAAC,cAAc,EAAEA,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,GAC7E,0BAAA;gBACNG,OAAAA,EAAS,IAAI,CAACC,cAAc,CAAC/K,WAAAA,CAAAA;gBAC7BgL,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACjL,WAAAA,CAAAA,CAAa,0BAA0B;AACjF,aAAA;AACJ,QAAA;;QAGA,IAAIyK,QAAAA,CAASC,KAAK,CAAC,+CAAA,CAAA,EAAkD;YACjE,OAAO;gBACHE,IAAAA,EAAM,aAAA;gBACNC,OAAAA,EAAS,IAAI,CAACK,qBAAqB,CAACT,QAAAA,CAAAA;gBACpCK,OAAAA,EAAS,IAAI,CAACC,cAAc,CAAC/K,WAAAA,CAAAA;gBAC7BgL,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACjL,WAAAA,CAAAA,CAAa,iBAAiB;AACxE,aAAA;AACJ,QAAA;;QAGA,IAAIyK,QAAAA,CAASC,KAAK,CAAC,mDAAA,CAAA,EAAsD;YACrE,OAAO;gBACHE,IAAAA,EAAM,gBAAA;gBACNC,OAAAA,EAAS,qCAAA;gBACTC,OAAAA,EAAS,IAAI,CAACC,cAAc,CAAC/K,WAAAA,CAAAA;gBAC7BgL,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACjL,WAAAA,CAAAA,CAAa,cAAc;AACrE,aAAA;AACJ,QAAA;;QAGA,IAAIyK,QAAAA,CAASC,KAAK,CAAC,2CAAA,CAAA,EAA8C;YAC7D,MAAMS,SAAAA,GAAYV,QAAAA,CAASC,KAAK,CAAC,kBAAA,CAAA;YACjC,OAAO;gBACHE,IAAAA,EAAM,cAAA;gBACNC,OAAAA,EAASM,SAAAA,GAAY,GAAGA,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,cAAA;gBACzDL,OAAAA,EAAS,IAAI,CAACC,cAAc,CAAC/K,WAAAA,CAAAA;gBAC7BgL,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACjL,WAAAA,CAAAA,CAAa,YAAY;AACnE,aAAA;AACJ,QAAA;;QAGA,IAAIyK,QAAAA,CAASC,KAAK,CAAC,qBAAA,CAAA,EAAwB;YACvC,OAAO;gBACHE,IAAAA,EAAM,SAAA;gBACNC,OAAAA,EAAS,IAAI,CAACK,qBAAqB,CAACT,QAAAA,CAAAA;gBACpCK,OAAAA,EAAS,IAAI,CAACC,cAAc,CAAC/K,WAAAA,CAAAA;gBAC7BgL,UAAAA,EAAY;AAChB,aAAA;AACJ,QAAA;;QAGA,OAAO;YACHJ,IAAAA,EAAM,SAAA;YACNC,OAAAA,EAASN,QAAAA,CAASa,KAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,CAACC,SAAS,CAAC,CAAA,EAAG,GAAA,CAAA;YAC9CP,OAAAA,EAAS,IAAI,CAACC,cAAc,CAAC/K,WAAAA;AACjC,SAAA;AACJ,IAAA;AAEQkL,IAAAA,qBAAAA,CAAsBI,IAAY,EAAU;QAChD,MAAMC,KAAAA,GAAQD,IAAAA,CAAKF,KAAK,CAAC,IAAA,CAAA;QACzB,KAAK,MAAMI,QAAQD,KAAAA,CAAO;YACtB,IAAIC,IAAAA,CAAKd,KAAK,CAAC,yBAAA,CAAA,IAA8Bc,KAAKC,IAAI,EAAA,CAAG7L,MAAM,GAAG,EAAA,EAAI;AAClE,gBAAA,OAAO4L,IAAAA,CAAKC,IAAI,EAAA,CAAGJ,SAAS,CAAC,CAAA,EAAG,GAAA,CAAA;AACpC,YAAA;AACJ,QAAA;QACA,OAAOC,IAAAA,CAAKF,KAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,CAACC,SAAS,CAAC,CAAA,EAAG,GAAA,CAAA;AAC5C,IAAA;AAEQJ,IAAAA,cAAAA,CAAejL,WAAmB,EAAU;QAChD,MAAM0L,OAAAA,GAAU,IAAI,CAAC1M,KAAK,CAACC,QAAQ,CAACyE,GAAG,CAAC1D,WAAAA,CAAAA;AACxC,QAAA,OAAO0L,CAAAA,OAAAA,KAAAA,IAAAA,IAAAA,OAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,OAAAA,CAAS9E,IAAI,KAAI,GAAA;AAC5B,IAAA;AAEQmE,IAAAA,cAAAA,CAAe/K,WAAmB,EAAU;AAChD,QAAA,MAAM2L,OAAAA,GAAU,IAAI,CAACV,cAAc,CAACjL,WAAAA,CAAAA;QACpC,MAAM4L,SAAAA,GAAY,IAAI,CAAChN,MAAM,CAACA,MAAM,CAACiN,eAAe,IAAI,iBAAA;;AAExD,QAAA,OAAO,GAAGF,OAAAA,CAAQ,CAAC,EAAEC,SAAAA,CAAU,cAAc,CAAC;AAClD,IAAA;AAzoBA,IAAA,WAAA,CAAYhN,MAAkB,CAAE;AAC5B,QAAA,KAAK,EAAA,EApBT,gBAAA,CAAA,IAAA,EAAQA,QAAAA,EAAR,SACA,gBAAA,CAAA,IAAA,EAAQI,OAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQU,OAAAA,EAAR,MAAA,CAAA,EACA,uBAAQuG,mBAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQzG,iBAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQM,aAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQc,mBAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQlC,QAAAA,EAASoN;AAGjB,QAAA,gBAAA,CAAA,IAAA,EAAQ1F,aAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQ9D,WAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQpC,cAAAA,EAAe,IAAI6L,GAAAA,EAAAA,CAAAA,EAC3B,gBAAA,CAAA,IAAA,EAAQlK,mBAAAA,EAAoB,IAAIkK,GAAAA,EAAAA,CAAAA,EAChC,gBAAA,CAAA,IAAA,EAAQtI,iBAAAA,EAAkB,IAAIsI,GAAAA,EAAAA,CAAAA,EAC9B,gBAAA,CAAA,IAAA,EAAQlI,kBAAAA,EAAmB,IAAIkI,GAAAA,EAAAA,CAAAA,EAC/B,gBAAA,CAAA,IAAA,EAAQzH,eAAAA,EAAgB,IAAIyH,GAAAA,EAAAA,CAAAA,EAC5B,gBAAA,CAAA,IAAA,EAAQ7H,qBAAwE,EAAE,CAAA;QAI9E,IAAI,CAACtF,MAAM,GAAGA,MAAAA;AACd,QAAA,IAAI,CAACI,KAAK,GAAGJ,MAAAA,CAAOI,KAAK;QACzB,IAAI,CAACoH,WAAW,GAAG4F,UAAAA,EAAAA;QACnB,IAAI,CAAC1J,SAAS,GAAG,IAAIP,IAAAA,EAAAA;;AAGrB,QAAA,IAAI,CAACkE,iBAAiB,GAAG,IAAIgG,iBAAAA,CAAkB,IAAI,CAACjN,KAAK,CAAA;AACzD,QAAA,IAAI,CAACQ,eAAe,GAAG,IAAI0M,eAAAA,CAAgBtN,OAAOC,cAAc,CAAA;QAChE,IAAI,CAACiB,SAAS,GAAG,IAAIqM,SAAAA,CAAU,IAAI,CAACnN,KAAK,EAAE,IAAI,CAACiH,iBAAiB,CAAA;QACjE,IAAI,CAACrF,iBAAiB,GAAG,IAAIwL,kBACzBxN,MAAAA,CAAOiJ,cAAc,IAAIwE,OAAAA,CAAQC,GAAG,EAAA,CAAA;;AAIxC,QAAA,IAAI,CAAC5M,KAAK,GAAG,IAAI,CAACuB,eAAe,EAAA;AACrC,IAAA;AAynBJ;;;;"}
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(`EXECUTION_STARTING: Starting parallel execution | Max Concurrency: ${this.config.maxConcurrency} | Mode: parallel | Purpose: Execute packages with dependency awareness`);\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 due to dependencies)\n // Note: skippedNoChanges is OK - those packages successfully ran but had nothing to do\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 skippedNoChanges: []\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 // Check if this was skipped due to no changes\n if (result.skippedNoChanges) {\n this.state.skippedNoChanges.push(packageName);\n const duration = this.packageDurations.get(packageName)!;\n this.logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Duration: ${this.formatDuration(duration)} | Reason: no-changes`);\n this.emit('package:skipped-no-changes', { packageName, result });\n } else {\n this.state.completed.push(packageName);\n const duration = this.packageDurations.get(packageName)!;\n this.logger.info(`PACKAGE_EXECUTION_COMPLETE: Package execution finished successfully | Package: ${packageName} | Duration: ${this.formatDuration(duration)} | Status: success`);\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 /**\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 // Extract detailed error information\n const errorDetails = this.extractErrorDetails(error, packageName);\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 errorDetails\n };\n\n this.state.failed.push(failureInfo);\n\n this.logger.error(`PACKAGE_FAILED_PERMANENT: Package failed permanently | Package: ${packageName} | Error: ${error.message} | Status: failed | Retriable: false`);\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(`PACKAGE_SKIPPED_DEPENDENCY: Package skipped due to failed dependency | Package: ${dependent} | Failed Dependency: ${failedPackage} | Reason: dependency-failed`);\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('CHECKPOINT_NOT_FOUND: No checkpoint file found | Action: Starting fresh execution | Path: ' + this.config.checkpointPath);\n return;\n }\n\n this.logger.info('CHECKPOINT_LOADING: Loading execution checkpoint | Purpose: Resume previous execution | Path: ' + this.config.checkpointPath);\n this.logger.info(`CHECKPOINT_EXECUTION_ID: Checkpoint execution identifier | ID: ${checkpoint.executionId}`);\n this.logger.info(`CHECKPOINT_STATE_COMPLETED: Completed packages from checkpoint | Count: ${checkpoint.state.completed.length} packages`);\n this.logger.info(`CHECKPOINT_STATE_FAILED: Failed packages from checkpoint | Count: ${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 // CRITICAL FIX: Re-evaluate skipped packages\n // After loading checkpoint (especially with --mark-completed), packages that were\n // skipped due to failed dependencies might now be eligible to run if those\n // dependencies are now completed. Move them back to pending for reassessment.\n const unblocked: string[] = [];\n for (const packageName of this.state.skipped) {\n // Check if all dependencies are now completed\n const dependencies = this.graph.edges.get(packageName) || new Set();\n const allDepsCompleted = Array.from(dependencies).every(dep =>\n this.state.completed.includes(dep) || this.state.skippedNoChanges.includes(dep)\n );\n\n // Check if any dependencies are still failed\n const anyDepsFailed = Array.from(dependencies).some(dep =>\n this.state.failed.some(f => f.name === dep)\n );\n\n if (allDepsCompleted && !anyDepsFailed) {\n unblocked.push(packageName);\n }\n }\n\n // Move unblocked packages back to pending\n if (unblocked.length > 0) {\n this.logger.info(`PACKAGES_UNBLOCKED: Dependencies satisfied, packages now ready | Count: ${unblocked.length} | Packages: ${unblocked.join(', ')} | Status: ready-to-execute`);\n for (const packageName of unblocked) {\n this.state.skipped = this.state.skipped.filter(p => p !== packageName);\n this.state.pending.push(packageName);\n }\n }\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 skippedNoChanges: this.state.skippedNoChanges,\n metrics\n };\n }\n\n /**\n * Check if error is retriable\n */\n private isRetriableError(error: Error): boolean {\n const errorText = error.message || String(error);\n const stackText = error.stack || '';\n const fullText = `${errorText}\\n${stackText}`;\n\n const retriablePatterns = [\n // Network errors\n /ETIMEDOUT/i,\n /ECONNRESET/i,\n /ENOTFOUND/i,\n /ECONNREFUSED/i,\n /rate limit/i,\n /temporary failure/i,\n /try again/i,\n /gateway timeout/i,\n /service unavailable/i,\n\n // Git lock file errors (common in parallel execution)\n /index\\.lock/i,\n /\\.git\\/index\\.lock/i,\n /unable to create.*lock/i,\n /lock file.*exists/i,\n\n // npm install race conditions\n /ENOENT.*npm-cache/i,\n /EBUSY.*npm/i,\n /npm.*EEXIST/i,\n\n // GitHub API temporary errors\n /abuse detection/i,\n /secondary rate limit/i,\n /GitHub API.*unavailable/i,\n\n // Timeout errors (might be transient)\n /timeout waiting for/i,\n /timed out after/i\n ];\n\n const isRetriable = retriablePatterns.some(pattern =>\n pattern.test(fullText)\n );\n\n // Non-retriable errors that should fail immediately\n const nonRetriablePatterns = [\n /test.*failed/i,\n /coverage.*below.*threshold/i,\n /compilation.*failed/i,\n /build.*failed/i,\n /merge.*conflict/i,\n /uncommitted changes/i,\n /working.*dirty/i,\n /authentication.*failed/i,\n /permission denied/i\n ];\n\n const isNonRetriable = nonRetriablePatterns.some(pattern =>\n pattern.test(fullText)\n );\n\n // If explicitly non-retriable, don't retry\n if (isNonRetriable) {\n return false;\n }\n\n return isRetriable;\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 /**\n * Extract detailed error information from error message and stack\n */\n private extractErrorDetails(error: Error, packageName: string): { type?: string; context?: string; logFile?: string; suggestion?: string } | undefined {\n const errorMsg = error.message || '';\n const errorStack = error.stack || '';\n const fullText = `${errorMsg}\\n${errorStack}`;\n\n // Get log file path from error if attached, otherwise use default\n const logFile = (error as any).logFilePath || this.getLogFilePath(packageName);\n\n // Test coverage failure\n if (fullText.match(/coverage.*below.*threshold|coverage.*insufficient/i)) {\n const coverageMatch = fullText.match(/(\\w+):\\s*(\\d+\\.?\\d*)%.*threshold:\\s*(\\d+\\.?\\d*)%/i);\n return {\n type: 'test_coverage',\n context: coverageMatch\n ? `${coverageMatch[1]}: ${coverageMatch[2]}% (threshold: ${coverageMatch[3]}%)`\n : 'Coverage below threshold',\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && npm test -- --coverage`\n };\n }\n\n // Build/compile errors\n if (fullText.match(/compilation.*failed|build.*failed|tsc.*error/i)) {\n return {\n type: 'build_error',\n context: this.extractFirstErrorLine(fullText),\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && npm run build`\n };\n }\n\n // Merge conflicts\n if (fullText.match(/merge.*conflict|conflict.*marker|<<<<<<<|>>>>>>>/i)) {\n return {\n type: 'merge_conflict',\n context: 'Unresolved merge conflicts detected',\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && git status`\n };\n }\n\n // Test failures\n if (fullText.match(/test.*failed|tests.*failed|\\d+\\s+failing/i)) {\n const failMatch = fullText.match(/(\\d+)\\s+failing/i);\n return {\n type: 'test_failure',\n context: failMatch ? `${failMatch[1]} test(s) failing` : 'Tests failed',\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && npm test`\n };\n }\n\n // Timeout errors\n if (fullText.match(/timeout|timed.*out/i)) {\n return {\n type: 'timeout',\n context: this.extractFirstErrorLine(fullText),\n logFile,\n suggestion: 'Consider increasing timeout or checking for stuck processes'\n };\n }\n\n // PR/Git errors\n if (fullText.match(/pull request|pr|github/i) && fullText.match(/not mergeable|conflict/i)) {\n return {\n type: 'pr_conflict',\n context: 'Pull request has merge conflicts',\n logFile,\n suggestion: 'Resolve conflicts in the PR and re-run with --continue'\n };\n }\n\n // Git state errors\n if (fullText.match(/uncommitted changes|working.*dirty|not.*clean/i)) {\n return {\n type: 'git_state',\n context: 'Working directory has uncommitted changes',\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && git status`\n };\n }\n\n // npm install / dependency errors\n if (fullText.match(/npm.*install|ERESOLVE|Cannot find module/i)) {\n return {\n type: 'dependency_error',\n context: this.extractFirstErrorLine(fullText),\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && rm -rf node_modules package-lock.json && npm install`\n };\n }\n\n // Git lock file errors\n if (fullText.match(/index\\.lock|\\.git\\/index\\.lock|unable to create.*lock/i)) {\n return {\n type: 'git_lock',\n context: 'Git lock file conflict - another git process running',\n logFile,\n suggestion: `cd ${this.getPackagePath(packageName)} && rm -f .git/index.lock`\n };\n }\n\n // No changes detected (not really an error, but handle it)\n if (fullText.match(/no.*changes|already.*published|nothing.*to.*publish/i)) {\n return {\n type: 'no_changes',\n context: 'No changes detected - package already published',\n logFile,\n suggestion: 'This is expected if package was previously published'\n };\n }\n\n // Generic error with log file\n return {\n type: 'unknown',\n context: errorMsg.split('\\n')[0].substring(0, 200),\n logFile\n };\n }\n\n private extractFirstErrorLine(text: string): string {\n const lines = text.split('\\n');\n for (const line of lines) {\n if (line.match(/error|failed|exception/i) && line.trim().length > 10) {\n return line.trim().substring(0, 200);\n }\n }\n return text.split('\\n')[0].substring(0, 200);\n }\n\n private getPackagePath(packageName: string): string {\n const pkgInfo = this.graph.packages.get(packageName);\n return pkgInfo?.path || '.';\n }\n\n private getLogFilePath(packageName: string): string {\n const pkgPath = this.getPackagePath(packageName);\n const outputDir = this.config.config.outputDirectory || 'output/kodrdriv';\n // Return wildcard pattern as fallback (log file should be attached to error directly)\n // This is used as a fallback when log file path isn't attached to the error\n return `${pkgPath}/${outputDir}/publish_*.log`;\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","skippedNoChanges","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","errorDetails","extractErrorDetails","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","checkpointPath","attempts","unblocked","Set","allDepsCompleted","every","dep","anyDepsFailed","some","join","totalDuration","now","completedDurations","averageDuration","reduce","a","b","metrics","averagePackageDuration","peakConcurrency","getMetrics","averageConcurrency","success","errorText","String","stackText","fullText","retriablePatterns","pattern","test","nonRetriablePatterns","isNonRetriable","initialDelay","initialRetryDelay","maxDelay","maxRetryDelay","multiplier","backoffMultiplier","Math","min","pow","jitter","random","ms","seconds","floor","minutes","errorMsg","errorStack","logFile","logFilePath","getLogFilePath","match","coverageMatch","type","context","suggestion","getPackagePath","extractFirstErrorLine","failMatch","split","substring","text","lines","line","trim","pkgInfo","pkgPath","outputDir","outputDirectory","getLogger","Map","randomUUID","DependencyChecker","ResourceMonitor","Scheduler","CheckpointManager","process","cwd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+CA;;IAGO,MAAMA,eAAAA,SAAwBC,YAAAA,CAAAA;AAuCjC;;AAEC,QACD,MAAMC,OAAAA,GAAoC;AACtC,QAAA,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,mEAAmE,EAAE,IAAI,CAACC,MAAM,CAACC,cAAc,CAAC,uEAAuE,CAAC,CAAA;QAC1L,IAAI,CAACC,IAAI,CAAC,mBAAA,EAAqB;AAAEC,YAAAA,aAAAA,EAAe,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC;AAAK,SAAA,CAAA;QAEzE,IAAI;;AAEA,YAAA,IAAI,IAAI,CAACN,MAAM,CAACO,QAAQ,EAAE;gBACtB,MAAM,IAAI,CAACC,cAAc,EAAA;AAC7B,YAAA;;AAGA,YAAA,IAAI,CAACC,gBAAgB,EAAA;;AAGrB,YAAA,MAAO,CAAC,IAAI,CAACC,UAAU,EAAA,CAAI;;AAEvB,gBAAA,MAAMC,cAAAA,GAAiB,IAAI,CAACC,eAAe,CAACC,iBAAiB,EAAA;gBAC7D,IAAIF,cAAAA,GAAiB,CAAA,IAAK,IAAI,CAACG,KAAK,CAACC,KAAK,CAACC,MAAM,GAAG,CAAA,EAAG;oBACnD,MAAMC,UAAAA,GAAa,IAAI,CAACC,SAAS,CAACC,OAAO,CAACR,cAAAA,EAAgB,IAAI,CAACG,KAAK,CAAA;oBAEpE,KAAK,MAAMM,eAAeH,UAAAA,CAAY;wBAClC,MAAM,IAAI,CAACI,eAAe,CAACD,WAAAA,CAAAA;AAC/B,oBAAA;AACJ,gBAAA;;AAGA,gBAAA,IAAI,IAAI,CAACE,YAAY,CAAChB,IAAI,KAAK,CAAA,EAAG;oBAC9B,IAAI,IAAI,CAACQ,KAAK,CAACC,KAAK,CAACC,MAAM,GAAG,CAAA,EAAG;AAC7B,wBAAA,MAAM,IAAIO,KAAAA,CAAM,sDAAA,CAAA;AACpB,oBAAA;AACA,oBAAA,MAAA;AACJ,gBAAA;;AAGA,gBAAA,MAAMC,aAAAA,GAAgB,MAAM,IAAI,CAACC,WAAW,EAAA;gBAC5C,MAAM,IAAI,CAACC,oBAAoB,CAACF,aAAAA,CAAAA;;AAGhC,gBAAA,IAAI,CAACf,gBAAgB,EAAA;;gBAGrB,IAAI,IAAI,CAACkB,gBAAgB,EAAA,EAAI;oBACzB,MAAM,IAAI,CAACC,cAAc,EAAA;AAC7B,gBAAA;AACJ,YAAA;;;;AAKA,YAAA,MAAMC,eAAe,IAAI,CAACf,KAAK,CAACgB,MAAM,CAACd,MAAM,KAAK,CAAA,IAAK,IAAI,CAACF,KAAK,CAACiB,OAAO,CAACf,MAAM,KAAK,CAAA;AACrF,YAAA,IAAIa,YAAAA,EAAc;AACd,gBAAA,MAAM,IAAI,CAACG,iBAAiB,CAACC,OAAO,EAAA;YACxC,CAAA,MAAO;gBACH,MAAM,IAAI,CAACL,cAAc,EAAA;AAC7B,YAAA;;YAGA,MAAMM,MAAAA,GAAS,IAAI,CAACC,oBAAoB,EAAA;YACxC,IAAI,CAACjC,IAAI,CAAC,qBAAA,EAAuB;AAAEgC,gBAAAA;AAAO,aAAA,CAAA;YAE1C,OAAOA,MAAAA;AACX,QAAA,CAAA,CAAE,OAAOE,KAAAA,EAAO;;YAEZ,MAAM,IAAI,CAACR,cAAc,EAAA;YACzB,MAAMQ,KAAAA;AACV,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,eAAQC,GAAkC;QACtC,MAAMC,UAAAA,GAAaC,KAAAA,CAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACC,QAAQ,CAACoC,IAAI,EAAA,CAAA;QAEtD,OAAO;YACHC,OAAAA,EAAS;AAAIJ,gBAAAA,GAAAA;AAAW,aAAA;AACxBvB,YAAAA,KAAAA,EAAO,EAAE;AACT4B,YAAAA,OAAAA,EAAS,EAAE;AACXC,YAAAA,SAAAA,EAAW,EAAE;AACbd,YAAAA,MAAAA,EAAQ,EAAE;AACVC,YAAAA,OAAAA,EAAS,EAAE;AACXc,YAAAA,gBAAAA,EAAkB;AACtB,SAAA;AACJ,IAAA;AAEA;;QAGA,MAAcxB,eAAAA,CAAgBD,WAAmB,EAAiB;;AAE9D,QAAA,IAAI,CAACN,KAAK,CAACC,KAAK,GAAG,IAAI,CAACD,KAAK,CAACC,KAAK,CAAC+B,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAM3B,WAAAA,CAAAA;;AAGtD,QAAA,IAAI,CAAC,IAAI,CAACR,eAAe,CAACoC,QAAQ,EAAA,EAAI;AAClC,YAAA,MAAM,IAAIzB,KAAAA,CAAM,CAAC,gCAAgC,EAAEH,WAAAA,CAAAA,CAAa,CAAA;AACpE,QAAA;;AAGA,QAAA,IAAI,CAAC6B,iBAAiB,CAACC,GAAG,CAAC9B,aAAa,IAAI+B,IAAAA,EAAAA,CAAAA;;AAG5C,QAAA,MAAMC,aAAa,IAAIC,eAAAA,EAAAA;;AAGvB,QAAA,MAAMC,UAAU,IAAI,CAACC,cAAc,CAACnC,WAAAA,EAAagC,WAAWI,MAAM,CAAA;;AAGlE,QAAA,MAAMC,IAAAA,GAAoB;AACtBrC,YAAAA,WAAAA;AACAsC,YAAAA,SAAAA,EAAW,IAAIP,IAAAA,EAAAA;AACfG,YAAAA,OAAAA;AACAF,YAAAA;AACJ,SAAA;AAEA,QAAA,IAAI,CAAC9B,YAAY,CAAC4B,GAAG,CAAC9B,WAAAA,EAAaqC,IAAAA,CAAAA;;AAGnC,QAAA,IAAI,CAAC3C,KAAK,CAAC6B,OAAO,CAACgB,IAAI,CAAC;YACpBC,IAAAA,EAAMxC,WAAAA;YACNsC,SAAAA,EAAWD,IAAAA,CAAKC,SAAS,CAACG,WAAW,EAAA;YACrCC,WAAAA,EAAa;AACjB,SAAA,CAAA;;QAGA,IAAI,CAAC5D,IAAI,CAAC,iBAAA,EAAmB;AAAEkB,YAAAA;AAAY,SAAA,CAAA;QAE3C,IAAI,CAACtB,MAAM,CAACiE,OAAO,CACf,CAAC,UAAU,EAAE3C,WAAAA,CAAY,EAAE,EAAE,IAAI,CAACE,YAAY,CAAChB,IAAI,CAAC,CAAC,EAAE,IAAI,CAACN,MAAM,CAACC,cAAc,CAAC,YAAY,CAAC,CAAA;AAEvG,IAAA;AAEA;;AAEC,QACD,MAAcsD,cAAAA,CACVS,YAAoB,EACpBC,OAAoB,EACE;;;AAGtB,QAAA,MAAM,IAAI1C,KAAAA,CAAM,oCAAA,CAAA;AACpB,IAAA;AAEA;;AAEC,QACD,MAAcE,WAAAA,GAAsC;QAChD,MAAMH,YAAAA,GAAeiB,MAAMC,IAAI,CAAC,IAAI,CAAClB,YAAY,CAAC4C,OAAO,EAAA,CAAA;AAEzD,QAAA,MAAMC,WAAW7C,YAAAA,CAAa8C,GAAG,CAAC,CAAC,CAACR,IAAAA,EAAMH,IAAAA,CAAK,GAC3CA,IAAAA,CAAKH,OAAO,CACPe,IAAI,CAACnC,CAAAA,UAAW;oBAAEd,WAAAA,EAAawC,IAAAA;AAAM1B,oBAAAA,MAAAA;oBAAQE,KAAAA,EAAO;AAAK,iBAAA,CAAA,CAAA,CACzDkC,KAAK,CAAClC,CAAAA,SAAU;oBAAEhB,WAAAA,EAAawC,IAAAA;oBAAM1B,MAAAA,EAAQ,IAAA;AAAME,oBAAAA;iBAAM,CAAA,CAAA,CAAA;QAGlE,OAAO,MAAMmC,OAAAA,CAAQC,IAAI,CAACL,QAAAA,CAAAA;AAC9B,IAAA;AAEA;;QAGA,MAAczC,oBAAAA,CAAqB+B,IAAmB,EAAiB;AACnE,QAAA,MAAM,EAAErC,WAAW,EAAEc,MAAM,EAAEE,KAAK,EAAE,GAAGqB,IAAAA;;AAGvC,QAAA,IAAI,CAACnC,YAAY,CAACmD,MAAM,CAACrD,WAAAA,CAAAA;AACzB,QAAA,IAAI,CAACN,KAAK,CAAC6B,OAAO,GAAG,IAAI,CAAC7B,KAAK,CAAC6B,OAAO,CAACG,MAAM,CAAC4B,CAAAA,CAAAA,GAAKA,CAAAA,CAAEd,IAAI,KAAKxC,WAAAA,CAAAA;QAC/D,IAAI,CAACR,eAAe,CAAC+D,OAAO,EAAA;;AAG5B,QAAA,MAAMC,UAAU,IAAIzB,IAAAA,EAAAA;AACpB,QAAA,IAAI,CAAC0B,eAAe,CAAC3B,GAAG,CAAC9B,WAAAA,EAAawD,OAAAA,CAAAA;AAEtC,QAAA,MAAMlB,YAAY,IAAI,CAACT,iBAAiB,CAAC6B,GAAG,CAAC1D,WAAAA,CAAAA;AAC7C,QAAA,MAAM2D,QAAAA,GAAWH,OAAAA,CAAQI,OAAO,EAAA,GAAKtB,UAAUsB,OAAO,EAAA;AACtD,QAAA,IAAI,CAACC,gBAAgB,CAAC/B,GAAG,CAAC9B,WAAAA,EAAa2D,QAAAA,CAAAA;AAEvC,QAAA,IAAI3C,KAAAA,EAAO;AACP,YAAA,MAAM,IAAI,CAAC8C,aAAa,CAAC9D,WAAAA,EAAagB,KAAAA,CAAAA;QAC1C,CAAA,MAAO;AACH,YAAA,MAAM,IAAI,CAAC+C,aAAa,CAAC/D,WAAAA,EAAac,MAAAA,CAAAA;AAC1C,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,MAAciD,aAAAA,CAAc/D,WAAmB,EAAEc,MAAqB,EAAiB;;QAEnF,IAAIA,MAAAA,CAAOW,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC/B,KAAK,CAAC+B,gBAAgB,CAACc,IAAI,CAACvC,WAAAA,CAAAA;AACjC,YAAA,MAAM2D,WAAW,IAAI,CAACE,gBAAgB,CAACH,GAAG,CAAC1D,WAAAA,CAAAA;AAC3C,YAAA,IAAI,CAACtB,MAAM,CAACC,IAAI,CAAC,CAAC,8EAA8E,EAAEqB,WAAAA,CAAY,aAAa,EAAE,IAAI,CAACgE,cAAc,CAACL,QAAAA,CAAAA,CAAU,qBAAqB,CAAC,CAAA;YACjL,IAAI,CAAC7E,IAAI,CAAC,4BAAA,EAA8B;AAAEkB,gBAAAA,WAAAA;AAAac,gBAAAA;AAAO,aAAA,CAAA;QAClE,CAAA,MAAO;AACH,YAAA,IAAI,CAACpB,KAAK,CAAC8B,SAAS,CAACe,IAAI,CAACvC,WAAAA,CAAAA;AAC1B,YAAA,MAAM2D,WAAW,IAAI,CAACE,gBAAgB,CAACH,GAAG,CAAC1D,WAAAA,CAAAA;AAC3C,YAAA,IAAI,CAACtB,MAAM,CAACC,IAAI,CAAC,CAAC,+EAA+E,EAAEqB,WAAAA,CAAY,aAAa,EAAE,IAAI,CAACgE,cAAc,CAACL,QAAAA,CAAAA,CAAU,kBAAkB,CAAC,CAAA;YAC/K,IAAI,CAAC7E,IAAI,CAAC,mBAAA,EAAqB;AAAEkB,gBAAAA,WAAAA;AAAac,gBAAAA;AAAO,aAAA,CAAA;;YAGrD,IAAIA,MAAAA,CAAOmD,gBAAgB,EAAE;AACzB,gBAAA,IAAI,CAACC,iBAAiB,CAAC3B,IAAI,CAAC;oBACxBC,IAAAA,EAAMxC,WAAAA;AACNmE,oBAAAA,OAAAA,EAASrD,OAAOmD,gBAAgB;AAChCG,oBAAAA,IAAAA,EAAM,IAAIrC,IAAAA;AACd,iBAAA,CAAA;AACJ,YAAA;AACJ,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,MAAc+B,aAAAA,CAAc9D,WAAmB,EAAEgB,KAAY,EAAiB;QAC1E,MAAMqD,aAAAA,GAAgB,CAAC,IAAI,CAACC,aAAa,CAACZ,GAAG,CAAC1D,WAAAA,CAAAA,IAAgB,CAAA,IAAK,CAAA;AACnE,QAAA,IAAI,CAACsE,aAAa,CAACxC,GAAG,CAAC9B,WAAAA,EAAaqE,aAAAA,CAAAA;AAEpC,QAAA,MAAME,WAAAA,GAAc,IAAI,CAACC,gBAAgB,CAACxD,KAAAA,CAAAA;AAC1C,QAAA,MAAMyD,aAAa,IAAI,CAAC7F,MAAM,CAAC6F,UAAU,IAAI,CAAA;QAC7C,MAAMC,QAAAA,GAAWH,eAAeF,aAAAA,GAAgBI,UAAAA;AAEhD,QAAA,IAAIC,QAAAA,EAAU;;AAEV,YAAA,IAAI,CAAChG,MAAM,CAACiG,IAAI,CACZ,CAAC,EAAE,EAAE3E,WAAAA,CAAY,iBAAiB,EAAEqE,aAAAA,CAAc,CAAC,EAAEI,UAAAA,CAAW,aAAa,CAAC,CAAA;AAGlF,YAAA,IAAI,CAAC/E,KAAK,CAAC4B,OAAO,CAACiB,IAAI,CAACvC,WAAAA,CAAAA;YACxB,IAAI,CAAClB,IAAI,CAAC,kBAAA,EAAoB;AAAEkB,gBAAAA,WAAAA;AAAaqE,gBAAAA;AAAc,aAAA,CAAA;;AAG3D,YAAA,MAAMO,KAAAA,GAAQ,IAAI,CAACC,mBAAmB,CAACR,aAAAA,CAAAA;AACvC,YAAA,MAAM,IAAIlB,OAAAA,CAAQ2B,CAAAA,OAAAA,GAAWC,WAAWD,OAAAA,EAASF,KAAAA,CAAAA,CAAAA;QACrD,CAAA,MAAO;;AAEH,YAAA,MAAMI,YAAAA,GAAe7D,KAAAA,CAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACiG,KAAK,CAACvB,GAAG,CAAC1D,gBAAgB,EAAE,CAAA;YACvE,MAAMkF,UAAAA,GAAa/D,MAAMC,IAAI,CAAC+D,kBAAkBnF,WAAAA,EAAa,IAAI,CAAChB,KAAK,CAAA,CAAA;;AAGvE,YAAA,MAAMoG,YAAAA,GAAe,IAAI,CAACC,mBAAmB,CAACrE,KAAAA,EAAOhB,WAAAA,CAAAA;AAErD,YAAA,MAAMsF,WAAAA,GAAqC;gBACvC9C,IAAAA,EAAMxC,WAAAA;AACNgB,gBAAAA,KAAAA,EAAOA,MAAMuE,OAAO;AACpBC,gBAAAA,KAAAA,EAAOxE,MAAMwE,KAAK;AAClBjB,gBAAAA,WAAAA;AACAF,gBAAAA,aAAAA;gBACAoB,QAAAA,EAAU,IAAI1D,OAAOU,WAAW,EAAA;AAChCuC,gBAAAA,YAAAA;AACAE,gBAAAA,UAAAA;AACAE,gBAAAA;AACJ,aAAA;AAEA,YAAA,IAAI,CAAC1F,KAAK,CAACgB,MAAM,CAAC6B,IAAI,CAAC+C,WAAAA,CAAAA;AAEvB,YAAA,IAAI,CAAC5G,MAAM,CAACsC,KAAK,CAAC,CAAC,gEAAgE,EAAEhB,WAAAA,CAAY,UAAU,EAAEgB,KAAAA,CAAMuE,OAAO,CAAC,oCAAoC,CAAC,CAAA;YAChK,IAAI,CAACzG,IAAI,CAAC,gBAAA,EAAkB;AAAEkB,gBAAAA,WAAAA;AAAagB,gBAAAA;AAAM,aAAA,CAAA;;YAGjD,MAAM,IAAI,CAAC0E,cAAc,CAAC1F,WAAAA,CAAAA;AAC9B,QAAA;AACJ,IAAA;AAEA;;QAGA,MAAc0F,cAAAA,CAAeC,aAAqB,EAAiB;AAC/D,QAAA,MAAMC,MAAAA,GAAST,iBAAAA,CAAkBQ,aAAAA,EAAe,IAAI,CAAC3G,KAAK,CAAA;QAE1D,KAAK,MAAM6G,aAAaD,MAAAA,CAAQ;;AAE5B,YAAA,IAAI,CAAClG,KAAK,CAAC4B,OAAO,GAAG,IAAI,CAAC5B,KAAK,CAAC4B,OAAO,CAACI,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAMkE,SAAAA,CAAAA;AAC1D,YAAA,IAAI,CAACnG,KAAK,CAACC,KAAK,GAAG,IAAI,CAACD,KAAK,CAACC,KAAK,CAAC+B,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAMkE,SAAAA,CAAAA;;YAGtD,IAAI,CAAC,IAAI,CAACnG,KAAK,CAACiB,OAAO,CAACmF,QAAQ,CAACD,SAAAA,CAAAA,EAAY;AACzC,gBAAA,IAAI,CAACnG,KAAK,CAACiB,OAAO,CAAC4B,IAAI,CAACsD,SAAAA,CAAAA;AACxB,gBAAA,IAAI,CAACnH,MAAM,CAACiG,IAAI,CAAC,CAAC,gFAAgF,EAAEkB,SAAAA,CAAU,sBAAsB,EAAEF,aAAAA,CAAc,4BAA4B,CAAC,CAAA;gBACjL,IAAI,CAAC7G,IAAI,CAAC,iBAAA,EAAmB;oBACzBkB,WAAAA,EAAa6F,SAAAA;oBACbE,MAAAA,EAAQ,CAAC,kBAAkB,EAAEJ,aAAAA,CAAAA;AACjC,iBAAA,CAAA;AACJ,YAAA;AACJ,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,gBAAQtG,GAAyB;AAC7B,QAAA,MAAM2G,WAAqB,EAAE;AAE7B,QAAA,KAAK,MAAMhG,WAAAA,IAAe,IAAI,CAACN,KAAK,CAAC4B,OAAO,CAAE;YAC1C,IAAI,IAAI,CAAC2E,iBAAiB,CAACC,OAAO,CAAClG,WAAAA,EAAa,IAAI,CAACN,KAAK,CAAA,EAAG;AACzDsG,gBAAAA,QAAAA,CAASzD,IAAI,CAACvC,WAAAA,CAAAA;AAClB,YAAA;AACJ,QAAA;QAEA,KAAK,MAAMA,eAAegG,QAAAA,CAAU;AAChC,YAAA,IAAI,CAACtG,KAAK,CAAC4B,OAAO,GAAG,IAAI,CAAC5B,KAAK,CAAC4B,OAAO,CAACI,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAM3B,WAAAA,CAAAA;AAC1D,YAAA,IAAI,CAACN,KAAK,CAACC,KAAK,CAAC4C,IAAI,CAACvC,WAAAA,CAAAA;AAC1B,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,UAAQV,GAAsB;QAC1B,OACI,IAAI,CAACI,KAAK,CAAC4B,OAAO,CAAC1B,MAAM,KAAK,CAAA,IAC9B,IAAI,CAACF,KAAK,CAACC,KAAK,CAACC,MAAM,KAAK,CAAA,IAC5B,IAAI,CAACM,YAAY,CAAChB,IAAI,KAAK,CAAA;AAEnC,IAAA;AAEA;;AAEC,QACD,gBAAQqB,GAA4B;;;QAGhC,OAAO,IAAA;AACX,IAAA;AAEA;;AAEC,QACD,MAAcC,cAAAA,GAAgC;AAC1C,QAAA,MAAM2F,UAAAA,GAA0C;YAC5ChC,OAAAA,EAAS,OAAA;YACTiC,WAAAA,EAAa,IAAI,CAACA,WAAW;AAC7BC,YAAAA,SAAAA,EAAW,IAAI,CAAC/D,SAAS,CAACG,WAAW,EAAA;YACrC6D,WAAAA,EAAa,IAAIvE,OAAOU,WAAW,EAAA;AACnC8D,YAAAA,OAAAA,EAAS,IAAI,CAAC3H,MAAM,CAAC2H,OAAO;AAC5BC,YAAAA,cAAAA,EAAgB,IAAI,CAAC5H,MAAM,CAACA,MAAM;YAClC6H,eAAAA,EAAiB;AACbxH,gBAAAA,QAAAA,EAAUkC,KAAAA,CAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACC,QAAQ,CAACyH,MAAM,EAAA,CAAA,CAAI1D,GAAG,CAAC2D,CAAAA,OAAQ;AAC3DnE,wBAAAA,IAAAA,EAAMmE,IAAInE,IAAI;AACd2B,wBAAAA,OAAAA,EAASwC,IAAIxC,OAAO;AACpByC,wBAAAA,IAAAA,EAAMD,IAAIC,IAAI;AACd5B,wBAAAA,YAAAA,EAAc7D,KAAAA,CAAMC,IAAI,CAACuF,GAAAA,CAAI3B,YAAY;qBAC7C,CAAA,CAAA;AACAC,gBAAAA,KAAAA,EAAO9D,MAAMC,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACiG,KAAK,CAACnC,OAAO,IAAIE,GAAG,CAAC,CAAC,CAAC2D,GAAAA,EAAKE,KAAK,GAAK;AAC/DF,wBAAAA,GAAAA;AACAxF,wBAAAA,KAAAA,CAAMC,IAAI,CAACyF,IAAAA;AACd,qBAAA;AACL,aAAA;YACA3F,UAAAA,EAAY;mBACL,IAAI,CAACxB,KAAK,CAAC4B,OAAO;mBAClB,IAAI,CAAC5B,KAAK,CAACC,KAAK;mBAChB,IAAI,CAACD,KAAK,CAAC6B,OAAO,CAACyB,GAAG,CAACM,CAAAA,CAAAA,GAAKA,CAAAA,CAAEd,IAAI,CAAA;mBAClC,IAAI,CAAC9C,KAAK,CAAC8B,SAAS;mBACpB,IAAI,CAAC9B,KAAK,CAACgB,MAAM,CAACsC,GAAG,CAAC8D,CAAAA,CAAAA,GAAKA,CAAAA,CAAEtE,IAAI,CAAA;mBACjC,IAAI,CAAC9C,KAAK,CAACiB;AACjB,aAAA;YACDoG,aAAAA,EAAe,UAAA;AACflI,YAAAA,cAAAA,EAAgB,IAAI,CAACD,MAAM,CAACC,cAAc;YAC1Ca,KAAAA,EAAO,IAAI,CAACA,KAAK;YACjBwE,iBAAAA,EAAmB,IAAI,CAACA,iBAAiB,CAAClB,GAAG,CAACgE,CAAAA,MAAO;AACjDhH,oBAAAA,WAAAA,EAAagH,GAAGxE,IAAI;AACpB2B,oBAAAA,OAAAA,EAAS6C,GAAG7C,OAAO;oBACnB8C,WAAAA,EAAaD,EAAAA,CAAG5C,IAAI,CAAC3B,WAAW;iBACpC,CAAA,CAAA;AACA6B,YAAAA,aAAAA,EAAe4C,MAAAA,CAAOC,WAAW,CAAC,IAAI,CAAC7C,aAAa,CAAA;AACpD8C,YAAAA,aAAAA,EAAe,EAAC;AAChBvF,YAAAA,iBAAAA,EAAmBqF,OAAOC,WAAW,CACjChG,MAAMC,IAAI,CAAC,IAAI,CAACS,iBAAiB,CAACiB,OAAO,IAAIE,GAAG,CAAC,CAAC,CAACqE,CAAAA,EAAGC,EAAE,GAAK;AAACD,oBAAAA,CAAAA;AAAGC,oBAAAA,CAAAA,CAAE7E,WAAW;AAAG,iBAAA,CAAA,CAAA;AAErFgB,YAAAA,eAAAA,EAAiByD,OAAOC,WAAW,CAC/BhG,MAAMC,IAAI,CAAC,IAAI,CAACqC,eAAe,CAACX,OAAO,IAAIE,GAAG,CAAC,CAAC,CAACqE,CAAAA,EAAGC,EAAE,GAAK;AAACD,oBAAAA,CAAAA;AAAGC,oBAAAA,CAAAA,CAAE7E,WAAW;AAAG,iBAAA,CAAA,CAAA;AAEnFoB,YAAAA,gBAAAA,EAAkBqD,MAAAA,CAAOC,WAAW,CAAC,IAAI,CAACtD,gBAAgB,CAAA;AAC1D0D,YAAAA,cAAAA,EAAgB,IAAI,CAACjF,SAAS,CAACG,WAAW,EAAA;AAC1C+E,YAAAA,aAAAA,EAAe,EAAE;YACjBC,UAAAA,EAAY;AAChB,SAAA;AAEA,QAAA,MAAM,IAAI,CAAC7G,iBAAiB,CAAC8G,IAAI,CAACvB,UAAAA,CAAAA;QAClC,IAAI,CAACrH,IAAI,CAAC,kBAAA,EAAoB;AAAE6I,YAAAA,SAAAA,EAAW,IAAI5F,IAAAA;AAAO,SAAA,CAAA;AAC1D,IAAA;AAEA;;AAEC,QACD,MAAc3C,cAAAA,GAAgC;AAC1C,QAAA,MAAM+G,aAAa,MAAM,IAAI,CAACvF,iBAAiB,CAACgH,IAAI,EAAA;AAEpD,QAAA,IAAI,CAACzB,UAAAA,EAAY;YACb,IAAI,CAACzH,MAAM,CAACiG,IAAI,CAAC,+FAA+F,IAAI,CAAC/F,MAAM,CAACiJ,cAAc,CAAA;AAC1I,YAAA;AACJ,QAAA;QAEA,IAAI,CAACnJ,MAAM,CAACC,IAAI,CAAC,mGAAmG,IAAI,CAACC,MAAM,CAACiJ,cAAc,CAAA;QAC9I,IAAI,CAACnJ,MAAM,CAACC,IAAI,CAAC,CAAC,+DAA+D,EAAEwH,UAAAA,CAAWC,WAAW,CAAA,CAAE,CAAA;AAC3G,QAAA,IAAI,CAAC1H,MAAM,CAACC,IAAI,CAAC,CAAC,wEAAwE,EAAEwH,UAAAA,CAAWzG,KAAK,CAAC8B,SAAS,CAAC5B,MAAM,CAAC,SAAS,CAAC,CAAA;AACxI,QAAA,IAAI,CAAClB,MAAM,CAACC,IAAI,CAAC,CAAC,kEAAkE,EAAEwH,UAAAA,CAAWzG,KAAK,CAACgB,MAAM,CAACd,MAAM,CAAC,SAAS,CAAC,CAAA;;AAG/H,QAAA,IAAI,CAACwG,WAAW,GAAGD,UAAAA,CAAWC,WAAW;AACzC,QAAA,IAAI,CAAC9D,SAAS,GAAG,IAAIP,IAAAA,CAAKoE,WAAWoB,cAAc,CAAA;AACnD,QAAA,IAAI,CAAC7H,KAAK,GAAGyG,UAAAA,CAAWzG,KAAK;;QAG7B,KAAK,MAAM,CAACiH,GAAAA,EAAKvC,IAAAA,CAAK,IAAI8C,OAAOpE,OAAO,CAACqD,UAAAA,CAAWtE,iBAAiB,CAAA,CAAG;AACpE,YAAA,IAAI,CAACA,iBAAiB,CAACC,GAAG,CAAC6E,GAAAA,EAAK,IAAI5E,IAAAA,CAAKqC,IAAAA,CAAAA,CAAAA;AAC7C,QAAA;QACA,KAAK,MAAM,CAACuC,GAAAA,EAAKvC,IAAAA,CAAK,IAAI8C,OAAOpE,OAAO,CAACqD,UAAAA,CAAW1C,eAAe,CAAA,CAAG;AAClE,YAAA,IAAI,CAACA,eAAe,CAAC3B,GAAG,CAAC6E,GAAAA,EAAK,IAAI5E,IAAAA,CAAKqC,IAAAA,CAAAA,CAAAA;AAC3C,QAAA;QACA,KAAK,MAAM,CAACuC,GAAAA,EAAKhD,QAAAA,CAAS,IAAIuD,OAAOpE,OAAO,CAACqD,UAAAA,CAAWtC,gBAAgB,CAAA,CAAG;AACvE,YAAA,IAAI,CAACA,gBAAgB,CAAC/B,GAAG,CAAC6E,GAAAA,EAAKhD,QAAAA,CAAAA;AACnC,QAAA;;QAGA,KAAK,MAAM,CAACgD,GAAAA,EAAKmB,QAAAA,CAAS,IAAIZ,OAAOpE,OAAO,CAACqD,UAAAA,CAAW7B,aAAa,CAAA,CAAG;AACpE,YAAA,IAAI,CAACA,aAAa,CAACxC,GAAG,CAAC6E,GAAAA,EAAKmB,QAAAA,CAAAA;AAChC,QAAA;;AAGA,QAAA,KAAK,MAAMvG,OAAAA,IAAW,IAAI,CAAC7B,KAAK,CAAC6B,OAAO,CAAE;YACtC,IAAI,CAAC7B,KAAK,CAAC4B,OAAO,CAACiB,IAAI,CAAChB,QAAQiB,IAAI,CAAA;AACxC,QAAA;AACA,QAAA,IAAI,CAAC9C,KAAK,CAAC6B,OAAO,GAAG,EAAE;;;;;AAMvB,QAAA,MAAMwG,YAAsB,EAAE;AAC9B,QAAA,KAAK,MAAM/H,WAAAA,IAAe,IAAI,CAACN,KAAK,CAACiB,OAAO,CAAE;;YAE1C,MAAMqE,YAAAA,GAAe,IAAI,CAAChG,KAAK,CAACiG,KAAK,CAACvB,GAAG,CAAC1D,WAAAA,CAAAA,IAAgB,IAAIgI,GAAAA,EAAAA;YAC9D,MAAMC,gBAAAA,GAAmB9G,KAAAA,CAAMC,IAAI,CAAC4D,YAAAA,CAAAA,CAAckD,KAAK,CAACC,CAAAA,GAAAA,GACpD,IAAI,CAACzI,KAAK,CAAC8B,SAAS,CAACsE,QAAQ,CAACqC,GAAAA,CAAAA,IAAQ,IAAI,CAACzI,KAAK,CAAC+B,gBAAgB,CAACqE,QAAQ,CAACqC,GAAAA,CAAAA,CAAAA;;YAI/E,MAAMC,aAAAA,GAAgBjH,MAAMC,IAAI,CAAC4D,cAAcqD,IAAI,CAACF,CAAAA,GAAAA,GAChD,IAAI,CAACzI,KAAK,CAACgB,MAAM,CAAC2H,IAAI,CAACvB,CAAAA,CAAAA,GAAKA,CAAAA,CAAEtE,IAAI,KAAK2F,GAAAA,CAAAA,CAAAA;YAG3C,IAAIF,gBAAAA,IAAoB,CAACG,aAAAA,EAAe;AACpCL,gBAAAA,SAAAA,CAAUxF,IAAI,CAACvC,WAAAA,CAAAA;AACnB,YAAA;AACJ,QAAA;;QAGA,IAAI+H,SAAAA,CAAUnI,MAAM,GAAG,CAAA,EAAG;AACtB,YAAA,IAAI,CAAClB,MAAM,CAACC,IAAI,CAAC,CAAC,wEAAwE,EAAEoJ,SAAAA,CAAUnI,MAAM,CAAC,aAAa,EAAEmI,SAAAA,CAAUO,IAAI,CAAC,IAAA,CAAA,CAAM,2BAA2B,CAAC,CAAA;YAC7K,KAAK,MAAMtI,eAAe+H,SAAAA,CAAW;AACjC,gBAAA,IAAI,CAACrI,KAAK,CAACiB,OAAO,GAAG,IAAI,CAACjB,KAAK,CAACiB,OAAO,CAACe,MAAM,CAACC,CAAAA,IAAKA,CAAAA,KAAM3B,WAAAA,CAAAA;AAC1D,gBAAA,IAAI,CAACN,KAAK,CAAC4B,OAAO,CAACiB,IAAI,CAACvC,WAAAA,CAAAA;AAC5B,YAAA;AACJ,QAAA;AACJ,IAAA;AAEA;;AAEC,QACD,oBAAQe,GAAwC;QAC5C,MAAMwH,aAAAA,GAAgBxG,KAAKyG,GAAG,EAAA,GAAK,IAAI,CAAClG,SAAS,CAACsB,OAAO,EAAA;QACzD,MAAM6E,kBAAAA,GAAqBtH,MAAMC,IAAI,CAAC,IAAI,CAACyC,gBAAgB,CAAC6C,MAAM,EAAA,CAAA;AAClE,QAAA,MAAMgC,kBAAkBD,kBAAAA,CAAmB7I,MAAM,GAAG,CAAA,GAC9C6I,mBAAmBE,MAAM,CAAC,CAACC,CAAAA,EAAGC,IAAMD,CAAAA,GAAIC,CAAAA,EAAG,CAAA,CAAA,GAAKJ,kBAAAA,CAAmB7I,MAAM,GACzE,CAAA;AAEN,QAAA,MAAMkJ,OAAAA,GAA4B;AAC9BP,YAAAA,aAAAA;YACAQ,sBAAAA,EAAwBL,eAAAA;AACxBM,YAAAA,eAAAA,EAAiB,IAAI,CAACxJ,eAAe,CAACyJ,UAAU,GAAGD,eAAe;AAClEE,YAAAA,kBAAAA,EAAoB,IAAI,CAAC1J,eAAe,CAACyJ,UAAU,GAAGC;AAC1D,SAAA;QAEA,OAAO;AACHC,YAAAA,OAAAA,EAAS,IAAI,CAACzJ,KAAK,CAACgB,MAAM,CAACd,MAAM,KAAK,CAAA;AACtCb,YAAAA,aAAAA,EAAe,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,IAAI;AACvCsC,YAAAA,SAAAA,EAAW,IAAI,CAAC9B,KAAK,CAAC8B,SAAS;AAC/Bd,YAAAA,MAAAA,EAAQ,IAAI,CAAChB,KAAK,CAACgB,MAAM;AACzBC,YAAAA,OAAAA,EAAS,IAAI,CAACjB,KAAK,CAACiB,OAAO;AAC3Bc,YAAAA,gBAAAA,EAAkB,IAAI,CAAC/B,KAAK,CAAC+B,gBAAgB;AAC7CqH,YAAAA;AACJ,SAAA;AACJ,IAAA;AAEA;;QAGQtE,gBAAAA,CAAiBxD,KAAY,EAAW;AAC5C,QAAA,MAAMoI,SAAAA,GAAYpI,KAAAA,CAAMuE,OAAO,IAAI8D,MAAAA,CAAOrI,KAAAA,CAAAA;QAC1C,MAAMsI,SAAAA,GAAYtI,KAAAA,CAAMwE,KAAK,IAAI,EAAA;AACjC,QAAA,MAAM+D,QAAAA,GAAW,CAAA,EAAGH,SAAAA,CAAU,EAAE,EAAEE,SAAAA,CAAAA,CAAW;AAE7C,QAAA,MAAME,iBAAAA,GAAoB;;AAEtB,YAAA,YAAA;AACA,YAAA,aAAA;AACA,YAAA,YAAA;AACA,YAAA,eAAA;AACA,YAAA,aAAA;AACA,YAAA,oBAAA;AACA,YAAA,YAAA;AACA,YAAA,kBAAA;AACA,YAAA,sBAAA;;AAGA,YAAA,cAAA;AACA,YAAA,qBAAA;AACA,YAAA,yBAAA;AACA,YAAA,oBAAA;;AAGA,YAAA,oBAAA;AACA,YAAA,aAAA;AACA,YAAA,cAAA;;AAGA,YAAA,kBAAA;AACA,YAAA,uBAAA;AACA,YAAA,0BAAA;;AAGA,YAAA,sBAAA;AACA,YAAA;AACH,SAAA;QAED,MAAMjF,WAAAA,GAAciF,kBAAkBnB,IAAI,CAACoB,CAAAA,OAAAA,GACvCA,OAAAA,CAAQC,IAAI,CAACH,QAAAA,CAAAA,CAAAA;;AAIjB,QAAA,MAAMI,oBAAAA,GAAuB;AACzB,YAAA,eAAA;AACA,YAAA,6BAAA;AACA,YAAA,sBAAA;AACA,YAAA,gBAAA;AACA,YAAA,kBAAA;AACA,YAAA,sBAAA;AACA,YAAA,iBAAA;AACA,YAAA,yBAAA;AACA,YAAA;AACH,SAAA;QAED,MAAMC,cAAAA,GAAiBD,qBAAqBtB,IAAI,CAACoB,CAAAA,OAAAA,GAC7CA,OAAAA,CAAQC,IAAI,CAACH,QAAAA,CAAAA,CAAAA;;AAIjB,QAAA,IAAIK,cAAAA,EAAgB;YAChB,OAAO,KAAA;AACX,QAAA;QAEA,OAAOrF,WAAAA;AACX,IAAA;AAEA;;QAGQM,mBAAAA,CAAoBR,aAAqB,EAAU;AACvD,QAAA,MAAMwF,eAAe,IAAI,CAACjL,MAAM,CAACkL,iBAAiB,IAAI,IAAA;AACtD,QAAA,MAAMC,WAAW,IAAI,CAACnL,MAAM,CAACoL,aAAa,IAAI,KAAA;AAC9C,QAAA,MAAMC,aAAa,IAAI,CAACrL,MAAM,CAACsL,iBAAiB,IAAI,CAAA;QAEpD,MAAMtF,KAAAA,GAAQuF,IAAAA,CAAKC,GAAG,CAClBP,YAAAA,GAAeM,KAAKE,GAAG,CAACJ,UAAAA,EAAY5F,aAAAA,GAAgB,CAAA,CAAA,EACpD0F,QAAAA,CAAAA;;AAIJ,QAAA,MAAMO,MAAAA,GAASH,IAAAA,CAAKI,MAAM,EAAA,GAAK,GAAA,GAAM3F,KAAAA;AAErC,QAAA,OAAOA,KAAAA,GAAQ0F,MAAAA;AACnB,IAAA;AAEA;;QAGQtG,cAAAA,CAAewG,EAAU,EAAU;AACvC,QAAA,MAAMC,OAAAA,GAAUN,IAAAA,CAAKO,KAAK,CAACF,EAAAA,GAAK,IAAA,CAAA;AAChC,QAAA,MAAMG,OAAAA,GAAUR,IAAAA,CAAKO,KAAK,CAACD,OAAAA,GAAU,EAAA,CAAA;AAErC,QAAA,IAAIE,UAAU,CAAA,EAAG;AACb,YAAA,OAAO,GAAGA,OAAAA,CAAQ,EAAE,EAAEF,OAAAA,GAAU,EAAA,CAAG,CAAC,CAAC;AACzC,QAAA;QACA,OAAO,CAAA,EAAGA,OAAAA,CAAQ,CAAC,CAAC;AACxB,IAAA;AAEA;;AAEC,QACD,mBAAQpF,CAAoBrE,KAAY,EAAEhB,WAAmB,EAA0F;QACnJ,MAAM4K,QAAAA,GAAW5J,KAAAA,CAAMuE,OAAO,IAAI,EAAA;QAClC,MAAMsF,UAAAA,GAAa7J,KAAAA,CAAMwE,KAAK,IAAI,EAAA;AAClC,QAAA,MAAM+D,QAAAA,GAAW,CAAA,EAAGqB,QAAAA,CAAS,EAAE,EAAEC,UAAAA,CAAAA,CAAY;;QAG7C,MAAMC,OAAAA,GAAU,KAAC9J,CAAc+J,WAAW,IAAI,IAAI,CAACC,cAAc,CAAChL,WAAAA,CAAAA;;QAGlE,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,oDAAA,CAAA,EAAuD;YACtE,MAAMC,aAAAA,GAAgB3B,QAAAA,CAAS0B,KAAK,CAAC,mDAAA,CAAA;YACrC,OAAO;gBACHE,IAAAA,EAAM,eAAA;gBACNC,OAAAA,EAASF,aAAAA,GACH,GAAGA,aAAa,CAAC,EAAE,CAAC,EAAE,EAAEA,aAAa,CAAC,EAAE,CAAC,cAAc,EAAEA,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,GAC7E,0BAAA;AACNJ,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,0BAA0B;AACjF,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,+CAAA,CAAA,EAAkD;YACjE,OAAO;gBACHE,IAAAA,EAAM,aAAA;gBACNC,OAAAA,EAAS,IAAI,CAACG,qBAAqB,CAAChC,QAAAA,CAAAA;AACpCuB,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,iBAAiB;AACxE,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,mDAAA,CAAA,EAAsD;YACrE,OAAO;gBACHE,IAAAA,EAAM,gBAAA;gBACNC,OAAAA,EAAS,qCAAA;AACTN,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,cAAc;AACrE,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,2CAAA,CAAA,EAA8C;YAC7D,MAAMO,SAAAA,GAAYjC,QAAAA,CAAS0B,KAAK,CAAC,kBAAA,CAAA;YACjC,OAAO;gBACHE,IAAAA,EAAM,cAAA;gBACNC,OAAAA,EAASI,SAAAA,GAAY,GAAGA,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,cAAA;AACzDV,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,YAAY;AACnE,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,qBAAA,CAAA,EAAwB;YACvC,OAAO;gBACHE,IAAAA,EAAM,SAAA;gBACNC,OAAAA,EAAS,IAAI,CAACG,qBAAqB,CAAChC,QAAAA,CAAAA;AACpCuB,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY;AAChB,aAAA;AACJ,QAAA;;AAGA,QAAA,IAAI9B,SAAS0B,KAAK,CAAC,8BAA8B1B,QAAAA,CAAS0B,KAAK,CAAC,yBAAA,CAAA,EAA4B;YACxF,OAAO;gBACHE,IAAAA,EAAM,aAAA;gBACNC,OAAAA,EAAS,kCAAA;AACTN,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY;AAChB,aAAA;AACJ,QAAA;;QAGA,IAAI9B,QAAAA,CAAS0B,KAAK,CAAC,gDAAA,CAAA,EAAmD;YAClE,OAAO;gBACHE,IAAAA,EAAM,WAAA;gBACNC,OAAAA,EAAS,2CAAA;AACTN,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,cAAc;AACrE,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,2CAAA,CAAA,EAA8C;YAC7D,OAAO;gBACHE,IAAAA,EAAM,kBAAA;gBACNC,OAAAA,EAAS,IAAI,CAACG,qBAAqB,CAAChC,QAAAA,CAAAA;AACpCuB,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,wDAAwD;AAC/G,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,wDAAA,CAAA,EAA2D;YAC1E,OAAO;gBACHE,IAAAA,EAAM,UAAA;gBACNC,OAAAA,EAAS,sDAAA;AACTN,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY,CAAC,GAAG,EAAE,IAAI,CAACC,cAAc,CAACtL,WAAAA,CAAAA,CAAa,yBAAyB;AAChF,aAAA;AACJ,QAAA;;QAGA,IAAIuJ,QAAAA,CAAS0B,KAAK,CAAC,sDAAA,CAAA,EAAyD;YACxE,OAAO;gBACHE,IAAAA,EAAM,YAAA;gBACNC,OAAAA,EAAS,iDAAA;AACTN,gBAAAA,OAAAA;gBACAO,UAAAA,EAAY;AAChB,aAAA;AACJ,QAAA;;QAGA,OAAO;YACHF,IAAAA,EAAM,SAAA;YACNC,OAAAA,EAASR,QAAAA,CAASa,KAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,CAACC,SAAS,CAAC,CAAA,EAAG,GAAA,CAAA;AAC9CZ,YAAAA;AACJ,SAAA;AACJ,IAAA;AAEQS,IAAAA,qBAAAA,CAAsBI,IAAY,EAAU;QAChD,MAAMC,KAAAA,GAAQD,IAAAA,CAAKF,KAAK,CAAC,IAAA,CAAA;QACzB,KAAK,MAAMI,QAAQD,KAAAA,CAAO;YACtB,IAAIC,IAAAA,CAAKZ,KAAK,CAAC,yBAAA,CAAA,IAA8BY,KAAKC,IAAI,EAAA,CAAGlM,MAAM,GAAG,EAAA,EAAI;AAClE,gBAAA,OAAOiM,IAAAA,CAAKC,IAAI,EAAA,CAAGJ,SAAS,CAAC,CAAA,EAAG,GAAA,CAAA;AACpC,YAAA;AACJ,QAAA;QACA,OAAOC,IAAAA,CAAKF,KAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,CAACC,SAAS,CAAC,CAAA,EAAG,GAAA,CAAA;AAC5C,IAAA;AAEQJ,IAAAA,cAAAA,CAAetL,WAAmB,EAAU;QAChD,MAAM+L,OAAAA,GAAU,IAAI,CAAC/M,KAAK,CAACC,QAAQ,CAACyE,GAAG,CAAC1D,WAAAA,CAAAA;AACxC,QAAA,OAAO+L,CAAAA,OAAAA,KAAAA,IAAAA,IAAAA,OAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,OAAAA,CAASnF,IAAI,KAAI,GAAA;AAC5B,IAAA;AAEQoE,IAAAA,cAAAA,CAAehL,WAAmB,EAAU;AAChD,QAAA,MAAMgM,OAAAA,GAAU,IAAI,CAACV,cAAc,CAACtL,WAAAA,CAAAA;QACpC,MAAMiM,SAAAA,GAAY,IAAI,CAACrN,MAAM,CAACA,MAAM,CAACsN,eAAe,IAAI,iBAAA;;;AAGxD,QAAA,OAAO,GAAGF,OAAAA,CAAQ,CAAC,EAAEC,SAAAA,CAAU,cAAc,CAAC;AAClD,IAAA;AAjvBA,IAAA,WAAA,CAAYrN,MAAkB,CAAE;AAC5B,QAAA,KAAK,EAAA,EApBT,gBAAA,CAAA,IAAA,EAAQA,QAAAA,EAAR,SACA,gBAAA,CAAA,IAAA,EAAQI,OAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQU,OAAAA,EAAR,MAAA,CAAA,EACA,uBAAQuG,mBAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQzG,iBAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQM,aAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQc,mBAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQlC,QAAAA,EAASyN;AAGjB,QAAA,gBAAA,CAAA,IAAA,EAAQ/F,aAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQ9D,WAAAA,EAAR,MAAA,CAAA,EACA,gBAAA,CAAA,IAAA,EAAQpC,cAAAA,EAAe,IAAIkM,GAAAA,EAAAA,CAAAA,EAC3B,gBAAA,CAAA,IAAA,EAAQvK,mBAAAA,EAAoB,IAAIuK,GAAAA,EAAAA,CAAAA,EAChC,gBAAA,CAAA,IAAA,EAAQ3I,iBAAAA,EAAkB,IAAI2I,GAAAA,EAAAA,CAAAA,EAC9B,gBAAA,CAAA,IAAA,EAAQvI,kBAAAA,EAAmB,IAAIuI,GAAAA,EAAAA,CAAAA,EAC/B,gBAAA,CAAA,IAAA,EAAQ9H,eAAAA,EAAgB,IAAI8H,GAAAA,EAAAA,CAAAA,EAC5B,gBAAA,CAAA,IAAA,EAAQlI,qBAAwE,EAAE,CAAA;QAI9E,IAAI,CAACtF,MAAM,GAAGA,MAAAA;AACd,QAAA,IAAI,CAACI,KAAK,GAAGJ,MAAAA,CAAOI,KAAK;QACzB,IAAI,CAACoH,WAAW,GAAGiG,UAAAA,EAAAA;QACnB,IAAI,CAAC/J,SAAS,GAAG,IAAIP,IAAAA,EAAAA;;AAGrB,QAAA,IAAI,CAACkE,iBAAiB,GAAG,IAAIqG,iBAAAA,CAAkB,IAAI,CAACtN,KAAK,CAAA;AACzD,QAAA,IAAI,CAACQ,eAAe,GAAG,IAAI+M,eAAAA,CAAgB3N,OAAOC,cAAc,CAAA;QAChE,IAAI,CAACiB,SAAS,GAAG,IAAI0M,SAAAA,CAAU,IAAI,CAACxN,KAAK,EAAE,IAAI,CAACiH,iBAAiB,CAAA;QACjE,IAAI,CAACrF,iBAAiB,GAAG,IAAI6L,kBACzB7N,MAAAA,CAAOiJ,cAAc,IAAI6E,OAAAA,CAAQC,GAAG,EAAA,CAAA;;AAIxC,QAAA,IAAI,CAACjN,KAAK,GAAG,IAAI,CAACuB,eAAe,EAAA;AACrC,IAAA;AAiuBJ;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { getLogger } from '../logging.js';
2
+ import * as os from 'os';
2
3
 
3
4
  function _define_property(obj, key, value) {
4
5
  if (key in obj) {
@@ -19,7 +20,29 @@ function _define_property(obj, key, value) {
19
20
  /**
20
21
  * Check if we can allocate N slots
21
22
  */ canAllocate(count = 1) {
22
- return this.currentConcurrency + count <= this.maxConcurrency;
23
+ // Check concurrency limit
24
+ if (this.currentConcurrency + count > this.maxConcurrency) {
25
+ return false;
26
+ }
27
+ // Check system memory (soft check)
28
+ this.checkSystemMemory();
29
+ return true;
30
+ }
31
+ /**
32
+ * Log a warning if system memory is low
33
+ */ checkSystemMemory() {
34
+ try {
35
+ const freeMem = os.freemem();
36
+ const totalMem = os.totalmem();
37
+ const freePercent = freeMem / totalMem * 100;
38
+ if (freePercent < this.MEMORY_THRESHOLD_PERCENT) {
39
+ const freeGB = (freeMem / (1024 * 1024 * 1024)).toFixed(2);
40
+ this.logger.warn(`SYSTEM_MEMORY_LOW: System memory is running low | Free: ${freeGB}GB (${freePercent.toFixed(1)}%) | Action: Proceeding with caution`);
41
+ }
42
+ } catch (error) {
43
+ // Ignore errors in memory check to avoid blocking execution
44
+ this.logger.debug(`Failed to check system memory: ${error}`);
45
+ }
23
46
  }
24
47
  /**
25
48
  * Allocate resource slots
@@ -111,6 +134,8 @@ function _define_property(obj, key, value) {
111
134
  _define_property(this, "metrics", void 0);
112
135
  _define_property(this, "allocationHistory", []);
113
136
  _define_property(this, "logger", getLogger());
137
+ // Memory threshold: warn if free memory is below 5%
138
+ _define_property(this, "MEMORY_THRESHOLD_PERCENT", 5);
114
139
  this.maxConcurrency = maxConcurrency;
115
140
  this.metrics = {
116
141
  peakConcurrency: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceMonitor.js","sources":["../../src/execution/ResourceMonitor.ts"],"sourcesContent":["import { getLogger } from '../logging';\n\nexport interface ResourceMetrics {\n peakConcurrency: number;\n averageConcurrency: number;\n totalAllocations: number;\n totalReleases: number;\n}\n\n/**\n * ResourceMonitor manages concurrency limits and tracks resource utilization\n */\nexport class ResourceMonitor {\n private maxConcurrency: number;\n private currentConcurrency: number = 0;\n private metrics: ResourceMetrics;\n private allocationHistory: number[] = [];\n private logger = getLogger();\n\n constructor(maxConcurrency: number) {\n this.maxConcurrency = maxConcurrency;\n this.metrics = {\n peakConcurrency: 0,\n averageConcurrency: 0,\n totalAllocations: 0,\n totalReleases: 0\n };\n }\n\n /**\n * Check if we can allocate N slots\n */\n canAllocate(count: number = 1): boolean {\n return this.currentConcurrency + count <= this.maxConcurrency;\n }\n\n /**\n * Allocate resource slots\n * @returns true if allocation succeeded, false if not enough slots available\n */\n allocate(count: number = 1): boolean {\n if (!this.canAllocate(count)) {\n return false;\n }\n\n this.currentConcurrency += count;\n this.metrics.totalAllocations += count;\n this.metrics.peakConcurrency = Math.max(\n this.metrics.peakConcurrency,\n this.currentConcurrency\n );\n\n this.allocationHistory.push(this.currentConcurrency);\n this.updateAverageConcurrency();\n\n this.logger.debug(`Allocated ${count} slot(s) (${this.currentConcurrency}/${this.maxConcurrency})`);\n\n return true;\n }\n\n /**\n * Release resource slots\n */\n release(count: number = 1): void {\n this.currentConcurrency = Math.max(0, this.currentConcurrency - count);\n this.metrics.totalReleases += count;\n\n this.allocationHistory.push(this.currentConcurrency);\n this.updateAverageConcurrency();\n\n this.logger.debug(`Released ${count} slot(s) (${this.currentConcurrency}/${this.maxConcurrency})`);\n }\n\n /**\n * Get number of available slots\n */\n getAvailableSlots(): number {\n return this.maxConcurrency - this.currentConcurrency;\n }\n\n /**\n * Get current concurrency level\n */\n getCurrentConcurrency(): number {\n return this.currentConcurrency;\n }\n\n /**\n * Get maximum concurrency limit\n */\n getMaxConcurrency(): number {\n return this.maxConcurrency;\n }\n\n /**\n * Get resource utilization metrics\n */\n getMetrics(): ResourceMetrics {\n return { ...this.metrics };\n }\n\n /**\n * Get utilization percentage (0-100)\n */\n getUtilization(): number {\n if (this.maxConcurrency === 0) return 0;\n return (this.currentConcurrency / this.maxConcurrency) * 100;\n }\n\n /**\n * Check if resources are fully utilized\n */\n isFullyUtilized(): boolean {\n return this.currentConcurrency >= this.maxConcurrency;\n }\n\n /**\n * Check if resources are idle\n */\n isIdle(): boolean {\n return this.currentConcurrency === 0;\n }\n\n /**\n * Update average concurrency calculation\n */\n private updateAverageConcurrency(): void {\n if (this.allocationHistory.length === 0) {\n this.metrics.averageConcurrency = 0;\n return;\n }\n\n const sum = this.allocationHistory.reduce((a, b) => a + b, 0);\n this.metrics.averageConcurrency = sum / this.allocationHistory.length;\n }\n\n /**\n * Reset metrics (useful for testing)\n */\n reset(): void {\n this.currentConcurrency = 0;\n this.allocationHistory = [];\n this.metrics = {\n peakConcurrency: 0,\n averageConcurrency: 0,\n totalAllocations: 0,\n totalReleases: 0\n };\n }\n}\n"],"names":["ResourceMonitor","canAllocate","count","currentConcurrency","maxConcurrency","allocate","metrics","totalAllocations","peakConcurrency","Math","max","allocationHistory","push","updateAverageConcurrency","logger","debug","release","totalReleases","getAvailableSlots","getCurrentConcurrency","getMaxConcurrency","getMetrics","getUtilization","isFullyUtilized","isIdle","length","averageConcurrency","sum","reduce","a","b","reset","getLogger"],"mappings":";;;;;;;;;;;;;;;AASA;;AAEC,IACM,MAAMA,eAAAA,CAAAA;AAiBT;;QAGAC,WAAAA,CAAYC,KAAAA,GAAgB,CAAC,EAAW;AACpC,QAAA,OAAO,IAAI,CAACC,kBAAkB,GAAGD,KAAAA,IAAS,IAAI,CAACE,cAAc;AACjE,IAAA;AAEA;;;QAIAC,QAAAA,CAASH,KAAAA,GAAgB,CAAC,EAAW;AACjC,QAAA,IAAI,CAAC,IAAI,CAACD,WAAW,CAACC,KAAAA,CAAAA,EAAQ;YAC1B,OAAO,KAAA;AACX,QAAA;QAEA,IAAI,CAACC,kBAAkB,IAAID,KAAAA;AAC3B,QAAA,IAAI,CAACI,OAAO,CAACC,gBAAgB,IAAIL,KAAAA;AACjC,QAAA,IAAI,CAACI,OAAO,CAACE,eAAe,GAAGC,KAAKC,GAAG,CACnC,IAAI,CAACJ,OAAO,CAACE,eAAe,EAC5B,IAAI,CAACL,kBAAkB,CAAA;AAG3B,QAAA,IAAI,CAACQ,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAACT,kBAAkB,CAAA;AACnD,QAAA,IAAI,CAACU,wBAAwB,EAAA;QAE7B,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,UAAU,EAAEb,KAAAA,CAAM,UAAU,EAAE,IAAI,CAACC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAACC,cAAc,CAAC,CAAC,CAAC,CAAA;QAElG,OAAO,IAAA;AACX,IAAA;AAEA;;QAGAY,OAAAA,CAAQd,KAAAA,GAAgB,CAAC,EAAQ;QAC7B,IAAI,CAACC,kBAAkB,GAAGM,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAG,IAAI,CAACP,kBAAkB,GAAGD,KAAAA,CAAAA;AAChE,QAAA,IAAI,CAACI,OAAO,CAACW,aAAa,IAAIf,KAAAA;AAE9B,QAAA,IAAI,CAACS,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAACT,kBAAkB,CAAA;AACnD,QAAA,IAAI,CAACU,wBAAwB,EAAA;QAE7B,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,SAAS,EAAEb,KAAAA,CAAM,UAAU,EAAE,IAAI,CAACC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAACC,cAAc,CAAC,CAAC,CAAC,CAAA;AACrG,IAAA;AAEA;;AAEC,QACDc,iBAAAA,GAA4B;AACxB,QAAA,OAAO,IAAI,CAACd,cAAc,GAAG,IAAI,CAACD,kBAAkB;AACxD,IAAA;AAEA;;AAEC,QACDgB,qBAAAA,GAAgC;QAC5B,OAAO,IAAI,CAAChB,kBAAkB;AAClC,IAAA;AAEA;;AAEC,QACDiB,iBAAAA,GAA4B;QACxB,OAAO,IAAI,CAAChB,cAAc;AAC9B,IAAA;AAEA;;AAEC,QACDiB,UAAAA,GAA8B;QAC1B,OAAO;YAAE,GAAG,IAAI,CAACf;AAAQ,SAAA;AAC7B,IAAA;AAEA;;AAEC,QACDgB,cAAAA,GAAyB;AACrB,QAAA,IAAI,IAAI,CAAClB,cAAc,KAAK,GAAG,OAAO,CAAA;QACtC,OAAQ,IAAI,CAACD,kBAAkB,GAAG,IAAI,CAACC,cAAc,GAAI,GAAA;AAC7D,IAAA;AAEA;;AAEC,QACDmB,eAAAA,GAA2B;AACvB,QAAA,OAAO,IAAI,CAACpB,kBAAkB,IAAI,IAAI,CAACC,cAAc;AACzD,IAAA;AAEA;;AAEC,QACDoB,MAAAA,GAAkB;QACd,OAAO,IAAI,CAACrB,kBAAkB,KAAK,CAAA;AACvC,IAAA;AAEA;;AAEC,QACD,wBAAQU,GAAiC;AACrC,QAAA,IAAI,IAAI,CAACF,iBAAiB,CAACc,MAAM,KAAK,CAAA,EAAG;AACrC,YAAA,IAAI,CAACnB,OAAO,CAACoB,kBAAkB,GAAG,CAAA;AAClC,YAAA;AACJ,QAAA;QAEA,MAAMC,GAAAA,GAAM,IAAI,CAAChB,iBAAiB,CAACiB,MAAM,CAAC,CAACC,CAAAA,EAAGC,CAAAA,GAAMD,CAAAA,GAAIC,CAAAA,EAAG,CAAA,CAAA;QAC3D,IAAI,CAACxB,OAAO,CAACoB,kBAAkB,GAAGC,MAAM,IAAI,CAAChB,iBAAiB,CAACc,MAAM;AACzE,IAAA;AAEA;;AAEC,QACDM,KAAAA,GAAc;QACV,IAAI,CAAC5B,kBAAkB,GAAG,CAAA;QAC1B,IAAI,CAACQ,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAACL,OAAO,GAAG;YACXE,eAAAA,EAAiB,CAAA;YACjBkB,kBAAAA,EAAoB,CAAA;YACpBnB,gBAAAA,EAAkB,CAAA;YAClBU,aAAAA,EAAe;AACnB,SAAA;AACJ,IAAA;AAjIA,IAAA,WAAA,CAAYb,cAAsB,CAAE;AANpC,QAAA,gBAAA,CAAA,IAAA,EAAQA,kBAAR,MAAA,CAAA;AACA,QAAA,gBAAA,CAAA,IAAA,EAAQD,oBAAAA,EAA6B,CAAA,CAAA;AACrC,QAAA,gBAAA,CAAA,IAAA,EAAQG,WAAR,MAAA,CAAA;AACA,QAAA,gBAAA,CAAA,IAAA,EAAQK,qBAA8B,EAAE,CAAA;AACxC,QAAA,gBAAA,CAAA,IAAA,EAAQG,QAAAA,EAASkB,SAAAA,EAAAA,CAAAA;QAGb,IAAI,CAAC5B,cAAc,GAAGA,cAAAA;QACtB,IAAI,CAACE,OAAO,GAAG;YACXE,eAAAA,EAAiB,CAAA;YACjBkB,kBAAAA,EAAoB,CAAA;YACpBnB,gBAAAA,EAAkB,CAAA;YAClBU,aAAAA,EAAe;AACnB,SAAA;AACJ,IAAA;AA0HJ;;;;"}
1
+ {"version":3,"file":"ResourceMonitor.js","sources":["../../src/execution/ResourceMonitor.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport * as os from 'os';\n\nexport interface ResourceMetrics {\n peakConcurrency: number;\n averageConcurrency: number;\n totalAllocations: number;\n totalReleases: number;\n freeMemoryBytes?: number;\n}\n\n/**\n * ResourceMonitor manages concurrency limits and tracks resource utilization\n */\nexport class ResourceMonitor {\n private maxConcurrency: number;\n private currentConcurrency: number = 0;\n private metrics: ResourceMetrics;\n private allocationHistory: number[] = [];\n private logger = getLogger();\n\n // Memory threshold: warn if free memory is below 5%\n private readonly MEMORY_THRESHOLD_PERCENT = 5;\n\n constructor(maxConcurrency: number) {\n this.maxConcurrency = maxConcurrency;\n this.metrics = {\n peakConcurrency: 0,\n averageConcurrency: 0,\n totalAllocations: 0,\n totalReleases: 0\n };\n }\n\n /**\n * Check if we can allocate N slots\n */\n canAllocate(count: number = 1): boolean {\n // Check concurrency limit\n if (this.currentConcurrency + count > this.maxConcurrency) {\n return false;\n }\n\n // Check system memory (soft check)\n this.checkSystemMemory();\n\n return true;\n }\n\n /**\n * Log a warning if system memory is low\n */\n private checkSystemMemory(): void {\n try {\n const freeMem = os.freemem();\n const totalMem = os.totalmem();\n const freePercent = (freeMem / totalMem) * 100;\n\n if (freePercent < this.MEMORY_THRESHOLD_PERCENT) {\n const freeGB = (freeMem / (1024 * 1024 * 1024)).toFixed(2);\n this.logger.warn(`SYSTEM_MEMORY_LOW: System memory is running low | Free: ${freeGB}GB (${freePercent.toFixed(1)}%) | Action: Proceeding with caution`);\n }\n } catch (error) {\n // Ignore errors in memory check to avoid blocking execution\n this.logger.debug(`Failed to check system memory: ${error}`);\n }\n }\n\n /**\n * Allocate resource slots\n * @returns true if allocation succeeded, false if not enough slots available\n */\n allocate(count: number = 1): boolean {\n if (!this.canAllocate(count)) {\n return false;\n }\n\n this.currentConcurrency += count;\n this.metrics.totalAllocations += count;\n this.metrics.peakConcurrency = Math.max(\n this.metrics.peakConcurrency,\n this.currentConcurrency\n );\n\n this.allocationHistory.push(this.currentConcurrency);\n this.updateAverageConcurrency();\n\n this.logger.debug(`Allocated ${count} slot(s) (${this.currentConcurrency}/${this.maxConcurrency})`);\n\n return true;\n }\n\n /**\n * Release resource slots\n */\n release(count: number = 1): void {\n this.currentConcurrency = Math.max(0, this.currentConcurrency - count);\n this.metrics.totalReleases += count;\n\n this.allocationHistory.push(this.currentConcurrency);\n this.updateAverageConcurrency();\n\n this.logger.debug(`Released ${count} slot(s) (${this.currentConcurrency}/${this.maxConcurrency})`);\n }\n\n /**\n * Get number of available slots\n */\n getAvailableSlots(): number {\n return this.maxConcurrency - this.currentConcurrency;\n }\n\n /**\n * Get current concurrency level\n */\n getCurrentConcurrency(): number {\n return this.currentConcurrency;\n }\n\n /**\n * Get maximum concurrency limit\n */\n getMaxConcurrency(): number {\n return this.maxConcurrency;\n }\n\n /**\n * Get resource utilization metrics\n */\n getMetrics(): ResourceMetrics {\n return { ...this.metrics };\n }\n\n /**\n * Get utilization percentage (0-100)\n */\n getUtilization(): number {\n if (this.maxConcurrency === 0) return 0;\n return (this.currentConcurrency / this.maxConcurrency) * 100;\n }\n\n /**\n * Check if resources are fully utilized\n */\n isFullyUtilized(): boolean {\n return this.currentConcurrency >= this.maxConcurrency;\n }\n\n /**\n * Check if resources are idle\n */\n isIdle(): boolean {\n return this.currentConcurrency === 0;\n }\n\n /**\n * Update average concurrency calculation\n */\n private updateAverageConcurrency(): void {\n if (this.allocationHistory.length === 0) {\n this.metrics.averageConcurrency = 0;\n return;\n }\n\n const sum = this.allocationHistory.reduce((a, b) => a + b, 0);\n this.metrics.averageConcurrency = sum / this.allocationHistory.length;\n }\n\n /**\n * Reset metrics (useful for testing)\n */\n reset(): void {\n this.currentConcurrency = 0;\n this.allocationHistory = [];\n this.metrics = {\n peakConcurrency: 0,\n averageConcurrency: 0,\n totalAllocations: 0,\n totalReleases: 0\n };\n }\n}\n"],"names":["ResourceMonitor","canAllocate","count","currentConcurrency","maxConcurrency","checkSystemMemory","freeMem","os","freemem","totalMem","totalmem","freePercent","MEMORY_THRESHOLD_PERCENT","freeGB","toFixed","logger","warn","error","debug","allocate","metrics","totalAllocations","peakConcurrency","Math","max","allocationHistory","push","updateAverageConcurrency","release","totalReleases","getAvailableSlots","getCurrentConcurrency","getMaxConcurrency","getMetrics","getUtilization","isFullyUtilized","isIdle","length","averageConcurrency","sum","reduce","a","b","reset","getLogger"],"mappings":"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"}
@@ -36,7 +36,10 @@ function _define_property(obj, key, value) {
36
36
  const result = await this.executePackageFn(packageName, packageInfo, this.config.command, this.config.config, isDryRun, currentIndex, this.config.graph.packages.size, allPackageNames, isBuiltInCommand);
37
37
  const duration = Date.now() - startTime;
38
38
  if (!result.success) {
39
- throw result.error || new Error('Package execution failed');
39
+ // Attach logFile path to error for better error reporting
40
+ const error = result.error || new Error('Package execution failed');
41
+ error.logFilePath = result.logFile;
42
+ throw error;
40
43
  }
41
44
  // Check if this was a "no changes" skip (result will have skippedNoChanges flag)
42
45
  const skippedNoChanges = result.skippedNoChanges || false;
@@ -169,7 +172,7 @@ function _define_property(obj, key, value) {
169
172
  if (result.failed.length > 0) {
170
173
  lines.push(`❌ Failed (${result.failed.length}):`);
171
174
  for (const pkg of result.failed){
172
- lines.push(` - ${pkg}`);
175
+ lines.push(` - ${typeof pkg === 'string' ? pkg : pkg.name}`);
173
176
  }
174
177
  lines.push('');
175
178
  }
@@ -186,7 +189,7 @@ function _define_property(obj, key, value) {
186
189
  const totalProcessed = result.completed.length + result.failed.length + result.skippedNoChanges.length;
187
190
  const successRate = totalProcessed > 0 ? Math.round(result.completed.length / totalProcessed * 100) : 0;
188
191
  // Format elapsed time
189
- const totalTimeMs = ((_result_metrics = result.metrics) === null || _result_metrics === void 0 ? void 0 : _result_metrics.totalTime) || 0;
192
+ const totalTimeMs = ((_result_metrics = result.metrics) === null || _result_metrics === void 0 ? void 0 : _result_metrics.totalDuration) || 0;
190
193
  const minutes = Math.floor(totalTimeMs / 60000);
191
194
  const seconds = Math.floor(totalTimeMs % 60000 / 1000);
192
195
  const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeExecutionAdapter.js","sources":["../../src/execution/TreeExecutionAdapter.ts"],"sourcesContent":["import { DynamicTaskPool, PoolConfig } from './DynamicTaskPool';\nimport { PackageInfo } from '../util/dependencyGraph';\nimport { Config } from '../types';\nimport { PackageResult } from '../types/parallelExecution';\nimport { getLogger } from '../logging';\n\n/**\n * ExecutePackageFunction type matches the signature of tree.ts executePackage\n */\nexport type ExecutePackageFunction = (\n packageName: string,\n packageInfo: PackageInfo,\n commandToRun: string,\n runConfig: Config,\n isDryRun: boolean,\n index: number,\n total: number,\n allPackageNames: Set<string>,\n isBuiltInCommand?: boolean\n) => Promise<{ success: boolean; error?: any; isTimeoutError?: boolean; skippedNoChanges?: boolean }>;\n\n/**\n * TreeExecutionAdapter bridges DynamicTaskPool with tree.ts executePackage\n */\nexport class TreeExecutionAdapter {\n private pool: DynamicTaskPool;\n private executePackageFn: ExecutePackageFunction;\n private config: PoolConfig;\n private startedCount: number = 0;\n private completedCount: number = 0;\n\n constructor(config: PoolConfig, executePackageFn: ExecutePackageFunction) {\n this.config = config;\n this.executePackageFn = executePackageFn;\n\n // Create custom pool that uses our execute function\n this.pool = new DynamicTaskPool(config);\n\n // Track completion count for progress display\n this.pool.on('package:completed', () => {\n this.completedCount++;\n });\n\n // Override the executePackage method to use tree.ts function\n (this.pool as any).executePackage = this.createExecutePackageWrapper();\n }\n\n /**\n * Create wrapper that adapts tree.ts executePackage to DynamicTaskPool format\n */\n private createExecutePackageWrapper() {\n return async (packageName: string, _signal: AbortSignal): Promise<PackageResult> => {\n const packageInfo = this.config.graph.packages.get(packageName);\n if (!packageInfo) {\n throw new Error(`Package not found: ${packageName}`);\n }\n\n const allPackageNames = new Set(this.config.graph.packages.keys());\n const isDryRun = this.config.config.dryRun || false;\n const isBuiltInCommand = !this.config.command.startsWith('npm') &&\n !this.config.command.includes('&&');\n\n // Increment started count and use it as index for progress display\n const currentIndex = this.startedCount++;\n\n // Call tree.ts executePackage\n const startTime = Date.now();\n const result = await this.executePackageFn(\n packageName,\n packageInfo,\n this.config.command,\n this.config.config,\n isDryRun,\n currentIndex, // Use incremented started count for proper [N/Total] display\n this.config.graph.packages.size,\n allPackageNames,\n isBuiltInCommand\n );\n\n const duration = Date.now() - startTime;\n\n if (!result.success) {\n throw result.error || new Error('Package execution failed');\n }\n\n // Check if this was a \"no changes\" skip (result will have skippedNoChanges flag)\n const skippedNoChanges = (result as any).skippedNoChanges || false;\n\n return {\n success: true,\n duration,\n // Extract published version if available (from output or state)\n publishedVersion: undefined,\n stdout: undefined,\n stderr: undefined,\n skippedNoChanges\n };\n };\n }\n\n /**\n * Execute parallel execution\n */\n async execute() {\n return await this.pool.execute();\n }\n\n /**\n * Get the underlying task pool for event listeners\n */\n getPool(): DynamicTaskPool {\n return this.pool;\n }\n}\n\n/**\n * Create progress logger that listens to pool events\n */\nexport function createParallelProgressLogger(pool: DynamicTaskPool, config: Config): void {\n const logger = getLogger();\n const startTime = Date.now();\n let completedCount = 0;\n let totalPackages = 0;\n\n pool.on('execution:started', ({ totalPackages: total }) => {\n totalPackages = total;\n logger.info(`\\nPARALLEL_EXECUTION_STARTING: Initiating parallel package execution | Package Count: ${total} | Mode: parallel | Strategy: dependency-aware`);\n });\n\n pool.on('package:started', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`PACKAGE_STARTED: Package execution initiated | Package: ${packageName} | Status: running`);\n }\n });\n\n pool.on('package:completed', ({ packageName, result }) => {\n completedCount++;\n const percent = Math.round((completedCount / totalPackages) * 100);\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n\n if (config.debug) {\n logger.info(`PACKAGE_COMPLETED: Package execution finished successfully | Package: ${packageName} | Duration: ${result.duration}ms | Progress: ${completedCount}/${totalPackages} (${percent}%) | Elapsed: ${elapsed}s`);\n } else if (config.verbose) {\n logger.info(`PACKAGE_COMPLETED: Package execution finished | Package: ${packageName} | Progress: ${completedCount}/${totalPackages}`);\n } else {\n // Minimal output\n logger.info(`PROGRESS: [${completedCount}/${totalPackages}] Package completed: ${packageName}`);\n }\n });\n\n pool.on('package:failed', ({ packageName, error }) => {\n logger.error(`PACKAGE_FAILED: Package execution failed | Package: ${packageName} | Error: ${error.message} | Status: error`);\n });\n\n pool.on('package:retrying', ({ packageName, attemptNumber }) => {\n logger.warn(`PACKAGE_RETRYING: Retrying package execution | Package: ${packageName} | Attempt: ${attemptNumber} | Status: retrying`);\n });\n\n pool.on('package:skipped', ({ packageName, reason }) => {\n logger.warn(`PACKAGE_SKIPPED: Package skipped due to dependency failure | Package: ${packageName} | Reason: ${reason} | Status: skipped`);\n });\n\n pool.on('package:skipped-no-changes', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Reason: no-code-changes | Status: skipped`);\n }\n });\n\n pool.on('checkpoint:saved', () => {\n if (config.debug) {\n logger.debug('CHECKPOINT_SAVED: Execution checkpoint saved | Purpose: Recovery support | Action: State persisted to disk');\n }\n });\n\n pool.on('execution:completed', ({ result }) => {\n const totalTime = Math.round((Date.now() - startTime) / 1000);\n logger.info(`\\nPARALLEL_EXECUTION_COMPLETED: Parallel execution finished | Duration: ${totalTime}s | Status: completed`);\n\n if (config.verbose || config.debug) {\n logger.info(`\\nEXECUTION_METRICS: Performance and execution statistics:`);\n logger.info(` METRIC_TOTAL_PACKAGES: ${result.totalPackages}`);\n logger.info(` METRIC_COMPLETED: ${result.completed.length} packages successfully completed`);\n logger.info(` METRIC_SKIPPED_NO_CHANGES: ${result.skippedNoChanges.length} packages skipped (no changes)`);\n logger.info(` METRIC_SKIPPED_DEPENDENCIES: ${result.skipped.length} packages skipped (dependency failures)`);\n logger.info(` METRIC_FAILED: ${result.failed.length} packages failed`);\n logger.info(` METRIC_PEAK_CONCURRENCY: ${result.metrics.peakConcurrency} packages running simultaneously`);\n logger.info(` METRIC_AVG_CONCURRENCY: ${result.metrics.averageConcurrency.toFixed(1)} average concurrent packages`);\n }\n });\n}\n\nimport { ProgressFormatter } from '../ui/ProgressFormatter';\n\n/**\n * Format parallel execution result for display\n */\nexport function formatParallelResult(result: any): string {\n const lines: string[] = [];\n\n // Separator line\n lines.push('\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n lines.push('📊 Publish Summary');\n lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n // Detailed status breakdown by category\n if (result.completed.length > 0) {\n lines.push(`✅ Published (${result.completed.length}):`);\n for (const pkg of result.completed) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n if (result.skippedNoChanges.length > 0) {\n lines.push(`⏭️ Skipped (${result.skippedNoChanges.length}) - no code changes:`);\n for (const pkg of result.skippedNoChanges) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n if (result.failed.length > 0) {\n lines.push(`❌ Failed (${result.failed.length}):`);\n for (const pkg of result.failed) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n if (result.skipped.length > 0) {\n lines.push(`⊘ Skipped due to dependencies (${result.skipped.length}):`);\n for (const pkg of result.skipped) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n // Summary line\n lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n // Calculate success rate\n const totalProcessed = result.completed.length + result.failed.length + result.skippedNoChanges.length;\n const successRate = totalProcessed > 0 ? Math.round((result.completed.length / totalProcessed) * 100) : 0;\n\n // Format elapsed time\n const totalTimeMs = result.metrics?.totalTime || 0;\n const minutes = Math.floor(totalTimeMs / 60000);\n const seconds = Math.floor((totalTimeMs % 60000) / 1000);\n const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;\n\n lines.push(`Total time: ${timeStr}`);\n lines.push(`Success rate: ${successRate}% (${result.completed.length}/${totalProcessed} packages processed)`);\n\n if (result.metrics?.peakConcurrency) {\n lines.push(`Peak concurrency: ${result.metrics.peakConcurrency} packages`);\n }\n\n lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n\n // Failed packages with formatted error summary\n if (result.failed.length > 0) {\n lines.push('');\n const errorLines = ProgressFormatter.createErrorSummary(result.failed);\n lines.push(...errorLines);\n\n // Next steps for failures\n lines.push('\\n📋 Next steps:');\n lines.push('1. Review the errors above for each failed package');\n lines.push('2. Fix the issues in the failed packages');\n lines.push('3. Retry the publish command');\n\n if (result.skipped.length > 0) {\n lines.push('\\nNote: Once failed packages are fixed, their dependent packages will also be published.');\n }\n\n // Recovery guidance\n const hasRetriable = result.failed.some((f: any) => f.isRetriable);\n const hasPermanent = result.failed.some((f: any) => !f.isRetriable);\n const recoveryLines = ProgressFormatter.createRecoveryGuidance(hasRetriable, hasPermanent);\n lines.push(...recoveryLines);\n }\n\n return lines.join('\\n');\n}\n"],"names":["TreeExecutionAdapter","createExecutePackageWrapper","packageName","_signal","packageInfo","config","graph","packages","get","Error","allPackageNames","Set","keys","isDryRun","dryRun","isBuiltInCommand","command","startsWith","includes","currentIndex","startedCount","startTime","Date","now","result","executePackageFn","size","duration","success","error","skippedNoChanges","publishedVersion","undefined","stdout","stderr","execute","pool","getPool","completedCount","DynamicTaskPool","on","executePackage","createParallelProgressLogger","logger","getLogger","totalPackages","total","info","verbose","debug","percent","Math","round","elapsed","message","attemptNumber","warn","reason","totalTime","completed","length","skipped","failed","metrics","peakConcurrency","averageConcurrency","toFixed","formatParallelResult","lines","push","pkg","totalProcessed","successRate","totalTimeMs","minutes","floor","seconds","timeStr","errorLines","ProgressFormatter","createErrorSummary","hasRetriable","some","f","isRetriable","hasPermanent","recoveryLines","createRecoveryGuidance","join"],"mappings":"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"}
1
+ {"version":3,"file":"TreeExecutionAdapter.js","sources":["../../src/execution/TreeExecutionAdapter.ts"],"sourcesContent":["import { DynamicTaskPool, PoolConfig } from './DynamicTaskPool';\nimport { PackageInfo } from '../util/dependencyGraph';\nimport { Config } from '../types';\nimport { PackageResult } from '../types/parallelExecution';\nimport { getLogger } from '../logging';\n\n/**\n * ExecutePackageFunction type matches the signature of tree.ts executePackage\n */\nexport type ExecutePackageFunction = (\n packageName: string,\n packageInfo: PackageInfo,\n commandToRun: string,\n runConfig: Config,\n isDryRun: boolean,\n index: number,\n total: number,\n allPackageNames: Set<string>,\n isBuiltInCommand?: boolean\n) => Promise<{ success: boolean; error?: any; isTimeoutError?: boolean; skippedNoChanges?: boolean; logFile?: string }>;\n\n/**\n * TreeExecutionAdapter bridges DynamicTaskPool with tree.ts executePackage\n */\nexport class TreeExecutionAdapter {\n private pool: DynamicTaskPool;\n private executePackageFn: ExecutePackageFunction;\n private config: PoolConfig;\n private startedCount: number = 0;\n private completedCount: number = 0;\n\n constructor(config: PoolConfig, executePackageFn: ExecutePackageFunction) {\n this.config = config;\n this.executePackageFn = executePackageFn;\n\n // Create custom pool that uses our execute function\n this.pool = new DynamicTaskPool(config);\n\n // Track completion count for progress display\n this.pool.on('package:completed', () => {\n this.completedCount++;\n });\n\n // Override the executePackage method to use tree.ts function\n (this.pool as any).executePackage = this.createExecutePackageWrapper();\n }\n\n /**\n * Create wrapper that adapts tree.ts executePackage to DynamicTaskPool format\n */\n private createExecutePackageWrapper() {\n return async (packageName: string, _signal: AbortSignal): Promise<PackageResult> => {\n const packageInfo = this.config.graph.packages.get(packageName);\n if (!packageInfo) {\n throw new Error(`Package not found: ${packageName}`);\n }\n\n const allPackageNames = new Set(this.config.graph.packages.keys());\n const isDryRun = this.config.config.dryRun || false;\n const isBuiltInCommand = !this.config.command.startsWith('npm') &&\n !this.config.command.includes('&&');\n\n // Increment started count and use it as index for progress display\n const currentIndex = this.startedCount++;\n\n // Call tree.ts executePackage\n const startTime = Date.now();\n const result = await this.executePackageFn(\n packageName,\n packageInfo,\n this.config.command,\n this.config.config,\n isDryRun,\n currentIndex, // Use incremented started count for proper [N/Total] display\n this.config.graph.packages.size,\n allPackageNames,\n isBuiltInCommand\n );\n\n const duration = Date.now() - startTime;\n\n if (!result.success) {\n // Attach logFile path to error for better error reporting\n const error = result.error || new Error('Package execution failed');\n (error as any).logFilePath = result.logFile;\n throw error;\n }\n\n // Check if this was a \"no changes\" skip (result will have skippedNoChanges flag)\n const skippedNoChanges = (result as any).skippedNoChanges || false;\n\n return {\n success: true,\n duration,\n // Extract published version if available (from output or state)\n publishedVersion: undefined,\n stdout: undefined,\n stderr: undefined,\n skippedNoChanges\n };\n };\n }\n\n /**\n * Execute parallel execution\n */\n async execute() {\n return await this.pool.execute();\n }\n\n /**\n * Get the underlying task pool for event listeners\n */\n getPool(): DynamicTaskPool {\n return this.pool;\n }\n}\n\n/**\n * Create progress logger that listens to pool events\n */\nexport function createParallelProgressLogger(pool: DynamicTaskPool, config: Config): void {\n const logger = getLogger();\n const startTime = Date.now();\n let completedCount = 0;\n let totalPackages = 0;\n\n pool.on('execution:started', ({ totalPackages: total }) => {\n totalPackages = total;\n logger.info(`\\nPARALLEL_EXECUTION_STARTING: Initiating parallel package execution | Package Count: ${total} | Mode: parallel | Strategy: dependency-aware`);\n });\n\n pool.on('package:started', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`PACKAGE_STARTED: Package execution initiated | Package: ${packageName} | Status: running`);\n }\n });\n\n pool.on('package:completed', ({ packageName, result }) => {\n completedCount++;\n const percent = Math.round((completedCount / totalPackages) * 100);\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n\n if (config.debug) {\n logger.info(`PACKAGE_COMPLETED: Package execution finished successfully | Package: ${packageName} | Duration: ${result.duration}ms | Progress: ${completedCount}/${totalPackages} (${percent}%) | Elapsed: ${elapsed}s`);\n } else if (config.verbose) {\n logger.info(`PACKAGE_COMPLETED: Package execution finished | Package: ${packageName} | Progress: ${completedCount}/${totalPackages}`);\n } else {\n // Minimal output\n logger.info(`PROGRESS: [${completedCount}/${totalPackages}] Package completed: ${packageName}`);\n }\n });\n\n pool.on('package:failed', ({ packageName, error }) => {\n logger.error(`PACKAGE_FAILED: Package execution failed | Package: ${packageName} | Error: ${error.message} | Status: error`);\n });\n\n pool.on('package:retrying', ({ packageName, attemptNumber }) => {\n logger.warn(`PACKAGE_RETRYING: Retrying package execution | Package: ${packageName} | Attempt: ${attemptNumber} | Status: retrying`);\n });\n\n pool.on('package:skipped', ({ packageName, reason }) => {\n logger.warn(`PACKAGE_SKIPPED: Package skipped due to dependency failure | Package: ${packageName} | Reason: ${reason} | Status: skipped`);\n });\n\n pool.on('package:skipped-no-changes', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Reason: no-code-changes | Status: skipped`);\n }\n });\n\n pool.on('checkpoint:saved', () => {\n if (config.debug) {\n logger.debug('CHECKPOINT_SAVED: Execution checkpoint saved | Purpose: Recovery support | Action: State persisted to disk');\n }\n });\n\n pool.on('execution:completed', ({ result }) => {\n const totalTime = Math.round((Date.now() - startTime) / 1000);\n logger.info(`\\nPARALLEL_EXECUTION_COMPLETED: Parallel execution finished | Duration: ${totalTime}s | Status: completed`);\n\n if (config.verbose || config.debug) {\n logger.info(`\\nEXECUTION_METRICS: Performance and execution statistics:`);\n logger.info(` METRIC_TOTAL_PACKAGES: ${result.totalPackages}`);\n logger.info(` METRIC_COMPLETED: ${result.completed.length} packages successfully completed`);\n logger.info(` METRIC_SKIPPED_NO_CHANGES: ${result.skippedNoChanges.length} packages skipped (no changes)`);\n logger.info(` METRIC_SKIPPED_DEPENDENCIES: ${result.skipped.length} packages skipped (dependency failures)`);\n logger.info(` METRIC_FAILED: ${result.failed.length} packages failed`);\n logger.info(` METRIC_PEAK_CONCURRENCY: ${result.metrics.peakConcurrency} packages running simultaneously`);\n logger.info(` METRIC_AVG_CONCURRENCY: ${result.metrics.averageConcurrency.toFixed(1)} average concurrent packages`);\n }\n });\n}\n\nimport { ProgressFormatter } from '../ui/ProgressFormatter';\n\n/**\n * Format parallel execution result for display\n */\nexport function formatParallelResult(result: any): string {\n const lines: string[] = [];\n\n // Separator line\n lines.push('\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n lines.push('📊 Publish Summary');\n lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n // Detailed status breakdown by category\n if (result.completed.length > 0) {\n lines.push(`✅ Published (${result.completed.length}):`);\n for (const pkg of result.completed) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n if (result.skippedNoChanges.length > 0) {\n lines.push(`⏭️ Skipped (${result.skippedNoChanges.length}) - no code changes:`);\n for (const pkg of result.skippedNoChanges) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n if (result.failed.length > 0) {\n lines.push(`❌ Failed (${result.failed.length}):`);\n for (const pkg of result.failed) {\n lines.push(` - ${typeof pkg === 'string' ? pkg : pkg.name}`);\n }\n lines.push('');\n }\n\n if (result.skipped.length > 0) {\n lines.push(`⊘ Skipped due to dependencies (${result.skipped.length}):`);\n for (const pkg of result.skipped) {\n lines.push(` - ${pkg}`);\n }\n lines.push('');\n }\n\n // Summary line\n lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n // Calculate success rate\n const totalProcessed = result.completed.length + result.failed.length + result.skippedNoChanges.length;\n const successRate = totalProcessed > 0 ? Math.round((result.completed.length / totalProcessed) * 100) : 0;\n\n // Format elapsed time\n const totalTimeMs = result.metrics?.totalDuration || 0;\n const minutes = Math.floor(totalTimeMs / 60000);\n const seconds = Math.floor((totalTimeMs % 60000) / 1000);\n const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;\n\n lines.push(`Total time: ${timeStr}`);\n lines.push(`Success rate: ${successRate}% (${result.completed.length}/${totalProcessed} packages processed)`);\n\n if (result.metrics?.peakConcurrency) {\n lines.push(`Peak concurrency: ${result.metrics.peakConcurrency} packages`);\n }\n\n lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n\n // Failed packages with formatted error summary\n if (result.failed.length > 0) {\n lines.push('');\n const errorLines = ProgressFormatter.createErrorSummary(result.failed);\n lines.push(...errorLines);\n\n // Next steps for failures\n lines.push('\\n📋 Next steps:');\n lines.push('1. Review the errors above for each failed package');\n lines.push('2. Fix the issues in the failed packages');\n lines.push('3. Retry the publish command');\n\n if (result.skipped.length > 0) {\n lines.push('\\nNote: Once failed packages are fixed, their dependent packages will also be published.');\n }\n\n // Recovery guidance\n const hasRetriable = result.failed.some((f: any) => f.isRetriable);\n const hasPermanent = result.failed.some((f: any) => !f.isRetriable);\n const recoveryLines = ProgressFormatter.createRecoveryGuidance(hasRetriable, hasPermanent);\n lines.push(...recoveryLines);\n }\n\n return lines.join('\\n');\n}\n"],"names":["TreeExecutionAdapter","createExecutePackageWrapper","packageName","_signal","packageInfo","config","graph","packages","get","Error","allPackageNames","Set","keys","isDryRun","dryRun","isBuiltInCommand","command","startsWith","includes","currentIndex","startedCount","startTime","Date","now","result","executePackageFn","size","duration","success","error","logFilePath","logFile","skippedNoChanges","publishedVersion","undefined","stdout","stderr","execute","pool","getPool","completedCount","DynamicTaskPool","on","executePackage","createParallelProgressLogger","logger","getLogger","totalPackages","total","info","verbose","debug","percent","Math","round","elapsed","message","attemptNumber","warn","reason","totalTime","completed","length","skipped","failed","metrics","peakConcurrency","averageConcurrency","toFixed","formatParallelResult","lines","push","pkg","name","totalProcessed","successRate","totalTimeMs","totalDuration","minutes","floor","seconds","timeStr","errorLines","ProgressFormatter","createErrorSummary","hasRetriable","some","f","isRetriable","hasPermanent","recoveryLines","createRecoveryGuidance","join"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import path__default from 'path';
2
2
  import fs from 'fs/promises';
3
3
  import { getLogger } from '../logging.js';
4
- import { create } from './storage.js';
4
+ import { createStorage } from '@eldrforge/shared';
5
5
 
6
6
  function _define_property(obj, key, value) {
7
7
  if (key in obj) {
@@ -155,9 +155,7 @@ class CheckpointManager {
155
155
  _define_property(this, "lockPath", void 0);
156
156
  _define_property(this, "tempPath", void 0);
157
157
  _define_property(this, "logger", getLogger());
158
- _define_property(this, "storage", create({
159
- log: this.logger.info
160
- }));
158
+ _define_property(this, "storage", createStorage());
161
159
  this.checkpointPath = path__default.join(outputDirectory, '.kodrdriv-parallel-context.json');
162
160
  this.lockPath = `${this.checkpointPath}.lock`;
163
161
  this.tempPath = `${this.checkpointPath}.tmp`;