vibecodingmachine-core 2026.2.20-438 → 2026.2.26-1739

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 (202) hide show
  1. package/README.md +240 -0
  2. package/package.json +10 -2
  3. package/src/agents/Agent.js +300 -0
  4. package/src/agents/AgentAdditionService.js +311 -0
  5. package/src/agents/AgentCheckService.js +690 -0
  6. package/src/agents/AgentInstallationService.js +140 -0
  7. package/src/agents/AgentSetupService.js +467 -0
  8. package/src/agents/AgentStatus.js +183 -0
  9. package/src/agents/AgentVerificationService.js +634 -0
  10. package/src/agents/ConfigurationSchemaValidator.js +543 -0
  11. package/src/agents/EnvironmentConfigurationManager.js +602 -0
  12. package/src/agents/InstallationErrorHandler.js +372 -0
  13. package/src/agents/InstallationLog.js +363 -0
  14. package/src/agents/InstallationMethod.js +510 -0
  15. package/src/agents/InstallationOrchestrator.js +352 -0
  16. package/src/agents/InstallationProgressReporter.js +372 -0
  17. package/src/agents/InstallationRetryManager.js +322 -0
  18. package/src/agents/InstallationType.js +254 -0
  19. package/src/agents/OperationTypes.js +310 -0
  20. package/src/agents/PerformanceMetricsCollector.js +493 -0
  21. package/src/agents/SecurityValidationService.js +534 -0
  22. package/src/agents/VerificationTest.js +354 -0
  23. package/src/agents/VerificationType.js +226 -0
  24. package/src/agents/WindowsPermissionHandler.js +518 -0
  25. package/src/agents/config/AgentConfigManager.js +393 -0
  26. package/src/agents/config/AgentDefaultsRegistry.js +373 -0
  27. package/src/agents/config/ConfigValidator.js +281 -0
  28. package/src/agents/discovery/AgentDiscoveryService.js +707 -0
  29. package/src/agents/logging/AgentLogger.js +511 -0
  30. package/src/agents/status/AgentStatusManager.js +481 -0
  31. package/src/agents/storage/FileManager.js +454 -0
  32. package/src/agents/verification/AgentCommunicationTester.js +474 -0
  33. package/src/agents/verification/BaseVerifier.js +430 -0
  34. package/src/agents/verification/CommandVerifier.js +480 -0
  35. package/src/agents/verification/FileOperationVerifier.js +453 -0
  36. package/src/agents/verification/ResultAnalyzer.js +707 -0
  37. package/src/agents/verification/TestRequirementManager.js +495 -0
  38. package/src/agents/verification/VerificationRunner.js +433 -0
  39. package/src/agents/windows/BaseWindowsInstaller.js +441 -0
  40. package/src/agents/windows/ChocolateyInstaller.js +509 -0
  41. package/src/agents/windows/DirectInstaller.js +443 -0
  42. package/src/agents/windows/InstallerFactory.js +391 -0
  43. package/src/agents/windows/NpmInstaller.js +505 -0
  44. package/src/agents/windows/PowerShellInstaller.js +458 -0
  45. package/src/agents/windows/WinGetInstaller.js +390 -0
  46. package/src/analysis/analysis-reporter.js +132 -0
  47. package/src/analysis/boundary-detector.js +712 -0
  48. package/src/analysis/categorizer.js +340 -0
  49. package/src/analysis/codebase-scanner.js +384 -0
  50. package/src/analysis/line-counter.js +513 -0
  51. package/src/analysis/priority-calculator.js +679 -0
  52. package/src/analysis/report/analysis-report.js +250 -0
  53. package/src/analysis/report/package-analyzer.js +278 -0
  54. package/src/analysis/report/recommendation-generator.js +382 -0
  55. package/src/analysis/report/statistics-generator.js +515 -0
  56. package/src/analysis/reports/analysis-report-model.js +101 -0
  57. package/src/analysis/reports/recommendation-generator.js +283 -0
  58. package/src/analysis/reports/report-generators.js +191 -0
  59. package/src/analysis/reports/statistics-calculator.js +231 -0
  60. package/src/analysis/reports/trend-analyzer.js +219 -0
  61. package/src/analysis/strategy-generator.js +814 -0
  62. package/src/auto-mode/AutoModeBusinessLogic.js +836 -0
  63. package/src/config/refactoring-config.js +307 -0
  64. package/src/health-tracking/json-storage.js +38 -2
  65. package/src/ide-integration/applescript-manager-core.js +233 -0
  66. package/src/ide-integration/applescript-manager.cjs +357 -28
  67. package/src/ide-integration/applescript-manager.js +89 -3599
  68. package/src/ide-integration/cdp-manager.js +306 -0
  69. package/src/ide-integration/claude-code-cli-manager.cjs +1 -1
  70. package/src/ide-integration/continuation-handler.js +337 -0
  71. package/src/ide-integration/ide-status-checker.js +292 -0
  72. package/src/ide-integration/macos-ide-manager.js +627 -0
  73. package/src/ide-integration/macos-text-sender.js +528 -0
  74. package/src/ide-integration/response-reader.js +548 -0
  75. package/src/ide-integration/windows-automation-manager.js +121 -0
  76. package/src/ide-integration/windows-ide-manager.js +373 -0
  77. package/src/index.cjs +25 -3
  78. package/src/index.js +15 -1
  79. package/src/llm/direct-llm-manager.cjs +90 -2
  80. package/src/models/compliance-report.js +538 -0
  81. package/src/models/file-analysis.js +681 -0
  82. package/src/models/refactoring-plan.js +770 -0
  83. package/src/monitoring/alert-system.js +834 -0
  84. package/src/monitoring/compliance-progress-tracker.js +437 -0
  85. package/src/monitoring/continuous-scan-notifications.js +661 -0
  86. package/src/monitoring/continuous-scanner.js +279 -0
  87. package/src/monitoring/file-monitor/file-analyzer.js +262 -0
  88. package/src/monitoring/file-monitor/file-monitor.js +237 -0
  89. package/src/monitoring/file-monitor/watcher.js +194 -0
  90. package/src/monitoring/file-monitor.js +17 -0
  91. package/src/monitoring/notification-manager.js +437 -0
  92. package/src/monitoring/scanner-core.js +368 -0
  93. package/src/monitoring/scanner-events.js +214 -0
  94. package/src/monitoring/violation-notification-system.js +515 -0
  95. package/src/refactoring/boundaries/cohesion-analyzer.js +316 -0
  96. package/src/refactoring/boundaries/extraction-result.js +285 -0
  97. package/src/refactoring/boundaries/extraction-strategies.js +392 -0
  98. package/src/refactoring/boundaries/module-boundary.js +209 -0
  99. package/src/refactoring/boundary/boundary-detector.js +741 -0
  100. package/src/refactoring/boundary/boundary-types.js +405 -0
  101. package/src/refactoring/boundary/extraction-strategies.js +554 -0
  102. package/src/refactoring/boundary-extraction-result.js +77 -0
  103. package/src/refactoring/boundary-extraction-strategies.js +330 -0
  104. package/src/refactoring/boundary-extractor.js +384 -0
  105. package/src/refactoring/boundary-types.js +46 -0
  106. package/src/refactoring/circular/circular-dependency.js +88 -0
  107. package/src/refactoring/circular/cycle-detection.js +147 -0
  108. package/src/refactoring/circular/dependency-node.js +82 -0
  109. package/src/refactoring/circular/dependency-result.js +107 -0
  110. package/src/refactoring/circular/dependency-types.js +58 -0
  111. package/src/refactoring/circular/graph-builder.js +213 -0
  112. package/src/refactoring/circular/resolution-strategy.js +72 -0
  113. package/src/refactoring/circular/strategy-generator.js +229 -0
  114. package/src/refactoring/circular-dependency-resolver-original.js +809 -0
  115. package/src/refactoring/circular-dependency-resolver.js +200 -0
  116. package/src/refactoring/code-mover.js +761 -0
  117. package/src/refactoring/file-splitter.js +696 -0
  118. package/src/refactoring/functionality-validator.js +816 -0
  119. package/src/refactoring/import-manager.js +774 -0
  120. package/src/refactoring/module-boundary.js +107 -0
  121. package/src/refactoring/refactoring-executor.js +672 -0
  122. package/src/refactoring/refactoring-rollback.js +614 -0
  123. package/src/refactoring/test-validator.js +631 -0
  124. package/src/requirement-management/default-requirement-manager.js +321 -0
  125. package/src/requirement-management/requirement-file-parser.js +159 -0
  126. package/src/requirement-management/requirement-sequencer.js +221 -0
  127. package/src/rui/commands/AgentCommandParser.js +600 -0
  128. package/src/rui/commands/AgentCommands.js +487 -0
  129. package/src/rui/commands/AgentResponseFormatter.js +832 -0
  130. package/src/scripts/verify-full-compliance.js +269 -0
  131. package/src/sync/sync-engine-core.js +1 -0
  132. package/src/sync/sync-engine-remote-handlers.js +135 -0
  133. package/src/task-generation/automated-task-generator.js +351 -0
  134. package/src/task-generation/prioritizer.js +287 -0
  135. package/src/task-generation/task-list-updater.js +215 -0
  136. package/src/task-generation/task-management-integration.js +480 -0
  137. package/src/task-generation/task-manager-integration.js +270 -0
  138. package/src/task-generation/violation-task-generator.js +474 -0
  139. package/src/task-management/continuous-scan-integration.js +342 -0
  140. package/src/timeout-management/index.js +12 -3
  141. package/src/timeout-management/response-time-tracker.js +167 -0
  142. package/src/timeout-management/timeout-calculator.js +159 -0
  143. package/src/timeout-management/timeout-config-manager.js +172 -0
  144. package/src/utils/ast-analyzer.js +417 -0
  145. package/src/utils/current-requirement-manager.js +276 -0
  146. package/src/utils/current-requirement-operations.js +472 -0
  147. package/src/utils/dependency-mapper.js +456 -0
  148. package/src/utils/download-with-progress.js +4 -2
  149. package/src/utils/electron-update-checker.js +4 -1
  150. package/src/utils/file-size-analyzer.js +272 -0
  151. package/src/utils/import-updater.js +280 -0
  152. package/src/utils/refactoring-tools.js +512 -0
  153. package/src/utils/report-generator.js +569 -0
  154. package/src/utils/reports/report-analysis.js +218 -0
  155. package/src/utils/reports/report-types.js +55 -0
  156. package/src/utils/reports/summary-generators.js +102 -0
  157. package/src/utils/requirement-file-management.js +157 -0
  158. package/src/utils/requirement-helpers/requirement-file-ops.js +392 -0
  159. package/src/utils/requirement-helpers/requirement-mover.js +414 -0
  160. package/src/utils/requirement-helpers/requirement-parser.js +326 -0
  161. package/src/utils/requirement-helpers/requirement-status.js +320 -0
  162. package/src/utils/requirement-helpers-new.js +55 -0
  163. package/src/utils/requirement-helpers-refactored.js +367 -0
  164. package/src/utils/requirement-helpers.js +291 -1191
  165. package/src/utils/requirement-movement-operations.js +450 -0
  166. package/src/utils/requirement-movement.js +312 -0
  167. package/src/utils/requirement-parsing-helpers.js +56 -0
  168. package/src/utils/requirement-statistics.js +200 -0
  169. package/src/utils/requirement-text-utils.js +58 -0
  170. package/src/utils/rollback/rollback-handlers.js +125 -0
  171. package/src/utils/rollback/rollback-operation.js +63 -0
  172. package/src/utils/rollback/rollback-recorder.js +166 -0
  173. package/src/utils/rollback/rollback-state-manager.js +175 -0
  174. package/src/utils/rollback/rollback-types.js +33 -0
  175. package/src/utils/rollback/rollback-utils.js +110 -0
  176. package/src/utils/rollback-manager-original.js +569 -0
  177. package/src/utils/rollback-manager.js +202 -0
  178. package/src/utils/smoke-test-cli.js +362 -0
  179. package/src/utils/smoke-test-gui.js +351 -0
  180. package/src/utils/smoke-test-orchestrator.js +321 -0
  181. package/src/utils/smoke-test-runner.js +60 -0
  182. package/src/utils/smoke-test-web.js +347 -0
  183. package/src/utils/specification-helpers.js +39 -13
  184. package/src/utils/specification-migration.js +97 -0
  185. package/src/utils/test-runner.js +579 -0
  186. package/src/utils/validation-framework.js +518 -0
  187. package/src/validation/compliance-analyzer.js +197 -0
  188. package/src/validation/compliance-report-generator.js +343 -0
  189. package/src/validation/compliance-reporter.js +711 -0
  190. package/src/validation/compliance-rules.js +127 -0
  191. package/src/validation/constitution-validator-new.js +196 -0
  192. package/src/validation/constitution-validator.js +17 -0
  193. package/src/validation/file-validators.js +170 -0
  194. package/src/validation/line-limit/file-analyzer.js +201 -0
  195. package/src/validation/line-limit/line-limit-validator.js +208 -0
  196. package/src/validation/line-limit/validation-result.js +144 -0
  197. package/src/validation/line-limit-core.js +225 -0
  198. package/src/validation/line-limit-reporter.js +134 -0
  199. package/src/validation/line-limit-result.js +125 -0
  200. package/src/validation/line-limit-validator.js +41 -0
  201. package/src/validation/metrics-calculator.js +660 -0
  202. package/src/sync/sync-engine-backup.js +0 -559
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Report Analysis and Statistics
3
+ *
4
+ * Generates recommendations, statistics, and compliance metrics.
5
+ */
6
+
7
+ const path = require('path');
8
+ const { SIZE_CATEGORIES, LINE_DISTRIBUTION } = require('./report-types');
9
+
10
+ /**
11
+ * Analysis and statistics utilities
12
+ */
13
+ class ReportAnalysis {
14
+ /**
15
+ * Generate recommendations based on analysis data
16
+ */
17
+ static generateRecommendations(analysisData) {
18
+ const recommendations = [];
19
+ const files = analysisData.files || [];
20
+
21
+ // Large file recommendations
22
+ const largeFiles = files.filter(f => f.lineCount > SIZE_CATEGORIES.LARGE.min);
23
+ if (largeFiles.length > 0) {
24
+ recommendations.push({
25
+ type: 'urgent',
26
+ title: `Refactor ${largeFiles.length} Large Files`,
27
+ description: `${largeFiles.length} files exceed the 555-line limit and require immediate refactoring.`,
28
+ files: largeFiles.map(f => f.path),
29
+ priority: 'high'
30
+ });
31
+ }
32
+
33
+ // Medium file recommendations
34
+ const mediumFiles = files.filter(f =>
35
+ f.lineCount >= SIZE_CATEGORIES.MEDIUM.min && f.lineCount <= SIZE_CATEGORIES.MEDIUM.max
36
+ );
37
+ if (mediumFiles.length > 0) {
38
+ recommendations.push({
39
+ type: 'planning',
40
+ title: `Plan Refactoring for ${mediumFiles.length} Medium Files`,
41
+ description: `${mediumFiles.length} files are approaching the size limit and should be planned for refactoring.`,
42
+ files: mediumFiles.map(f => f.path),
43
+ priority: 'medium'
44
+ });
45
+ }
46
+
47
+ // Package-specific recommendations
48
+ const packageStats = ReportAnalysis.analyzePackageStats(files);
49
+ for (const [pkg, stats] of Object.entries(packageStats)) {
50
+ if (stats.complianceRate < 80) {
51
+ recommendations.push({
52
+ type: 'package',
53
+ title: `Improve ${pkg} Package Compliance`,
54
+ description: `Package ${pkg} has ${stats.complianceRate}% compliance rate and needs attention.`,
55
+ files: stats.files,
56
+ priority: 'medium'
57
+ });
58
+ }
59
+ }
60
+
61
+ return recommendations;
62
+ }
63
+
64
+ /**
65
+ * Generate comprehensive statistics
66
+ */
67
+ static generateStatistics(analysisData) {
68
+ const files = analysisData.files || [];
69
+
70
+ return {
71
+ fileSizes: ReportAnalysis.calculateSizeDistribution(files),
72
+ packageStats: ReportAnalysis.analyzePackageStats(files),
73
+ fileTypeStats: ReportAnalysis.analyzeFileTypeStats(files),
74
+ complexityMetrics: ReportAnalysis.calculateComplexityMetrics(files)
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Calculate size distribution
80
+ */
81
+ static calculateSizeDistribution(files) {
82
+ const distribution = {};
83
+
84
+ // Initialize distribution
85
+ for (const range of Object.keys(LINE_DISTRIBUTION)) {
86
+ distribution[range] = 0;
87
+ }
88
+
89
+ for (const file of files) {
90
+ const lines = file.lineCount;
91
+ for (const [range, config] of Object.entries(LINE_DISTRIBUTION)) {
92
+ if (lines >= config.min && lines <= config.max) {
93
+ distribution[range]++;
94
+ break;
95
+ }
96
+ }
97
+ }
98
+
99
+ return distribution;
100
+ }
101
+
102
+ /**
103
+ * Analyze package statistics
104
+ */
105
+ static analyzePackageStats(files) {
106
+ const packageStats = {};
107
+
108
+ for (const file of files) {
109
+ const pkg = ReportAnalysis.extractPackageFromPath(file.path);
110
+ if (!packageStats[pkg]) {
111
+ packageStats[pkg] = {
112
+ totalFiles: 0,
113
+ totalLines: 0,
114
+ compliantFiles: 0,
115
+ files: []
116
+ };
117
+ }
118
+
119
+ packageStats[pkg].totalFiles++;
120
+ packageStats[pkg].totalLines += file.lineCount;
121
+ packageStats[pkg].files.push(file.path);
122
+
123
+ if (file.lineCount <= SIZE_CATEGORIES.LARGE.min) {
124
+ packageStats[pkg].compliantFiles++;
125
+ }
126
+ }
127
+
128
+ // Calculate compliance rates
129
+ for (const stats of Object.values(packageStats)) {
130
+ stats.complianceRate = stats.totalFiles > 0
131
+ ? (stats.compliantFiles / stats.totalFiles * 100).toFixed(1)
132
+ : 0;
133
+ stats.averageLines = stats.totalFiles > 0
134
+ ? Math.round(stats.totalLines / stats.totalFiles)
135
+ : 0;
136
+ }
137
+
138
+ return packageStats;
139
+ }
140
+
141
+ /**
142
+ * Analyze file type statistics
143
+ */
144
+ static analyzeFileTypeStats(files) {
145
+ const typeStats = {};
146
+
147
+ for (const file of files) {
148
+ const ext = path.extname(file.path);
149
+ if (!typeStats[ext]) {
150
+ typeStats[ext] = {
151
+ count: 0,
152
+ totalLines: 0,
153
+ averageLines: 0
154
+ };
155
+ }
156
+
157
+ typeStats[ext].count++;
158
+ typeStats[ext].totalLines += file.lineCount;
159
+ }
160
+
161
+ // Calculate averages
162
+ for (const stats of Object.values(typeStats)) {
163
+ stats.averageLines = stats.count > 0
164
+ ? Math.round(stats.totalLines / stats.count)
165
+ : 0;
166
+ }
167
+
168
+ return typeStats;
169
+ }
170
+
171
+ /**
172
+ * Calculate complexity metrics (simplified)
173
+ */
174
+ static calculateComplexityMetrics(files) {
175
+ return {
176
+ totalComplexity: 0,
177
+ averageComplexity: 0,
178
+ complexityDistribution: {
179
+ low: 0,
180
+ medium: 0,
181
+ high: 0,
182
+ veryHigh: 0
183
+ }
184
+ };
185
+ }
186
+
187
+ /**
188
+ * Generate compliance metrics
189
+ */
190
+ static generateComplianceMetrics(validationData) {
191
+ const results = validationData.results || [];
192
+ const filesValidated = validationData.filesValidated || 0;
193
+
194
+ const errorCount = results.filter(r => r.severity === 'error').length;
195
+ const warningCount = results.filter(r => r.severity === 'warning').length;
196
+
197
+ return {
198
+ overallScore: filesValidated > 0 ? Math.max(0, 100 - (errorCount * 10 + warningCount * 2)) : 0,
199
+ fileComplianceRate: filesValidated > 0 ? ((filesValidated - errorCount) / filesValidated * 100) : 0,
200
+ lineComplianceRate: 0, // Would need line-level analysis
201
+ violationCount: errorCount,
202
+ lastChecked: new Date().toISOString(),
203
+ status: errorCount === 0 ? 'compliant' : warningCount > 0 ? 'warning' : 'non-compliant'
204
+ };
205
+ }
206
+
207
+ /**
208
+ * Extract package name from file path
209
+ */
210
+ static extractPackageFromPath(filePath) {
211
+ const match = filePath.match(/packages\/([^\/]+)/);
212
+ return match ? match[1] : 'root';
213
+ }
214
+ }
215
+
216
+ module.exports = {
217
+ ReportAnalysis
218
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Report Types and Constants
3
+ *
4
+ * Defines report types, output formats, and shared constants.
5
+ */
6
+
7
+ /**
8
+ * Report types
9
+ */
10
+ const REPORT_TYPES = {
11
+ ANALYSIS: 'analysis',
12
+ REFACTORING: 'refactoring',
13
+ VALIDATION: 'validation',
14
+ COMPLIANCE: 'compliance'
15
+ };
16
+
17
+ /**
18
+ * Output formats
19
+ */
20
+ const OUTPUT_FORMATS = {
21
+ JSON: 'json',
22
+ MARKDOWN: 'markdown',
23
+ CONSOLE: 'console',
24
+ HTML: 'html'
25
+ };
26
+
27
+ /**
28
+ * File size categories for analysis
29
+ */
30
+ const SIZE_CATEGORIES = {
31
+ SMALL: { max: 300, label: 'small' },
32
+ MEDIUM: { min: 301, max: 555, label: 'medium' },
33
+ LARGE: { min: 556, max: 800, label: 'large' },
34
+ XLARGE: { min: 801, label: 'xlarge' }
35
+ };
36
+
37
+ /**
38
+ * Line count distribution ranges
39
+ */
40
+ const LINE_DISTRIBUTION = {
41
+ '0-100': { min: 0, max: 100 },
42
+ '101-200': { min: 101, max: 200 },
43
+ '201-300': { min: 201, max: 300 },
44
+ '301-400': { min: 301, max: 400 },
45
+ '401-500': { min: 401, max: 500 },
46
+ '501-555': { min: 501, max: 555 },
47
+ '556+': { min: 556, max: Infinity }
48
+ };
49
+
50
+ module.exports = {
51
+ REPORT_TYPES,
52
+ OUTPUT_FORMATS,
53
+ SIZE_CATEGORIES,
54
+ LINE_DISTRIBUTION
55
+ };
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Report Summary Generators
3
+ *
4
+ * Generates summary data for different report types.
5
+ */
6
+
7
+ const { SIZE_CATEGORIES } = require('./report-types');
8
+
9
+ /**
10
+ * Summary generation utilities
11
+ */
12
+ class SummaryGenerators {
13
+ /**
14
+ * Generate analysis summary
15
+ */
16
+ static generateAnalysisSummary(analysisData) {
17
+ const files = analysisData.files || [];
18
+ const totalFiles = files.length;
19
+ const largeFiles = files.filter(f => f.lineCount > SIZE_CATEGORIES.LARGE.min).length;
20
+ const mediumFiles = files.filter(f =>
21
+ f.lineCount >= SIZE_CATEGORIES.MEDIUM.min && f.lineCount <= SIZE_CATEGORIES.MEDIUM.max
22
+ ).length;
23
+ const smallFiles = files.filter(f => f.lineCount <= SIZE_CATEGORIES.SMALL.max).length;
24
+
25
+ const totalLines = files.reduce((sum, f) => sum + f.lineCount, 0);
26
+ const avgLines = totalFiles > 0 ? Math.round(totalLines / totalFiles) : 0;
27
+
28
+ return {
29
+ totalFiles,
30
+ totalLines,
31
+ averageLines: avgLines,
32
+ sizeDistribution: {
33
+ small: smallFiles,
34
+ medium: mediumFiles,
35
+ large: largeFiles,
36
+ xlarge: files.filter(f => f.lineCount > SIZE_CATEGORIES.XLARGE.min).length
37
+ },
38
+ complianceRate: totalFiles > 0 ? ((totalFiles - largeFiles) / totalFiles * 100).toFixed(1) : 0,
39
+ needsRefactoring: largeFiles + mediumFiles
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Generate refactoring summary
45
+ */
46
+ static generateRefactoringSummary(refactoringData) {
47
+ const operations = refactoringData.operations || [];
48
+ const successful = operations.filter(op => op.status === 'success').length;
49
+ const failed = operations.filter(op => op.status === 'failed').length;
50
+ const skipped = operations.filter(op => op.status === 'skipped').length;
51
+
52
+ return {
53
+ totalOperations: operations.length,
54
+ successful,
55
+ failed,
56
+ skipped,
57
+ successRate: operations.length > 0 ? (successful / operations.length * 100).toFixed(1) : 0,
58
+ filesProcessed: refactoringData.filesProcessed || 0,
59
+ linesReduced: refactoringData.linesReduced || 0,
60
+ modulesCreated: refactoringData.modulesCreated || 0
61
+ };
62
+ }
63
+
64
+ /**
65
+ * Generate validation summary
66
+ */
67
+ static generateValidationSummary(validationData) {
68
+ const results = validationData.results || [];
69
+ const errors = results.filter(r => r.severity === 'error').length;
70
+ const warnings = results.filter(r => r.severity === 'warning').length;
71
+ const info = results.filter(r => r.severity === 'info').length;
72
+
73
+ return {
74
+ totalIssues: results.length,
75
+ errors,
76
+ warnings,
77
+ info,
78
+ filesValidated: validationData.filesValidated || 0,
79
+ passed: errors === 0
80
+ };
81
+ }
82
+
83
+ /**
84
+ * Generate compliance summary
85
+ */
86
+ static generateComplianceSummary(complianceData) {
87
+ const metrics = complianceData.metrics || {};
88
+
89
+ return {
90
+ overallScore: metrics.overallScore || 0,
91
+ fileComplianceRate: metrics.fileComplianceRate || 0,
92
+ lineComplianceRate: metrics.lineComplianceRate || 0,
93
+ violationCount: metrics.violationCount || 0,
94
+ lastChecked: metrics.lastChecked || new Date().toISOString(),
95
+ status: metrics.status || 'unknown'
96
+ };
97
+ }
98
+ }
99
+
100
+ module.exports = {
101
+ SummaryGenerators
102
+ };
@@ -0,0 +1,157 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const os = require('os');
4
+ const { getRequirementsPath } = require('./repo-helpers.cjs');
5
+ const { logger } = require('./logger.cjs');
6
+
7
+ /**
8
+ * Requirement file creation and path management utilities
9
+ */
10
+
11
+ // Default instruction text
12
+ const DEFAULT_INSTRUCTION_TEXT = 'Follow INSTRUCTIONS.md from .vibecodingmachine directory. CRITICAL: You MUST work through ALL status stages (PREPARE → ACT → CLEAN UP → VERIFY → DONE) and set the status to DONE in the REQUIREMENTS file before stopping. DO NOT stop working until the "🚦 Current Status" section shows "DONE". The VibeCodingMachine app is running in autonomous mode and depends on you completing the requirement fully.';
13
+
14
+ /**
15
+ * Create a default requirements file
16
+ * @param {string} repoPath - Repository path
17
+ * @returns {string} Path to created file
18
+ */
19
+ function createDefaultRequirementsFile(repoPath) {
20
+ try {
21
+ const hostname = os.hostname();
22
+ // Use the core logic to find the .vibecodingmachine directory
23
+ // Note: This logic assumes we want to create it INSIDE the repo if it doesn't exist?
24
+ // Electron app logic was: path.join(repoPath, '.vibecodingmachine')
25
+ // We'll stick to that for creation.
26
+ const vibecodingmachineDir = path.join(repoPath, '.vibecodingmachine');
27
+
28
+ // Ensure .vibecodingmachine directory exists
29
+ if (!fs.existsSync(vibecodingmachineDir)) {
30
+ fs.mkdirSync(vibecodingmachineDir, { recursive: true });
31
+ logger.log('📁 Created .vibecodingmachine directory');
32
+ }
33
+
34
+ // Create hostname-specific requirements file
35
+ const requirementsFilePath = path.join(vibecodingmachineDir, `REQUIREMENTS-${hostname}.md`);
36
+
37
+ const defaultContent = `# 🌙 VibeCodingMachine – Requirements File
38
+
39
+ This is a Markdown (.md) file.
40
+
41
+ You should not need to modify this file, as VibeCodingMachine will modify it for you, but you can add requirements and move them around either here directly, or via AI.
42
+
43
+ This file contains the requirements to complete the project. Each item in a list is a self contained requirement that should be able to stand on its own, and not require reference to other requirements. Each requirement starts in the section of requirements to complete, then it moved to the section with the current requirement being worked on. VibeCodingMachine will then, after implementing the requirement, move it to the completed requirements list in the CHANGELOG.md file, or to the section in this file for requirements that need attention. These will be available for you to review. They should have options to choose, and you decide which option to take, and VibeCodingMachine will work on that again the next time it is run.
44
+
45
+ ## RESPONSE FROM LAST CHAT
46
+
47
+ ### ONE LINE STATUS: READY
48
+
49
+ ### ONE LINE SUMMARY: New requirements file created
50
+
51
+ ### MULTILINE DETAILS: (1-20 lines max)
52
+
53
+ **REQUIREMENT:**
54
+ - Initial setup complete
55
+
56
+ **ALL PHASES COMPLETED:**
57
+ - ✅ Requirements file created
58
+ - ✅ Ready for new requirements
59
+
60
+ ## 🔨 Current In Progress Requirement
61
+
62
+ *No current requirement in progress*
63
+
64
+ ## 📋 Requirements to Complete
65
+
66
+ *No requirements to complete*
67
+
68
+ ## ⚠️ Requirements That Need Attention
69
+
70
+ *No requirements need attention*
71
+
72
+ ## ✅ Completed Requirements
73
+
74
+ *No completed requirements yet*
75
+
76
+ ---
77
+
78
+ *This file was automatically created by VibeCodingMachine*
79
+ `;
80
+
81
+ fs.writeFileSync(requirementsFilePath, defaultContent, 'utf8');
82
+ logger.log(`📄 Created default requirements file: ${requirementsFilePath}`);
83
+
84
+ return requirementsFilePath;
85
+ } catch (error) {
86
+ logger.error('❌ Error creating default requirements file:', error);
87
+ throw error;
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Get or create requirements file path
93
+ * @param {string} repoPath - Repository path
94
+ * @returns {Promise<string>} Path to requirements file
95
+ */
96
+ async function getOrCreateRequirementsFilePath(repoPath) {
97
+ try {
98
+ const hostname = os.hostname();
99
+
100
+ // Use shared logic to find existing path first
101
+ let requirementsFilePath = await getRequirementsPath(repoPath, hostname);
102
+
103
+ if (requirementsFilePath && await fs.pathExists(requirementsFilePath)) {
104
+ return requirementsFilePath;
105
+ } else {
106
+ // Create a new hostname-specific requirements file
107
+ // We default to creating it inside the repo under .vibecodingmachine
108
+ requirementsFilePath = path.join(repoPath, '.vibecodingmachine', `REQUIREMENTS-${hostname}.md`);
109
+
110
+ const fs = require('fs-extra');
111
+ const defaultRequirementsContent = `# 🌙 VibeCodingMachine – Requirements File
112
+
113
+ This is a Markdown (.md) file.
114
+
115
+ You should not need to modify this file, as VibeCodingMachine will modify it for you, but you can add requirements and move them around either here directly, or via AI.
116
+
117
+ This file contains the requirements to complete the project. Each item in a list is a self contained requirement that should be able to stand on its own, and not require reference to other requirements. Each requirement starts in the section of requirements to complete, then it moved to the section with the current requirement being worked on. VibeCodingMachine will then, after implementing the requirement, move it to the completed requirements list in the CHANGELOG.md file, or to the section in this file for requirements that need attention. These will be available for you to review. They should have options to choose, and you decide which option to take, and VibeCodingMachine will work on that again the next time it is run.
118
+
119
+ ## RESPONSE FROM LAST CHAT
120
+
121
+ ### ONE LINE STATUS:
122
+
123
+ ### ONE LINE SUMMARY:
124
+
125
+ ### MULTILINE DETAILS: (1-20 lines max)
126
+
127
+ ## 🔨 Current In Progress Requirement
128
+
129
+ -
130
+
131
+ ## 🚦 Current Status
132
+
133
+ PREPARE
134
+
135
+ ## ⏳ Requirements not yet completed
136
+
137
+ -
138
+
139
+ ## ✅ Verified by AI screenshot
140
+
141
+ `;
142
+ fs.ensureDirSync(path.join(repoPath, '.vibecodingmachine'));
143
+ fs.writeFileSync(requirementsFilePath, defaultRequirementsContent, 'utf8');
144
+ }
145
+
146
+ return requirementsFilePath;
147
+ } catch (error) {
148
+ logger.error('❌ Error getting or creating requirements file path:', error);
149
+ throw error;
150
+ }
151
+ }
152
+
153
+ module.exports = {
154
+ DEFAULT_INSTRUCTION_TEXT,
155
+ createDefaultRequirementsFile,
156
+ getOrCreateRequirementsFilePath
157
+ };