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