@eldrforge/kodrdriv 1.2.21 → 1.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/WORKFLOW-PRECHECK-IMPLEMENTATION.md +239 -0
  2. package/WORKFLOW-SKIP-SUMMARY.md +121 -0
  3. package/dist/arguments.js +2 -2
  4. package/dist/arguments.js.map +1 -1
  5. package/dist/commands/audio-commit.js +15 -6
  6. package/dist/commands/audio-commit.js.map +1 -1
  7. package/dist/commands/audio-review.js +31 -15
  8. package/dist/commands/audio-review.js.map +1 -1
  9. package/dist/commands/commit.js +30 -19
  10. package/dist/commands/commit.js.map +1 -1
  11. package/dist/commands/link.js +27 -27
  12. package/dist/commands/link.js.map +1 -1
  13. package/dist/commands/publish.js +74 -21
  14. package/dist/commands/publish.js.map +1 -1
  15. package/dist/commands/release.js +30 -17
  16. package/dist/commands/release.js.map +1 -1
  17. package/dist/commands/review.js +33 -26
  18. package/dist/commands/review.js.map +1 -1
  19. package/dist/commands/select-audio.js +4 -4
  20. package/dist/commands/select-audio.js.map +1 -1
  21. package/dist/commands/tree.js +122 -35
  22. package/dist/commands/tree.js.map +1 -1
  23. package/dist/commands/unlink.js +13 -13
  24. package/dist/commands/unlink.js.map +1 -1
  25. package/dist/commands/updates.js +21 -0
  26. package/dist/commands/updates.js.map +1 -1
  27. package/dist/commands/versions.js +5 -5
  28. package/dist/commands/versions.js.map +1 -1
  29. package/dist/constants.js +4 -4
  30. package/dist/constants.js.map +1 -1
  31. package/dist/content/files.js +4 -4
  32. package/dist/content/files.js.map +1 -1
  33. package/dist/logging.js +3 -3
  34. package/dist/logging.js.map +1 -1
  35. package/dist/util/aiAdapter.js +28 -0
  36. package/dist/util/aiAdapter.js.map +1 -0
  37. package/dist/util/general.js +5 -5
  38. package/dist/util/general.js.map +1 -1
  39. package/dist/util/interactive.js +6 -437
  40. package/dist/util/interactive.js.map +1 -1
  41. package/dist/util/loggerAdapter.js +24 -0
  42. package/dist/util/loggerAdapter.js.map +1 -0
  43. package/dist/util/performance.js +4 -4
  44. package/dist/util/performance.js.map +1 -1
  45. package/dist/util/safety.js +4 -4
  46. package/dist/util/safety.js.map +1 -1
  47. package/dist/util/storage.js +2 -2
  48. package/dist/util/storage.js.map +1 -1
  49. package/dist/util/storageAdapter.js +25 -0
  50. package/dist/util/storageAdapter.js.map +1 -0
  51. package/package.json +5 -4
  52. package/GITHUB-TOOLS-INTEGRATION.md +0 -323
  53. package/INTEGRATION-SUMMARY.md +0 -232
  54. package/TEST-STATUS.md +0 -168
  55. package/dist/prompt/commit.js +0 -76
  56. package/dist/prompt/commit.js.map +0 -1
  57. package/dist/prompt/instructions/commit.md +0 -133
  58. package/dist/prompt/instructions/release.md +0 -188
  59. package/dist/prompt/instructions/review.md +0 -169
  60. package/dist/prompt/personas/releaser.md +0 -24
  61. package/dist/prompt/personas/you.md +0 -55
  62. package/dist/prompt/release.js +0 -100
  63. package/dist/prompt/release.js.map +0 -1
  64. package/dist/prompt/review.js +0 -64
  65. package/dist/prompt/review.js.map +0 -1
  66. package/dist/util/openai.js +0 -365
  67. package/dist/util/openai.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import path__default from 'path';
3
- import os__default from 'os';
2
+ import path from 'path';
3
+ import os from 'os';
4
4
  import { getDryRunLogger } from '../logging.js';
5
5
  import { selectAndConfigureAudioDevice } from '@theunwalked/unplayable';
6
6
 
7
7
  const getUnplayableConfigPath = ()=>{
8
8
  try {
9
- return path__default.join(os__default.homedir(), '.unplayable', 'audio-device.json');
9
+ return path.join(os.homedir(), '.unplayable', 'audio-device.json');
10
10
  } catch (error) {
11
11
  throw new Error(`Failed to determine home directory: ${error.message}`);
12
12
  }
@@ -26,7 +26,7 @@ const execute = async (runConfig)=>{
26
26
  }
27
27
  }
28
28
  try {
29
- const preferencesDir = path__default.join(os__default.homedir(), '.unplayable');
29
+ const preferencesDir = path.join(os.homedir(), '.unplayable');
30
30
  const result = await selectAndConfigureAudioDevice(preferencesDir, logger, runConfig.debug);
31
31
  return result;
32
32
  } catch (error) {
@@ -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('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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import path__default from 'path';
3
- import fs__default from 'fs/promises';
2
+ import path from 'path';
3
+ import fs from 'fs/promises';
4
4
  import { exec } from 'child_process';
5
5
  import { safeJsonParse, validatePackageJson, getGloballyLinkedPackages, getGitStatusSummary, getLinkedDependencies, getLinkCompatibilityProblems, runSecure, run } from '@eldrforge/git-tools';
6
6
  import util from 'util';
@@ -11,6 +11,7 @@ import { DEFAULT_OUTPUT_DIRECTORY } from '../constants.js';
11
11
  import { execute as execute$3 } from './commit.js';
12
12
  import { execute as execute$1 } from './link.js';
13
13
  import { execute as execute$2 } from './unlink.js';
14
+ import { execute as execute$4 } from './updates.js';
14
15
 
15
16
  function _define_property(obj, key, value) {
16
17
  if (key in obj) {
@@ -96,7 +97,7 @@ const updateInterProjectDependencies = async (packageDir, publishedVersions, all
96
97
  const storage = create({
97
98
  log: packageLogger.info
98
99
  });
99
- const packageJsonPath = path__default.join(packageDir, 'package.json');
100
+ const packageJsonPath = path.join(packageDir, 'package.json');
100
101
  if (!await storage.exists(packageJsonPath)) {
101
102
  packageLogger.verbose('No package.json found, skipping dependency updates');
102
103
  return false;
@@ -152,6 +153,85 @@ const updateInterProjectDependencies = async (packageDir, publishedVersions, all
152
153
  }
153
154
  return hasChanges;
154
155
  };
156
+ // Detect scoped dependencies from package.json and run updates for them
157
+ const updateScopedDependencies = async (packageDir, packageLogger, isDryRun, runConfig)=>{
158
+ const storage = create({
159
+ log: packageLogger.info
160
+ });
161
+ const packageJsonPath = path.join(packageDir, 'package.json');
162
+ if (!await storage.exists(packageJsonPath)) {
163
+ packageLogger.verbose('No package.json found, skipping scoped dependency updates');
164
+ return false;
165
+ }
166
+ try {
167
+ var _runConfig_publish;
168
+ // Read the package.json before updates
169
+ const beforeContent = await storage.readFile(packageJsonPath, 'utf-8');
170
+ const parsed = safeJsonParse(beforeContent, packageJsonPath);
171
+ const packageJson = validatePackageJson(parsed, packageJsonPath);
172
+ // Determine which scopes to update
173
+ let scopesToUpdate;
174
+ // Check if scopedDependencyUpdates is configured
175
+ const configuredScopes = (_runConfig_publish = runConfig.publish) === null || _runConfig_publish === void 0 ? void 0 : _runConfig_publish.scopedDependencyUpdates;
176
+ if (configuredScopes !== undefined) {
177
+ // scopedDependencyUpdates is explicitly configured
178
+ if (configuredScopes.length > 0) {
179
+ // Use configured scopes
180
+ scopesToUpdate = new Set(configuredScopes);
181
+ packageLogger.verbose(`Using configured scopes: ${Array.from(scopesToUpdate).join(', ')}`);
182
+ } else {
183
+ // Empty array means explicitly disabled
184
+ packageLogger.verbose('Scoped dependency updates explicitly disabled');
185
+ return false;
186
+ }
187
+ } else {
188
+ // Not configured - use default behavior (package's own scope)
189
+ scopesToUpdate = new Set();
190
+ if (packageJson.name && packageJson.name.startsWith('@')) {
191
+ const packageScope = packageJson.name.split('/')[0]; // e.g., "@fjell/core" -> "@fjell"
192
+ scopesToUpdate.add(packageScope);
193
+ packageLogger.verbose(`No scopes configured, defaulting to package's own scope: ${packageScope}`);
194
+ } else {
195
+ packageLogger.verbose('Package is not scoped and no scopes configured, skipping scoped dependency updates');
196
+ return false;
197
+ }
198
+ }
199
+ if (scopesToUpdate.size === 0) {
200
+ packageLogger.verbose('No scopes to update, skipping updates');
201
+ return false;
202
+ }
203
+ // Run updates for each scope
204
+ for (const scope of scopesToUpdate){
205
+ packageLogger.info(`🔄 Checking for ${scope} dependency updates before publish...`);
206
+ try {
207
+ // Create a config for the updates command with the scope
208
+ const updatesConfig = {
209
+ ...runConfig,
210
+ dryRun: isDryRun,
211
+ updates: {
212
+ scope: scope
213
+ }
214
+ };
215
+ await execute$4(updatesConfig);
216
+ } catch (error) {
217
+ // Don't fail the publish if updates fails, just warn
218
+ packageLogger.warn(`Failed to update ${scope} dependencies: ${error.message}`);
219
+ }
220
+ }
221
+ // Check if package.json was modified
222
+ const afterContent = await storage.readFile(packageJsonPath, 'utf-8');
223
+ const hasChanges = beforeContent !== afterContent;
224
+ if (hasChanges) {
225
+ packageLogger.info('✅ Scoped dependencies updated successfully');
226
+ } else {
227
+ packageLogger.info('No scoped dependency updates needed');
228
+ }
229
+ return hasChanges;
230
+ } catch (error) {
231
+ packageLogger.warn(`Failed to detect scoped dependencies: ${error.message}`);
232
+ return false;
233
+ }
234
+ };
155
235
  // Get the context file path
156
236
  const getContextFilePath = (outputDirectory)=>{
157
237
  const outputDir = outputDirectory || DEFAULT_OUTPUT_DIRECTORY;
@@ -165,7 +245,7 @@ const saveExecutionContext = async (context, outputDirectory)=>{
165
245
  const contextFilePath = getContextFilePath(outputDirectory);
166
246
  try {
167
247
  // Ensure output directory exists
168
- await storage.ensureDirectory(path__default.dirname(contextFilePath));
248
+ await storage.ensureDirectory(path.dirname(contextFilePath));
169
249
  // Save context with JSON serialization that handles dates
170
250
  const contextData = {
171
251
  ...context,
@@ -269,7 +349,7 @@ const validateScripts = async (packages, scripts)=>{
269
349
  });
270
350
  logger.debug(`Validating scripts: ${scripts.join(', ')}`);
271
351
  for (const [packageName, packageInfo] of packages){
272
- const packageJsonPath = path__default.join(packageInfo.path, 'package.json');
352
+ const packageJsonPath = path.join(packageInfo.path, 'package.json');
273
353
  const missingForPackage = [];
274
354
  try {
275
355
  const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');
@@ -312,7 +392,7 @@ const extractPublishedVersion = async (packageDir, packageLogger)=>{
312
392
  const storage = create({
313
393
  log: packageLogger.info
314
394
  });
315
- const packageJsonPath = path__default.join(packageDir, 'package.json');
395
+ const packageJsonPath = path.join(packageDir, 'package.json');
316
396
  try {
317
397
  // Get package name from package.json
318
398
  const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');
@@ -466,24 +546,24 @@ const matchesPattern = (filePath, pattern)=>{
466
546
  .replace(/\?/g, '.') // ? matches any single character
467
547
  .replace(/\./g, '\\.'); // Escape literal dots
468
548
  const regex = new RegExp(`^${regexPattern}$`);
469
- return regex.test(filePath) || regex.test(path__default.basename(filePath));
549
+ return regex.test(filePath) || regex.test(path.basename(filePath));
470
550
  };
471
551
  const shouldExclude = (packageJsonPath, excludedPatterns)=>{
472
552
  if (!excludedPatterns || excludedPatterns.length === 0) {
473
553
  return false;
474
554
  }
475
555
  // Check both the full path and relative path patterns
476
- const relativePath = path__default.relative(process.cwd(), packageJsonPath);
477
- return excludedPatterns.some((pattern)=>matchesPattern(packageJsonPath, pattern) || matchesPattern(relativePath, pattern) || matchesPattern(path__default.dirname(packageJsonPath), pattern) || matchesPattern(path__default.dirname(relativePath), pattern));
556
+ const relativePath = path.relative(process.cwd(), packageJsonPath);
557
+ return excludedPatterns.some((pattern)=>matchesPattern(packageJsonPath, pattern) || matchesPattern(relativePath, pattern) || matchesPattern(path.dirname(packageJsonPath), pattern) || matchesPattern(path.dirname(relativePath), pattern));
478
558
  };
479
559
  const scanForPackageJsonFiles = async (directory, excludedPatterns = [])=>{
480
560
  const logger = getLogger();
481
561
  const packageJsonPaths = [];
482
562
  try {
483
563
  // First check if there's a package.json in the specified directory itself
484
- const directPackageJsonPath = path__default.join(directory, 'package.json');
564
+ const directPackageJsonPath = path.join(directory, 'package.json');
485
565
  try {
486
- await fs__default.access(directPackageJsonPath);
566
+ await fs.access(directPackageJsonPath);
487
567
  // Check if this package should be excluded
488
568
  if (!shouldExclude(directPackageJsonPath, excludedPatterns)) {
489
569
  packageJsonPaths.push(directPackageJsonPath);
@@ -495,15 +575,15 @@ const scanForPackageJsonFiles = async (directory, excludedPatterns = [])=>{
495
575
  // No package.json in the root of this directory, that's fine
496
576
  }
497
577
  // Then scan subdirectories for package.json files
498
- const entries = await fs__default.readdir(directory, {
578
+ const entries = await fs.readdir(directory, {
499
579
  withFileTypes: true
500
580
  });
501
581
  for (const entry of entries){
502
582
  if (entry.isDirectory()) {
503
- const subDirPath = path__default.join(directory, entry.name);
504
- const packageJsonPath = path__default.join(subDirPath, 'package.json');
583
+ const subDirPath = path.join(directory, entry.name);
584
+ const packageJsonPath = path.join(subDirPath, 'package.json');
505
585
  try {
506
- await fs__default.access(packageJsonPath);
586
+ await fs.access(packageJsonPath);
507
587
  // Check if this package should be excluded
508
588
  if (shouldExclude(packageJsonPath, excludedPatterns)) {
509
589
  logger.verbose(`Excluding package.json at: ${packageJsonPath} (matches exclusion pattern)`);
@@ -550,7 +630,7 @@ const parsePackageJson = async (packageJsonPath)=>{
550
630
  return {
551
631
  name: packageJson.name,
552
632
  version: packageJson.version || '0.0.0',
553
- path: path__default.dirname(packageJsonPath),
633
+ path: path.dirname(packageJsonPath),
554
634
  dependencies,
555
635
  localDependencies: new Set() // Will be populated later
556
636
  };
@@ -678,8 +758,8 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
678
758
  try {
679
759
  // Validate package directory exists before changing to it
680
760
  try {
681
- await fs__default.access(packageDir);
682
- const stat = await fs__default.stat(packageDir);
761
+ await fs.access(packageDir);
762
+ const stat = await fs.stat(packageDir);
683
763
  if (!stat.isDirectory()) {
684
764
  throw new Error(`Path is not a directory: ${packageDir}`);
685
765
  }
@@ -690,13 +770,22 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
690
770
  if (runConfig.debug) {
691
771
  packageLogger.debug(`Changed to directory: ${packageDir}`);
692
772
  }
693
- // Handle inter-project dependency updates for publish commands before executing (skip during dry run)
694
- if (!isDryRun && isBuiltInCommand && commandToRun.includes('publish') && publishedVersions.length > 0) {
695
- packageLogger.info('Updating inter-project dependencies based on previously published packages...');
696
- const hasUpdates = await updateInterProjectDependencies(packageDir, publishedVersions, allPackageNames, packageLogger, isDryRun);
697
- if (hasUpdates) {
773
+ // Handle dependency updates for publish commands before executing (skip during dry run)
774
+ if (!isDryRun && isBuiltInCommand && commandToRun.includes('publish')) {
775
+ let hasAnyUpdates = false;
776
+ // First, update all scoped dependencies from npm registry
777
+ const hasScopedUpdates = await updateScopedDependencies(packageDir, packageLogger, isDryRun, runConfig);
778
+ hasAnyUpdates = hasAnyUpdates || hasScopedUpdates;
779
+ // Then update inter-project dependencies based on previously published packages
780
+ if (publishedVersions.length > 0) {
781
+ packageLogger.info('Updating inter-project dependencies based on previously published packages...');
782
+ const hasInterProjectUpdates = await updateInterProjectDependencies(packageDir, publishedVersions, allPackageNames, packageLogger, isDryRun);
783
+ hasAnyUpdates = hasAnyUpdates || hasInterProjectUpdates;
784
+ }
785
+ // If either type of update occurred, commit the changes
786
+ if (hasAnyUpdates) {
698
787
  // Commit the dependency updates using kodrdriv commit
699
- packageLogger.info('Committing inter-project dependency updates...');
788
+ packageLogger.info('Committing dependency updates...');
700
789
  packageLogger.info('⏱️ This step may take a few minutes as it generates a commit message using AI...');
701
790
  // Add timeout wrapper around commit execution
702
791
  const commitTimeoutMs = 300000; // 5 minutes
@@ -718,14 +807,14 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
718
807
  commitPromise,
719
808
  timeoutPromise
720
809
  ]);
721
- packageLogger.info('✅ Inter-project dependency updates committed successfully');
810
+ packageLogger.info('✅ Dependency updates committed successfully');
722
811
  } catch (commitError) {
723
812
  if (commitError.message.includes('timed out')) {
724
813
  packageLogger.error(`❌ Commit operation timed out after ${commitTimeoutMs / 1000} seconds`);
725
814
  packageLogger.error('This usually indicates an issue with the AI service or very large changes');
726
815
  packageLogger.error('You may need to manually commit the dependency updates');
727
816
  } else {
728
- packageLogger.warn(`Failed to commit inter-project dependency updates: ${commitError.message}`);
817
+ packageLogger.warn(`Failed to commit dependency updates: ${commitError.message}`);
729
818
  }
730
819
  // Continue with publish anyway - the updates are still in place
731
820
  } finally{
@@ -733,8 +822,6 @@ const executePackage = async (packageName, packageInfo, commandToRun, runConfig,
733
822
  clearInterval(progressInterval);
734
823
  }
735
824
  }
736
- } else {
737
- packageLogger.info('No inter-project dependency updates needed');
738
825
  }
739
826
  }
740
827
  if (runConfig.debug || runConfig.verbose) {
@@ -1080,7 +1167,7 @@ const execute = async (runConfig)=>{
1080
1167
  // Resolve the actual package name (can be package name or directory name)
1081
1168
  let startPackageName = null;
1082
1169
  for (const [pkgName, pkgInfo] of dependencyGraph.packages){
1083
- const dirName = path__default.basename(pkgInfo.path);
1170
+ const dirName = path.basename(pkgInfo.path);
1084
1171
  if (dirName === startFrom || pkgName === startFrom) {
1085
1172
  startPackageName = pkgName;
1086
1173
  break;
@@ -1097,7 +1184,7 @@ const execute = async (runConfig)=>{
1097
1184
  for (const packageJsonPath of allPackageJsonPathsForCheck){
1098
1185
  try {
1099
1186
  const packageInfo = await parsePackageJson(packageJsonPath);
1100
- const dirName = path__default.basename(packageInfo.path);
1187
+ const dirName = path.basename(packageInfo.path);
1101
1188
  if (dirName === startFrom || packageInfo.name === startFrom) {
1102
1189
  // Check if this package was excluded
1103
1190
  if (shouldExclude(packageJsonPath, excludedPatterns)) {
@@ -1115,7 +1202,7 @@ const execute = async (runConfig)=>{
1115
1202
  } else {
1116
1203
  const availablePackages = buildOrder.map((name)=>{
1117
1204
  const packageInfo = dependencyGraph.packages.get(name);
1118
- return `${path__default.basename(packageInfo.path)} (${name})`;
1205
+ return `${path.basename(packageInfo.path)} (${name})`;
1119
1206
  }).join(', ');
1120
1207
  throw new Error(`Package directory '${startFrom}' not found. Available packages: ${availablePackages}`);
1121
1208
  }
@@ -1137,7 +1224,7 @@ const execute = async (runConfig)=>{
1137
1224
  // Find the package that matches the stopAt directory name
1138
1225
  const stopIndex = buildOrder.findIndex((packageName)=>{
1139
1226
  const packageInfo = dependencyGraph.packages.get(packageName);
1140
- const dirName = path__default.basename(packageInfo.path);
1227
+ const dirName = path.basename(packageInfo.path);
1141
1228
  return dirName === stopAt || packageName === stopAt;
1142
1229
  });
1143
1230
  if (stopIndex === -1) {
@@ -1151,7 +1238,7 @@ const execute = async (runConfig)=>{
1151
1238
  for (const packageJsonPath of allPackageJsonPathsForCheck){
1152
1239
  try {
1153
1240
  const packageInfo = await parsePackageJson(packageJsonPath);
1154
- const dirName = path__default.basename(packageInfo.path);
1241
+ const dirName = path.basename(packageInfo.path);
1155
1242
  if (dirName === stopAt || packageInfo.name === stopAt) {
1156
1243
  // Check if this package was excluded
1157
1244
  if (shouldExclude(packageJsonPath, excludedPatterns)) {
@@ -1169,7 +1256,7 @@ const execute = async (runConfig)=>{
1169
1256
  } else {
1170
1257
  const availablePackages = buildOrder.map((name)=>{
1171
1258
  const packageInfo = dependencyGraph.packages.get(name);
1172
- return `${path__default.basename(packageInfo.path)} (${name})`;
1259
+ return `${path.basename(packageInfo.path)} (${name})`;
1173
1260
  }).join(', ');
1174
1261
  throw new Error(`Package directory '${stopAt}' not found. Available packages: ${availablePackages}`);
1175
1262
  }
@@ -1214,7 +1301,7 @@ const execute = async (runConfig)=>{
1214
1301
  for (const [packageName, packageInfo] of allPackages){
1215
1302
  if (packageName === targetPackageName) continue;
1216
1303
  try {
1217
- const packageJsonPath = path__default.join(packageInfo.path, 'package.json');
1304
+ const packageJsonPath = path.join(packageInfo.path, 'package.json');
1218
1305
  const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');
1219
1306
  const parsed = safeJsonParse(packageJsonContent, packageJsonPath);
1220
1307
  const packageJson = validatePackageJson(parsed, packageJsonPath);