@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 @@
|
|
|
1
|
+
{"version":3,"file":"finalize.d.ts","sourceRoot":"","sources":["../../src/commands/finalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA8L/C"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { dirname, join } from 'node:path';
|
|
7
|
+
import { createSpinner } from '../utils/spinner.js';
|
|
8
|
+
import { createLogger } from '../utils/logger.js';
|
|
9
|
+
import { pathExists } from '../utils/fs.js';
|
|
10
|
+
import { getApiKey } from '../config/index.js';
|
|
11
|
+
import { createAIClient } from '../ai/index.js';
|
|
12
|
+
import { loadUnreleasedManifest, saveManifest } from '../planning/manifest-loader.js';
|
|
13
|
+
import { extractVersionProperties } from '../manifests/parent-properties.js';
|
|
14
|
+
import { getCommandConfig } from '../utils/command-helpers.js';
|
|
15
|
+
/* eslint-disable no-console */
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
/**
|
|
19
|
+
* Get the project root directory for brxm-upgrade (where package.json lives).
|
|
20
|
+
*/
|
|
21
|
+
function getProjectRoot() {
|
|
22
|
+
return join(__dirname, '..', '..');
|
|
23
|
+
}
|
|
24
|
+
function getDefaultUnreleasedPath() {
|
|
25
|
+
return join(getProjectRoot(), 'src', 'manifests', 'unreleased.yaml');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the default directory for released manifests.
|
|
29
|
+
*/
|
|
30
|
+
function getDefaultReleasedDir() {
|
|
31
|
+
return join(getProjectRoot(), 'src', 'manifests', 'released');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate a changelog entry for a manifest entry using an AI client.
|
|
35
|
+
*
|
|
36
|
+
* @param entry - The manifest entry to generate a changelog for
|
|
37
|
+
* @param aiClient - The AI client to use for generation
|
|
38
|
+
* @returns A concise, one-sentence changelog entry
|
|
39
|
+
*/
|
|
40
|
+
async function generateChangelogEntry(entry, aiClient) {
|
|
41
|
+
const result = await aiClient.generate(`Write a concise, one-sentence changelog entry for this upgrade step:\n\n` +
|
|
42
|
+
`ID: ${entry.id}\n` +
|
|
43
|
+
`Type: ${entry.type}\n` +
|
|
44
|
+
`Description: ${entry.description}\n` +
|
|
45
|
+
`Automatable: ${entry.automatable}\n\n` +
|
|
46
|
+
`Respond with ONLY the changelog text, no quotes or prefixes.`, { maxTokens: 200, temperature: 0.3 });
|
|
47
|
+
return result.text.trim();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create the finalize command for promoting unreleased manifest entries to a released version.
|
|
51
|
+
*
|
|
52
|
+
* The finalize command loads the unreleased manifest, optionally generates missing
|
|
53
|
+
* changelog entries using AI, and writes a new versioned manifest file in the
|
|
54
|
+
* released directory. It then resets the unreleased manifest to empty.
|
|
55
|
+
*
|
|
56
|
+
* @returns Configured Commander command instance
|
|
57
|
+
*/
|
|
58
|
+
export function createFinalizeCommand() {
|
|
59
|
+
const command = new Command('finalize')
|
|
60
|
+
.description('Promote unreleased manifest entries to a released version')
|
|
61
|
+
.argument('<version>', 'Version to finalize (e.g., 16.3.0)')
|
|
62
|
+
.option('--unreleased <path>', 'Path to unreleased.yaml')
|
|
63
|
+
.option('--released-dir <path>', 'Path to released manifests directory')
|
|
64
|
+
.option('--repo-path <path>', 'Path to the brXM monorepo root (for extracting managed_properties)')
|
|
65
|
+
.option('--force', 'Skip confirmation prompt', false)
|
|
66
|
+
.option('-v, --verbose', 'Enable verbose output', false)
|
|
67
|
+
.action(async (version, options) => {
|
|
68
|
+
const logger = createLogger({ verbose: options.verbose });
|
|
69
|
+
const spinner = createSpinner();
|
|
70
|
+
try {
|
|
71
|
+
// Validate version
|
|
72
|
+
if (!semver.valid(version)) {
|
|
73
|
+
console.log(chalk.red(`Invalid version: "${version}". Must be a valid semver (e.g., 16.3.0).`));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
// Resolve paths
|
|
77
|
+
const unreleasedPath = options.unreleased ?? getDefaultUnreleasedPath();
|
|
78
|
+
const releasedDir = options.releasedDir ?? getDefaultReleasedDir();
|
|
79
|
+
const releasedPath = join(releasedDir, `${version}.yaml`);
|
|
80
|
+
// Check for version collision
|
|
81
|
+
if (await pathExists(releasedPath)) {
|
|
82
|
+
console.log(chalk.red(`Released manifest already exists: ${releasedPath}`));
|
|
83
|
+
console.log('Remove it manually if you want to re-finalize.');
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
// Load unreleased manifest
|
|
87
|
+
spinner.start('Loading unreleased manifest...');
|
|
88
|
+
const unreleased = await loadUnreleasedManifest(unreleasedPath);
|
|
89
|
+
if (unreleased.entries.length === 0) {
|
|
90
|
+
spinner.succeed('No unreleased entries — creating empty release manifest');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
spinner.succeed(`Loaded ${unreleased.entries.length} unreleased entries`);
|
|
94
|
+
}
|
|
95
|
+
// Quality gate: check for missing changelog entries
|
|
96
|
+
const missingChangelog = unreleased.entries.filter(e => !e.changelog_entry);
|
|
97
|
+
if (missingChangelog.length > 0) {
|
|
98
|
+
console.log('');
|
|
99
|
+
console.log(chalk.yellow(`${missingChangelog.length} entries missing changelog_entry:`));
|
|
100
|
+
for (const entry of missingChangelog) {
|
|
101
|
+
console.log(chalk.yellow(` - ${entry.id}`));
|
|
102
|
+
}
|
|
103
|
+
const config = await getCommandConfig(command);
|
|
104
|
+
const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
|
|
105
|
+
if (apiKey) {
|
|
106
|
+
const backfill = options.force || (await inquirer.prompt([{
|
|
107
|
+
type: 'confirm',
|
|
108
|
+
name: 'backfill',
|
|
109
|
+
message: 'Generate missing changelog entries with AI?',
|
|
110
|
+
default: true,
|
|
111
|
+
}])).backfill;
|
|
112
|
+
if (backfill) {
|
|
113
|
+
const aiClient = createAIClient(config.ai.provider, config.ai.model, apiKey, config.ai.baseUrl);
|
|
114
|
+
const skippedEntries = [];
|
|
115
|
+
for (const entry of missingChangelog) {
|
|
116
|
+
spinner.start(`Generating changelog for ${entry.id}...`);
|
|
117
|
+
try {
|
|
118
|
+
entry.changelog_entry = await generateChangelogEntry(entry, aiClient);
|
|
119
|
+
spinner.succeed(`${entry.id}: ${entry.changelog_entry}`);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
123
|
+
spinner.warn(`Failed to generate changelog for ${entry.id}: ${msg}`);
|
|
124
|
+
skippedEntries.push(entry.id);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (skippedEntries.length > 0) {
|
|
128
|
+
console.log(chalk.yellow(`\nSkipped changelog generation for: ${skippedEntries.join(', ')}`));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(chalk.yellow('No AI provider configured. Cannot auto-generate changelog entries.'));
|
|
134
|
+
console.log('Add them manually or configure AI and try again.');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Confirmation
|
|
138
|
+
if (!options.force) {
|
|
139
|
+
console.log('');
|
|
140
|
+
const { confirmed } = await inquirer.prompt([{
|
|
141
|
+
type: 'confirm',
|
|
142
|
+
name: 'confirmed',
|
|
143
|
+
message: `Finalize ${unreleased.entries.length} entries as ${version}?`,
|
|
144
|
+
default: true,
|
|
145
|
+
}]);
|
|
146
|
+
if (!confirmed) {
|
|
147
|
+
console.log('Cancelled.');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const today = new Date().toISOString().split('T')[0];
|
|
152
|
+
// Extract managed version properties from the community parent POM at brxm-<version>.
|
|
153
|
+
// Non-fatal: if the tag isn't available (e.g., finalize run before tagging) or the POM
|
|
154
|
+
// has no *.version properties, we log and continue with an empty object.
|
|
155
|
+
let managedProperties = {};
|
|
156
|
+
const repoPath = options.repoPath ?? process.cwd();
|
|
157
|
+
const gitTag = `brxm-${version}`;
|
|
158
|
+
spinner.start(`Extracting managed properties from ${gitTag}...`);
|
|
159
|
+
try {
|
|
160
|
+
managedProperties = extractVersionProperties(gitTag, repoPath);
|
|
161
|
+
const propCount = Object.keys(managedProperties).length;
|
|
162
|
+
if (propCount === 0) {
|
|
163
|
+
spinner.warn(`No *.version properties found at ${gitTag} — managed_properties will be empty.`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
spinner.succeed(`Extracted ${propCount} managed properties from ${gitTag}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
171
|
+
spinner.warn(`Could not read POM at ${gitTag} (${msg}) — skipping managed_properties.`);
|
|
172
|
+
}
|
|
173
|
+
const released = {
|
|
174
|
+
schema_version: unreleased.schema_version,
|
|
175
|
+
version,
|
|
176
|
+
release_date: today,
|
|
177
|
+
...(Object.keys(managedProperties).length > 0 ? { managed_properties: managedProperties } : {}),
|
|
178
|
+
entries: unreleased.entries,
|
|
179
|
+
};
|
|
180
|
+
// Write released manifest
|
|
181
|
+
spinner.start(`Writing released manifest: ${version}.yaml...`);
|
|
182
|
+
await saveManifest(releasedPath, released);
|
|
183
|
+
spinner.succeed(`Released: ${releasedPath}`);
|
|
184
|
+
// Reset unreleased
|
|
185
|
+
spinner.start('Resetting unreleased.yaml...');
|
|
186
|
+
const emptyManifest = {
|
|
187
|
+
schema_version: '1.0',
|
|
188
|
+
version: 'unreleased',
|
|
189
|
+
entries: [],
|
|
190
|
+
};
|
|
191
|
+
await saveManifest(unreleasedPath, emptyManifest);
|
|
192
|
+
spinner.succeed('Unreleased manifest reset');
|
|
193
|
+
// Summary
|
|
194
|
+
console.log('');
|
|
195
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
196
|
+
console.log(chalk.bold(` Finalized: ${version}`));
|
|
197
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
198
|
+
console.log(` Total entries: ${released.entries.length}`);
|
|
199
|
+
const byType = new Map();
|
|
200
|
+
const byAutomation = new Map();
|
|
201
|
+
for (const entry of released.entries) {
|
|
202
|
+
byType.set(entry.type, (byType.get(entry.type) ?? 0) + 1);
|
|
203
|
+
byAutomation.set(entry.automatable, (byAutomation.get(entry.automatable) ?? 0) + 1);
|
|
204
|
+
}
|
|
205
|
+
console.log(' By type:');
|
|
206
|
+
for (const [type, count] of byType.entries()) {
|
|
207
|
+
console.log(` ${type}: ${count}`);
|
|
208
|
+
}
|
|
209
|
+
console.log(' By automation:');
|
|
210
|
+
for (const [level, count] of byAutomation.entries()) {
|
|
211
|
+
const label = level === 'true' ? 'Automated' : level === 'partial' ? 'AI-assisted' : 'Manual';
|
|
212
|
+
console.log(` ${label}: ${count}`);
|
|
213
|
+
}
|
|
214
|
+
console.log('');
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
spinner.fail('Finalize failed');
|
|
218
|
+
logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
return command;
|
|
223
|
+
}
|
|
224
|
+
/* eslint-enable no-console */
|
|
225
|
+
//# sourceMappingURL=finalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finalize.js","sourceRoot":"","sources":["../../src/commands/finalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BrxmUpgradeConfig } from '../config/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Launch the guided upgrade experience.
|
|
4
|
+
*
|
|
5
|
+
* Creates an AI client (when an API key is available) and starts
|
|
6
|
+
* the interactive GuideRunner that walks the user through discovery,
|
|
7
|
+
* planning, execution, and summary phases.
|
|
8
|
+
*
|
|
9
|
+
* @param config - Resolved CLI configuration
|
|
10
|
+
*/
|
|
11
|
+
export declare function runGuide(config: BrxmUpgradeConfig): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/commands/guide.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAevE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { GuideRunner } from '../guide/GuideRunner.js';
|
|
2
|
+
import { createAIClient } from '../ai/index.js';
|
|
3
|
+
import { getApiKey } from '../config/index.js';
|
|
4
|
+
import { DocsClient } from '../docs/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Launch the guided upgrade experience.
|
|
7
|
+
*
|
|
8
|
+
* Creates an AI client (when an API key is available) and starts
|
|
9
|
+
* the interactive GuideRunner that walks the user through discovery,
|
|
10
|
+
* planning, execution, and summary phases.
|
|
11
|
+
*
|
|
12
|
+
* @param config - Resolved CLI configuration
|
|
13
|
+
*/
|
|
14
|
+
export async function runGuide(config) {
|
|
15
|
+
const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
|
|
16
|
+
const ai = apiKey
|
|
17
|
+
? createAIClient(config.ai.provider, config.ai.model, apiKey, config.ai.baseUrl)
|
|
18
|
+
: undefined;
|
|
19
|
+
const docsClient = ai ? new DocsClient({}, config.output.verbose) : undefined;
|
|
20
|
+
const manifestOptions = {
|
|
21
|
+
source: config.upgrade.source,
|
|
22
|
+
url: config.upgrade.url,
|
|
23
|
+
localPath: config.upgrade.localPath,
|
|
24
|
+
};
|
|
25
|
+
const runner = new GuideRunner(process.cwd(), config, manifestOptions, ai, docsClient);
|
|
26
|
+
await runner.run();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/commands/guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAyB;IACtD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,MAAM;QACf,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,eAAe,GAAwB;QAC3C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QAC7B,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;QACvB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;KACpC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACvF,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASvD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createDiscoverCommand } from './discover.js';
|
|
2
|
+
import { createPlanCommand } from './plan.js';
|
|
3
|
+
import { createExecuteCommand } from './execute.js';
|
|
4
|
+
import { createFinalizeCommand } from './finalize.js';
|
|
5
|
+
import { createLogChangeCommand } from './log-change.js';
|
|
6
|
+
import { createExportCommand } from './export.js';
|
|
7
|
+
import { createReviewManifestCommand } from './review-manifest.js';
|
|
8
|
+
import { createSetupManifestsCommand } from './setup-manifests.js';
|
|
9
|
+
/**
|
|
10
|
+
* Register all commands with the CLI program.
|
|
11
|
+
*/
|
|
12
|
+
export function registerCommands(program) {
|
|
13
|
+
program.addCommand(createDiscoverCommand());
|
|
14
|
+
program.addCommand(createPlanCommand());
|
|
15
|
+
program.addCommand(createExecuteCommand());
|
|
16
|
+
program.addCommand(createLogChangeCommand());
|
|
17
|
+
program.addCommand(createFinalizeCommand());
|
|
18
|
+
program.addCommand(createExportCommand());
|
|
19
|
+
program.addCommand(createReviewManifestCommand());
|
|
20
|
+
program.addCommand(createSetupManifestsCommand());
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Create the log-change command for scanning change documents and generating
|
|
4
|
+
* manifest entries via AI.
|
|
5
|
+
*
|
|
6
|
+
* The command scans a directory for Markdown change documents, uses AI to
|
|
7
|
+
* generate structured manifest entries from each document, checks for
|
|
8
|
+
* conflicts with existing entries, and supports interactive review or
|
|
9
|
+
* auto-accept mode.
|
|
10
|
+
*
|
|
11
|
+
* @returns Configured Commander command instance
|
|
12
|
+
*/
|
|
13
|
+
export declare function createLogChangeCommand(): Command;
|
|
14
|
+
//# sourceMappingURL=log-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-change.d.ts","sourceRoot":"","sources":["../../src/commands/log-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAoOhD"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { createSpinner } from '../utils/spinner.js';
|
|
6
|
+
import { createLogger } from '../utils/logger.js';
|
|
7
|
+
import { resolvePath } from '../utils/fs.js';
|
|
8
|
+
import { getApiKey } from '../config/index.js';
|
|
9
|
+
import { createAIClient } from '../ai/index.js';
|
|
10
|
+
import { loadUnreleasedManifest, saveManifest } from '../planning/manifest-loader.js';
|
|
11
|
+
import { scanChangeDocuments } from '../capture/change-scanner.js';
|
|
12
|
+
import { generateAndReviewEntry } from '../capture/entry-qa.js';
|
|
13
|
+
import { checkConflict, resolveConflict } from '../capture/conflict-resolver.js';
|
|
14
|
+
import { ReviewFlow } from '../capture/review-flow.js';
|
|
15
|
+
import { getCommandConfig } from '../utils/command-helpers.js';
|
|
16
|
+
/* eslint-disable no-console */
|
|
17
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
+
const __dirname = dirname(__filename);
|
|
19
|
+
/**
|
|
20
|
+
* Get the project root directory for brxm-upgrade (where package.json lives).
|
|
21
|
+
*/
|
|
22
|
+
function getProjectRoot() {
|
|
23
|
+
return join(__dirname, '..', '..');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the default path to the unreleased manifest.
|
|
27
|
+
*/
|
|
28
|
+
function getDefaultUnreleasedPath() {
|
|
29
|
+
return join(getProjectRoot(), 'src', 'manifests', 'unreleased.yaml');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create the log-change command for scanning change documents and generating
|
|
33
|
+
* manifest entries via AI.
|
|
34
|
+
*
|
|
35
|
+
* The command scans a directory for Markdown change documents, uses AI to
|
|
36
|
+
* generate structured manifest entries from each document, checks for
|
|
37
|
+
* conflicts with existing entries, and supports interactive review or
|
|
38
|
+
* auto-accept mode.
|
|
39
|
+
*
|
|
40
|
+
* @returns Configured Commander command instance
|
|
41
|
+
*/
|
|
42
|
+
export function createLogChangeCommand() {
|
|
43
|
+
const command = new Command('log-change')
|
|
44
|
+
.description('Scan change documents and generate manifest entries via AI')
|
|
45
|
+
.option('--changes-dir <path>', 'Path to change documents directory', 'docs/changes')
|
|
46
|
+
.option('--unreleased <path>', 'Path to unreleased.yaml')
|
|
47
|
+
.option('--auto-accept', 'Auto-accept all AI-generated entries', false)
|
|
48
|
+
.option('-v, --verbose', 'Enable verbose output', false)
|
|
49
|
+
.action(async (options) => {
|
|
50
|
+
const logger = createLogger({ verbose: options.verbose });
|
|
51
|
+
const spinner = createSpinner();
|
|
52
|
+
try {
|
|
53
|
+
// Load configuration
|
|
54
|
+
spinner.start('Loading configuration...');
|
|
55
|
+
const config = await getCommandConfig(command);
|
|
56
|
+
spinner.succeed('Configuration loaded');
|
|
57
|
+
spinner.start('Initializing AI provider...');
|
|
58
|
+
const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
|
|
59
|
+
if (!apiKey) {
|
|
60
|
+
spinner.fail(`No API key found for ${config.ai.provider}.`);
|
|
61
|
+
console.log('AI is required for log-change. Set your API key and try again.');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
const aiClient = createAIClient(config.ai.provider, config.ai.model, apiKey, config.ai.baseUrl);
|
|
65
|
+
spinner.succeed(`AI provider: ${config.ai.provider} (${config.ai.model})`);
|
|
66
|
+
// Resolve paths
|
|
67
|
+
const changesDir = resolvePath(options.changesDir);
|
|
68
|
+
const unreleasedPath = options.unreleased ?? getDefaultUnreleasedPath();
|
|
69
|
+
// Scan change documents
|
|
70
|
+
spinner.start('Scanning change documents...');
|
|
71
|
+
const docs = await scanChangeDocuments(changesDir);
|
|
72
|
+
if (docs.length === 0) {
|
|
73
|
+
spinner.warn('No change documents found.');
|
|
74
|
+
console.log(`Looked in: ${changesDir}`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
spinner.succeed(`Found ${docs.length} change document(s)`);
|
|
78
|
+
// Load unreleased manifest
|
|
79
|
+
spinner.start('Loading unreleased manifest...');
|
|
80
|
+
let manifest = await loadUnreleasedManifest(unreleasedPath);
|
|
81
|
+
spinner.succeed(`Unreleased manifest: ${manifest.entries.length} existing entries`);
|
|
82
|
+
// Process each document through the full QA pipeline
|
|
83
|
+
const reviewFlow = new ReviewFlow();
|
|
84
|
+
const summary = {
|
|
85
|
+
totalScanned: docs.length,
|
|
86
|
+
accepted: 0,
|
|
87
|
+
skipped: 0,
|
|
88
|
+
failed: 0,
|
|
89
|
+
replaced: 0,
|
|
90
|
+
addedSeparate: 0,
|
|
91
|
+
};
|
|
92
|
+
const failedDocs = [];
|
|
93
|
+
const qaRecords = [];
|
|
94
|
+
for (const doc of docs) {
|
|
95
|
+
console.log('');
|
|
96
|
+
spinner.start(`Processing ${doc.filename} (generate → critique → validate)...`);
|
|
97
|
+
try {
|
|
98
|
+
const { entries, qaRecord } = await generateAndReviewEntry(doc, aiClient);
|
|
99
|
+
qaRecords.push(qaRecord);
|
|
100
|
+
const qualityNote = qaRecord.regenerated
|
|
101
|
+
? chalk.cyan(` [regenerated${qaRecord.split ? `, split→${entries.length}` : ''}]`)
|
|
102
|
+
: qaRecord.heuristicFixes.length > 0
|
|
103
|
+
? chalk.cyan(` [${qaRecord.heuristicFixes.length} heuristic fix(es)]`)
|
|
104
|
+
: '';
|
|
105
|
+
spinner.succeed(`${entries.length} entry(ies) generated [quality: ${qaRecord.finalQuality}]${qualityNote}`);
|
|
106
|
+
// Check conflict once per doc (before adding any entries from this doc)
|
|
107
|
+
const conflict = checkConflict(doc.metadata.jiraTicket, manifest);
|
|
108
|
+
if (options.autoAccept) {
|
|
109
|
+
if (conflict.hasConflict && doc.metadata.jiraTicket) {
|
|
110
|
+
// Remove all old entries for this JIRA, then add all new entries
|
|
111
|
+
manifest = {
|
|
112
|
+
...manifest,
|
|
113
|
+
entries: [
|
|
114
|
+
...manifest.entries.filter((e) => e.jira_ticket !== doc.metadata.jiraTicket),
|
|
115
|
+
...entries,
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
summary.replaced++;
|
|
119
|
+
console.log(chalk.green(` ✓ Auto-replaced with ${entries.length} entry(ies): ${entries.map((e) => e.id).join(', ')}`));
|
|
120
|
+
}
|
|
121
|
+
else if (conflict.hasConflict && !doc.metadata.jiraTicket) {
|
|
122
|
+
console.log(chalk.yellow(` ⚠ Cannot auto-replace: missing jiraTicket`));
|
|
123
|
+
summary.skipped++;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
manifest = { ...manifest, entries: [...manifest.entries, ...entries] };
|
|
127
|
+
summary.accepted += entries.length;
|
|
128
|
+
for (const entry of entries) {
|
|
129
|
+
console.log(chalk.green(` ✓ Auto-accepted: ${entry.id}`));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Interactive: review each entry. First entry gets conflict info;
|
|
135
|
+
// subsequent entries from the same doc are treated as new (the first
|
|
136
|
+
// entry's replace decision already removed old entries).
|
|
137
|
+
for (let i = 0; i < entries.length; i++) {
|
|
138
|
+
const entry = entries[i];
|
|
139
|
+
const entryConflict = i === 0 ? conflict : { hasConflict: false, existingEntries: [] };
|
|
140
|
+
const result = await reviewFlow.reviewEntry(entry, doc, entryConflict);
|
|
141
|
+
switch (result.decision) {
|
|
142
|
+
case 'accept':
|
|
143
|
+
manifest = { ...manifest, entries: [...manifest.entries, result.entry] };
|
|
144
|
+
summary.accepted++;
|
|
145
|
+
break;
|
|
146
|
+
case 'replace':
|
|
147
|
+
if (doc.metadata.jiraTicket) {
|
|
148
|
+
manifest = resolveConflict(manifest, result.entry, doc.metadata.jiraTicket, 'replace');
|
|
149
|
+
summary.replaced++;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log(chalk.yellow(' ⚠ Cannot replace: missing jiraTicket'));
|
|
153
|
+
summary.skipped++;
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
case 'add_separate':
|
|
157
|
+
if (doc.metadata.jiraTicket) {
|
|
158
|
+
manifest = resolveConflict(manifest, result.entry, doc.metadata.jiraTicket, 'add_separate');
|
|
159
|
+
summary.addedSeparate++;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(chalk.yellow(' ⚠ Cannot add separate: missing jiraTicket'));
|
|
163
|
+
summary.skipped++;
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case 'skip':
|
|
167
|
+
summary.skipped++;
|
|
168
|
+
break;
|
|
169
|
+
case 'edit':
|
|
170
|
+
// edit resolves to accept/replace/add_separate/skip in reviewEntry
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
spinner.fail(`Failed to process ${doc.filename}`);
|
|
178
|
+
logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
179
|
+
summary.failed++;
|
|
180
|
+
failedDocs.push(doc.filename);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Summary
|
|
184
|
+
const qaRegenerated = qaRecords.filter((r) => r.regenerated).length;
|
|
185
|
+
const qaSplit = qaRecords.filter((r) => r.split).length;
|
|
186
|
+
const qaHeuristicFixes = qaRecords.reduce((sum, r) => sum + r.heuristicFixes.length, 0);
|
|
187
|
+
const qaGood = qaRecords.filter((r) => r.finalQuality === 'good').length;
|
|
188
|
+
console.log('');
|
|
189
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
190
|
+
console.log(chalk.bold(' Log-Change Summary'));
|
|
191
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
192
|
+
console.log(` Scanned: ${summary.totalScanned}`);
|
|
193
|
+
console.log(` ${chalk.green('Accepted:')} ${summary.accepted}`);
|
|
194
|
+
console.log(` ${chalk.blue('Replaced:')} ${summary.replaced}`);
|
|
195
|
+
console.log(` ${chalk.blue('Added separate:')} ${summary.addedSeparate}`);
|
|
196
|
+
console.log(` ${chalk.yellow('Skipped:')} ${summary.skipped}`);
|
|
197
|
+
const failedColor = summary.failed > 0 ? chalk.red : chalk.gray;
|
|
198
|
+
console.log(` ${failedColor('Failed:')} ${summary.failed}`);
|
|
199
|
+
console.log('');
|
|
200
|
+
console.log(chalk.bold(' QA Pipeline'));
|
|
201
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
202
|
+
console.log(` Critiqued: ${qaRecords.length}`);
|
|
203
|
+
console.log(` ${chalk.green('Passed (good):')} ${qaGood}`);
|
|
204
|
+
console.log(` ${chalk.cyan('Regenerated:')} ${qaRegenerated}`);
|
|
205
|
+
console.log(` ${chalk.cyan('Split:')} ${qaSplit}`);
|
|
206
|
+
console.log(` ${chalk.cyan('Heuristic fixes:')} ${qaHeuristicFixes}`);
|
|
207
|
+
console.log('');
|
|
208
|
+
// Save if any changes
|
|
209
|
+
const totalChanges = summary.accepted + summary.replaced + summary.addedSeparate;
|
|
210
|
+
if (totalChanges > 0) {
|
|
211
|
+
spinner.start('Saving unreleased manifest...');
|
|
212
|
+
await saveManifest(unreleasedPath, manifest);
|
|
213
|
+
spinner.succeed(`Saved ${manifest.entries.length} entries to unreleased.yaml`);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
console.log(chalk.yellow('No changes to save.'));
|
|
217
|
+
}
|
|
218
|
+
// Hard-fail when any change document failed to produce a manifest
|
|
219
|
+
// entry. The caller (CI bash wrapper) treats this as a pipeline
|
|
220
|
+
// failure rather than letting tickets silently disappear from the
|
|
221
|
+
// manifest. Successful entries are still persisted above so the
|
|
222
|
+
// operator can inspect partial progress; a re-run after fixing
|
|
223
|
+
// the prompt or shape can pick them up via idempotence.
|
|
224
|
+
if (summary.failed > 0) {
|
|
225
|
+
console.log('');
|
|
226
|
+
console.log(chalk.red(`ERROR: ${summary.failed} change document(s) failed to produce a manifest entry:`));
|
|
227
|
+
for (const filename of failedDocs) {
|
|
228
|
+
console.log(chalk.red(` - ${filename}`));
|
|
229
|
+
}
|
|
230
|
+
console.log(chalk.red('See the per-doc error messages above for the underlying validation failures.'));
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
spinner.fail('log-change failed');
|
|
236
|
+
logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
237
|
+
process.exit(1);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
return command;
|
|
241
|
+
}
|
|
242
|
+
/* eslint-enable no-console */
|
|
243
|
+
//# sourceMappingURL=log-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-change.js","sourceRoot":"","sources":["../../src/commands/log-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Create the plan command for generating an upgrade plan.
|
|
4
|
+
*
|
|
5
|
+
* The plan command loads project discovery, matches upgrade manifests
|
|
6
|
+
* against the project, optionally runs AI analysis, and produces an
|
|
7
|
+
* ordered upgrade plan saved to disk.
|
|
8
|
+
*
|
|
9
|
+
* @returns Configured Commander command instance
|
|
10
|
+
*/
|
|
11
|
+
export declare function createPlanCommand(): Command;
|
|
12
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiEpC;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAiK3C"}
|