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,474 @@
1
+ /**
2
+ * Agent Communication Tester
3
+ *
4
+ * Tests agent communication through file operations and command execution.
5
+ * Follows constitutional requirements: <555 lines, test-first approach.
6
+ */
7
+
8
+ const TestRequirementManager = require('./TestRequirementManager');
9
+ const { VerificationType } = require('../VerificationType');
10
+
11
+ /**
12
+ * Agent communication tester class
13
+ */
14
+ class AgentCommunicationTester {
15
+ /**
16
+ * Create communication tester instance
17
+ * @param {Object} options - Tester options
18
+ */
19
+ constructor(options = {}) {
20
+ this.testManager = options.testManager || new TestRequirementManager(options);
21
+ this.logger = options.logger || null;
22
+ this.timeout = options.timeout || 30000;
23
+ this.maxConcurrentTests = options.maxConcurrentTests || 3;
24
+ this.continueOnFailure = options.continueOnFailure !== false;
25
+ }
26
+
27
+ /**
28
+ * Test agent communication
29
+ * @param {Object} agent - Agent configuration
30
+ * @param {Object} options - Test options
31
+ * @returns {Promise<Object>} - Test result
32
+ */
33
+ async testCommunication(agent, options = {}) {
34
+ const testId = `comm-test-${agent.id}-${Date.now()}`;
35
+ const startTime = Date.now();
36
+
37
+ try {
38
+ if (this.logger) {
39
+ await this.logger.info('Starting agent communication test', {
40
+ testId,
41
+ agentId: agent.id,
42
+ agentName: agent.name
43
+ });
44
+ }
45
+
46
+ const testConfigs = this.createTestConfigs(agent, options);
47
+ const results = [];
48
+ let allPassed = true;
49
+
50
+ // Run tests
51
+ for (const testConfig of testConfigs) {
52
+ try {
53
+ const result = await this.runSingleTest(agent, testConfig);
54
+ results.push(result);
55
+
56
+ if (!result.success && !this.continueOnFailure) {
57
+ break;
58
+ }
59
+ } catch (error) {
60
+ const errorResult = {
61
+ testId: testConfig.id,
62
+ success: false,
63
+ error: error.message,
64
+ duration: 0
65
+ };
66
+ results.push(errorResult);
67
+ allPassed = false;
68
+
69
+ if (!this.continueOnFailure) {
70
+ break;
71
+ }
72
+ }
73
+ }
74
+
75
+ // Calculate overall result
76
+ const passedTests = results.filter(r => r.success).length;
77
+ const totalTests = results.length;
78
+ allPassed = passedTests === totalTests && totalTests > 0;
79
+
80
+ const duration = Date.now() - startTime;
81
+
82
+ const testResult = {
83
+ success: allPassed,
84
+ testId,
85
+ agentId: agent.id,
86
+ agentName: agent.name,
87
+ duration,
88
+ results,
89
+ summary: {
90
+ totalTests,
91
+ passedTests,
92
+ failedTests: totalTests - passedTests,
93
+ allPassed
94
+ }
95
+ };
96
+
97
+ if (this.logger) {
98
+ await this.logger.info('Agent communication test completed', {
99
+ testId,
100
+ agentId: agent.id,
101
+ success: testResult.success,
102
+ summary: testResult.summary,
103
+ duration
104
+ });
105
+ }
106
+
107
+ return testResult;
108
+ } catch (error) {
109
+ const duration = Date.now() - startTime;
110
+
111
+ const errorResult = {
112
+ success: false,
113
+ testId,
114
+ agentId: agent.id,
115
+ agentName: agent.name,
116
+ duration,
117
+ error: error.message,
118
+ results: [],
119
+ summary: {
120
+ totalTests: 0,
121
+ passedTests: 0,
122
+ failedTests: 0,
123
+ allPassed: false
124
+ }
125
+ };
126
+
127
+ if (this.logger) {
128
+ await this.logger.error('Agent communication test failed', {
129
+ testId,
130
+ agentId: agent.id,
131
+ error: error.message,
132
+ duration
133
+ });
134
+ }
135
+
136
+ return errorResult;
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Run single communication test
142
+ * @param {Object} agent - Agent configuration
143
+ * @param {Object} testConfig - Test configuration
144
+ * @returns {Promise<Object>} - Test result
145
+ */
146
+ async runSingleTest(agent, testConfig) {
147
+ const startTime = Date.now();
148
+
149
+ try {
150
+ switch (testConfig.type) {
151
+ case VerificationType.FILE_OPERATION:
152
+ return await this.runFileOperationTest(agent, testConfig);
153
+
154
+ case VerificationType.COMMAND_EXECUTION:
155
+ return await this.runCommandExecutionTest(agent, testConfig);
156
+
157
+ default:
158
+ throw new Error(`Unsupported test type: ${testConfig.type}`);
159
+ }
160
+ } catch (error) {
161
+ const duration = Date.now() - startTime;
162
+
163
+ return {
164
+ testId: testConfig.id,
165
+ success: false,
166
+ error: error.message,
167
+ duration,
168
+ type: testConfig.type
169
+ };
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Run file operation test
175
+ * @param {Object} agent - Agent configuration
176
+ * @param {Object} testConfig - Test configuration
177
+ * @returns {Promise<Object>} - Test result
178
+ */
179
+ async runFileOperationTest(agent, testConfig) {
180
+ const startTime = Date.now();
181
+
182
+ try {
183
+ // Complete requirement cycle
184
+ const cycleResult = await this.testManager.completeRequirementCycle(
185
+ agent.id,
186
+ testConfig
187
+ );
188
+
189
+ const duration = Date.now() - startTime;
190
+
191
+ return {
192
+ testId: testConfig.id,
193
+ success: cycleResult.success,
194
+ duration,
195
+ type: VerificationType.FILE_OPERATION,
196
+ description: testConfig.description,
197
+ steps: cycleResult.steps,
198
+ summary: cycleResult.summary
199
+ };
200
+ } catch (error) {
201
+ const duration = Date.now() - startTime;
202
+
203
+ return {
204
+ testId: testConfig.id,
205
+ success: false,
206
+ error: error.message,
207
+ duration,
208
+ type: VerificationType.FILE_OPERATION,
209
+ description: testConfig.description
210
+ };
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Run command execution test
216
+ * @param {Object} agent - Agent configuration
217
+ * @param {Object} testConfig - Test configuration
218
+ * @returns {Promise<Object>} - Test result
219
+ */
220
+ async runCommandExecutionTest(agent, testConfig) {
221
+ const startTime = Date.now();
222
+
223
+ try {
224
+ const { spawn } = require('child_process');
225
+
226
+ const result = await new Promise((resolve, reject) => {
227
+ const timeout = setTimeout(() => {
228
+ reject(new Error(`Command timeout: ${testConfig.command}`));
229
+ }, testConfig.timeout || this.timeout);
230
+
231
+ const child = spawn(testConfig.command, {
232
+ shell: true,
233
+ stdio: ['pipe', 'pipe', 'pipe']
234
+ });
235
+
236
+ let stdout = '';
237
+ let stderr = '';
238
+
239
+ child.stdout.on('data', (data) => {
240
+ stdout += data.toString();
241
+ });
242
+
243
+ child.stderr.on('data', (data) => {
244
+ stderr += data.toString();
245
+ });
246
+
247
+ child.on('close', (code) => {
248
+ clearTimeout(timeout);
249
+
250
+ resolve({
251
+ exitCode: code,
252
+ stdout: stdout.trim(),
253
+ stderr: stderr.trim()
254
+ });
255
+ });
256
+
257
+ child.on('error', (error) => {
258
+ clearTimeout(timeout);
259
+ reject(error);
260
+ });
261
+ });
262
+
263
+ const duration = Date.now() - startTime;
264
+ const success = result.exitCode === 0;
265
+
266
+ // Check if expected result is in output
267
+ const expectedResultFound = testConfig.expectedResult &&
268
+ result.stdout.includes(testConfig.expectedResult);
269
+
270
+ const testSuccess = success && (!testConfig.expectedResult || expectedResultFound);
271
+
272
+ return {
273
+ testId: testConfig.id,
274
+ success: testSuccess,
275
+ duration,
276
+ type: VerificationType.COMMAND_EXECUTION,
277
+ description: testConfig.description,
278
+ command: testConfig.command,
279
+ exitCode: result.exitCode,
280
+ stdout: result.stdout,
281
+ stderr: result.stderr,
282
+ expectedResult: testConfig.expectedResult,
283
+ expectedResultFound
284
+ };
285
+ } catch (error) {
286
+ const duration = Date.now() - startTime;
287
+
288
+ return {
289
+ testId: testConfig.id,
290
+ success: false,
291
+ error: error.message,
292
+ duration,
293
+ type: VerificationType.COMMAND_EXECUTION,
294
+ description: testConfig.description,
295
+ command: testConfig.command
296
+ };
297
+ }
298
+ }
299
+
300
+ /**
301
+ * Create test configurations for agent
302
+ * @param {Object} agent - Agent configuration
303
+ * @param {Object} options - Test options
304
+ * @returns {Array} - Test configurations
305
+ */
306
+ createTestConfigs(agent, options = {}) {
307
+ const configs = [];
308
+ const { testTypes = null } = options;
309
+
310
+ // File operation test
311
+ if (!testTypes || testTypes.includes(VerificationType.FILE_OPERATION)) {
312
+ configs.push({
313
+ id: `${agent.id}-file-op-test`,
314
+ type: VerificationType.FILE_OPERATION,
315
+ description: 'File write/read/delete communication test',
316
+ content: `communication-test-${agent.id}-${Date.now()}`,
317
+ timeout: 15000
318
+ });
319
+ }
320
+
321
+ // Command execution tests
322
+ if (!testTypes || testTypes.includes(VerificationType.COMMAND_EXECUTION)) {
323
+ // Test agent-specific commands
324
+ if (agent.verificationCommands && agent.verificationCommands.length > 0) {
325
+ agent.verificationCommands.forEach((command, index) => {
326
+ configs.push({
327
+ id: `${agent.id}-cmd-test-${index}`,
328
+ type: VerificationType.COMMAND_EXECUTION,
329
+ description: `Agent command test: ${command}`,
330
+ command: command,
331
+ expectedResult: null, // Just check exit code
332
+ timeout: 30000
333
+ });
334
+ });
335
+ }
336
+
337
+ // Generic command tests
338
+ configs.push({
339
+ id: `${agent.id}-echo-test`,
340
+ type: VerificationType.COMMAND_EXECUTION,
341
+ description: 'Echo command test',
342
+ command: `echo "communication-test-${agent.id}"`,
343
+ expectedResult: `communication-test-${agent.id}`,
344
+ timeout: 10000
345
+ });
346
+ }
347
+
348
+ return configs;
349
+ }
350
+
351
+ /**
352
+ * Test multiple agents communication
353
+ * @param {Array} agents - Agent configurations
354
+ * @param {Object} options - Test options
355
+ * @returns {Promise<Object>} - Batch test result
356
+ */
357
+ async testMultipleAgents(agents, options = {}) {
358
+ const batchId = `batch-comm-test-${Date.now()}`;
359
+ const startTime = Date.now();
360
+
361
+ try {
362
+ const results = [];
363
+
364
+ if (options.parallel && this.maxConcurrentTests > 1) {
365
+ // Parallel execution
366
+ const promises = agents.map(agent =>
367
+ this.testCommunication(agent, options)
368
+ );
369
+
370
+ const batchResults = await Promise.allSettled(promises);
371
+
372
+ batchResults.forEach((result, index) => {
373
+ if (result.status === 'fulfilled') {
374
+ results.push(result.value);
375
+ } else {
376
+ results.push({
377
+ success: false,
378
+ agentId: agents[index].id,
379
+ error: result.reason?.message || 'Unknown error',
380
+ duration: 0
381
+ });
382
+ }
383
+ });
384
+ } else {
385
+ // Sequential execution
386
+ for (const agent of agents) {
387
+ const result = await this.testCommunication(agent, options);
388
+ results.push(result);
389
+ }
390
+ }
391
+
392
+ const duration = Date.now() - startTime;
393
+
394
+ // Calculate summary
395
+ const totalAgents = agents.length;
396
+ const successfulAgents = results.filter(r => r.success).length;
397
+ const failedAgents = totalAgents - successfulAgents;
398
+
399
+ const batchResult = {
400
+ success: failedAgents === 0,
401
+ batchId,
402
+ duration,
403
+ results,
404
+ summary: {
405
+ totalAgents,
406
+ successfulAgents,
407
+ failedAgents,
408
+ successRate: totalAgents > 0 ? (successfulAgents / totalAgents) * 100 : 0
409
+ }
410
+ };
411
+
412
+ if (this.logger) {
413
+ await this.logger.info('Batch agent communication test completed', {
414
+ batchId,
415
+ summary: batchResult.summary,
416
+ duration
417
+ });
418
+ }
419
+
420
+ return batchResult;
421
+ } catch (error) {
422
+ const duration = Date.now() - startTime;
423
+
424
+ const errorResult = {
425
+ success: false,
426
+ batchId,
427
+ duration,
428
+ error: error.message,
429
+ results: [],
430
+ summary: {
431
+ totalAgents: agents.length,
432
+ successfulAgents: 0,
433
+ failedAgents: agents.length,
434
+ successRate: 0
435
+ }
436
+ };
437
+
438
+ if (this.logger) {
439
+ await this.logger.error('Batch agent communication test failed', {
440
+ batchId,
441
+ error: error.message,
442
+ duration
443
+ });
444
+ }
445
+
446
+ return errorResult;
447
+ }
448
+ }
449
+
450
+ /**
451
+ * Get tester information
452
+ * @returns {Object} - Tester info
453
+ */
454
+ getInfo() {
455
+ return {
456
+ name: 'Agent Communication Tester',
457
+ version: '1.0.0',
458
+ timeout: this.timeout,
459
+ maxConcurrentTests: this.maxConcurrentTests,
460
+ continueOnFailure: this.continueOnFailure,
461
+ features: [
462
+ 'file operation testing',
463
+ 'command execution testing',
464
+ 'parallel testing',
465
+ 'batch testing',
466
+ 'error handling',
467
+ 'timeout protection',
468
+ 'detailed logging'
469
+ ]
470
+ };
471
+ }
472
+ }
473
+
474
+ module.exports = AgentCommunicationTester;