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,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Verification Interface
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for agent verifiers.
|
|
5
|
+
* Follows constitutional requirements: <555 lines, test-first approach.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { VerificationType } = require('../VerificationType');
|
|
9
|
+
const { OperationType, OperationStatus } = require('../OperationTypes');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Abstract base class for agent verifiers
|
|
13
|
+
*/
|
|
14
|
+
class BaseVerifier {
|
|
15
|
+
/**
|
|
16
|
+
* Create verifier instance
|
|
17
|
+
* @param {Object} config - Verifier configuration
|
|
18
|
+
* @param {string} config.type - Verification type
|
|
19
|
+
* @param {string} config.description - Verification description
|
|
20
|
+
* @param {string} config.command - Verification command
|
|
21
|
+
* @param {string} config.expectedResult - Expected result
|
|
22
|
+
* @param {number} config.timeout - Timeout in seconds
|
|
23
|
+
* @param {AgentLogger} config.logger - Logger instance
|
|
24
|
+
*/
|
|
25
|
+
constructor(config = {}) {
|
|
26
|
+
this.type = config.type || '';
|
|
27
|
+
this.description = config.description || '';
|
|
28
|
+
this.command = config.command || '';
|
|
29
|
+
this.expectedResult = config.expectedResult || '';
|
|
30
|
+
this.timeout = config.timeout || 30;
|
|
31
|
+
this.logger = config.logger;
|
|
32
|
+
|
|
33
|
+
this.validate();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Validate verifier configuration
|
|
38
|
+
* @throws {Error} If configuration is invalid
|
|
39
|
+
*/
|
|
40
|
+
validate() {
|
|
41
|
+
if (!this.type || typeof this.type !== 'string') {
|
|
42
|
+
throw new Error('Verifier must have a valid type');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!Object.values(VerificationType).includes(this.type)) {
|
|
46
|
+
throw new Error(`Invalid verification type: ${this.type}`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!this.description || typeof this.description !== 'string') {
|
|
50
|
+
throw new Error('Verifier must have a valid description');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!this.command || typeof this.command !== 'string') {
|
|
54
|
+
throw new Error('Verifier must have a valid command');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (!this.expectedResult || typeof this.expectedResult !== 'string') {
|
|
58
|
+
throw new Error('Verifier must have a valid expected result');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (typeof this.timeout !== 'number' || this.timeout < 1 || this.timeout > 300) {
|
|
62
|
+
throw new Error('Timeout must be a number between 1 and 300 seconds');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Execute verification test
|
|
68
|
+
* @param {Object} options - Verification options
|
|
69
|
+
* @param {Object} options.context - Test context variables
|
|
70
|
+
* @param {string} options.agentId - Agent identifier
|
|
71
|
+
* @returns {Promise<Object>} - Verification result
|
|
72
|
+
*/
|
|
73
|
+
async verify(options = {}) {
|
|
74
|
+
const { context = {}, agentId = '' } = options;
|
|
75
|
+
|
|
76
|
+
if (this.logger) {
|
|
77
|
+
await this.logger.info(`Starting verification: ${this.description}`, {
|
|
78
|
+
type: this.type,
|
|
79
|
+
agentId,
|
|
80
|
+
description: this.description
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const startTime = Date.now();
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
// Build command with context
|
|
88
|
+
const command = this.buildCommand(context);
|
|
89
|
+
|
|
90
|
+
// Execute verification
|
|
91
|
+
const result = await this.executeVerification(command);
|
|
92
|
+
|
|
93
|
+
// Evaluate result
|
|
94
|
+
const passed = this.evaluateResult(result);
|
|
95
|
+
|
|
96
|
+
const verificationResult = {
|
|
97
|
+
id: this.generateId(),
|
|
98
|
+
agentId,
|
|
99
|
+
type: this.type,
|
|
100
|
+
description: this.description,
|
|
101
|
+
passed,
|
|
102
|
+
command,
|
|
103
|
+
result,
|
|
104
|
+
duration: Date.now() - startTime,
|
|
105
|
+
timeout: this.timeout * 1000,
|
|
106
|
+
timestamp: new Date().toISOString()
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
if (this.logger) {
|
|
110
|
+
const level = passed ? 'info' : 'warn';
|
|
111
|
+
const message = passed
|
|
112
|
+
? `Verification passed: ${this.description}`
|
|
113
|
+
: `Verification failed: ${this.description}`;
|
|
114
|
+
|
|
115
|
+
await this.logger[level](message, {
|
|
116
|
+
type: this.type,
|
|
117
|
+
agentId,
|
|
118
|
+
passed,
|
|
119
|
+
duration: verificationResult.duration
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return verificationResult;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
const errorResult = {
|
|
126
|
+
id: this.generateId(),
|
|
127
|
+
agentId,
|
|
128
|
+
type: this.type,
|
|
129
|
+
description: this.description,
|
|
130
|
+
passed: false,
|
|
131
|
+
error: error.message,
|
|
132
|
+
duration: Date.now() - startTime,
|
|
133
|
+
timeout: this.timeout * 1000,
|
|
134
|
+
timestamp: new Date().toISOString()
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
if (this.logger) {
|
|
138
|
+
await this.logger.error(`Verification error: ${this.description}`, {
|
|
139
|
+
type: this.type,
|
|
140
|
+
agentId,
|
|
141
|
+
error: error.message,
|
|
142
|
+
duration: errorResult.duration
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return errorResult;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Generate unique verification ID
|
|
152
|
+
* @returns {string} - Unique identifier
|
|
153
|
+
*/
|
|
154
|
+
generateId() {
|
|
155
|
+
const timestamp = Date.now();
|
|
156
|
+
const random = Math.random().toString(36).substr(2, 9);
|
|
157
|
+
return `verify-${this.type}-${timestamp}-${random}`;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Build command with context variables
|
|
162
|
+
* @param {Object} context - Context variables
|
|
163
|
+
* @returns {string} - Resolved command
|
|
164
|
+
*/
|
|
165
|
+
buildCommand(context) {
|
|
166
|
+
let command = this.command;
|
|
167
|
+
|
|
168
|
+
// Replace common placeholders
|
|
169
|
+
Object.entries(context).forEach(([key, value]) => {
|
|
170
|
+
const placeholder = `{${key}}`;
|
|
171
|
+
command = command.replace(new RegExp(placeholder, 'g'), value);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
return command;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Execute verification command
|
|
179
|
+
* @param {string} command - Command to execute
|
|
180
|
+
* @returns {Promise<Object>} - Command result
|
|
181
|
+
*/
|
|
182
|
+
async executeVerification(command) {
|
|
183
|
+
return new Promise((resolve, reject) => {
|
|
184
|
+
const { spawn } = require('child_process');
|
|
185
|
+
|
|
186
|
+
const child = spawn(command, [], {
|
|
187
|
+
shell: true,
|
|
188
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
let stdout = '';
|
|
192
|
+
let stderr = '';
|
|
193
|
+
|
|
194
|
+
child.stdout.on('data', (data) => {
|
|
195
|
+
stdout += data.toString();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
child.stderr.on('data', (data) => {
|
|
199
|
+
stderr += data.toString();
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const timeoutId = setTimeout(() => {
|
|
203
|
+
child.kill('SIGTERM');
|
|
204
|
+
reject(new Error(`Verification command timed out after ${this.timeout} seconds`));
|
|
205
|
+
}, this.timeout * 1000);
|
|
206
|
+
|
|
207
|
+
child.on('close', (code) => {
|
|
208
|
+
clearTimeout(timeoutId);
|
|
209
|
+
|
|
210
|
+
resolve({
|
|
211
|
+
exitCode: code,
|
|
212
|
+
stdout: stdout.trim(),
|
|
213
|
+
stderr: stderr.trim(),
|
|
214
|
+
success: code === 0
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
child.on('error', (error) => {
|
|
219
|
+
clearTimeout(timeoutId);
|
|
220
|
+
reject(error);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Evaluate verification result
|
|
227
|
+
* @param {Object} result - Command result
|
|
228
|
+
* @returns {boolean} - True if verification passed
|
|
229
|
+
*/
|
|
230
|
+
evaluateResult(result) {
|
|
231
|
+
// Default evaluation - check if command succeeded and output contains expected result
|
|
232
|
+
return result.success && this.containsExpectedResult(result.stdout);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Check if output contains expected result
|
|
237
|
+
* @param {string} output - Command output
|
|
238
|
+
* @returns {boolean} - True if expected result found
|
|
239
|
+
*/
|
|
240
|
+
containsExpectedResult(output) {
|
|
241
|
+
if (!output || !this.expectedResult) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Case-insensitive search
|
|
246
|
+
const outputLower = output.toLowerCase();
|
|
247
|
+
const expectedLower = this.expectedResult.toLowerCase();
|
|
248
|
+
|
|
249
|
+
return outputLower.includes(expectedLower);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Check if verification is safe to run in parallel
|
|
254
|
+
* @returns {boolean} - True if safe for parallel execution
|
|
255
|
+
*/
|
|
256
|
+
isSafeForParallel() {
|
|
257
|
+
// Default implementation - check verification type
|
|
258
|
+
switch (this.type) {
|
|
259
|
+
case VerificationType.FILE_OPERATION:
|
|
260
|
+
return false; // File operations may conflict
|
|
261
|
+
case VerificationType.API_CALL:
|
|
262
|
+
return true; // API calls are generally safe
|
|
263
|
+
case VerificationType.COMMAND_EXECUTION:
|
|
264
|
+
return true; // Command execution is generally safe
|
|
265
|
+
case VerificationType.NETWORK_TEST:
|
|
266
|
+
return true; // Network tests are safe
|
|
267
|
+
default:
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Get verification requirements
|
|
274
|
+
* @returns {string[]} - Array of requirements
|
|
275
|
+
*/
|
|
276
|
+
getRequirements() {
|
|
277
|
+
const requirements = {
|
|
278
|
+
[VerificationType.FILE_OPERATION]: ['file system', 'write permissions'],
|
|
279
|
+
[VerificationType.API_CALL]: ['agent installation', 'api access'],
|
|
280
|
+
[VerificationType.COMMAND_EXECUTION]: ['agent installation', 'command line'],
|
|
281
|
+
[VerificationType.NETWORK_TEST]: ['internet connection']
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
return requirements[this.type] || [];
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Get cleanup requirements
|
|
289
|
+
* @returns {string[]} - Array of cleanup actions
|
|
290
|
+
*/
|
|
291
|
+
getCleanupRequirements() {
|
|
292
|
+
const cleanup = {
|
|
293
|
+
[VerificationType.FILE_OPERATION]: ['remove test files', 'clean temporary directories'],
|
|
294
|
+
[VerificationType.API_CALL]: ['clear api sessions', 'reset authentication'],
|
|
295
|
+
[VerificationType.COMMAND_EXECUTION]: ['clear command history', 'reset environment'],
|
|
296
|
+
[VerificationType.NETWORK_TEST]: ['close network connections', 'clear dns cache']
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
return cleanup[this.type] || [];
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Perform cleanup after verification
|
|
304
|
+
* @param {Object} context - Verification context
|
|
305
|
+
* @returns {Promise<void>}
|
|
306
|
+
*/
|
|
307
|
+
async cleanup(context = {}) {
|
|
308
|
+
if (this.logger) {
|
|
309
|
+
await this.logger.debug(`Performing cleanup for ${this.type} verification`);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const cleanupActions = this.getCleanupRequirements();
|
|
313
|
+
|
|
314
|
+
for (const action of cleanupActions) {
|
|
315
|
+
try {
|
|
316
|
+
await this.performCleanupAction(action, context);
|
|
317
|
+
} catch (error) {
|
|
318
|
+
if (this.logger) {
|
|
319
|
+
await this.logger.warn(`Cleanup action failed: ${action}`, {
|
|
320
|
+
action,
|
|
321
|
+
error: error.message
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Perform a specific cleanup action
|
|
330
|
+
* @param {string} action - Cleanup action to perform
|
|
331
|
+
* @param {Object} context - Verification context
|
|
332
|
+
* @returns {Promise<void>}
|
|
333
|
+
*/
|
|
334
|
+
async performCleanupAction(action, context) {
|
|
335
|
+
// Default implementation - override in subclasses for specific cleanup
|
|
336
|
+
switch (action) {
|
|
337
|
+
case 'remove test files':
|
|
338
|
+
await this.removeTestFiles(context);
|
|
339
|
+
break;
|
|
340
|
+
case 'clear api sessions':
|
|
341
|
+
// API session cleanup would be implemented in specific verifier
|
|
342
|
+
break;
|
|
343
|
+
default:
|
|
344
|
+
// Unknown cleanup action - ignore
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Remove test files created during verification
|
|
351
|
+
* @param {Object} context - Verification context
|
|
352
|
+
* @returns {Promise<void>}
|
|
353
|
+
*/
|
|
354
|
+
async removeTestFiles(context) {
|
|
355
|
+
const { spawn } = require('child_process');
|
|
356
|
+
|
|
357
|
+
// Remove common test file patterns
|
|
358
|
+
const testFilePatterns = [
|
|
359
|
+
'test-requirement-*.txt',
|
|
360
|
+
'temp-verification-*.tmp',
|
|
361
|
+
'agent-test-*.log'
|
|
362
|
+
];
|
|
363
|
+
|
|
364
|
+
for (const pattern of testFilePatterns) {
|
|
365
|
+
try {
|
|
366
|
+
const command = process.platform === 'win32'
|
|
367
|
+
? `del /Q ${pattern} 2>nul`
|
|
368
|
+
: `rm -f ${pattern} 2>/dev/null`;
|
|
369
|
+
|
|
370
|
+
await new Promise((resolve, reject) => {
|
|
371
|
+
const child = spawn(command, [], { shell: true, stdio: 'ignore' });
|
|
372
|
+
child.on('close', resolve);
|
|
373
|
+
child.on('error', reject);
|
|
374
|
+
});
|
|
375
|
+
} catch {
|
|
376
|
+
// Ignore cleanup errors
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Get verifier information
|
|
383
|
+
* @returns {Object} - Verifier information
|
|
384
|
+
*/
|
|
385
|
+
getInfo() {
|
|
386
|
+
return {
|
|
387
|
+
type: this.type,
|
|
388
|
+
description: this.description,
|
|
389
|
+
command: this.command,
|
|
390
|
+
expectedResult: this.expectedResult,
|
|
391
|
+
timeout: this.timeout,
|
|
392
|
+
requirements: this.getRequirements(),
|
|
393
|
+
cleanupRequirements: this.getCleanupRequirements(),
|
|
394
|
+
safeForParallel: this.isSafeForParallel()
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Create verifier instance from configuration
|
|
400
|
+
* @param {Object} config - Configuration object
|
|
401
|
+
* @param {AgentLogger} logger - Logger instance
|
|
402
|
+
* @returns {BaseVerifier} - Verifier instance
|
|
403
|
+
*/
|
|
404
|
+
static fromConfig(config, logger = null) {
|
|
405
|
+
const verifierConfig = {
|
|
406
|
+
...config,
|
|
407
|
+
logger
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
// Return appropriate verifier subclass based on type
|
|
411
|
+
switch (config.type) {
|
|
412
|
+
case VerificationType.FILE_OPERATION:
|
|
413
|
+
const FileOperationVerifier = require('./FileOperationVerifier');
|
|
414
|
+
return new FileOperationVerifier(verifierConfig);
|
|
415
|
+
case VerificationType.API_CALL:
|
|
416
|
+
const ApiCallVerifier = require('./ApiCallVerifier');
|
|
417
|
+
return new ApiCallVerifier(verifierConfig);
|
|
418
|
+
case VerificationType.COMMAND_EXECUTION:
|
|
419
|
+
const CommandVerifier = require('./CommandVerifier');
|
|
420
|
+
return new CommandVerifier(verifierConfig);
|
|
421
|
+
case VerificationType.NETWORK_TEST:
|
|
422
|
+
const NetworkVerifier = require('./NetworkVerifier');
|
|
423
|
+
return new NetworkVerifier(verifierConfig);
|
|
424
|
+
default:
|
|
425
|
+
throw new Error(`Unknown verifier type: ${config.type}`);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
module.exports = BaseVerifier;
|