@eldrforge/kodrdriv 0.1.0 → 1.2.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 +1 -0
- package/dist/application.js +25 -3
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +103 -18
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +28 -7
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +28 -7
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/commit.js +75 -18
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +264 -0
- package/dist/commands/development.js.map +1 -0
- package/dist/commands/link.js +356 -181
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +166 -32
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +78 -13
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +10 -6
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/tree.js +450 -24
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +267 -372
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/versions.js +224 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/constants.js +29 -10
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +192 -0
- package/dist/content/files.js.map +1 -0
- package/dist/content/log.js +16 -0
- package/dist/content/log.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/prompt/commit.js +9 -2
- package/dist/prompt/commit.js.map +1 -1
- package/dist/prompt/instructions/commit.md +20 -2
- package/dist/prompt/instructions/release.md +27 -10
- package/dist/prompt/instructions/review.md +75 -8
- package/dist/prompt/release.js +13 -5
- package/dist/prompt/release.js.map +1 -1
- package/dist/types.js +21 -5
- package/dist/types.js.map +1 -1
- package/dist/util/child.js +112 -26
- package/dist/util/child.js.map +1 -1
- package/dist/util/countdown.js +215 -0
- package/dist/util/countdown.js.map +1 -0
- package/dist/util/general.js +10 -2
- package/dist/util/general.js.map +1 -1
- package/dist/util/git.js +587 -0
- package/dist/util/git.js.map +1 -0
- package/dist/util/github.js +519 -3
- package/dist/util/github.js.map +1 -1
- package/dist/util/interactive.js +245 -79
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/openai.js +70 -22
- package/dist/util/openai.js.map +1 -1
- package/dist/util/performance.js +1 -69
- package/dist/util/performance.js.map +1 -1
- package/dist/util/storage.js +28 -1
- package/dist/util/storage.js.map +1 -1
- package/dist/util/validation.js +1 -25
- package/dist/util/validation.js.map +1 -1
- package/package.json +10 -8
- package/test-multiline/cli/package.json +8 -0
- package/test-multiline/core/package.json +5 -0
- package/test-multiline/mobile/package.json +8 -0
- package/test-multiline/web/package.json +8 -0
- package/dist/util/npmOptimizations.js +0 -174
- package/dist/util/npmOptimizations.js.map +0 -1
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import { getLogger } from '../logging.js';
|
|
2
|
-
import { run } from './child.js';
|
|
3
|
-
import { PerformanceTimer } from './performance.js';
|
|
4
|
-
|
|
5
|
-
// Check if npm install is needed by examining lock file and node_modules
|
|
6
|
-
const isNpmInstallNeeded = async (storage)=>{
|
|
7
|
-
const logger = getLogger();
|
|
8
|
-
const timer = PerformanceTimer.start(logger, 'Checking if npm install is needed');
|
|
9
|
-
try {
|
|
10
|
-
// Check if package-lock.json exists
|
|
11
|
-
const hasLockFile = await storage.exists('package-lock.json');
|
|
12
|
-
if (!hasLockFile) {
|
|
13
|
-
timer.end('npm install needed - no lock file');
|
|
14
|
-
return {
|
|
15
|
-
needed: true,
|
|
16
|
-
reason: 'No package-lock.json found'
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
// Check if node_modules exists
|
|
20
|
-
const hasNodeModules = await storage.exists('node_modules');
|
|
21
|
-
if (!hasNodeModules) {
|
|
22
|
-
timer.end('npm install needed - no node_modules');
|
|
23
|
-
return {
|
|
24
|
-
needed: true,
|
|
25
|
-
reason: 'No node_modules directory found'
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
// Check if node_modules is populated (has at least a few entries)
|
|
29
|
-
const nodeModulesContents = await storage.listFiles('node_modules');
|
|
30
|
-
if (nodeModulesContents.length < 3) {
|
|
31
|
-
timer.end('npm install needed - empty node_modules');
|
|
32
|
-
return {
|
|
33
|
-
needed: true,
|
|
34
|
-
reason: 'node_modules appears empty or incomplete'
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
// Get timestamps to check if package.json is newer than node_modules
|
|
38
|
-
const packageJsonStats = await storage.exists('package.json');
|
|
39
|
-
if (!packageJsonStats) {
|
|
40
|
-
timer.end('npm install not needed - no package.json');
|
|
41
|
-
return {
|
|
42
|
-
needed: false,
|
|
43
|
-
reason: 'No package.json found'
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
timer.end('npm install not needed - appears up to date');
|
|
47
|
-
return {
|
|
48
|
-
needed: false,
|
|
49
|
-
reason: 'Dependencies appear to be up to date'
|
|
50
|
-
};
|
|
51
|
-
} catch (error) {
|
|
52
|
-
timer.end(`npm install check failed: ${error.message}`);
|
|
53
|
-
logger.debug(`Failed to check npm install status: ${error.message}`);
|
|
54
|
-
return {
|
|
55
|
-
needed: true,
|
|
56
|
-
reason: 'Could not verify dependency status, installing to be safe'
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
// Run npm install with optimizations
|
|
61
|
-
const optimizedNpmInstall = async (options = {})=>{
|
|
62
|
-
const logger = getLogger();
|
|
63
|
-
const storage = (await import('./storage.js')).create({
|
|
64
|
-
log: logger.info
|
|
65
|
-
});
|
|
66
|
-
const { skipIfNotNeeded = true, useCache = true, verbose = false } = options;
|
|
67
|
-
// Check if install is needed
|
|
68
|
-
if (skipIfNotNeeded) {
|
|
69
|
-
const installCheck = await isNpmInstallNeeded(storage);
|
|
70
|
-
if (!installCheck.needed) {
|
|
71
|
-
logger.info(`⚡ Skipping npm install: ${installCheck.reason}`);
|
|
72
|
-
return {
|
|
73
|
-
duration: 0,
|
|
74
|
-
skipped: true,
|
|
75
|
-
reason: installCheck.reason
|
|
76
|
-
};
|
|
77
|
-
} else {
|
|
78
|
-
logger.verbose(`📦 npm install required: ${installCheck.reason}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Build optimized npm install command
|
|
82
|
-
const npmArgs = [
|
|
83
|
-
'install'
|
|
84
|
-
];
|
|
85
|
-
if (!verbose) {
|
|
86
|
-
npmArgs.push('--silent');
|
|
87
|
-
}
|
|
88
|
-
if (useCache) {
|
|
89
|
-
// npm uses cache by default, but we can ensure it's not bypassed
|
|
90
|
-
npmArgs.push('--prefer-offline');
|
|
91
|
-
}
|
|
92
|
-
// Use --no-audit and --no-fund for faster installs in link/unlink scenarios
|
|
93
|
-
npmArgs.push('--no-audit', '--no-fund');
|
|
94
|
-
const command = `npm ${npmArgs.join(' ')}`;
|
|
95
|
-
logger.info(`⏳ Running optimized npm install...`);
|
|
96
|
-
logger.verbose(`Command: ${command}`);
|
|
97
|
-
const timer = PerformanceTimer.start(logger, 'Optimized npm install execution');
|
|
98
|
-
try {
|
|
99
|
-
await run(command);
|
|
100
|
-
const duration = timer.end('Optimized npm install completed successfully');
|
|
101
|
-
logger.info(`✅ Dependencies installed successfully (${duration}ms)`);
|
|
102
|
-
return {
|
|
103
|
-
duration,
|
|
104
|
-
skipped: false,
|
|
105
|
-
reason: 'Installation completed successfully'
|
|
106
|
-
};
|
|
107
|
-
} catch (error) {
|
|
108
|
-
timer.end('Optimized npm install failed');
|
|
109
|
-
throw new Error(`Failed to run optimized npm install: ${error.message}`);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
// Helper to run npm ci if package-lock.json is available (faster than npm install)
|
|
113
|
-
const tryNpmCi = async ()=>{
|
|
114
|
-
const logger = getLogger();
|
|
115
|
-
const storage = (await import('./storage.js')).create({
|
|
116
|
-
log: logger.info
|
|
117
|
-
});
|
|
118
|
-
try {
|
|
119
|
-
// Check if package-lock.json exists
|
|
120
|
-
const hasLockFile = await storage.exists('package-lock.json');
|
|
121
|
-
if (!hasLockFile) {
|
|
122
|
-
return {
|
|
123
|
-
success: false
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
logger.info('⚡ Using npm ci for faster installation...');
|
|
127
|
-
const timer = PerformanceTimer.start(logger, 'npm ci execution');
|
|
128
|
-
await run('npm ci --silent --no-audit --no-fund');
|
|
129
|
-
const duration = timer.end('npm ci completed successfully');
|
|
130
|
-
logger.info(`✅ Dependencies installed with npm ci (${duration}ms)`);
|
|
131
|
-
return {
|
|
132
|
-
success: true,
|
|
133
|
-
duration
|
|
134
|
-
};
|
|
135
|
-
} catch (error) {
|
|
136
|
-
logger.verbose(`npm ci failed, will fall back to npm install: ${error.message}`);
|
|
137
|
-
return {
|
|
138
|
-
success: false
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
// Main function that tries the fastest approach first
|
|
143
|
-
const smartNpmInstall = async (options = {})=>{
|
|
144
|
-
const logger = getLogger();
|
|
145
|
-
const { skipIfNotNeeded = true, preferCi = true, verbose = false } = options;
|
|
146
|
-
const overallTimer = PerformanceTimer.start(logger, 'Smart npm install');
|
|
147
|
-
// Try npm ci first if preferred and available
|
|
148
|
-
if (preferCi) {
|
|
149
|
-
const ciResult = await tryNpmCi();
|
|
150
|
-
if (ciResult.success) {
|
|
151
|
-
overallTimer.end('Smart npm install completed with npm ci');
|
|
152
|
-
return {
|
|
153
|
-
duration: ciResult.duration || 0,
|
|
154
|
-
method: 'npm ci',
|
|
155
|
-
skipped: false
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Fall back to optimized npm install
|
|
160
|
-
const installResult = await optimizedNpmInstall({
|
|
161
|
-
skipIfNotNeeded,
|
|
162
|
-
useCache: true,
|
|
163
|
-
verbose
|
|
164
|
-
});
|
|
165
|
-
overallTimer.end(`Smart npm install completed with ${installResult.skipped ? 'skip' : 'npm install'}`);
|
|
166
|
-
return {
|
|
167
|
-
duration: installResult.duration,
|
|
168
|
-
method: installResult.skipped ? 'skipped' : 'npm install',
|
|
169
|
-
skipped: installResult.skipped
|
|
170
|
-
};
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
export { isNpmInstallNeeded, optimizedNpmInstall, smartNpmInstall, tryNpmCi };
|
|
174
|
-
//# sourceMappingURL=npmOptimizations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"npmOptimizations.js","sources":["../../src/util/npmOptimizations.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { run } from './child';\nimport { PerformanceTimer } from './performance';\n\n// Check if npm install is needed by examining lock file and node_modules\nexport const isNpmInstallNeeded = async (storage: any): Promise<{ needed: boolean; reason: string }> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Checking if npm install is needed');\n\n try {\n // Check if package-lock.json exists\n const hasLockFile = await storage.exists('package-lock.json');\n if (!hasLockFile) {\n timer.end('npm install needed - no lock file');\n return { needed: true, reason: 'No package-lock.json found' };\n }\n\n // Check if node_modules exists\n const hasNodeModules = await storage.exists('node_modules');\n if (!hasNodeModules) {\n timer.end('npm install needed - no node_modules');\n return { needed: true, reason: 'No node_modules directory found' };\n }\n\n // Check if node_modules is populated (has at least a few entries)\n const nodeModulesContents = await storage.listFiles('node_modules');\n if (nodeModulesContents.length < 3) { // Usually has .bin, .package-lock.json, and packages\n timer.end('npm install needed - empty node_modules');\n return { needed: true, reason: 'node_modules appears empty or incomplete' };\n }\n\n // Get timestamps to check if package.json is newer than node_modules\n const packageJsonStats = await storage.exists('package.json');\n if (!packageJsonStats) {\n timer.end('npm install not needed - no package.json');\n return { needed: false, reason: 'No package.json found' };\n }\n\n timer.end('npm install not needed - appears up to date');\n return { needed: false, reason: 'Dependencies appear to be up to date' };\n } catch (error: any) {\n timer.end(`npm install check failed: ${error.message}`);\n logger.debug(`Failed to check npm install status: ${error.message}`);\n return { needed: true, reason: 'Could not verify dependency status, installing to be safe' };\n }\n};\n\n// Run npm install with optimizations\nexport const optimizedNpmInstall = async (options: {\n skipIfNotNeeded?: boolean;\n useCache?: boolean;\n verbose?: boolean;\n} = {}): Promise<{ duration: number; skipped: boolean; reason: string }> => {\n const logger = getLogger();\n const storage = (await import('./storage')).create({ log: logger.info });\n\n const {\n skipIfNotNeeded = true,\n useCache = true,\n verbose = false\n } = options;\n\n // Check if install is needed\n if (skipIfNotNeeded) {\n const installCheck = await isNpmInstallNeeded(storage);\n if (!installCheck.needed) {\n logger.info(`⚡ Skipping npm install: ${installCheck.reason}`);\n return { duration: 0, skipped: true, reason: installCheck.reason };\n } else {\n logger.verbose(`📦 npm install required: ${installCheck.reason}`);\n }\n }\n\n // Build optimized npm install command\n const npmArgs = ['install'];\n\n if (!verbose) {\n npmArgs.push('--silent');\n }\n\n if (useCache) {\n // npm uses cache by default, but we can ensure it's not bypassed\n npmArgs.push('--prefer-offline');\n }\n\n // Use --no-audit and --no-fund for faster installs in link/unlink scenarios\n npmArgs.push('--no-audit', '--no-fund');\n\n const command = `npm ${npmArgs.join(' ')}`;\n\n logger.info(`⏳ Running optimized npm install...`);\n logger.verbose(`Command: ${command}`);\n\n const timer = PerformanceTimer.start(logger, 'Optimized npm install execution');\n\n try {\n await run(command);\n const duration = timer.end('Optimized npm install completed successfully');\n logger.info(`✅ Dependencies installed successfully (${duration}ms)`);\n return { duration, skipped: false, reason: 'Installation completed successfully' };\n } catch (error: any) {\n timer.end('Optimized npm install failed');\n throw new Error(`Failed to run optimized npm install: ${error.message}`);\n }\n};\n\n// Helper to run npm ci if package-lock.json is available (faster than npm install)\nexport const tryNpmCi = async (): Promise<{ success: boolean; duration?: number }> => {\n const logger = getLogger();\n const storage = (await import('./storage')).create({ log: logger.info });\n\n try {\n // Check if package-lock.json exists\n const hasLockFile = await storage.exists('package-lock.json');\n if (!hasLockFile) {\n return { success: false };\n }\n\n logger.info('⚡ Using npm ci for faster installation...');\n const timer = PerformanceTimer.start(logger, 'npm ci execution');\n\n await run('npm ci --silent --no-audit --no-fund');\n const duration = timer.end('npm ci completed successfully');\n\n logger.info(`✅ Dependencies installed with npm ci (${duration}ms)`);\n return { success: true, duration };\n } catch (error: any) {\n logger.verbose(`npm ci failed, will fall back to npm install: ${error.message}`);\n return { success: false };\n }\n};\n\n// Main function that tries the fastest approach first\nexport const smartNpmInstall = async (options: {\n skipIfNotNeeded?: boolean;\n preferCi?: boolean;\n verbose?: boolean;\n} = {}): Promise<{ duration: number; method: string; skipped: boolean }> => {\n const logger = getLogger();\n const {\n skipIfNotNeeded = true,\n preferCi = true,\n verbose = false\n } = options;\n\n const overallTimer = PerformanceTimer.start(logger, 'Smart npm install');\n\n // Try npm ci first if preferred and available\n if (preferCi) {\n const ciResult = await tryNpmCi();\n if (ciResult.success) {\n overallTimer.end('Smart npm install completed with npm ci');\n return {\n duration: ciResult.duration || 0,\n method: 'npm ci',\n skipped: false\n };\n }\n }\n\n // Fall back to optimized npm install\n const installResult = await optimizedNpmInstall({\n skipIfNotNeeded,\n useCache: true,\n verbose\n });\n\n overallTimer.end(`Smart npm install completed with ${installResult.skipped ? 'skip' : 'npm install'}`);\n\n return {\n duration: installResult.duration,\n method: installResult.skipped ? 'skipped' : 'npm install',\n skipped: installResult.skipped\n };\n};\n"],"names":["isNpmInstallNeeded","storage","logger","getLogger","timer","PerformanceTimer","start","hasLockFile","exists","end","needed","reason","hasNodeModules","nodeModulesContents","listFiles","length","packageJsonStats","error","message","debug","optimizedNpmInstall","options","create","log","info","skipIfNotNeeded","useCache","verbose","installCheck","duration","skipped","npmArgs","push","command","join","run","Error","tryNpmCi","success","smartNpmInstall","preferCi","overallTimer","ciResult","method","installResult"],"mappings":"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"}
|