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.
- package/README.md +240 -0
- package/package.json +10 -2
- package/src/agents/Agent.js +300 -0
- package/src/agents/AgentAdditionService.js +311 -0
- package/src/agents/AgentCheckService.js +690 -0
- package/src/agents/AgentInstallationService.js +140 -0
- package/src/agents/AgentSetupService.js +467 -0
- package/src/agents/AgentStatus.js +183 -0
- package/src/agents/AgentVerificationService.js +634 -0
- package/src/agents/ConfigurationSchemaValidator.js +543 -0
- package/src/agents/EnvironmentConfigurationManager.js +602 -0
- package/src/agents/InstallationErrorHandler.js +372 -0
- package/src/agents/InstallationLog.js +363 -0
- package/src/agents/InstallationMethod.js +510 -0
- package/src/agents/InstallationOrchestrator.js +352 -0
- package/src/agents/InstallationProgressReporter.js +372 -0
- package/src/agents/InstallationRetryManager.js +322 -0
- package/src/agents/InstallationType.js +254 -0
- package/src/agents/OperationTypes.js +310 -0
- package/src/agents/PerformanceMetricsCollector.js +493 -0
- package/src/agents/SecurityValidationService.js +534 -0
- package/src/agents/VerificationTest.js +354 -0
- package/src/agents/VerificationType.js +226 -0
- package/src/agents/WindowsPermissionHandler.js +518 -0
- package/src/agents/config/AgentConfigManager.js +393 -0
- package/src/agents/config/AgentDefaultsRegistry.js +373 -0
- package/src/agents/config/ConfigValidator.js +281 -0
- package/src/agents/discovery/AgentDiscoveryService.js +707 -0
- package/src/agents/logging/AgentLogger.js +511 -0
- package/src/agents/status/AgentStatusManager.js +481 -0
- package/src/agents/storage/FileManager.js +454 -0
- package/src/agents/verification/AgentCommunicationTester.js +474 -0
- package/src/agents/verification/BaseVerifier.js +430 -0
- package/src/agents/verification/CommandVerifier.js +480 -0
- package/src/agents/verification/FileOperationVerifier.js +453 -0
- package/src/agents/verification/ResultAnalyzer.js +707 -0
- package/src/agents/verification/TestRequirementManager.js +495 -0
- package/src/agents/verification/VerificationRunner.js +433 -0
- package/src/agents/windows/BaseWindowsInstaller.js +441 -0
- package/src/agents/windows/ChocolateyInstaller.js +509 -0
- package/src/agents/windows/DirectInstaller.js +443 -0
- package/src/agents/windows/InstallerFactory.js +391 -0
- package/src/agents/windows/NpmInstaller.js +505 -0
- package/src/agents/windows/PowerShellInstaller.js +458 -0
- package/src/agents/windows/WinGetInstaller.js +390 -0
- package/src/analysis/analysis-reporter.js +132 -0
- package/src/analysis/boundary-detector.js +712 -0
- package/src/analysis/categorizer.js +340 -0
- package/src/analysis/codebase-scanner.js +384 -0
- package/src/analysis/line-counter.js +513 -0
- package/src/analysis/priority-calculator.js +679 -0
- package/src/analysis/report/analysis-report.js +250 -0
- package/src/analysis/report/package-analyzer.js +278 -0
- package/src/analysis/report/recommendation-generator.js +382 -0
- package/src/analysis/report/statistics-generator.js +515 -0
- package/src/analysis/reports/analysis-report-model.js +101 -0
- package/src/analysis/reports/recommendation-generator.js +283 -0
- package/src/analysis/reports/report-generators.js +191 -0
- package/src/analysis/reports/statistics-calculator.js +231 -0
- package/src/analysis/reports/trend-analyzer.js +219 -0
- package/src/analysis/strategy-generator.js +814 -0
- package/src/auto-mode/AutoModeBusinessLogic.js +836 -0
- package/src/config/refactoring-config.js +307 -0
- package/src/health-tracking/json-storage.js +38 -2
- package/src/ide-integration/applescript-manager-core.js +233 -0
- package/src/ide-integration/applescript-manager.cjs +357 -28
- package/src/ide-integration/applescript-manager.js +89 -3599
- package/src/ide-integration/cdp-manager.js +306 -0
- package/src/ide-integration/claude-code-cli-manager.cjs +1 -1
- package/src/ide-integration/continuation-handler.js +337 -0
- package/src/ide-integration/ide-status-checker.js +292 -0
- package/src/ide-integration/macos-ide-manager.js +627 -0
- package/src/ide-integration/macos-text-sender.js +528 -0
- package/src/ide-integration/response-reader.js +548 -0
- package/src/ide-integration/windows-automation-manager.js +121 -0
- package/src/ide-integration/windows-ide-manager.js +373 -0
- package/src/index.cjs +25 -3
- package/src/index.js +15 -1
- package/src/llm/direct-llm-manager.cjs +90 -2
- package/src/models/compliance-report.js +538 -0
- package/src/models/file-analysis.js +681 -0
- package/src/models/refactoring-plan.js +770 -0
- package/src/monitoring/alert-system.js +834 -0
- package/src/monitoring/compliance-progress-tracker.js +437 -0
- package/src/monitoring/continuous-scan-notifications.js +661 -0
- package/src/monitoring/continuous-scanner.js +279 -0
- package/src/monitoring/file-monitor/file-analyzer.js +262 -0
- package/src/monitoring/file-monitor/file-monitor.js +237 -0
- package/src/monitoring/file-monitor/watcher.js +194 -0
- package/src/monitoring/file-monitor.js +17 -0
- package/src/monitoring/notification-manager.js +437 -0
- package/src/monitoring/scanner-core.js +368 -0
- package/src/monitoring/scanner-events.js +214 -0
- package/src/monitoring/violation-notification-system.js +515 -0
- package/src/refactoring/boundaries/cohesion-analyzer.js +316 -0
- package/src/refactoring/boundaries/extraction-result.js +285 -0
- package/src/refactoring/boundaries/extraction-strategies.js +392 -0
- package/src/refactoring/boundaries/module-boundary.js +209 -0
- package/src/refactoring/boundary/boundary-detector.js +741 -0
- package/src/refactoring/boundary/boundary-types.js +405 -0
- package/src/refactoring/boundary/extraction-strategies.js +554 -0
- package/src/refactoring/boundary-extraction-result.js +77 -0
- package/src/refactoring/boundary-extraction-strategies.js +330 -0
- package/src/refactoring/boundary-extractor.js +384 -0
- package/src/refactoring/boundary-types.js +46 -0
- package/src/refactoring/circular/circular-dependency.js +88 -0
- package/src/refactoring/circular/cycle-detection.js +147 -0
- package/src/refactoring/circular/dependency-node.js +82 -0
- package/src/refactoring/circular/dependency-result.js +107 -0
- package/src/refactoring/circular/dependency-types.js +58 -0
- package/src/refactoring/circular/graph-builder.js +213 -0
- package/src/refactoring/circular/resolution-strategy.js +72 -0
- package/src/refactoring/circular/strategy-generator.js +229 -0
- package/src/refactoring/circular-dependency-resolver-original.js +809 -0
- package/src/refactoring/circular-dependency-resolver.js +200 -0
- package/src/refactoring/code-mover.js +761 -0
- package/src/refactoring/file-splitter.js +696 -0
- package/src/refactoring/functionality-validator.js +816 -0
- package/src/refactoring/import-manager.js +774 -0
- package/src/refactoring/module-boundary.js +107 -0
- package/src/refactoring/refactoring-executor.js +672 -0
- package/src/refactoring/refactoring-rollback.js +614 -0
- package/src/refactoring/test-validator.js +631 -0
- package/src/requirement-management/default-requirement-manager.js +321 -0
- package/src/requirement-management/requirement-file-parser.js +159 -0
- package/src/requirement-management/requirement-sequencer.js +221 -0
- package/src/rui/commands/AgentCommandParser.js +600 -0
- package/src/rui/commands/AgentCommands.js +487 -0
- package/src/rui/commands/AgentResponseFormatter.js +832 -0
- package/src/scripts/verify-full-compliance.js +269 -0
- package/src/sync/sync-engine-core.js +1 -0
- package/src/sync/sync-engine-remote-handlers.js +135 -0
- package/src/task-generation/automated-task-generator.js +351 -0
- package/src/task-generation/prioritizer.js +287 -0
- package/src/task-generation/task-list-updater.js +215 -0
- package/src/task-generation/task-management-integration.js +480 -0
- package/src/task-generation/task-manager-integration.js +270 -0
- package/src/task-generation/violation-task-generator.js +474 -0
- package/src/task-management/continuous-scan-integration.js +342 -0
- package/src/timeout-management/index.js +12 -3
- package/src/timeout-management/response-time-tracker.js +167 -0
- package/src/timeout-management/timeout-calculator.js +159 -0
- package/src/timeout-management/timeout-config-manager.js +172 -0
- package/src/utils/ast-analyzer.js +417 -0
- package/src/utils/current-requirement-manager.js +276 -0
- package/src/utils/current-requirement-operations.js +472 -0
- package/src/utils/dependency-mapper.js +456 -0
- package/src/utils/download-with-progress.js +4 -2
- package/src/utils/electron-update-checker.js +4 -1
- package/src/utils/file-size-analyzer.js +272 -0
- package/src/utils/import-updater.js +280 -0
- package/src/utils/refactoring-tools.js +512 -0
- package/src/utils/report-generator.js +569 -0
- package/src/utils/reports/report-analysis.js +218 -0
- package/src/utils/reports/report-types.js +55 -0
- package/src/utils/reports/summary-generators.js +102 -0
- package/src/utils/requirement-file-management.js +157 -0
- package/src/utils/requirement-helpers/requirement-file-ops.js +392 -0
- package/src/utils/requirement-helpers/requirement-mover.js +414 -0
- package/src/utils/requirement-helpers/requirement-parser.js +326 -0
- package/src/utils/requirement-helpers/requirement-status.js +320 -0
- package/src/utils/requirement-helpers-new.js +55 -0
- package/src/utils/requirement-helpers-refactored.js +367 -0
- package/src/utils/requirement-helpers.js +291 -1191
- package/src/utils/requirement-movement-operations.js +450 -0
- package/src/utils/requirement-movement.js +312 -0
- package/src/utils/requirement-parsing-helpers.js +56 -0
- package/src/utils/requirement-statistics.js +200 -0
- package/src/utils/requirement-text-utils.js +58 -0
- package/src/utils/rollback/rollback-handlers.js +125 -0
- package/src/utils/rollback/rollback-operation.js +63 -0
- package/src/utils/rollback/rollback-recorder.js +166 -0
- package/src/utils/rollback/rollback-state-manager.js +175 -0
- package/src/utils/rollback/rollback-types.js +33 -0
- package/src/utils/rollback/rollback-utils.js +110 -0
- package/src/utils/rollback-manager-original.js +569 -0
- package/src/utils/rollback-manager.js +202 -0
- package/src/utils/smoke-test-cli.js +362 -0
- package/src/utils/smoke-test-gui.js +351 -0
- package/src/utils/smoke-test-orchestrator.js +321 -0
- package/src/utils/smoke-test-runner.js +60 -0
- package/src/utils/smoke-test-web.js +347 -0
- package/src/utils/specification-helpers.js +39 -13
- package/src/utils/specification-migration.js +97 -0
- package/src/utils/test-runner.js +579 -0
- package/src/utils/validation-framework.js +518 -0
- package/src/validation/compliance-analyzer.js +197 -0
- package/src/validation/compliance-report-generator.js +343 -0
- package/src/validation/compliance-reporter.js +711 -0
- package/src/validation/compliance-rules.js +127 -0
- package/src/validation/constitution-validator-new.js +196 -0
- package/src/validation/constitution-validator.js +17 -0
- package/src/validation/file-validators.js +170 -0
- package/src/validation/line-limit/file-analyzer.js +201 -0
- package/src/validation/line-limit/line-limit-validator.js +208 -0
- package/src/validation/line-limit/validation-result.js +144 -0
- package/src/validation/line-limit-core.js +225 -0
- package/src/validation/line-limit-reporter.js +134 -0
- package/src/validation/line-limit-result.js +125 -0
- package/src/validation/line-limit-validator.js +41 -0
- package/src/validation/metrics-calculator.js +660 -0
- 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
|
+
};
|