vibecodingmachine-core 2026.2.20-438 → 2026.2.26-1642

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,441 @@
1
+ /**
2
+ * Base Windows Installer Interface
3
+ *
4
+ * Abstract base class for Windows installers.
5
+ * Follows constitutional requirements: <555 lines, test-first approach.
6
+ */
7
+
8
+ const { InstallationType } = require('../InstallationType');
9
+ const { OperationType, OperationStatus } = require('../OperationTypes');
10
+
11
+ /**
12
+ * Abstract base class for Windows installers
13
+ */
14
+ class BaseWindowsInstaller {
15
+ /**
16
+ * Create installer instance
17
+ * @param {Object} config - Installer configuration
18
+ * @param {string} config.type - Installation type
19
+ * @param {string} config.command - Installation command
20
+ * @param {string} config.packageId - Package identifier
21
+ * @param {number} config.priority - Priority order
22
+ * @param {string[]} config.requirements - System requirements
23
+ * @param {string} config.verificationCommand - Verification command
24
+ * @param {AgentLogger} config.logger - Logger instance
25
+ */
26
+ constructor(config = {}) {
27
+ this.type = config.type || '';
28
+ this.command = config.command || '';
29
+ this.packageId = config.packageId || '';
30
+ this.priority = config.priority || 999;
31
+ this.requirements = config.requirements || [];
32
+ this.verificationCommand = config.verificationCommand || '';
33
+ this.logger = config.logger;
34
+
35
+ this.validate();
36
+ }
37
+
38
+ /**
39
+ * Validate installer configuration
40
+ * @throws {Error} If configuration is invalid
41
+ */
42
+ validate() {
43
+ if (!this.type || typeof this.type !== 'string') {
44
+ throw new Error('Installer must have a valid type');
45
+ }
46
+
47
+ if (!Object.values(InstallationType).includes(this.type)) {
48
+ throw new Error(`Invalid installation type: ${this.type}`);
49
+ }
50
+
51
+ if (!this.command || typeof this.command !== 'string') {
52
+ throw new Error('Installer must have a valid command');
53
+ }
54
+
55
+ if (!this.verificationCommand || typeof this.verificationCommand !== 'string') {
56
+ throw new Error('Installer must have a verification command');
57
+ }
58
+
59
+ if (!Array.isArray(this.requirements)) {
60
+ throw new Error('Requirements must be an array');
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Check if installer is available on current system
66
+ * @returns {Promise<boolean>} - True if available
67
+ */
68
+ async isAvailable() {
69
+ throw new Error('isAvailable() must be implemented by subclass');
70
+ }
71
+
72
+ /**
73
+ * Check system requirements
74
+ * @returns {Promise<Object>} - Requirements check result
75
+ */
76
+ async checkRequirements() {
77
+ const results = {
78
+ allMet: true,
79
+ requirements: []
80
+ };
81
+
82
+ for (const requirement of this.requirements) {
83
+ const met = await this.checkSingleRequirement(requirement);
84
+ results.requirements.push({
85
+ requirement,
86
+ met
87
+ });
88
+
89
+ if (!met) {
90
+ results.allMet = false;
91
+ }
92
+ }
93
+
94
+ return results;
95
+ }
96
+
97
+ /**
98
+ * Check a single system requirement
99
+ * @param {string} requirement - Requirement to check
100
+ * @returns {Promise<boolean>} - True if requirement is met
101
+ */
102
+ async checkSingleRequirement(requirement) {
103
+ if (this.logger) {
104
+ await this.logger.debug(`Checking requirement: ${requirement}`);
105
+ }
106
+
107
+ try {
108
+ switch (requirement.toLowerCase()) {
109
+ case 'windows':
110
+ return process.platform === 'win32';
111
+ case 'node.js':
112
+ case 'nodejs':
113
+ return await this.checkNodeJS();
114
+ case 'git':
115
+ return await this.checkGit();
116
+ case 'powershell':
117
+ return await this.checkPowerShell();
118
+ case 'winget':
119
+ return await this.checkWinget();
120
+ case 'npm':
121
+ return await this.checkNpm();
122
+ case 'chocolatey':
123
+ case 'choco':
124
+ return await this.checkChocolatey();
125
+ default:
126
+ if (this.logger) {
127
+ await this.logger.warn(`Unknown requirement: ${requirement}`);
128
+ }
129
+ return true; // Assume unknown requirements are met
130
+ }
131
+ } catch (error) {
132
+ if (this.logger) {
133
+ await this.logger.error(`Error checking requirement ${requirement}: ${error.message}`);
134
+ }
135
+ return false;
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Check if Node.js is available
141
+ * @returns {Promise<boolean>}
142
+ */
143
+ async checkNodeJS() {
144
+ try {
145
+ const { execSync } = require('child_process');
146
+ execSync('node --version', { stdio: 'ignore' });
147
+ return true;
148
+ } catch {
149
+ return false;
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Check if Git is available
155
+ * @returns {Promise<boolean>}
156
+ */
157
+ async checkGit() {
158
+ try {
159
+ const { execSync } = require('child_process');
160
+ execSync('git --version', { stdio: 'ignore' });
161
+ return true;
162
+ } catch {
163
+ return false;
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Check if PowerShell is available
169
+ * @returns {Promise<boolean>}
170
+ */
171
+ async checkPowerShell() {
172
+ try {
173
+ const { execSync } = require('child_process');
174
+ execSync('powershell -Command "Get-Host"', { stdio: 'ignore' });
175
+ return true;
176
+ } catch {
177
+ return false;
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Check if WinGet is available
183
+ * @returns {Promise<boolean>}
184
+ */
185
+ async checkWinget() {
186
+ try {
187
+ const { execSync } = require('child_process');
188
+ execSync('winget --version', { stdio: 'ignore' });
189
+ return true;
190
+ } catch {
191
+ return false;
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Check if npm is available
197
+ * @returns {Promise<boolean>}
198
+ */
199
+ async checkNpm() {
200
+ try {
201
+ const { execSync } = require('child_process');
202
+ execSync('npm --version', { stdio: 'ignore' });
203
+ return true;
204
+ } catch {
205
+ return false;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Check if Chocolatey is available
211
+ * @returns {Promise<boolean>}
212
+ */
213
+ async checkChocolatey() {
214
+ try {
215
+ const { execSync } = require('child_process');
216
+ execSync('choco --version', { stdio: 'ignore' });
217
+ return true;
218
+ } catch {
219
+ return false;
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Install agent
225
+ * @param {Object} options - Installation options
226
+ * @param {boolean} options.force - Force reinstall
227
+ * @param {number} options.timeout - Timeout in milliseconds
228
+ * @returns {Promise<Object>} - Installation result
229
+ */
230
+ async install(options = {}) {
231
+ const { force = false, timeout = 300000 } = options; // 5 minute default
232
+
233
+ if (this.logger) {
234
+ await this.logger.info(`Starting installation using ${this.type}`, {
235
+ type: this.type,
236
+ packageId: this.packageId,
237
+ force
238
+ });
239
+ }
240
+
241
+ try {
242
+ // Check availability
243
+ if (!await this.isAvailable()) {
244
+ throw new Error(`Installation method ${this.type} is not available on this system`);
245
+ }
246
+
247
+ // Check requirements
248
+ const requirementsResult = await this.checkRequirements();
249
+ if (!requirementsResult.allMet) {
250
+ const unmet = requirementsResult.requirements
251
+ .filter(req => !req.met)
252
+ .map(req => req.requirement);
253
+
254
+ throw new Error(`Unmet requirements: ${unmet.join(', ')}`);
255
+ }
256
+
257
+ // Perform installation
258
+ const result = await this.performInstallation(force, timeout);
259
+
260
+ if (this.logger) {
261
+ await this.logger.info(`Installation completed using ${this.type}`, {
262
+ type: this.type,
263
+ packageId: this.packageId,
264
+ success: result.success,
265
+ duration: result.duration
266
+ });
267
+ }
268
+
269
+ return result;
270
+ } catch (error) {
271
+ if (this.logger) {
272
+ await this.logger.error(`Installation failed using ${this.type}`, {
273
+ type: this.type,
274
+ packageId: this.packageId,
275
+ error: error.message
276
+ });
277
+ }
278
+ throw error;
279
+ }
280
+ }
281
+
282
+ /**
283
+ * Perform the actual installation
284
+ * @param {boolean} force - Force reinstall
285
+ * @param {number} timeout - Timeout in milliseconds
286
+ * @returns {Promise<Object>} - Installation result
287
+ */
288
+ async performInstallation(force, timeout) {
289
+ throw new Error('performInstallation() must be implemented by subclass');
290
+ }
291
+
292
+ /**
293
+ * Verify installation
294
+ * @returns {Promise<Object>} - Verification result
295
+ */
296
+ async verify() {
297
+ if (this.logger) {
298
+ await this.logger.info(`Verifying installation using ${this.type}`, {
299
+ type: this.type,
300
+ packageId: this.packageId
301
+ });
302
+ }
303
+
304
+ try {
305
+ const result = await this.performVerification();
306
+
307
+ if (this.logger) {
308
+ await this.logger.info(`Verification completed using ${this.type}`, {
309
+ type: this.type,
310
+ packageId: this.packageId,
311
+ success: result.success,
312
+ duration: result.duration
313
+ });
314
+ }
315
+
316
+ return result;
317
+ } catch (error) {
318
+ if (this.logger) {
319
+ await this.logger.error(`Verification failed using ${this.type}`, {
320
+ type: this.type,
321
+ packageId: this.packageId,
322
+ error: error.message
323
+ });
324
+ }
325
+ throw error;
326
+ }
327
+ }
328
+
329
+ /**
330
+ * Perform the actual verification
331
+ * @returns {Promise<Object>} - Verification result
332
+ */
333
+ async performVerification() {
334
+ return await this.executeCommand(this.verificationCommand, 30000); // 30 second timeout
335
+ }
336
+
337
+ /**
338
+ * Execute command with timeout
339
+ * @param {string} command - Command to execute
340
+ * @param {number} timeout - Timeout in milliseconds
341
+ * @returns {Promise<Object>} - Execution result
342
+ */
343
+ async executeCommand(command, timeout) {
344
+ return new Promise((resolve, reject) => {
345
+ const { spawn } = require('child_process');
346
+
347
+ const startTime = Date.now();
348
+ const child = spawn(command, [], {
349
+ shell: true,
350
+ stdio: ['pipe', 'pipe', 'pipe']
351
+ });
352
+
353
+ let stdout = '';
354
+ let stderr = '';
355
+
356
+ child.stdout.on('data', (data) => {
357
+ stdout += data.toString();
358
+ });
359
+
360
+ child.stderr.on('data', (data) => {
361
+ stderr += data.toString();
362
+ });
363
+
364
+ const timeoutId = setTimeout(() => {
365
+ child.kill('SIGTERM');
366
+ reject(new Error(`Command timed out after ${timeout}ms`));
367
+ }, timeout);
368
+
369
+ child.on('close', (code) => {
370
+ clearTimeout(timeoutId);
371
+
372
+ const duration = Date.now() - startTime;
373
+
374
+ resolve({
375
+ success: code === 0,
376
+ exitCode: code,
377
+ stdout: stdout.trim(),
378
+ stderr: stderr.trim(),
379
+ duration,
380
+ command
381
+ });
382
+ });
383
+
384
+ child.on('error', (error) => {
385
+ clearTimeout(timeoutId);
386
+ reject(error);
387
+ });
388
+ });
389
+ }
390
+
391
+ /**
392
+ * Get installer information
393
+ * @returns {Object} - Installer information
394
+ */
395
+ getInfo() {
396
+ return {
397
+ type: this.type,
398
+ packageId: this.packageId,
399
+ priority: this.priority,
400
+ requirements: this.requirements,
401
+ verificationCommand: this.verificationCommand,
402
+ command: this.command
403
+ };
404
+ }
405
+
406
+ /**
407
+ * Create installer instance from configuration
408
+ * @param {Object} config - Configuration object
409
+ * @param {AgentLogger} logger - Logger instance
410
+ * @returns {BaseWindowsInstaller} - Installer instance
411
+ */
412
+ static fromConfig(config, logger = null) {
413
+ const installerConfig = {
414
+ ...config,
415
+ logger
416
+ };
417
+
418
+ // Return appropriate installer subclass based on type
419
+ switch (config.type) {
420
+ case InstallationType.WINGET:
421
+ const WinGetInstaller = require('./WinGetInstaller');
422
+ return new WinGetInstaller(installerConfig);
423
+ case InstallationType.POWERSHELL:
424
+ const PowerShellInstaller = require('./PowerShellInstaller');
425
+ return new PowerShellInstaller(installerConfig);
426
+ case InstallationType.NPM:
427
+ const NpmInstaller = require('./NpmInstaller');
428
+ return new NpmInstaller(installerConfig);
429
+ case InstallationType.CHOCOLATEY:
430
+ const ChocolateyInstaller = require('./ChocolateyInstaller');
431
+ return new ChocolateyInstaller(installerConfig);
432
+ case InstallationType.DIRECT:
433
+ const DirectInstaller = require('./DirectInstaller');
434
+ return new DirectInstaller(installerConfig);
435
+ default:
436
+ throw new Error(`Unknown installer type: ${config.type}`);
437
+ }
438
+ }
439
+ }
440
+
441
+ module.exports = BaseWindowsInstaller;