@eldrforge/kodrdriv 1.2.27 → 1.2.29
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.
- package/AI-FRIENDLY-LOGGING-GUIDE.md +237 -0
- package/AI-LOGGING-MIGRATION-COMPLETE.md +371 -0
- package/ALREADY-PUBLISHED-PACKAGES-FIX.md +264 -0
- package/AUDIT-BRANCHES-PROGRESS-FIX.md +90 -0
- package/AUDIT-EXAMPLE-OUTPUT.md +113 -0
- package/CHECKPOINT-RECOVERY-FIX.md +450 -0
- package/LOGGING-MIGRATION-STATUS.md +186 -0
- package/PARALLEL-PUBLISH-DEBUGGING-GUIDE.md +441 -0
- package/PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md +405 -0
- package/PARALLEL-PUBLISH-LOGGING-FIXES.md +274 -0
- package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +375 -0
- package/PARALLEL_EXECUTION_FIX.md +2 -2
- package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +4 -5
- package/VERSION-AUDIT-FIX.md +333 -0
- package/dist/application.js +6 -6
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +43 -13
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +18 -18
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +32 -32
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +9 -9
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +20 -20
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +88 -89
- package/dist/commands/development.js.map +1 -1
- package/dist/commands/link.js +36 -36
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +318 -220
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +14 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +15 -17
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +5 -5
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +134 -39
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +39 -39
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/updates.js +150 -14
- package/dist/commands/updates.js.map +1 -1
- package/dist/commands/versions.js +14 -13
- package/dist/commands/versions.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/content/diff.js +5 -5
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +2 -2
- package/dist/content/files.js.map +1 -1
- package/dist/content/log.js +3 -3
- package/dist/content/log.js.map +1 -1
- package/dist/execution/CommandValidator.js +6 -6
- package/dist/execution/CommandValidator.js.map +1 -1
- package/dist/execution/DynamicTaskPool.js +129 -19
- package/dist/execution/DynamicTaskPool.js.map +1 -1
- package/dist/execution/RecoveryManager.js +99 -21
- package/dist/execution/RecoveryManager.js.map +1 -1
- package/dist/execution/TreeExecutionAdapter.js +23 -20
- package/dist/execution/TreeExecutionAdapter.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/util/checkpointManager.js +4 -4
- package/dist/util/checkpointManager.js.map +1 -1
- package/dist/util/dependencyGraph.js +2 -2
- package/dist/util/dependencyGraph.js.map +1 -1
- package/dist/util/fileLock.js +1 -1
- package/dist/util/fileLock.js.map +1 -1
- package/dist/util/general.js +148 -15
- package/dist/util/general.js.map +1 -1
- package/dist/util/interactive.js +2 -2
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +13 -13
- package/dist/util/safety.js.map +1 -1
- package/dist/utils/branchState.js +567 -0
- package/dist/utils/branchState.js.map +1 -0
- package/package.json +4 -4
- package/scripts/update-test-log-assertions.js +73 -0
|
@@ -17,11 +17,11 @@ const execute = async (runConfig)=>{
|
|
|
17
17
|
if (isDryRun) {
|
|
18
18
|
try {
|
|
19
19
|
const configPath = getUnplayableConfigPath();
|
|
20
|
-
logger.info('Would start audio device selection
|
|
21
|
-
logger.info('Would save
|
|
20
|
+
logger.info('AUDIO_SELECT_DRY_RUN: Would start audio device selection | Mode: dry-run | Purpose: Choose input device');
|
|
21
|
+
logger.info('AUDIO_SELECT_SAVE_DRY_RUN: Would save device to config | Mode: dry-run | Path: %s', configPath);
|
|
22
22
|
return 'Audio device selection completed (dry run)';
|
|
23
23
|
} catch (error) {
|
|
24
|
-
logger.warn('Error determining config path: %s', error.message);
|
|
24
|
+
logger.warn('AUDIO_SELECT_CONFIG_PATH_ERROR: Error determining config path | Error: %s | Impact: Cannot show save location', error.message);
|
|
25
25
|
return 'Audio device selection completed (dry run)';
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -32,11 +32,11 @@ const execute = async (runConfig)=>{
|
|
|
32
32
|
} catch (error) {
|
|
33
33
|
// Check if this is a home directory error
|
|
34
34
|
if (error.message && error.message.includes('Failed to determine home directory')) {
|
|
35
|
-
logger.error('
|
|
35
|
+
logger.error('AUDIO_SELECT_FAILED: Audio device selection failed | Error: %s', error.message);
|
|
36
36
|
throw new Error(`Failed to determine home directory: ${error.message}`);
|
|
37
37
|
} else {
|
|
38
38
|
const errorMessage = error.message || error.toString();
|
|
39
|
-
logger.error('
|
|
39
|
+
logger.error('AUDIO_SELECT_COMMAND_FAILED: Audio device selection command failed | Error: %s | Status: failed', errorMessage);
|
|
40
40
|
throw new Error(`Audio device selection failed: ${errorMessage}`);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-audio.js","sources":["../../src/commands/select-audio.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path';\nimport os from 'os';\nimport { getDryRunLogger } from '../logging';\nimport { Config } from '../types';\nimport { selectAndConfigureAudioDevice } from '@theunwalked/unplayable';\n\nconst getUnplayableConfigPath = (): string => {\n try {\n return path.join(os.homedir(), '.unplayable', 'audio-device.json');\n } catch (error: any) {\n throw new Error(`Failed to determine home directory: ${error.message}`);\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n if (isDryRun) {\n try {\n const configPath = getUnplayableConfigPath();\n logger.info('Would start audio device selection process');\n logger.info('Would save selected device to %s', configPath);\n return 'Audio device selection completed (dry run)';\n } catch (error: any) {\n logger.warn('Error determining config path: %s', error.message);\n return 'Audio device selection completed (dry run)';\n }\n }\n\n try {\n const preferencesDir = path.join(os.homedir(), '.unplayable');\n const result = await selectAndConfigureAudioDevice(preferencesDir, logger, runConfig.debug);\n return result;\n } catch (error: any) {\n // Check if this is a home directory error\n if (error.message && error.message.includes('Failed to determine home directory')) {\n logger.error('❌ %s', error.message);\n throw new Error(`Failed to determine home directory: ${error.message}`);\n } else {\n const errorMessage = error.message || error.toString();\n logger.error('❌ Audio device selection failed: %s', errorMessage);\n throw new Error(`Audio device selection failed: ${errorMessage}`);\n }\n }\n};\n"],"names":["getUnplayableConfigPath","path","join","os","homedir","error","Error","message","execute","runConfig","isDryRun","dryRun","logger","getDryRunLogger","configPath","info","warn","preferencesDir","result","selectAndConfigureAudioDevice","debug","includes","errorMessage","toString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-audio.js","sources":["../../src/commands/select-audio.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path';\nimport os from 'os';\nimport { getDryRunLogger } from '../logging';\nimport { Config } from '../types';\nimport { selectAndConfigureAudioDevice } from '@theunwalked/unplayable';\n\nconst getUnplayableConfigPath = (): string => {\n try {\n return path.join(os.homedir(), '.unplayable', 'audio-device.json');\n } catch (error: any) {\n throw new Error(`Failed to determine home directory: ${error.message}`);\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n if (isDryRun) {\n try {\n const configPath = getUnplayableConfigPath();\n logger.info('AUDIO_SELECT_DRY_RUN: Would start audio device selection | Mode: dry-run | Purpose: Choose input device');\n logger.info('AUDIO_SELECT_SAVE_DRY_RUN: Would save device to config | Mode: dry-run | Path: %s', configPath);\n return 'Audio device selection completed (dry run)';\n } catch (error: any) {\n logger.warn('AUDIO_SELECT_CONFIG_PATH_ERROR: Error determining config path | Error: %s | Impact: Cannot show save location', error.message);\n return 'Audio device selection completed (dry run)';\n }\n }\n\n try {\n const preferencesDir = path.join(os.homedir(), '.unplayable');\n const result = await selectAndConfigureAudioDevice(preferencesDir, logger, runConfig.debug);\n return result;\n } catch (error: any) {\n // Check if this is a home directory error\n if (error.message && error.message.includes('Failed to determine home directory')) {\n logger.error('AUDIO_SELECT_FAILED: Audio device selection failed | Error: %s', error.message);\n throw new Error(`Failed to determine home directory: ${error.message}`);\n } else {\n const errorMessage = error.message || error.toString();\n logger.error('AUDIO_SELECT_COMMAND_FAILED: Audio device selection command failed | Error: %s | Status: failed', errorMessage);\n throw new Error(`Audio device selection failed: ${errorMessage}`);\n }\n }\n};\n"],"names":["getUnplayableConfigPath","path","join","os","homedir","error","Error","message","execute","runConfig","isDryRun","dryRun","logger","getDryRunLogger","configPath","info","warn","preferencesDir","result","selectAndConfigureAudioDevice","debug","includes","errorMessage","toString"],"mappings":"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"}
|
package/dist/commands/tree.js
CHANGED
|
@@ -363,7 +363,7 @@ const extractPublishedVersion = async (packageDir, packageLogger)=>{
|
|
|
363
363
|
}
|
|
364
364
|
};
|
|
365
365
|
// Enhanced run function that can show output based on log level
|
|
366
|
-
const runWithLogging = async (command, packageLogger, options = {}, showOutput = 'none')=>{
|
|
366
|
+
const runWithLogging = async (command, packageLogger, options = {}, showOutput = 'none', logFilePath)=>{
|
|
367
367
|
const execPromise = util.promisify(exec);
|
|
368
368
|
// Ensure encoding is set to 'utf8' to get string output instead of Buffer
|
|
369
369
|
const execOptions = {
|
|
@@ -377,6 +377,24 @@ const runWithLogging = async (command, packageLogger, options = {}, showOutput =
|
|
|
377
377
|
} else if (showOutput === 'minimal') {
|
|
378
378
|
packageLogger.verbose(`Running: ${command}`);
|
|
379
379
|
}
|
|
380
|
+
// Helper to write to log file
|
|
381
|
+
const writeToLogFile = async (content)=>{
|
|
382
|
+
if (!logFilePath) return;
|
|
383
|
+
try {
|
|
384
|
+
const logDir = path__default.dirname(logFilePath);
|
|
385
|
+
await fs.mkdir(logDir, {
|
|
386
|
+
recursive: true
|
|
387
|
+
});
|
|
388
|
+
await fs.appendFile(logFilePath, content + '\n', 'utf-8');
|
|
389
|
+
} catch (err) {
|
|
390
|
+
packageLogger.warn(`Failed to write to log file ${logFilePath}: ${err.message}`);
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
// Write command to log file
|
|
394
|
+
if (logFilePath) {
|
|
395
|
+
const timestamp = new Date().toISOString();
|
|
396
|
+
await writeToLogFile(`[${timestamp}] Executing: ${command}\n`);
|
|
397
|
+
}
|
|
380
398
|
try {
|
|
381
399
|
const result = await execPromise(command, execOptions);
|
|
382
400
|
if (showOutput === 'full') {
|
|
@@ -401,6 +419,18 @@ const runWithLogging = async (command, packageLogger, options = {}, showOutput =
|
|
|
401
419
|
});
|
|
402
420
|
}
|
|
403
421
|
}
|
|
422
|
+
// Write output to log file
|
|
423
|
+
if (logFilePath) {
|
|
424
|
+
const stdout = String(result.stdout);
|
|
425
|
+
const stderr = String(result.stderr);
|
|
426
|
+
if (stdout.trim()) {
|
|
427
|
+
await writeToLogFile(`\n=== STDOUT ===\n${stdout}`);
|
|
428
|
+
}
|
|
429
|
+
if (stderr.trim()) {
|
|
430
|
+
await writeToLogFile(`\n=== STDERR ===\n${stderr}`);
|
|
431
|
+
}
|
|
432
|
+
await writeToLogFile(`\n[${new Date().toISOString()}] Command completed successfully\n`);
|
|
433
|
+
}
|
|
404
434
|
// Ensure result is properly typed as strings
|
|
405
435
|
return {
|
|
406
436
|
stdout: String(result.stdout),
|
|
@@ -426,6 +456,19 @@ const runWithLogging = async (command, packageLogger, options = {}, showOutput =
|
|
|
426
456
|
});
|
|
427
457
|
}
|
|
428
458
|
}
|
|
459
|
+
// Write error output to log file
|
|
460
|
+
if (logFilePath) {
|
|
461
|
+
await writeToLogFile(`\n[${new Date().toISOString()}] Command failed: ${error.message}`);
|
|
462
|
+
if (error.stdout) {
|
|
463
|
+
await writeToLogFile(`\n=== STDOUT ===\n${error.stdout}`);
|
|
464
|
+
}
|
|
465
|
+
if (error.stderr) {
|
|
466
|
+
await writeToLogFile(`\n=== STDERR ===\n${error.stderr}`);
|
|
467
|
+
}
|
|
468
|
+
if (error.stack) {
|
|
469
|
+
await writeToLogFile(`\n=== STACK TRACE ===\n${error.stack}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
429
472
|
throw error;
|
|
430
473
|
}
|
|
431
474
|
};
|
|
@@ -473,6 +516,15 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
|
|
|
473
516
|
const packageLogger = createPackageLogger(packageName, index + 1, total, isDryRun);
|
|
474
517
|
const packageDir = packageInfo.path;
|
|
475
518
|
const logger = getLogger();
|
|
519
|
+
// Create log file path for publish commands
|
|
520
|
+
let logFilePath;
|
|
521
|
+
if (isBuiltInCommand && commandToRun.includes('publish')) {
|
|
522
|
+
var _commandToRun_split_;
|
|
523
|
+
const outputDir = runConfig.outputDirectory || 'output/kodrdriv';
|
|
524
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').replace('T', '_').split('.')[0];
|
|
525
|
+
const commandName = ((_commandToRun_split_ = commandToRun.split(' ')[1]) === null || _commandToRun_split_ === void 0 ? void 0 : _commandToRun_split_.split(' ')[0]) || 'command';
|
|
526
|
+
logFilePath = path__default.join(packageDir, outputDir, `${commandName}_${timestamp}.log`);
|
|
527
|
+
}
|
|
476
528
|
// Determine output level based on flags
|
|
477
529
|
// For publish commands, default to full output to show OpenAI progress and other details
|
|
478
530
|
// For other commands, require --verbose or --debug for output
|
|
@@ -624,17 +676,18 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
|
|
|
624
676
|
if (builtInCommandName === 'publish') {
|
|
625
677
|
packageLogger.info(`⏰ Setting timeout of ${commandTimeoutMs / 60000} minutes for publish command`);
|
|
626
678
|
}
|
|
627
|
-
const commandPromise = runWithLogging(effectiveCommand, packageLogger, {}, showOutput);
|
|
679
|
+
const commandPromise = runWithLogging(effectiveCommand, packageLogger, {}, showOutput, logFilePath);
|
|
628
680
|
const commandTimeoutPromise = new Promise((_, reject)=>{
|
|
629
681
|
setTimeout(()=>reject(new Error(`Command timed out after ${commandTimeoutMs / 60000} minutes`)), commandTimeoutMs);
|
|
630
682
|
});
|
|
631
683
|
try {
|
|
632
|
-
const { stdout } = await Promise.race([
|
|
684
|
+
const { stdout, stderr } = await Promise.race([
|
|
633
685
|
commandPromise,
|
|
634
686
|
commandTimeoutPromise
|
|
635
687
|
]);
|
|
636
688
|
// Detect explicit skip marker from publish to avoid propagating versions
|
|
637
|
-
|
|
689
|
+
// Check both stdout (where we now write it) and stderr (winston logger output, for backward compat)
|
|
690
|
+
if (builtInCommandName === 'publish' && (stdout && stdout.includes('KODRDRIV_PUBLISH_SKIPPED') || stderr && stderr.includes('KODRDRIV_PUBLISH_SKIPPED'))) {
|
|
638
691
|
packageLogger.info('Publish skipped for this package; will not record or propagate a version.');
|
|
639
692
|
publishWasSkipped = true;
|
|
640
693
|
}
|
|
@@ -648,7 +701,7 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
|
|
|
648
701
|
}
|
|
649
702
|
} else {
|
|
650
703
|
// For custom commands, use the existing logic
|
|
651
|
-
await runWithLogging(commandToRun, packageLogger, {}, showOutput);
|
|
704
|
+
await runWithLogging(commandToRun, packageLogger, {}, showOutput, logFilePath);
|
|
652
705
|
}
|
|
653
706
|
// Track published version after successful publish (skip during dry run)
|
|
654
707
|
if (!isDryRun && isBuiltInCommand && commandToRun.includes('publish')) {
|
|
@@ -717,7 +770,8 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
|
|
|
717
770
|
}
|
|
718
771
|
return {
|
|
719
772
|
success: true,
|
|
720
|
-
skippedNoChanges: publishWasSkipped
|
|
773
|
+
skippedNoChanges: publishWasSkipped,
|
|
774
|
+
logFile: logFilePath
|
|
721
775
|
};
|
|
722
776
|
} catch (error) {
|
|
723
777
|
var _error_message;
|
|
@@ -732,7 +786,8 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
|
|
|
732
786
|
return {
|
|
733
787
|
success: false,
|
|
734
788
|
error,
|
|
735
|
-
isTimeoutError
|
|
789
|
+
isTimeoutError,
|
|
790
|
+
logFile: logFilePath
|
|
736
791
|
};
|
|
737
792
|
}
|
|
738
793
|
};
|
|
@@ -842,7 +897,7 @@ const checkTreePublishStatus = async ()=>{
|
|
|
842
897
|
}
|
|
843
898
|
};
|
|
844
899
|
const execute = async (runConfig)=>{
|
|
845
|
-
var _runConfig_tree, _runConfig_tree1, _runConfig_tree2, _runConfig_tree3, _runConfig_tree4, _runConfig_tree5, _runConfig_tree6, _runConfig_tree7, _runConfig_tree8, _runConfig_tree9, _runConfig_tree10, _runConfig_tree11, _runConfig_tree12, _runConfig_tree13, _runConfig_tree14;
|
|
900
|
+
var _runConfig_tree, _runConfig_tree1, _runConfig_tree2, _runConfig_tree3, _runConfig_tree4, _runConfig_tree5, _runConfig_tree6, _runConfig_tree7, _runConfig_tree8, _runConfig_tree9, _runConfig_tree10, _runConfig_tree11, _runConfig_tree12, _runConfig_tree13, _runConfig_tree14, _runConfig_tree15;
|
|
846
901
|
const logger = getLogger();
|
|
847
902
|
const isDryRun = runConfig.dryRun || false;
|
|
848
903
|
const isContinue = ((_runConfig_tree = runConfig.tree) === null || _runConfig_tree === void 0 ? void 0 : _runConfig_tree.continue) || false;
|
|
@@ -865,17 +920,57 @@ const execute = async (runConfig)=>{
|
|
|
865
920
|
logger.info('You can now run the tree command with --continue to resume from the next package.');
|
|
866
921
|
return `Package '${promotePackage}' promoted to completed status.`;
|
|
867
922
|
}
|
|
923
|
+
// Handle audit-branches command
|
|
924
|
+
if ((_runConfig_tree4 = runConfig.tree) === null || _runConfig_tree4 === void 0 ? void 0 : _runConfig_tree4.auditBranches) {
|
|
925
|
+
var _runConfig_tree16, _runConfig_tree17, _runConfig_publish;
|
|
926
|
+
logger.info('🔍 Auditing branch state across all packages...');
|
|
927
|
+
const directories = ((_runConfig_tree16 = runConfig.tree) === null || _runConfig_tree16 === void 0 ? void 0 : _runConfig_tree16.directories) || [
|
|
928
|
+
process.cwd()
|
|
929
|
+
];
|
|
930
|
+
const excludedPatterns = ((_runConfig_tree17 = runConfig.tree) === null || _runConfig_tree17 === void 0 ? void 0 : _runConfig_tree17.exclude) || [];
|
|
931
|
+
let allPackageJsonPaths = [];
|
|
932
|
+
for (const targetDirectory of directories){
|
|
933
|
+
const packageJsonPaths = await scanForPackageJsonFiles(targetDirectory, excludedPatterns);
|
|
934
|
+
allPackageJsonPaths = allPackageJsonPaths.concat(packageJsonPaths);
|
|
935
|
+
}
|
|
936
|
+
if (allPackageJsonPaths.length === 0) {
|
|
937
|
+
return 'No packages found';
|
|
938
|
+
}
|
|
939
|
+
const dependencyGraph = await buildDependencyGraph(allPackageJsonPaths);
|
|
940
|
+
const packages = Array.from(dependencyGraph.packages.values()).map((pkg)=>({
|
|
941
|
+
name: pkg.name,
|
|
942
|
+
path: pkg.path
|
|
943
|
+
}));
|
|
944
|
+
const { auditBranchState, formatAuditResults } = await import('../utils/branchState.js');
|
|
945
|
+
// For publish workflows, check branch consistency, merge conflicts, and existing PRs
|
|
946
|
+
// Don't pass an expected branch - let the audit find the most common branch
|
|
947
|
+
const targetBranch = ((_runConfig_publish = runConfig.publish) === null || _runConfig_publish === void 0 ? void 0 : _runConfig_publish.targetBranch) || 'main';
|
|
948
|
+
logger.info(`Checking for merge conflicts with '${targetBranch}' and existing pull requests...`);
|
|
949
|
+
const auditResult = await auditBranchState(packages, undefined, {
|
|
950
|
+
targetBranch,
|
|
951
|
+
checkPR: true,
|
|
952
|
+
checkConflicts: true
|
|
953
|
+
});
|
|
954
|
+
const formatted = formatAuditResults(auditResult);
|
|
955
|
+
logger.info('\n' + formatted);
|
|
956
|
+
if (auditResult.issuesFound > 0) {
|
|
957
|
+
logger.warn(`\n⚠️ Found issues in ${auditResult.issuesFound} package(s). Review the fixes above.`);
|
|
958
|
+
return `Branch audit complete: ${auditResult.issuesFound} package(s) need attention`;
|
|
959
|
+
}
|
|
960
|
+
logger.info(`\n✅ All ${auditResult.goodPackages} package(s) are in good state!`);
|
|
961
|
+
return `Branch audit complete: All packages OK`;
|
|
962
|
+
}
|
|
868
963
|
// Handle parallel execution recovery commands
|
|
869
964
|
const { loadRecoveryManager } = await import('../execution/RecoveryManager.js');
|
|
870
965
|
// Handle status-parallel command
|
|
871
|
-
if ((
|
|
872
|
-
var
|
|
966
|
+
if ((_runConfig_tree5 = runConfig.tree) === null || _runConfig_tree5 === void 0 ? void 0 : _runConfig_tree5.statusParallel) {
|
|
967
|
+
var _runConfig_tree18, _runConfig_tree19;
|
|
873
968
|
logger.info('📊 Checking parallel execution status...');
|
|
874
969
|
// Need to build dependency graph first
|
|
875
|
-
const directories = ((
|
|
970
|
+
const directories = ((_runConfig_tree18 = runConfig.tree) === null || _runConfig_tree18 === void 0 ? void 0 : _runConfig_tree18.directories) || [
|
|
876
971
|
process.cwd()
|
|
877
972
|
];
|
|
878
|
-
const excludedPatterns = ((
|
|
973
|
+
const excludedPatterns = ((_runConfig_tree19 = runConfig.tree) === null || _runConfig_tree19 === void 0 ? void 0 : _runConfig_tree19.exclude) || [];
|
|
879
974
|
let allPackageJsonPaths = [];
|
|
880
975
|
for (const targetDirectory of directories){
|
|
881
976
|
const packageJsonPaths = await scanForPackageJsonFiles(targetDirectory, excludedPatterns);
|
|
@@ -895,13 +990,13 @@ const execute = async (runConfig)=>{
|
|
|
895
990
|
return status;
|
|
896
991
|
}
|
|
897
992
|
// Handle validate-state command
|
|
898
|
-
if ((
|
|
899
|
-
var
|
|
993
|
+
if ((_runConfig_tree6 = runConfig.tree) === null || _runConfig_tree6 === void 0 ? void 0 : _runConfig_tree6.validateState) {
|
|
994
|
+
var _runConfig_tree20, _runConfig_tree21;
|
|
900
995
|
logger.info('🔍 Validating checkpoint state...');
|
|
901
|
-
const directories = ((
|
|
996
|
+
const directories = ((_runConfig_tree20 = runConfig.tree) === null || _runConfig_tree20 === void 0 ? void 0 : _runConfig_tree20.directories) || [
|
|
902
997
|
process.cwd()
|
|
903
998
|
];
|
|
904
|
-
const excludedPatterns = ((
|
|
999
|
+
const excludedPatterns = ((_runConfig_tree21 = runConfig.tree) === null || _runConfig_tree21 === void 0 ? void 0 : _runConfig_tree21.exclude) || [];
|
|
905
1000
|
let allPackageJsonPaths = [];
|
|
906
1001
|
for (const targetDirectory of directories){
|
|
907
1002
|
const packageJsonPaths = await scanForPackageJsonFiles(targetDirectory, excludedPatterns);
|
|
@@ -934,7 +1029,7 @@ const execute = async (runConfig)=>{
|
|
|
934
1029
|
return validation.valid ? 'Checkpoint is valid' : 'Checkpoint has issues';
|
|
935
1030
|
}
|
|
936
1031
|
// Handle parallel execution recovery options (must happen before main execution)
|
|
937
|
-
const hasRecoveryOptions = ((
|
|
1032
|
+
const hasRecoveryOptions = ((_runConfig_tree7 = runConfig.tree) === null || _runConfig_tree7 === void 0 ? void 0 : _runConfig_tree7.markCompleted) || ((_runConfig_tree8 = runConfig.tree) === null || _runConfig_tree8 === void 0 ? void 0 : _runConfig_tree8.skipPackages) || ((_runConfig_tree9 = runConfig.tree) === null || _runConfig_tree9 === void 0 ? void 0 : _runConfig_tree9.retryFailed) || ((_runConfig_tree10 = runConfig.tree) === null || _runConfig_tree10 === void 0 ? void 0 : _runConfig_tree10.skipFailed) || ((_runConfig_tree11 = runConfig.tree) === null || _runConfig_tree11 === void 0 ? void 0 : _runConfig_tree11.resetPackage);
|
|
938
1033
|
if (hasRecoveryOptions && runConfig.tree) {
|
|
939
1034
|
var _runConfig_tree_retry;
|
|
940
1035
|
logger.info('🔧 Applying recovery options...');
|
|
@@ -970,10 +1065,10 @@ const execute = async (runConfig)=>{
|
|
|
970
1065
|
}
|
|
971
1066
|
// Handle continue mode
|
|
972
1067
|
if (isContinue) {
|
|
973
|
-
var
|
|
1068
|
+
var _runConfig_tree22;
|
|
974
1069
|
// For parallel execution, the checkpoint is managed by DynamicTaskPool/CheckpointManager
|
|
975
1070
|
// For sequential execution, we use the legacy context file
|
|
976
|
-
const isParallelMode = (
|
|
1071
|
+
const isParallelMode = (_runConfig_tree22 = runConfig.tree) === null || _runConfig_tree22 === void 0 ? void 0 : _runConfig_tree22.parallel;
|
|
977
1072
|
if (!isParallelMode) {
|
|
978
1073
|
// Sequential execution: load legacy context
|
|
979
1074
|
const savedContext = await loadExecutionContext(runConfig.outputDirectory);
|
|
@@ -1017,7 +1112,7 @@ const execute = async (runConfig)=>{
|
|
|
1017
1112
|
executionContext = null;
|
|
1018
1113
|
}
|
|
1019
1114
|
// Check if we're in built-in command mode (tree command with second argument)
|
|
1020
|
-
const builtInCommand = (
|
|
1115
|
+
const builtInCommand = (_runConfig_tree12 = runConfig.tree) === null || _runConfig_tree12 === void 0 ? void 0 : _runConfig_tree12.builtInCommand;
|
|
1021
1116
|
const supportedBuiltInCommands = [
|
|
1022
1117
|
'commit',
|
|
1023
1118
|
'publish',
|
|
@@ -1034,8 +1129,8 @@ const execute = async (runConfig)=>{
|
|
|
1034
1129
|
}
|
|
1035
1130
|
// Handle run subcommand - convert space-separated scripts to npm run commands
|
|
1036
1131
|
if (builtInCommand === 'run') {
|
|
1037
|
-
var
|
|
1038
|
-
const packageArgument = (
|
|
1132
|
+
var _runConfig_tree23;
|
|
1133
|
+
const packageArgument = (_runConfig_tree23 = runConfig.tree) === null || _runConfig_tree23 === void 0 ? void 0 : _runConfig_tree23.packageArgument;
|
|
1039
1134
|
if (!packageArgument) {
|
|
1040
1135
|
throw new Error('run subcommand requires script names. Usage: kodrdriv tree run "clean build test"');
|
|
1041
1136
|
}
|
|
@@ -1058,11 +1153,11 @@ const execute = async (runConfig)=>{
|
|
|
1058
1153
|
runConfig.__scriptsToValidate = scripts;
|
|
1059
1154
|
}
|
|
1060
1155
|
// Determine the target directories - either specified or current working directory
|
|
1061
|
-
const directories = ((
|
|
1156
|
+
const directories = ((_runConfig_tree13 = runConfig.tree) === null || _runConfig_tree13 === void 0 ? void 0 : _runConfig_tree13.directories) || [
|
|
1062
1157
|
process.cwd()
|
|
1063
1158
|
];
|
|
1064
1159
|
// Handle link status subcommand
|
|
1065
|
-
if (builtInCommand === 'link' && ((
|
|
1160
|
+
if (builtInCommand === 'link' && ((_runConfig_tree14 = runConfig.tree) === null || _runConfig_tree14 === void 0 ? void 0 : _runConfig_tree14.packageArgument) === 'status') {
|
|
1066
1161
|
// For tree link status, we want to show status across all packages
|
|
1067
1162
|
logger.info(`${isDryRun ? 'DRY RUN: ' : ''}Running link status across workspace...`);
|
|
1068
1163
|
// Create a config that will be passed to the link command
|
|
@@ -1082,7 +1177,7 @@ const execute = async (runConfig)=>{
|
|
|
1082
1177
|
}
|
|
1083
1178
|
}
|
|
1084
1179
|
// Handle unlink status subcommand
|
|
1085
|
-
if (builtInCommand === 'unlink' && ((
|
|
1180
|
+
if (builtInCommand === 'unlink' && ((_runConfig_tree15 = runConfig.tree) === null || _runConfig_tree15 === void 0 ? void 0 : _runConfig_tree15.packageArgument) === 'status') {
|
|
1086
1181
|
// For tree unlink status, we want to show status across all packages
|
|
1087
1182
|
logger.info(`${isDryRun ? 'DRY RUN: ' : ''}Running unlink status across workspace...`);
|
|
1088
1183
|
// Create a config that will be passed to the unlink command
|
|
@@ -1107,9 +1202,9 @@ const execute = async (runConfig)=>{
|
|
|
1107
1202
|
logger.info(`${isDryRun ? 'DRY RUN: ' : ''}Analyzing workspaces at: ${directories.join(', ')}`);
|
|
1108
1203
|
}
|
|
1109
1204
|
try {
|
|
1110
|
-
var
|
|
1205
|
+
var _runConfig_tree24, _runConfig_tree25, _runConfig_tree26, _runConfig_tree27;
|
|
1111
1206
|
// Get exclusion patterns from config, fallback to empty array
|
|
1112
|
-
const excludedPatterns = ((
|
|
1207
|
+
const excludedPatterns = ((_runConfig_tree24 = runConfig.tree) === null || _runConfig_tree24 === void 0 ? void 0 : _runConfig_tree24.exclude) || [];
|
|
1113
1208
|
if (excludedPatterns.length > 0) {
|
|
1114
1209
|
logger.verbose(`${isDryRun ? 'DRY RUN: ' : ''}Using exclusion patterns: ${excludedPatterns.join(', ')}`);
|
|
1115
1210
|
}
|
|
@@ -1136,7 +1231,7 @@ const execute = async (runConfig)=>{
|
|
|
1136
1231
|
logger.verbose(`${isDryRun ? 'DRY RUN: ' : ''}Determining build order...`);
|
|
1137
1232
|
let buildOrder = topologicalSort(dependencyGraph);
|
|
1138
1233
|
// Handle start-from functionality if specified
|
|
1139
|
-
const startFrom = (
|
|
1234
|
+
const startFrom = (_runConfig_tree25 = runConfig.tree) === null || _runConfig_tree25 === void 0 ? void 0 : _runConfig_tree25.startFrom;
|
|
1140
1235
|
if (startFrom) {
|
|
1141
1236
|
logger.verbose(`${isDryRun ? 'DRY RUN: ' : ''}Looking for start package: ${startFrom}`);
|
|
1142
1237
|
// Resolve the actual package name (can be package name or directory name)
|
|
@@ -1193,7 +1288,7 @@ const execute = async (runConfig)=>{
|
|
|
1193
1288
|
logger.info(`${isDryRun ? 'DRY RUN: ' : ''}Starting execution from package '${startFrom}' (${buildOrder.length} of ${originalLength} packages remaining).`);
|
|
1194
1289
|
}
|
|
1195
1290
|
// Handle stop-at functionality if specified
|
|
1196
|
-
const stopAt = (
|
|
1291
|
+
const stopAt = (_runConfig_tree26 = runConfig.tree) === null || _runConfig_tree26 === void 0 ? void 0 : _runConfig_tree26.stopAt;
|
|
1197
1292
|
if (stopAt) {
|
|
1198
1293
|
logger.verbose(`${isDryRun ? 'DRY RUN: ' : ''}Looking for stop package: ${stopAt}`);
|
|
1199
1294
|
// Find the package that matches the stopAt directory name
|
|
@@ -1512,8 +1607,8 @@ const execute = async (runConfig)=>{
|
|
|
1512
1607
|
}
|
|
1513
1608
|
// Handle special "checkout" command that switches all packages to specified branch
|
|
1514
1609
|
if (builtInCommand === 'checkout') {
|
|
1515
|
-
var
|
|
1516
|
-
const targetBranch = (
|
|
1610
|
+
var _runConfig_tree28;
|
|
1611
|
+
const targetBranch = (_runConfig_tree28 = runConfig.tree) === null || _runConfig_tree28 === void 0 ? void 0 : _runConfig_tree28.packageArgument;
|
|
1517
1612
|
if (!targetBranch) {
|
|
1518
1613
|
throw new Error('checkout subcommand requires a branch name. Usage: kodrdriv tree checkout <branch-name>');
|
|
1519
1614
|
}
|
|
@@ -1692,12 +1787,12 @@ const execute = async (runConfig)=>{
|
|
|
1692
1787
|
returnOutput = `\nBuild order: ${buildOrder.join(' → ')}\n`;
|
|
1693
1788
|
}
|
|
1694
1789
|
// Execute command if provided (custom command or built-in command)
|
|
1695
|
-
const cmd = (
|
|
1790
|
+
const cmd = (_runConfig_tree27 = runConfig.tree) === null || _runConfig_tree27 === void 0 ? void 0 : _runConfig_tree27.cmd;
|
|
1696
1791
|
// Determine command to execute
|
|
1697
1792
|
let commandToRun;
|
|
1698
1793
|
let isBuiltInCommand = false;
|
|
1699
1794
|
if (builtInCommand) {
|
|
1700
|
-
var
|
|
1795
|
+
var _runConfig_tree29, _runConfig_tree30, _runConfig_tree31;
|
|
1701
1796
|
// Built-in command mode: shell out to kodrdriv subprocess
|
|
1702
1797
|
// Build command with propagated global options
|
|
1703
1798
|
const globalOptions = [];
|
|
@@ -1714,14 +1809,14 @@ const execute = async (runConfig)=>{
|
|
|
1714
1809
|
// Build the command with global options
|
|
1715
1810
|
const optionsString = globalOptions.length > 0 ? ` ${globalOptions.join(' ')}` : '';
|
|
1716
1811
|
// Add package argument for link/unlink/updates commands
|
|
1717
|
-
const packageArg = (
|
|
1812
|
+
const packageArg = (_runConfig_tree29 = runConfig.tree) === null || _runConfig_tree29 === void 0 ? void 0 : _runConfig_tree29.packageArgument;
|
|
1718
1813
|
const packageArgString = packageArg && (builtInCommand === 'link' || builtInCommand === 'unlink' || builtInCommand === 'updates') ? ` "${packageArg}"` : '';
|
|
1719
1814
|
// Add command-specific options
|
|
1720
1815
|
let commandSpecificOptions = '';
|
|
1721
|
-
if (builtInCommand === 'unlink' && ((
|
|
1816
|
+
if (builtInCommand === 'unlink' && ((_runConfig_tree30 = runConfig.tree) === null || _runConfig_tree30 === void 0 ? void 0 : _runConfig_tree30.cleanNodeModules)) {
|
|
1722
1817
|
commandSpecificOptions += ' --clean-node-modules';
|
|
1723
1818
|
}
|
|
1724
|
-
if ((builtInCommand === 'link' || builtInCommand === 'unlink') && ((
|
|
1819
|
+
if ((builtInCommand === 'link' || builtInCommand === 'unlink') && ((_runConfig_tree31 = runConfig.tree) === null || _runConfig_tree31 === void 0 ? void 0 : _runConfig_tree31.externals) && runConfig.tree.externals.length > 0) {
|
|
1725
1820
|
commandSpecificOptions += ` --externals ${runConfig.tree.externals.join(' ')}`;
|
|
1726
1821
|
}
|
|
1727
1822
|
commandToRun = `kodrdriv ${builtInCommand}${optionsString}${packageArgString}${commandSpecificOptions}`;
|
|
@@ -1731,7 +1826,7 @@ const execute = async (runConfig)=>{
|
|
|
1731
1826
|
commandToRun = cmd;
|
|
1732
1827
|
}
|
|
1733
1828
|
if (commandToRun) {
|
|
1734
|
-
var
|
|
1829
|
+
var _runConfig_tree32, _runConfig_tree33;
|
|
1735
1830
|
// Validate scripts for run command before execution
|
|
1736
1831
|
const scriptsToValidate = runConfig.__scriptsToValidate;
|
|
1737
1832
|
if (scriptsToValidate && scriptsToValidate.length > 0) {
|
|
@@ -1750,7 +1845,7 @@ const execute = async (runConfig)=>{
|
|
|
1750
1845
|
}
|
|
1751
1846
|
}
|
|
1752
1847
|
// Validate command for parallel execution if parallel mode is enabled
|
|
1753
|
-
if ((
|
|
1848
|
+
if ((_runConfig_tree32 = runConfig.tree) === null || _runConfig_tree32 === void 0 ? void 0 : _runConfig_tree32.parallel) {
|
|
1754
1849
|
const { CommandValidator } = await import('../execution/CommandValidator.js');
|
|
1755
1850
|
const validation = CommandValidator.validateForParallel(commandToRun, builtInCommand);
|
|
1756
1851
|
CommandValidator.logValidation(validation);
|
|
@@ -1801,7 +1896,7 @@ const execute = async (runConfig)=>{
|
|
|
1801
1896
|
// If continuing, start from where we left off
|
|
1802
1897
|
const startIndex = isContinue && executionContext ? executionContext.completedPackages.length : 0;
|
|
1803
1898
|
// Check if parallel execution is enabled
|
|
1804
|
-
if ((
|
|
1899
|
+
if ((_runConfig_tree33 = runConfig.tree) === null || _runConfig_tree33 === void 0 ? void 0 : _runConfig_tree33.parallel) {
|
|
1805
1900
|
var _runConfig_tree_retry1, _runConfig_tree_retry2, _runConfig_tree_retry3, _runConfig_tree_retry4;
|
|
1806
1901
|
logger.info('🚀 Using parallel execution mode');
|
|
1807
1902
|
// If dry run, show preview instead of executing
|