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,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;