@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.
Files changed (71) hide show
  1. package/README.md +1 -0
  2. package/dist/application.js +25 -3
  3. package/dist/application.js.map +1 -1
  4. package/dist/arguments.js +103 -18
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +28 -7
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +28 -7
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/commit.js +75 -18
  11. package/dist/commands/commit.js.map +1 -1
  12. package/dist/commands/development.js +264 -0
  13. package/dist/commands/development.js.map +1 -0
  14. package/dist/commands/link.js +356 -181
  15. package/dist/commands/link.js.map +1 -1
  16. package/dist/commands/publish.js +166 -32
  17. package/dist/commands/publish.js.map +1 -1
  18. package/dist/commands/release.js +78 -13
  19. package/dist/commands/release.js.map +1 -1
  20. package/dist/commands/review.js +10 -6
  21. package/dist/commands/review.js.map +1 -1
  22. package/dist/commands/tree.js +450 -24
  23. package/dist/commands/tree.js.map +1 -1
  24. package/dist/commands/unlink.js +267 -372
  25. package/dist/commands/unlink.js.map +1 -1
  26. package/dist/commands/versions.js +224 -0
  27. package/dist/commands/versions.js.map +1 -0
  28. package/dist/constants.js +29 -10
  29. package/dist/constants.js.map +1 -1
  30. package/dist/content/diff.js.map +1 -1
  31. package/dist/content/files.js +192 -0
  32. package/dist/content/files.js.map +1 -0
  33. package/dist/content/log.js +16 -0
  34. package/dist/content/log.js.map +1 -1
  35. package/dist/main.js +0 -0
  36. package/dist/prompt/commit.js +9 -2
  37. package/dist/prompt/commit.js.map +1 -1
  38. package/dist/prompt/instructions/commit.md +20 -2
  39. package/dist/prompt/instructions/release.md +27 -10
  40. package/dist/prompt/instructions/review.md +75 -8
  41. package/dist/prompt/release.js +13 -5
  42. package/dist/prompt/release.js.map +1 -1
  43. package/dist/types.js +21 -5
  44. package/dist/types.js.map +1 -1
  45. package/dist/util/child.js +112 -26
  46. package/dist/util/child.js.map +1 -1
  47. package/dist/util/countdown.js +215 -0
  48. package/dist/util/countdown.js.map +1 -0
  49. package/dist/util/general.js +10 -2
  50. package/dist/util/general.js.map +1 -1
  51. package/dist/util/git.js +587 -0
  52. package/dist/util/git.js.map +1 -0
  53. package/dist/util/github.js +519 -3
  54. package/dist/util/github.js.map +1 -1
  55. package/dist/util/interactive.js +245 -79
  56. package/dist/util/interactive.js.map +1 -1
  57. package/dist/util/openai.js +70 -22
  58. package/dist/util/openai.js.map +1 -1
  59. package/dist/util/performance.js +1 -69
  60. package/dist/util/performance.js.map +1 -1
  61. package/dist/util/storage.js +28 -1
  62. package/dist/util/storage.js.map +1 -1
  63. package/dist/util/validation.js +1 -25
  64. package/dist/util/validation.js.map +1 -1
  65. package/package.json +10 -8
  66. package/test-multiline/cli/package.json +8 -0
  67. package/test-multiline/core/package.json +5 -0
  68. package/test-multiline/mobile/package.json +8 -0
  69. package/test-multiline/web/package.json +8 -0
  70. package/dist/util/npmOptimizations.js +0 -174
  71. 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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"}