@eldrforge/kodrdriv 1.2.124 → 1.2.126

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.
@@ -520,10 +520,11 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
520
520
  logFilePath = path__default.join(packageDir, outputDir, `${commandName}_${timestamp}.log`);
521
521
  }
522
522
  // Determine output level based on flags
523
- // For publish commands, default to full output to show OpenAI progress and other details
523
+ // For publish and commit commands, default to full output to show AI progress and other details
524
524
  // For other commands, require --verbose or --debug for output
525
525
  const isPublishCommand = isBuiltInCommand && commandToRun.includes('publish');
526
- let showOutput = isPublishCommand ? 'full' : 'none';
526
+ const isCommitCommand = isBuiltInCommand && commandToRun.includes('commit');
527
+ let showOutput = isPublishCommand || isCommitCommand ? 'full' : 'none';
527
528
  if (runConfig.debug) {
528
529
  showOutput = 'full';
529
530
  } else if (runConfig.verbose) {
@@ -531,8 +532,12 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
531
532
  }
532
533
  // Show package start info - always visible for progress tracking
533
534
  if (runConfig.debug) {
534
- packageLogger.debug(`Starting execution in ${packageDir}`);
535
- packageLogger.debug(`Command: ${commandToRun}`);
535
+ packageLogger.debug('MULTI_PROJECT_START: Starting package execution | Package: %s | Index: %d/%d | Path: %s | Command: %s | Context: tree execution', packageName, index + 1, total, packageDir, commandToRun);
536
+ packageLogger.debug('MULTI_PROJECT_CONTEXT: Execution details | Directory: %s | Built-in Command: %s | Dry Run: %s | Output Level: %s', packageDir, isBuiltInCommand, isDryRun, showOutput);
537
+ // Show dependencies if available
538
+ if (packageInfo.dependencies && Array.isArray(packageInfo.dependencies) && packageInfo.dependencies.length > 0) {
539
+ packageLogger.debug('MULTI_PROJECT_DEPS: Package dependencies | Package: %s | Dependencies: [%s]', packageName, packageInfo.dependencies.join(', '));
540
+ }
536
541
  } else if (runConfig.verbose) {
537
542
  packageLogger.verbose(`Starting execution in ${packageDir}`);
538
543
  } else {
@@ -791,16 +796,16 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
791
796
  const seconds = (executionDuration / 1000).toFixed(1);
792
797
  if (runConfig.debug || runConfig.verbose) {
793
798
  packageLogger.info(`⏱️ Execution time: ${seconds}s`);
794
- } else if (!isPublishCommand) {
795
- // Show timing in completion message (publish commands have their own completion message)
799
+ } else if (!isPublishCommand && !isCommitCommand) {
800
+ // Show timing in completion message (publish/commit commands have their own completion message)
796
801
  logger.info(`[${index + 1}/${total}] ${packageName}: ✅ Completed (${seconds}s)`);
797
802
  }
798
803
  } else {
799
804
  executionTimer.end(`Package ${packageName} execution`);
800
805
  if (runConfig.debug || runConfig.verbose) {
801
806
  packageLogger.info(`Command completed successfully`);
802
- } else if (!isPublishCommand) {
803
- // Basic completion info (publish commands have their own completion message)
807
+ } else if (!isPublishCommand && !isCommitCommand) {
808
+ // Basic completion info (publish/commit commands have their own completion message)
804
809
  logger.info(`[${index + 1}/${total}] ${packageName}: ✅ Completed`);
805
810
  }
806
811
  }
@@ -822,15 +827,15 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
822
827
  }
823
828
  }
824
829
  }
825
- // Show completion status (for publish commands, this supplements the timing message above)
830
+ // Show completion status (for publish/commit commands, this supplements the timing message above)
826
831
  if (runConfig.debug || runConfig.verbose) {
827
832
  if (publishWasSkipped) {
828
833
  packageLogger.info(`⊘ Skipped (no code changes)`);
829
834
  } else {
830
835
  packageLogger.info(`✅ Completed successfully`);
831
836
  }
832
- } else if (isPublishCommand) {
833
- // For publish commands, always show completion even without verbose
837
+ } else if (isPublishCommand || isCommitCommand) {
838
+ // For publish/commit commands, always show completion even without verbose
834
839
  // Include timing if available
835
840
  const timeStr = executionDuration !== undefined ? ` (${(executionDuration / 1000).toFixed(1)}s)` : '';
836
841
  if (publishWasSkipped) {
@@ -1233,6 +1238,7 @@ const execute = async (runConfig)=>{
1233
1238
  const builtInCommand = (_runConfig_tree12 = runConfig.tree) === null || _runConfig_tree12 === void 0 ? void 0 : _runConfig_tree12.builtInCommand;
1234
1239
  const supportedBuiltInCommands = [
1235
1240
  'commit',
1241
+ 'release',
1236
1242
  'publish',
1237
1243
  'link',
1238
1244
  'unlink',
@@ -1930,9 +1936,122 @@ const execute = async (runConfig)=>{
1930
1936
  const packageArgString = packageArg && (builtInCommand === 'link' || builtInCommand === 'unlink' || builtInCommand === 'updates') ? ` "${packageArg}"` : '';
1931
1937
  // Add command-specific options
1932
1938
  let commandSpecificOptions = '';
1939
+ // Commit command options
1940
+ if (builtInCommand === 'commit') {
1941
+ var _runConfig_commit, _runConfig_commit1, _runConfig_commit2, _runConfig_commit3, _runConfig_commit4, _runConfig_commit5, _runConfig_commit6, _runConfig_commit7, _runConfig_commit8, _runConfig_commit9, _runConfig_commit10, _runConfig_commit11, _runConfig_commit12, _runConfig_commit13, _runConfig_commit14, _runConfig_commit15, _runConfig_commit16;
1942
+ if ((_runConfig_commit = runConfig.commit) === null || _runConfig_commit === void 0 ? void 0 : _runConfig_commit.agentic) {
1943
+ commandSpecificOptions += ' --agentic';
1944
+ }
1945
+ if ((_runConfig_commit1 = runConfig.commit) === null || _runConfig_commit1 === void 0 ? void 0 : _runConfig_commit1.selfReflection) {
1946
+ commandSpecificOptions += ' --self-reflection';
1947
+ }
1948
+ if ((_runConfig_commit2 = runConfig.commit) === null || _runConfig_commit2 === void 0 ? void 0 : _runConfig_commit2.add) {
1949
+ commandSpecificOptions += ' --add';
1950
+ }
1951
+ if ((_runConfig_commit3 = runConfig.commit) === null || _runConfig_commit3 === void 0 ? void 0 : _runConfig_commit3.cached) {
1952
+ commandSpecificOptions += ' --cached';
1953
+ }
1954
+ if ((_runConfig_commit4 = runConfig.commit) === null || _runConfig_commit4 === void 0 ? void 0 : _runConfig_commit4.interactive) {
1955
+ commandSpecificOptions += ' --interactive';
1956
+ }
1957
+ if ((_runConfig_commit5 = runConfig.commit) === null || _runConfig_commit5 === void 0 ? void 0 : _runConfig_commit5.amend) {
1958
+ commandSpecificOptions += ' --amend';
1959
+ }
1960
+ if ((_runConfig_commit6 = runConfig.commit) === null || _runConfig_commit6 === void 0 ? void 0 : _runConfig_commit6.skipFileCheck) {
1961
+ commandSpecificOptions += ' --skip-file-check';
1962
+ }
1963
+ if ((_runConfig_commit7 = runConfig.commit) === null || _runConfig_commit7 === void 0 ? void 0 : _runConfig_commit7.maxAgenticIterations) {
1964
+ commandSpecificOptions += ` --max-agentic-iterations ${runConfig.commit.maxAgenticIterations}`;
1965
+ }
1966
+ if ((_runConfig_commit8 = runConfig.commit) === null || _runConfig_commit8 === void 0 ? void 0 : _runConfig_commit8.allowCommitSplitting) {
1967
+ commandSpecificOptions += ' --allow-commit-splitting';
1968
+ }
1969
+ if ((_runConfig_commit9 = runConfig.commit) === null || _runConfig_commit9 === void 0 ? void 0 : _runConfig_commit9.messageLimit) {
1970
+ commandSpecificOptions += ` --message-limit ${runConfig.commit.messageLimit}`;
1971
+ }
1972
+ if ((_runConfig_commit10 = runConfig.commit) === null || _runConfig_commit10 === void 0 ? void 0 : _runConfig_commit10.maxDiffBytes) {
1973
+ commandSpecificOptions += ` --max-diff-bytes ${runConfig.commit.maxDiffBytes}`;
1974
+ }
1975
+ if ((_runConfig_commit11 = runConfig.commit) === null || _runConfig_commit11 === void 0 ? void 0 : _runConfig_commit11.direction) {
1976
+ commandSpecificOptions += ` --direction "${runConfig.commit.direction}"`;
1977
+ }
1978
+ if ((_runConfig_commit12 = runConfig.commit) === null || _runConfig_commit12 === void 0 ? void 0 : _runConfig_commit12.context) {
1979
+ commandSpecificOptions += ` --context "${runConfig.commit.context}"`;
1980
+ }
1981
+ // Push option can be boolean or string (remote name)
1982
+ if ((_runConfig_commit13 = runConfig.commit) === null || _runConfig_commit13 === void 0 ? void 0 : _runConfig_commit13.push) {
1983
+ if (typeof runConfig.commit.push === 'string') {
1984
+ commandSpecificOptions += ` --push "${runConfig.commit.push}"`;
1985
+ } else {
1986
+ commandSpecificOptions += ' --push';
1987
+ }
1988
+ }
1989
+ // Model-specific options for commit
1990
+ if ((_runConfig_commit14 = runConfig.commit) === null || _runConfig_commit14 === void 0 ? void 0 : _runConfig_commit14.model) {
1991
+ commandSpecificOptions += ` --model "${runConfig.commit.model}"`;
1992
+ }
1993
+ if ((_runConfig_commit15 = runConfig.commit) === null || _runConfig_commit15 === void 0 ? void 0 : _runConfig_commit15.openaiReasoning) {
1994
+ commandSpecificOptions += ` --openai-reasoning ${runConfig.commit.openaiReasoning}`;
1995
+ }
1996
+ if ((_runConfig_commit16 = runConfig.commit) === null || _runConfig_commit16 === void 0 ? void 0 : _runConfig_commit16.openaiMaxOutputTokens) {
1997
+ commandSpecificOptions += ` --openai-max-output-tokens ${runConfig.commit.openaiMaxOutputTokens}`;
1998
+ }
1999
+ }
2000
+ // Release command options
2001
+ if (builtInCommand === 'release') {
2002
+ var _runConfig_release, _runConfig_release1, _runConfig_release2, _runConfig_release3, _runConfig_release4, _runConfig_release5, _runConfig_release6, _runConfig_release7, _runConfig_release8, _runConfig_release9, _runConfig_release10, _runConfig_release11, _runConfig_release12, _runConfig_release13, _runConfig_release14;
2003
+ if ((_runConfig_release = runConfig.release) === null || _runConfig_release === void 0 ? void 0 : _runConfig_release.agentic) {
2004
+ commandSpecificOptions += ' --agentic';
2005
+ }
2006
+ if ((_runConfig_release1 = runConfig.release) === null || _runConfig_release1 === void 0 ? void 0 : _runConfig_release1.selfReflection) {
2007
+ commandSpecificOptions += ' --self-reflection';
2008
+ }
2009
+ if ((_runConfig_release2 = runConfig.release) === null || _runConfig_release2 === void 0 ? void 0 : _runConfig_release2.maxAgenticIterations) {
2010
+ commandSpecificOptions += ` --max-agentic-iterations ${runConfig.release.maxAgenticIterations}`;
2011
+ }
2012
+ if ((_runConfig_release3 = runConfig.release) === null || _runConfig_release3 === void 0 ? void 0 : _runConfig_release3.interactive) {
2013
+ commandSpecificOptions += ' --interactive';
2014
+ }
2015
+ if ((_runConfig_release4 = runConfig.release) === null || _runConfig_release4 === void 0 ? void 0 : _runConfig_release4.from) {
2016
+ commandSpecificOptions += ` --from "${runConfig.release.from}"`;
2017
+ }
2018
+ if ((_runConfig_release5 = runConfig.release) === null || _runConfig_release5 === void 0 ? void 0 : _runConfig_release5.to) {
2019
+ commandSpecificOptions += ` --to "${runConfig.release.to}"`;
2020
+ }
2021
+ if ((_runConfig_release6 = runConfig.release) === null || _runConfig_release6 === void 0 ? void 0 : _runConfig_release6.focus) {
2022
+ commandSpecificOptions += ` --focus "${runConfig.release.focus}"`;
2023
+ }
2024
+ if ((_runConfig_release7 = runConfig.release) === null || _runConfig_release7 === void 0 ? void 0 : _runConfig_release7.context) {
2025
+ commandSpecificOptions += ` --context "${runConfig.release.context}"`;
2026
+ }
2027
+ if ((_runConfig_release8 = runConfig.release) === null || _runConfig_release8 === void 0 ? void 0 : _runConfig_release8.messageLimit) {
2028
+ commandSpecificOptions += ` --message-limit ${runConfig.release.messageLimit}`;
2029
+ }
2030
+ if ((_runConfig_release9 = runConfig.release) === null || _runConfig_release9 === void 0 ? void 0 : _runConfig_release9.maxDiffBytes) {
2031
+ commandSpecificOptions += ` --max-diff-bytes ${runConfig.release.maxDiffBytes}`;
2032
+ }
2033
+ if ((_runConfig_release10 = runConfig.release) === null || _runConfig_release10 === void 0 ? void 0 : _runConfig_release10.noMilestones) {
2034
+ commandSpecificOptions += ' --no-milestones';
2035
+ }
2036
+ if ((_runConfig_release11 = runConfig.release) === null || _runConfig_release11 === void 0 ? void 0 : _runConfig_release11.fromMain) {
2037
+ commandSpecificOptions += ' --from-main';
2038
+ }
2039
+ // Model-specific options for release
2040
+ if ((_runConfig_release12 = runConfig.release) === null || _runConfig_release12 === void 0 ? void 0 : _runConfig_release12.model) {
2041
+ commandSpecificOptions += ` --model "${runConfig.release.model}"`;
2042
+ }
2043
+ if ((_runConfig_release13 = runConfig.release) === null || _runConfig_release13 === void 0 ? void 0 : _runConfig_release13.openaiReasoning) {
2044
+ commandSpecificOptions += ` --openai-reasoning ${runConfig.release.openaiReasoning}`;
2045
+ }
2046
+ if ((_runConfig_release14 = runConfig.release) === null || _runConfig_release14 === void 0 ? void 0 : _runConfig_release14.openaiMaxOutputTokens) {
2047
+ commandSpecificOptions += ` --openai-max-output-tokens ${runConfig.release.openaiMaxOutputTokens}`;
2048
+ }
2049
+ }
2050
+ // Unlink command options
1933
2051
  if (builtInCommand === 'unlink' && ((_runConfig_tree31 = runConfig.tree) === null || _runConfig_tree31 === void 0 ? void 0 : _runConfig_tree31.cleanNodeModules)) {
1934
2052
  commandSpecificOptions += ' --clean-node-modules';
1935
2053
  }
2054
+ // Link/Unlink externals
1936
2055
  if ((builtInCommand === 'link' || builtInCommand === 'unlink') && ((_runConfig_tree32 = runConfig.tree) === null || _runConfig_tree32 === void 0 ? void 0 : _runConfig_tree32.externals) && runConfig.tree.externals.length > 0) {
1937
2056
  commandSpecificOptions += ` --externals ${runConfig.tree.externals.join(' ')}`;
1938
2057
  }
@@ -2005,6 +2124,55 @@ const execute = async (runConfig)=>{
2005
2124
  logger.info('');
2006
2125
  const executionDescription = isBuiltInCommand ? `built-in command "${builtInCommand}"` : `"${commandToRun}"`;
2007
2126
  logger.info(`${isDryRun ? 'DRY RUN: ' : ''}Executing ${executionDescription} in ${buildOrder.length} packages...`);
2127
+ // Add detailed multi-project execution context for debug mode
2128
+ if (runConfig.debug) {
2129
+ var _runConfig_tree35, _runConfig_tree36;
2130
+ logger.debug('MULTI_PROJECT_PLAN: Execution plan initialized | Total Packages: %d | Command: %s | Built-in: %s | Dry Run: %s | Parallel: %s', buildOrder.length, commandToRun, isBuiltInCommand, isDryRun, ((_runConfig_tree35 = runConfig.tree) === null || _runConfig_tree35 === void 0 ? void 0 : _runConfig_tree35.parallel) || false);
2131
+ // Log package execution order with dependencies
2132
+ logger.debug('MULTI_PROJECT_ORDER: Package execution sequence:');
2133
+ buildOrder.forEach((pkgName, idx)=>{
2134
+ const pkgInfo = dependencyGraph.packages.get(pkgName);
2135
+ if (pkgInfo) {
2136
+ const deps = Array.isArray(pkgInfo.dependencies) ? pkgInfo.dependencies : [];
2137
+ const depStr = deps.length > 0 ? ` | Dependencies: [${deps.join(', ')}]` : ' | Dependencies: none';
2138
+ logger.debug(' %d. %s%s', idx + 1, pkgName, depStr);
2139
+ }
2140
+ });
2141
+ // Log dependency levels for parallel execution understanding
2142
+ const levels = new Map();
2143
+ const calculateLevels = (pkg, visited = new Set())=>{
2144
+ if (levels.has(pkg)) return levels.get(pkg);
2145
+ if (visited.has(pkg)) return 0; // Circular dependency
2146
+ visited.add(pkg);
2147
+ const pkgInfo = dependencyGraph.packages.get(pkg);
2148
+ const deps = Array.isArray(pkgInfo === null || pkgInfo === void 0 ? void 0 : pkgInfo.dependencies) ? pkgInfo.dependencies : [];
2149
+ if (!pkgInfo || deps.length === 0) {
2150
+ levels.set(pkg, 0);
2151
+ return 0;
2152
+ }
2153
+ const maxDepLevel = Math.max(...deps.map((dep)=>calculateLevels(dep, new Set(visited))));
2154
+ const level = maxDepLevel + 1;
2155
+ levels.set(pkg, level);
2156
+ return level;
2157
+ };
2158
+ buildOrder.forEach((pkg)=>calculateLevels(pkg));
2159
+ const maxLevel = Math.max(...Array.from(levels.values()));
2160
+ logger.debug('MULTI_PROJECT_LEVELS: Dependency depth analysis | Max Depth: %d levels', maxLevel + 1);
2161
+ for(let level = 0; level <= maxLevel; level++){
2162
+ const packagesAtLevel = buildOrder.filter((pkg)=>levels.get(pkg) === level);
2163
+ logger.debug(' Level %d (%d packages): %s', level, packagesAtLevel.length, packagesAtLevel.join(', '));
2164
+ }
2165
+ if ((_runConfig_tree36 = runConfig.tree) === null || _runConfig_tree36 === void 0 ? void 0 : _runConfig_tree36.parallel) {
2166
+ var _runConfig_tree_retry1;
2167
+ const os = await import('os');
2168
+ const concurrency = runConfig.tree.maxConcurrency || os.cpus().length;
2169
+ logger.debug('MULTI_PROJECT_PARALLEL: Parallel execution configuration | Max Concurrency: %d | Retry Attempts: %d', concurrency, ((_runConfig_tree_retry1 = runConfig.tree.retry) === null || _runConfig_tree_retry1 === void 0 ? void 0 : _runConfig_tree_retry1.maxAttempts) || 3);
2170
+ }
2171
+ if (isContinue) {
2172
+ const completed = (executionContext === null || executionContext === void 0 ? void 0 : executionContext.completedPackages.length) || 0;
2173
+ logger.debug('MULTI_PROJECT_RESUME: Continuing previous execution | Completed: %d | Remaining: %d', completed, buildOrder.length - completed);
2174
+ }
2175
+ }
2008
2176
  // Show info for publish commands
2009
2177
  if (isBuiltInCommand && builtInCommand === 'publish') {
2010
2178
  logger.info('Inter-project dependencies will be automatically updated before each publish.');
@@ -2015,7 +2183,7 @@ const execute = async (runConfig)=>{
2015
2183
  const startIndex = isContinue && executionContext ? executionContext.completedPackages.length : 0;
2016
2184
  // Check if parallel execution is enabled
2017
2185
  if ((_runConfig_tree34 = runConfig.tree) === null || _runConfig_tree34 === void 0 ? void 0 : _runConfig_tree34.parallel) {
2018
- var _runConfig_tree_retry1, _runConfig_tree_retry2, _runConfig_tree_retry3, _runConfig_tree_retry4;
2186
+ var _runConfig_tree_retry2, _runConfig_tree_retry3, _runConfig_tree_retry4, _runConfig_tree_retry5;
2019
2187
  logger.info('🚀 Using parallel execution mode');
2020
2188
  // If dry run, show preview instead of executing
2021
2189
  if (isDryRun) {
@@ -2033,10 +2201,10 @@ const execute = async (runConfig)=>{
2033
2201
  config: runConfig,
2034
2202
  checkpointPath: runConfig.outputDirectory,
2035
2203
  continue: isContinue,
2036
- maxRetries: ((_runConfig_tree_retry1 = runConfig.tree.retry) === null || _runConfig_tree_retry1 === void 0 ? void 0 : _runConfig_tree_retry1.maxAttempts) || 3,
2037
- initialRetryDelay: ((_runConfig_tree_retry2 = runConfig.tree.retry) === null || _runConfig_tree_retry2 === void 0 ? void 0 : _runConfig_tree_retry2.initialDelayMs) || 5000,
2038
- maxRetryDelay: ((_runConfig_tree_retry3 = runConfig.tree.retry) === null || _runConfig_tree_retry3 === void 0 ? void 0 : _runConfig_tree_retry3.maxDelayMs) || 60000,
2039
- backoffMultiplier: ((_runConfig_tree_retry4 = runConfig.tree.retry) === null || _runConfig_tree_retry4 === void 0 ? void 0 : _runConfig_tree_retry4.backoffMultiplier) || 2
2204
+ maxRetries: ((_runConfig_tree_retry2 = runConfig.tree.retry) === null || _runConfig_tree_retry2 === void 0 ? void 0 : _runConfig_tree_retry2.maxAttempts) || 3,
2205
+ initialRetryDelay: ((_runConfig_tree_retry3 = runConfig.tree.retry) === null || _runConfig_tree_retry3 === void 0 ? void 0 : _runConfig_tree_retry3.initialDelayMs) || 5000,
2206
+ maxRetryDelay: ((_runConfig_tree_retry4 = runConfig.tree.retry) === null || _runConfig_tree_retry4 === void 0 ? void 0 : _runConfig_tree_retry4.maxDelayMs) || 60000,
2207
+ backoffMultiplier: ((_runConfig_tree_retry5 = runConfig.tree.retry) === null || _runConfig_tree_retry5 === void 0 ? void 0 : _runConfig_tree_retry5.backoffMultiplier) || 2
2040
2208
  }, executePackage);
2041
2209
  // Set up progress logging
2042
2210
  createParallelProgressLogger(adapter.getPool(), runConfig);