vibecodingmachine-core 2026.2.26-1739 → 2026.3.9-850

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 (192) hide show
  1. package/package.json +1 -1
  2. package/src/agents/AgentCheckDiscoveryService.js +180 -0
  3. package/src/agents/AgentCheckService.js +18 -261
  4. package/src/agents/AgentCheckStatisticsService.js +195 -0
  5. package/src/agents/EnvironmentConfigurationManager.js +31 -380
  6. package/src/agents/InstallationType.js +19 -6
  7. package/src/agents/SimpleAgentCheckService.js +472 -0
  8. package/src/agents/config-managers/ConfigUtils.js +72 -0
  9. package/src/agents/config-managers/DefaultConfig.js +58 -0
  10. package/src/agents/config-managers/EnvVarLoader.js +66 -0
  11. package/src/agents/config-managers/FileConfigLoader.js +124 -0
  12. package/src/agents/config-managers/TypeConverters.js +61 -0
  13. package/src/agents/config-managers/VariableMappings.js +92 -0
  14. package/src/agents/discovery/AgentDiscoveryService-refactored.js +272 -0
  15. package/src/agents/discovery/AgentDiscoveryService.js +29 -403
  16. package/src/agents/discovery/agent-validator.js +262 -0
  17. package/src/agents/discovery/discovery-results.js +176 -0
  18. package/src/agents/discovery/discovery-scanner.js +268 -0
  19. package/src/agents/discovery/discovery-utils.js +161 -0
  20. package/src/agents/discovery/executable-analyzer.js +290 -0
  21. package/src/agents/discovery/history-manager.js +310 -0
  22. package/src/agents/verification/ResultAnalyzer-refactored.js +341 -0
  23. package/src/agents/verification/ResultAnalyzer.js +30 -431
  24. package/src/agents/verification/analysis-utils.js +310 -0
  25. package/src/agents/verification/batch-analyzer.js +440 -0
  26. package/src/agents/verification/pattern-recognizer.js +369 -0
  27. package/src/agents/verification/report-generator.js +320 -0
  28. package/src/agents/verification/test-analyzer.js +290 -0
  29. package/src/agents/windows/InstallerFactory.js +4 -0
  30. package/src/agents/windows/VSCodeExtensionInstaller.js +404 -0
  31. package/src/analysis/analysis-engine.js +314 -0
  32. package/src/analysis/ast-analyzer.js +342 -0
  33. package/src/analysis/boundary-detector-refactored.js +378 -0
  34. package/src/analysis/boundary-detector.js +200 -603
  35. package/src/analysis/boundary-scanner.js +609 -0
  36. package/src/analysis/boundary-types.js +118 -0
  37. package/src/analysis/boundary-utils.js +293 -0
  38. package/src/analysis/deadline-priority-calculator.js +18 -0
  39. package/src/analysis/detection-methods.js +347 -0
  40. package/src/analysis/importance-priority-calculator.js +18 -0
  41. package/src/analysis/priority/factor-calculators.js +204 -0
  42. package/src/analysis/priority/factor-helpers.js +71 -0
  43. package/src/analysis/priority/priority-constants.js +73 -0
  44. package/src/analysis/priority/priority-factor-calculators.js +301 -0
  45. package/src/analysis/priority/reasons-generator.js +44 -0
  46. package/src/analysis/priority-calculator.js +15 -580
  47. package/src/analysis/strategy-generator.js +16 -66
  48. package/src/analysis/type-priority-calculator.js +18 -0
  49. package/src/analysis/urgency-priority-calculator.js +18 -0
  50. package/src/auto-mode/AutoModeBusinessLogic.js +2 -40
  51. package/src/commands/disable-requirement.js +60 -0
  52. package/src/commands/disable-spec.js +60 -0
  53. package/src/commands/enable-requirement.js +60 -0
  54. package/src/commands/enable-spec.js +60 -0
  55. package/src/commands/registry.js +1 -6
  56. package/src/commands/requirements.js +8 -2
  57. package/src/ide-integration/applescript-manager.cjs +9 -24
  58. package/src/ide-integration/cdp-handlers/chat-reader.js +44 -0
  59. package/src/ide-integration/cdp-handlers/connection-handler.js +88 -0
  60. package/src/ide-integration/cdp-handlers/continuation-handler.js +314 -0
  61. package/src/ide-integration/cdp-handlers/message-submitter.js +75 -0
  62. package/src/ide-integration/cdp-handlers/text-sender.js +138 -0
  63. package/src/ide-integration/cdp-manager.js +28 -573
  64. package/src/ide-integration/claude-code-cli-manager.cjs +48 -12
  65. package/src/ide-integration/ide-openers/claude-opener.js +171 -0
  66. package/src/ide-integration/ide-openers/cursor-opener.js +53 -0
  67. package/src/ide-integration/ide-openers/other-ides-opener.js +230 -0
  68. package/src/ide-integration/ide-openers/vscode-opener.js +147 -0
  69. package/src/ide-integration/macos-ide-manager.js +20 -582
  70. package/src/ide-integration/macos-quota-checker.js +164 -0
  71. package/src/ide-integration/macos-text-sender.js +19 -38
  72. package/src/ide-integration/provider-manager.cjs +52 -7
  73. package/src/index.cjs +6 -0
  74. package/src/index.js +10 -0
  75. package/src/llm/direct-llm-manager.cjs +501 -0
  76. package/src/localization/translations/en-part1.js +363 -0
  77. package/src/localization/translations/en-part2.js +320 -0
  78. package/src/localization/translations/en.js +4 -687
  79. package/src/localization/translations/es-part1.js +363 -0
  80. package/src/localization/translations/es-part2.js +320 -0
  81. package/src/localization/translations/es.js +4 -688
  82. package/src/models/file-analysis-collection.js +139 -0
  83. package/src/models/file-analysis-metrics.js +50 -0
  84. package/src/models/file-analysis.js +15 -262
  85. package/src/models/plan-manager.js +410 -0
  86. package/src/models/refactoring-models.js +380 -0
  87. package/src/models/refactoring-plan-refactored.js +81 -0
  88. package/src/models/refactoring-plan.js +2 -663
  89. package/src/monitoring/alert-system.js +4 -45
  90. package/src/monitoring/continuous-scan-notifications.js +37 -191
  91. package/src/monitoring/notification-handlers/base-handler.js +58 -0
  92. package/src/monitoring/notification-handlers/error-handler.js +36 -0
  93. package/src/monitoring/notification-handlers/index.js +21 -0
  94. package/src/monitoring/notification-handlers/new-violation-handler.js +91 -0
  95. package/src/monitoring/notification-handlers/progress-handler.js +48 -0
  96. package/src/monitoring/notification-handlers/resolved-violation-handler.js +54 -0
  97. package/src/monitoring/notification-handlers/threshold-handler.js +36 -0
  98. package/src/provider-registry.js +8 -0
  99. package/src/refactoring/boundary/boundary-detector-refactored.js +58 -0
  100. package/src/refactoring/boundary/boundary-detector.js +26 -596
  101. package/src/refactoring/boundary/detectors/boundary-analyzers.js +281 -0
  102. package/src/refactoring/boundary/detectors/boundary-core.js +167 -0
  103. package/src/refactoring/boundary/detectors/class-detector.js +247 -0
  104. package/src/refactoring/boundary/detectors/config-detector.js +270 -0
  105. package/src/refactoring/boundary/detectors/constant-detector.js +269 -0
  106. package/src/refactoring/boundary/detectors/function-detector.js +248 -0
  107. package/src/refactoring/boundary/detectors/module-detector.js +249 -0
  108. package/src/refactoring/boundary/detectors/object-detector.js +247 -0
  109. package/src/refactoring/boundary/detectors/type-detectors.js +338 -0
  110. package/src/refactoring/boundary/detectors/utility-detector.js +270 -0
  111. package/src/refactoring/circular-dependency-resolver-original.js +16 -76
  112. package/src/refactoring/code-mover-refactored.js +309 -0
  113. package/src/refactoring/code-mover.js +48 -355
  114. package/src/refactoring/execution-status.js +18 -0
  115. package/src/refactoring/execution-strategies.js +172 -0
  116. package/src/refactoring/file-splitter-core.js +568 -0
  117. package/src/refactoring/file-splitter-types.js +136 -0
  118. package/src/refactoring/file-splitter.js +2 -682
  119. package/src/refactoring/functionality-validator.js +11 -51
  120. package/src/refactoring/import-manager-refactored.js +385 -0
  121. package/src/refactoring/import-manager.js +112 -487
  122. package/src/refactoring/import-models.js +189 -0
  123. package/src/refactoring/import-parser.js +306 -0
  124. package/src/refactoring/move-executor.js +431 -0
  125. package/src/refactoring/move-utils.js +368 -0
  126. package/src/refactoring/operation-executor.js +76 -0
  127. package/src/refactoring/plan-creator.js +36 -0
  128. package/src/refactoring/plan-executor.js +143 -0
  129. package/src/refactoring/plan-validator.js +68 -0
  130. package/src/refactoring/refactoring-executor-result.js +70 -0
  131. package/src/refactoring/refactoring-executor.js +34 -569
  132. package/src/refactoring/refactoring-operation.js +94 -0
  133. package/src/refactoring/refactoring-plan.js +69 -0
  134. package/src/refactoring/refactoring-rollback.js +22 -527
  135. package/src/refactoring/rollback-handlers/RollbackExecutor.js +107 -0
  136. package/src/refactoring/rollback-handlers/RollbackManager.js +265 -0
  137. package/src/refactoring/rollback-handlers/RollbackOperation.js +105 -0
  138. package/src/refactoring/rollback-handlers/RollbackResult.js +109 -0
  139. package/src/refactoring/rollback-handlers/RollbackStatistics.js +77 -0
  140. package/src/refactoring/test-validator.js +32 -448
  141. package/src/refactoring/validation/baseline-runner.js +71 -0
  142. package/src/refactoring/validation/report-generator.js +136 -0
  143. package/src/refactoring/validation/result-comparator.js +92 -0
  144. package/src/refactoring/validation/test-suite.js +59 -0
  145. package/src/refactoring/validation/test-validation-result.js +83 -0
  146. package/src/refactoring/validation/validation-runner.js +95 -0
  147. package/src/refactoring/validation/validation-status.js +18 -0
  148. package/src/rui/commands/AgentCommandParser.js +60 -369
  149. package/src/rui/commands/AgentResponseFormatter.js +7 -47
  150. package/src/rui/commands/parsers/CommandMapper.js +148 -0
  151. package/src/rui/commands/parsers/CommandValidator.js +228 -0
  152. package/src/rui/commands/parsers/ComponentExtractor.js +100 -0
  153. package/src/rui/commands/parsers/TokenParser.js +69 -0
  154. package/src/rui/commands/parsers/tokenizer.js +153 -0
  155. package/src/utils/current-requirement-operations.js +50 -1
  156. package/src/utils/report-generator.js +18 -514
  157. package/src/utils/report-generators/analysis-generator.js +115 -0
  158. package/src/utils/report-generators/base-generator.js +141 -0
  159. package/src/utils/report-generators/compliance-generator.js +41 -0
  160. package/src/utils/report-generators/format-handlers.js +185 -0
  161. package/src/utils/report-generators/refactoring-generator.js +46 -0
  162. package/src/utils/report-generators/validation-generator.js +63 -0
  163. package/src/utils/requirement-enable-disable.js +265 -0
  164. package/src/utils/requirement-helpers/requirement-file-ops.js +69 -1
  165. package/src/utils/requirement-helpers/requirement-mover.js +88 -1
  166. package/src/utils/requirement-helpers.js +5 -2
  167. package/src/utils/smoke-test-cli.js +45 -8
  168. package/src/utils/specification-enable-disable.js +122 -0
  169. package/src/utils/specification-helpers.js +30 -4
  170. package/src/utils/specification-migration.js +5 -5
  171. package/src/utils/test-comparator.js +118 -0
  172. package/src/utils/test-config.js +54 -0
  173. package/src/utils/test-executor.js +133 -0
  174. package/src/utils/test-parser.js +215 -0
  175. package/src/utils/test-runner-baseline.js +63 -0
  176. package/src/utils/test-runner-core.js +98 -0
  177. package/src/utils/test-runner-report.js +39 -0
  178. package/src/utils/test-runner-validation.js +71 -0
  179. package/src/utils/test-runner.js +11 -535
  180. package/src/validation/comparison-analyzer.js +333 -0
  181. package/src/validation/compliance-reporter-new.js +282 -0
  182. package/src/validation/compliance-reporter-refactored.js +344 -0
  183. package/src/validation/compliance-reporter.js +278 -591
  184. package/src/validation/compliance-utils.js +278 -0
  185. package/src/validation/html-generator.js +446 -0
  186. package/src/validation/metrics/category-calculator.js +137 -0
  187. package/src/validation/metrics/metrics-helpers.js +155 -0
  188. package/src/validation/metrics/overview-calculator.js +85 -0
  189. package/src/validation/metrics/overview-metrics.js +41 -0
  190. package/src/validation/metrics/quality-calculator.js +166 -0
  191. package/src/validation/metrics/size-calculator.js +69 -0
  192. package/src/validation/metrics-calculator.js +27 -551
@@ -12,220 +12,15 @@ const { ImportManager } = require('./import-manager');
12
12
  const { CircularDependencyResolver } = require('./circular-dependency-resolver');
13
13
  const { RollbackManager } = require('../utils/rollback-manager');
14
14
  const { TestRunner } = require('../utils/test-runner');
15
-
16
- /**
17
- * Execution status
18
- */
19
- const EXECUTION_STATUS = {
20
- PENDING: 'pending',
21
- RUNNING: 'running',
22
- COMPLETED: 'completed',
23
- FAILED: 'failed',
24
- PAUSED: 'paused',
25
- CANCELLED: 'cancelled'
26
- };
27
-
28
- /**
29
- * Refactoring operation class
30
- */
31
- class RefactoringOperation {
32
- constructor(type, targetPath, options = {}) {
33
- this.id = this.generateId();
34
- this.type = type;
35
- this.targetPath = targetPath;
36
- this.options = options;
37
- this.status = EXECUTION_STATUS.PENDING;
38
- this.progress = 0;
39
- this.result = null;
40
- this.error = null;
41
- this.startTime = null;
42
- this.endTime = null;
43
- this.dependencies = [];
44
- this.dependents = [];
45
- this.metadata = {
46
- createdAt: new Date().toISOString(),
47
- estimatedDuration: options.estimatedDuration || 0,
48
- priority: options.priority || 'medium'
49
- };
50
- }
51
-
52
- generateId() {
53
- return `op_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
54
- }
55
-
56
- setStatus(status) {
57
- this.status = status;
58
- if (status === EXECUTION_STATUS.RUNNING && !this.startTime) {
59
- this.startTime = new Date().toISOString();
60
- }
61
- if ([EXECUTION_STATUS.COMPLETED, EXECUTION_STATUS.FAILED, EXECUTION_STATUS.CANCELLED].includes(status)) {
62
- this.endTime = new Date().toISOString();
63
- }
64
- }
65
-
66
- setProgress(progress) {
67
- this.progress = Math.max(0, Math.min(100, progress));
68
- }
69
-
70
- setResult(result) {
71
- this.result = result;
72
- }
73
-
74
- setError(error) {
75
- this.error = error;
76
- }
77
-
78
- addDependency(operationId) {
79
- if (!this.dependencies.includes(operationId)) {
80
- this.dependencies.push(operationId);
81
- }
82
- }
83
-
84
- addDependent(operationId) {
85
- if (!this.dependents.includes(operationId)) {
86
- this.dependents.push(operationId);
87
- }
88
- }
89
-
90
- getDuration() {
91
- if (!this.startTime) return 0;
92
- const end = this.endTime ? new Date(this.endTime) : new Date();
93
- const start = new Date(this.startTime);
94
- return (end - start) / 1000; // seconds
95
- }
96
-
97
- isReady(dependencies) {
98
- if (this.status !== EXECUTION_STATUS.PENDING) return false;
99
-
100
- for (const depId of this.dependencies) {
101
- const dep = dependencies.get(depId);
102
- if (!dep || dep.status !== EXECUTION_STATUS.COMPLETED) {
103
- return false;
104
- }
105
- }
106
-
107
- return true;
108
- }
109
- }
110
-
111
- /**
112
- * Refactoring execution plan class
113
- */
114
- class RefactoringPlan {
115
- constructor(name) {
116
- this.id = this.generateId();
117
- this.name = name;
118
- this.operations = new Map();
119
- this.status = EXECUTION_STATUS.PENDING;
120
- this.metadata = {
121
- createdAt: new Date().toISOString(),
122
- estimatedDuration: 0,
123
- totalOperations: 0
124
- };
125
- }
126
-
127
- generateId() {
128
- return `plan_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
129
- }
130
-
131
- addOperation(operation) {
132
- this.operations.set(operation.id, operation);
133
- this.metadata.totalOperations = this.operations.size;
134
- this.updateEstimatedDuration();
135
- }
136
-
137
- updateEstimatedDuration() {
138
- this.metadata.estimatedDuration = Array.from(this.operations.values())
139
- .reduce((total, op) => total + (op.metadata.estimatedDuration || 0), 0);
140
- }
141
-
142
- getReadyOperations() {
143
- return Array.from(this.operations.values())
144
- .filter(op => op.isReady(this.operations));
145
- }
146
-
147
- getCompletedOperations() {
148
- return Array.from(this.operations.values())
149
- .filter(op => op.status === EXECUTION_STATUS.COMPLETED);
150
- }
151
-
152
- getFailedOperations() {
153
- return Array.from(this.operations.values())
154
- .filter(op => op.status === EXECUTION_STATUS.FAILED);
155
- }
156
-
157
- getProgress() {
158
- if (this.operations.size === 0) return 0;
159
-
160
- const completed = this.getCompletedOperations().length;
161
- return Math.round((completed / this.operations.size) * 100);
162
- }
163
-
164
- setStatus(status) {
165
- this.status = status;
166
- }
167
- }
168
-
169
- /**
170
- * Refactoring executor result class
171
- */
172
- class RefactoringExecutorResult {
173
- constructor(plan) {
174
- this.plan = plan;
175
- this.success = false;
176
- this.executedOperations = 0;
177
- this.failedOperations = 0;
178
- this.skippedOperations = 0;
179
- this.duration = 0;
180
- this.errors = [];
181
- this.warnings = [];
182
- this.rollbackPerformed = false;
183
- this.metadata = {
184
- executedAt: new Date().toISOString(),
185
- environment: process.env.NODE_ENV || 'development'
186
- };
187
- }
188
-
189
- addError(error) {
190
- this.errors.push({
191
- message: error.message,
192
- timestamp: new Date().toISOString(),
193
- stack: error.stack
194
- });
195
- }
196
-
197
- addWarning(warning) {
198
- this.warnings.push({
199
- message: warning,
200
- timestamp: new Date().toISOString()
201
- });
202
- }
203
-
204
- setSuccess(success) {
205
- this.success = success;
206
- }
207
-
208
- setRollbackPerformed(rollbackPerformed) {
209
- this.rollbackPerformed = rollbackPerformed;
210
- }
211
-
212
- getSummary() {
213
- return {
214
- planId: this.plan.id,
215
- planName: this.plan.name,
216
- success: this.success,
217
- executedOperations: this.executedOperations,
218
- failedOperations: this.failedOperations,
219
- skippedOperations: this.skippedOperations,
220
- totalOperations: this.plan.operations.size,
221
- duration: this.duration,
222
- progress: this.plan.getProgress(),
223
- errorCount: this.errors.length,
224
- warningCount: this.warnings.length,
225
- rollbackPerformed: this.rollbackPerformed
226
- };
227
- }
228
- }
15
+ const { EXECUTION_STATUS } = require('./execution-status');
16
+ const { RefactoringOperation } = require('./refactoring-operation');
17
+ const { RefactoringPlan } = require('./refactoring-plan');
18
+ const { RefactoringExecutorResult } = require('./refactoring-executor-result');
19
+ const { ExecutionStrategies } = require('./execution-strategies');
20
+ const { PlanValidator } = require('./plan-validator');
21
+ const { OperationExecutor } = require('./operation-executor');
22
+ const { PlanExecutor } = require('./plan-executor');
23
+ const { PlanCreator } = require('./plan-creator');
229
24
 
230
25
  /**
231
26
  * Refactoring executor class
@@ -249,8 +44,24 @@ class RefactoringExecutor {
249
44
  this.codeMover = new CodeMover();
250
45
  this.circularDependencyResolver = new CircularDependencyResolver();
251
46
 
252
- this.currentPlan = null;
253
- this.isExecuting = false;
47
+ this.executionStrategies = new ExecutionStrategies({
48
+ fileSplitter: this.fileSplitter,
49
+ boundaryExtractor: this.boundaryExtractor,
50
+ codeMover: this.codeMover,
51
+ importManager: this.importManager,
52
+ circularDependencyResolver: this.circularDependencyResolver
53
+ });
54
+
55
+ this.planValidator = new PlanValidator();
56
+ this.operationExecutor = new OperationExecutor(this.executionStrategies);
57
+ this.planExecutor = new PlanExecutor(
58
+ this.operationExecutor,
59
+ this.testRunner,
60
+ this.rollbackManager,
61
+ this.options
62
+ );
63
+ this.planCreator = new PlanCreator();
64
+
254
65
  this.executionQueue = [];
255
66
  }
256
67
 
@@ -258,395 +69,49 @@ class RefactoringExecutor {
258
69
  * Execute a refactoring plan
259
70
  */
260
71
  async executePlan(plan) {
261
- if (this.isExecuting) {
262
- throw new Error('Executor is already running a plan');
263
- }
264
-
265
- this.currentPlan = plan;
266
- this.isExecuting = true;
267
- plan.setStatus(EXECUTION_STATUS.RUNNING);
268
-
269
- const result = new RefactoringExecutorResult(plan);
270
- const startTime = Date.now();
271
-
272
- try {
273
- console.log(`Executing refactoring plan: ${plan.name}`);
274
- console.log(`Operations: ${plan.operations.size}`);
275
-
276
- // Run baseline tests if enabled
277
- if (this.options.runTests) {
278
- console.log('Running baseline tests...');
279
- await this.testRunner.runBaseline();
280
- }
281
-
282
- // Execute operations in dependency order
283
- await this.executeOperations(plan, result);
284
-
285
- // Run validation tests if enabled
286
- if (this.options.runTests) {
287
- console.log('Running validation tests...');
288
- const testResult = await this.testRunner.runValidation();
289
-
290
- if (testResult.hasRegressions) {
291
- throw new Error('Tests detected regressions after refactoring');
292
- }
293
- }
294
-
295
- result.setSuccess(true);
296
- plan.setStatus(EXECUTION_STATUS.COMPLETED);
297
-
298
- console.log(`Plan execution completed successfully`);
299
-
300
- } catch (error) {
301
- result.addError(error);
302
- result.setSuccess(false);
303
- plan.setStatus(EXECUTION_STATUS.FAILED);
304
-
305
- console.error(`Plan execution failed: ${error.message}`);
306
-
307
- // Rollback if enabled and there were failures
308
- if (this.options.enableRollback && result.failedOperations > 0) {
309
- console.log('Performing rollback...');
310
- await this.rollbackManager.rollback();
311
- result.setRollbackPerformed(true);
312
- }
313
-
314
- if (this.options.pauseOnError) {
315
- console.log('Execution paused due to error');
316
- plan.setStatus(EXECUTION_STATUS.PAUSED);
317
- }
318
-
319
- } finally {
320
- result.duration = (Date.now() - startTime) / 1000;
321
- this.isExecuting = false;
322
- this.currentPlan = null;
323
- }
324
-
325
- return result;
72
+ return this.planExecutor.executePlan(plan);
326
73
  }
327
74
 
328
75
  /**
329
76
  * Execute operations in dependency order
330
77
  */
331
78
  async executeOperations(plan, result) {
332
- const executedOperations = new Set();
333
- let pendingOperations = new Set(plan.operations.keys());
334
-
335
- while (pendingOperations.size > 0) {
336
- // Find ready operations
337
- const readyOperations = Array.from(pendingOperations)
338
- .map(id => plan.operations.get(id))
339
- .filter(op => op.isReady(plan.operations) && !executedOperations.has(op.id));
340
-
341
- if (readyOperations.length === 0) {
342
- // Check for circular dependencies or blocked operations
343
- const blockedOps = Array.from(pendingOperations)
344
- .map(id => plan.operations.get(id))
345
- .filter(op => !executedOperations.has(op.id));
346
-
347
- if (blockedOps.length > 0) {
348
- throw new Error(`Circular dependency detected or operations blocked: ${blockedOps.map(op => op.id).join(', ')}`);
349
- }
350
- break;
351
- }
352
-
353
- // Execute ready operations (with concurrency limit)
354
- const batchSize = Math.min(readyOperations.length, this.options.maxConcurrentOperations);
355
- const batch = readyOperations.slice(0, batchSize);
356
-
357
- await Promise.all(batch.map(async operation => {
358
- try {
359
- await this.executeOperation(operation, result);
360
- executedOperations.add(operation.id);
361
- pendingOperations.delete(operation.id);
362
- result.executedOperations++;
363
- } catch (error) {
364
- result.addError(error);
365
- result.failedOperations++;
366
- executedOperations.add(operation.id);
367
- pendingOperations.delete(operation.id);
368
-
369
- // Don't continue on error if pauseOnError is enabled
370
- if (this.options.pauseOnError) {
371
- throw error;
372
- }
373
- }
374
- }));
375
- }
79
+ return this.operationExecutor.executeOperations(plan, result, this.options);
376
80
  }
377
81
 
378
82
  /**
379
83
  * Execute a single operation
380
84
  */
381
85
  async executeOperation(operation, result) {
382
- console.log(`Executing operation: ${operation.type} on ${operation.targetPath}`);
383
- operation.setStatus(EXECUTION_STATUS.RUNNING);
384
- operation.setProgress(0);
385
-
386
- try {
387
- let operationResult = null;
388
-
389
- switch (operation.type) {
390
- case 'split_file':
391
- operationResult = await this.executeSplitFile(operation);
392
- break;
393
-
394
- case 'extract_boundaries':
395
- operationResult = await this.executeExtractBoundaries(operation);
396
- break;
397
-
398
- case 'move_code':
399
- operationResult = await this.executeMoveCode(operation);
400
- break;
401
-
402
- case 'update_imports':
403
- operationResult = await this.executeUpdateImports(operation);
404
- break;
405
-
406
- case 'resolve_circular_deps':
407
- operationResult = await this.executeResolveCircularDeps(operation);
408
- break;
409
-
410
- default:
411
- throw new Error(`Unknown operation type: ${operation.type}`);
412
- }
413
-
414
- operation.setResult(operationResult);
415
- operation.setStatus(EXECUTION_STATUS.COMPLETED);
416
- operation.setProgress(100);
417
-
418
- console.log(`Operation completed: ${operation.id}`);
419
-
420
- } catch (error) {
421
- operation.setError(error);
422
- operation.setStatus(EXECUTION_STATUS.FAILED);
423
- throw error;
424
- }
425
- }
426
-
427
- /**
428
- * Execute file split operation
429
- */
430
- async executeSplitFile(operation) {
431
- const { targetPath, splitPoints } = operation.options;
432
-
433
- // Read file analysis (would come from operation context)
434
- const fileAnalysis = await this.analyzeFile(targetPath);
435
-
436
- const splitResult = await this.fileSplitter.splitFile(fileAnalysis, splitPoints);
437
-
438
- if (!splitResult.success) {
439
- throw new Error(`File split failed: ${splitResult.errors.map(e => e.message).join(', ')}`);
440
- }
441
-
442
- return splitResult;
443
- }
444
-
445
- /**
446
- * Execute boundary extraction operation
447
- */
448
- async executeExtractBoundaries(operation) {
449
- const { targetPath, boundaries } = operation.options;
450
-
451
- const extractionResult = await this.boundaryExtractor.extractBoundaries(targetPath);
452
-
453
- if (extractionResult.errors.length > 0) {
454
- throw new Error(`Boundary extraction failed: ${extractionResult.errors.map(e => e.message).join(', ')}`);
455
- }
456
-
457
- return extractionResult;
458
- }
459
-
460
- /**
461
- * Execute code move operation
462
- */
463
- async executeMoveCode(operation) {
464
- const { sourcePath, targetPath, segment } = operation.options;
465
-
466
- const moveOperation = {
467
- type: 'extract',
468
- sourcePath,
469
- targetPath,
470
- segmentName: segment.name,
471
- startLine: segment.startLine,
472
- endLine: segment.endLine
473
- };
474
-
475
- const moveResult = await this.codeMover.executeMove(moveOperation);
476
-
477
- if (!moveResult.success) {
478
- throw new Error(`Code move failed: ${moveResult.errors.map(e => e.message).join(', ')}`);
479
- }
480
-
481
- return moveResult;
482
- }
483
-
484
- /**
485
- * Execute import update operation
486
- */
487
- async executeUpdateImports(operation) {
488
- const { targetPath, changes } = operation.options;
489
-
490
- const updateResult = await this.importManager.updateImports(targetPath, changes);
491
-
492
- if (!updateResult.success) {
493
- throw new Error(`Import update failed: ${updateResult.errors.map(e => e.message).join(', ')}`);
494
- }
495
-
496
- return updateResult;
497
- }
498
-
499
- /**
500
- * Execute circular dependency resolution
501
- */
502
- async executeResolveCircularDeps(operation) {
503
- const { rootPath, strategies } = operation.options;
504
-
505
- const analysisResult = await this.circularDependencyResolver.analyze(rootPath);
506
-
507
- if (analysisResult.errors.length > 0) {
508
- throw new Error(`Circular dependency analysis failed: ${analysisResult.errors.map(e => e.message).join(', ')}`);
509
- }
510
-
511
- return analysisResult;
512
- }
513
-
514
- /**
515
- * Analyze file for refactoring
516
- */
517
- async analyzeFile(filePath) {
518
- // This would create a FileAnalysis object
519
- // For now, return a placeholder
520
- return {
521
- filePath,
522
- lineCount: 100,
523
- needsRefactoring: true,
524
- boundaries: null
525
- };
86
+ return this.operationExecutor.executeOperation(operation, result);
526
87
  }
527
88
 
528
89
  /**
529
90
  * Create refactoring plan from analysis results
530
91
  */
531
92
  createPlan(analysisResults, options = {}) {
532
- const plan = new RefactoringResults(options.name || 'Auto-generated Plan');
533
-
534
- // Create operations based on analysis
535
- for (const analysis of analysisResults.files || []) {
536
- if (analysis.needsRefactoring) {
537
- // Add split operation
538
- const splitOp = new RefactoringOperation('split_file', analysis.filePath, {
539
- estimatedDuration: 5,
540
- priority: analysis.urgentRefactoring ? 'high' : 'medium'
541
- });
542
- plan.addOperation(splitOp);
543
- }
544
- }
545
-
546
- return plan;
93
+ return this.planCreator.createPlan(analysisResults, options);
547
94
  }
548
95
 
549
96
  /**
550
97
  * Cancel current execution
551
98
  */
552
99
  async cancelExecution() {
553
- if (!this.isExecuting || !this.currentPlan) {
554
- return false;
555
- }
556
-
557
- this.currentPlan.setStatus(EXECUTION_STATUS.CANCELLED);
558
- this.isExecuting = false;
559
-
560
- // Cancel running operations
561
- for (const operation of this.currentPlan.operations.values()) {
562
- if (operation.status === EXECUTION_STATUS.RUNNING) {
563
- operation.setStatus(EXECUTION_STATUS.CANCELLED);
564
- }
565
- }
566
-
567
- return true;
100
+ return this.planExecutor.cancelExecution();
568
101
  }
569
102
 
570
103
  /**
571
104
  * Get execution status
572
105
  */
573
106
  getExecutionStatus() {
574
- if (!this.currentPlan) {
575
- return {
576
- isExecuting: false,
577
- plan: null,
578
- progress: 0
579
- };
580
- }
581
-
582
- return {
583
- isExecuting: this.isExecuting,
584
- plan: {
585
- id: this.currentPlan.id,
586
- name: this.currentPlan.name,
587
- status: this.currentPlan.status,
588
- progress: this.currentPlan.getProgress(),
589
- totalOperations: this.currentPlan.operations.size,
590
- completedOperations: this.currentPlan.getCompletedOperations().length,
591
- failedOperations: this.currentPlan.getFailedOperations().length
592
- }
593
- };
107
+ return this.planExecutor.getExecutionStatus();
594
108
  }
595
109
 
596
110
  /**
597
111
  * Validate plan before execution
598
112
  */
599
113
  validatePlan(plan) {
600
- const issues = [];
601
-
602
- // Check for circular dependencies
603
- const visited = new Set();
604
- const recursionStack = new Set();
605
-
606
- function hasCircularDeps(operationId) {
607
- if (recursionStack.has(operationId)) {
608
- return true;
609
- }
610
-
611
- if (visited.has(operationId)) {
612
- return false;
613
- }
614
-
615
- visited.add(operationId);
616
- recursionStack.add(operationId);
617
-
618
- const operation = plan.operations.get(operationId);
619
- if (operation) {
620
- for (const depId of operation.dependencies) {
621
- if (hasCircularDeps(depId)) {
622
- return true;
623
- }
624
- }
625
- }
626
-
627
- recursionStack.delete(operationId);
628
- return false;
629
- }
630
-
631
- for (const operationId of plan.operations.keys()) {
632
- if (hasCircularDeps(operationId)) {
633
- issues.push(`Circular dependency detected for operation: ${operationId}`);
634
- }
635
- }
636
-
637
- // Check for missing dependencies
638
- for (const operation of plan.operations.values()) {
639
- for (const depId of operation.dependencies) {
640
- if (!plan.operations.has(depId)) {
641
- issues.push(`Missing dependency: ${depId} for operation: ${operation.id}`);
642
- }
643
- }
644
- }
645
-
646
- return {
647
- isValid: issues.length === 0,
648
- issues
649
- };
114
+ return this.planValidator.validatePlan(plan);
650
115
  }
651
116
 
652
117
  /**