@eldrforge/kodrdriv 0.0.50 โ†’ 0.1.0

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 (61) hide show
  1. package/README.md +2 -1
  2. package/dist/application.js +5 -3
  3. package/dist/application.js.map +1 -1
  4. package/dist/arguments.js +97 -70
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +7 -7
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +13 -13
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/clean.js +2 -2
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/commit.js +301 -36
  13. package/dist/commands/commit.js.map +1 -1
  14. package/dist/commands/link.js +7 -7
  15. package/dist/commands/link.js.map +1 -1
  16. package/dist/commands/publish.js +285 -306
  17. package/dist/commands/publish.js.map +1 -1
  18. package/dist/commands/release.js +171 -14
  19. package/dist/commands/release.js.map +1 -1
  20. package/dist/commands/review.js +52 -40
  21. package/dist/commands/review.js.map +1 -1
  22. package/dist/commands/select-audio.js +4 -4
  23. package/dist/commands/select-audio.js.map +1 -1
  24. package/dist/commands/tree.js +347 -34
  25. package/dist/commands/tree.js.map +1 -1
  26. package/dist/commands/unlink.js +5 -5
  27. package/dist/commands/unlink.js.map +1 -1
  28. package/dist/constants.js +28 -9
  29. package/dist/constants.js.map +1 -1
  30. package/dist/content/diff.js +122 -1
  31. package/dist/content/diff.js.map +1 -1
  32. package/dist/content/issues.js +17 -46
  33. package/dist/content/issues.js.map +1 -1
  34. package/dist/logging.js +3 -3
  35. package/dist/logging.js.map +1 -1
  36. package/dist/prompt/commit.js +2 -2
  37. package/dist/prompt/commit.js.map +1 -1
  38. package/dist/prompt/release.js +2 -2
  39. package/dist/prompt/release.js.map +1 -1
  40. package/dist/prompt/review.js +2 -2
  41. package/dist/prompt/review.js.map +1 -1
  42. package/dist/types.js +18 -5
  43. package/dist/types.js.map +1 -1
  44. package/dist/util/child.js +60 -4
  45. package/dist/util/child.js.map +1 -1
  46. package/dist/util/general.js +149 -13
  47. package/dist/util/general.js.map +1 -1
  48. package/dist/util/github.js +12 -8
  49. package/dist/util/github.js.map +1 -1
  50. package/dist/util/interactive.js +297 -0
  51. package/dist/util/interactive.js.map +1 -0
  52. package/dist/util/openai.js +87 -8
  53. package/dist/util/openai.js.map +1 -1
  54. package/dist/util/performance.js +8 -8
  55. package/dist/util/performance.js.map +1 -1
  56. package/dist/util/safety.js +4 -4
  57. package/dist/util/safety.js.map +1 -1
  58. package/dist/util/storage.js +2 -2
  59. package/dist/util/storage.js.map +1 -1
  60. package/package.json +6 -6
  61. package/test-increment.js +0 -0
@@ -1,4 +1,4 @@
1
- import path from 'path';
1
+ import path__default from 'path';
2
2
  import { getDryRunLogger, getLogger } from '../logging.js';
3
3
  import { create } from '../util/storage.js';
4
4
  import { safeJsonParse, validateLinkBackup } from '../util/validation.js';
@@ -43,7 +43,7 @@ const findPackagesToUnlink = async (scopeRoots, storage)=>{
43
43
  return packagesToUnlink;
44
44
  };
45
45
  const readLinkBackup = async (storage)=>{
46
- const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');
46
+ const backupPath = path__default.join(process.cwd(), '.kodrdriv-link-backup.json');
47
47
  if (await storage.exists(backupPath)) {
48
48
  try {
49
49
  const content = await storage.readFile(backupPath, 'utf-8');
@@ -56,7 +56,7 @@ const readLinkBackup = async (storage)=>{
56
56
  return {};
57
57
  };
58
58
  const writeLinkBackup = async (backup, storage)=>{
59
- const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');
59
+ const backupPath = path__default.join(process.cwd(), '.kodrdriv-link-backup.json');
60
60
  if (Object.keys(backup).length === 0) {
61
61
  // Remove backup file if empty
62
62
  if (await storage.exists(backupPath)) {
@@ -367,7 +367,7 @@ const execute = async (runConfig)=>{
367
367
  // CRITICAL: Clean up package-lock.json to prevent GitHub build failures
368
368
  // The lock file may still contain file: references even after restoring package.json
369
369
  logger.info('๐Ÿงน Cleaning up package-lock.json to remove any stale file references...');
370
- const packageLockPath = path.join(process.cwd(), 'package-lock.json');
370
+ const packageLockPath = path__default.join(process.cwd(), 'package-lock.json');
371
371
  if (await storage.exists(packageLockPath)) {
372
372
  await storage.deleteFile(packageLockPath);
373
373
  logger.info('๐Ÿ—‘๏ธ Deleted package-lock.json to ensure clean state');
@@ -376,7 +376,7 @@ const execute = async (runConfig)=>{
376
376
  const cleanNodeModules = ((_runConfig_unlink3 = runConfig.unlink) === null || _runConfig_unlink3 === void 0 ? void 0 : _runConfig_unlink3.cleanNodeModules) !== false; // default to true
377
377
  if (cleanNodeModules) {
378
378
  logger.info('๐Ÿงน Cleaning up node_modules for complete fresh start...');
379
- const nodeModulesPath = path.join(process.cwd(), 'node_modules');
379
+ const nodeModulesPath = path__default.join(process.cwd(), 'node_modules');
380
380
  if (await storage.exists(nodeModulesPath)) {
381
381
  try {
382
382
  await storage.removeDirectory(nodeModulesPath);
@@ -1 +1 @@
1
- {"version":3,"file":"unlink.js","sources":["../../src/commands/unlink.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config } from '../types';\nimport { create as createStorage } from '../util/storage';\nimport { safeJsonParse, validateLinkBackup, type LinkBackup } from '../util/validation';\nimport { run } from '../util/child';\nimport {\n PerformanceTimer,\n PackageJson,\n PackageJsonLocation,\n findAllPackageJsonFiles,\n scanDirectoryForPackages,\n checkForFileDependencies\n} from '../util/performance';\nimport { smartNpmInstall } from '../util/npmOptimizations';\n\ninterface ExtendedPackageJson extends PackageJson {\n workspaces?: string[] | { packages?: string[] };\n overrides?: Record<string, any>;\n resolutions?: Record<string, any>;\n}\n\n\n\ninterface ProblematicDependency {\n name: string;\n version: string;\n type: 'file:' | 'link:' | 'relative-path' | 'workspace' | 'override' | 'resolution';\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'workspaces' | 'overrides' | 'resolutions';\n packagePath: string;\n reason: string;\n}\n\nconst EXCLUDED_DIRECTORIES = [\n 'node_modules',\n 'dist',\n 'build',\n 'coverage',\n '.git',\n '.next',\n '.nuxt',\n 'out',\n 'public',\n 'static',\n 'assets'\n];\n\n\n\nconst findPackagesToUnlink = async (scopeRoots: Record<string, string>, storage: any): Promise<string[]> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Finding packages to unlink');\n const packagesToUnlink: string[] = [];\n\n logger.silly(`Finding packages to unlink from scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // Scan all scope roots to build a comprehensive map of packages that should be unlinked\n const scopeTimer = PerformanceTimer.start(logger, 'Scanning all scope roots for packages to unlink');\n const allScopePackages = new Map<string, string>(); // packageName -> relativePath\n\n // Process all scopes in parallel for better performance\n const scopePromises = Object.entries(scopeRoots).map(async ([scope, rootDir]) => {\n logger.verbose(`Scanning scope ${scope} at root directory: ${rootDir}`);\n const scopePackages = await scanDirectoryForPackages(rootDir, storage);\n\n // Add packages from this scope to the overall map\n const scopeResults: Array<[string, string]> = [];\n for (const [packageName, packagePath] of scopePackages) {\n if (packageName.startsWith(scope)) {\n scopeResults.push([packageName, packagePath]);\n logger.debug(`Package to unlink: ${packageName} -> ${packagePath}`);\n }\n }\n return scopeResults;\n });\n\n const allScopeResults = await Promise.all(scopePromises);\n\n // Flatten results and collect package names\n for (const scopeResults of allScopeResults) {\n for (const [packageName, packagePath] of scopeResults) {\n allScopePackages.set(packageName, packagePath);\n packagesToUnlink.push(packageName);\n }\n }\n\n scopeTimer.end(`Scanned ${Object.keys(scopeRoots).length} scope roots, found ${packagesToUnlink.length} packages to unlink`);\n\n timer.end(`Found ${packagesToUnlink.length} packages to unlink`);\n return packagesToUnlink;\n};\n\nconst readLinkBackup = async (storage: any): Promise<LinkBackup> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n if (await storage.exists(backupPath)) {\n try {\n const content = await storage.readFile(backupPath, 'utf-8');\n const parsed = safeJsonParse(content, 'link backup file');\n return validateLinkBackup(parsed);\n } catch (error) {\n throw new Error(`Failed to parse link backup file: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n return {};\n};\n\nconst writeLinkBackup = async (backup: LinkBackup, storage: any): Promise<void> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n if (Object.keys(backup).length === 0) {\n // Remove backup file if empty\n if (await storage.exists(backupPath)) {\n await storage.deleteFile(backupPath);\n }\n } else {\n await storage.writeFile(backupPath, JSON.stringify(backup, null, 2), 'utf-8');\n }\n};\n\nconst restorePackageJson = async (\n packageJsonLocation: PackageJsonLocation,\n packagesToUnlink: string[],\n backup: LinkBackup,\n storage: any\n): Promise<number> => {\n const logger = getLogger();\n let restoredCount = 0;\n const { packageJson, path: packageJsonPath, relativePath } = packageJsonLocation;\n\n // Restore original versions from backup\n for (const packageName of packagesToUnlink) {\n const backupKey = `${relativePath}:${packageName}`;\n const backupEntry = backup[backupKey];\n\n if (!backupEntry) {\n logger.debug(`No backup found for ${backupKey}, skipping`);\n continue;\n }\n\n const currentDeps = (packageJson as any)[backupEntry.dependencyType];\n if (currentDeps && currentDeps[packageName]?.startsWith('file:')) {\n // Restore the original version\n currentDeps[packageName] = backupEntry.originalVersion;\n restoredCount++;\n logger.verbose(`Restored ${relativePath}/${backupEntry.dependencyType}.${packageName}: file:... -> ${backupEntry.originalVersion}`);\n\n // Remove from backup\n delete backup[backupKey];\n }\n }\n\n // NOTE: Don't write the file here - let the caller handle all modifications\n return restoredCount;\n};\n\n/**\n * Comprehensive scan for all types of problematic dependencies that could cause GitHub build failures\n */\nconst scanForProblematicDependencies = (packageJsonFiles: PackageJsonLocation[]): ProblematicDependency[] => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Scanning for problematic dependencies');\n const problematicDeps: ProblematicDependency[] = [];\n\n for (const { path: packagePath, packageJson, relativePath } of packageJsonFiles) {\n const extendedPackageJson = packageJson as ExtendedPackageJson;\n\n // Check dependencies, devDependencies, peerDependencies\n const depTypes: Array<keyof Pick<ExtendedPackageJson, 'dependencies' | 'devDependencies' | 'peerDependencies'>> = [\n 'dependencies', 'devDependencies', 'peerDependencies'\n ];\n\n for (const depType of depTypes) {\n const deps = extendedPackageJson[depType];\n if (!deps) continue;\n\n for (const [name, version] of Object.entries(deps)) {\n let problemType: ProblematicDependency['type'] | null = null;\n let reason = '';\n\n // Check for file: dependencies\n if (version.startsWith('file:')) {\n problemType = 'file:';\n reason = 'File dependencies cause build failures in CI/CD environments';\n }\n // Check for link: dependencies\n else if (version.startsWith('link:')) {\n problemType = 'link:';\n reason = 'Link dependencies are not resolvable in remote environments';\n }\n // Check for relative path patterns that could be problematic\n else if (version.includes('../') || version.includes('./') || version.startsWith('/')) {\n problemType = 'relative-path';\n reason = 'Relative path dependencies are not resolvable in different environments';\n }\n // Check for workspace protocol (used by some package managers)\n else if (version.startsWith('workspace:')) {\n problemType = 'workspace';\n reason = 'Workspace protocol dependencies require workspace configuration';\n }\n\n if (problemType) {\n problematicDeps.push({\n name,\n version,\n type: problemType,\n dependencyType: depType,\n packagePath: relativePath,\n reason\n });\n }\n }\n }\n\n // Check workspace configurations\n if (extendedPackageJson.workspaces) {\n problematicDeps.push({\n name: 'workspaces',\n version: JSON.stringify(extendedPackageJson.workspaces),\n type: 'workspace',\n dependencyType: 'workspaces',\n packagePath: relativePath,\n reason: 'Workspace configurations can cause issues when published to npm'\n });\n }\n\n // Check overrides (npm 8.3+)\n if (extendedPackageJson.overrides) {\n for (const [name, override] of Object.entries(extendedPackageJson.overrides)) {\n if (typeof override === 'string' && (override.startsWith('file:') || override.startsWith('link:') || override.includes('../'))) {\n problematicDeps.push({\n name,\n version: override,\n type: 'override',\n dependencyType: 'overrides',\n packagePath: relativePath,\n reason: 'Override configurations with local paths cause build failures'\n });\n }\n }\n }\n\n // Check resolutions (Yarn)\n if (extendedPackageJson.resolutions) {\n for (const [name, resolution] of Object.entries(extendedPackageJson.resolutions)) {\n if (typeof resolution === 'string' && (resolution.startsWith('file:') || resolution.startsWith('link:') || resolution.includes('../'))) {\n problematicDeps.push({\n name,\n version: resolution,\n type: 'resolution',\n dependencyType: 'resolutions',\n packagePath: relativePath,\n reason: 'Resolution configurations with local paths cause build failures'\n });\n }\n }\n }\n }\n\n timer.end(`Found ${problematicDeps.length} problematic dependencies`);\n return problematicDeps;\n};\n\n/**\n * Enhanced function to display problematic dependencies with detailed information\n */\nconst displayProblematicDependencies = (problematicDeps: ProblematicDependency[]): void => {\n const logger = getLogger();\n\n if (problematicDeps.length === 0) {\n logger.info('โœ… No problematic dependencies found');\n return;\n }\n\n logger.info('๐Ÿ”“ Found problematic dependencies that could cause GitHub build failures:');\n\n // Group by package path for better readability\n const grouped = problematicDeps.reduce((acc, dep) => {\n if (!acc[dep.packagePath]) {\n acc[dep.packagePath] = [];\n }\n acc[dep.packagePath].push(dep);\n return acc;\n }, {} as Record<string, ProblematicDependency[]>);\n\n for (const [packagePath, deps] of Object.entries(grouped)) {\n logger.info(` ๐Ÿ“„ ${packagePath}:`);\n for (const dep of deps) {\n logger.info(` โŒ ${dep.dependencyType}.${dep.name}: ${dep.version} (${dep.type})`);\n logger.info(` ๐Ÿ’ก ${dep.reason}`);\n }\n }\n};\n\n/**\n * Verification step to ensure no problematic dependencies remain after cleanup\n */\nconst verifyCleanup = async (packageJsonFiles: PackageJsonLocation[]): Promise<boolean> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Verifying cleanup completion');\n\n const remainingProblems = scanForProblematicDependencies(packageJsonFiles);\n\n if (remainingProblems.length === 0) {\n logger.info('โœ… Verification passed: No problematic dependencies remain');\n timer.end('Verification successful');\n return true;\n } else {\n logger.warn('โš ๏ธ Verification failed: Found remaining problematic dependencies');\n displayProblematicDependencies(remainingProblems);\n timer.end('Verification failed');\n return false;\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || runConfig.unlink?.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const overallTimer = PerformanceTimer.start(logger, 'Unlink command execution');\n const storage = createStorage({ log: logger.info });\n\n logger.info('๐Ÿ”“ Unlinking workspace packages and cleaning up problematic dependencies...');\n\n // Get configuration\n const configTimer = PerformanceTimer.start(logger, 'Reading configuration');\n const scopeRoots = runConfig.unlink?.scopeRoots || runConfig.link?.scopeRoots || {};\n const workspaceFileName = runConfig.unlink?.workspaceFile || 'pnpm-workspace.yaml';\n configTimer.end('Configuration loaded');\n\n if (Object.keys(scopeRoots).length === 0) {\n logger.info('No scope roots configured. Skipping link management.');\n overallTimer.end('Unlink command (no scope roots)');\n return 'No scope roots configured. Skipping link management.';\n }\n\n // Find all package.json files in current directory tree\n const packageJsonFiles = await findAllPackageJsonFiles(process.cwd(), storage);\n\n if (packageJsonFiles.length === 0) {\n throw new Error('No package.json files found in current directory or subdirectories.');\n }\n\n logger.info(`Found ${packageJsonFiles.length} package.json file(s) to process`);\n logger.info(`Scanning ${Object.keys(scopeRoots).length} scope root(s): ${Object.keys(scopeRoots).join(', ')}`);\n\n // Comprehensive scan for all problematic dependencies\n const problematicDeps = scanForProblematicDependencies(packageJsonFiles);\n displayProblematicDependencies(problematicDeps);\n\n // Find packages to unlink based on scope roots\n const packagesToUnlinkNames = await findPackagesToUnlink(scopeRoots, storage);\n\n if (packagesToUnlinkNames.length === 0 && problematicDeps.length === 0) {\n logger.info('โœ… No packages found matching scope roots for unlinking and no problematic dependencies detected.');\n overallTimer.end('Unlink command (nothing to clean)');\n return 'No packages found matching scope roots for unlinking and no problematic dependencies detected.';\n }\n\n logger.verbose(`Found ${packagesToUnlinkNames.length} packages that could be unlinked: ${packagesToUnlinkNames.join(', ')}`);\n\n // Read existing backup\n const backupTimer = PerformanceTimer.start(logger, 'Reading link backup');\n const backup = await readLinkBackup(storage);\n backupTimer.end('Link backup loaded');\n\n if (isDryRun) {\n logger.info('Would clean up problematic dependencies and restore original package.json dependencies');\n\n // Show what would be cleaned up\n let dryRunCount = 0;\n for (const packageName of packagesToUnlinkNames) {\n for (const { relativePath } of packageJsonFiles) {\n const backupKey = `${relativePath}:${packageName}`;\n const backupEntry = backup[backupKey];\n if (backupEntry) {\n logger.verbose(`Would restore ${relativePath}/${packageName}: file:... -> ${backupEntry.originalVersion}`);\n dryRunCount++;\n }\n }\n }\n\n // Show what problematic dependencies would be cleaned\n if (problematicDeps.length > 0) {\n logger.verbose(`Would clean up ${problematicDeps.length} problematic dependencies`);\n }\n\n overallTimer.end('Unlink command (dry run)');\n return `DRY RUN: Would unlink ${dryRunCount} dependency reference(s) and clean up ${problematicDeps.length} problematic dependencies across ${packageJsonFiles.length} package.json files`;\n } else {\n // Restore package.json files with original versions and clean up problematic dependencies\n let totalRestoredCount = 0;\n let totalCleanedCount = 0;\n\n for (const packageJsonLocation of packageJsonFiles) {\n const { packageJson, path: packageJsonPath, relativePath } = packageJsonLocation;\n let modified = false;\n\n // Restore from backup\n const restoredCount = await restorePackageJson(packageJsonLocation, packagesToUnlinkNames, backup, storage);\n totalRestoredCount += restoredCount;\n if (restoredCount > 0) modified = true;\n\n // Clean up problematic dependencies for this specific package\n const extendedPackageJson = packageJson as ExtendedPackageJson;\n\n // Remove workspace configurations\n if (extendedPackageJson.workspaces) {\n delete extendedPackageJson.workspaces;\n logger.verbose(`Removed workspace configuration from ${relativePath}`);\n modified = true;\n totalCleanedCount++;\n }\n\n // Clean overrides with problematic paths\n if (extendedPackageJson.overrides) {\n const cleanOverrides: Record<string, any> = {};\n let overridesModified = false;\n\n for (const [name, override] of Object.entries(extendedPackageJson.overrides)) {\n if (typeof override === 'string' && (override.startsWith('file:') || override.startsWith('link:') || override.includes('../'))) {\n logger.verbose(`Removed problematic override ${relativePath}/overrides.${name}: ${override}`);\n overridesModified = true;\n totalCleanedCount++;\n } else {\n cleanOverrides[name] = override;\n }\n }\n\n if (overridesModified) {\n if (Object.keys(cleanOverrides).length === 0) {\n delete extendedPackageJson.overrides;\n } else {\n extendedPackageJson.overrides = cleanOverrides;\n }\n modified = true;\n }\n }\n\n // Clean resolutions with problematic paths\n if (extendedPackageJson.resolutions) {\n const cleanResolutions: Record<string, any> = {};\n let resolutionsModified = false;\n\n for (const [name, resolution] of Object.entries(extendedPackageJson.resolutions)) {\n if (typeof resolution === 'string' && (resolution.startsWith('file:') || resolution.startsWith('link:') || resolution.includes('../'))) {\n logger.verbose(`Removed problematic resolution ${relativePath}/resolutions.${name}: ${resolution}`);\n resolutionsModified = true;\n totalCleanedCount++;\n } else {\n cleanResolutions[name] = resolution;\n }\n }\n\n if (resolutionsModified) {\n if (Object.keys(cleanResolutions).length === 0) {\n delete extendedPackageJson.resolutions;\n } else {\n extendedPackageJson.resolutions = cleanResolutions;\n }\n modified = true;\n }\n }\n\n // Save the modified package.json if any changes were made\n if (modified) {\n await storage.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n }\n }\n\n // Save updated backup (with restored items removed)\n await writeLinkBackup(backup, storage);\n\n if (totalRestoredCount === 0 && totalCleanedCount === 0) {\n logger.info('โœ… No problematic dependencies were found to clean up.');\n overallTimer.end('Unlink command (nothing to clean)');\n return 'No problematic dependencies were found to clean up.';\n }\n\n logger.info(`Cleaned up ${totalRestoredCount} linked dependencies and ${totalCleanedCount} other problematic dependencies across ${packageJsonFiles.length} package.json file(s)`);\n\n // CRITICAL: Clean up package-lock.json to prevent GitHub build failures\n // The lock file may still contain file: references even after restoring package.json\n logger.info('๐Ÿงน Cleaning up package-lock.json to remove any stale file references...');\n const packageLockPath = path.join(process.cwd(), 'package-lock.json');\n if (await storage.exists(packageLockPath)) {\n await storage.deleteFile(packageLockPath);\n logger.info('๐Ÿ—‘๏ธ Deleted package-lock.json to ensure clean state');\n }\n\n // Optionally clean up node_modules for thorough cleanup\n const cleanNodeModules = runConfig.unlink?.cleanNodeModules !== false; // default to true\n if (cleanNodeModules) {\n logger.info('๐Ÿงน Cleaning up node_modules for complete fresh start...');\n const nodeModulesPath = path.join(process.cwd(), 'node_modules');\n if (await storage.exists(nodeModulesPath)) {\n try {\n await storage.removeDirectory(nodeModulesPath);\n logger.info('๐Ÿ—‘๏ธ Deleted node_modules directory');\n } catch (error: any) {\n logger.warn(`Could not delete node_modules (${error.message}), continuing...`);\n }\n }\n }\n\n // Re-read package.json files for verification\n const updatedPackageJsonFiles = await findAllPackageJsonFiles(process.cwd(), storage);\n\n // Verification step\n const verificationPassed = await verifyCleanup(updatedPackageJsonFiles);\n\n if (!verificationPassed) {\n logger.warn('โš ๏ธ Some problematic dependencies may still remain. Please review the output above.');\n }\n\n // Rebuild dependencies with fresh install (NOT npm ci to avoid using stale lock file)\n logger.info('โณ Running fresh npm install to regenerate clean dependencies (this may take a moment)...');\n try {\n const installResult = await smartNpmInstall({\n skipIfNotNeeded: false, // Always install after unlinking changes\n preferCi: false, // NEVER use npm ci here - we need fresh npm install to regenerate lock file\n verbose: false\n });\n\n if (installResult.skipped) {\n logger.info(`โšก Dependencies were up to date (${installResult.method})`);\n } else {\n logger.info(`โœ… Dependencies rebuilt cleanly using ${installResult.method} (${installResult.duration}ms)`);\n }\n } catch (error) {\n logger.warn(`Failed to rebuild dependencies: ${error}. You may need to run 'npm install' manually.`);\n }\n\n const summary = `Successfully cleaned up ${totalRestoredCount} linked dependencies and ${totalCleanedCount} other problematic dependencies across ${packageJsonFiles.length} package.json file(s)`;\n overallTimer.end('Unlink command completed');\n return summary;\n }\n};\n"],"names":["findPackagesToUnlink","scopeRoots","storage","logger","getLogger","timer","PerformanceTimer","start","packagesToUnlink","silly","JSON","stringify","scopeTimer","allScopePackages","Map","scopePromises","Object","entries","map","scope","rootDir","verbose","scopePackages","scanDirectoryForPackages","scopeResults","packageName","packagePath","startsWith","push","debug","allScopeResults","Promise","all","set","end","keys","length","readLinkBackup","backupPath","path","join","process","cwd","exists","content","readFile","parsed","safeJsonParse","validateLinkBackup","error","Error","message","writeLinkBackup","backup","deleteFile","writeFile","restorePackageJson","packageJsonLocation","restoredCount","packageJson","packageJsonPath","relativePath","currentDeps","backupKey","backupEntry","dependencyType","originalVersion","scanForProblematicDependencies","packageJsonFiles","problematicDeps","extendedPackageJson","depTypes","depType","deps","name","version","problemType","reason","includes","type","workspaces","overrides","override","resolutions","resolution","displayProblematicDependencies","info","grouped","reduce","acc","dep","verifyCleanup","remainingProblems","warn","execute","runConfig","isDryRun","dryRun","unlink","getDryRunLogger","overallTimer","createStorage","log","configTimer","link","workspaceFile","findAllPackageJsonFiles","packagesToUnlinkNames","backupTimer","dryRunCount","totalRestoredCount","totalCleanedCount","modified","cleanOverrides","overridesModified","cleanResolutions","resolutionsModified","packageLockPath","cleanNodeModules","nodeModulesPath","removeDirectory","updatedPackageJsonFiles","verificationPassed","installResult","smartNpmInstall","skipIfNotNeeded","preferCi","skipped","method","duration","summary"],"mappings":"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"}
1
+ {"version":3,"file":"unlink.js","sources":["../../src/commands/unlink.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config } from '../types';\nimport { create as createStorage } from '../util/storage';\nimport { safeJsonParse, validateLinkBackup, type LinkBackup } from '../util/validation';\nimport { run } from '../util/child';\nimport {\n PerformanceTimer,\n PackageJson,\n PackageJsonLocation,\n findAllPackageJsonFiles,\n scanDirectoryForPackages,\n checkForFileDependencies\n} from '../util/performance';\nimport { smartNpmInstall } from '../util/npmOptimizations';\n\ninterface ExtendedPackageJson extends PackageJson {\n workspaces?: string[] | { packages?: string[] };\n overrides?: Record<string, any>;\n resolutions?: Record<string, any>;\n}\n\n\n\ninterface ProblematicDependency {\n name: string;\n version: string;\n type: 'file:' | 'link:' | 'relative-path' | 'workspace' | 'override' | 'resolution';\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'workspaces' | 'overrides' | 'resolutions';\n packagePath: string;\n reason: string;\n}\n\nconst EXCLUDED_DIRECTORIES = [\n 'node_modules',\n 'dist',\n 'build',\n 'coverage',\n '.git',\n '.next',\n '.nuxt',\n 'out',\n 'public',\n 'static',\n 'assets'\n];\n\n\n\nconst findPackagesToUnlink = async (scopeRoots: Record<string, string>, storage: any): Promise<string[]> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Finding packages to unlink');\n const packagesToUnlink: string[] = [];\n\n logger.silly(`Finding packages to unlink from scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // Scan all scope roots to build a comprehensive map of packages that should be unlinked\n const scopeTimer = PerformanceTimer.start(logger, 'Scanning all scope roots for packages to unlink');\n const allScopePackages = new Map<string, string>(); // packageName -> relativePath\n\n // Process all scopes in parallel for better performance\n const scopePromises = Object.entries(scopeRoots).map(async ([scope, rootDir]) => {\n logger.verbose(`Scanning scope ${scope} at root directory: ${rootDir}`);\n const scopePackages = await scanDirectoryForPackages(rootDir, storage);\n\n // Add packages from this scope to the overall map\n const scopeResults: Array<[string, string]> = [];\n for (const [packageName, packagePath] of scopePackages) {\n if (packageName.startsWith(scope)) {\n scopeResults.push([packageName, packagePath]);\n logger.debug(`Package to unlink: ${packageName} -> ${packagePath}`);\n }\n }\n return scopeResults;\n });\n\n const allScopeResults = await Promise.all(scopePromises);\n\n // Flatten results and collect package names\n for (const scopeResults of allScopeResults) {\n for (const [packageName, packagePath] of scopeResults) {\n allScopePackages.set(packageName, packagePath);\n packagesToUnlink.push(packageName);\n }\n }\n\n scopeTimer.end(`Scanned ${Object.keys(scopeRoots).length} scope roots, found ${packagesToUnlink.length} packages to unlink`);\n\n timer.end(`Found ${packagesToUnlink.length} packages to unlink`);\n return packagesToUnlink;\n};\n\nconst readLinkBackup = async (storage: any): Promise<LinkBackup> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n if (await storage.exists(backupPath)) {\n try {\n const content = await storage.readFile(backupPath, 'utf-8');\n const parsed = safeJsonParse(content, 'link backup file');\n return validateLinkBackup(parsed);\n } catch (error) {\n throw new Error(`Failed to parse link backup file: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n return {};\n};\n\nconst writeLinkBackup = async (backup: LinkBackup, storage: any): Promise<void> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n if (Object.keys(backup).length === 0) {\n // Remove backup file if empty\n if (await storage.exists(backupPath)) {\n await storage.deleteFile(backupPath);\n }\n } else {\n await storage.writeFile(backupPath, JSON.stringify(backup, null, 2), 'utf-8');\n }\n};\n\nconst restorePackageJson = async (\n packageJsonLocation: PackageJsonLocation,\n packagesToUnlink: string[],\n backup: LinkBackup,\n storage: any\n): Promise<number> => {\n const logger = getLogger();\n let restoredCount = 0;\n const { packageJson, path: packageJsonPath, relativePath } = packageJsonLocation;\n\n // Restore original versions from backup\n for (const packageName of packagesToUnlink) {\n const backupKey = `${relativePath}:${packageName}`;\n const backupEntry = backup[backupKey];\n\n if (!backupEntry) {\n logger.debug(`No backup found for ${backupKey}, skipping`);\n continue;\n }\n\n const currentDeps = (packageJson as any)[backupEntry.dependencyType];\n if (currentDeps && currentDeps[packageName]?.startsWith('file:')) {\n // Restore the original version\n currentDeps[packageName] = backupEntry.originalVersion;\n restoredCount++;\n logger.verbose(`Restored ${relativePath}/${backupEntry.dependencyType}.${packageName}: file:... -> ${backupEntry.originalVersion}`);\n\n // Remove from backup\n delete backup[backupKey];\n }\n }\n\n // NOTE: Don't write the file here - let the caller handle all modifications\n return restoredCount;\n};\n\n/**\n * Comprehensive scan for all types of problematic dependencies that could cause GitHub build failures\n */\nconst scanForProblematicDependencies = (packageJsonFiles: PackageJsonLocation[]): ProblematicDependency[] => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Scanning for problematic dependencies');\n const problematicDeps: ProblematicDependency[] = [];\n\n for (const { path: packagePath, packageJson, relativePath } of packageJsonFiles) {\n const extendedPackageJson = packageJson as ExtendedPackageJson;\n\n // Check dependencies, devDependencies, peerDependencies\n const depTypes: Array<keyof Pick<ExtendedPackageJson, 'dependencies' | 'devDependencies' | 'peerDependencies'>> = [\n 'dependencies', 'devDependencies', 'peerDependencies'\n ];\n\n for (const depType of depTypes) {\n const deps = extendedPackageJson[depType];\n if (!deps) continue;\n\n for (const [name, version] of Object.entries(deps)) {\n let problemType: ProblematicDependency['type'] | null = null;\n let reason = '';\n\n // Check for file: dependencies\n if (version.startsWith('file:')) {\n problemType = 'file:';\n reason = 'File dependencies cause build failures in CI/CD environments';\n }\n // Check for link: dependencies\n else if (version.startsWith('link:')) {\n problemType = 'link:';\n reason = 'Link dependencies are not resolvable in remote environments';\n }\n // Check for relative path patterns that could be problematic\n else if (version.includes('../') || version.includes('./') || version.startsWith('/')) {\n problemType = 'relative-path';\n reason = 'Relative path dependencies are not resolvable in different environments';\n }\n // Check for workspace protocol (used by some package managers)\n else if (version.startsWith('workspace:')) {\n problemType = 'workspace';\n reason = 'Workspace protocol dependencies require workspace configuration';\n }\n\n if (problemType) {\n problematicDeps.push({\n name,\n version,\n type: problemType,\n dependencyType: depType,\n packagePath: relativePath,\n reason\n });\n }\n }\n }\n\n // Check workspace configurations\n if (extendedPackageJson.workspaces) {\n problematicDeps.push({\n name: 'workspaces',\n version: JSON.stringify(extendedPackageJson.workspaces),\n type: 'workspace',\n dependencyType: 'workspaces',\n packagePath: relativePath,\n reason: 'Workspace configurations can cause issues when published to npm'\n });\n }\n\n // Check overrides (npm 8.3+)\n if (extendedPackageJson.overrides) {\n for (const [name, override] of Object.entries(extendedPackageJson.overrides)) {\n if (typeof override === 'string' && (override.startsWith('file:') || override.startsWith('link:') || override.includes('../'))) {\n problematicDeps.push({\n name,\n version: override,\n type: 'override',\n dependencyType: 'overrides',\n packagePath: relativePath,\n reason: 'Override configurations with local paths cause build failures'\n });\n }\n }\n }\n\n // Check resolutions (Yarn)\n if (extendedPackageJson.resolutions) {\n for (const [name, resolution] of Object.entries(extendedPackageJson.resolutions)) {\n if (typeof resolution === 'string' && (resolution.startsWith('file:') || resolution.startsWith('link:') || resolution.includes('../'))) {\n problematicDeps.push({\n name,\n version: resolution,\n type: 'resolution',\n dependencyType: 'resolutions',\n packagePath: relativePath,\n reason: 'Resolution configurations with local paths cause build failures'\n });\n }\n }\n }\n }\n\n timer.end(`Found ${problematicDeps.length} problematic dependencies`);\n return problematicDeps;\n};\n\n/**\n * Enhanced function to display problematic dependencies with detailed information\n */\nconst displayProblematicDependencies = (problematicDeps: ProblematicDependency[]): void => {\n const logger = getLogger();\n\n if (problematicDeps.length === 0) {\n logger.info('โœ… No problematic dependencies found');\n return;\n }\n\n logger.info('๐Ÿ”“ Found problematic dependencies that could cause GitHub build failures:');\n\n // Group by package path for better readability\n const grouped = problematicDeps.reduce((acc, dep) => {\n if (!acc[dep.packagePath]) {\n acc[dep.packagePath] = [];\n }\n acc[dep.packagePath].push(dep);\n return acc;\n }, {} as Record<string, ProblematicDependency[]>);\n\n for (const [packagePath, deps] of Object.entries(grouped)) {\n logger.info(` ๐Ÿ“„ ${packagePath}:`);\n for (const dep of deps) {\n logger.info(` โŒ ${dep.dependencyType}.${dep.name}: ${dep.version} (${dep.type})`);\n logger.info(` ๐Ÿ’ก ${dep.reason}`);\n }\n }\n};\n\n/**\n * Verification step to ensure no problematic dependencies remain after cleanup\n */\nconst verifyCleanup = async (packageJsonFiles: PackageJsonLocation[]): Promise<boolean> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Verifying cleanup completion');\n\n const remainingProblems = scanForProblematicDependencies(packageJsonFiles);\n\n if (remainingProblems.length === 0) {\n logger.info('โœ… Verification passed: No problematic dependencies remain');\n timer.end('Verification successful');\n return true;\n } else {\n logger.warn('โš ๏ธ Verification failed: Found remaining problematic dependencies');\n displayProblematicDependencies(remainingProblems);\n timer.end('Verification failed');\n return false;\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || runConfig.unlink?.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const overallTimer = PerformanceTimer.start(logger, 'Unlink command execution');\n const storage = createStorage({ log: logger.info });\n\n logger.info('๐Ÿ”“ Unlinking workspace packages and cleaning up problematic dependencies...');\n\n // Get configuration\n const configTimer = PerformanceTimer.start(logger, 'Reading configuration');\n const scopeRoots = runConfig.unlink?.scopeRoots || runConfig.link?.scopeRoots || {};\n const workspaceFileName = runConfig.unlink?.workspaceFile || 'pnpm-workspace.yaml';\n configTimer.end('Configuration loaded');\n\n if (Object.keys(scopeRoots).length === 0) {\n logger.info('No scope roots configured. Skipping link management.');\n overallTimer.end('Unlink command (no scope roots)');\n return 'No scope roots configured. Skipping link management.';\n }\n\n // Find all package.json files in current directory tree\n const packageJsonFiles = await findAllPackageJsonFiles(process.cwd(), storage);\n\n if (packageJsonFiles.length === 0) {\n throw new Error('No package.json files found in current directory or subdirectories.');\n }\n\n logger.info(`Found ${packageJsonFiles.length} package.json file(s) to process`);\n logger.info(`Scanning ${Object.keys(scopeRoots).length} scope root(s): ${Object.keys(scopeRoots).join(', ')}`);\n\n // Comprehensive scan for all problematic dependencies\n const problematicDeps = scanForProblematicDependencies(packageJsonFiles);\n displayProblematicDependencies(problematicDeps);\n\n // Find packages to unlink based on scope roots\n const packagesToUnlinkNames = await findPackagesToUnlink(scopeRoots, storage);\n\n if (packagesToUnlinkNames.length === 0 && problematicDeps.length === 0) {\n logger.info('โœ… No packages found matching scope roots for unlinking and no problematic dependencies detected.');\n overallTimer.end('Unlink command (nothing to clean)');\n return 'No packages found matching scope roots for unlinking and no problematic dependencies detected.';\n }\n\n logger.verbose(`Found ${packagesToUnlinkNames.length} packages that could be unlinked: ${packagesToUnlinkNames.join(', ')}`);\n\n // Read existing backup\n const backupTimer = PerformanceTimer.start(logger, 'Reading link backup');\n const backup = await readLinkBackup(storage);\n backupTimer.end('Link backup loaded');\n\n if (isDryRun) {\n logger.info('Would clean up problematic dependencies and restore original package.json dependencies');\n\n // Show what would be cleaned up\n let dryRunCount = 0;\n for (const packageName of packagesToUnlinkNames) {\n for (const { relativePath } of packageJsonFiles) {\n const backupKey = `${relativePath}:${packageName}`;\n const backupEntry = backup[backupKey];\n if (backupEntry) {\n logger.verbose(`Would restore ${relativePath}/${packageName}: file:... -> ${backupEntry.originalVersion}`);\n dryRunCount++;\n }\n }\n }\n\n // Show what problematic dependencies would be cleaned\n if (problematicDeps.length > 0) {\n logger.verbose(`Would clean up ${problematicDeps.length} problematic dependencies`);\n }\n\n overallTimer.end('Unlink command (dry run)');\n return `DRY RUN: Would unlink ${dryRunCount} dependency reference(s) and clean up ${problematicDeps.length} problematic dependencies across ${packageJsonFiles.length} package.json files`;\n } else {\n // Restore package.json files with original versions and clean up problematic dependencies\n let totalRestoredCount = 0;\n let totalCleanedCount = 0;\n\n for (const packageJsonLocation of packageJsonFiles) {\n const { packageJson, path: packageJsonPath, relativePath } = packageJsonLocation;\n let modified = false;\n\n // Restore from backup\n const restoredCount = await restorePackageJson(packageJsonLocation, packagesToUnlinkNames, backup, storage);\n totalRestoredCount += restoredCount;\n if (restoredCount > 0) modified = true;\n\n // Clean up problematic dependencies for this specific package\n const extendedPackageJson = packageJson as ExtendedPackageJson;\n\n // Remove workspace configurations\n if (extendedPackageJson.workspaces) {\n delete extendedPackageJson.workspaces;\n logger.verbose(`Removed workspace configuration from ${relativePath}`);\n modified = true;\n totalCleanedCount++;\n }\n\n // Clean overrides with problematic paths\n if (extendedPackageJson.overrides) {\n const cleanOverrides: Record<string, any> = {};\n let overridesModified = false;\n\n for (const [name, override] of Object.entries(extendedPackageJson.overrides)) {\n if (typeof override === 'string' && (override.startsWith('file:') || override.startsWith('link:') || override.includes('../'))) {\n logger.verbose(`Removed problematic override ${relativePath}/overrides.${name}: ${override}`);\n overridesModified = true;\n totalCleanedCount++;\n } else {\n cleanOverrides[name] = override;\n }\n }\n\n if (overridesModified) {\n if (Object.keys(cleanOverrides).length === 0) {\n delete extendedPackageJson.overrides;\n } else {\n extendedPackageJson.overrides = cleanOverrides;\n }\n modified = true;\n }\n }\n\n // Clean resolutions with problematic paths\n if (extendedPackageJson.resolutions) {\n const cleanResolutions: Record<string, any> = {};\n let resolutionsModified = false;\n\n for (const [name, resolution] of Object.entries(extendedPackageJson.resolutions)) {\n if (typeof resolution === 'string' && (resolution.startsWith('file:') || resolution.startsWith('link:') || resolution.includes('../'))) {\n logger.verbose(`Removed problematic resolution ${relativePath}/resolutions.${name}: ${resolution}`);\n resolutionsModified = true;\n totalCleanedCount++;\n } else {\n cleanResolutions[name] = resolution;\n }\n }\n\n if (resolutionsModified) {\n if (Object.keys(cleanResolutions).length === 0) {\n delete extendedPackageJson.resolutions;\n } else {\n extendedPackageJson.resolutions = cleanResolutions;\n }\n modified = true;\n }\n }\n\n // Save the modified package.json if any changes were made\n if (modified) {\n await storage.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n }\n }\n\n // Save updated backup (with restored items removed)\n await writeLinkBackup(backup, storage);\n\n if (totalRestoredCount === 0 && totalCleanedCount === 0) {\n logger.info('โœ… No problematic dependencies were found to clean up.');\n overallTimer.end('Unlink command (nothing to clean)');\n return 'No problematic dependencies were found to clean up.';\n }\n\n logger.info(`Cleaned up ${totalRestoredCount} linked dependencies and ${totalCleanedCount} other problematic dependencies across ${packageJsonFiles.length} package.json file(s)`);\n\n // CRITICAL: Clean up package-lock.json to prevent GitHub build failures\n // The lock file may still contain file: references even after restoring package.json\n logger.info('๐Ÿงน Cleaning up package-lock.json to remove any stale file references...');\n const packageLockPath = path.join(process.cwd(), 'package-lock.json');\n if (await storage.exists(packageLockPath)) {\n await storage.deleteFile(packageLockPath);\n logger.info('๐Ÿ—‘๏ธ Deleted package-lock.json to ensure clean state');\n }\n\n // Optionally clean up node_modules for thorough cleanup\n const cleanNodeModules = runConfig.unlink?.cleanNodeModules !== false; // default to true\n if (cleanNodeModules) {\n logger.info('๐Ÿงน Cleaning up node_modules for complete fresh start...');\n const nodeModulesPath = path.join(process.cwd(), 'node_modules');\n if (await storage.exists(nodeModulesPath)) {\n try {\n await storage.removeDirectory(nodeModulesPath);\n logger.info('๐Ÿ—‘๏ธ Deleted node_modules directory');\n } catch (error: any) {\n logger.warn(`Could not delete node_modules (${error.message}), continuing...`);\n }\n }\n }\n\n // Re-read package.json files for verification\n const updatedPackageJsonFiles = await findAllPackageJsonFiles(process.cwd(), storage);\n\n // Verification step\n const verificationPassed = await verifyCleanup(updatedPackageJsonFiles);\n\n if (!verificationPassed) {\n logger.warn('โš ๏ธ Some problematic dependencies may still remain. Please review the output above.');\n }\n\n // Rebuild dependencies with fresh install (NOT npm ci to avoid using stale lock file)\n logger.info('โณ Running fresh npm install to regenerate clean dependencies (this may take a moment)...');\n try {\n const installResult = await smartNpmInstall({\n skipIfNotNeeded: false, // Always install after unlinking changes\n preferCi: false, // NEVER use npm ci here - we need fresh npm install to regenerate lock file\n verbose: false\n });\n\n if (installResult.skipped) {\n logger.info(`โšก Dependencies were up to date (${installResult.method})`);\n } else {\n logger.info(`โœ… Dependencies rebuilt cleanly using ${installResult.method} (${installResult.duration}ms)`);\n }\n } catch (error) {\n logger.warn(`Failed to rebuild dependencies: ${error}. You may need to run 'npm install' manually.`);\n }\n\n const summary = `Successfully cleaned up ${totalRestoredCount} linked dependencies and ${totalCleanedCount} other problematic dependencies across ${packageJsonFiles.length} package.json file(s)`;\n overallTimer.end('Unlink command completed');\n return summary;\n }\n};\n"],"names":["findPackagesToUnlink","scopeRoots","storage","logger","getLogger","timer","PerformanceTimer","start","packagesToUnlink","silly","JSON","stringify","scopeTimer","allScopePackages","Map","scopePromises","Object","entries","map","scope","rootDir","verbose","scopePackages","scanDirectoryForPackages","scopeResults","packageName","packagePath","startsWith","push","debug","allScopeResults","Promise","all","set","end","keys","length","readLinkBackup","backupPath","path","join","process","cwd","exists","content","readFile","parsed","safeJsonParse","validateLinkBackup","error","Error","message","writeLinkBackup","backup","deleteFile","writeFile","restorePackageJson","packageJsonLocation","restoredCount","packageJson","packageJsonPath","relativePath","currentDeps","backupKey","backupEntry","dependencyType","originalVersion","scanForProblematicDependencies","packageJsonFiles","problematicDeps","extendedPackageJson","depTypes","depType","deps","name","version","problemType","reason","includes","type","workspaces","overrides","override","resolutions","resolution","displayProblematicDependencies","info","grouped","reduce","acc","dep","verifyCleanup","remainingProblems","warn","execute","runConfig","isDryRun","dryRun","unlink","getDryRunLogger","overallTimer","createStorage","log","configTimer","link","workspaceFile","findAllPackageJsonFiles","packagesToUnlinkNames","backupTimer","dryRunCount","totalRestoredCount","totalCleanedCount","modified","cleanOverrides","overridesModified","cleanResolutions","resolutionsModified","packageLockPath","cleanNodeModules","nodeModulesPath","removeDirectory","updatedPackageJsonFiles","verificationPassed","installResult","smartNpmInstall","skipIfNotNeeded","preferCi","skipped","method","duration","summary"],"mappings":"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"}
package/dist/constants.js CHANGED
@@ -1,7 +1,7 @@
1
- import os from 'os';
2
- import path from 'path';
1
+ import os__default from 'os';
2
+ import path__default from 'path';
3
3
 
4
- const VERSION = '0.0.50 (HEAD/3194f0d T:v0.0.50 2025-07-27 22:52:59 -0700) linux x64 v22.17.1';
4
+ const VERSION = '0.1.0 (HEAD/29abad9 T:v0.1.0 2025-08-06 19:00:55 -0700) linux x64 v22.17.1';
5
5
  const PROGRAM_NAME = 'kodrdriv';
6
6
  const DEFAULT_OVERRIDES = false;
7
7
  const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';
@@ -14,13 +14,16 @@ const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';
14
14
  const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB
15
15
  const DEFAULT_CONTEXT_DIRECTORIES = [];
16
16
  const DEFAULT_CONFIG_DIR = '.kodrdriv';
17
- const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');
17
+ const DEFAULT_PREFERENCES_DIRECTORY = path__default.join(os__default.homedir(), '.kodrdriv');
18
18
  const DEFAULT_FROM_COMMIT_ALIAS = 'origin/HEAD';
19
19
  const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';
20
20
  const DEFAULT_ADD = false;
21
21
  const DEFAULT_CACHED = false;
22
22
  const DEFAULT_SENDIT_MODE = false;
23
+ const DEFAULT_INTERACTIVE_MODE = false;
24
+ const DEFAULT_AMEND_MODE = false;
23
25
  const DEFAULT_MESSAGE_LIMIT = 50;
26
+ const DEFAULT_MAX_DIFF_BYTES = 2048; // 2KB default limit per file
24
27
  const DEFAULT_MERGE_METHOD = 'squash';
25
28
  const DEFAULT_EXCLUDED_PATTERNS = [
26
29
  'node_modules',
@@ -101,13 +104,18 @@ const KODRDRIV_DEFAULTS = {
101
104
  add: DEFAULT_ADD,
102
105
  cached: DEFAULT_CACHED,
103
106
  sendit: DEFAULT_SENDIT_MODE,
107
+ interactive: DEFAULT_INTERACTIVE_MODE,
108
+ amend: DEFAULT_AMEND_MODE,
104
109
  messageLimit: DEFAULT_MESSAGE_LIMIT,
105
- skipFileCheck: false
110
+ skipFileCheck: false,
111
+ maxDiffBytes: DEFAULT_MAX_DIFF_BYTES
106
112
  },
107
113
  release: {
108
114
  from: DEFAULT_FROM_COMMIT_ALIAS,
109
115
  to: DEFAULT_TO_COMMIT_ALIAS,
110
- messageLimit: DEFAULT_MESSAGE_LIMIT
116
+ messageLimit: DEFAULT_MESSAGE_LIMIT,
117
+ interactive: DEFAULT_INTERACTIVE_MODE,
118
+ maxDiffBytes: DEFAULT_MAX_DIFF_BYTES
111
119
  },
112
120
  audioCommit: {
113
121
  maxRecordingTime: 300,
@@ -140,28 +148,39 @@ const KODRDRIV_DEFAULTS = {
140
148
  },
141
149
  publish: {
142
150
  mergeMethod: DEFAULT_MERGE_METHOD,
151
+ from: DEFAULT_FROM_COMMIT_ALIAS,
152
+ targetVersion: 'patch',
153
+ interactive: DEFAULT_INTERACTIVE_MODE,
143
154
  requiredEnvVars: [
144
155
  'GITHUB_TOKEN',
145
156
  'OPENAI_API_KEY'
146
157
  ],
147
158
  linkWorkspacePackages: true,
148
159
  unlinkWorkspacePackages: true,
149
- sendit: DEFAULT_SENDIT_MODE
160
+ sendit: DEFAULT_SENDIT_MODE,
161
+ targetBranch: 'main'
150
162
  },
151
163
  link: {
152
164
  scopeRoots: {},
153
165
  dryRun: false
154
166
  },
167
+ unlink: {
168
+ scopeRoots: {},
169
+ workspaceFile: undefined,
170
+ dryRun: false,
171
+ cleanNodeModules: false
172
+ },
155
173
  tree: {
156
174
  directories: undefined,
157
175
  excludedPatterns: undefined,
158
176
  startFrom: undefined,
159
177
  cmd: undefined,
160
178
  parallel: false,
161
- builtInCommand: undefined
179
+ builtInCommand: undefined,
180
+ continue: false
162
181
  },
163
182
  excludedPatterns: DEFAULT_EXCLUDED_PATTERNS
164
183
  };
165
184
 
166
- export { ALLOWED_COMMANDS, COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, DEFAULT_ADD, DEFAULT_CACHED, DEFAULT_COMMAND, DEFAULT_CONFIG_DIR, DEFAULT_CONTEXT_DIRECTORIES, DEFAULT_DEBUG, DEFAULT_DRY_RUN, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_FROM_COMMIT_ALIAS, DEFAULT_GIT_COMMAND_MAX_BUFFER, DEFAULT_MERGE_METHOD, DEFAULT_MESSAGE_LIMIT, DEFAULT_MODEL, DEFAULT_OUTPUT_DIRECTORY, DEFAULT_OVERRIDES, DEFAULT_PREFERENCES_DIRECTORY, DEFAULT_SENDIT_MODE, DEFAULT_TO_COMMIT_ALIAS, DEFAULT_VERBOSE, KODRDRIV_DEFAULTS, PROGRAM_NAME, VERSION };
185
+ export { ALLOWED_COMMANDS, COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, DEFAULT_ADD, DEFAULT_AMEND_MODE, DEFAULT_CACHED, DEFAULT_COMMAND, DEFAULT_CONFIG_DIR, DEFAULT_CONTEXT_DIRECTORIES, DEFAULT_DEBUG, DEFAULT_DRY_RUN, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_FROM_COMMIT_ALIAS, DEFAULT_GIT_COMMAND_MAX_BUFFER, DEFAULT_INTERACTIVE_MODE, DEFAULT_MAX_DIFF_BYTES, DEFAULT_MERGE_METHOD, DEFAULT_MESSAGE_LIMIT, DEFAULT_MODEL, DEFAULT_OUTPUT_DIRECTORY, DEFAULT_OVERRIDES, DEFAULT_PREFERENCES_DIRECTORY, DEFAULT_SENDIT_MODE, DEFAULT_TO_COMMIT_ALIAS, DEFAULT_VERBOSE, KODRDRIV_DEFAULTS, PROGRAM_NAME, VERSION };
167
186
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { MergeMethod } from './types';\nimport os from 'os';\nimport path from 'path';\n\nexport const VERSION = '__VERSION__ (__GIT_BRANCH__/__GIT_COMMIT__ __GIT_TAGS__ __GIT_COMMIT_DATE__) __SYSTEM_INFO__';\nexport const PROGRAM_NAME = 'kodrdriv';\nexport const DEFAULT_CHARACTER_ENCODING = 'utf-8';\nexport const DEFAULT_BINARY_TO_TEXT_ENCODING = 'base64';\nexport const DEFAULT_DIFF = true;\nexport const DEFAULT_LOG = false;\nexport const DEFAULT_OVERRIDES = false;\nexport const DATE_FORMAT_MONTH_DAY = 'MM-DD';\nexport const DATE_FORMAT_YEAR = 'YYYY';\nexport const DATE_FORMAT_YEAR_MONTH = 'YYYY-MM';\nexport const DATE_FORMAT_YEAR_MONTH_DAY = 'YYYY-MM-DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_SLASH = 'YYYY/MM/DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES = 'YYYY-MM-DD-HHmm';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';\nexport const DATE_FORMAT_SHORT_TIMESTAMP = 'YYMMdd-HHmm';\nexport const DATE_FORMAT_MONTH = 'MM';\nexport const DATE_FORMAT_DAY = 'DD';\nexport const DATE_FORMAT_HOURS = 'HHmm';\nexport const DATE_FORMAT_MINUTES = 'mm';\nexport const DATE_FORMAT_SECONDS = 'ss';\nexport const DATE_FORMAT_MILLISECONDS = 'SSS';\nexport const DEFAULT_VERBOSE = false;\nexport const DEFAULT_DRY_RUN = false;\nexport const DEFAULT_DEBUG = false;\nexport const DEFAULT_MODEL = 'gpt-4o-mini';\nexport const DEFAULT_MODEL_STRONG = 'gpt-4o';\nexport const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';\n\n// Buffer size for git commands that may produce large output (like git log)\nexport const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB\n\nexport const DEFAULT_CONTEXT_DIRECTORIES: string[] = [];\n\nexport const DEFAULT_CONFIG_DIR = '.kodrdriv';\nexport const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');\n\nexport const DEFAULT_FROM_COMMIT_ALIAS = 'origin/HEAD';\nexport const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';\n\nexport const DEFAULT_ADD = false;\nexport const DEFAULT_CACHED = false;\nexport const DEFAULT_SENDIT_MODE = false;\nexport const DEFAULT_MESSAGE_LIMIT = 50;\n\nexport const DEFAULT_MERGE_METHOD: MergeMethod = 'squash';\n\nexport const DEFAULT_EXCLUDED_PATTERNS = [\n 'node_modules', 'package-lock.json', 'yarn.lock', 'bun.lockb',\n 'composer.lock', 'Cargo.lock', 'Gemfile.lock',\n 'dist', 'build', 'out', '.next', '.nuxt', 'coverage',\n '.vscode', '.idea', '.DS_Store', '.git', '.gitignore',\n 'logs', 'tmp', '.cache', '*.log', '.env', '.env.*',\n '*.pem', '*.crt', '*.key', '*.sqlite', '*.db',\n '*.zip', '*.tar', '*.gz', '*.exe', '*.bin'\n];\n\nexport const COMMAND_COMMIT = 'commit';\nexport const COMMAND_AUDIO_COMMIT = 'audio-commit';\nexport const COMMAND_SELECT_AUDIO = 'select-audio';\nexport const COMMAND_RELEASE = 'release';\nexport const COMMAND_REVIEW = 'review';\nexport const COMMAND_AUDIO_REVIEW = 'audio-review';\nexport const COMMAND_PUBLISH = 'publish';\nexport const COMMAND_TREE = 'tree';\nexport const COMMAND_LINK = 'link';\nexport const COMMAND_UNLINK = 'unlink';\nexport const COMMAND_CLEAN = 'clean';\nexport const COMMAND_CHECK_CONFIG = 'check-config';\nexport const COMMAND_INIT_CONFIG = 'init-config';\n\nexport const ALLOWED_COMMANDS = [\n COMMAND_COMMIT,\n COMMAND_AUDIO_COMMIT,\n COMMAND_SELECT_AUDIO,\n COMMAND_RELEASE,\n COMMAND_REVIEW,\n COMMAND_AUDIO_REVIEW,\n COMMAND_PUBLISH,\n COMMAND_TREE,\n COMMAND_LINK,\n COMMAND_UNLINK,\n COMMAND_CLEAN\n];\n\nexport const DEFAULT_COMMAND = COMMAND_COMMIT;\n\nexport const DEFAULT_INSTRUCTIONS_DIR = `instructions`;\n\nexport const DEFAULT_PERSONA_DIR = `personas`;\n\nexport const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;\nexport const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;\nexport const DEFAULT_INSTRUCTIONS_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;\n\nexport const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;\nexport const DEFAULT_PERSONA_YOU_FILE = `${DEFAULT_PERSONA_DIR}/you.md`;\n\n// Default instructions for each persona\nexport const DEFAULT_INSTRUCTIONS_MAP = {\n [COMMAND_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE, // Reuse commit instructions\n [COMMAND_RELEASE]: DEFAULT_INSTRUCTIONS_RELEASE_FILE,\n [COMMAND_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE, // Reuse audio-review instructions for now\n [COMMAND_AUDIO_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE,\n};\n\n// Default personas for each command\nexport const DEFAULT_PERSONA_MAP = {\n [COMMAND_COMMIT]: DEFAULT_PERSONA_YOU_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_RELEASE]: DEFAULT_PERSONA_RELEASER_FILE,\n [COMMAND_REVIEW]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_AUDIO_REVIEW]: DEFAULT_PERSONA_YOU_FILE,\n};\n\n// Used by child process to create paths\nexport const DEFAULT_PATH_SEPARATOR = '/';\n\n// Used by util/general for file filtering\nexport const DEFAULT_IGNORE_PATTERNS = [\n 'node_modules/**',\n '**/*.log',\n '.git/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n '.DS_Store',\n '*.tmp',\n '*.cache',\n];\n\n// Used by util/storage for directory names\nexport const DEFAULT_DIRECTORY_PREFIX = '.kodrdriv';\n\n// Used by other commands but not exposed in CLI\nexport const INTERNAL_DEFAULT_OUTPUT_FILE = 'output.txt';\n\nexport const INTERNAL_DATETIME_FORMAT = 'YYYY-MM-DD_HH-mm-ss';\n\n// Define defaults in one place\nexport const KODRDRIV_DEFAULTS = {\n dryRun: DEFAULT_DRY_RUN,\n verbose: DEFAULT_VERBOSE,\n debug: DEFAULT_DEBUG,\n overrides: DEFAULT_OVERRIDES,\n model: DEFAULT_MODEL,\n contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,\n commandName: DEFAULT_COMMAND,\n configDirectory: DEFAULT_CONFIG_DIR,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,\n commit: {\n add: DEFAULT_ADD,\n cached: DEFAULT_CACHED,\n sendit: DEFAULT_SENDIT_MODE,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n skipFileCheck: false,\n },\n release: {\n from: DEFAULT_FROM_COMMIT_ALIAS,\n to: DEFAULT_TO_COMMIT_ALIAS,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n },\n audioCommit: {\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n },\n review: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n },\n audioReview: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n directory: undefined, // No default directory\n },\n publish: {\n mergeMethod: DEFAULT_MERGE_METHOD,\n requiredEnvVars: ['GITHUB_TOKEN', 'OPENAI_API_KEY'],\n linkWorkspacePackages: true,\n unlinkWorkspacePackages: true,\n sendit: DEFAULT_SENDIT_MODE,\n },\n link: {\n scopeRoots: {},\n dryRun: false,\n },\n tree: {\n directories: undefined,\n excludedPatterns: undefined,\n startFrom: undefined,\n cmd: undefined,\n parallel: false,\n builtInCommand: undefined,\n },\n excludedPatterns: DEFAULT_EXCLUDED_PATTERNS,\n};\n"],"names":["VERSION","PROGRAM_NAME","DEFAULT_OVERRIDES","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","DEFAULT_VERBOSE","DEFAULT_DRY_RUN","DEFAULT_DEBUG","DEFAULT_MODEL","DEFAULT_OUTPUT_DIRECTORY","DEFAULT_GIT_COMMAND_MAX_BUFFER","DEFAULT_CONTEXT_DIRECTORIES","DEFAULT_CONFIG_DIR","DEFAULT_PREFERENCES_DIRECTORY","path","join","os","homedir","DEFAULT_FROM_COMMIT_ALIAS","DEFAULT_TO_COMMIT_ALIAS","DEFAULT_ADD","DEFAULT_CACHED","DEFAULT_SENDIT_MODE","DEFAULT_MESSAGE_LIMIT","DEFAULT_MERGE_METHOD","DEFAULT_EXCLUDED_PATTERNS","COMMAND_COMMIT","COMMAND_AUDIO_COMMIT","COMMAND_SELECT_AUDIO","COMMAND_RELEASE","COMMAND_REVIEW","COMMAND_AUDIO_REVIEW","COMMAND_PUBLISH","COMMAND_TREE","COMMAND_LINK","COMMAND_UNLINK","COMMAND_CLEAN","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","ALLOWED_COMMANDS","DEFAULT_COMMAND","KODRDRIV_DEFAULTS","dryRun","verbose","debug","overrides","model","contextDirectories","commandName","configDirectory","outputDirectory","preferencesDirectory","commit","add","cached","sendit","messageLimit","skipFileCheck","release","from","to","audioCommit","maxRecordingTime","audioDevice","undefined","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","audioReview","directory","publish","mergeMethod","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","link","scopeRoots","tree","directories","excludedPatterns","startFrom","cmd","parallel","builtInCommand"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { MergeMethod } from './types';\nimport os from 'os';\nimport path from 'path';\n\nexport const VERSION = '__VERSION__ (__GIT_BRANCH__/__GIT_COMMIT__ __GIT_TAGS__ __GIT_COMMIT_DATE__) __SYSTEM_INFO__';\nexport const PROGRAM_NAME = 'kodrdriv';\nexport const DEFAULT_CHARACTER_ENCODING = 'utf-8';\nexport const DEFAULT_BINARY_TO_TEXT_ENCODING = 'base64';\nexport const DEFAULT_DIFF = true;\nexport const DEFAULT_LOG = false;\nexport const DEFAULT_OVERRIDES = false;\nexport const DATE_FORMAT_MONTH_DAY = 'MM-DD';\nexport const DATE_FORMAT_YEAR = 'YYYY';\nexport const DATE_FORMAT_YEAR_MONTH = 'YYYY-MM';\nexport const DATE_FORMAT_YEAR_MONTH_DAY = 'YYYY-MM-DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_SLASH = 'YYYY/MM/DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES = 'YYYY-MM-DD-HHmm';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';\nexport const DATE_FORMAT_SHORT_TIMESTAMP = 'YYMMdd-HHmm';\nexport const DATE_FORMAT_MONTH = 'MM';\nexport const DATE_FORMAT_DAY = 'DD';\nexport const DATE_FORMAT_HOURS = 'HHmm';\nexport const DATE_FORMAT_MINUTES = 'mm';\nexport const DATE_FORMAT_SECONDS = 'ss';\nexport const DATE_FORMAT_MILLISECONDS = 'SSS';\nexport const DEFAULT_VERBOSE = false;\nexport const DEFAULT_DRY_RUN = false;\nexport const DEFAULT_DEBUG = false;\nexport const DEFAULT_MODEL = 'gpt-4o-mini';\nexport const DEFAULT_MODEL_STRONG = 'gpt-4o';\nexport const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';\n\n// Buffer size for git commands that may produce large output (like git log)\nexport const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB\n\nexport const DEFAULT_CONTEXT_DIRECTORIES: string[] = [];\n\nexport const DEFAULT_CONFIG_DIR = '.kodrdriv';\nexport const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');\n\nexport const DEFAULT_FROM_COMMIT_ALIAS = 'origin/HEAD';\nexport const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';\n\nexport const DEFAULT_ADD = false;\nexport const DEFAULT_CACHED = false;\nexport const DEFAULT_SENDIT_MODE = false;\nexport const DEFAULT_INTERACTIVE_MODE = false;\nexport const DEFAULT_AMEND_MODE = false;\nexport const DEFAULT_MESSAGE_LIMIT = 50;\nexport const DEFAULT_MAX_DIFF_BYTES = 2048; // 2KB default limit per file\n\nexport const DEFAULT_MERGE_METHOD: MergeMethod = 'squash';\n\nexport const DEFAULT_EXCLUDED_PATTERNS = [\n 'node_modules', 'package-lock.json', 'yarn.lock', 'bun.lockb',\n 'composer.lock', 'Cargo.lock', 'Gemfile.lock',\n 'dist', 'build', 'out', '.next', '.nuxt', 'coverage',\n '.vscode', '.idea', '.DS_Store', '.git', '.gitignore',\n 'logs', 'tmp', '.cache', '*.log', '.env', '.env.*',\n '*.pem', '*.crt', '*.key', '*.sqlite', '*.db',\n '*.zip', '*.tar', '*.gz', '*.exe', '*.bin'\n];\n\nexport const COMMAND_COMMIT = 'commit';\nexport const COMMAND_AUDIO_COMMIT = 'audio-commit';\nexport const COMMAND_SELECT_AUDIO = 'select-audio';\nexport const COMMAND_RELEASE = 'release';\nexport const COMMAND_REVIEW = 'review';\nexport const COMMAND_AUDIO_REVIEW = 'audio-review';\nexport const COMMAND_PUBLISH = 'publish';\nexport const COMMAND_TREE = 'tree';\nexport const COMMAND_LINK = 'link';\nexport const COMMAND_UNLINK = 'unlink';\nexport const COMMAND_CLEAN = 'clean';\nexport const COMMAND_CHECK_CONFIG = 'check-config';\nexport const COMMAND_INIT_CONFIG = 'init-config';\n\nexport const ALLOWED_COMMANDS = [\n COMMAND_COMMIT,\n COMMAND_AUDIO_COMMIT,\n COMMAND_SELECT_AUDIO,\n COMMAND_RELEASE,\n COMMAND_REVIEW,\n COMMAND_AUDIO_REVIEW,\n COMMAND_PUBLISH,\n COMMAND_TREE,\n COMMAND_LINK,\n COMMAND_UNLINK,\n COMMAND_CLEAN\n];\n\nexport const DEFAULT_COMMAND = COMMAND_COMMIT;\n\nexport const DEFAULT_INSTRUCTIONS_DIR = `instructions`;\n\nexport const DEFAULT_PERSONA_DIR = `personas`;\n\nexport const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;\nexport const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;\nexport const DEFAULT_INSTRUCTIONS_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;\n\nexport const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;\nexport const DEFAULT_PERSONA_YOU_FILE = `${DEFAULT_PERSONA_DIR}/you.md`;\n\n// Default instructions for each persona\nexport const DEFAULT_INSTRUCTIONS_MAP = {\n [COMMAND_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE, // Reuse commit instructions\n [COMMAND_RELEASE]: DEFAULT_INSTRUCTIONS_RELEASE_FILE,\n [COMMAND_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE, // Reuse audio-review instructions for now\n [COMMAND_AUDIO_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE,\n};\n\n// Default personas for each command\nexport const DEFAULT_PERSONA_MAP = {\n [COMMAND_COMMIT]: DEFAULT_PERSONA_YOU_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_RELEASE]: DEFAULT_PERSONA_RELEASER_FILE,\n [COMMAND_REVIEW]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_AUDIO_REVIEW]: DEFAULT_PERSONA_YOU_FILE,\n};\n\n// Used by child process to create paths\nexport const DEFAULT_PATH_SEPARATOR = '/';\n\n// Used by util/general for file filtering\nexport const DEFAULT_IGNORE_PATTERNS = [\n 'node_modules/**',\n '**/*.log',\n '.git/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n '.DS_Store',\n '*.tmp',\n '*.cache',\n];\n\n// Used by util/storage for directory names\nexport const DEFAULT_DIRECTORY_PREFIX = '.kodrdriv';\n\n// Used by other commands but not exposed in CLI\nexport const INTERNAL_DEFAULT_OUTPUT_FILE = 'output.txt';\n\nexport const INTERNAL_DATETIME_FORMAT = 'YYYY-MM-DD_HH-mm-ss';\n\n// Define defaults in one place\nexport const KODRDRIV_DEFAULTS = {\n dryRun: DEFAULT_DRY_RUN,\n verbose: DEFAULT_VERBOSE,\n debug: DEFAULT_DEBUG,\n overrides: DEFAULT_OVERRIDES,\n model: DEFAULT_MODEL,\n contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,\n commandName: DEFAULT_COMMAND,\n configDirectory: DEFAULT_CONFIG_DIR,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,\n commit: {\n add: DEFAULT_ADD,\n cached: DEFAULT_CACHED,\n sendit: DEFAULT_SENDIT_MODE,\n interactive: DEFAULT_INTERACTIVE_MODE,\n amend: DEFAULT_AMEND_MODE,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n skipFileCheck: false,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n },\n release: {\n from: DEFAULT_FROM_COMMIT_ALIAS,\n to: DEFAULT_TO_COMMIT_ALIAS,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n interactive: DEFAULT_INTERACTIVE_MODE,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n },\n audioCommit: {\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n },\n review: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n },\n audioReview: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n directory: undefined, // No default directory\n },\n publish: {\n mergeMethod: DEFAULT_MERGE_METHOD,\n from: DEFAULT_FROM_COMMIT_ALIAS,\n targetVersion: 'patch',\n interactive: DEFAULT_INTERACTIVE_MODE,\n requiredEnvVars: ['GITHUB_TOKEN', 'OPENAI_API_KEY'],\n linkWorkspacePackages: true,\n unlinkWorkspacePackages: true,\n sendit: DEFAULT_SENDIT_MODE,\n targetBranch: 'main',\n },\n link: {\n scopeRoots: {},\n dryRun: false,\n },\n unlink: {\n scopeRoots: {},\n workspaceFile: undefined,\n dryRun: false,\n cleanNodeModules: false,\n },\n tree: {\n directories: undefined,\n excludedPatterns: undefined,\n startFrom: undefined,\n cmd: undefined,\n parallel: false,\n builtInCommand: undefined,\n continue: false,\n },\n excludedPatterns: DEFAULT_EXCLUDED_PATTERNS,\n};\n"],"names":["VERSION","PROGRAM_NAME","DEFAULT_OVERRIDES","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","DEFAULT_VERBOSE","DEFAULT_DRY_RUN","DEFAULT_DEBUG","DEFAULT_MODEL","DEFAULT_OUTPUT_DIRECTORY","DEFAULT_GIT_COMMAND_MAX_BUFFER","DEFAULT_CONTEXT_DIRECTORIES","DEFAULT_CONFIG_DIR","DEFAULT_PREFERENCES_DIRECTORY","path","join","os","homedir","DEFAULT_FROM_COMMIT_ALIAS","DEFAULT_TO_COMMIT_ALIAS","DEFAULT_ADD","DEFAULT_CACHED","DEFAULT_SENDIT_MODE","DEFAULT_INTERACTIVE_MODE","DEFAULT_AMEND_MODE","DEFAULT_MESSAGE_LIMIT","DEFAULT_MAX_DIFF_BYTES","DEFAULT_MERGE_METHOD","DEFAULT_EXCLUDED_PATTERNS","COMMAND_COMMIT","COMMAND_AUDIO_COMMIT","COMMAND_SELECT_AUDIO","COMMAND_RELEASE","COMMAND_REVIEW","COMMAND_AUDIO_REVIEW","COMMAND_PUBLISH","COMMAND_TREE","COMMAND_LINK","COMMAND_UNLINK","COMMAND_CLEAN","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","ALLOWED_COMMANDS","DEFAULT_COMMAND","KODRDRIV_DEFAULTS","dryRun","verbose","debug","overrides","model","contextDirectories","commandName","configDirectory","outputDirectory","preferencesDirectory","commit","add","cached","sendit","interactive","amend","messageLimit","skipFileCheck","maxDiffBytes","release","from","to","audioCommit","maxRecordingTime","audioDevice","undefined","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","audioReview","directory","publish","mergeMethod","targetVersion","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","targetBranch","link","scopeRoots","unlink","workspaceFile","cleanNodeModules","tree","directories","excludedPatterns","startFrom","cmd","parallel","builtInCommand","continue"],"mappings":"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"}
@@ -97,6 +97,46 @@ const getReviewExcludedPatterns = (basePatterns)=>{
97
97
  ];
98
98
  return combinedPatterns;
99
99
  };
100
+ // Check if there are changes to critical files that are normally excluded
101
+ const hasCriticalExcludedChanges = async ()=>{
102
+ const logger = getLogger();
103
+ const criticalPatterns = [
104
+ 'package-lock.json',
105
+ 'yarn.lock',
106
+ 'bun.lockb',
107
+ '.gitignore',
108
+ '.env.example'
109
+ ];
110
+ try {
111
+ // Check for unstaged changes to critical files
112
+ const { stdout } = await run('git status --porcelain');
113
+ const changedFiles = stdout.split('\n').filter((line)=>line.trim()).map((line)=>line.substring(3).trim()); // Remove status prefix
114
+ const criticalFiles = changedFiles.filter((file)=>criticalPatterns.some((pattern)=>file === pattern || file.endsWith(`/${pattern}`)));
115
+ logger.debug('Found %d critical excluded files with changes: %s', criticalFiles.length, criticalFiles.join(', '));
116
+ return {
117
+ hasChanges: criticalFiles.length > 0,
118
+ files: criticalFiles
119
+ };
120
+ } catch (error) {
121
+ logger.debug('Error checking for critical excluded changes: %s', error.message);
122
+ return {
123
+ hasChanges: false,
124
+ files: []
125
+ };
126
+ }
127
+ };
128
+ // Get minimal excluded patterns that still includes critical files
129
+ const getMinimalExcludedPatterns = (basePatterns)=>{
130
+ const criticalPatterns = [
131
+ 'package-lock.json',
132
+ 'yarn.lock',
133
+ 'bun.lockb',
134
+ '.gitignore',
135
+ '.env.example'
136
+ ];
137
+ // Filter out critical patterns from base patterns
138
+ return basePatterns.filter((pattern)=>!criticalPatterns.some((critical)=>pattern === critical || pattern.includes(critical)));
139
+ };
100
140
  // Function to truncate overly large diff content while preserving structure
101
141
  const truncateLargeDiff = (diffContent, maxLength = 5000)=>{
102
142
  if (diffContent.length <= maxLength) {
@@ -120,6 +160,77 @@ const truncateLargeDiff = (diffContent, maxLength = 5000)=>{
120
160
  }
121
161
  return truncatedLines.join('\n');
122
162
  };
163
+ // Smart diff truncation that identifies and handles large files individually
164
+ const truncateDiffByFiles = (diffContent, maxDiffBytes)=>{
165
+ if (diffContent.length <= maxDiffBytes) {
166
+ return diffContent;
167
+ }
168
+ const lines = diffContent.split('\n');
169
+ const result = [];
170
+ let currentFile = [];
171
+ let currentFileHeader = '';
172
+ let totalSize = 0;
173
+ let filesOmitted = 0;
174
+ for (const line of lines){
175
+ // Check if this is a file header (starts with diff --git)
176
+ if (line.startsWith('diff --git ')) {
177
+ // Process the previous file if it exists
178
+ if (currentFile.length > 0) {
179
+ const fileContent = currentFile.join('\n');
180
+ const fileSizeBytes = Buffer.byteLength(fileContent, 'utf8');
181
+ if (fileSizeBytes > maxDiffBytes) {
182
+ // This single file is too large, replace with a summary
183
+ result.push(currentFileHeader);
184
+ result.push(`... [CHANGE OMITTED: File too large (${fileSizeBytes} bytes > ${maxDiffBytes} limit)] ...`);
185
+ result.push('');
186
+ filesOmitted++;
187
+ } else if (totalSize + fileSizeBytes > maxDiffBytes * 10) {
188
+ // Adding this file would make total too large
189
+ result.push(currentFileHeader);
190
+ result.push(`... [CHANGE OMITTED: Would exceed total size limit] ...`);
191
+ result.push('');
192
+ filesOmitted++;
193
+ } else {
194
+ // File is acceptable size
195
+ result.push(...currentFile);
196
+ totalSize += fileSizeBytes;
197
+ }
198
+ }
199
+ // Start new file
200
+ currentFileHeader = line;
201
+ currentFile = [
202
+ line
203
+ ];
204
+ } else {
205
+ // Add line to current file
206
+ currentFile.push(line);
207
+ }
208
+ }
209
+ // Handle the last file
210
+ if (currentFile.length > 0) {
211
+ const fileContent = currentFile.join('\n');
212
+ const fileSizeBytes = Buffer.byteLength(fileContent, 'utf8');
213
+ if (fileSizeBytes > maxDiffBytes) {
214
+ result.push(currentFileHeader);
215
+ result.push(`... [CHANGE OMITTED: File too large (${fileSizeBytes} bytes > ${maxDiffBytes} limit)] ...`);
216
+ result.push('');
217
+ filesOmitted++;
218
+ } else if (totalSize + fileSizeBytes > maxDiffBytes * 10) {
219
+ result.push(currentFileHeader);
220
+ result.push(`... [CHANGE OMITTED: Would exceed total size limit] ...`);
221
+ result.push('');
222
+ filesOmitted++;
223
+ } else {
224
+ result.push(...currentFile);
225
+ totalSize += fileSizeBytes;
226
+ }
227
+ }
228
+ const finalResult = result.join('\n');
229
+ if (filesOmitted > 0) {
230
+ return finalResult + `\n\n[SUMMARY: ${filesOmitted} files omitted due to size limits. Original diff: ${diffContent.length} bytes, processed diff: ${finalResult.length} bytes]`;
231
+ }
232
+ return finalResult;
233
+ };
123
234
  const create = async (options)=>{
124
235
  const logger = getLogger();
125
236
  async function get() {
@@ -149,6 +260,16 @@ const create = async (options)=>{
149
260
  logger.warn('Git diff produced stderr: %s', stderr);
150
261
  }
151
262
  logger.debug('Git diff output: %s', stdout);
263
+ // Apply intelligent diff truncation if maxDiffBytes is specified
264
+ if (options.maxDiffBytes && stdout.length > 0) {
265
+ const originalSize = Buffer.byteLength(stdout, 'utf8');
266
+ const truncatedDiff = truncateDiffByFiles(stdout, options.maxDiffBytes);
267
+ const newSize = Buffer.byteLength(truncatedDiff, 'utf8');
268
+ if (originalSize !== newSize) {
269
+ logger.info('Applied diff truncation: %d bytes -> %d bytes (limit: %d bytes)', originalSize, newSize, options.maxDiffBytes);
270
+ }
271
+ return truncatedDiff;
272
+ }
152
273
  return stdout;
153
274
  } catch (error) {
154
275
  logger.error('Failed to execute git diff: %s', error.message);
@@ -218,5 +339,5 @@ const getRecentDiffsForReview = async (options)=>{
218
339
  return diffSections.length > 0 ? '\n\n' + diffSections.join('\n\n') : '';
219
340
  };
220
341
 
221
- export { create, getRecentDiffsForReview, getReviewExcludedPatterns, hasStagedChanges, truncateLargeDiff };
342
+ export { create, getMinimalExcludedPatterns, getRecentDiffsForReview, getReviewExcludedPatterns, hasCriticalExcludedChanges, hasStagedChanges, truncateDiffByFiles, truncateLargeDiff };
222
343
  //# sourceMappingURL=diff.js.map