@eldrforge/kodrdriv 1.2.129 → 1.2.130

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,225 +0,0 @@
1
- import { DynamicTaskPool } from './DynamicTaskPool.js';
2
- import { getLogger } from '../logging.js';
3
- import { ProgressFormatter } from '../ui/ProgressFormatter.js';
4
-
5
- function _define_property(obj, key, value) {
6
- if (key in obj) {
7
- Object.defineProperty(obj, key, {
8
- value: value,
9
- enumerable: true,
10
- configurable: true,
11
- writable: true
12
- });
13
- } else {
14
- obj[key] = value;
15
- }
16
- return obj;
17
- }
18
- /**
19
- * TreeExecutionAdapter bridges DynamicTaskPool with tree.ts executePackage
20
- */ class TreeExecutionAdapter {
21
- /**
22
- * Create wrapper that adapts tree.ts executePackage to DynamicTaskPool format
23
- */ createExecutePackageWrapper() {
24
- return async (packageName, _signal)=>{
25
- const packageInfo = this.config.graph.packages.get(packageName);
26
- if (!packageInfo) {
27
- throw new Error(`Package not found: ${packageName}`);
28
- }
29
- const allPackageNames = new Set(this.config.graph.packages.keys());
30
- const isDryRun = this.config.config.dryRun || false;
31
- const isBuiltInCommand = !this.config.command.startsWith('npm') && !this.config.command.includes('&&');
32
- // Increment started count and use it as index for progress display
33
- const currentIndex = this.startedCount++;
34
- // Call tree.ts executePackage
35
- const startTime = Date.now();
36
- const result = await this.executePackageFn(packageName, packageInfo, this.config.command, this.config.config, isDryRun, currentIndex, this.config.graph.packages.size, allPackageNames, isBuiltInCommand);
37
- const duration = Date.now() - startTime;
38
- if (!result.success) {
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;
43
- }
44
- // Check if this was a "no changes" skip (result will have skippedNoChanges flag)
45
- const skippedNoChanges = result.skippedNoChanges || false;
46
- return {
47
- success: true,
48
- duration,
49
- // Extract published version if available (from output or state)
50
- publishedVersion: undefined,
51
- stdout: undefined,
52
- stderr: undefined,
53
- skippedNoChanges
54
- };
55
- };
56
- }
57
- /**
58
- * Execute parallel execution
59
- */ async execute() {
60
- return await this.pool.execute();
61
- }
62
- /**
63
- * Get the underlying task pool for event listeners
64
- */ getPool() {
65
- return this.pool;
66
- }
67
- constructor(config, executePackageFn){
68
- _define_property(this, "pool", void 0);
69
- _define_property(this, "executePackageFn", void 0);
70
- _define_property(this, "config", void 0);
71
- _define_property(this, "startedCount", 0);
72
- _define_property(this, "completedCount", 0);
73
- this.config = config;
74
- this.executePackageFn = executePackageFn;
75
- // Create custom pool that uses our execute function
76
- this.pool = new DynamicTaskPool(config);
77
- // Track completion count for progress display
78
- this.pool.on('package:completed', ()=>{
79
- this.completedCount++;
80
- });
81
- // Override the executePackage method to use tree.ts function
82
- this.pool.executePackage = this.createExecutePackageWrapper();
83
- }
84
- }
85
- /**
86
- * Create progress logger that listens to pool events
87
- */ function createParallelProgressLogger(pool, config) {
88
- const logger = getLogger();
89
- const startTime = Date.now();
90
- let completedCount = 0;
91
- let totalPackages = 0;
92
- pool.on('execution:started', ({ totalPackages: total })=>{
93
- totalPackages = total;
94
- logger.info(`\nPARALLEL_EXECUTION_STARTING: Initiating parallel package execution | Package Count: ${total} | Mode: parallel | Strategy: dependency-aware`);
95
- });
96
- pool.on('package:started', ({ packageName })=>{
97
- if (config.verbose || config.debug) {
98
- logger.info(`PACKAGE_STARTED: Package execution initiated | Package: ${packageName} | Status: running`);
99
- }
100
- });
101
- pool.on('package:completed', ({ packageName, result })=>{
102
- completedCount++;
103
- const percent = Math.round(completedCount / totalPackages * 100);
104
- const elapsed = Math.round((Date.now() - startTime) / 1000);
105
- if (config.debug) {
106
- logger.info(`PACKAGE_COMPLETED: Package execution finished successfully | Package: ${packageName} | Duration: ${result.duration}ms | Progress: ${completedCount}/${totalPackages} (${percent}%) | Elapsed: ${elapsed}s`);
107
- } else if (config.verbose) {
108
- logger.info(`PACKAGE_COMPLETED: Package execution finished | Package: ${packageName} | Progress: ${completedCount}/${totalPackages}`);
109
- } else {
110
- // Minimal output
111
- logger.info(`PROGRESS: [${completedCount}/${totalPackages}] Package completed: ${packageName}`);
112
- }
113
- });
114
- pool.on('package:failed', ({ packageName, error })=>{
115
- logger.error(`PACKAGE_FAILED: Package execution failed | Package: ${packageName} | Error: ${error.message} | Status: error`);
116
- });
117
- pool.on('package:retrying', ({ packageName, attemptNumber })=>{
118
- logger.warn(`PACKAGE_RETRYING: Retrying package execution | Package: ${packageName} | Attempt: ${attemptNumber} | Status: retrying`);
119
- });
120
- pool.on('package:skipped', ({ packageName, reason })=>{
121
- logger.warn(`PACKAGE_SKIPPED: Package skipped due to dependency failure | Package: ${packageName} | Reason: ${reason} | Status: skipped`);
122
- });
123
- pool.on('package:skipped-no-changes', ({ packageName })=>{
124
- if (config.verbose || config.debug) {
125
- logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Reason: no-code-changes | Status: skipped`);
126
- }
127
- });
128
- pool.on('checkpoint:saved', ()=>{
129
- if (config.debug) {
130
- logger.debug('CHECKPOINT_SAVED: Execution checkpoint saved | Purpose: Recovery support | Action: State persisted to disk');
131
- }
132
- });
133
- pool.on('execution:completed', ({ result })=>{
134
- const totalTime = Math.round((Date.now() - startTime) / 1000);
135
- logger.info(`\nPARALLEL_EXECUTION_COMPLETED: Parallel execution finished | Duration: ${totalTime}s | Status: completed`);
136
- if (config.verbose || config.debug) {
137
- logger.info(`\nEXECUTION_METRICS: Performance and execution statistics:`);
138
- logger.info(` METRIC_TOTAL_PACKAGES: ${result.totalPackages}`);
139
- logger.info(` METRIC_COMPLETED: ${result.completed.length} packages successfully completed`);
140
- logger.info(` METRIC_SKIPPED_NO_CHANGES: ${result.skippedNoChanges.length} packages skipped (no changes)`);
141
- logger.info(` METRIC_SKIPPED_DEPENDENCIES: ${result.skipped.length} packages skipped (dependency failures)`);
142
- logger.info(` METRIC_FAILED: ${result.failed.length} packages failed`);
143
- logger.info(` METRIC_PEAK_CONCURRENCY: ${result.metrics.peakConcurrency} packages running simultaneously`);
144
- logger.info(` METRIC_AVG_CONCURRENCY: ${result.metrics.averageConcurrency.toFixed(1)} average concurrent packages`);
145
- }
146
- });
147
- }
148
- /**
149
- * Format parallel execution result for display
150
- */ function formatParallelResult(result) {
151
- var _result_metrics, _result_metrics1;
152
- const lines = [];
153
- // Separator line
154
- lines.push('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
155
- lines.push('📊 Publish Summary');
156
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
157
- // Detailed status breakdown by category
158
- if (result.completed.length > 0) {
159
- lines.push(`✅ Published (${result.completed.length}):`);
160
- for (const pkg of result.completed){
161
- lines.push(` - ${pkg}`);
162
- }
163
- lines.push('');
164
- }
165
- if (result.skippedNoChanges.length > 0) {
166
- lines.push(`⏭️ Skipped (${result.skippedNoChanges.length}) - no code changes:`);
167
- for (const pkg of result.skippedNoChanges){
168
- lines.push(` - ${pkg}`);
169
- }
170
- lines.push('');
171
- }
172
- if (result.failed.length > 0) {
173
- lines.push(`❌ Failed (${result.failed.length}):`);
174
- for (const pkg of result.failed){
175
- lines.push(` - ${typeof pkg === 'string' ? pkg : pkg.name}`);
176
- }
177
- lines.push('');
178
- }
179
- if (result.skipped.length > 0) {
180
- lines.push(`⊘ Skipped due to dependencies (${result.skipped.length}):`);
181
- for (const pkg of result.skipped){
182
- lines.push(` - ${pkg}`);
183
- }
184
- lines.push('');
185
- }
186
- // Summary line
187
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
188
- // Calculate success rate
189
- const totalProcessed = result.completed.length + result.failed.length + result.skippedNoChanges.length;
190
- const successRate = totalProcessed > 0 ? Math.round(result.completed.length / totalProcessed * 100) : 0;
191
- // Format elapsed time
192
- const totalTimeMs = ((_result_metrics = result.metrics) === null || _result_metrics === void 0 ? void 0 : _result_metrics.totalDuration) || 0;
193
- const minutes = Math.floor(totalTimeMs / 60000);
194
- const seconds = Math.floor(totalTimeMs % 60000 / 1000);
195
- const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
196
- lines.push(`Total time: ${timeStr}`);
197
- lines.push(`Success rate: ${successRate}% (${result.completed.length}/${totalProcessed} packages processed)`);
198
- if ((_result_metrics1 = result.metrics) === null || _result_metrics1 === void 0 ? void 0 : _result_metrics1.peakConcurrency) {
199
- lines.push(`Peak concurrency: ${result.metrics.peakConcurrency} packages`);
200
- }
201
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
202
- // Failed packages with formatted error summary
203
- if (result.failed.length > 0) {
204
- lines.push('');
205
- const errorLines = ProgressFormatter.createErrorSummary(result.failed);
206
- lines.push(...errorLines);
207
- // Next steps for failures
208
- lines.push('\n📋 Next steps:');
209
- lines.push('1. Review the errors above for each failed package');
210
- lines.push('2. Fix the issues in the failed packages');
211
- lines.push('3. Retry the publish command');
212
- if (result.skipped.length > 0) {
213
- lines.push('\nNote: Once failed packages are fixed, their dependent packages will also be published.');
214
- }
215
- // Recovery guidance
216
- const hasRetriable = result.failed.some((f)=>f.isRetriable);
217
- const hasPermanent = result.failed.some((f)=>!f.isRetriable);
218
- const recoveryLines = ProgressFormatter.createRecoveryGuidance(hasRetriable, hasPermanent);
219
- lines.push(...recoveryLines);
220
- }
221
- return lines.join('\n');
222
- }
223
-
224
- export { TreeExecutionAdapter, createParallelProgressLogger, formatParallelResult };
225
- //# sourceMappingURL=TreeExecutionAdapter.js.map
@@ -1 +0,0 @@
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,250 +0,0 @@
1
- /**
2
- * ProgressFormatter creates beautiful formatted output for parallel execution
3
- */ class ProgressFormatter {
4
- /**
5
- * Create a visual progress bar
6
- */ static createProgressBar(current, total, width = 30) {
7
- const percent = total > 0 ? current / total : 0;
8
- const filled = Math.round(width * percent);
9
- const empty = width - filled;
10
- return '█'.repeat(filled) + '░'.repeat(empty);
11
- }
12
- /**
13
- * Format duration in human-readable format
14
- */ static formatDuration(ms) {
15
- if (ms < 1000) {
16
- return `${ms}ms`;
17
- }
18
- const seconds = Math.floor(ms / 1000);
19
- const minutes = Math.floor(seconds / 60);
20
- const hours = Math.floor(minutes / 60);
21
- if (hours > 0) {
22
- return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
23
- }
24
- if (minutes > 0) {
25
- return `${minutes}m ${seconds % 60}s`;
26
- }
27
- return `${seconds}s`;
28
- }
29
- /**
30
- * Format bytes in human-readable format
31
- */ static formatBytes(bytes) {
32
- const units = [
33
- 'B',
34
- 'KB',
35
- 'MB',
36
- 'GB'
37
- ];
38
- let value = bytes;
39
- let unitIndex = 0;
40
- while(value >= 1024 && unitIndex < units.length - 1){
41
- value /= 1024;
42
- unitIndex++;
43
- }
44
- return `${value.toFixed(2)} ${units[unitIndex]}`;
45
- }
46
- /**
47
- * Format percentage
48
- */ static formatPercent(value, decimals = 1) {
49
- return `${value.toFixed(decimals)}%`;
50
- }
51
- /**
52
- * Create execution summary table
53
- */ static createSummaryTable(result) {
54
- const lines = [];
55
- lines.push('');
56
- lines.push('═══════════════════════════════════════════════');
57
- lines.push(' Parallel Execution Summary');
58
- lines.push('═══════════════════════════════════════════════');
59
- lines.push('');
60
- // Status
61
- const status = result.success ? '✅ SUCCESS' : '⚠️ PARTIAL SUCCESS';
62
- lines.push(`Status: ${status}`);
63
- lines.push('');
64
- // Package summary
65
- lines.push('📦 Package Summary:');
66
- lines.push(` Completed: ${result.completed.length}/${result.totalPackages}`);
67
- if (result.failed.length > 0) {
68
- lines.push(` Failed: ${result.failed.length}`);
69
- }
70
- if (result.skipped.length > 0) {
71
- lines.push(` Skipped: ${result.skipped.length}`);
72
- }
73
- lines.push('');
74
- // Performance metrics
75
- lines.push(...this.createMetricsTable(result.metrics));
76
- // Failed packages details
77
- if (result.failed.length > 0) {
78
- lines.push('');
79
- lines.push('❌ Failed Packages:');
80
- for (const failure of result.failed){
81
- lines.push(` • ${failure.name}`);
82
- lines.push(` Error: ${failure.error}`);
83
- if (failure.dependents.length > 0) {
84
- lines.push(` Blocked: ${failure.dependents.length} dependent(s)`);
85
- }
86
- }
87
- }
88
- lines.push('');
89
- lines.push('═══════════════════════════════════════════════');
90
- lines.push('');
91
- return lines;
92
- }
93
- /**
94
- * Create metrics table
95
- */ static createMetricsTable(metrics) {
96
- const lines = [];
97
- lines.push('⚡ Performance Metrics:');
98
- lines.push(` Total Time: ${this.formatDuration(metrics.totalDuration)}`);
99
- lines.push(` Avg Per Package: ${this.formatDuration(metrics.averagePackageDuration)}`);
100
- lines.push(` Peak Concurrency: ${metrics.peakConcurrency}`);
101
- lines.push(` Average Concurrency: ${metrics.averageConcurrency.toFixed(1)}`);
102
- if (metrics.speedupVsSequential) {
103
- lines.push(` Speedup: ${metrics.speedupVsSequential.toFixed(2)}x 🚀`);
104
- }
105
- return lines;
106
- }
107
- /**
108
- * Create compact progress indicator
109
- */ static createCompactProgress(completed, total, running) {
110
- const percent = total > 0 ? Math.round(completed / total * 100) : 0;
111
- const bar = this.createProgressBar(completed, total, 20);
112
- return `[${bar}] ${percent}% (${completed}/${total}) ${running > 0 ? `| Running: ${running}` : ''}`;
113
- }
114
- /**
115
- * Create execution timeline visualization
116
- */ static createTimeline(packageTimes, maxConcurrency) {
117
- const lines = [];
118
- lines.push('');
119
- lines.push('📊 Execution Timeline:');
120
- lines.push('');
121
- // Find time bounds
122
- let minTime = Infinity;
123
- let maxTime = 0;
124
- for (const [, times] of packageTimes){
125
- minTime = Math.min(minTime, times.start);
126
- maxTime = Math.max(maxTime, times.end);
127
- }
128
- const totalDuration = maxTime - minTime;
129
- const timelineWidth = 50;
130
- // Sort by start time
131
- const sortedPackages = Array.from(packageTimes.entries()).sort(([, a], [, b])=>a.start - b.start);
132
- for (const [pkg, times] of sortedPackages){
133
- const start = times.start - minTime;
134
- const duration = times.end - times.start;
135
- const startPos = Math.floor(start / totalDuration * timelineWidth);
136
- const barLength = Math.max(1, Math.floor(duration / totalDuration * timelineWidth));
137
- const timeline = ' '.repeat(startPos) + '█'.repeat(barLength);
138
- const durationStr = this.formatDuration(duration);
139
- lines.push(` ${pkg.padEnd(20)} │${timeline.padEnd(timelineWidth)}│ ${durationStr}`);
140
- }
141
- lines.push('');
142
- lines.push(` Total: ${this.formatDuration(totalDuration)} with max concurrency ${maxConcurrency}`);
143
- lines.push('');
144
- return lines;
145
- }
146
- /**
147
- * Create box around text
148
- */ static createBox(title, content, width = 60) {
149
- const lines = [];
150
- const topBorder = '╔' + '═'.repeat(width - 2) + '╗';
151
- const bottomBorder = '╚' + '═'.repeat(width - 2) + '╝';
152
- const titleLine = '║ ' + title.padEnd(width - 4) + ' ║';
153
- lines.push(topBorder);
154
- lines.push(titleLine);
155
- lines.push('╠' + '═'.repeat(width - 2) + '╣');
156
- for (const line of content){
157
- const paddedLine = '║ ' + line.padEnd(width - 4) + ' ║';
158
- lines.push(paddedLine);
159
- }
160
- lines.push(bottomBorder);
161
- return lines;
162
- }
163
- /**
164
- * Format speedup comparison
165
- */ static createSpeedupComparison(parallelTime, sequentialTime, concurrency) {
166
- const lines = [];
167
- const speedup = sequentialTime / parallelTime;
168
- const efficiency = speedup / concurrency * 100;
169
- const timeSaved = sequentialTime - parallelTime;
170
- lines.push('');
171
- lines.push('📈 Speedup Analysis:');
172
- lines.push(` Sequential Time: ${this.formatDuration(sequentialTime)}`);
173
- lines.push(` Parallel Time: ${this.formatDuration(parallelTime)}`);
174
- lines.push(` Speedup: ${speedup.toFixed(2)}x 🚀`);
175
- lines.push(` Efficiency: ${this.formatPercent(efficiency)}`);
176
- lines.push(` Time Saved: ${this.formatDuration(timeSaved)} ⏰`);
177
- lines.push('');
178
- return lines;
179
- }
180
- /**
181
- * Create error summary
182
- */ static createErrorSummary(failures) {
183
- const lines = [];
184
- if (failures.length === 0) {
185
- return lines;
186
- }
187
- lines.push('');
188
- lines.push('❌ Failure Summary:');
189
- lines.push('');
190
- for (const failure of failures){
191
- var _failure_errorDetails, _failure_errorDetails1, _failure_errorDetails2, _failure_errorDetails3;
192
- lines.push(` ${failure.name}:`);
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
213
- if (failure.dependents.length > 0) {
214
- const dependentStr = failure.dependents.slice(0, 3).join(', ');
215
- const more = failure.dependents.length > 3 ? ` +${failure.dependents.length - 3} more` : '';
216
- lines.push(` Blocked: ${dependentStr}${more}`);
217
- }
218
- lines.push('');
219
- }
220
- return lines;
221
- }
222
- /**
223
- * Create recovery guidance
224
- */ static createRecoveryGuidance(hasRetriable, hasPermanent) {
225
- const lines = [];
226
- lines.push('');
227
- lines.push('🔧 Recovery Options:');
228
- lines.push('');
229
- if (hasRetriable) {
230
- lines.push(' 1. Retry failed packages:');
231
- lines.push(' kodrdriv tree [command] --continue --retry-failed');
232
- lines.push('');
233
- }
234
- if (hasPermanent) {
235
- lines.push(' 2. Skip failed packages:');
236
- lines.push(' kodrdriv tree [command] --continue --skip-failed');
237
- lines.push('');
238
- }
239
- lines.push(' 3. Mark specific package as completed:');
240
- lines.push(' kodrdriv tree [command] --continue --mark-completed "directory-name"');
241
- lines.push('');
242
- lines.push(' 4. Check detailed status:');
243
- lines.push(' kodrdriv tree --status-parallel');
244
- lines.push('');
245
- return lines;
246
- }
247
- }
248
-
249
- export { ProgressFormatter };
250
- //# sourceMappingURL=ProgressFormatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgressFormatter.js","sources":["../../src/ui/ProgressFormatter.ts"],"sourcesContent":["import { ExecutionResult, ExecutionMetrics } from '../types/parallelExecution';\n\n/**\n * ProgressFormatter creates beautiful formatted output for parallel execution\n */\nexport class ProgressFormatter {\n /**\n * Create a visual progress bar\n */\n static createProgressBar(current: number, total: number, width: number = 30): string {\n const percent = total > 0 ? current / total : 0;\n const filled = Math.round(width * percent);\n const empty = width - filled;\n\n return '█'.repeat(filled) + '░'.repeat(empty);\n }\n\n /**\n * Format duration in human-readable format\n */\n static formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n\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 ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n }\n\n /**\n * Format bytes in human-readable format\n */\n static formatBytes(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB'];\n let value = bytes;\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex++;\n }\n\n return `${value.toFixed(2)} ${units[unitIndex]}`;\n }\n\n /**\n * Format percentage\n */\n static formatPercent(value: number, decimals: number = 1): string {\n return `${value.toFixed(decimals)}%`;\n }\n\n /**\n * Create execution summary table\n */\n static createSummaryTable(result: ExecutionResult): string[] {\n const lines: string[] = [];\n\n lines.push('');\n lines.push('═══════════════════════════════════════════════');\n lines.push(' Parallel Execution Summary');\n lines.push('═══════════════════════════════════════════════');\n lines.push('');\n\n // Status\n const status = result.success ? '✅ SUCCESS' : '⚠️ PARTIAL SUCCESS';\n lines.push(`Status: ${status}`);\n lines.push('');\n\n // Package summary\n lines.push('📦 Package Summary:');\n lines.push(` Completed: ${result.completed.length}/${result.totalPackages}`);\n if (result.failed.length > 0) {\n lines.push(` Failed: ${result.failed.length}`);\n }\n if (result.skipped.length > 0) {\n lines.push(` Skipped: ${result.skipped.length}`);\n }\n lines.push('');\n\n // Performance metrics\n lines.push(...this.createMetricsTable(result.metrics));\n\n // Failed packages details\n if (result.failed.length > 0) {\n lines.push('');\n lines.push('❌ Failed Packages:');\n for (const failure of result.failed) {\n lines.push(` • ${failure.name}`);\n lines.push(` Error: ${failure.error}`);\n if (failure.dependents.length > 0) {\n lines.push(` Blocked: ${failure.dependents.length} dependent(s)`);\n }\n }\n }\n\n lines.push('');\n lines.push('═══════════════════════════════════════════════');\n lines.push('');\n\n return lines;\n }\n\n /**\n * Create metrics table\n */\n static createMetricsTable(metrics: ExecutionMetrics): string[] {\n const lines: string[] = [];\n\n lines.push('⚡ Performance Metrics:');\n lines.push(` Total Time: ${this.formatDuration(metrics.totalDuration)}`);\n lines.push(` Avg Per Package: ${this.formatDuration(metrics.averagePackageDuration)}`);\n lines.push(` Peak Concurrency: ${metrics.peakConcurrency}`);\n lines.push(` Average Concurrency: ${metrics.averageConcurrency.toFixed(1)}`);\n\n if (metrics.speedupVsSequential) {\n lines.push(` Speedup: ${metrics.speedupVsSequential.toFixed(2)}x 🚀`);\n }\n\n return lines;\n }\n\n /**\n * Create compact progress indicator\n */\n static createCompactProgress(completed: number, total: number, running: number): string {\n const percent = total > 0 ? Math.round((completed / total) * 100) : 0;\n const bar = this.createProgressBar(completed, total, 20);\n\n return `[${bar}] ${percent}% (${completed}/${total}) ${running > 0 ? `| Running: ${running}` : ''}`;\n }\n\n /**\n * Create execution timeline visualization\n */\n static createTimeline(\n packageTimes: Map<string, { start: number; end: number }>,\n maxConcurrency: number\n ): string[] {\n const lines: string[] = [];\n\n lines.push('');\n lines.push('📊 Execution Timeline:');\n lines.push('');\n\n // Find time bounds\n let minTime = Infinity;\n let maxTime = 0;\n\n for (const [, times] of packageTimes) {\n minTime = Math.min(minTime, times.start);\n maxTime = Math.max(maxTime, times.end);\n }\n\n const totalDuration = maxTime - minTime;\n const timelineWidth = 50;\n\n // Sort by start time\n const sortedPackages = Array.from(packageTimes.entries())\n .sort(([, a], [, b]) => a.start - b.start);\n\n for (const [pkg, times] of sortedPackages) {\n const start = times.start - minTime;\n const duration = times.end - times.start;\n\n const startPos = Math.floor((start / totalDuration) * timelineWidth);\n const barLength = Math.max(1, Math.floor((duration / totalDuration) * timelineWidth));\n\n const timeline = ' '.repeat(startPos) + '█'.repeat(barLength);\n const durationStr = this.formatDuration(duration);\n\n lines.push(` ${pkg.padEnd(20)} │${timeline.padEnd(timelineWidth)}│ ${durationStr}`);\n }\n\n lines.push('');\n lines.push(` Total: ${this.formatDuration(totalDuration)} with max concurrency ${maxConcurrency}`);\n lines.push('');\n\n return lines;\n }\n\n /**\n * Create box around text\n */\n static createBox(title: string, content: string[], width: number = 60): string[] {\n const lines: string[] = [];\n\n const topBorder = '╔' + '═'.repeat(width - 2) + '╗';\n const bottomBorder = '╚' + '═'.repeat(width - 2) + '╝';\n const titleLine = '║ ' + title.padEnd(width - 4) + ' ║';\n\n lines.push(topBorder);\n lines.push(titleLine);\n lines.push('╠' + '═'.repeat(width - 2) + '╣');\n\n for (const line of content) {\n const paddedLine = '║ ' + line.padEnd(width - 4) + ' ║';\n lines.push(paddedLine);\n }\n\n lines.push(bottomBorder);\n\n return lines;\n }\n\n /**\n * Format speedup comparison\n */\n static createSpeedupComparison(\n parallelTime: number,\n sequentialTime: number,\n concurrency: number\n ): string[] {\n const lines: string[] = [];\n\n const speedup = sequentialTime / parallelTime;\n const efficiency = (speedup / concurrency) * 100;\n const timeSaved = sequentialTime - parallelTime;\n\n lines.push('');\n lines.push('📈 Speedup Analysis:');\n lines.push(` Sequential Time: ${this.formatDuration(sequentialTime)}`);\n lines.push(` Parallel Time: ${this.formatDuration(parallelTime)}`);\n lines.push(` Speedup: ${speedup.toFixed(2)}x 🚀`);\n lines.push(` Efficiency: ${this.formatPercent(efficiency)}`);\n lines.push(` Time Saved: ${this.formatDuration(timeSaved)} ⏰`);\n lines.push('');\n\n return lines;\n }\n\n /**\n * Create error summary\n */\n static createErrorSummary(failures: Array<{ name: string; error: string; dependents: string[]; errorDetails?: { type?: string; context?: string; logFile?: string; suggestion?: string } }>): string[] {\n const lines: string[] = [];\n\n if (failures.length === 0) {\n return lines;\n }\n\n lines.push('');\n lines.push('❌ Failure Summary:');\n lines.push('');\n\n for (const failure of failures) {\n lines.push(` ${failure.name}:`);\n\n // Show error type if available\n if (failure.errorDetails?.type) {\n const typeLabel = failure.errorDetails.type.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n lines.push(` Type: ${typeLabel}`);\n }\n\n // Show context if available, otherwise show generic error\n if (failure.errorDetails?.context) {\n lines.push(` Details: ${failure.errorDetails.context}`);\n } else {\n lines.push(` Error: ${failure.error}`);\n }\n\n // Show log file location\n if (failure.errorDetails?.logFile) {\n lines.push(` Log: ${failure.errorDetails.logFile}`);\n }\n\n // Show suggestion\n if (failure.errorDetails?.suggestion) {\n lines.push(` 💡 Suggestion: ${failure.errorDetails.suggestion}`);\n }\n\n // Show blocked dependents\n if (failure.dependents.length > 0) {\n const dependentStr = failure.dependents.slice(0, 3).join(', ');\n const more = failure.dependents.length > 3 ? ` +${failure.dependents.length - 3} more` : '';\n lines.push(` Blocked: ${dependentStr}${more}`);\n }\n\n lines.push('');\n }\n\n return lines;\n }\n\n /**\n * Create recovery guidance\n */\n static createRecoveryGuidance(hasRetriable: boolean, hasPermanent: boolean): string[] {\n const lines: string[] = [];\n\n lines.push('');\n lines.push('🔧 Recovery Options:');\n lines.push('');\n\n if (hasRetriable) {\n lines.push(' 1. Retry failed packages:');\n lines.push(' kodrdriv tree [command] --continue --retry-failed');\n lines.push('');\n }\n\n if (hasPermanent) {\n lines.push(' 2. Skip failed packages:');\n lines.push(' kodrdriv tree [command] --continue --skip-failed');\n lines.push('');\n }\n\n lines.push(' 3. Mark specific package as completed:');\n lines.push(' kodrdriv tree [command] --continue --mark-completed \"directory-name\"');\n lines.push('');\n\n lines.push(' 4. Check detailed status:');\n lines.push(' kodrdriv tree --status-parallel');\n lines.push('');\n\n return lines;\n }\n}\n"],"names":["ProgressFormatter","createProgressBar","current","total","width","percent","filled","Math","round","empty","repeat","formatDuration","ms","seconds","floor","minutes","hours","formatBytes","bytes","units","value","unitIndex","length","toFixed","formatPercent","decimals","createSummaryTable","result","lines","push","status","success","completed","totalPackages","failed","skipped","createMetricsTable","metrics","failure","name","error","dependents","totalDuration","averagePackageDuration","peakConcurrency","averageConcurrency","speedupVsSequential","createCompactProgress","running","bar","createTimeline","packageTimes","maxConcurrency","minTime","Infinity","maxTime","times","min","start","max","end","timelineWidth","sortedPackages","Array","from","entries","sort","a","b","pkg","duration","startPos","barLength","timeline","durationStr","padEnd","createBox","title","content","topBorder","bottomBorder","titleLine","line","paddedLine","createSpeedupComparison","parallelTime","sequentialTime","concurrency","speedup","efficiency","timeSaved","createErrorSummary","failures","errorDetails","type","typeLabel","replace","l","toUpperCase","context","logFile","suggestion","dependentStr","slice","join","more","createRecoveryGuidance","hasRetriable","hasPermanent"],"mappings":"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"}