@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.
- package/README.md +2 -1
- package/dist/application.js +5 -3
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +97 -70
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +7 -7
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +13 -13
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +2 -2
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +301 -36
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/link.js +7 -7
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +285 -306
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +171 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +52 -40
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +4 -4
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +347 -34
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +5 -5
- package/dist/commands/unlink.js.map +1 -1
- package/dist/constants.js +28 -9
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js +122 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/issues.js +17 -46
- package/dist/content/issues.js.map +1 -1
- package/dist/logging.js +3 -3
- package/dist/logging.js.map +1 -1
- package/dist/prompt/commit.js +2 -2
- package/dist/prompt/commit.js.map +1 -1
- package/dist/prompt/release.js +2 -2
- package/dist/prompt/release.js.map +1 -1
- package/dist/prompt/review.js +2 -2
- package/dist/prompt/review.js.map +1 -1
- package/dist/types.js +18 -5
- package/dist/types.js.map +1 -1
- package/dist/util/child.js +60 -4
- package/dist/util/child.js.map +1 -1
- package/dist/util/general.js +149 -13
- package/dist/util/general.js.map +1 -1
- package/dist/util/github.js +12 -8
- package/dist/util/github.js.map +1 -1
- package/dist/util/interactive.js +297 -0
- package/dist/util/interactive.js.map +1 -0
- package/dist/util/openai.js +87 -8
- package/dist/util/openai.js.map +1 -1
- package/dist/util/performance.js +8 -8
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +4 -4
- package/dist/util/safety.js.map +1 -1
- package/dist/util/storage.js +2 -2
- package/dist/util/storage.js.map +1 -1
- package/package.json +6 -6
- package/test-increment.js +0 -0
package/dist/commands/unlink.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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":";;;;;;;AAkDA,MAAMA,oBAAAA,GAAuB,OAAOC,UAAAA,EAAoCC,OAAAA,GAAAA;AACpE,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,KAAAA,GAAQC,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,4BAAA,CAAA;AAC7C,IAAA,MAAMK,mBAA6B,EAAE;IAErCL,MAAAA,CAAOM,KAAK,CAAC,CAAC,6CAA6C,EAAEC,IAAAA,CAAKC,SAAS,CAACV,UAAAA,CAAAA,CAAAA,CAAa,CAAA;;AAGzF,IAAA,MAAMW,UAAAA,GAAaN,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,iDAAA,CAAA;IAClD,MAAMU,gBAAAA,GAAmB,IAAIC,GAAAA,EAAAA,CAAAA;;IAG7B,MAAMC,aAAAA,GAAgBC,MAAAA,CAAOC,OAAO,CAAChB,UAAAA,CAAAA,CAAYiB,GAAG,CAAC,OAAO,CAACC,KAAAA,EAAOC,OAAAA,CAAQ,GAAA;QACxEjB,MAAAA,CAAOkB,OAAO,CAAC,CAAC,eAAe,EAAEF,KAAAA,CAAM,oBAAoB,EAAEC,OAAAA,CAAAA,CAAS,CAAA;QACtE,MAAME,aAAAA,GAAgB,MAAMC,wBAAAA,CAAyBH,OAAAA,EAASlB,OAAAA,CAAAA;;AAG9D,QAAA,MAAMsB,eAAwC,EAAE;AAChD,QAAA,KAAK,MAAM,CAACC,WAAAA,EAAaC,WAAAA,CAAY,IAAIJ,aAAAA,CAAe;YACpD,IAAIG,WAAAA,CAAYE,UAAU,CAACR,KAAAA,CAAAA,EAAQ;AAC/BK,gBAAAA,YAAAA,CAAaI,IAAI,CAAC;AAACH,oBAAAA,WAAAA;AAAaC,oBAAAA;AAAY,iBAAA,CAAA;gBAC5CvB,MAAAA,CAAO0B,KAAK,CAAC,CAAC,mBAAmB,EAAEJ,WAAAA,CAAY,IAAI,EAAEC,WAAAA,CAAAA,CAAa,CAAA;AACtE,YAAA;AACJ,QAAA;QACA,OAAOF,YAAAA;AACX,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMM,eAAAA,GAAkB,MAAMC,OAAAA,CAAQC,GAAG,CAACjB,aAAAA,CAAAA;;IAG1C,KAAK,MAAMS,gBAAgBM,eAAAA,CAAiB;AACxC,QAAA,KAAK,MAAM,CAACL,WAAAA,EAAaC,WAAAA,CAAY,IAAIF,YAAAA,CAAc;YACnDX,gBAAAA,CAAiBoB,GAAG,CAACR,WAAAA,EAAaC,WAAAA,CAAAA;AAClClB,YAAAA,gBAAAA,CAAiBoB,IAAI,CAACH,WAAAA,CAAAA;AAC1B,QAAA;AACJ,IAAA;AAEAb,IAAAA,UAAAA,CAAWsB,GAAG,CAAC,CAAC,QAAQ,EAAElB,OAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYmC,MAAM,CAAC,oBAAoB,EAAE5B,iBAAiB4B,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAE3H/B,KAAAA,CAAM6B,GAAG,CAAC,CAAC,MAAM,EAAE1B,gBAAAA,CAAiB4B,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC/D,OAAO5B,gBAAAA;AACX,CAAA;AAEA,MAAM6B,iBAAiB,OAAOnC,OAAAA,GAAAA;AAC1B,IAAA,MAAMoC,aAAaC,IAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,4BAAA,CAAA;AAC5C,IAAA,IAAI,MAAMxC,OAAAA,CAAQyC,MAAM,CAACL,UAAAA,CAAAA,EAAa;QAClC,IAAI;AACA,YAAA,MAAMM,OAAAA,GAAU,MAAM1C,OAAAA,CAAQ2C,QAAQ,CAACP,UAAAA,EAAY,OAAA,CAAA;YACnD,MAAMQ,MAAAA,GAASC,cAAcH,OAAAA,EAAS,kBAAA,CAAA;AACtC,YAAA,OAAOI,kBAAAA,CAAmBF,MAAAA,CAAAA;AAC9B,QAAA,CAAA,CAAE,OAAOG,KAAAA,EAAO;YACZ,MAAM,IAAIC,KAAAA,CAAM,CAAC,kCAAkC,EAAED,iBAAiBC,KAAAA,GAAQD,KAAAA,CAAME,OAAO,GAAG,eAAA,CAAA,CAAiB,CAAA;AACnH,QAAA;AACJ,IAAA;AACA,IAAA,OAAO,EAAC;AACZ,CAAA;AAEA,MAAMC,eAAAA,GAAkB,OAAOC,MAAAA,EAAoBnD,OAAAA,GAAAA;AAC/C,IAAA,MAAMoC,aAAaC,IAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,4BAAA,CAAA;AAC5C,IAAA,IAAI1B,OAAOmB,IAAI,CAACkB,MAAAA,CAAAA,CAAQjB,MAAM,KAAK,CAAA,EAAG;;AAElC,QAAA,IAAI,MAAMlC,OAAAA,CAAQyC,MAAM,CAACL,UAAAA,CAAAA,EAAa;YAClC,MAAMpC,OAAAA,CAAQoD,UAAU,CAAChB,UAAAA,CAAAA;AAC7B,QAAA;IACJ,CAAA,MAAO;QACH,MAAMpC,OAAAA,CAAQqD,SAAS,CAACjB,UAAAA,EAAY5B,KAAKC,SAAS,CAAC0C,MAAAA,EAAQ,IAAA,EAAM,CAAA,CAAA,EAAI,OAAA,CAAA;AACzE,IAAA;AACJ,CAAA;AAEA,MAAMG,kBAAAA,GAAqB,OACvBC,mBAAAA,EACAjD,gBAAAA,EACA6C,MAAAA,EACAnD,OAAAA,GAAAA;AAEA,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,IAAIsD,aAAAA,GAAgB,CAAA;IACpB,MAAM,EAAEC,WAAW,EAAEpB,IAAAA,EAAMqB,eAAe,EAAEC,YAAY,EAAE,GAAGJ,mBAAAA;;IAG7D,KAAK,MAAMhC,eAAejB,gBAAAA,CAAkB;AAUrBsD,QAAAA,IAAAA,wBAAAA;AATnB,QAAA,MAAMC,SAAAA,GAAY,CAAA,EAAGF,YAAAA,CAAa,CAAC,EAAEpC,WAAAA,CAAAA,CAAa;QAClD,MAAMuC,WAAAA,GAAcX,MAAM,CAACU,SAAAA,CAAU;AAErC,QAAA,IAAI,CAACC,WAAAA,EAAa;AACd7D,YAAAA,MAAAA,CAAO0B,KAAK,CAAC,CAAC,oBAAoB,EAAEkC,SAAAA,CAAU,UAAU,CAAC,CAAA;AACzD,YAAA;AACJ,QAAA;AAEA,QAAA,MAAMD,cAAc,WAAoB,CAACE,WAAAA,CAAYC,cAAc,CAAC;QACpE,IAAIH,WAAAA,KAAAA,CAAeA,wBAAAA,GAAAA,WAAW,CAACrC,WAAAA,CAAY,cAAxBqC,wBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAAA,CAA0BnC,UAAU,CAAC,OAAA,CAAA,CAAA,EAAU;;AAE9DmC,YAAAA,WAAW,CAACrC,WAAAA,CAAY,GAAGuC,WAAAA,CAAYE,eAAe;AACtDR,YAAAA,aAAAA,EAAAA;AACAvD,YAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,SAAS,EAAEwC,YAAAA,CAAa,CAAC,EAAEG,WAAAA,CAAYC,cAAc,CAAC,CAAC,EAAExC,WAAAA,CAAY,cAAc,EAAEuC,WAAAA,CAAYE,eAAe,CAAA,CAAE,CAAA;;YAGlI,OAAOb,MAAM,CAACU,SAAAA,CAAU;AAC5B,QAAA;AACJ,IAAA;;IAGA,OAAOL,aAAAA;AACX,CAAA;AAEA;;IAGA,MAAMS,iCAAiC,CAACC,gBAAAA,GAAAA;AACpC,IAAA,MAAMjE,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,KAAAA,GAAQC,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,uCAAA,CAAA;AAC7C,IAAA,MAAMkE,kBAA2C,EAAE;IAEnD,KAAK,MAAM,EAAE9B,IAAAA,EAAMb,WAAW,EAAEiC,WAAW,EAAEE,YAAY,EAAE,IAAIO,gBAAAA,CAAkB;AAC7E,QAAA,MAAME,mBAAAA,GAAsBX,WAAAA;;AAG5B,QAAA,MAAMY,QAAAA,GAA4G;AAC9G,YAAA,cAAA;AAAgB,YAAA,iBAAA;AAAmB,YAAA;AACtC,SAAA;QAED,KAAK,MAAMC,WAAWD,QAAAA,CAAU;YAC5B,MAAME,IAAAA,GAAOH,mBAAmB,CAACE,OAAAA,CAAQ;AACzC,YAAA,IAAI,CAACC,IAAAA,EAAM;YAEX,KAAK,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,IAAI3D,MAAAA,CAAOC,OAAO,CAACwD,IAAAA,CAAAA,CAAO;AAChD,gBAAA,IAAIG,WAAAA,GAAoD,IAAA;AACxD,gBAAA,IAAIC,MAAAA,GAAS,EAAA;;gBAGb,IAAIF,OAAAA,CAAQhD,UAAU,CAAC,OAAA,CAAA,EAAU;oBAC7BiD,WAAAA,GAAc,OAAA;oBACdC,MAAAA,GAAS,8DAAA;AACb,gBAAA,CAAA,MAEK,IAAIF,OAAAA,CAAQhD,UAAU,CAAC,OAAA,CAAA,EAAU;oBAClCiD,WAAAA,GAAc,OAAA;oBACdC,MAAAA,GAAS,6DAAA;AACb,gBAAA,CAAA,MAEK,IAAIF,OAAAA,CAAQG,QAAQ,CAAC,KAAA,CAAA,IAAUH,OAAAA,CAAQG,QAAQ,CAAC,IAAA,CAAA,IAASH,OAAAA,CAAQhD,UAAU,CAAC,GAAA,CAAA,EAAM;oBACnFiD,WAAAA,GAAc,eAAA;oBACdC,MAAAA,GAAS,yEAAA;AACb,gBAAA,CAAA,MAEK,IAAIF,OAAAA,CAAQhD,UAAU,CAAC,YAAA,CAAA,EAAe;oBACvCiD,WAAAA,GAAc,WAAA;oBACdC,MAAAA,GAAS,iEAAA;AACb,gBAAA;AAEA,gBAAA,IAAID,WAAAA,EAAa;AACbP,oBAAAA,eAAAA,CAAgBzC,IAAI,CAAC;AACjB8C,wBAAAA,IAAAA;AACAC,wBAAAA,OAAAA;wBACAI,IAAAA,EAAMH,WAAAA;wBACNX,cAAAA,EAAgBO,OAAAA;wBAChB9C,WAAAA,EAAamC,YAAAA;AACbgB,wBAAAA;AACJ,qBAAA,CAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;;QAGA,IAAIP,mBAAAA,CAAoBU,UAAU,EAAE;AAChCX,YAAAA,eAAAA,CAAgBzC,IAAI,CAAC;gBACjB8C,IAAAA,EAAM,YAAA;AACNC,gBAAAA,OAAAA,EAASjE,IAAAA,CAAKC,SAAS,CAAC2D,mBAAAA,CAAoBU,UAAU,CAAA;gBACtDD,IAAAA,EAAM,WAAA;gBACNd,cAAAA,EAAgB,YAAA;gBAChBvC,WAAAA,EAAamC,YAAAA;gBACbgB,MAAAA,EAAQ;AACZ,aAAA,CAAA;AACJ,QAAA;;QAGA,IAAIP,mBAAAA,CAAoBW,SAAS,EAAE;YAC/B,KAAK,MAAM,CAACP,IAAAA,EAAMQ,QAAAA,CAAS,IAAIlE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBW,SAAS,CAAA,CAAG;AAC1E,gBAAA,IAAI,OAAOC,QAAAA,KAAa,QAAA,KAAaA,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASJ,QAAQ,CAAC,MAAK,CAAA,EAAI;AAC5HT,oBAAAA,eAAAA,CAAgBzC,IAAI,CAAC;AACjB8C,wBAAAA,IAAAA;wBACAC,OAAAA,EAASO,QAAAA;wBACTH,IAAAA,EAAM,UAAA;wBACNd,cAAAA,EAAgB,WAAA;wBAChBvC,WAAAA,EAAamC,YAAAA;wBACbgB,MAAAA,EAAQ;AACZ,qBAAA,CAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;;QAGA,IAAIP,mBAAAA,CAAoBa,WAAW,EAAE;YACjC,KAAK,MAAM,CAACT,IAAAA,EAAMU,UAAAA,CAAW,IAAIpE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBa,WAAW,CAAA,CAAG;AAC9E,gBAAA,IAAI,OAAOC,UAAAA,KAAe,QAAA,KAAaA,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWN,QAAQ,CAAC,MAAK,CAAA,EAAI;AACpIT,oBAAAA,eAAAA,CAAgBzC,IAAI,CAAC;AACjB8C,wBAAAA,IAAAA;wBACAC,OAAAA,EAASS,UAAAA;wBACTL,IAAAA,EAAM,YAAA;wBACNd,cAAAA,EAAgB,aAAA;wBAChBvC,WAAAA,EAAamC,YAAAA;wBACbgB,MAAAA,EAAQ;AACZ,qBAAA,CAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;AACJ,IAAA;IAEAxE,KAAAA,CAAM6B,GAAG,CAAC,CAAC,MAAM,EAAEmC,eAAAA,CAAgBjC,MAAM,CAAC,yBAAyB,CAAC,CAAA;IACpE,OAAOiC,eAAAA;AACX,CAAA;AAEA;;IAGA,MAAMgB,iCAAiC,CAAChB,eAAAA,GAAAA;AACpC,IAAA,MAAMlE,MAAAA,GAASC,SAAAA,EAAAA;IAEf,IAAIiE,eAAAA,CAAgBjC,MAAM,KAAK,CAAA,EAAG;AAC9BjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,qCAAA,CAAA;AACZ,QAAA;AACJ,IAAA;AAEAnF,IAAAA,MAAAA,CAAOmF,IAAI,CAAC,2EAAA,CAAA;;AAGZ,IAAA,MAAMC,OAAAA,GAAUlB,eAAAA,CAAgBmB,MAAM,CAAC,CAACC,GAAAA,EAAKC,GAAAA,GAAAA;AACzC,QAAA,IAAI,CAACD,GAAG,CAACC,GAAAA,CAAIhE,WAAW,CAAC,EAAE;AACvB+D,YAAAA,GAAG,CAACC,GAAAA,CAAIhE,WAAW,CAAC,GAAG,EAAE;AAC7B,QAAA;AACA+D,QAAAA,GAAG,CAACC,GAAAA,CAAIhE,WAAW,CAAC,CAACE,IAAI,CAAC8D,GAAAA,CAAAA;QAC1B,OAAOD,GAAAA;AACX,IAAA,CAAA,EAAG,EAAC,CAAA;IAEJ,KAAK,MAAM,CAAC/D,WAAAA,EAAa+C,IAAAA,CAAK,IAAIzD,MAAAA,CAAOC,OAAO,CAACsE,OAAAA,CAAAA,CAAU;AACvDpF,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,KAAK,EAAE5D,WAAAA,CAAY,CAAC,CAAC,CAAA;QAClC,KAAK,MAAMgE,OAAOjB,IAAAA,CAAM;YACpBtE,MAAAA,CAAOmF,IAAI,CAAC,CAAC,MAAM,EAAEI,IAAIzB,cAAc,CAAC,CAAC,EAAEyB,GAAAA,CAAIhB,IAAI,CAAC,EAAE,EAAEgB,GAAAA,CAAIf,OAAO,CAAC,EAAE,EAAEe,GAAAA,CAAIX,IAAI,CAAC,CAAC,CAAC,CAAA;AACnF5E,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,UAAU,EAAEI,GAAAA,CAAIb,MAAM,CAAA,CAAE,CAAA;AACzC,QAAA;AACJ,IAAA;AACJ,CAAA;AAEA;;IAGA,MAAMc,gBAAgB,OAAOvB,gBAAAA,GAAAA;AACzB,IAAA,MAAMjE,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,KAAAA,GAAQC,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,8BAAA,CAAA;AAE7C,IAAA,MAAMyF,oBAAoBzB,8BAAAA,CAA+BC,gBAAAA,CAAAA;IAEzD,IAAIwB,iBAAAA,CAAkBxD,MAAM,KAAK,CAAA,EAAG;AAChCjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,2DAAA,CAAA;AACZjF,QAAAA,KAAAA,CAAM6B,GAAG,CAAC,yBAAA,CAAA;QACV,OAAO,IAAA;IACX,CAAA,MAAO;AACH/B,QAAAA,MAAAA,CAAO0F,IAAI,CAAC,kEAAA,CAAA;QACZR,8BAAAA,CAA+BO,iBAAAA,CAAAA;AAC/BvF,QAAAA,KAAAA,CAAM6B,GAAG,CAAC,qBAAA,CAAA;QACV,OAAO,KAAA;AACX,IAAA;AACJ,CAAA;AAEO,MAAM4D,UAAU,OAAOC,SAAAA,GAAAA;AACWA,IAAAA,IAAAA,iBAAAA,EASlBA,oBAAgCA,eAAAA,EACzBA,kBAAAA;IAV1B,MAAMC,QAAAA,GAAWD,SAAAA,CAAUE,MAAM,KAAA,CAAIF,iBAAAA,GAAAA,SAAAA,CAAUG,MAAM,MAAA,IAAA,IAAhBH,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAkBE,MAAM,CAAA,IAAI,KAAA;AACjE,IAAA,MAAM9F,SAASgG,eAAAA,CAAgBH,QAAAA,CAAAA;AAC/B,IAAA,MAAMI,YAAAA,GAAe9F,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,0BAAA,CAAA;AACpD,IAAA,MAAMD,UAAUmG,MAAAA,CAAc;AAAEC,QAAAA,GAAAA,EAAKnG,OAAOmF;AAAK,KAAA,CAAA;AAEjDnF,IAAAA,MAAAA,CAAOmF,IAAI,CAAC,6EAAA,CAAA;;AAGZ,IAAA,MAAMiB,WAAAA,GAAcjG,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,uBAAA,CAAA;AACnD,IAAA,MAAMF,aAAa8F,CAAAA,CAAAA,kBAAAA,GAAAA,UAAUG,MAAM,MAAA,IAAA,IAAhBH,yCAAAA,kBAAAA,CAAkB9F,UAAU,MAAA,CAAI8F,eAAAA,GAAAA,UAAUS,IAAI,MAAA,IAAA,IAAdT,sCAAAA,eAAAA,CAAgB9F,UAAU,KAAI,EAAC;IACxD8F,EAAAA,kBAAAA,GAAAA,SAAAA,CAAUG,MAAM,MAAA,IAAA,IAAhBH,kBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAAA,CAAkBU,aAAa,KAAI;AAC7DF,IAAAA,WAAAA,CAAYrE,GAAG,CAAC,sBAAA,CAAA;AAEhB,IAAA,IAAIlB,OAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYmC,MAAM,KAAK,CAAA,EAAG;AACtCjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,sDAAA,CAAA;AACZc,QAAAA,YAAAA,CAAalE,GAAG,CAAC,iCAAA,CAAA;QACjB,OAAO,sDAAA;AACX,IAAA;;AAGA,IAAA,MAAMkC,gBAAAA,GAAmB,MAAMsC,uBAAAA,CAAwBjE,OAAAA,CAAQC,GAAG,EAAA,EAAIxC,OAAAA,CAAAA;IAEtE,IAAIkE,gBAAAA,CAAiBhC,MAAM,KAAK,CAAA,EAAG;AAC/B,QAAA,MAAM,IAAIc,KAAAA,CAAM,qEAAA,CAAA;AACpB,IAAA;IAEA/C,MAAAA,CAAOmF,IAAI,CAAC,CAAC,MAAM,EAAElB,gBAAAA,CAAiBhC,MAAM,CAAC,gCAAgC,CAAC,CAAA;AAC9EjC,IAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,SAAS,EAAEtE,MAAAA,CAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYmC,MAAM,CAAC,gBAAgB,EAAEpB,MAAAA,CAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYuC,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;;AAG7G,IAAA,MAAM6B,kBAAkBF,8BAAAA,CAA+BC,gBAAAA,CAAAA;IACvDiB,8BAAAA,CAA+BhB,eAAAA,CAAAA;;IAG/B,MAAMsC,qBAAAA,GAAwB,MAAM3G,oBAAAA,CAAqBC,UAAAA,EAAYC,OAAAA,CAAAA;AAErE,IAAA,IAAIyG,sBAAsBvE,MAAM,KAAK,KAAKiC,eAAAA,CAAgBjC,MAAM,KAAK,CAAA,EAAG;AACpEjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,kGAAA,CAAA;AACZc,QAAAA,YAAAA,CAAalE,GAAG,CAAC,mCAAA,CAAA;QACjB,OAAO,gGAAA;AACX,IAAA;AAEA/B,IAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,MAAM,EAAEsF,qBAAAA,CAAsBvE,MAAM,CAAC,kCAAkC,EAAEuE,qBAAAA,CAAsBnE,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;;AAG3H,IAAA,MAAMoE,WAAAA,GAActG,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,qBAAA,CAAA;IACnD,MAAMkD,MAAAA,GAAS,MAAMhB,cAAAA,CAAenC,OAAAA,CAAAA;AACpC0G,IAAAA,WAAAA,CAAY1E,GAAG,CAAC,oBAAA,CAAA;AAEhB,IAAA,IAAI8D,QAAAA,EAAU;AACV7F,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,wFAAA,CAAA;;AAGZ,QAAA,IAAIuB,WAAAA,GAAc,CAAA;QAClB,KAAK,MAAMpF,eAAekF,qBAAAA,CAAuB;AAC7C,YAAA,KAAK,MAAM,EAAE9C,YAAY,EAAE,IAAIO,gBAAAA,CAAkB;AAC7C,gBAAA,MAAML,SAAAA,GAAY,CAAA,EAAGF,YAAAA,CAAa,CAAC,EAAEpC,WAAAA,CAAAA,CAAa;gBAClD,MAAMuC,WAAAA,GAAcX,MAAM,CAACU,SAAAA,CAAU;AACrC,gBAAA,IAAIC,WAAAA,EAAa;AACb7D,oBAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,cAAc,EAAEwC,YAAAA,CAAa,CAAC,EAAEpC,WAAAA,CAAY,cAAc,EAAEuC,WAAAA,CAAYE,eAAe,CAAA,CAAE,CAAA;AACzG2C,oBAAAA,WAAAA,EAAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;;QAGA,IAAIxC,eAAAA,CAAgBjC,MAAM,GAAG,CAAA,EAAG;YAC5BjC,MAAAA,CAAOkB,OAAO,CAAC,CAAC,eAAe,EAAEgD,eAAAA,CAAgBjC,MAAM,CAAC,yBAAyB,CAAC,CAAA;AACtF,QAAA;AAEAgE,QAAAA,YAAAA,CAAalE,GAAG,CAAC,0BAAA,CAAA;AACjB,QAAA,OAAO,CAAC,sBAAsB,EAAE2E,WAAAA,CAAY,sCAAsC,EAAExC,eAAAA,CAAgBjC,MAAM,CAAC,iCAAiC,EAAEgC,gBAAAA,CAAiBhC,MAAM,CAAC,mBAAmB,CAAC;IAC9L,CAAA,MAAO;AAsGsB2D,QAAAA,IAAAA,kBAAAA;;AApGzB,QAAA,IAAIe,kBAAAA,GAAqB,CAAA;AACzB,QAAA,IAAIC,iBAAAA,GAAoB,CAAA;QAExB,KAAK,MAAMtD,uBAAuBW,gBAAAA,CAAkB;YAChD,MAAM,EAAET,WAAW,EAAEpB,IAAAA,EAAMqB,eAAe,EAAEC,YAAY,EAAE,GAAGJ,mBAAAA;AAC7D,YAAA,IAAIuD,QAAAA,GAAW,KAAA;;AAGf,YAAA,MAAMtD,aAAAA,GAAgB,MAAMF,kBAAAA,CAAmBC,mBAAAA,EAAqBkD,uBAAuBtD,MAAQnD,CAAAA;YACnG4G,kBAAAA,IAAsBpD,aAAAA;YACtB,IAAIA,aAAAA,GAAgB,GAAGsD,QAAAA,GAAW,IAAA;;AAGlC,YAAA,MAAM1C,mBAAAA,GAAsBX,WAAAA;;YAG5B,IAAIW,mBAAAA,CAAoBU,UAAU,EAAE;AAChC,gBAAA,OAAOV,oBAAoBU,UAAU;AACrC7E,gBAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,qCAAqC,EAAEwC,YAAAA,CAAAA,CAAc,CAAA;gBACrEmD,QAAAA,GAAW,IAAA;AACXD,gBAAAA,iBAAAA,EAAAA;AACJ,YAAA;;YAGA,IAAIzC,mBAAAA,CAAoBW,SAAS,EAAE;AAC/B,gBAAA,MAAMgC,iBAAsC,EAAC;AAC7C,gBAAA,IAAIC,iBAAAA,GAAoB,KAAA;gBAExB,KAAK,MAAM,CAACxC,IAAAA,EAAMQ,QAAAA,CAAS,IAAIlE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBW,SAAS,CAAA,CAAG;AAC1E,oBAAA,IAAI,OAAOC,QAAAA,KAAa,QAAA,KAAaA,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASJ,QAAQ,CAAC,MAAK,CAAA,EAAI;wBAC5H3E,MAAAA,CAAOkB,OAAO,CAAC,CAAC,6BAA6B,EAAEwC,YAAAA,CAAa,WAAW,EAAEa,IAAAA,CAAK,EAAE,EAAEQ,QAAAA,CAAAA,CAAU,CAAA;wBAC5FgC,iBAAAA,GAAoB,IAAA;AACpBH,wBAAAA,iBAAAA,EAAAA;oBACJ,CAAA,MAAO;wBACHE,cAAc,CAACvC,KAAK,GAAGQ,QAAAA;AAC3B,oBAAA;AACJ,gBAAA;AAEA,gBAAA,IAAIgC,iBAAAA,EAAmB;AACnB,oBAAA,IAAIlG,OAAOmB,IAAI,CAAC8E,cAAAA,CAAAA,CAAgB7E,MAAM,KAAK,CAAA,EAAG;AAC1C,wBAAA,OAAOkC,oBAAoBW,SAAS;oBACxC,CAAA,MAAO;AACHX,wBAAAA,mBAAAA,CAAoBW,SAAS,GAAGgC,cAAAA;AACpC,oBAAA;oBACAD,QAAAA,GAAW,IAAA;AACf,gBAAA;AACJ,YAAA;;YAGA,IAAI1C,mBAAAA,CAAoBa,WAAW,EAAE;AACjC,gBAAA,MAAMgC,mBAAwC,EAAC;AAC/C,gBAAA,IAAIC,mBAAAA,GAAsB,KAAA;gBAE1B,KAAK,MAAM,CAAC1C,IAAAA,EAAMU,UAAAA,CAAW,IAAIpE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBa,WAAW,CAAA,CAAG;AAC9E,oBAAA,IAAI,OAAOC,UAAAA,KAAe,QAAA,KAAaA,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWN,QAAQ,CAAC,MAAK,CAAA,EAAI;wBACpI3E,MAAAA,CAAOkB,OAAO,CAAC,CAAC,+BAA+B,EAAEwC,YAAAA,CAAa,aAAa,EAAEa,IAAAA,CAAK,EAAE,EAAEU,UAAAA,CAAAA,CAAY,CAAA;wBAClGgC,mBAAAA,GAAsB,IAAA;AACtBL,wBAAAA,iBAAAA,EAAAA;oBACJ,CAAA,MAAO;wBACHI,gBAAgB,CAACzC,KAAK,GAAGU,UAAAA;AAC7B,oBAAA;AACJ,gBAAA;AAEA,gBAAA,IAAIgC,mBAAAA,EAAqB;AACrB,oBAAA,IAAIpG,OAAOmB,IAAI,CAACgF,gBAAAA,CAAAA,CAAkB/E,MAAM,KAAK,CAAA,EAAG;AAC5C,wBAAA,OAAOkC,oBAAoBa,WAAW;oBAC1C,CAAA,MAAO;AACHb,wBAAAA,mBAAAA,CAAoBa,WAAW,GAAGgC,gBAAAA;AACtC,oBAAA;oBACAH,QAAAA,GAAW,IAAA;AACf,gBAAA;AACJ,YAAA;;AAGA,YAAA,IAAIA,QAAAA,EAAU;gBACV,MAAM9G,OAAAA,CAAQqD,SAAS,CAACK,eAAAA,EAAiBlD,KAAKC,SAAS,CAACgD,WAAAA,EAAa,IAAA,EAAM,CAAA,CAAA,EAAI,OAAA,CAAA;AACnF,YAAA;AACJ,QAAA;;AAGA,QAAA,MAAMP,gBAAgBC,MAAAA,EAAQnD,OAAAA,CAAAA;QAE9B,IAAI4G,kBAAAA,KAAuB,CAAA,IAAKC,iBAAAA,KAAsB,CAAA,EAAG;AACrD5G,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,uDAAA,CAAA;AACZc,YAAAA,YAAAA,CAAalE,GAAG,CAAC,mCAAA,CAAA;YACjB,OAAO,qDAAA;AACX,QAAA;AAEA/B,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,WAAW,EAAEwB,kBAAAA,CAAmB,yBAAyB,EAAEC,iBAAAA,CAAkB,uCAAuC,EAAE3C,gBAAAA,CAAiBhC,MAAM,CAAC,qBAAqB,CAAC,CAAA;;;AAIjLjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,yEAAA,CAAA;AACZ,QAAA,MAAM+B,kBAAkB9E,IAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,mBAAA,CAAA;AACjD,QAAA,IAAI,MAAMxC,OAAAA,CAAQyC,MAAM,CAAC0E,eAAAA,CAAAA,EAAkB;YACvC,MAAMnH,OAAAA,CAAQoD,UAAU,CAAC+D,eAAAA,CAAAA;AACzBlH,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,qDAAA,CAAA;AAChB,QAAA;;QAGA,MAAMgC,gBAAAA,GAAmBvB,CAAAA,CAAAA,kBAAAA,GAAAA,SAAAA,CAAUG,MAAM,MAAA,IAAA,IAAhBH,kBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAAA,CAAkBuB,gBAAgB,MAAK,KAAA,CAAA;AAChE,QAAA,IAAIA,gBAAAA,EAAkB;AAClBnH,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,yDAAA,CAAA;AACZ,YAAA,MAAMiC,kBAAkBhF,IAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,cAAA,CAAA;AACjD,YAAA,IAAI,MAAMxC,OAAAA,CAAQyC,MAAM,CAAC4E,eAAAA,CAAAA,EAAkB;gBACvC,IAAI;oBACA,MAAMrH,OAAAA,CAAQsH,eAAe,CAACD,eAAAA,CAAAA;AAC9BpH,oBAAAA,MAAAA,CAAOmF,IAAI,CAAC,oCAAA,CAAA;AAChB,gBAAA,CAAA,CAAE,OAAOrC,KAAAA,EAAY;oBACjB9C,MAAAA,CAAO0F,IAAI,CAAC,CAAC,+BAA+B,EAAE5C,KAAAA,CAAME,OAAO,CAAC,gBAAgB,CAAC,CAAA;AACjF,gBAAA;AACJ,YAAA;AACJ,QAAA;;AAGA,QAAA,MAAMsE,uBAAAA,GAA0B,MAAMf,uBAAAA,CAAwBjE,OAAAA,CAAQC,GAAG,EAAA,EAAIxC,OAAAA,CAAAA;;QAG7E,MAAMwH,kBAAAA,GAAqB,MAAM/B,aAAAA,CAAc8B,uBAAAA,CAAAA;AAE/C,QAAA,IAAI,CAACC,kBAAAA,EAAoB;AACrBvH,YAAAA,MAAAA,CAAO0F,IAAI,CAAC,oFAAA,CAAA;AAChB,QAAA;;AAGA1F,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,0FAAA,CAAA;QACZ,IAAI;YACA,MAAMqC,aAAAA,GAAgB,MAAMC,eAAAA,CAAgB;gBACxCC,eAAAA,EAAiB,KAAA;gBACjBC,QAAAA,EAAU,KAAA;gBACVzG,OAAAA,EAAS;AACb,aAAA,CAAA;YAEA,IAAIsG,aAAAA,CAAcI,OAAO,EAAE;gBACvB5H,MAAAA,CAAOmF,IAAI,CAAC,CAAC,gCAAgC,EAAEqC,aAAAA,CAAcK,MAAM,CAAC,CAAC,CAAC,CAAA;YAC1E,CAAA,MAAO;AACH7H,gBAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,qCAAqC,EAAEqC,aAAAA,CAAcK,MAAM,CAAC,EAAE,EAAEL,aAAAA,CAAcM,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC5G,YAAA;AACJ,QAAA,CAAA,CAAE,OAAOhF,KAAAA,EAAO;AACZ9C,YAAAA,MAAAA,CAAO0F,IAAI,CAAC,CAAC,gCAAgC,EAAE5C,KAAAA,CAAM,6CAA6C,CAAC,CAAA;AACvG,QAAA;AAEA,QAAA,MAAMiF,OAAAA,GAAU,CAAC,wBAAwB,EAAEpB,mBAAmB,yBAAyB,EAAEC,iBAAAA,CAAkB,uCAAuC,EAAE3C,gBAAAA,CAAiBhC,MAAM,CAAC,qBAAqB,CAAC;AAClMgE,QAAAA,YAAAA,CAAalE,GAAG,CAAC,0BAAA,CAAA;QACjB,OAAOgG,OAAAA;AACX,IAAA;AACJ;;;;"}
|
|
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":";;;;;;;AAkDA,MAAMA,oBAAAA,GAAuB,OAAOC,UAAAA,EAAoCC,OAAAA,GAAAA;AACpE,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,KAAAA,GAAQC,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,4BAAA,CAAA;AAC7C,IAAA,MAAMK,mBAA6B,EAAE;IAErCL,MAAAA,CAAOM,KAAK,CAAC,CAAC,6CAA6C,EAAEC,IAAAA,CAAKC,SAAS,CAACV,UAAAA,CAAAA,CAAAA,CAAa,CAAA;;AAGzF,IAAA,MAAMW,UAAAA,GAAaN,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,iDAAA,CAAA;IAClD,MAAMU,gBAAAA,GAAmB,IAAIC,GAAAA,EAAAA,CAAAA;;IAG7B,MAAMC,aAAAA,GAAgBC,MAAAA,CAAOC,OAAO,CAAChB,UAAAA,CAAAA,CAAYiB,GAAG,CAAC,OAAO,CAACC,KAAAA,EAAOC,OAAAA,CAAQ,GAAA;QACxEjB,MAAAA,CAAOkB,OAAO,CAAC,CAAC,eAAe,EAAEF,KAAAA,CAAM,oBAAoB,EAAEC,OAAAA,CAAAA,CAAS,CAAA;QACtE,MAAME,aAAAA,GAAgB,MAAMC,wBAAAA,CAAyBH,OAAAA,EAASlB,OAAAA,CAAAA;;AAG9D,QAAA,MAAMsB,eAAwC,EAAE;AAChD,QAAA,KAAK,MAAM,CAACC,WAAAA,EAAaC,WAAAA,CAAY,IAAIJ,aAAAA,CAAe;YACpD,IAAIG,WAAAA,CAAYE,UAAU,CAACR,KAAAA,CAAAA,EAAQ;AAC/BK,gBAAAA,YAAAA,CAAaI,IAAI,CAAC;AAACH,oBAAAA,WAAAA;AAAaC,oBAAAA;AAAY,iBAAA,CAAA;gBAC5CvB,MAAAA,CAAO0B,KAAK,CAAC,CAAC,mBAAmB,EAAEJ,WAAAA,CAAY,IAAI,EAAEC,WAAAA,CAAAA,CAAa,CAAA;AACtE,YAAA;AACJ,QAAA;QACA,OAAOF,YAAAA;AACX,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMM,eAAAA,GAAkB,MAAMC,OAAAA,CAAQC,GAAG,CAACjB,aAAAA,CAAAA;;IAG1C,KAAK,MAAMS,gBAAgBM,eAAAA,CAAiB;AACxC,QAAA,KAAK,MAAM,CAACL,WAAAA,EAAaC,WAAAA,CAAY,IAAIF,YAAAA,CAAc;YACnDX,gBAAAA,CAAiBoB,GAAG,CAACR,WAAAA,EAAaC,WAAAA,CAAAA;AAClClB,YAAAA,gBAAAA,CAAiBoB,IAAI,CAACH,WAAAA,CAAAA;AAC1B,QAAA;AACJ,IAAA;AAEAb,IAAAA,UAAAA,CAAWsB,GAAG,CAAC,CAAC,QAAQ,EAAElB,OAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYmC,MAAM,CAAC,oBAAoB,EAAE5B,iBAAiB4B,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAE3H/B,KAAAA,CAAM6B,GAAG,CAAC,CAAC,MAAM,EAAE1B,gBAAAA,CAAiB4B,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC/D,OAAO5B,gBAAAA;AACX,CAAA;AAEA,MAAM6B,iBAAiB,OAAOnC,OAAAA,GAAAA;AAC1B,IAAA,MAAMoC,aAAaC,aAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,4BAAA,CAAA;AAC5C,IAAA,IAAI,MAAMxC,OAAAA,CAAQyC,MAAM,CAACL,UAAAA,CAAAA,EAAa;QAClC,IAAI;AACA,YAAA,MAAMM,OAAAA,GAAU,MAAM1C,OAAAA,CAAQ2C,QAAQ,CAACP,UAAAA,EAAY,OAAA,CAAA;YACnD,MAAMQ,MAAAA,GAASC,cAAcH,OAAAA,EAAS,kBAAA,CAAA;AACtC,YAAA,OAAOI,kBAAAA,CAAmBF,MAAAA,CAAAA;AAC9B,QAAA,CAAA,CAAE,OAAOG,KAAAA,EAAO;YACZ,MAAM,IAAIC,KAAAA,CAAM,CAAC,kCAAkC,EAAED,iBAAiBC,KAAAA,GAAQD,KAAAA,CAAME,OAAO,GAAG,eAAA,CAAA,CAAiB,CAAA;AACnH,QAAA;AACJ,IAAA;AACA,IAAA,OAAO,EAAC;AACZ,CAAA;AAEA,MAAMC,eAAAA,GAAkB,OAAOC,MAAAA,EAAoBnD,OAAAA,GAAAA;AAC/C,IAAA,MAAMoC,aAAaC,aAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,4BAAA,CAAA;AAC5C,IAAA,IAAI1B,OAAOmB,IAAI,CAACkB,MAAAA,CAAAA,CAAQjB,MAAM,KAAK,CAAA,EAAG;;AAElC,QAAA,IAAI,MAAMlC,OAAAA,CAAQyC,MAAM,CAACL,UAAAA,CAAAA,EAAa;YAClC,MAAMpC,OAAAA,CAAQoD,UAAU,CAAChB,UAAAA,CAAAA;AAC7B,QAAA;IACJ,CAAA,MAAO;QACH,MAAMpC,OAAAA,CAAQqD,SAAS,CAACjB,UAAAA,EAAY5B,KAAKC,SAAS,CAAC0C,MAAAA,EAAQ,IAAA,EAAM,CAAA,CAAA,EAAI,OAAA,CAAA;AACzE,IAAA;AACJ,CAAA;AAEA,MAAMG,kBAAAA,GAAqB,OACvBC,mBAAAA,EACAjD,gBAAAA,EACA6C,MAAAA,EACAnD,OAAAA,GAAAA;AAEA,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,IAAIsD,aAAAA,GAAgB,CAAA;IACpB,MAAM,EAAEC,WAAW,EAAEpB,IAAAA,EAAMqB,eAAe,EAAEC,YAAY,EAAE,GAAGJ,mBAAAA;;IAG7D,KAAK,MAAMhC,eAAejB,gBAAAA,CAAkB;AAUrBsD,QAAAA,IAAAA,wBAAAA;AATnB,QAAA,MAAMC,SAAAA,GAAY,CAAA,EAAGF,YAAAA,CAAa,CAAC,EAAEpC,WAAAA,CAAAA,CAAa;QAClD,MAAMuC,WAAAA,GAAcX,MAAM,CAACU,SAAAA,CAAU;AAErC,QAAA,IAAI,CAACC,WAAAA,EAAa;AACd7D,YAAAA,MAAAA,CAAO0B,KAAK,CAAC,CAAC,oBAAoB,EAAEkC,SAAAA,CAAU,UAAU,CAAC,CAAA;AACzD,YAAA;AACJ,QAAA;AAEA,QAAA,MAAMD,cAAc,WAAoB,CAACE,WAAAA,CAAYC,cAAc,CAAC;QACpE,IAAIH,WAAAA,KAAAA,CAAeA,wBAAAA,GAAAA,WAAW,CAACrC,WAAAA,CAAY,cAAxBqC,wBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAAA,CAA0BnC,UAAU,CAAC,OAAA,CAAA,CAAA,EAAU;;AAE9DmC,YAAAA,WAAW,CAACrC,WAAAA,CAAY,GAAGuC,WAAAA,CAAYE,eAAe;AACtDR,YAAAA,aAAAA,EAAAA;AACAvD,YAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,SAAS,EAAEwC,YAAAA,CAAa,CAAC,EAAEG,WAAAA,CAAYC,cAAc,CAAC,CAAC,EAAExC,WAAAA,CAAY,cAAc,EAAEuC,WAAAA,CAAYE,eAAe,CAAA,CAAE,CAAA;;YAGlI,OAAOb,MAAM,CAACU,SAAAA,CAAU;AAC5B,QAAA;AACJ,IAAA;;IAGA,OAAOL,aAAAA;AACX,CAAA;AAEA;;IAGA,MAAMS,iCAAiC,CAACC,gBAAAA,GAAAA;AACpC,IAAA,MAAMjE,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,KAAAA,GAAQC,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,uCAAA,CAAA;AAC7C,IAAA,MAAMkE,kBAA2C,EAAE;IAEnD,KAAK,MAAM,EAAE9B,IAAAA,EAAMb,WAAW,EAAEiC,WAAW,EAAEE,YAAY,EAAE,IAAIO,gBAAAA,CAAkB;AAC7E,QAAA,MAAME,mBAAAA,GAAsBX,WAAAA;;AAG5B,QAAA,MAAMY,QAAAA,GAA4G;AAC9G,YAAA,cAAA;AAAgB,YAAA,iBAAA;AAAmB,YAAA;AACtC,SAAA;QAED,KAAK,MAAMC,WAAWD,QAAAA,CAAU;YAC5B,MAAME,IAAAA,GAAOH,mBAAmB,CAACE,OAAAA,CAAQ;AACzC,YAAA,IAAI,CAACC,IAAAA,EAAM;YAEX,KAAK,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,IAAI3D,MAAAA,CAAOC,OAAO,CAACwD,IAAAA,CAAAA,CAAO;AAChD,gBAAA,IAAIG,WAAAA,GAAoD,IAAA;AACxD,gBAAA,IAAIC,MAAAA,GAAS,EAAA;;gBAGb,IAAIF,OAAAA,CAAQhD,UAAU,CAAC,OAAA,CAAA,EAAU;oBAC7BiD,WAAAA,GAAc,OAAA;oBACdC,MAAAA,GAAS,8DAAA;AACb,gBAAA,CAAA,MAEK,IAAIF,OAAAA,CAAQhD,UAAU,CAAC,OAAA,CAAA,EAAU;oBAClCiD,WAAAA,GAAc,OAAA;oBACdC,MAAAA,GAAS,6DAAA;AACb,gBAAA,CAAA,MAEK,IAAIF,OAAAA,CAAQG,QAAQ,CAAC,KAAA,CAAA,IAAUH,OAAAA,CAAQG,QAAQ,CAAC,IAAA,CAAA,IAASH,OAAAA,CAAQhD,UAAU,CAAC,GAAA,CAAA,EAAM;oBACnFiD,WAAAA,GAAc,eAAA;oBACdC,MAAAA,GAAS,yEAAA;AACb,gBAAA,CAAA,MAEK,IAAIF,OAAAA,CAAQhD,UAAU,CAAC,YAAA,CAAA,EAAe;oBACvCiD,WAAAA,GAAc,WAAA;oBACdC,MAAAA,GAAS,iEAAA;AACb,gBAAA;AAEA,gBAAA,IAAID,WAAAA,EAAa;AACbP,oBAAAA,eAAAA,CAAgBzC,IAAI,CAAC;AACjB8C,wBAAAA,IAAAA;AACAC,wBAAAA,OAAAA;wBACAI,IAAAA,EAAMH,WAAAA;wBACNX,cAAAA,EAAgBO,OAAAA;wBAChB9C,WAAAA,EAAamC,YAAAA;AACbgB,wBAAAA;AACJ,qBAAA,CAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;;QAGA,IAAIP,mBAAAA,CAAoBU,UAAU,EAAE;AAChCX,YAAAA,eAAAA,CAAgBzC,IAAI,CAAC;gBACjB8C,IAAAA,EAAM,YAAA;AACNC,gBAAAA,OAAAA,EAASjE,IAAAA,CAAKC,SAAS,CAAC2D,mBAAAA,CAAoBU,UAAU,CAAA;gBACtDD,IAAAA,EAAM,WAAA;gBACNd,cAAAA,EAAgB,YAAA;gBAChBvC,WAAAA,EAAamC,YAAAA;gBACbgB,MAAAA,EAAQ;AACZ,aAAA,CAAA;AACJ,QAAA;;QAGA,IAAIP,mBAAAA,CAAoBW,SAAS,EAAE;YAC/B,KAAK,MAAM,CAACP,IAAAA,EAAMQ,QAAAA,CAAS,IAAIlE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBW,SAAS,CAAA,CAAG;AAC1E,gBAAA,IAAI,OAAOC,QAAAA,KAAa,QAAA,KAAaA,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASJ,QAAQ,CAAC,MAAK,CAAA,EAAI;AAC5HT,oBAAAA,eAAAA,CAAgBzC,IAAI,CAAC;AACjB8C,wBAAAA,IAAAA;wBACAC,OAAAA,EAASO,QAAAA;wBACTH,IAAAA,EAAM,UAAA;wBACNd,cAAAA,EAAgB,WAAA;wBAChBvC,WAAAA,EAAamC,YAAAA;wBACbgB,MAAAA,EAAQ;AACZ,qBAAA,CAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;;QAGA,IAAIP,mBAAAA,CAAoBa,WAAW,EAAE;YACjC,KAAK,MAAM,CAACT,IAAAA,EAAMU,UAAAA,CAAW,IAAIpE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBa,WAAW,CAAA,CAAG;AAC9E,gBAAA,IAAI,OAAOC,UAAAA,KAAe,QAAA,KAAaA,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWN,QAAQ,CAAC,MAAK,CAAA,EAAI;AACpIT,oBAAAA,eAAAA,CAAgBzC,IAAI,CAAC;AACjB8C,wBAAAA,IAAAA;wBACAC,OAAAA,EAASS,UAAAA;wBACTL,IAAAA,EAAM,YAAA;wBACNd,cAAAA,EAAgB,aAAA;wBAChBvC,WAAAA,EAAamC,YAAAA;wBACbgB,MAAAA,EAAQ;AACZ,qBAAA,CAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;AACJ,IAAA;IAEAxE,KAAAA,CAAM6B,GAAG,CAAC,CAAC,MAAM,EAAEmC,eAAAA,CAAgBjC,MAAM,CAAC,yBAAyB,CAAC,CAAA;IACpE,OAAOiC,eAAAA;AACX,CAAA;AAEA;;IAGA,MAAMgB,iCAAiC,CAAChB,eAAAA,GAAAA;AACpC,IAAA,MAAMlE,MAAAA,GAASC,SAAAA,EAAAA;IAEf,IAAIiE,eAAAA,CAAgBjC,MAAM,KAAK,CAAA,EAAG;AAC9BjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,qCAAA,CAAA;AACZ,QAAA;AACJ,IAAA;AAEAnF,IAAAA,MAAAA,CAAOmF,IAAI,CAAC,2EAAA,CAAA;;AAGZ,IAAA,MAAMC,OAAAA,GAAUlB,eAAAA,CAAgBmB,MAAM,CAAC,CAACC,GAAAA,EAAKC,GAAAA,GAAAA;AACzC,QAAA,IAAI,CAACD,GAAG,CAACC,GAAAA,CAAIhE,WAAW,CAAC,EAAE;AACvB+D,YAAAA,GAAG,CAACC,GAAAA,CAAIhE,WAAW,CAAC,GAAG,EAAE;AAC7B,QAAA;AACA+D,QAAAA,GAAG,CAACC,GAAAA,CAAIhE,WAAW,CAAC,CAACE,IAAI,CAAC8D,GAAAA,CAAAA;QAC1B,OAAOD,GAAAA;AACX,IAAA,CAAA,EAAG,EAAC,CAAA;IAEJ,KAAK,MAAM,CAAC/D,WAAAA,EAAa+C,IAAAA,CAAK,IAAIzD,MAAAA,CAAOC,OAAO,CAACsE,OAAAA,CAAAA,CAAU;AACvDpF,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,KAAK,EAAE5D,WAAAA,CAAY,CAAC,CAAC,CAAA;QAClC,KAAK,MAAMgE,OAAOjB,IAAAA,CAAM;YACpBtE,MAAAA,CAAOmF,IAAI,CAAC,CAAC,MAAM,EAAEI,IAAIzB,cAAc,CAAC,CAAC,EAAEyB,GAAAA,CAAIhB,IAAI,CAAC,EAAE,EAAEgB,GAAAA,CAAIf,OAAO,CAAC,EAAE,EAAEe,GAAAA,CAAIX,IAAI,CAAC,CAAC,CAAC,CAAA;AACnF5E,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,UAAU,EAAEI,GAAAA,CAAIb,MAAM,CAAA,CAAE,CAAA;AACzC,QAAA;AACJ,IAAA;AACJ,CAAA;AAEA;;IAGA,MAAMc,gBAAgB,OAAOvB,gBAAAA,GAAAA;AACzB,IAAA,MAAMjE,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,KAAAA,GAAQC,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,8BAAA,CAAA;AAE7C,IAAA,MAAMyF,oBAAoBzB,8BAAAA,CAA+BC,gBAAAA,CAAAA;IAEzD,IAAIwB,iBAAAA,CAAkBxD,MAAM,KAAK,CAAA,EAAG;AAChCjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,2DAAA,CAAA;AACZjF,QAAAA,KAAAA,CAAM6B,GAAG,CAAC,yBAAA,CAAA;QACV,OAAO,IAAA;IACX,CAAA,MAAO;AACH/B,QAAAA,MAAAA,CAAO0F,IAAI,CAAC,kEAAA,CAAA;QACZR,8BAAAA,CAA+BO,iBAAAA,CAAAA;AAC/BvF,QAAAA,KAAAA,CAAM6B,GAAG,CAAC,qBAAA,CAAA;QACV,OAAO,KAAA;AACX,IAAA;AACJ,CAAA;AAEO,MAAM4D,UAAU,OAAOC,SAAAA,GAAAA;AACWA,IAAAA,IAAAA,iBAAAA,EASlBA,oBAAgCA,eAAAA,EACzBA,kBAAAA;IAV1B,MAAMC,QAAAA,GAAWD,SAAAA,CAAUE,MAAM,KAAA,CAAIF,iBAAAA,GAAAA,SAAAA,CAAUG,MAAM,MAAA,IAAA,IAAhBH,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAkBE,MAAM,CAAA,IAAI,KAAA;AACjE,IAAA,MAAM9F,SAASgG,eAAAA,CAAgBH,QAAAA,CAAAA;AAC/B,IAAA,MAAMI,YAAAA,GAAe9F,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,0BAAA,CAAA;AACpD,IAAA,MAAMD,UAAUmG,MAAAA,CAAc;AAAEC,QAAAA,GAAAA,EAAKnG,OAAOmF;AAAK,KAAA,CAAA;AAEjDnF,IAAAA,MAAAA,CAAOmF,IAAI,CAAC,6EAAA,CAAA;;AAGZ,IAAA,MAAMiB,WAAAA,GAAcjG,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,uBAAA,CAAA;AACnD,IAAA,MAAMF,aAAa8F,CAAAA,CAAAA,kBAAAA,GAAAA,UAAUG,MAAM,MAAA,IAAA,IAAhBH,yCAAAA,kBAAAA,CAAkB9F,UAAU,MAAA,CAAI8F,eAAAA,GAAAA,UAAUS,IAAI,MAAA,IAAA,IAAdT,sCAAAA,eAAAA,CAAgB9F,UAAU,KAAI,EAAC;IACxD8F,EAAAA,kBAAAA,GAAAA,SAAAA,CAAUG,MAAM,MAAA,IAAA,IAAhBH,kBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAAA,CAAkBU,aAAa,KAAI;AAC7DF,IAAAA,WAAAA,CAAYrE,GAAG,CAAC,sBAAA,CAAA;AAEhB,IAAA,IAAIlB,OAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYmC,MAAM,KAAK,CAAA,EAAG;AACtCjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,sDAAA,CAAA;AACZc,QAAAA,YAAAA,CAAalE,GAAG,CAAC,iCAAA,CAAA;QACjB,OAAO,sDAAA;AACX,IAAA;;AAGA,IAAA,MAAMkC,gBAAAA,GAAmB,MAAMsC,uBAAAA,CAAwBjE,OAAAA,CAAQC,GAAG,EAAA,EAAIxC,OAAAA,CAAAA;IAEtE,IAAIkE,gBAAAA,CAAiBhC,MAAM,KAAK,CAAA,EAAG;AAC/B,QAAA,MAAM,IAAIc,KAAAA,CAAM,qEAAA,CAAA;AACpB,IAAA;IAEA/C,MAAAA,CAAOmF,IAAI,CAAC,CAAC,MAAM,EAAElB,gBAAAA,CAAiBhC,MAAM,CAAC,gCAAgC,CAAC,CAAA;AAC9EjC,IAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,SAAS,EAAEtE,MAAAA,CAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYmC,MAAM,CAAC,gBAAgB,EAAEpB,MAAAA,CAAOmB,IAAI,CAAClC,UAAAA,CAAAA,CAAYuC,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;;AAG7G,IAAA,MAAM6B,kBAAkBF,8BAAAA,CAA+BC,gBAAAA,CAAAA;IACvDiB,8BAAAA,CAA+BhB,eAAAA,CAAAA;;IAG/B,MAAMsC,qBAAAA,GAAwB,MAAM3G,oBAAAA,CAAqBC,UAAAA,EAAYC,OAAAA,CAAAA;AAErE,IAAA,IAAIyG,sBAAsBvE,MAAM,KAAK,KAAKiC,eAAAA,CAAgBjC,MAAM,KAAK,CAAA,EAAG;AACpEjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,kGAAA,CAAA;AACZc,QAAAA,YAAAA,CAAalE,GAAG,CAAC,mCAAA,CAAA;QACjB,OAAO,gGAAA;AACX,IAAA;AAEA/B,IAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,MAAM,EAAEsF,qBAAAA,CAAsBvE,MAAM,CAAC,kCAAkC,EAAEuE,qBAAAA,CAAsBnE,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;;AAG3H,IAAA,MAAMoE,WAAAA,GAActG,gBAAAA,CAAiBC,KAAK,CAACJ,MAAAA,EAAQ,qBAAA,CAAA;IACnD,MAAMkD,MAAAA,GAAS,MAAMhB,cAAAA,CAAenC,OAAAA,CAAAA;AACpC0G,IAAAA,WAAAA,CAAY1E,GAAG,CAAC,oBAAA,CAAA;AAEhB,IAAA,IAAI8D,QAAAA,EAAU;AACV7F,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,wFAAA,CAAA;;AAGZ,QAAA,IAAIuB,WAAAA,GAAc,CAAA;QAClB,KAAK,MAAMpF,eAAekF,qBAAAA,CAAuB;AAC7C,YAAA,KAAK,MAAM,EAAE9C,YAAY,EAAE,IAAIO,gBAAAA,CAAkB;AAC7C,gBAAA,MAAML,SAAAA,GAAY,CAAA,EAAGF,YAAAA,CAAa,CAAC,EAAEpC,WAAAA,CAAAA,CAAa;gBAClD,MAAMuC,WAAAA,GAAcX,MAAM,CAACU,SAAAA,CAAU;AACrC,gBAAA,IAAIC,WAAAA,EAAa;AACb7D,oBAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,cAAc,EAAEwC,YAAAA,CAAa,CAAC,EAAEpC,WAAAA,CAAY,cAAc,EAAEuC,WAAAA,CAAYE,eAAe,CAAA,CAAE,CAAA;AACzG2C,oBAAAA,WAAAA,EAAAA;AACJ,gBAAA;AACJ,YAAA;AACJ,QAAA;;QAGA,IAAIxC,eAAAA,CAAgBjC,MAAM,GAAG,CAAA,EAAG;YAC5BjC,MAAAA,CAAOkB,OAAO,CAAC,CAAC,eAAe,EAAEgD,eAAAA,CAAgBjC,MAAM,CAAC,yBAAyB,CAAC,CAAA;AACtF,QAAA;AAEAgE,QAAAA,YAAAA,CAAalE,GAAG,CAAC,0BAAA,CAAA;AACjB,QAAA,OAAO,CAAC,sBAAsB,EAAE2E,WAAAA,CAAY,sCAAsC,EAAExC,eAAAA,CAAgBjC,MAAM,CAAC,iCAAiC,EAAEgC,gBAAAA,CAAiBhC,MAAM,CAAC,mBAAmB,CAAC;IAC9L,CAAA,MAAO;AAsGsB2D,QAAAA,IAAAA,kBAAAA;;AApGzB,QAAA,IAAIe,kBAAAA,GAAqB,CAAA;AACzB,QAAA,IAAIC,iBAAAA,GAAoB,CAAA;QAExB,KAAK,MAAMtD,uBAAuBW,gBAAAA,CAAkB;YAChD,MAAM,EAAET,WAAW,EAAEpB,IAAAA,EAAMqB,eAAe,EAAEC,YAAY,EAAE,GAAGJ,mBAAAA;AAC7D,YAAA,IAAIuD,QAAAA,GAAW,KAAA;;AAGf,YAAA,MAAMtD,aAAAA,GAAgB,MAAMF,kBAAAA,CAAmBC,mBAAAA,EAAqBkD,uBAAuBtD,MAAQnD,CAAAA;YACnG4G,kBAAAA,IAAsBpD,aAAAA;YACtB,IAAIA,aAAAA,GAAgB,GAAGsD,QAAAA,GAAW,IAAA;;AAGlC,YAAA,MAAM1C,mBAAAA,GAAsBX,WAAAA;;YAG5B,IAAIW,mBAAAA,CAAoBU,UAAU,EAAE;AAChC,gBAAA,OAAOV,oBAAoBU,UAAU;AACrC7E,gBAAAA,MAAAA,CAAOkB,OAAO,CAAC,CAAC,qCAAqC,EAAEwC,YAAAA,CAAAA,CAAc,CAAA;gBACrEmD,QAAAA,GAAW,IAAA;AACXD,gBAAAA,iBAAAA,EAAAA;AACJ,YAAA;;YAGA,IAAIzC,mBAAAA,CAAoBW,SAAS,EAAE;AAC/B,gBAAA,MAAMgC,iBAAsC,EAAC;AAC7C,gBAAA,IAAIC,iBAAAA,GAAoB,KAAA;gBAExB,KAAK,MAAM,CAACxC,IAAAA,EAAMQ,QAAAA,CAAS,IAAIlE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBW,SAAS,CAAA,CAAG;AAC1E,oBAAA,IAAI,OAAOC,QAAAA,KAAa,QAAA,KAAaA,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASvD,UAAU,CAAC,OAAA,CAAA,IAAYuD,QAAAA,CAASJ,QAAQ,CAAC,MAAK,CAAA,EAAI;wBAC5H3E,MAAAA,CAAOkB,OAAO,CAAC,CAAC,6BAA6B,EAAEwC,YAAAA,CAAa,WAAW,EAAEa,IAAAA,CAAK,EAAE,EAAEQ,QAAAA,CAAAA,CAAU,CAAA;wBAC5FgC,iBAAAA,GAAoB,IAAA;AACpBH,wBAAAA,iBAAAA,EAAAA;oBACJ,CAAA,MAAO;wBACHE,cAAc,CAACvC,KAAK,GAAGQ,QAAAA;AAC3B,oBAAA;AACJ,gBAAA;AAEA,gBAAA,IAAIgC,iBAAAA,EAAmB;AACnB,oBAAA,IAAIlG,OAAOmB,IAAI,CAAC8E,cAAAA,CAAAA,CAAgB7E,MAAM,KAAK,CAAA,EAAG;AAC1C,wBAAA,OAAOkC,oBAAoBW,SAAS;oBACxC,CAAA,MAAO;AACHX,wBAAAA,mBAAAA,CAAoBW,SAAS,GAAGgC,cAAAA;AACpC,oBAAA;oBACAD,QAAAA,GAAW,IAAA;AACf,gBAAA;AACJ,YAAA;;YAGA,IAAI1C,mBAAAA,CAAoBa,WAAW,EAAE;AACjC,gBAAA,MAAMgC,mBAAwC,EAAC;AAC/C,gBAAA,IAAIC,mBAAAA,GAAsB,KAAA;gBAE1B,KAAK,MAAM,CAAC1C,IAAAA,EAAMU,UAAAA,CAAW,IAAIpE,OAAOC,OAAO,CAACqD,mBAAAA,CAAoBa,WAAW,CAAA,CAAG;AAC9E,oBAAA,IAAI,OAAOC,UAAAA,KAAe,QAAA,KAAaA,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWzD,UAAU,CAAC,OAAA,CAAA,IAAYyD,UAAAA,CAAWN,QAAQ,CAAC,MAAK,CAAA,EAAI;wBACpI3E,MAAAA,CAAOkB,OAAO,CAAC,CAAC,+BAA+B,EAAEwC,YAAAA,CAAa,aAAa,EAAEa,IAAAA,CAAK,EAAE,EAAEU,UAAAA,CAAAA,CAAY,CAAA;wBAClGgC,mBAAAA,GAAsB,IAAA;AACtBL,wBAAAA,iBAAAA,EAAAA;oBACJ,CAAA,MAAO;wBACHI,gBAAgB,CAACzC,KAAK,GAAGU,UAAAA;AAC7B,oBAAA;AACJ,gBAAA;AAEA,gBAAA,IAAIgC,mBAAAA,EAAqB;AACrB,oBAAA,IAAIpG,OAAOmB,IAAI,CAACgF,gBAAAA,CAAAA,CAAkB/E,MAAM,KAAK,CAAA,EAAG;AAC5C,wBAAA,OAAOkC,oBAAoBa,WAAW;oBAC1C,CAAA,MAAO;AACHb,wBAAAA,mBAAAA,CAAoBa,WAAW,GAAGgC,gBAAAA;AACtC,oBAAA;oBACAH,QAAAA,GAAW,IAAA;AACf,gBAAA;AACJ,YAAA;;AAGA,YAAA,IAAIA,QAAAA,EAAU;gBACV,MAAM9G,OAAAA,CAAQqD,SAAS,CAACK,eAAAA,EAAiBlD,KAAKC,SAAS,CAACgD,WAAAA,EAAa,IAAA,EAAM,CAAA,CAAA,EAAI,OAAA,CAAA;AACnF,YAAA;AACJ,QAAA;;AAGA,QAAA,MAAMP,gBAAgBC,MAAAA,EAAQnD,OAAAA,CAAAA;QAE9B,IAAI4G,kBAAAA,KAAuB,CAAA,IAAKC,iBAAAA,KAAsB,CAAA,EAAG;AACrD5G,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,uDAAA,CAAA;AACZc,YAAAA,YAAAA,CAAalE,GAAG,CAAC,mCAAA,CAAA;YACjB,OAAO,qDAAA;AACX,QAAA;AAEA/B,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,WAAW,EAAEwB,kBAAAA,CAAmB,yBAAyB,EAAEC,iBAAAA,CAAkB,uCAAuC,EAAE3C,gBAAAA,CAAiBhC,MAAM,CAAC,qBAAqB,CAAC,CAAA;;;AAIjLjC,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,yEAAA,CAAA;AACZ,QAAA,MAAM+B,kBAAkB9E,aAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,mBAAA,CAAA;AACjD,QAAA,IAAI,MAAMxC,OAAAA,CAAQyC,MAAM,CAAC0E,eAAAA,CAAAA,EAAkB;YACvC,MAAMnH,OAAAA,CAAQoD,UAAU,CAAC+D,eAAAA,CAAAA;AACzBlH,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,qDAAA,CAAA;AAChB,QAAA;;QAGA,MAAMgC,gBAAAA,GAAmBvB,CAAAA,CAAAA,kBAAAA,GAAAA,SAAAA,CAAUG,MAAM,MAAA,IAAA,IAAhBH,kBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAAA,CAAkBuB,gBAAgB,MAAK,KAAA,CAAA;AAChE,QAAA,IAAIA,gBAAAA,EAAkB;AAClBnH,YAAAA,MAAAA,CAAOmF,IAAI,CAAC,yDAAA,CAAA;AACZ,YAAA,MAAMiC,kBAAkBhF,aAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,cAAA,CAAA;AACjD,YAAA,IAAI,MAAMxC,OAAAA,CAAQyC,MAAM,CAAC4E,eAAAA,CAAAA,EAAkB;gBACvC,IAAI;oBACA,MAAMrH,OAAAA,CAAQsH,eAAe,CAACD,eAAAA,CAAAA;AAC9BpH,oBAAAA,MAAAA,CAAOmF,IAAI,CAAC,oCAAA,CAAA;AAChB,gBAAA,CAAA,CAAE,OAAOrC,KAAAA,EAAY;oBACjB9C,MAAAA,CAAO0F,IAAI,CAAC,CAAC,+BAA+B,EAAE5C,KAAAA,CAAME,OAAO,CAAC,gBAAgB,CAAC,CAAA;AACjF,gBAAA;AACJ,YAAA;AACJ,QAAA;;AAGA,QAAA,MAAMsE,uBAAAA,GAA0B,MAAMf,uBAAAA,CAAwBjE,OAAAA,CAAQC,GAAG,EAAA,EAAIxC,OAAAA,CAAAA;;QAG7E,MAAMwH,kBAAAA,GAAqB,MAAM/B,aAAAA,CAAc8B,uBAAAA,CAAAA;AAE/C,QAAA,IAAI,CAACC,kBAAAA,EAAoB;AACrBvH,YAAAA,MAAAA,CAAO0F,IAAI,CAAC,oFAAA,CAAA;AAChB,QAAA;;AAGA1F,QAAAA,MAAAA,CAAOmF,IAAI,CAAC,0FAAA,CAAA;QACZ,IAAI;YACA,MAAMqC,aAAAA,GAAgB,MAAMC,eAAAA,CAAgB;gBACxCC,eAAAA,EAAiB,KAAA;gBACjBC,QAAAA,EAAU,KAAA;gBACVzG,OAAAA,EAAS;AACb,aAAA,CAAA;YAEA,IAAIsG,aAAAA,CAAcI,OAAO,EAAE;gBACvB5H,MAAAA,CAAOmF,IAAI,CAAC,CAAC,gCAAgC,EAAEqC,aAAAA,CAAcK,MAAM,CAAC,CAAC,CAAC,CAAA;YAC1E,CAAA,MAAO;AACH7H,gBAAAA,MAAAA,CAAOmF,IAAI,CAAC,CAAC,qCAAqC,EAAEqC,aAAAA,CAAcK,MAAM,CAAC,EAAE,EAAEL,aAAAA,CAAcM,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC5G,YAAA;AACJ,QAAA,CAAA,CAAE,OAAOhF,KAAAA,EAAO;AACZ9C,YAAAA,MAAAA,CAAO0F,IAAI,CAAC,CAAC,gCAAgC,EAAE5C,KAAAA,CAAM,6CAA6C,CAAC,CAAA;AACvG,QAAA;AAEA,QAAA,MAAMiF,OAAAA,GAAU,CAAC,wBAAwB,EAAEpB,mBAAmB,yBAAyB,EAAEC,iBAAAA,CAAkB,uCAAuC,EAAE3C,gBAAAA,CAAiBhC,MAAM,CAAC,qBAAqB,CAAC;AAClMgE,QAAAA,YAAAA,CAAalE,GAAG,CAAC,0BAAA,CAAA;QACjB,OAAOgG,OAAAA;AACX,IAAA;AACJ;;;;"}
|
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import os__default from 'os';
|
|
2
|
+
import path__default from 'path';
|
|
3
3
|
|
|
4
|
-
const VERSION = '0.0
|
|
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 =
|
|
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
|
package/dist/constants.js.map
CHANGED
|
@@ -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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"}
|
package/dist/content/diff.js
CHANGED
|
@@ -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
|