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,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Configuration Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages agent configurations and settings.
|
|
5
|
+
* Follows constitutional requirements: <555 lines, test-first approach.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs').promises;
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const Agent = require('../Agent');
|
|
11
|
+
const AgentDefaultsRegistry = require('./AgentDefaultsRegistry');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Agent configuration manager class
|
|
15
|
+
*/
|
|
16
|
+
class AgentConfigManager {
|
|
17
|
+
/**
|
|
18
|
+
* Create configuration manager instance
|
|
19
|
+
* @param {Object} options - Configuration options
|
|
20
|
+
* @param {string} options.configPath - Path to configuration file
|
|
21
|
+
* @param {string} options.projectRoot - Project root directory
|
|
22
|
+
*/
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
this.configPath = options.configPath || path.join(process.cwd(), 'config', 'agents.json');
|
|
25
|
+
this.projectRoot = options.projectRoot || process.cwd();
|
|
26
|
+
this.agents = new Map();
|
|
27
|
+
this.defaultsRegistry = new AgentDefaultsRegistry();
|
|
28
|
+
this.loaded = false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Load agent configurations from file
|
|
33
|
+
* @returns {Promise<void>}
|
|
34
|
+
*/
|
|
35
|
+
async load() {
|
|
36
|
+
try {
|
|
37
|
+
const configData = await this.readConfigFile();
|
|
38
|
+
this.parseConfig(configData);
|
|
39
|
+
this.loaded = true;
|
|
40
|
+
} catch (error) {
|
|
41
|
+
// If config file doesn't exist, create default config
|
|
42
|
+
if (error.code === 'ENOENT') {
|
|
43
|
+
await this.createDefaultConfig();
|
|
44
|
+
this.loaded = true;
|
|
45
|
+
} else if (error instanceof SyntaxError || error.message.includes('JSON')) {
|
|
46
|
+
// Handle corrupted configuration files
|
|
47
|
+
console.warn(`Configuration file is corrupted: ${error.message}. Creating fresh defaults.`);
|
|
48
|
+
await this.createDefaultConfig();
|
|
49
|
+
this.loaded = true;
|
|
50
|
+
} else {
|
|
51
|
+
throw new Error(`Failed to load agent configuration: ${error.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Read configuration file
|
|
58
|
+
* @returns {Promise<Object>} - Configuration data
|
|
59
|
+
*/
|
|
60
|
+
async readConfigFile() {
|
|
61
|
+
const data = await fs.readFile(this.configPath, 'utf8');
|
|
62
|
+
return JSON.parse(data);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Parse configuration data and create agent instances
|
|
67
|
+
* @param {Object} configData - Configuration data
|
|
68
|
+
*/
|
|
69
|
+
parseConfig(configData) {
|
|
70
|
+
this.agents.clear();
|
|
71
|
+
|
|
72
|
+
// Handle both object format (agents.agents) and array format (agents)
|
|
73
|
+
let agentsData = [];
|
|
74
|
+
if (configData.agents) {
|
|
75
|
+
if (Array.isArray(configData.agents)) {
|
|
76
|
+
agentsData = configData.agents;
|
|
77
|
+
} else if (typeof configData.agents === 'object') {
|
|
78
|
+
// Convert object format to array
|
|
79
|
+
agentsData = Object.values(configData.agents);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
agentsData.forEach(agentData => {
|
|
84
|
+
try {
|
|
85
|
+
const agent = Agent.fromJSON(agentData);
|
|
86
|
+
this.agents.set(agent.id, agent);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
console.warn(`Failed to load agent ${agentData.id || 'unknown'}: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Add default agents if not present
|
|
93
|
+
this.addDefaultAgents();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Add default agents to configuration using AgentDefaultsRegistry
|
|
98
|
+
*/
|
|
99
|
+
addDefaultAgents() {
|
|
100
|
+
const existingAgents = Array.from(this.agents.values());
|
|
101
|
+
const missingDefaults = this.defaultsRegistry.getMissingDefaultAgents(existingAgents);
|
|
102
|
+
|
|
103
|
+
// Add missing default agents
|
|
104
|
+
missingDefaults.forEach(agent => {
|
|
105
|
+
this.agents.set(agent.id, agent);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Create default configuration file using AgentDefaultsRegistry
|
|
111
|
+
* @returns {Promise<void>}
|
|
112
|
+
*/
|
|
113
|
+
async createDefaultConfig() {
|
|
114
|
+
const defaultConfig = this.defaultsRegistry.getDefaultConfiguration();
|
|
115
|
+
await this.saveConfig(defaultConfig);
|
|
116
|
+
this.parseConfig(defaultConfig);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Save configuration to file
|
|
121
|
+
* @param {Object} configData - Configuration data to save
|
|
122
|
+
* @returns {Promise<void>}
|
|
123
|
+
*/
|
|
124
|
+
async saveConfig(configData = null) {
|
|
125
|
+
const dataToSave = configData || this.getCurrentConfig();
|
|
126
|
+
|
|
127
|
+
// Ensure directory exists
|
|
128
|
+
const configDir = path.dirname(this.configPath);
|
|
129
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
130
|
+
|
|
131
|
+
await fs.writeFile(this.configPath, JSON.stringify(dataToSave, null, 2), 'utf8');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get current configuration as object
|
|
136
|
+
* @returns {Object} - Current configuration
|
|
137
|
+
*/
|
|
138
|
+
getCurrentConfig() {
|
|
139
|
+
return {
|
|
140
|
+
version: '1.0.0',
|
|
141
|
+
lastUpdated: new Date().toISOString(),
|
|
142
|
+
global: this.getGlobalSettings(),
|
|
143
|
+
agents: Array.from(this.agents.values()).map(agent => agent.toJSON())
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Get global settings from AgentDefaultsRegistry
|
|
149
|
+
* @returns {Object} - Global settings
|
|
150
|
+
*/
|
|
151
|
+
getGlobalSettings() {
|
|
152
|
+
const globalDefaults = this.defaultsRegistry.getGlobalDefaults();
|
|
153
|
+
return globalDefaults.global || {
|
|
154
|
+
parallelInstallation: true,
|
|
155
|
+
timeoutSeconds: 300,
|
|
156
|
+
retryAttempts: 3,
|
|
157
|
+
logLevel: 'info'
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get all agents
|
|
163
|
+
* @returns {Agent[]} - Array of all agents
|
|
164
|
+
*/
|
|
165
|
+
getAllAgents() {
|
|
166
|
+
return Array.from(this.agents.values());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Get agent by ID
|
|
171
|
+
* @param {string} agentId - Agent identifier
|
|
172
|
+
* @returns {Agent|null} - Agent instance or null
|
|
173
|
+
*/
|
|
174
|
+
getAgent(agentId) {
|
|
175
|
+
return this.agents.get(agentId) || null;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Get enabled agents
|
|
180
|
+
* @returns {Agent[]} - Array of enabled agents
|
|
181
|
+
*/
|
|
182
|
+
getEnabledAgents() {
|
|
183
|
+
return this.getAllAgents().filter(agent => agent.enabled);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Add or update agent
|
|
188
|
+
* @param {Agent} agent - Agent to add/update
|
|
189
|
+
* @returns {Promise<void>}
|
|
190
|
+
*/
|
|
191
|
+
async saveAgent(agent) {
|
|
192
|
+
if (!(agent instanceof Agent)) {
|
|
193
|
+
throw new Error('Agent must be an instance of Agent class');
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
this.agents.set(agent.id, agent);
|
|
197
|
+
await this.saveConfig();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Remove agent
|
|
202
|
+
* @param {string} agentId - Agent identifier to remove
|
|
203
|
+
* @returns {Promise<boolean>} - True if agent was removed
|
|
204
|
+
*/
|
|
205
|
+
async removeAgent(agentId) {
|
|
206
|
+
const removed = this.agents.delete(agentId);
|
|
207
|
+
if (removed) {
|
|
208
|
+
await this.saveConfig();
|
|
209
|
+
}
|
|
210
|
+
return removed;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Enable agent
|
|
215
|
+
* @param {string} agentId - Agent identifier
|
|
216
|
+
* @returns {Promise<boolean>} - True if agent was enabled
|
|
217
|
+
*/
|
|
218
|
+
async enableAgent(agentId) {
|
|
219
|
+
const agent = this.agents.get(agentId);
|
|
220
|
+
if (agent) {
|
|
221
|
+
agent.enabled = true;
|
|
222
|
+
await this.saveConfig();
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Disable agent
|
|
230
|
+
* @param {string} agentId - Agent identifier
|
|
231
|
+
* @returns {Promise<boolean>} - True if agent was disabled
|
|
232
|
+
*/
|
|
233
|
+
async disableAgent(agentId) {
|
|
234
|
+
const agent = this.agents.get(agentId);
|
|
235
|
+
if (agent) {
|
|
236
|
+
agent.enabled = false;
|
|
237
|
+
await this.saveConfig();
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Add installation method to agent
|
|
245
|
+
* @param {string} agentId - Agent identifier
|
|
246
|
+
* @param {InstallationMethod} method - Installation method to add
|
|
247
|
+
* @returns {Promise<boolean>} - True if method was added
|
|
248
|
+
*/
|
|
249
|
+
async addInstallationMethod(agentId, method) {
|
|
250
|
+
const agent = this.agents.get(agentId);
|
|
251
|
+
if (agent) {
|
|
252
|
+
try {
|
|
253
|
+
agent.addInstallationMethod(method);
|
|
254
|
+
await this.saveConfig();
|
|
255
|
+
return true;
|
|
256
|
+
} catch (error) {
|
|
257
|
+
throw new Error(`Failed to add installation method: ${error.message}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Remove installation method from agent
|
|
265
|
+
* @param {string} agentId - Agent identifier
|
|
266
|
+
* @param {string} methodType - Installation method type to remove
|
|
267
|
+
* @returns {Promise<boolean>} - True if method was removed
|
|
268
|
+
*/
|
|
269
|
+
async removeInstallationMethod(agentId, methodType) {
|
|
270
|
+
const agent = this.agents.get(agentId);
|
|
271
|
+
if (agent) {
|
|
272
|
+
const removed = agent.removeInstallationMethod(methodType);
|
|
273
|
+
if (removed) {
|
|
274
|
+
await this.saveConfig();
|
|
275
|
+
}
|
|
276
|
+
return removed;
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Update agent status
|
|
283
|
+
* @param {string} agentId - Agent identifier
|
|
284
|
+
* @param {string} newStatus - New status
|
|
285
|
+
* @param {string} message - Status message
|
|
286
|
+
* @returns {Promise<boolean>} - True if status was updated
|
|
287
|
+
*/
|
|
288
|
+
async updateAgentStatus(agentId, newStatus, message = '') {
|
|
289
|
+
const agent = this.agents.get(agentId);
|
|
290
|
+
if (agent) {
|
|
291
|
+
agent.updateStatus(newStatus, message);
|
|
292
|
+
await this.saveConfig();
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Validate configuration using AgentDefaultsRegistry
|
|
300
|
+
* @returns {Object} - Validation result
|
|
301
|
+
*/
|
|
302
|
+
validateConfig() {
|
|
303
|
+
const result = {
|
|
304
|
+
valid: true,
|
|
305
|
+
errors: [],
|
|
306
|
+
warnings: []
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
try {
|
|
310
|
+
// Validate using defaults registry
|
|
311
|
+
const defaultsValidation = this.defaultsRegistry.validateDefaults();
|
|
312
|
+
if (!defaultsValidation.valid) {
|
|
313
|
+
result.valid = false;
|
|
314
|
+
result.errors.push(...defaultsValidation.errors);
|
|
315
|
+
}
|
|
316
|
+
result.warnings.push(...defaultsValidation.warnings);
|
|
317
|
+
|
|
318
|
+
// Validate each agent
|
|
319
|
+
for (const [agentId, agent] of this.agents) {
|
|
320
|
+
try {
|
|
321
|
+
agent.validate();
|
|
322
|
+
} catch (error) {
|
|
323
|
+
result.valid = false;
|
|
324
|
+
result.errors.push(`Agent ${agentId}: ${error.message}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Check for missing default agents
|
|
329
|
+
const missingDefaults = this.defaultsRegistry.getMissingDefaultAgents(Array.from(this.agents.values()));
|
|
330
|
+
missingDefaults.forEach(agent => {
|
|
331
|
+
result.warnings.push(`Default agent ${agent.id} is missing from configuration`);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
} catch (error) {
|
|
335
|
+
result.valid = false;
|
|
336
|
+
result.errors.push(`Configuration validation failed: ${error.message}`);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Reload configuration from file
|
|
344
|
+
* @returns {Promise<void>}
|
|
345
|
+
*/
|
|
346
|
+
async reload() {
|
|
347
|
+
await this.load();
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Get configuration summary
|
|
352
|
+
* @returns {Object} - Configuration summary
|
|
353
|
+
*/
|
|
354
|
+
getSummary() {
|
|
355
|
+
const agents = this.getAllAgents();
|
|
356
|
+
const enabled = agents.filter(agent => agent.enabled);
|
|
357
|
+
const installed = agents.filter(agent => agent.isInstalled());
|
|
358
|
+
const verified = agents.filter(agent => agent.isVerified());
|
|
359
|
+
|
|
360
|
+
return {
|
|
361
|
+
totalAgents: agents.length,
|
|
362
|
+
enabledAgents: enabled.length,
|
|
363
|
+
installedAgents: installed.length,
|
|
364
|
+
verifiedAgents: verified.length,
|
|
365
|
+
configPath: this.configPath,
|
|
366
|
+
lastLoaded: this.loaded ? new Date().toISOString() : null
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Export configuration to file
|
|
372
|
+
* @param {string} exportPath - Path to export file
|
|
373
|
+
* @returns {Promise<void>}
|
|
374
|
+
*/
|
|
375
|
+
async exportConfig(exportPath) {
|
|
376
|
+
const config = this.getCurrentConfig();
|
|
377
|
+
await fs.writeFile(exportPath, JSON.stringify(config, null, 2), 'utf8');
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Import configuration from file
|
|
382
|
+
* @param {string} importPath - Path to import file
|
|
383
|
+
* @returns {Promise<void>}
|
|
384
|
+
*/
|
|
385
|
+
async importConfig(importPath) {
|
|
386
|
+
const data = await fs.readFile(importPath, 'utf8');
|
|
387
|
+
const config = JSON.parse(data);
|
|
388
|
+
this.parseConfig(config);
|
|
389
|
+
await this.saveConfig();
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
module.exports = AgentConfigManager;
|