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,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates agent installation across multiple installers.
|
|
5
|
+
* Follows constitutional requirements: <555 lines, test-first approach.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const InstallerFactory = require('./windows/InstallerFactory');
|
|
9
|
+
const InstallationErrorHandler = require('./InstallationErrorHandler');
|
|
10
|
+
const InstallationProgressReporter = require('./InstallationProgressReporter');
|
|
11
|
+
const { AgentStatus } = require('./AgentStatus');
|
|
12
|
+
const { OperationType, OperationStatus } = require('./OperationTypes');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Installation Orchestrator class
|
|
16
|
+
*/
|
|
17
|
+
class InstallationOrchestrator {
|
|
18
|
+
/**
|
|
19
|
+
* Create orchestrator instance
|
|
20
|
+
* @param {Object} config - Orchestrator configuration
|
|
21
|
+
*/
|
|
22
|
+
constructor(config = {}) {
|
|
23
|
+
this.configManager = config.configManager || null;
|
|
24
|
+
this.logger = config.logger || null;
|
|
25
|
+
this.fileManager = config.fileManager || null;
|
|
26
|
+
this.parallel = config.parallel !== false;
|
|
27
|
+
this.maxConcurrency = config.maxConcurrency || 2;
|
|
28
|
+
this.timeout = config.timeout || 300000;
|
|
29
|
+
this.retryAttempts = config.retryAttempts || 3;
|
|
30
|
+
this.retryDelay = config.retryDelay || 5000;
|
|
31
|
+
|
|
32
|
+
// Initialize services
|
|
33
|
+
this.errorHandler = new InstallationErrorHandler({
|
|
34
|
+
logger: this.logger,
|
|
35
|
+
platform: config.platform,
|
|
36
|
+
arch: config.arch
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
this.progressReporter = new InstallationProgressReporter({
|
|
40
|
+
logger: this.logger,
|
|
41
|
+
updateInterval: config.progressUpdateInterval || 2000,
|
|
42
|
+
verbose: config.verboseProgress || false
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Install agent with orchestration
|
|
48
|
+
* @param {Object} agent - Agent to install
|
|
49
|
+
* @param {Object} options - Installation options
|
|
50
|
+
* @returns {Promise<Object>} - Installation result
|
|
51
|
+
*/
|
|
52
|
+
async installAgent(agent, options = {}) {
|
|
53
|
+
const { force = false, installerType = null, timeout = this.timeout } = options;
|
|
54
|
+
|
|
55
|
+
if (this.logger) {
|
|
56
|
+
await this.logger.info('Starting agent installation', {
|
|
57
|
+
agentId: agent.id,
|
|
58
|
+
agentName: agent.name,
|
|
59
|
+
force,
|
|
60
|
+
installerType,
|
|
61
|
+
timeout
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
const operationId = `install-${agent.id}-${Date.now()}`;
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
// Update agent status to INSTALLING
|
|
70
|
+
await this.updateAgentStatus(agent.id, AgentStatus.INSTALLING, 'Starting installation');
|
|
71
|
+
|
|
72
|
+
// Get available installers first
|
|
73
|
+
const installers = await this.getAvailableInstallers(agent, installerType);
|
|
74
|
+
|
|
75
|
+
// Start progress tracking
|
|
76
|
+
const progress = this.progressReporter.startProgress(operationId, {
|
|
77
|
+
agentId: agent.id,
|
|
78
|
+
installerType: installerType || 'AUTO',
|
|
79
|
+
totalSteps: installers.length * 2 + 2,
|
|
80
|
+
estimatedDuration: timeout
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
progress.updateStep('Checking available installers');
|
|
84
|
+
|
|
85
|
+
if (installers.length === 0) {
|
|
86
|
+
progress.fail(new Error('No available installers found for agent'));
|
|
87
|
+
throw new Error('No available installers found for agent');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
progress.updateStep(`Found ${installers.length} available installers`, {
|
|
91
|
+
installers: installers.map(i => i.type)
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Try installers in order of preference
|
|
95
|
+
let installationResult = await this.tryInstallers(agent, installers, progress, options);
|
|
96
|
+
|
|
97
|
+
if (!installationResult || !installationResult.success) {
|
|
98
|
+
progress.fail(new Error('All installation attempts failed'));
|
|
99
|
+
throw new Error('All installation attempts failed');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
progress.complete(installationResult);
|
|
103
|
+
|
|
104
|
+
const duration = Date.now() - startTime;
|
|
105
|
+
|
|
106
|
+
// Log installation success
|
|
107
|
+
await this.logInstallation(agent, installationResult, duration);
|
|
108
|
+
|
|
109
|
+
return {
|
|
110
|
+
success: true,
|
|
111
|
+
agentId: agent.id,
|
|
112
|
+
installerType: installationResult.installer,
|
|
113
|
+
duration,
|
|
114
|
+
result: installationResult,
|
|
115
|
+
timestamp: new Date().toISOString()
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
} catch (error) {
|
|
119
|
+
const duration = Date.now() - startTime;
|
|
120
|
+
|
|
121
|
+
// Enhanced error handling for main installation failure
|
|
122
|
+
const enhancedError = this.errorHandler.handleError(error, {
|
|
123
|
+
agentId: agent.id,
|
|
124
|
+
installerType: installerType || 'AUTO',
|
|
125
|
+
phase: 'MAIN_INSTALLATION'
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Update agent status to ERROR
|
|
129
|
+
await this.updateAgentStatus(agent.id, AgentStatus.ERROR, enhancedError.userMessage);
|
|
130
|
+
|
|
131
|
+
if (this.logger) {
|
|
132
|
+
await this.logger.error('Agent installation failed', {
|
|
133
|
+
agentId: agent.id,
|
|
134
|
+
duration,
|
|
135
|
+
error: error.message,
|
|
136
|
+
enhancedError: enhancedError.userMessage,
|
|
137
|
+
category: enhancedError.category,
|
|
138
|
+
severity: enhancedError.severity,
|
|
139
|
+
resolutionSteps: enhancedError.resolutionSteps
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
agentId: agent.id,
|
|
146
|
+
error: enhancedError.userMessage,
|
|
147
|
+
technicalError: error.message,
|
|
148
|
+
category: enhancedError.category,
|
|
149
|
+
severity: enhancedError.severity,
|
|
150
|
+
resolutionSteps: enhancedError.resolutionSteps,
|
|
151
|
+
duration,
|
|
152
|
+
timestamp: new Date().toISOString()
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Try installers in order
|
|
159
|
+
* @param {Object} agent - Agent to install
|
|
160
|
+
* @param {Array} installers - Available installers
|
|
161
|
+
* @param {Object} progress - Progress tracker
|
|
162
|
+
* @param {Object} options - Installation options
|
|
163
|
+
* @returns {Promise<Object>} - Installation result
|
|
164
|
+
*/
|
|
165
|
+
async tryInstallers(agent, installers, progress, options) {
|
|
166
|
+
let lastError = null;
|
|
167
|
+
|
|
168
|
+
for (const installer of installers) {
|
|
169
|
+
try {
|
|
170
|
+
progress.updateStep(`Trying ${installer.type} installer`);
|
|
171
|
+
|
|
172
|
+
if (this.logger) {
|
|
173
|
+
await this.logger.info(`Trying installer: ${installer.type}`, {
|
|
174
|
+
agentId: agent.id,
|
|
175
|
+
installerType: installer.type
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Check requirements before installation
|
|
180
|
+
progress.updateStep(`Checking ${installer.type} requirements`);
|
|
181
|
+
const requirements = await installer.checkRequirements();
|
|
182
|
+
if (!requirements.allMet) {
|
|
183
|
+
const unmet = requirements.requirements
|
|
184
|
+
.filter(req => !req.met)
|
|
185
|
+
.map(req => req.requirement);
|
|
186
|
+
|
|
187
|
+
progress.updateStep(`${installer.type} requirements not met`, { unmet });
|
|
188
|
+
|
|
189
|
+
if (this.logger) {
|
|
190
|
+
await this.logger.warn(`Installer requirements not met: ${installer.type}`, {
|
|
191
|
+
agentId: agent.id,
|
|
192
|
+
installerType: installer.type,
|
|
193
|
+
unmetRequirements: unmet
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
lastError = new Error(`Requirements not met: ${unmet.join(', ')}`);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
progress.updateStep(`Installing with ${installer.type}`);
|
|
202
|
+
const installationResult = await installer.install(agent, {
|
|
203
|
+
force: options.force,
|
|
204
|
+
timeout: Math.floor(options.timeout / installers.length)
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
if (installationResult && installationResult.success) {
|
|
208
|
+
progress.updateStep(`${installer.type} installation successful`, {
|
|
209
|
+
result: installationResult
|
|
210
|
+
});
|
|
211
|
+
return installationResult;
|
|
212
|
+
} else {
|
|
213
|
+
progress.updateStep(`${installer.type} installation failed`);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
} catch (error) {
|
|
217
|
+
lastError = error;
|
|
218
|
+
|
|
219
|
+
// Enhanced error handling with comprehensive messages
|
|
220
|
+
const enhancedError = this.errorHandler.handleError(error, {
|
|
221
|
+
agentId: agent.id,
|
|
222
|
+
installerType: installer.type,
|
|
223
|
+
command: installer.command,
|
|
224
|
+
phase: 'INSTALLATION'
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
if (this.logger) {
|
|
228
|
+
await this.logger.error(`Installer error: ${installer.type}`, {
|
|
229
|
+
agentId: agent.id,
|
|
230
|
+
installerType: installer.type,
|
|
231
|
+
error: error.message,
|
|
232
|
+
enhancedError: enhancedError.userMessage,
|
|
233
|
+
category: enhancedError.category,
|
|
234
|
+
severity: enhancedError.severity
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
throw lastError || new Error('All installation attempts failed');
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Get available installers for agent
|
|
245
|
+
* @param {Object} agent - Agent configuration
|
|
246
|
+
* @param {string} preferredType - Preferred installer type
|
|
247
|
+
* @returns {Promise<Array>} - Available installers
|
|
248
|
+
*/
|
|
249
|
+
async getAvailableInstallers(agent, preferredType = null) {
|
|
250
|
+
const installers = [];
|
|
251
|
+
|
|
252
|
+
if (preferredType) {
|
|
253
|
+
// Try preferred installer first
|
|
254
|
+
try {
|
|
255
|
+
const installer = InstallerFactory.create(preferredType, {
|
|
256
|
+
configManager: this.configManager,
|
|
257
|
+
logger: this.logger,
|
|
258
|
+
fileManager: this.fileManager
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
const isAvailable = await installer.isAvailable();
|
|
262
|
+
const requirements = await installer.checkRequirements();
|
|
263
|
+
|
|
264
|
+
if (isAvailable && requirements.allMet) {
|
|
265
|
+
installers.push(installer);
|
|
266
|
+
}
|
|
267
|
+
} catch (error) {
|
|
268
|
+
if (this.logger) {
|
|
269
|
+
await this.logger.warn(`Preferred installer not available: ${preferredType}`, {
|
|
270
|
+
agentId: agent.id,
|
|
271
|
+
error: error.message
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Try all available installers
|
|
278
|
+
const availableTypes = ['WINGET', 'NPM', 'POWERSHELL', 'CHOCOLATEY', 'DIRECT'];
|
|
279
|
+
|
|
280
|
+
for (const type of availableTypes) {
|
|
281
|
+
if (type === preferredType) continue; // Already tried preferred
|
|
282
|
+
|
|
283
|
+
try {
|
|
284
|
+
const installer = InstallerFactory.create(type, {
|
|
285
|
+
configManager: this.configManager,
|
|
286
|
+
logger: this.logger,
|
|
287
|
+
fileManager: this.fileManager
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
const isAvailable = await installer.isAvailable();
|
|
291
|
+
const requirements = await installer.checkRequirements();
|
|
292
|
+
|
|
293
|
+
if (isAvailable && requirements.allMet) {
|
|
294
|
+
installers.push(installer);
|
|
295
|
+
}
|
|
296
|
+
} catch (error) {
|
|
297
|
+
if (this.logger) {
|
|
298
|
+
await this.logger.warn(`Installer check failed: ${type}`, {
|
|
299
|
+
agentId: agent.id,
|
|
300
|
+
error: error.message
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Sort by priority
|
|
307
|
+
return installers.sort((a, b) => (a.priority || 999) - (b.priority || 999));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Update agent status
|
|
312
|
+
* @param {string} agentId - Agent identifier
|
|
313
|
+
* @param {string} status - New status
|
|
314
|
+
* @param {string} message - Status message
|
|
315
|
+
*/
|
|
316
|
+
async updateAgentStatus(agentId, status, message) {
|
|
317
|
+
if (this.configManager && this.configManager.updateAgentStatus) {
|
|
318
|
+
try {
|
|
319
|
+
await this.configManager.updateAgentStatus(agentId, status, message);
|
|
320
|
+
} catch (error) {
|
|
321
|
+
if (this.logger) {
|
|
322
|
+
await this.logger.warn('Failed to update agent status', {
|
|
323
|
+
agentId,
|
|
324
|
+
status,
|
|
325
|
+
error: error.message
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Log installation result
|
|
334
|
+
* @param {Object} agent - Agent configuration
|
|
335
|
+
* @param {Object} result - Installation result
|
|
336
|
+
* @param {number} duration - Installation duration
|
|
337
|
+
*/
|
|
338
|
+
async logInstallation(agent, result, duration) {
|
|
339
|
+
if (this.logger) {
|
|
340
|
+
await this.logger.info('Agent installation completed', {
|
|
341
|
+
agentId: agent.id,
|
|
342
|
+
agentName: agent.name,
|
|
343
|
+
installerType: result.installer,
|
|
344
|
+
duration,
|
|
345
|
+
success: result.success,
|
|
346
|
+
exitCode: result.exitCode
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
module.exports = InstallationOrchestrator;
|