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