@bloomreach/brxm-upgrade 0.1.1
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 +217 -0
- package/dist/ai/index.d.ts +3 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/providers.d.ts +27 -0
- package/dist/ai/providers.d.ts.map +1 -0
- package/dist/ai/providers.js +105 -0
- package/dist/ai/providers.js.map +1 -0
- package/dist/ai/types.d.ts +47 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/capture/change-scanner.d.ts +20 -0
- package/dist/capture/change-scanner.d.ts.map +1 -0
- package/dist/capture/change-scanner.js +71 -0
- package/dist/capture/change-scanner.js.map +1 -0
- package/dist/capture/conflict-resolver.d.ts +21 -0
- package/dist/capture/conflict-resolver.d.ts.map +1 -0
- package/dist/capture/conflict-resolver.js +45 -0
- package/dist/capture/conflict-resolver.js.map +1 -0
- package/dist/capture/critique-types.d.ts +60 -0
- package/dist/capture/critique-types.d.ts.map +1 -0
- package/dist/capture/critique-types.js +2 -0
- package/dist/capture/critique-types.js.map +1 -0
- package/dist/capture/entry-critique.d.ts +30 -0
- package/dist/capture/entry-critique.d.ts.map +1 -0
- package/dist/capture/entry-critique.js +137 -0
- package/dist/capture/entry-critique.js.map +1 -0
- package/dist/capture/entry-generator.d.ts +32 -0
- package/dist/capture/entry-generator.d.ts.map +1 -0
- package/dist/capture/entry-generator.js +209 -0
- package/dist/capture/entry-generator.js.map +1 -0
- package/dist/capture/entry-qa.d.ts +28 -0
- package/dist/capture/entry-qa.d.ts.map +1 -0
- package/dist/capture/entry-qa.js +84 -0
- package/dist/capture/entry-qa.js.map +1 -0
- package/dist/capture/entry-regeneration.d.ts +29 -0
- package/dist/capture/entry-regeneration.d.ts.map +1 -0
- package/dist/capture/entry-regeneration.js +164 -0
- package/dist/capture/entry-regeneration.js.map +1 -0
- package/dist/capture/entry-validator.d.ts +18 -0
- package/dist/capture/entry-validator.d.ts.map +1 -0
- package/dist/capture/entry-validator.js +47 -0
- package/dist/capture/entry-validator.js.map +1 -0
- package/dist/capture/heuristics.d.ts +30 -0
- package/dist/capture/heuristics.d.ts.map +1 -0
- package/dist/capture/heuristics.js +223 -0
- package/dist/capture/heuristics.js.map +1 -0
- package/dist/capture/index.d.ts +7 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +11 -0
- package/dist/capture/index.js.map +1 -0
- package/dist/capture/quality-report.d.ts +19 -0
- package/dist/capture/quality-report.d.ts.map +1 -0
- package/dist/capture/quality-report.js +161 -0
- package/dist/capture/quality-report.js.map +1 -0
- package/dist/capture/review-flow.d.ts +37 -0
- package/dist/capture/review-flow.d.ts.map +1 -0
- package/dist/capture/review-flow.js +212 -0
- package/dist/capture/review-flow.js.map +1 -0
- package/dist/capture/types.d.ts +114 -0
- package/dist/capture/types.d.ts.map +1 -0
- package/dist/capture/types.js +2 -0
- package/dist/capture/types.js.map +1 -0
- package/dist/commands/discover.d.ts +6 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +147 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/execute.d.ts +12 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +113 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/export.d.ts +26 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +291 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/finalize.d.ts +12 -0
- package/dist/commands/finalize.d.ts.map +1 -0
- package/dist/commands/finalize.js +225 -0
- package/dist/commands/finalize.js.map +1 -0
- package/dist/commands/guide.d.ts +12 -0
- package/dist/commands/guide.d.ts.map +1 -0
- package/dist/commands/guide.js +28 -0
- package/dist/commands/guide.js.map +1 -0
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +22 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/log-change.d.ts +14 -0
- package/dist/commands/log-change.d.ts.map +1 -0
- package/dist/commands/log-change.js +243 -0
- package/dist/commands/log-change.js.map +1 -0
- package/dist/commands/plan.d.ts +12 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +162 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/review-manifest.d.ts +39 -0
- package/dist/commands/review-manifest.d.ts.map +1 -0
- package/dist/commands/review-manifest.js +178 -0
- package/dist/commands/review-manifest.js.map +1 -0
- package/dist/commands/setup-manifests.d.ts +12 -0
- package/dist/commands/setup-manifests.d.ts.map +1 -0
- package/dist/commands/setup-manifests.js +229 -0
- package/dist/commands/setup-manifests.js.map +1 -0
- package/dist/config/defaults.d.ts +15 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +36 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +17 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +104 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +33 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +110 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/phase-manager.d.ts +53 -0
- package/dist/core/phase-manager.d.ts.map +1 -0
- package/dist/core/phase-manager.js +124 -0
- package/dist/core/phase-manager.js.map +1 -0
- package/dist/core/upgrade-state.d.ts +24 -0
- package/dist/core/upgrade-state.d.ts.map +1 -0
- package/dist/core/upgrade-state.js +32 -0
- package/dist/core/upgrade-state.js.map +1 -0
- package/dist/discovery/index.d.ts +5 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +4 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/orchestrator.d.ts +46 -0
- package/dist/discovery/orchestrator.d.ts.map +1 -0
- package/dist/discovery/orchestrator.js +124 -0
- package/dist/discovery/orchestrator.js.map +1 -0
- package/dist/discovery/scanners/config-detector.d.ts +24 -0
- package/dist/discovery/scanners/config-detector.d.ts.map +1 -0
- package/dist/discovery/scanners/config-detector.js +82 -0
- package/dist/discovery/scanners/config-detector.js.map +1 -0
- package/dist/discovery/scanners/cv-scanner.d.ts +30 -0
- package/dist/discovery/scanners/cv-scanner.d.ts.map +1 -0
- package/dist/discovery/scanners/cv-scanner.js +85 -0
- package/dist/discovery/scanners/cv-scanner.js.map +1 -0
- package/dist/discovery/scanners/index.d.ts +6 -0
- package/dist/discovery/scanners/index.d.ts.map +1 -0
- package/dist/discovery/scanners/index.js +6 -0
- package/dist/discovery/scanners/index.js.map +1 -0
- package/dist/discovery/scanners/maven-scanner.d.ts +33 -0
- package/dist/discovery/scanners/maven-scanner.d.ts.map +1 -0
- package/dist/discovery/scanners/maven-scanner.js +96 -0
- package/dist/discovery/scanners/maven-scanner.js.map +1 -0
- package/dist/discovery/scanners/repo-scanner.d.ts +9 -0
- package/dist/discovery/scanners/repo-scanner.d.ts.map +1 -0
- package/dist/discovery/scanners/repo-scanner.js +80 -0
- package/dist/discovery/scanners/repo-scanner.js.map +1 -0
- package/dist/discovery/scanners/version-resolver.d.ts +45 -0
- package/dist/discovery/scanners/version-resolver.d.ts.map +1 -0
- package/dist/discovery/scanners/version-resolver.js +119 -0
- package/dist/discovery/scanners/version-resolver.js.map +1 -0
- package/dist/discovery/types.d.ts +156 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +2 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/discovery/validators/index.d.ts +2 -0
- package/dist/discovery/validators/index.d.ts.map +1 -0
- package/dist/discovery/validators/index.js +2 -0
- package/dist/discovery/validators/index.js.map +1 -0
- package/dist/discovery/validators/upgrade-validator.d.ts +34 -0
- package/dist/discovery/validators/upgrade-validator.d.ts.map +1 -0
- package/dist/discovery/validators/upgrade-validator.js +135 -0
- package/dist/discovery/validators/upgrade-validator.js.map +1 -0
- package/dist/docs/docs-client.d.ts +44 -0
- package/dist/docs/docs-client.d.ts.map +1 -0
- package/dist/docs/docs-client.js +161 -0
- package/dist/docs/docs-client.js.map +1 -0
- package/dist/docs/docs-context.d.ts +23 -0
- package/dist/docs/docs-context.d.ts.map +1 -0
- package/dist/docs/docs-context.js +41 -0
- package/dist/docs/docs-context.js.map +1 -0
- package/dist/docs/index.d.ts +4 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +3 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/docs/types.d.ts +27 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/types.js +2 -0
- package/dist/docs/types.js.map +1 -0
- package/dist/execution/diff-presenter.d.ts +52 -0
- package/dist/execution/diff-presenter.d.ts.map +1 -0
- package/dist/execution/diff-presenter.js +148 -0
- package/dist/execution/diff-presenter.js.map +1 -0
- package/dist/execution/executors/ai-assisted.d.ts +28 -0
- package/dist/execution/executors/ai-assisted.d.ts.map +1 -0
- package/dist/execution/executors/ai-assisted.js +226 -0
- package/dist/execution/executors/ai-assisted.js.map +1 -0
- package/dist/execution/executors/automated.d.ts +15 -0
- package/dist/execution/executors/automated.d.ts.map +1 -0
- package/dist/execution/executors/automated.js +37 -0
- package/dist/execution/executors/automated.js.map +1 -0
- package/dist/execution/executors/cv-gate.d.ts +23 -0
- package/dist/execution/executors/cv-gate.d.ts.map +1 -0
- package/dist/execution/executors/cv-gate.js +63 -0
- package/dist/execution/executors/cv-gate.js.map +1 -0
- package/dist/execution/executors/index.d.ts +7 -0
- package/dist/execution/executors/index.d.ts.map +1 -0
- package/dist/execution/executors/index.js +7 -0
- package/dist/execution/executors/index.js.map +1 -0
- package/dist/execution/executors/manual.d.ts +18 -0
- package/dist/execution/executors/manual.d.ts.map +1 -0
- package/dist/execution/executors/manual.js +31 -0
- package/dist/execution/executors/manual.js.map +1 -0
- package/dist/execution/executors/override-resolution.d.ts +27 -0
- package/dist/execution/executors/override-resolution.d.ts.map +1 -0
- package/dist/execution/executors/override-resolution.js +79 -0
- package/dist/execution/executors/override-resolution.js.map +1 -0
- package/dist/execution/executors/version-bump.d.ts +20 -0
- package/dist/execution/executors/version-bump.d.ts.map +1 -0
- package/dist/execution/executors/version-bump.js +65 -0
- package/dist/execution/executors/version-bump.js.map +1 -0
- package/dist/execution/file-transformer.d.ts +25 -0
- package/dist/execution/file-transformer.d.ts.map +1 -0
- package/dist/execution/file-transformer.js +74 -0
- package/dist/execution/file-transformer.js.map +1 -0
- package/dist/execution/index.d.ts +7 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +9 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/state-manager.d.ts +27 -0
- package/dist/execution/state-manager.d.ts.map +1 -0
- package/dist/execution/state-manager.js +48 -0
- package/dist/execution/state-manager.js.map +1 -0
- package/dist/execution/step-executor.d.ts +68 -0
- package/dist/execution/step-executor.d.ts.map +1 -0
- package/dist/execution/step-executor.js +243 -0
- package/dist/execution/step-executor.js.map +1 -0
- package/dist/execution/types.d.ts +92 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +2 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/guide/GuideRunner.d.ts +62 -0
- package/dist/guide/GuideRunner.d.ts.map +1 -0
- package/dist/guide/GuideRunner.js +390 -0
- package/dist/guide/GuideRunner.js.map +1 -0
- package/dist/guide/chat/ChatContextBuilder.d.ts +44 -0
- package/dist/guide/chat/ChatContextBuilder.d.ts.map +1 -0
- package/dist/guide/chat/ChatContextBuilder.js +121 -0
- package/dist/guide/chat/ChatContextBuilder.js.map +1 -0
- package/dist/guide/chat/ChatLoop.d.ts +18 -0
- package/dist/guide/chat/ChatLoop.d.ts.map +1 -0
- package/dist/guide/chat/ChatLoop.js +59 -0
- package/dist/guide/chat/ChatLoop.js.map +1 -0
- package/dist/guide/chat/StepCoach.d.ts +22 -0
- package/dist/guide/chat/StepCoach.d.ts.map +1 -0
- package/dist/guide/chat/StepCoach.js +39 -0
- package/dist/guide/chat/StepCoach.js.map +1 -0
- package/dist/guide/chat/index.d.ts +4 -0
- package/dist/guide/chat/index.d.ts.map +1 -0
- package/dist/guide/chat/index.js +4 -0
- package/dist/guide/chat/index.js.map +1 -0
- package/dist/guide/index.d.ts +3 -0
- package/dist/guide/index.d.ts.map +1 -0
- package/dist/guide/index.js +2 -0
- package/dist/guide/index.js.map +1 -0
- package/dist/guide/phases/DiscoveryPhase.d.ts +30 -0
- package/dist/guide/phases/DiscoveryPhase.d.ts.map +1 -0
- package/dist/guide/phases/DiscoveryPhase.js +238 -0
- package/dist/guide/phases/DiscoveryPhase.js.map +1 -0
- package/dist/guide/phases/ExecutionPhase.d.ts +80 -0
- package/dist/guide/phases/ExecutionPhase.d.ts.map +1 -0
- package/dist/guide/phases/ExecutionPhase.js +574 -0
- package/dist/guide/phases/ExecutionPhase.js.map +1 -0
- package/dist/guide/phases/PlanPhase.d.ts +22 -0
- package/dist/guide/phases/PlanPhase.d.ts.map +1 -0
- package/dist/guide/phases/PlanPhase.js +200 -0
- package/dist/guide/phases/PlanPhase.js.map +1 -0
- package/dist/guide/phases/index.d.ts +4 -0
- package/dist/guide/phases/index.d.ts.map +1 -0
- package/dist/guide/phases/index.js +4 -0
- package/dist/guide/phases/index.js.map +1 -0
- package/dist/guide/rendering/formatters.d.ts +126 -0
- package/dist/guide/rendering/formatters.d.ts.map +1 -0
- package/dist/guide/rendering/formatters.js +340 -0
- package/dist/guide/rendering/formatters.js.map +1 -0
- package/dist/guide/rendering/index.d.ts +2 -0
- package/dist/guide/rendering/index.d.ts.map +1 -0
- package/dist/guide/rendering/index.js +2 -0
- package/dist/guide/rendering/index.js.map +1 -0
- package/dist/guide/rendering/platform-changes.d.ts +18 -0
- package/dist/guide/rendering/platform-changes.d.ts.map +1 -0
- package/dist/guide/rendering/platform-changes.js +86 -0
- package/dist/guide/rendering/platform-changes.js.map +1 -0
- package/dist/guide/types.d.ts +100 -0
- package/dist/guide/types.d.ts.map +1 -0
- package/dist/guide/types.js +2 -0
- package/dist/guide/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +138 -0
- package/dist/index.js.map +1 -0
- package/dist/manifests/maven-settings.d.ts +7 -0
- package/dist/manifests/maven-settings.d.ts.map +1 -0
- package/dist/manifests/maven-settings.js +33 -0
- package/dist/manifests/maven-settings.js.map +1 -0
- package/dist/manifests/parent-properties.d.ts +12 -0
- package/dist/manifests/parent-properties.d.ts.map +1 -0
- package/dist/manifests/parent-properties.js +28 -0
- package/dist/manifests/parent-properties.js.map +1 -0
- package/dist/manifests/schema.json +198 -0
- package/dist/manifests/unreleased.yaml +3 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/resources/index.d.ts +32 -0
- package/dist/mcp/resources/index.d.ts.map +1 -0
- package/dist/mcp/resources/index.js +55 -0
- package/dist/mcp/resources/index.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +162 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/complete-step.d.ts +26 -0
- package/dist/mcp/tools/complete-step.d.ts.map +1 -0
- package/dist/mcp/tools/complete-step.js +73 -0
- package/dist/mcp/tools/complete-step.js.map +1 -0
- package/dist/mcp/tools/create-upgrade-plan.d.ts +36 -0
- package/dist/mcp/tools/create-upgrade-plan.d.ts.map +1 -0
- package/dist/mcp/tools/create-upgrade-plan.js +143 -0
- package/dist/mcp/tools/create-upgrade-plan.js.map +1 -0
- package/dist/mcp/tools/discover-project.d.ts +33 -0
- package/dist/mcp/tools/discover-project.d.ts.map +1 -0
- package/dist/mcp/tools/discover-project.js +96 -0
- package/dist/mcp/tools/discover-project.js.map +1 -0
- package/dist/mcp/tools/get-next-step.d.ts +54 -0
- package/dist/mcp/tools/get-next-step.d.ts.map +1 -0
- package/dist/mcp/tools/get-next-step.js +110 -0
- package/dist/mcp/tools/get-next-step.js.map +1 -0
- package/dist/mcp/tools/get-upgrade-status.d.ts +25 -0
- package/dist/mcp/tools/get-upgrade-status.d.ts.map +1 -0
- package/dist/mcp/tools/get-upgrade-status.js +79 -0
- package/dist/mcp/tools/get-upgrade-status.js.map +1 -0
- package/dist/mcp/tools/upgrade-targets.d.ts +19 -0
- package/dist/mcp/tools/upgrade-targets.d.ts.map +1 -0
- package/dist/mcp/tools/upgrade-targets.js +132 -0
- package/dist/mcp/tools/upgrade-targets.js.map +1 -0
- package/dist/planning/ai-analyzer.d.ts +20 -0
- package/dist/planning/ai-analyzer.d.ts.map +1 -0
- package/dist/planning/ai-analyzer.js +97 -0
- package/dist/planning/ai-analyzer.js.map +1 -0
- package/dist/planning/index.d.ts +8 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +13 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/manifest-loader.d.ts +54 -0
- package/dist/planning/manifest-loader.d.ts.map +1 -0
- package/dist/planning/manifest-loader.js +233 -0
- package/dist/planning/manifest-loader.js.map +1 -0
- package/dist/planning/manifest-schema.d.ts +41 -0
- package/dist/planning/manifest-schema.d.ts.map +1 -0
- package/dist/planning/manifest-schema.js +71 -0
- package/dist/planning/manifest-schema.js.map +1 -0
- package/dist/planning/override-analyzer.d.ts +12 -0
- package/dist/planning/override-analyzer.d.ts.map +1 -0
- package/dist/planning/override-analyzer.js +42 -0
- package/dist/planning/override-analyzer.js.map +1 -0
- package/dist/planning/plan-generator.d.ts +15 -0
- package/dist/planning/plan-generator.d.ts.map +1 -0
- package/dist/planning/plan-generator.js +250 -0
- package/dist/planning/plan-generator.js.map +1 -0
- package/dist/planning/project-matcher.d.ts +65 -0
- package/dist/planning/project-matcher.d.ts.map +1 -0
- package/dist/planning/project-matcher.js +265 -0
- package/dist/planning/project-matcher.js.map +1 -0
- package/dist/planning/types.d.ts +237 -0
- package/dist/planning/types.d.ts.map +1 -0
- package/dist/planning/types.js +2 -0
- package/dist/planning/types.js.map +1 -0
- package/dist/types/index.d.ts +90 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/command-helpers.d.ts +14 -0
- package/dist/utils/command-helpers.d.ts.map +1 -0
- package/dist/utils/command-helpers.js +18 -0
- package/dist/utils/command-helpers.js.map +1 -0
- package/dist/utils/diff.d.ts +42 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +80 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/error.d.ts +5 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +8 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/fs.d.ts +50 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +117 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +31 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +62 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output-writer.d.ts +26 -0
- package/dist/utils/output-writer.d.ts.map +1 -0
- package/dist/utils/output-writer.js +62 -0
- package/dist/utils/output-writer.js.map +1 -0
- package/dist/utils/pom-parser.d.ts +94 -0
- package/dist/utils/pom-parser.d.ts.map +1 -0
- package/dist/utils/pom-parser.js +120 -0
- package/dist/utils/pom-parser.js.map +1 -0
- package/dist/utils/spinner.d.ts +35 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +46 -0
- package/dist/utils/spinner.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { joinPaths, readTextFile, writeTextFile } from '../../utils/fs.js';
|
|
2
|
+
/**
|
|
3
|
+
* Well-known Maven properties in brXM projects whose value tracks the
|
|
4
|
+
* brXM parent version. When the parent version is bumped these properties
|
|
5
|
+
* must be updated to match.
|
|
6
|
+
*/
|
|
7
|
+
export const KNOWN_VERSION_PROPERTIES = [
|
|
8
|
+
'essentials.version',
|
|
9
|
+
];
|
|
10
|
+
/**
|
|
11
|
+
* Executor for the synthetic version-bump step.
|
|
12
|
+
*
|
|
13
|
+
* Replaces the brXM parent version inside the root pom.xml's <parent> block
|
|
14
|
+
* and updates any well-known Maven properties that track the parent version.
|
|
15
|
+
*/
|
|
16
|
+
export class VersionBumpExecutor {
|
|
17
|
+
automationLevel = 'true';
|
|
18
|
+
async prepare(step, projectRoot) {
|
|
19
|
+
const toVersion = step.toVersion;
|
|
20
|
+
const fromVersion = step.fromVersion;
|
|
21
|
+
if (!toVersion || !fromVersion) {
|
|
22
|
+
return {
|
|
23
|
+
step,
|
|
24
|
+
changes: [],
|
|
25
|
+
totalFiles: 0,
|
|
26
|
+
isValid: false,
|
|
27
|
+
validationErrors: ['Version bump step is missing toVersion or fromVersion'],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const pomPath = joinPaths(projectRoot, 'pom.xml');
|
|
31
|
+
const originalContent = await readTextFile(pomPath);
|
|
32
|
+
// Replace the <version> tag inside the <parent> block only.
|
|
33
|
+
let modifiedContent = originalContent.replace(/(<parent>[\s\S]*?<version>)[^<]+(<\/version>[\s\S]*?<\/parent>)/, `$1${toVersion}$2`);
|
|
34
|
+
if (modifiedContent === originalContent) {
|
|
35
|
+
return {
|
|
36
|
+
step,
|
|
37
|
+
changes: [],
|
|
38
|
+
totalFiles: 0,
|
|
39
|
+
isValid: false,
|
|
40
|
+
validationErrors: [
|
|
41
|
+
`Could not locate parent version in pom.xml — has it already been updated?`,
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Update well-known Maven properties that track the brXM parent version.
|
|
46
|
+
for (const property of KNOWN_VERSION_PROPERTIES) {
|
|
47
|
+
const escapedName = property.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
48
|
+
const pattern = new RegExp(`(<${escapedName}>)${fromVersion.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(</${escapedName}>)`, 'g');
|
|
49
|
+
modifiedContent = modifiedContent.replace(pattern, `$1${toVersion}$2`);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
step,
|
|
53
|
+
changes: [{ filePath: pomPath, originalContent, modifiedContent, isNew: false }],
|
|
54
|
+
totalFiles: 1,
|
|
55
|
+
isValid: true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async apply(prepared, _projectRoot) {
|
|
59
|
+
for (const change of prepared.changes) {
|
|
60
|
+
await writeTextFile(change.filePath, change.modifiedContent);
|
|
61
|
+
}
|
|
62
|
+
return prepared.changes;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=version-bump.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-bump.js","sourceRoot":"","sources":["../../../src/execution/executors/version-bump.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE3E;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,oBAAoB;CACrB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IACrB,eAAe,GAAoB,MAAM,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,IAAc,EAAE,WAAmB;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACL,IAAI;gBACJ,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE,CAAC,uDAAuD,CAAC;aAC5E,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAEpD,4DAA4D;QAC5D,IAAI,eAAe,GAAG,eAAe,CAAC,OAAO,CAC3C,iEAAiE,EACjE,KAAK,SAAS,IAAI,CACnB,CAAC;QAEF,IAAI,eAAe,KAAK,eAAe,EAAE,CAAC;YACxC,OAAO;gBACL,IAAI;gBACJ,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE;oBAChB,2EAA2E;iBAC5E;aACF,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,KAAK,MAAM,QAAQ,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,KAAK,WAAW,KAAK,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,WAAW,IAAI,EAC5F,GAAG,CACJ,CAAC;YACF,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAChF,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAyB,EAAE,YAAoB;QACzD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { TransformPattern } from '../planning/types.js';
|
|
2
|
+
import type { FileChange } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Result of applying patterns to content.
|
|
5
|
+
*/
|
|
6
|
+
export interface TransformResult {
|
|
7
|
+
original: string;
|
|
8
|
+
modified: string;
|
|
9
|
+
hasChanges: boolean;
|
|
10
|
+
matchCount: number;
|
|
11
|
+
matchedPatterns: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Apply transformation patterns to a content string.
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyPatternsToContent(content: string, patterns: TransformPattern[]): TransformResult;
|
|
17
|
+
/**
|
|
18
|
+
* Apply patterns to files matching globs in the project.
|
|
19
|
+
*/
|
|
20
|
+
export declare function applyPatterns(projectRoot: string, patterns: TransformPattern[], fileGlobs: string[]): Promise<FileChange[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Apply file changes to the filesystem.
|
|
23
|
+
*/
|
|
24
|
+
export declare function applyFileChanges(changes: FileChange[]): Promise<string[]>;
|
|
25
|
+
//# sourceMappingURL=file-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-transformer.d.ts","sourceRoot":"","sources":["../../src/execution/file-transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,eAAe,CA8BjB;AAMD;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CAwBvB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO/E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { readTextFile, findFiles, pathExists, writeTextFile } from '../utils/fs.js';
|
|
2
|
+
/**
|
|
3
|
+
* Apply transformation patterns to a content string.
|
|
4
|
+
*/
|
|
5
|
+
export function applyPatternsToContent(content, patterns) {
|
|
6
|
+
let modified = content;
|
|
7
|
+
let totalMatchCount = 0;
|
|
8
|
+
const matchedPatterns = [];
|
|
9
|
+
for (const pattern of patterns) {
|
|
10
|
+
let regex;
|
|
11
|
+
try {
|
|
12
|
+
regex = pattern.isRegex
|
|
13
|
+
? new RegExp(pattern.match, 'g')
|
|
14
|
+
: new RegExp(escapeRegex(pattern.match), 'g');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
throw new Error(`Invalid regex pattern in manifest: "${pattern.match}"`);
|
|
18
|
+
}
|
|
19
|
+
const matches = modified.match(regex);
|
|
20
|
+
if (matches && matches.length > 0) {
|
|
21
|
+
totalMatchCount += matches.length;
|
|
22
|
+
matchedPatterns.push(pattern.match);
|
|
23
|
+
modified = modified.replace(regex, pattern.replace);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
original: content,
|
|
28
|
+
modified,
|
|
29
|
+
hasChanges: modified !== content,
|
|
30
|
+
matchCount: totalMatchCount,
|
|
31
|
+
matchedPatterns,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function escapeRegex(str) {
|
|
35
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Apply patterns to files matching globs in the project.
|
|
39
|
+
*/
|
|
40
|
+
export async function applyPatterns(projectRoot, patterns, fileGlobs) {
|
|
41
|
+
const changes = [];
|
|
42
|
+
const allFiles = new Set();
|
|
43
|
+
for (const pattern of fileGlobs) {
|
|
44
|
+
const matches = await findFiles(pattern, projectRoot);
|
|
45
|
+
matches.forEach((f) => allFiles.add(f));
|
|
46
|
+
}
|
|
47
|
+
for (const filePath of Array.from(allFiles)) {
|
|
48
|
+
if (!(await pathExists(filePath)))
|
|
49
|
+
continue;
|
|
50
|
+
const originalContent = await readTextFile(filePath);
|
|
51
|
+
const result = applyPatternsToContent(originalContent, patterns);
|
|
52
|
+
if (result.hasChanges) {
|
|
53
|
+
changes.push({
|
|
54
|
+
filePath,
|
|
55
|
+
originalContent,
|
|
56
|
+
modifiedContent: result.modified,
|
|
57
|
+
isNew: false,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return changes;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Apply file changes to the filesystem.
|
|
65
|
+
*/
|
|
66
|
+
export async function applyFileChanges(changes) {
|
|
67
|
+
const modifiedFiles = [];
|
|
68
|
+
for (const change of changes) {
|
|
69
|
+
await writeTextFile(change.filePath, change.modifiedContent);
|
|
70
|
+
modifiedFiles.push(change.filePath);
|
|
71
|
+
}
|
|
72
|
+
return modifiedFiles;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=file-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-transformer.js","sourceRoot":"","sources":["../../src/execution/file-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAepF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,QAA4B;IAE5B,IAAI,QAAQ,GAAG,OAAO,CAAC;IACvB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,OAAO,CAAC,OAAO;gBACrB,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;gBAChC,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;YAClC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,QAAQ;QACR,UAAU,EAAE,QAAQ,KAAK,OAAO;QAChC,UAAU,EAAE,eAAe;QAC3B,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,QAA4B,EAC5B,SAAmB;IAEnB,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAAE,SAAS;QAC5C,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,sBAAsB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ;gBACR,eAAe;gBACf,eAAe,EAAE,MAAM,CAAC,QAAQ;gBAChC,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAqB;IAC1D,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7D,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { StepDecision, StepExecutionResult, FileChange, PreparedChanges, ExecutionState, ExecuteOptions, ExecutionProgress, ProgressCallback, IStepExecutor, } from './types.js';
|
|
2
|
+
export { AutomatedExecutor, AIAssistedExecutor, ManualExecutor, } from './executors/index.js';
|
|
3
|
+
export { StepExecutor } from './step-executor.js';
|
|
4
|
+
export { StateManager } from './state-manager.js';
|
|
5
|
+
export { DiffPresenter } from './diff-presenter.js';
|
|
6
|
+
export { applyPatternsToContent, applyPatterns, applyFileChanges, type TransformResult, } from './file-transformer.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Executors
|
|
2
|
+
export { AutomatedExecutor, AIAssistedExecutor, ManualExecutor, } from './executors/index.js';
|
|
3
|
+
// Core components
|
|
4
|
+
export { StepExecutor } from './step-executor.js';
|
|
5
|
+
export { StateManager } from './state-manager.js';
|
|
6
|
+
export { DiffPresenter } from './diff-presenter.js';
|
|
7
|
+
// File transformation
|
|
8
|
+
export { applyPatternsToContent, applyPatterns, applyFileChanges, } from './file-transformer.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAaA,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,sBAAsB;AACtB,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ExecutionState } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Persists execution state to disk so an interrupted run can be resumed.
|
|
4
|
+
*
|
|
5
|
+
* Git serves as the rollback mechanism; this class only tracks which steps
|
|
6
|
+
* have been completed so the `--resume` flag works correctly.
|
|
7
|
+
*/
|
|
8
|
+
export declare class StateManager {
|
|
9
|
+
private readonly stateDir;
|
|
10
|
+
private readonly stateFile;
|
|
11
|
+
constructor(projectRoot: string);
|
|
12
|
+
/**
|
|
13
|
+
* Persist execution state to disk so a run can be resumed later.
|
|
14
|
+
*/
|
|
15
|
+
saveState(state: ExecutionState): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Load previously persisted execution state.
|
|
18
|
+
*
|
|
19
|
+
* @returns The saved state, or null if no state file exists
|
|
20
|
+
*/
|
|
21
|
+
loadState(): Promise<ExecutionState | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Clear persisted state on completion.
|
|
24
|
+
*/
|
|
25
|
+
clearState(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=state-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/execution/state-manager.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAcjD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKlC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { pathExists, readTextFile, writeTextFile, ensureDir, removeDir, joinPaths, } from '../utils/fs.js';
|
|
2
|
+
/**
|
|
3
|
+
* Persists execution state to disk so an interrupted run can be resumed.
|
|
4
|
+
*
|
|
5
|
+
* Git serves as the rollback mechanism; this class only tracks which steps
|
|
6
|
+
* have been completed so the `--resume` flag works correctly.
|
|
7
|
+
*/
|
|
8
|
+
export class StateManager {
|
|
9
|
+
stateDir;
|
|
10
|
+
stateFile;
|
|
11
|
+
constructor(projectRoot) {
|
|
12
|
+
this.stateDir = joinPaths(projectRoot, '.brxm-upgrade');
|
|
13
|
+
this.stateFile = joinPaths(this.stateDir, 'execution-state.json');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Persist execution state to disk so a run can be resumed later.
|
|
17
|
+
*/
|
|
18
|
+
async saveState(state) {
|
|
19
|
+
await ensureDir(this.stateDir);
|
|
20
|
+
await writeTextFile(this.stateFile, JSON.stringify(state, null, 2));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load previously persisted execution state.
|
|
24
|
+
*
|
|
25
|
+
* @returns The saved state, or null if no state file exists
|
|
26
|
+
*/
|
|
27
|
+
async loadState() {
|
|
28
|
+
if (!(await pathExists(this.stateFile))) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const content = await readTextFile(this.stateFile);
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
throw new Error(`Failed to read execution state from ${this.stateFile}. Remove the file and retry the run.`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Clear persisted state on completion.
|
|
41
|
+
*/
|
|
42
|
+
async clearState() {
|
|
43
|
+
if (await pathExists(this.stateFile)) {
|
|
44
|
+
await removeDir(this.stateFile);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=state-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/execution/state-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,gBAAgB,CAAC;AAGxB;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACN,QAAQ,CAAS;IACjB,SAAS,CAAS;IAEnC,YAAY,WAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,KAAqB;QACnC,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,uCAAuC,IAAI,CAAC,SAAS,sCAAsC,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { PlanStep } from '../planning/types.js';
|
|
2
|
+
import type { AIClient } from '../ai/types.js';
|
|
3
|
+
import type { ExecuteOptions, StepExecutionResult, IStepExecutor, ProgressCallback } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Main orchestrator that coordinates step execution for the upgrade plan.
|
|
6
|
+
*
|
|
7
|
+
* The StepExecutor loads the upgrade plan, selects the appropriate executor
|
|
8
|
+
* for each step (automated, AI-assisted, or manual), persists execution state,
|
|
9
|
+
* and presents diffs for user approval.
|
|
10
|
+
*/
|
|
11
|
+
export declare class StepExecutor {
|
|
12
|
+
private readonly projectRoot;
|
|
13
|
+
private readonly stateManager;
|
|
14
|
+
private readonly diffPresenter;
|
|
15
|
+
private readonly automatedExecutor;
|
|
16
|
+
private readonly aiAssistedExecutor;
|
|
17
|
+
private readonly manualExecutor;
|
|
18
|
+
private readonly versionBumpExecutor;
|
|
19
|
+
private readonly cvGateExecutor;
|
|
20
|
+
private readonly overrideResolutionExecutor;
|
|
21
|
+
constructor(projectRoot: string, aiClient: AIClient);
|
|
22
|
+
/**
|
|
23
|
+
* Execute the upgrade plan, processing each step in order.
|
|
24
|
+
*
|
|
25
|
+
* Loads the plan from disk, restores any prior execution state (for resume
|
|
26
|
+
* support), and iterates through the steps. Each step result is recorded
|
|
27
|
+
* and the execution state is persisted after every step.
|
|
28
|
+
*
|
|
29
|
+
* @param options - Execution options (dry-run, non-interactive, etc.)
|
|
30
|
+
* @param onProgress - Optional callback invoked before each step
|
|
31
|
+
* @returns Array of results for every step that was processed
|
|
32
|
+
*/
|
|
33
|
+
execute(options: ExecuteOptions, onProgress?: ProgressCallback): Promise<StepExecutionResult[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Execute a single step: prepare changes, present them for review, and
|
|
36
|
+
* optionally apply them.
|
|
37
|
+
*
|
|
38
|
+
* @param step - The plan step to execute
|
|
39
|
+
* @param totalSteps - Total number of steps (for display)
|
|
40
|
+
* @param options - Execution options
|
|
41
|
+
* @returns The execution result for this step
|
|
42
|
+
*/
|
|
43
|
+
executeStep(step: PlanStep, totalSteps: number, options: ExecuteOptions): Promise<StepExecutionResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Select the appropriate executor based on the step's automation level.
|
|
46
|
+
* When `skipAI` is enabled, AI-assisted steps fall back to the manual executor.
|
|
47
|
+
*
|
|
48
|
+
* @param step - The plan step to get an executor for
|
|
49
|
+
* @param options - Execution options (optional, used for skipAI check)
|
|
50
|
+
* @returns The matching executor instance
|
|
51
|
+
*/
|
|
52
|
+
getExecutorForStep(step: PlanStep, options?: ExecuteOptions): IStepExecutor;
|
|
53
|
+
/**
|
|
54
|
+
* Apply prepared changes by delegating to the executor to write the files.
|
|
55
|
+
*/
|
|
56
|
+
private applyChanges;
|
|
57
|
+
/**
|
|
58
|
+
* Load and parse the upgrade plan from a JSON file.
|
|
59
|
+
*
|
|
60
|
+
* @throws Error if the plan file does not exist
|
|
61
|
+
*/
|
|
62
|
+
private loadPlanFromFile;
|
|
63
|
+
/**
|
|
64
|
+
* Create a fresh execution state for a new plan run.
|
|
65
|
+
*/
|
|
66
|
+
private createInitialState;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=step-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-executor.d.ts","sourceRoot":"","sources":["../../src/execution/step-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,cAAc,EAEd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AASpB;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAA6B;gBAE5D,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAYnD;;;;;;;;;;OAUG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAkErG;;;;;;;;OAQG;IACG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+D5G;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa;IAkB3E;;OAEG;YACW,YAAY;IAkB1B;;;;OAIG;YACW,gBAAgB;IAQ9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAc3B"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { AutomatedExecutor, AIAssistedExecutor, ManualExecutor, VersionBumpExecutor, CVGateExecutor, OverrideResolutionExecutor } from './executors/index.js';
|
|
2
|
+
import { StateManager } from './state-manager.js';
|
|
3
|
+
import { DiffPresenter } from './diff-presenter.js';
|
|
4
|
+
import { readTextFile, pathExists, joinPaths } from '../utils/fs.js';
|
|
5
|
+
import { createLogger } from '../utils/logger.js';
|
|
6
|
+
const logger = createLogger({ prefix: 'StepExecutor' });
|
|
7
|
+
/**
|
|
8
|
+
* Main orchestrator that coordinates step execution for the upgrade plan.
|
|
9
|
+
*
|
|
10
|
+
* The StepExecutor loads the upgrade plan, selects the appropriate executor
|
|
11
|
+
* for each step (automated, AI-assisted, or manual), persists execution state,
|
|
12
|
+
* and presents diffs for user approval.
|
|
13
|
+
*/
|
|
14
|
+
export class StepExecutor {
|
|
15
|
+
projectRoot;
|
|
16
|
+
stateManager;
|
|
17
|
+
diffPresenter;
|
|
18
|
+
automatedExecutor;
|
|
19
|
+
aiAssistedExecutor;
|
|
20
|
+
manualExecutor;
|
|
21
|
+
versionBumpExecutor;
|
|
22
|
+
cvGateExecutor;
|
|
23
|
+
overrideResolutionExecutor;
|
|
24
|
+
constructor(projectRoot, aiClient) {
|
|
25
|
+
this.projectRoot = projectRoot;
|
|
26
|
+
this.stateManager = new StateManager(projectRoot);
|
|
27
|
+
this.diffPresenter = new DiffPresenter();
|
|
28
|
+
this.automatedExecutor = new AutomatedExecutor();
|
|
29
|
+
this.aiAssistedExecutor = new AIAssistedExecutor(aiClient);
|
|
30
|
+
this.manualExecutor = new ManualExecutor();
|
|
31
|
+
this.versionBumpExecutor = new VersionBumpExecutor();
|
|
32
|
+
this.cvGateExecutor = new CVGateExecutor();
|
|
33
|
+
this.overrideResolutionExecutor = new OverrideResolutionExecutor();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Execute the upgrade plan, processing each step in order.
|
|
37
|
+
*
|
|
38
|
+
* Loads the plan from disk, restores any prior execution state (for resume
|
|
39
|
+
* support), and iterates through the steps. Each step result is recorded
|
|
40
|
+
* and the execution state is persisted after every step.
|
|
41
|
+
*
|
|
42
|
+
* @param options - Execution options (dry-run, non-interactive, etc.)
|
|
43
|
+
* @param onProgress - Optional callback invoked before each step
|
|
44
|
+
* @returns Array of results for every step that was processed
|
|
45
|
+
*/
|
|
46
|
+
async execute(options, onProgress) {
|
|
47
|
+
const planPath = options.planPath ?? joinPaths(this.projectRoot, '.brxm-upgrade', 'plan.json');
|
|
48
|
+
const plan = await this.loadPlanFromFile(planPath);
|
|
49
|
+
let state = await this.stateManager.loadState();
|
|
50
|
+
if (!state || state.planGeneratedAt !== plan.generatedAt) {
|
|
51
|
+
state = this.createInitialState(planPath, plan);
|
|
52
|
+
}
|
|
53
|
+
const processedSteps = new Set([...state.completedSteps, ...state.skippedSteps]);
|
|
54
|
+
const nextStep = plan.steps.find((current) => !processedSteps.has(current.stepNumber))?.stepNumber ??
|
|
55
|
+
plan.steps.length + 1;
|
|
56
|
+
const startStep = options.resumeFromStep ?? nextStep;
|
|
57
|
+
const results = [];
|
|
58
|
+
for (let i = startStep - 1; i < plan.steps.length; i++) {
|
|
59
|
+
const step = plan.steps[i];
|
|
60
|
+
state.currentStep = step.stepNumber;
|
|
61
|
+
onProgress?.({
|
|
62
|
+
currentStep: step.stepNumber,
|
|
63
|
+
totalSteps: plan.steps.length,
|
|
64
|
+
currentDescription: step.description,
|
|
65
|
+
phase: 'preparing',
|
|
66
|
+
percentComplete: Math.round(((step.stepNumber - 1) / plan.steps.length) * 100),
|
|
67
|
+
});
|
|
68
|
+
const result = await this.executeStep(step, plan.steps.length, options);
|
|
69
|
+
results.push(result);
|
|
70
|
+
if (result.success) {
|
|
71
|
+
if (result.decision === 'accept') {
|
|
72
|
+
if (!state.completedSteps.includes(step.stepNumber)) {
|
|
73
|
+
state.completedSteps.push(step.stepNumber);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (result.decision === 'skip') {
|
|
77
|
+
if (!state.skippedSteps.includes(step.stepNumber)) {
|
|
78
|
+
state.skippedSteps.push(step.stepNumber);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
state.currentStep = step.stepNumber + 1;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (!state.failedSteps.includes(step.stepNumber)) {
|
|
85
|
+
state.failedSteps.push(step.stepNumber);
|
|
86
|
+
}
|
|
87
|
+
state.currentStep = step.stepNumber;
|
|
88
|
+
}
|
|
89
|
+
state.updatedAt = new Date().toISOString();
|
|
90
|
+
await this.stateManager.saveState(state);
|
|
91
|
+
if (!result.success && result.decision !== 'skip') {
|
|
92
|
+
logger.error(`Step ${step.stepNumber} failed: ${result.error}`);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (new Set([...state.completedSteps, ...state.skippedSteps]).size === plan.steps.length) {
|
|
97
|
+
state.isComplete = true;
|
|
98
|
+
await this.stateManager.saveState(state);
|
|
99
|
+
}
|
|
100
|
+
return results;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Execute a single step: prepare changes, present them for review, and
|
|
104
|
+
* optionally apply them.
|
|
105
|
+
*
|
|
106
|
+
* @param step - The plan step to execute
|
|
107
|
+
* @param totalSteps - Total number of steps (for display)
|
|
108
|
+
* @param options - Execution options
|
|
109
|
+
* @returns The execution result for this step
|
|
110
|
+
*/
|
|
111
|
+
async executeStep(step, totalSteps, options) {
|
|
112
|
+
const startTime = Date.now();
|
|
113
|
+
try {
|
|
114
|
+
if (!options.nonInteractive) {
|
|
115
|
+
console.log(this.diffPresenter.formatStepHeader(step, totalSteps));
|
|
116
|
+
}
|
|
117
|
+
const executor = this.getExecutorForStep(step, options);
|
|
118
|
+
const prepared = await executor.prepare(step, this.projectRoot);
|
|
119
|
+
if (!prepared.isValid) {
|
|
120
|
+
return {
|
|
121
|
+
stepNumber: step.stepNumber,
|
|
122
|
+
entryId: step.entryId,
|
|
123
|
+
success: false,
|
|
124
|
+
decision: 'reject',
|
|
125
|
+
modifiedFiles: [],
|
|
126
|
+
modifiedFileCount: 0,
|
|
127
|
+
error: prepared.validationErrors?.join(', '),
|
|
128
|
+
duration: Date.now() - startTime,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
let decision;
|
|
132
|
+
if (options.dryRun) {
|
|
133
|
+
this.diffPresenter.showFullDiff(prepared);
|
|
134
|
+
decision = 'skip';
|
|
135
|
+
}
|
|
136
|
+
else if (options.nonInteractive) {
|
|
137
|
+
decision = options.autoAcceptAutomated && step.automatable === 'true' ? 'accept' : 'skip';
|
|
138
|
+
}
|
|
139
|
+
else if (step.automatable === 'false') {
|
|
140
|
+
decision = await this.diffPresenter.presentManualStep(step);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
decision = await this.diffPresenter.presentChanges(prepared);
|
|
144
|
+
}
|
|
145
|
+
if (decision === 'accept') {
|
|
146
|
+
return await this.applyChanges(step, prepared, executor, startTime);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return {
|
|
150
|
+
stepNumber: step.stepNumber,
|
|
151
|
+
entryId: step.entryId,
|
|
152
|
+
success: true,
|
|
153
|
+
decision,
|
|
154
|
+
modifiedFiles: [],
|
|
155
|
+
modifiedFileCount: 0,
|
|
156
|
+
duration: Date.now() - startTime,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return {
|
|
162
|
+
stepNumber: step.stepNumber,
|
|
163
|
+
entryId: step.entryId,
|
|
164
|
+
success: false,
|
|
165
|
+
decision: 'reject',
|
|
166
|
+
modifiedFiles: [],
|
|
167
|
+
modifiedFileCount: 0,
|
|
168
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
169
|
+
duration: Date.now() - startTime,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Select the appropriate executor based on the step's automation level.
|
|
175
|
+
* When `skipAI` is enabled, AI-assisted steps fall back to the manual executor.
|
|
176
|
+
*
|
|
177
|
+
* @param step - The plan step to get an executor for
|
|
178
|
+
* @param options - Execution options (optional, used for skipAI check)
|
|
179
|
+
* @returns The matching executor instance
|
|
180
|
+
*/
|
|
181
|
+
getExecutorForStep(step, options) {
|
|
182
|
+
if (step.type === 'verification_gate') {
|
|
183
|
+
return this.cvGateExecutor;
|
|
184
|
+
}
|
|
185
|
+
if (step.type === 'override_resolution') {
|
|
186
|
+
return this.overrideResolutionExecutor;
|
|
187
|
+
}
|
|
188
|
+
if (step.type === 'version_bump') {
|
|
189
|
+
return this.versionBumpExecutor;
|
|
190
|
+
}
|
|
191
|
+
switch (step.automatable) {
|
|
192
|
+
case 'true': return this.automatedExecutor;
|
|
193
|
+
case 'partial': return options?.skipAI ? this.manualExecutor : this.aiAssistedExecutor;
|
|
194
|
+
case 'false': return this.manualExecutor;
|
|
195
|
+
default: return this.manualExecutor;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Apply prepared changes by delegating to the executor to write the files.
|
|
200
|
+
*/
|
|
201
|
+
async applyChanges(step, prepared, executor, startTime) {
|
|
202
|
+
const modifiedFiles = await executor.apply(prepared, this.projectRoot);
|
|
203
|
+
return {
|
|
204
|
+
stepNumber: step.stepNumber,
|
|
205
|
+
entryId: step.entryId,
|
|
206
|
+
success: true,
|
|
207
|
+
decision: 'accept',
|
|
208
|
+
modifiedFiles: modifiedFiles.map((f) => f.filePath),
|
|
209
|
+
modifiedFileCount: modifiedFiles.length,
|
|
210
|
+
duration: Date.now() - startTime,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Load and parse the upgrade plan from a JSON file.
|
|
215
|
+
*
|
|
216
|
+
* @throws Error if the plan file does not exist
|
|
217
|
+
*/
|
|
218
|
+
async loadPlanFromFile(planPath) {
|
|
219
|
+
if (!(await pathExists(planPath))) {
|
|
220
|
+
throw new Error(`Plan file not found: ${planPath}. Run 'brxm-upgrade plan' first.`);
|
|
221
|
+
}
|
|
222
|
+
const content = await readTextFile(planPath);
|
|
223
|
+
return JSON.parse(content);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Create a fresh execution state for a new plan run.
|
|
227
|
+
*/
|
|
228
|
+
createInitialState(planFile, plan) {
|
|
229
|
+
const now = new Date().toISOString();
|
|
230
|
+
return {
|
|
231
|
+
planFile,
|
|
232
|
+
planGeneratedAt: plan.generatedAt,
|
|
233
|
+
currentStep: 1,
|
|
234
|
+
completedSteps: [],
|
|
235
|
+
skippedSteps: [],
|
|
236
|
+
failedSteps: [],
|
|
237
|
+
startedAt: now,
|
|
238
|
+
updatedAt: now,
|
|
239
|
+
isComplete: false,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=step-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-executor.js","sourceRoot":"","sources":["../../src/execution/step-executor.ts"],"names":[],"mappings":"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"}
|