@eldrforge/kodrdriv 1.2.25 → 1.2.27

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.
@@ -1 +1 @@
1
- {"version":3,"file":"RecoveryManager.js","sources":["../../src/execution/RecoveryManager.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { DependencyGraph, findAllDependents } from '../util/dependencyGraph';\nimport { ParallelExecutionCheckpoint, FailedPackageSnapshot, RecoveryHint } from '../types/parallelExecution';\nimport { CheckpointManager } from '../util/checkpointManager';\nimport * as path from 'path';\n\nexport interface ValidationResult {\n valid: boolean;\n issues: string[];\n warnings: string[];\n}\n\nexport interface RecoveryOptions {\n markCompleted?: string[];\n markFailed?: string[];\n skipPackages?: string[];\n retryFailed?: boolean;\n skipFailed?: boolean;\n resetPackage?: string;\n maxRetries?: number;\n}\n\n/**\n * RecoveryManager provides granular control over execution state recovery\n */\nexport class RecoveryManager {\n private checkpoint: ParallelExecutionCheckpoint;\n private graph: DependencyGraph;\n private checkpointManager: CheckpointManager;\n private logger = getLogger();\n\n constructor(\n checkpoint: ParallelExecutionCheckpoint,\n graph: DependencyGraph,\n checkpointManager: CheckpointManager\n ) {\n this.checkpoint = checkpoint;\n this.graph = graph;\n this.checkpointManager = checkpointManager;\n }\n\n /**\n * Resolve a package identifier (directory name or package name) to a package name\n */\n private resolvePackageName(identifier: string): string | null {\n // Try exact package name match first\n if (this.graph.packages.has(identifier)) {\n return identifier;\n }\n\n // Try directory name match\n for (const [pkgName, pkgInfo] of this.graph.packages) {\n const dirName = path.basename(pkgInfo.path);\n if (dirName === identifier) {\n return pkgName;\n }\n }\n\n return null;\n }\n\n /**\n * Mark packages as completed\n * Accepts either package names (e.g., \"@eldrforge/git-tools\") or directory names (e.g., \"git-tools\")\n */\n async markCompleted(packages: string[]): Promise<void> {\n this.logger.info(`Marking ${packages.length} package(s) as completed...`);\n\n for (const pkgIdentifier of packages) {\n // Resolve identifier to package name\n const pkg = this.resolvePackageName(pkgIdentifier);\n\n if (!pkg) {\n // List available packages for better error message\n const available = Array.from(this.graph.packages.entries())\n .map(([name, info]) => `${path.basename(info.path)} (${name})`)\n .join(', ');\n throw new Error(`Package not found: ${pkgIdentifier}. Available packages: ${available}`);\n }\n\n // Validate not already completed\n if (this.checkpoint.state.completed.includes(pkg)) {\n this.logger.warn(`Package ${pkg} already completed`);\n continue;\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to completed\n this.checkpoint.state.completed.push(pkg);\n\n this.logger.info(`✓ Marked ${pkg} as completed`);\n }\n\n // Update ready queue\n this.updateReadyState();\n\n // Save checkpoint\n await this.saveCheckpoint();\n\n this.logger.info('State updated successfully');\n }\n\n /**\n * Mark packages as failed\n */\n async markFailed(packages: string[], reason: string = 'Manually marked as failed'): Promise<void> {\n this.logger.info(`Marking ${packages.length} package(s) as failed...`);\n\n for (const pkg of packages) {\n // Validate package exists\n if (!this.graph.packages.has(pkg)) {\n throw new Error(`Package not found: ${pkg}`);\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to failed\n const failureInfo: FailedPackageSnapshot = {\n name: pkg,\n error: reason,\n isRetriable: false,\n attemptNumber: 1,\n failedAt: new Date().toISOString(),\n dependencies: Array.from(this.graph.edges.get(pkg) || []),\n dependents: Array.from(findAllDependents(pkg, this.graph))\n };\n\n this.checkpoint.state.failed.push(failureInfo);\n\n this.logger.info(`✗ Marked ${pkg} as failed`);\n\n // Cascade to dependents\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n this.removeFromAllStates(dep);\n this.checkpoint.state.skipped.push(dep);\n this.logger.warn(`⊘ Skipped ${dep} (depends on failed ${pkg})`);\n }\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Skip packages and their dependents\n */\n async skipPackages(packages: string[]): Promise<void> {\n this.logger.info(`Skipping ${packages.length} package(s)...`);\n\n const toSkip = new Set<string>(packages);\n\n // Find all dependents\n for (const pkg of packages) {\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n toSkip.add(dep);\n }\n }\n\n this.logger.info(`Total packages to skip (including dependents): ${toSkip.size}`);\n\n for (const pkg of toSkip) {\n this.removeFromAllStates(pkg);\n if (!this.checkpoint.state.skipped.includes(pkg)) {\n this.checkpoint.state.skipped.push(pkg);\n }\n this.logger.info(`⊘ Skipped ${pkg}`);\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Retry failed packages\n */\n async retryFailed(options?: { maxRetries?: number }): Promise<void> {\n const failed = this.checkpoint.state.failed;\n\n if (failed.length === 0) {\n this.logger.info('No failed packages to retry');\n return;\n }\n\n this.logger.info(`Retrying ${failed.length} failed package(s)...`);\n\n const retriable: FailedPackageSnapshot[] = [];\n const nonRetriable: FailedPackageSnapshot[] = [];\n\n for (const failedPkg of failed) {\n if (failedPkg.isRetriable || options?.maxRetries) {\n retriable.push(failedPkg);\n } else {\n nonRetriable.push(failedPkg);\n }\n }\n\n if (nonRetriable.length > 0) {\n this.logger.warn(`${nonRetriable.length} package(s) are not retriable: ${nonRetriable.map(p => p.name).join(', ')}`);\n if (!options?.maxRetries) {\n this.logger.warn('Use --max-retries to force retry of non-retriable packages');\n }\n }\n\n for (const failedPkg of retriable) {\n // Reset retry count if max retries overridden\n if (options?.maxRetries) {\n this.checkpoint.retryAttempts[failedPkg.name] = 0;\n }\n\n // Move back to pending\n this.removeFromAllStates(failedPkg.name);\n this.checkpoint.state.pending.push(failedPkg.name);\n\n // Un-skip dependents if they were skipped\n for (const dependent of failedPkg.dependents) {\n if (this.checkpoint.state.skipped.includes(dependent)) {\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== dependent);\n this.checkpoint.state.pending.push(dependent);\n this.logger.info(`↻ ${dependent} moved back to pending (was skipped)`);\n }\n }\n\n this.logger.info(`↻ ${failedPkg.name} moved to pending for retry`);\n }\n\n // Keep only non-retriable failures in failed state\n this.checkpoint.state.failed = nonRetriable;\n\n // Update ready queue\n this.updateReadyState();\n\n await this.saveCheckpoint();\n\n this.logger.info(`${retriable.length} package(s) reset for retry`);\n }\n\n /**\n * Skip failed packages and continue with remaining\n */\n async skipFailed(): Promise<void> {\n const failed = this.checkpoint.state.failed.map(f => f.name);\n\n if (failed.length === 0) {\n this.logger.info('No failed packages to skip');\n return;\n }\n\n this.logger.info(`Skipping ${failed.length} failed package(s) and their dependents...`);\n\n await this.skipPackages(failed);\n\n // Clear failed state\n this.checkpoint.state.failed = [];\n\n this.logger.info('Failed packages skipped, execution can continue');\n }\n\n /**\n * Reset specific package to initial state\n */\n async resetPackage(packageName: string): Promise<void> {\n this.logger.info(`Resetting package: ${packageName}`);\n\n if (!this.graph.packages.has(packageName)) {\n throw new Error(`Package not found: ${packageName}`);\n }\n\n // Remove from all states\n this.removeFromAllStates(packageName);\n\n // Add back to pending\n this.checkpoint.state.pending.push(packageName);\n\n // Clear retry attempts\n delete this.checkpoint.retryAttempts[packageName];\n delete this.checkpoint.packageStartTimes[packageName];\n delete this.checkpoint.packageEndTimes[packageName];\n delete this.checkpoint.packageDurations[packageName];\n\n await this.saveCheckpoint();\n\n this.logger.info(`✓ ${packageName} reset to initial state`);\n }\n\n /**\n * Validate checkpoint state integrity\n */\n validateState(): ValidationResult {\n const issues: string[] = [];\n const warnings: string[] = [];\n\n // Check for duplicates across states\n const allPackages: string[] = [\n ...this.checkpoint.state.pending,\n ...this.checkpoint.state.ready,\n ...this.checkpoint.state.running.map(r => r.name),\n ...this.checkpoint.state.completed,\n ...this.checkpoint.state.failed.map(f => f.name),\n ...this.checkpoint.state.skipped\n ];\n\n const duplicates = this.findDuplicates(allPackages);\n if (duplicates.length > 0) {\n issues.push(`Packages in multiple states: ${duplicates.join(', ')}`);\n }\n\n // Check for missing packages\n const missing = this.checkpoint.buildOrder.filter(\n pkg => !allPackages.includes(pkg)\n );\n if (missing.length > 0) {\n issues.push(`Missing packages: ${missing.join(', ')}`);\n }\n\n // Check dependency consistency\n for (const pkg of this.checkpoint.state.completed) {\n const deps = this.graph.edges.get(pkg) || new Set();\n for (const dep of deps) {\n if (!this.checkpoint.state.completed.includes(dep)) {\n warnings.push(`${pkg} completed but dependency ${dep} not completed`);\n }\n }\n }\n\n // Check for stale running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 3600000) { // 1 hour\n warnings.push(`${running.name} has been running for ${this.formatDuration(elapsed)}`);\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings\n };\n }\n\n /**\n * Generate recovery hints based on current state\n */\n generateRecoveryHints(): RecoveryHint[] {\n const hints: RecoveryHint[] = [];\n\n // Check for retriable failures\n const retriableFailed = this.checkpoint.state.failed.filter(f => f.isRetriable);\n if (retriableFailed.length > 0) {\n hints.push({\n type: 'info',\n message: `${retriableFailed.length} package(s) failed with retriable errors`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --retry-failed'\n });\n }\n\n // Check for non-retriable failures\n const permanentFailed = this.checkpoint.state.failed.filter(f => !f.isRetriable);\n if (permanentFailed.length > 0) {\n hints.push({\n type: 'warning',\n message: `${permanentFailed.length} package(s) failed permanently`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --skip-failed'\n });\n\n for (const pkg of permanentFailed.slice(0, 3)) { // Limit to first 3\n hints.push({\n type: 'error',\n message: `${pkg.name}: ${pkg.error}`,\n actionable: true,\n suggestedCommand: `# Fix the issue, then:\\nkodrdriv tree [command] --continue --mark-completed \"${path.basename(this.graph.packages.get(pkg.name)?.path || pkg.name)}\"`\n });\n }\n }\n\n // Check for long-running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 1800000) { // 30 minutes\n hints.push({\n type: 'warning',\n message: `${running.name} has been running for ${this.formatDuration(elapsed)} - may be stuck`,\n actionable: false\n });\n }\n }\n\n // Check for state inconsistencies\n const validation = this.validateState();\n if (!validation.valid) {\n hints.push({\n type: 'error',\n message: 'State inconsistencies detected - checkpoint may be corrupted',\n actionable: true,\n suggestedCommand: 'kodrdriv tree --validate-state'\n });\n }\n\n return hints;\n }\n\n /**\n * Show detailed status\n */\n async showStatus(): Promise<string> {\n const lines: string[] = [];\n\n lines.push('═══════════════════════════════════════');\n lines.push(' Parallel Execution Status');\n lines.push('═══════════════════════════════════════');\n lines.push('');\n lines.push(`Execution ID: ${this.checkpoint.executionId}`);\n lines.push(`Started: ${new Date(this.checkpoint.totalStartTime).toLocaleString()}`);\n lines.push(`Last Updated: ${new Date(this.checkpoint.lastUpdated).toLocaleString()}`);\n lines.push('');\n\n // Progress summary\n const total = this.checkpoint.buildOrder.length;\n const completed = this.checkpoint.state.completed.length;\n const failed = this.checkpoint.state.failed.length;\n const skipped = this.checkpoint.state.skipped.length;\n const running = this.checkpoint.state.running.length;\n const pending = this.checkpoint.state.pending.length + this.checkpoint.state.ready.length;\n\n lines.push('📊 Progress:');\n lines.push(` Completed: ${completed}/${total} (${Math.round(completed/total*100)}%)`);\n lines.push(` Running: ${running}`);\n lines.push(` Pending: ${pending}`);\n lines.push(` Failed: ${failed}`);\n lines.push(` Skipped: ${skipped}`);\n lines.push('');\n\n // Progress bar\n const progressBar = this.createProgressBar(completed, total);\n lines.push(`Progress: [${progressBar}] ${Math.round(completed/total*100)}%`);\n lines.push('');\n\n // Running packages\n if (running > 0) {\n lines.push('🔄 Currently Running:');\n for (const pkg of this.checkpoint.state.running) {\n const elapsed = Date.now() - new Date(pkg.startTime).getTime();\n lines.push(` • ${pkg.name} (${this.formatDuration(elapsed)})`);\n }\n lines.push('');\n }\n\n // Failed packages\n if (failed > 0) {\n lines.push('❌ Failed Packages:');\n for (const pkg of this.checkpoint.state.failed) {\n lines.push(` ✗ ${pkg.name}`);\n lines.push(` Error: ${pkg.error}`);\n lines.push(` Retriable: ${pkg.isRetriable ? 'Yes' : 'No'}`);\n lines.push(` Attempts: ${pkg.attemptNumber}`);\n if (pkg.dependents.length > 0) {\n lines.push(` Blocked: ${pkg.dependents.length} dependent(s)`);\n }\n }\n lines.push('');\n }\n\n // Recovery hints\n const hints = this.generateRecoveryHints();\n if (hints.length > 0) {\n lines.push('💡 Recovery Suggestions:');\n for (const hint of hints) {\n const icon = hint.type === 'error' ? '❌' : hint.type === 'warning' ? '⚠️' : 'ℹ️';\n lines.push(` ${icon} ${hint.message}`);\n if (hint.suggestedCommand) {\n lines.push(` ${hint.suggestedCommand}`);\n }\n }\n lines.push('');\n }\n\n // State validation\n const validation = this.validateState();\n if (!validation.valid) {\n lines.push('⚠️ State Issues Detected:');\n for (const issue of validation.issues) {\n lines.push(` • ${issue}`);\n }\n lines.push('');\n }\n\n if (validation.warnings.length > 0) {\n lines.push('⚠️ Warnings:');\n for (const warning of validation.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Apply multiple recovery options at once\n */\n async applyRecoveryOptions(options: RecoveryOptions): Promise<void> {\n this.logger.info('Applying recovery options...');\n\n if (options.markCompleted && options.markCompleted.length > 0) {\n await this.markCompleted(options.markCompleted);\n }\n\n if (options.markFailed && options.markFailed.length > 0) {\n await this.markFailed(options.markFailed);\n }\n\n if (options.skipPackages && options.skipPackages.length > 0) {\n await this.skipPackages(options.skipPackages);\n }\n\n if (options.retryFailed) {\n await this.retryFailed({ maxRetries: options.maxRetries });\n }\n\n if (options.skipFailed) {\n await this.skipFailed();\n }\n\n if (options.resetPackage) {\n await this.resetPackage(options.resetPackage);\n }\n\n this.logger.info('Recovery options applied successfully');\n }\n\n /**\n * Get checkpoint for external access\n */\n getCheckpoint(): ParallelExecutionCheckpoint {\n return this.checkpoint;\n }\n\n // Private helper methods\n\n private removeFromAllStates(packageName: string): void {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== packageName);\n this.checkpoint.state.ready = this.checkpoint.state.ready.filter(p => p !== packageName);\n this.checkpoint.state.running = this.checkpoint.state.running.filter(r => r.name !== packageName);\n this.checkpoint.state.completed = this.checkpoint.state.completed.filter(p => p !== packageName);\n this.checkpoint.state.failed = this.checkpoint.state.failed.filter(f => f.name !== packageName);\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== packageName);\n }\n\n private updateReadyState(): void {\n // Move packages from pending to ready if dependencies met\n const nowReady: string[] = [];\n\n for (const pkg of this.checkpoint.state.pending) {\n const deps = this.graph.edges.get(pkg) || new Set();\n const allDepsCompleted = Array.from(deps).every(dep =>\n this.checkpoint.state.completed.includes(dep)\n );\n\n if (allDepsCompleted) {\n nowReady.push(pkg);\n }\n }\n\n for (const pkg of nowReady) {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== pkg);\n this.checkpoint.state.ready.push(pkg);\n }\n }\n\n private findDuplicates(arr: string[]): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const item of arr) {\n if (seen.has(item)) {\n duplicates.add(item);\n }\n seen.add(item);\n }\n\n return Array.from(duplicates);\n }\n\n private async saveCheckpoint(): Promise<void> {\n this.checkpoint.lastUpdated = new Date().toISOString();\n await this.checkpointManager.save(this.checkpoint);\n }\n\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n }\n\n private createProgressBar(current: number, total: number, width: number = 30): string {\n const percent = current / total;\n const filled = Math.round(width * percent);\n const empty = width - filled;\n\n return '█'.repeat(filled) + '░'.repeat(empty);\n }\n}\n\n/**\n * Load checkpoint and create recovery manager\n */\nexport async function loadRecoveryManager(\n graph: DependencyGraph,\n outputDirectory?: string\n): Promise<RecoveryManager | null> {\n const checkpointManager = new CheckpointManager(outputDirectory);\n const checkpoint = await checkpointManager.load();\n\n if (!checkpoint) {\n return null;\n }\n\n return new RecoveryManager(checkpoint, graph, checkpointManager);\n}\n"],"names":["RecoveryManager","resolvePackageName","identifier","graph","packages","has","pkgName","pkgInfo","dirName","path","basename","markCompleted","logger","info","length","pkgIdentifier","pkg","available","Array","from","entries","map","name","join","Error","checkpoint","state","completed","includes","warn","removeFromAllStates","push","updateReadyState","saveCheckpoint","markFailed","reason","failureInfo","error","isRetriable","attemptNumber","failedAt","Date","toISOString","dependencies","edges","get","dependents","findAllDependents","failed","dep","skipped","skipPackages","toSkip","Set","add","size","retryFailed","options","retriable","nonRetriable","failedPkg","maxRetries","p","retryAttempts","pending","dependent","filter","skipFailed","f","resetPackage","packageName","packageStartTimes","packageEndTimes","packageDurations","validateState","issues","warnings","allPackages","ready","running","r","duplicates","findDuplicates","missing","buildOrder","deps","now","elapsed","startTime","getTime","formatDuration","valid","generateRecoveryHints","hints","retriableFailed","type","message","actionable","suggestedCommand","permanentFailed","slice","validation","showStatus","lines","executionId","totalStartTime","toLocaleString","lastUpdated","total","Math","round","progressBar","createProgressBar","hint","icon","issue","warning","applyRecoveryOptions","getCheckpoint","nowReady","allDepsCompleted","every","arr","seen","item","checkpointManager","save","ms","seconds","floor","minutes","hours","current","width","percent","filled","empty","repeat","getLogger","loadRecoveryManager","outputDirectory","CheckpointManager","load"],"mappings":"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"}
1
+ {"version":3,"file":"RecoveryManager.js","sources":["../../src/execution/RecoveryManager.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { DependencyGraph, findAllDependents } from '../util/dependencyGraph';\nimport { ParallelExecutionCheckpoint, FailedPackageSnapshot, RecoveryHint } from '../types/parallelExecution';\nimport { CheckpointManager } from '../util/checkpointManager';\nimport * as path from 'path';\n\nexport interface ValidationResult {\n valid: boolean;\n issues: string[];\n warnings: string[];\n}\n\nexport interface RecoveryOptions {\n markCompleted?: string[];\n markFailed?: string[];\n skipPackages?: string[];\n retryFailed?: boolean;\n skipFailed?: boolean;\n resetPackage?: string;\n maxRetries?: number;\n}\n\n/**\n * RecoveryManager provides granular control over execution state recovery\n */\nexport class RecoveryManager {\n private checkpoint: ParallelExecutionCheckpoint;\n private graph: DependencyGraph;\n private checkpointManager: CheckpointManager;\n private logger = getLogger();\n\n constructor(\n checkpoint: ParallelExecutionCheckpoint,\n graph: DependencyGraph,\n checkpointManager: CheckpointManager\n ) {\n this.checkpoint = checkpoint;\n this.graph = graph;\n this.checkpointManager = checkpointManager;\n }\n\n /**\n * Resolve a package identifier (directory name or package name) to a package name\n */\n private resolvePackageName(identifier: string): string | null {\n // Try exact package name match first\n if (this.graph.packages.has(identifier)) {\n return identifier;\n }\n\n // Try directory name match\n for (const [pkgName, pkgInfo] of this.graph.packages) {\n const dirName = path.basename(pkgInfo.path);\n if (dirName === identifier) {\n return pkgName;\n }\n }\n\n return null;\n }\n\n /**\n * Mark packages as completed\n * Accepts either package names (e.g., \"@eldrforge/git-tools\") or directory names (e.g., \"git-tools\")\n */\n async markCompleted(packages: string[]): Promise<void> {\n this.logger.info(`Marking ${packages.length} package(s) as completed...`);\n\n for (const pkgIdentifier of packages) {\n // Resolve identifier to package name\n const pkg = this.resolvePackageName(pkgIdentifier);\n\n if (!pkg) {\n // List available packages for better error message\n const available = Array.from(this.graph.packages.entries())\n .map(([name, info]) => `${path.basename(info.path)} (${name})`)\n .join(', ');\n throw new Error(`Package not found: ${pkgIdentifier}. Available packages: ${available}`);\n }\n\n // Validate not already completed\n if (this.checkpoint.state.completed.includes(pkg)) {\n this.logger.warn(`Package ${pkg} already completed`);\n continue;\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to completed\n this.checkpoint.state.completed.push(pkg);\n\n this.logger.info(`✓ Marked ${pkg} as completed`);\n }\n\n // Update ready queue\n this.updateReadyState();\n\n // Save checkpoint\n await this.saveCheckpoint();\n\n this.logger.info('State updated successfully');\n }\n\n /**\n * Mark packages as failed\n */\n async markFailed(packages: string[], reason: string = 'Manually marked as failed'): Promise<void> {\n this.logger.info(`Marking ${packages.length} package(s) as failed...`);\n\n for (const pkg of packages) {\n // Validate package exists\n if (!this.graph.packages.has(pkg)) {\n throw new Error(`Package not found: ${pkg}`);\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to failed\n const failureInfo: FailedPackageSnapshot = {\n name: pkg,\n error: reason,\n isRetriable: false,\n attemptNumber: 1,\n failedAt: new Date().toISOString(),\n dependencies: Array.from(this.graph.edges.get(pkg) || []),\n dependents: Array.from(findAllDependents(pkg, this.graph))\n };\n\n this.checkpoint.state.failed.push(failureInfo);\n\n this.logger.info(`✗ Marked ${pkg} as failed`);\n\n // Cascade to dependents\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n this.removeFromAllStates(dep);\n this.checkpoint.state.skipped.push(dep);\n this.logger.warn(`⊘ Skipped ${dep} (depends on failed ${pkg})`);\n }\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Skip packages and their dependents\n */\n async skipPackages(packages: string[]): Promise<void> {\n this.logger.info(`Skipping ${packages.length} package(s)...`);\n\n const toSkip = new Set<string>(packages);\n\n // Find all dependents\n for (const pkg of packages) {\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n toSkip.add(dep);\n }\n }\n\n this.logger.info(`Total packages to skip (including dependents): ${toSkip.size}`);\n\n for (const pkg of toSkip) {\n this.removeFromAllStates(pkg);\n if (!this.checkpoint.state.skipped.includes(pkg)) {\n this.checkpoint.state.skipped.push(pkg);\n }\n this.logger.info(`⊘ Skipped ${pkg}`);\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Retry failed packages\n */\n async retryFailed(options?: { maxRetries?: number }): Promise<void> {\n const failed = this.checkpoint.state.failed;\n\n if (failed.length === 0) {\n this.logger.info('No failed packages to retry');\n return;\n }\n\n this.logger.info(`Retrying ${failed.length} failed package(s)...`);\n\n const retriable: FailedPackageSnapshot[] = [];\n const nonRetriable: FailedPackageSnapshot[] = [];\n\n for (const failedPkg of failed) {\n if (failedPkg.isRetriable || options?.maxRetries) {\n retriable.push(failedPkg);\n } else {\n nonRetriable.push(failedPkg);\n }\n }\n\n if (nonRetriable.length > 0) {\n this.logger.warn(`${nonRetriable.length} package(s) are not retriable: ${nonRetriable.map(p => p.name).join(', ')}`);\n if (!options?.maxRetries) {\n this.logger.warn('Use --max-retries to force retry of non-retriable packages');\n }\n }\n\n for (const failedPkg of retriable) {\n // Reset retry count if max retries overridden\n if (options?.maxRetries) {\n this.checkpoint.retryAttempts[failedPkg.name] = 0;\n }\n\n // Move back to pending\n this.removeFromAllStates(failedPkg.name);\n this.checkpoint.state.pending.push(failedPkg.name);\n\n // Un-skip dependents if they were skipped\n for (const dependent of failedPkg.dependents) {\n if (this.checkpoint.state.skipped.includes(dependent)) {\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== dependent);\n this.checkpoint.state.pending.push(dependent);\n this.logger.info(`↻ ${dependent} moved back to pending (was skipped)`);\n }\n }\n\n this.logger.info(`↻ ${failedPkg.name} moved to pending for retry`);\n }\n\n // Keep only non-retriable failures in failed state\n this.checkpoint.state.failed = nonRetriable;\n\n // Update ready queue\n this.updateReadyState();\n\n await this.saveCheckpoint();\n\n this.logger.info(`${retriable.length} package(s) reset for retry`);\n }\n\n /**\n * Skip failed packages and continue with remaining\n */\n async skipFailed(): Promise<void> {\n const failed = this.checkpoint.state.failed.map(f => f.name);\n\n if (failed.length === 0) {\n this.logger.info('No failed packages to skip');\n return;\n }\n\n this.logger.info(`Skipping ${failed.length} failed package(s) and their dependents...`);\n\n await this.skipPackages(failed);\n\n // Clear failed state\n this.checkpoint.state.failed = [];\n\n this.logger.info('Failed packages skipped, execution can continue');\n }\n\n /**\n * Reset specific package to initial state\n */\n async resetPackage(packageName: string): Promise<void> {\n this.logger.info(`Resetting package: ${packageName}`);\n\n if (!this.graph.packages.has(packageName)) {\n throw new Error(`Package not found: ${packageName}`);\n }\n\n // Remove from all states\n this.removeFromAllStates(packageName);\n\n // Add back to pending\n this.checkpoint.state.pending.push(packageName);\n\n // Clear retry attempts\n delete this.checkpoint.retryAttempts[packageName];\n delete this.checkpoint.packageStartTimes[packageName];\n delete this.checkpoint.packageEndTimes[packageName];\n delete this.checkpoint.packageDurations[packageName];\n\n await this.saveCheckpoint();\n\n this.logger.info(`✓ ${packageName} reset to initial state`);\n }\n\n /**\n * Validate checkpoint state integrity\n */\n validateState(): ValidationResult {\n const issues: string[] = [];\n const warnings: string[] = [];\n\n // Check for duplicates across states\n const allPackages: string[] = [\n ...this.checkpoint.state.pending,\n ...this.checkpoint.state.ready,\n ...this.checkpoint.state.running.map(r => r.name),\n ...this.checkpoint.state.completed,\n ...this.checkpoint.state.failed.map(f => f.name),\n ...this.checkpoint.state.skipped,\n ...this.checkpoint.state.skippedNoChanges\n ];\n\n const duplicates = this.findDuplicates(allPackages);\n if (duplicates.length > 0) {\n issues.push(`Packages in multiple states: ${duplicates.join(', ')}`);\n }\n\n // Check for missing packages\n const missing = this.checkpoint.buildOrder.filter(\n pkg => !allPackages.includes(pkg)\n );\n if (missing.length > 0) {\n issues.push(`Missing packages: ${missing.join(', ')}`);\n }\n\n // Check dependency consistency\n for (const pkg of this.checkpoint.state.completed) {\n const deps = this.graph.edges.get(pkg) || new Set();\n for (const dep of deps) {\n if (!this.checkpoint.state.completed.includes(dep)) {\n warnings.push(`${pkg} completed but dependency ${dep} not completed`);\n }\n }\n }\n\n // Check for stale running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 3600000) { // 1 hour\n warnings.push(`${running.name} has been running for ${this.formatDuration(elapsed)}`);\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings\n };\n }\n\n /**\n * Generate recovery hints based on current state\n */\n generateRecoveryHints(): RecoveryHint[] {\n const hints: RecoveryHint[] = [];\n\n // Check for retriable failures\n const retriableFailed = this.checkpoint.state.failed.filter(f => f.isRetriable);\n if (retriableFailed.length > 0) {\n hints.push({\n type: 'info',\n message: `${retriableFailed.length} package(s) failed with retriable errors`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --retry-failed'\n });\n }\n\n // Check for non-retriable failures\n const permanentFailed = this.checkpoint.state.failed.filter(f => !f.isRetriable);\n if (permanentFailed.length > 0) {\n hints.push({\n type: 'warning',\n message: `${permanentFailed.length} package(s) failed permanently`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --skip-failed'\n });\n\n for (const pkg of permanentFailed.slice(0, 3)) { // Limit to first 3\n hints.push({\n type: 'error',\n message: `${pkg.name}: ${pkg.error}`,\n actionable: true,\n suggestedCommand: `# Fix the issue, then:\\nkodrdriv tree [command] --continue --mark-completed \"${path.basename(this.graph.packages.get(pkg.name)?.path || pkg.name)}\"`\n });\n }\n }\n\n // Check for long-running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 1800000) { // 30 minutes\n hints.push({\n type: 'warning',\n message: `${running.name} has been running for ${this.formatDuration(elapsed)} - may be stuck`,\n actionable: false\n });\n }\n }\n\n // Check for state inconsistencies\n const validation = this.validateState();\n if (!validation.valid) {\n hints.push({\n type: 'error',\n message: 'State inconsistencies detected - checkpoint may be corrupted',\n actionable: true,\n suggestedCommand: 'kodrdriv tree --validate-state'\n });\n }\n\n return hints;\n }\n\n /**\n * Show detailed status\n */\n async showStatus(): Promise<string> {\n const lines: string[] = [];\n\n lines.push('═══════════════════════════════════════');\n lines.push(' Parallel Execution Status');\n lines.push('═══════════════════════════════════════');\n lines.push('');\n lines.push(`Execution ID: ${this.checkpoint.executionId}`);\n lines.push(`Started: ${new Date(this.checkpoint.totalStartTime).toLocaleString()}`);\n lines.push(`Last Updated: ${new Date(this.checkpoint.lastUpdated).toLocaleString()}`);\n lines.push('');\n\n // Progress summary\n const total = this.checkpoint.buildOrder.length;\n const completed = this.checkpoint.state.completed.length;\n const skippedNoChanges = this.checkpoint.state.skippedNoChanges.length;\n const failed = this.checkpoint.state.failed.length;\n const skipped = this.checkpoint.state.skipped.length;\n const running = this.checkpoint.state.running.length;\n const pending = this.checkpoint.state.pending.length + this.checkpoint.state.ready.length;\n\n lines.push('📊 Progress:');\n lines.push(` Completed: ${completed}/${total} (${Math.round(completed/total*100)}%)`);\n lines.push(` Skipped (no changes): ${skippedNoChanges}`);\n lines.push(` Running: ${running}`);\n lines.push(` Pending: ${pending}`);\n lines.push(` Failed: ${failed}`);\n lines.push(` Skipped (dependency failed): ${skipped}`);\n lines.push('');\n\n // Progress bar\n const progressBar = this.createProgressBar(completed, total);\n lines.push(`Progress: [${progressBar}] ${Math.round(completed/total*100)}%`);\n lines.push('');\n\n // Running packages\n if (running > 0) {\n lines.push('🔄 Currently Running:');\n for (const pkg of this.checkpoint.state.running) {\n const elapsed = Date.now() - new Date(pkg.startTime).getTime();\n lines.push(` • ${pkg.name} (${this.formatDuration(elapsed)})`);\n }\n lines.push('');\n }\n\n // Failed packages\n if (failed > 0) {\n lines.push('❌ Failed Packages:');\n for (const pkg of this.checkpoint.state.failed) {\n lines.push(` ✗ ${pkg.name}`);\n lines.push(` Error: ${pkg.error}`);\n lines.push(` Retriable: ${pkg.isRetriable ? 'Yes' : 'No'}`);\n lines.push(` Attempts: ${pkg.attemptNumber}`);\n if (pkg.dependents.length > 0) {\n lines.push(` Blocked: ${pkg.dependents.length} dependent(s)`);\n }\n }\n lines.push('');\n }\n\n // Recovery hints\n const hints = this.generateRecoveryHints();\n if (hints.length > 0) {\n lines.push('💡 Recovery Suggestions:');\n for (const hint of hints) {\n const icon = hint.type === 'error' ? '❌' : hint.type === 'warning' ? '⚠️' : 'ℹ️';\n lines.push(` ${icon} ${hint.message}`);\n if (hint.suggestedCommand) {\n lines.push(` ${hint.suggestedCommand}`);\n }\n }\n lines.push('');\n }\n\n // State validation\n const validation = this.validateState();\n if (!validation.valid) {\n lines.push('⚠️ State Issues Detected:');\n for (const issue of validation.issues) {\n lines.push(` • ${issue}`);\n }\n lines.push('');\n }\n\n if (validation.warnings.length > 0) {\n lines.push('⚠️ Warnings:');\n for (const warning of validation.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Apply multiple recovery options at once\n */\n async applyRecoveryOptions(options: RecoveryOptions): Promise<void> {\n this.logger.info('Applying recovery options...');\n\n if (options.markCompleted && options.markCompleted.length > 0) {\n await this.markCompleted(options.markCompleted);\n }\n\n if (options.markFailed && options.markFailed.length > 0) {\n await this.markFailed(options.markFailed);\n }\n\n if (options.skipPackages && options.skipPackages.length > 0) {\n await this.skipPackages(options.skipPackages);\n }\n\n if (options.retryFailed) {\n await this.retryFailed({ maxRetries: options.maxRetries });\n }\n\n if (options.skipFailed) {\n await this.skipFailed();\n }\n\n if (options.resetPackage) {\n await this.resetPackage(options.resetPackage);\n }\n\n this.logger.info('Recovery options applied successfully');\n }\n\n /**\n * Get checkpoint for external access\n */\n getCheckpoint(): ParallelExecutionCheckpoint {\n return this.checkpoint;\n }\n\n // Private helper methods\n\n private removeFromAllStates(packageName: string): void {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== packageName);\n this.checkpoint.state.ready = this.checkpoint.state.ready.filter(p => p !== packageName);\n this.checkpoint.state.running = this.checkpoint.state.running.filter(r => r.name !== packageName);\n this.checkpoint.state.completed = this.checkpoint.state.completed.filter(p => p !== packageName);\n this.checkpoint.state.failed = this.checkpoint.state.failed.filter(f => f.name !== packageName);\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== packageName);\n this.checkpoint.state.skippedNoChanges = this.checkpoint.state.skippedNoChanges.filter(p => p !== packageName);\n }\n\n private updateReadyState(): void {\n // Move packages from pending to ready if dependencies met\n const nowReady: string[] = [];\n\n for (const pkg of this.checkpoint.state.pending) {\n const deps = this.graph.edges.get(pkg) || new Set();\n const allDepsCompleted = Array.from(deps).every(dep =>\n this.checkpoint.state.completed.includes(dep)\n );\n\n if (allDepsCompleted) {\n nowReady.push(pkg);\n }\n }\n\n for (const pkg of nowReady) {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== pkg);\n this.checkpoint.state.ready.push(pkg);\n }\n }\n\n private findDuplicates(arr: string[]): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const item of arr) {\n if (seen.has(item)) {\n duplicates.add(item);\n }\n seen.add(item);\n }\n\n return Array.from(duplicates);\n }\n\n private async saveCheckpoint(): Promise<void> {\n this.checkpoint.lastUpdated = new Date().toISOString();\n await this.checkpointManager.save(this.checkpoint);\n }\n\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n }\n\n private createProgressBar(current: number, total: number, width: number = 30): string {\n const percent = current / total;\n const filled = Math.round(width * percent);\n const empty = width - filled;\n\n return '█'.repeat(filled) + '░'.repeat(empty);\n }\n}\n\n/**\n * Load checkpoint and create recovery manager\n */\nexport async function loadRecoveryManager(\n graph: DependencyGraph,\n outputDirectory?: string\n): Promise<RecoveryManager | null> {\n const checkpointManager = new CheckpointManager(outputDirectory);\n const checkpoint = await checkpointManager.load();\n\n if (!checkpoint) {\n return null;\n }\n\n return new RecoveryManager(checkpoint, graph, checkpointManager);\n}\n"],"names":["RecoveryManager","resolvePackageName","identifier","graph","packages","has","pkgName","pkgInfo","dirName","path","basename","markCompleted","logger","info","length","pkgIdentifier","pkg","available","Array","from","entries","map","name","join","Error","checkpoint","state","completed","includes","warn","removeFromAllStates","push","updateReadyState","saveCheckpoint","markFailed","reason","failureInfo","error","isRetriable","attemptNumber","failedAt","Date","toISOString","dependencies","edges","get","dependents","findAllDependents","failed","dep","skipped","skipPackages","toSkip","Set","add","size","retryFailed","options","retriable","nonRetriable","failedPkg","maxRetries","p","retryAttempts","pending","dependent","filter","skipFailed","f","resetPackage","packageName","packageStartTimes","packageEndTimes","packageDurations","validateState","issues","warnings","allPackages","ready","running","r","skippedNoChanges","duplicates","findDuplicates","missing","buildOrder","deps","now","elapsed","startTime","getTime","formatDuration","valid","generateRecoveryHints","hints","retriableFailed","type","message","actionable","suggestedCommand","permanentFailed","slice","validation","showStatus","lines","executionId","totalStartTime","toLocaleString","lastUpdated","total","Math","round","progressBar","createProgressBar","hint","icon","issue","warning","applyRecoveryOptions","getCheckpoint","nowReady","allDepsCompleted","every","arr","seen","item","checkpointManager","save","ms","seconds","floor","minutes","hours","current","width","percent","filled","empty","repeat","getLogger","loadRecoveryManager","outputDirectory","CheckpointManager","load"],"mappings":"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"}
@@ -38,13 +38,16 @@ function _define_property(obj, key, value) {
38
38
  if (!result.success) {
39
39
  throw result.error || new Error('Package execution failed');
40
40
  }
41
+ // Check if this was a "no changes" skip (result will have skippedNoChanges flag)
42
+ const skippedNoChanges = result.skippedNoChanges || false;
41
43
  return {
42
44
  success: true,
43
45
  duration,
44
46
  // Extract published version if available (from output or state)
45
47
  publishedVersion: undefined,
46
48
  stdout: undefined,
47
- stderr: undefined
49
+ stderr: undefined,
50
+ skippedNoChanges
48
51
  };
49
52
  };
50
53
  }
@@ -114,6 +117,11 @@ function _define_property(obj, key, value) {
114
117
  pool.on('package:skipped', ({ packageName, reason })=>{
115
118
  logger.warn(`⊘ Skipped: ${packageName} (${reason})`);
116
119
  });
120
+ pool.on('package:skipped-no-changes', ({ packageName })=>{
121
+ if (config.verbose || config.debug) {
122
+ logger.info(`⊘ Skipped: ${packageName} (no code changes)`);
123
+ }
124
+ });
117
125
  pool.on('checkpoint:saved', ()=>{
118
126
  if (config.debug) {
119
127
  logger.debug('💾 Checkpoint saved');
@@ -126,8 +134,9 @@ function _define_property(obj, key, value) {
126
134
  logger.info(`\nMetrics:`);
127
135
  logger.info(` Total packages: ${result.totalPackages}`);
128
136
  logger.info(` Completed: ${result.completed.length}`);
137
+ logger.info(` Skipped (no changes): ${result.skippedNoChanges.length}`);
138
+ logger.info(` Skipped (dependency failed): ${result.skipped.length}`);
129
139
  logger.info(` Failed: ${result.failed.length}`);
130
- logger.info(` Skipped: ${result.skipped.length}`);
131
140
  logger.info(` Peak concurrency: ${result.metrics.peakConcurrency}`);
132
141
  logger.info(` Average concurrency: ${result.metrics.averageConcurrency.toFixed(1)}`);
133
142
  }
@@ -136,33 +145,76 @@ function _define_property(obj, key, value) {
136
145
  /**
137
146
  * Format parallel execution result for display
138
147
  */ function formatParallelResult(result) {
148
+ var _result_metrics, _result_metrics1;
139
149
  const lines = [];
140
- if (result.success && result.skipped.length === 0) {
141
- lines.push(`\n✨ All ${result.totalPackages} packages completed successfully! 🎉\n`);
142
- } else if (result.success && result.skipped.length > 0) {
143
- lines.push(`\n⚠️ Execution completed with ${result.skipped.length} package(s) skipped\n`);
144
- } else {
145
- lines.push(`\n⚠️ Execution completed with ${result.failed.length} failure(s)\n`);
150
+ // Separator line
151
+ lines.push('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
152
+ lines.push('📊 Publish Summary');
153
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
154
+ // Detailed status breakdown by category
155
+ if (result.completed.length > 0) {
156
+ lines.push(`✅ Published (${result.completed.length}):`);
157
+ for (const pkg of result.completed){
158
+ lines.push(` - ${pkg}`);
159
+ }
160
+ lines.push('');
146
161
  }
147
- // Use ProgressFormatter for metrics
148
- const metricsLines = ProgressFormatter.createMetricsTable(result.metrics);
149
- lines.push(...metricsLines);
162
+ if (result.skippedNoChanges.length > 0) {
163
+ lines.push(`⏭️ Skipped (${result.skippedNoChanges.length}) - no code changes:`);
164
+ for (const pkg of result.skippedNoChanges){
165
+ lines.push(` - ${pkg}`);
166
+ }
167
+ lines.push('');
168
+ }
169
+ if (result.failed.length > 0) {
170
+ lines.push(`❌ Failed (${result.failed.length}):`);
171
+ for (const pkg of result.failed){
172
+ lines.push(` - ${pkg}`);
173
+ }
174
+ lines.push('');
175
+ }
176
+ if (result.skipped.length > 0) {
177
+ lines.push(`⊘ Skipped due to dependencies (${result.skipped.length}):`);
178
+ for (const pkg of result.skipped){
179
+ lines.push(` - ${pkg}`);
180
+ }
181
+ lines.push('');
182
+ }
183
+ // Summary line
184
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
185
+ // Calculate success rate
186
+ const totalProcessed = result.completed.length + result.failed.length + result.skippedNoChanges.length;
187
+ const successRate = totalProcessed > 0 ? Math.round(result.completed.length / totalProcessed * 100) : 0;
188
+ // Format elapsed time
189
+ const totalTimeMs = ((_result_metrics = result.metrics) === null || _result_metrics === void 0 ? void 0 : _result_metrics.totalTime) || 0;
190
+ const minutes = Math.floor(totalTimeMs / 60000);
191
+ const seconds = Math.floor(totalTimeMs % 60000 / 1000);
192
+ const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
193
+ lines.push(`Total time: ${timeStr}`);
194
+ lines.push(`Success rate: ${successRate}% (${result.completed.length}/${totalProcessed} packages processed)`);
195
+ if ((_result_metrics1 = result.metrics) === null || _result_metrics1 === void 0 ? void 0 : _result_metrics1.peakConcurrency) {
196
+ lines.push(`Peak concurrency: ${result.metrics.peakConcurrency} packages`);
197
+ }
198
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
150
199
  // Failed packages with formatted error summary
151
200
  if (result.failed.length > 0) {
201
+ lines.push('');
152
202
  const errorLines = ProgressFormatter.createErrorSummary(result.failed);
153
203
  lines.push(...errorLines);
204
+ // Next steps for failures
205
+ lines.push('\n📋 Next steps:');
206
+ lines.push('1. Review the errors above for each failed package');
207
+ lines.push('2. Fix the issues in the failed packages');
208
+ lines.push('3. Retry the publish command');
209
+ if (result.skipped.length > 0) {
210
+ lines.push('\nNote: Once failed packages are fixed, their dependent packages will also be published.');
211
+ }
154
212
  // Recovery guidance
155
213
  const hasRetriable = result.failed.some((f)=>f.isRetriable);
156
214
  const hasPermanent = result.failed.some((f)=>!f.isRetriable);
157
215
  const recoveryLines = ProgressFormatter.createRecoveryGuidance(hasRetriable, hasPermanent);
158
216
  lines.push(...recoveryLines);
159
217
  }
160
- // Skipped packages
161
- if (result.skipped.length > 0) {
162
- lines.push(`\n⊘ Skipped packages (due to failed dependencies):`);
163
- lines.push(` ${result.skipped.join(', ')}`);
164
- lines.push('');
165
- }
166
218
  return lines.join('\n');
167
219
  }
168
220
 
@@ -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 }>;\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 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 };\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(`\\n📦 Executing ${total} packages in parallel\\n`);\n });\n\n pool.on('package:started', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`▶️ Started: ${packageName}`);\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(`✅ Completed: ${packageName} (${result.duration}ms) [${completedCount}/${totalPackages} - ${percent}% - ${elapsed}s elapsed]`);\n } else if (config.verbose) {\n logger.info(`✅ Completed: ${packageName} [${completedCount}/${totalPackages}]`);\n } else {\n // Minimal output\n logger.info(`[${completedCount}/${totalPackages}] ✅ ${packageName}`);\n }\n });\n\n pool.on('package:failed', ({ packageName, error }) => {\n logger.error(`❌ Failed: ${packageName} - ${error.message}`);\n });\n\n pool.on('package:retrying', ({ packageName, attemptNumber }) => {\n logger.warn(`🔄 Retrying: ${packageName} (attempt ${attemptNumber})`);\n });\n\n pool.on('package:skipped', ({ packageName, reason }) => {\n logger.warn(`⊘ Skipped: ${packageName} (${reason})`);\n });\n\n pool.on('checkpoint:saved', () => {\n if (config.debug) {\n logger.debug('💾 Checkpoint saved');\n }\n });\n\n pool.on('execution:completed', ({ result }) => {\n const totalTime = Math.round((Date.now() - startTime) / 1000);\n logger.info(`\\n✨ Parallel execution completed in ${totalTime}s`);\n\n if (config.verbose || config.debug) {\n logger.info(`\\nMetrics:`);\n logger.info(` Total packages: ${result.totalPackages}`);\n logger.info(` Completed: ${result.completed.length}`);\n logger.info(` Failed: ${result.failed.length}`);\n logger.info(` Skipped: ${result.skipped.length}`);\n logger.info(` Peak concurrency: ${result.metrics.peakConcurrency}`);\n logger.info(` Average concurrency: ${result.metrics.averageConcurrency.toFixed(1)}`);\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 if (result.success && result.skipped.length === 0) {\n lines.push(`\\n✨ All ${result.totalPackages} packages completed successfully! 🎉\\n`);\n } else if (result.success && result.skipped.length > 0) {\n lines.push(`\\n⚠️ Execution completed with ${result.skipped.length} package(s) skipped\\n`);\n } else {\n lines.push(`\\n⚠️ Execution completed with ${result.failed.length} failure(s)\\n`);\n }\n\n // Use ProgressFormatter for metrics\n const metricsLines = ProgressFormatter.createMetricsTable(result.metrics);\n lines.push(...metricsLines);\n\n // Failed packages with formatted error summary\n if (result.failed.length > 0) {\n const errorLines = ProgressFormatter.createErrorSummary(result.failed);\n lines.push(...errorLines);\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 // Skipped packages\n if (result.skipped.length > 0) {\n lines.push(`\\n⊘ Skipped packages (due to failed dependencies):`);\n lines.push(` ${result.skipped.join(', ')}`);\n lines.push('');\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","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","failed","skipped","metrics","peakConcurrency","averageConcurrency","toFixed","formatParallelResult","lines","push","metricsLines","ProgressFormatter","createMetricsTable","errorLines","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 }>;\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(`\\n📦 Executing ${total} packages in parallel\\n`);\n });\n\n pool.on('package:started', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`▶️ Started: ${packageName}`);\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(`✅ Completed: ${packageName} (${result.duration}ms) [${completedCount}/${totalPackages} - ${percent}% - ${elapsed}s elapsed]`);\n } else if (config.verbose) {\n logger.info(`✅ Completed: ${packageName} [${completedCount}/${totalPackages}]`);\n } else {\n // Minimal output\n logger.info(`[${completedCount}/${totalPackages}] ✅ ${packageName}`);\n }\n });\n\n pool.on('package:failed', ({ packageName, error }) => {\n logger.error(`❌ Failed: ${packageName} - ${error.message}`);\n });\n\n pool.on('package:retrying', ({ packageName, attemptNumber }) => {\n logger.warn(`🔄 Retrying: ${packageName} (attempt ${attemptNumber})`);\n });\n\n pool.on('package:skipped', ({ packageName, reason }) => {\n logger.warn(`⊘ Skipped: ${packageName} (${reason})`);\n });\n\n pool.on('package:skipped-no-changes', ({ packageName }) => {\n if (config.verbose || config.debug) {\n logger.info(`⊘ Skipped: ${packageName} (no code changes)`);\n }\n });\n\n pool.on('checkpoint:saved', () => {\n if (config.debug) {\n logger.debug('💾 Checkpoint saved');\n }\n });\n\n pool.on('execution:completed', ({ result }) => {\n const totalTime = Math.round((Date.now() - startTime) / 1000);\n logger.info(`\\n✨ Parallel execution completed in ${totalTime}s`);\n\n if (config.verbose || config.debug) {\n logger.info(`\\nMetrics:`);\n logger.info(` Total packages: ${result.totalPackages}`);\n logger.info(` Completed: ${result.completed.length}`);\n logger.info(` Skipped (no changes): ${result.skippedNoChanges.length}`);\n logger.info(` Skipped (dependency failed): ${result.skipped.length}`);\n logger.info(` Failed: ${result.failed.length}`);\n logger.info(` Peak concurrency: ${result.metrics.peakConcurrency}`);\n logger.info(` Average concurrency: ${result.metrics.averageConcurrency.toFixed(1)}`);\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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"}
@@ -188,15 +188,35 @@
188
188
  lines.push('❌ Failure Summary:');
189
189
  lines.push('');
190
190
  for (const failure of failures){
191
+ var _failure_errorDetails, _failure_errorDetails1, _failure_errorDetails2, _failure_errorDetails3;
191
192
  lines.push(` ${failure.name}:`);
192
- lines.push(` Error: ${failure.error}`);
193
+ // Show error type if available
194
+ if ((_failure_errorDetails = failure.errorDetails) === null || _failure_errorDetails === void 0 ? void 0 : _failure_errorDetails.type) {
195
+ const typeLabel = failure.errorDetails.type.replace(/_/g, ' ').replace(/\b\w/g, (l)=>l.toUpperCase());
196
+ lines.push(` Type: ${typeLabel}`);
197
+ }
198
+ // Show context if available, otherwise show generic error
199
+ if ((_failure_errorDetails1 = failure.errorDetails) === null || _failure_errorDetails1 === void 0 ? void 0 : _failure_errorDetails1.context) {
200
+ lines.push(` Details: ${failure.errorDetails.context}`);
201
+ } else {
202
+ lines.push(` Error: ${failure.error}`);
203
+ }
204
+ // Show log file location
205
+ if ((_failure_errorDetails2 = failure.errorDetails) === null || _failure_errorDetails2 === void 0 ? void 0 : _failure_errorDetails2.logFile) {
206
+ lines.push(` Log: ${failure.errorDetails.logFile}`);
207
+ }
208
+ // Show suggestion
209
+ if ((_failure_errorDetails3 = failure.errorDetails) === null || _failure_errorDetails3 === void 0 ? void 0 : _failure_errorDetails3.suggestion) {
210
+ lines.push(` 💡 Suggestion: ${failure.errorDetails.suggestion}`);
211
+ }
212
+ // Show blocked dependents
193
213
  if (failure.dependents.length > 0) {
194
214
  const dependentStr = failure.dependents.slice(0, 3).join(', ');
195
215
  const more = failure.dependents.length > 3 ? ` +${failure.dependents.length - 3} more` : '';
196
216
  lines.push(` Blocked: ${dependentStr}${more}`);
197
217
  }
218
+ lines.push('');
198
219
  }
199
- lines.push('');
200
220
  return lines;
201
221
  }
202
222
  /**