@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,29 @@
|
|
|
1
|
+
import type { AIClient } from '../ai/types.js';
|
|
2
|
+
import type { ManifestEntry } from '../planning/types.js';
|
|
3
|
+
import type { CritiqueResult } from './critique-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Builds a prompt instructing the AI to regenerate a manifest entry,
|
|
6
|
+
* incorporating the critique issues and original change document content.
|
|
7
|
+
*
|
|
8
|
+
* @param entry - The original manifest entry that needs regeneration
|
|
9
|
+
* @param changeDocContent - The original change document content
|
|
10
|
+
* @param critique - The critique result with issues and flags
|
|
11
|
+
* @returns A prompt string for the AI client
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildRegenerationPrompt(entry: ManifestEntry, changeDocContent: string, critique: CritiqueResult): string;
|
|
14
|
+
/**
|
|
15
|
+
* Uses an AI client to regenerate a manifest entry based on critique feedback.
|
|
16
|
+
* Handles both single-entry and split (array) responses, validates each result
|
|
17
|
+
* against the schema, and preserves the original jira_ticket.
|
|
18
|
+
*
|
|
19
|
+
* Falls back to returning the original entry if the AI response is unparseable
|
|
20
|
+
* or all generated entries fail validation.
|
|
21
|
+
*
|
|
22
|
+
* @param entry - The original manifest entry to regenerate
|
|
23
|
+
* @param changeDocContent - The original change document content
|
|
24
|
+
* @param critique - The critique result driving the regeneration
|
|
25
|
+
* @param aiClient - The AI client to use for generation
|
|
26
|
+
* @returns An array of validated ManifestEntry objects
|
|
27
|
+
*/
|
|
28
|
+
export declare function regenerateEntry(entry: ManifestEntry, changeDocContent: string, critique: CritiqueResult, aiClient: AIClient): Promise<ManifestEntry[]>;
|
|
29
|
+
//# sourceMappingURL=entry-regeneration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-regeneration.d.ts","sourceRoot":"","sources":["../../src/capture/entry-regeneration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAqER;AA8BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAwD1B"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { validateManifestEntry } from './entry-validator.js';
|
|
2
|
+
import { coerceArrayFields } from './entry-generator.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a prompt instructing the AI to regenerate a manifest entry,
|
|
5
|
+
* incorporating the critique issues and original change document content.
|
|
6
|
+
*
|
|
7
|
+
* @param entry - The original manifest entry that needs regeneration
|
|
8
|
+
* @param changeDocContent - The original change document content
|
|
9
|
+
* @param critique - The critique result with issues and flags
|
|
10
|
+
* @returns A prompt string for the AI client
|
|
11
|
+
*/
|
|
12
|
+
export function buildRegenerationPrompt(entry, changeDocContent, critique) {
|
|
13
|
+
const entryJson = JSON.stringify(entry, null, 2);
|
|
14
|
+
const issueLines = critique.issues
|
|
15
|
+
.map((issue, i) => {
|
|
16
|
+
return `${i + 1}. [${issue.severity.toUpperCase()}] ${issue.category}: ${issue.description}\n Suggestion: ${issue.suggestion}`;
|
|
17
|
+
})
|
|
18
|
+
.join('\n');
|
|
19
|
+
let outputInstructions;
|
|
20
|
+
if (critique.shouldSplit) {
|
|
21
|
+
const splitHint = critique.suggestedSplits && critique.suggestedSplits.length > 0
|
|
22
|
+
? `\n\nSuggested splits:\n${critique.suggestedSplits.map((s, i) => `${i + 1}. ${s}`).join('\n')}`
|
|
23
|
+
: '';
|
|
24
|
+
outputInstructions = `## Output Instructions
|
|
25
|
+
|
|
26
|
+
The critique identified that this entry should be split into multiple focused entries.
|
|
27
|
+
Return a JSON array (e.g. \`[]\`) of ManifestEntry objects — one per concern.${splitHint}
|
|
28
|
+
|
|
29
|
+
Each entry in the array must be a complete, valid ManifestEntry object.`;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
outputInstructions = `## Output Instructions
|
|
33
|
+
|
|
34
|
+
Return a single valid ManifestEntry JSON object (not an array) that addresses all the critique issues above.`;
|
|
35
|
+
}
|
|
36
|
+
const informationalInstruction = critique.shouldBeInformational
|
|
37
|
+
? `\n\n## Informational Flag\n\nThis entry should be classified as informational: set \`"informational": true\` and include a concise \`"changelog_summary"\` field (one-line summary for the Platform Changes Summary).`
|
|
38
|
+
: '';
|
|
39
|
+
return `You are a software upgrade automation expert. Regenerate the following manifest entry to fix the quality issues identified by the critique.
|
|
40
|
+
|
|
41
|
+
## Original Entry
|
|
42
|
+
\`\`\`json
|
|
43
|
+
${entryJson}
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
## Original Change Document
|
|
47
|
+
${changeDocContent}
|
|
48
|
+
|
|
49
|
+
## Critique Issues
|
|
50
|
+
${issueLines || 'No specific issues listed — improve overall quality.'}
|
|
51
|
+
${informationalInstruction}
|
|
52
|
+
|
|
53
|
+
## ManifestEntry Schema Reference
|
|
54
|
+
|
|
55
|
+
- **id** (required): Lowercase kebab-case identifier, e.g. "cms-18384-jakarta-migration"
|
|
56
|
+
- **description** (required): Human-readable description of the change
|
|
57
|
+
- **type** (required): One of: namespace_migration, dependency_migration, maven_update, configuration_migration, api_migration, security_configuration, repository_migration, frontend_migration
|
|
58
|
+
- **automatable** (required): One of: "true" (fully automatable with patterns), "partial" (AI-assisted), "false" (manual only)
|
|
59
|
+
- **jira_ticket**: JIRA ticket reference (e.g. "CMS-18384")
|
|
60
|
+
|
|
61
|
+
When automatable is "true":
|
|
62
|
+
- **patterns** (required): Array of { match, replace } objects for find/replace
|
|
63
|
+
- **file_globs** (required): Array of glob patterns for files to transform
|
|
64
|
+
|
|
65
|
+
When automatable is "partial":
|
|
66
|
+
- **detection_patterns** (required): Array of string patterns to detect if change applies
|
|
67
|
+
- **ai_guidance** (required): Guidance text for AI-assisted migration
|
|
68
|
+
|
|
69
|
+
When automatable is "false":
|
|
70
|
+
- **manual_steps** (required): Array of step-by-step instructions
|
|
71
|
+
|
|
72
|
+
Optional fields: doc_search_keywords, documentation_url, changelog_entry, depends_on, risk_level, informational, changelog_summary
|
|
73
|
+
|
|
74
|
+
${outputInstructions}
|
|
75
|
+
|
|
76
|
+
Respond with ONLY the JSON (object or array as instructed), no explanation or markdown fences.`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extracts JSON from AI response text, stripping optional markdown code fences.
|
|
80
|
+
*
|
|
81
|
+
* @param text - Raw AI response text
|
|
82
|
+
* @returns Cleaned JSON string
|
|
83
|
+
*/
|
|
84
|
+
function extractJson(text) {
|
|
85
|
+
const fenceMatch = /^\s*```(?:json)?\s*\n([\s\S]*?)\n\s*```\s*$/.exec(text);
|
|
86
|
+
if (fenceMatch?.[1]) {
|
|
87
|
+
return fenceMatch[1].trim();
|
|
88
|
+
}
|
|
89
|
+
return text.trim();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Sanitizes an entry id to conform to the schema pattern ^[a-z0-9-]+$.
|
|
93
|
+
*
|
|
94
|
+
* @param id - Raw id string from AI response
|
|
95
|
+
* @returns Sanitized lowercase kebab-case id
|
|
96
|
+
*/
|
|
97
|
+
function sanitizeId(id) {
|
|
98
|
+
return id
|
|
99
|
+
.toLowerCase()
|
|
100
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
101
|
+
.replace(/-{2,}/g, '-')
|
|
102
|
+
.replace(/^-|-$/g, '');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Uses an AI client to regenerate a manifest entry based on critique feedback.
|
|
106
|
+
* Handles both single-entry and split (array) responses, validates each result
|
|
107
|
+
* against the schema, and preserves the original jira_ticket.
|
|
108
|
+
*
|
|
109
|
+
* Falls back to returning the original entry if the AI response is unparseable
|
|
110
|
+
* or all generated entries fail validation.
|
|
111
|
+
*
|
|
112
|
+
* @param entry - The original manifest entry to regenerate
|
|
113
|
+
* @param changeDocContent - The original change document content
|
|
114
|
+
* @param critique - The critique result driving the regeneration
|
|
115
|
+
* @param aiClient - The AI client to use for generation
|
|
116
|
+
* @returns An array of validated ManifestEntry objects
|
|
117
|
+
*/
|
|
118
|
+
export async function regenerateEntry(entry, changeDocContent, critique, aiClient) {
|
|
119
|
+
const prompt = buildRegenerationPrompt(entry, changeDocContent, critique);
|
|
120
|
+
const result = await aiClient.generate(prompt, {
|
|
121
|
+
maxTokens: 4096,
|
|
122
|
+
temperature: 0.3,
|
|
123
|
+
});
|
|
124
|
+
const jsonText = extractJson(result.text);
|
|
125
|
+
let parsed;
|
|
126
|
+
try {
|
|
127
|
+
parsed = JSON.parse(jsonText);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Unparseable AI response — fall back to original entry
|
|
131
|
+
return [entry];
|
|
132
|
+
}
|
|
133
|
+
// Normalise to array regardless of whether AI returned one object or many
|
|
134
|
+
const candidates = Array.isArray(parsed) ? parsed : [parsed];
|
|
135
|
+
const validated = [];
|
|
136
|
+
for (const candidate of candidates) {
|
|
137
|
+
if (candidate === null || typeof candidate !== 'object') {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const record = candidate;
|
|
141
|
+
// Sanitize id
|
|
142
|
+
if (typeof record.id === 'string') {
|
|
143
|
+
record.id = sanitizeId(record.id);
|
|
144
|
+
}
|
|
145
|
+
// Always preserve jira_ticket from original entry
|
|
146
|
+
if (entry.jira_ticket) {
|
|
147
|
+
record.jira_ticket = entry.jira_ticket;
|
|
148
|
+
}
|
|
149
|
+
coerceArrayFields(record);
|
|
150
|
+
try {
|
|
151
|
+
validateManifestEntry(record);
|
|
152
|
+
validated.push(record);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Entry failed schema validation — skip it
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// If nothing validated, return the original entry unchanged
|
|
159
|
+
if (validated.length === 0) {
|
|
160
|
+
return [entry];
|
|
161
|
+
}
|
|
162
|
+
return validated;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=entry-regeneration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-regeneration.js","sourceRoot":"","sources":["../../src/capture/entry-regeneration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAoB,EACpB,gBAAwB,EACxB,QAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM;SAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAChB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,WAAW,oBAAoB,KAAK,CAAC,UAAU,EAAE,CAAC;IACnI,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,IAAI,kBAA0B,CAAC;IAC/B,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/E,CAAC,CAAC,0BAA0B,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACjG,CAAC,CAAC,EAAE,CAAC;QAEP,kBAAkB,GAAG;;;+EAGsD,SAAS;;wEAEhB,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,kBAAkB,GAAG;;6GAEoF,CAAC;IAC5G,CAAC;IAED,MAAM,wBAAwB,GAAG,QAAQ,CAAC,qBAAqB;QAC7D,CAAC,CAAC,uNAAuN;QACzN,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;EAIP,SAAS;;;;EAIT,gBAAgB;;;EAGhB,UAAU,IAAI,sDAAsD;EACpE,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;EAuBxB,kBAAkB;;+FAE2E,CAAC;AAChG,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,UAAU,GAAG,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,EAAU;IAC5B,OAAO,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAoB,EACpB,gBAAwB,EACxB,QAAwB,EACxB,QAAkB;IAElB,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC7C,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,GAAG;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAAc,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAExE,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,SAAoC,CAAC;QAEpD,cAAc;QACd,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,kDAAkD;QAClD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACzC,CAAC;QAED,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,CAAC;YACH,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,MAAuB,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ManifestEntry } from '../planning/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates that a value is a valid ManifestEntry according to the JSON schema.
|
|
4
|
+
* Throws an Error with details if validation fails.
|
|
5
|
+
*
|
|
6
|
+
* @param entry - The value to validate
|
|
7
|
+
* @throws Error if the entry does not match the ManifestEntry schema
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateManifestEntry(entry: unknown): asserts entry is ManifestEntry;
|
|
10
|
+
/**
|
|
11
|
+
* Returns an array of validation error messages for a ManifestEntry candidate.
|
|
12
|
+
* Returns an empty array if the entry is valid.
|
|
13
|
+
*
|
|
14
|
+
* @param entry - The value to validate
|
|
15
|
+
* @returns Array of human-readable error strings
|
|
16
|
+
*/
|
|
17
|
+
export declare function getEntryValidationErrors(entry: unknown): string[];
|
|
18
|
+
//# sourceMappingURL=entry-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-validator.d.ts","sourceRoot":"","sources":["../../src/capture/entry-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiB1D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAQpF;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CASjE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import AjvModule from 'ajv';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
const Ajv = AjvModule.default ?? AjvModule;
|
|
4
|
+
const esmRequire = createRequire(import.meta.url);
|
|
5
|
+
const manifestSchema = esmRequire('../manifests/schema.json');
|
|
6
|
+
// Build a standalone entry schema from the definitions
|
|
7
|
+
const entrySchema = {
|
|
8
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
9
|
+
...manifestSchema['definitions']['ManifestEntry'],
|
|
10
|
+
definitions: manifestSchema['definitions'],
|
|
11
|
+
};
|
|
12
|
+
const ajv = new Ajv({ allErrors: true, verbose: true });
|
|
13
|
+
const validate = ajv.compile(entrySchema);
|
|
14
|
+
/**
|
|
15
|
+
* Validates that a value is a valid ManifestEntry according to the JSON schema.
|
|
16
|
+
* Throws an Error with details if validation fails.
|
|
17
|
+
*
|
|
18
|
+
* @param entry - The value to validate
|
|
19
|
+
* @throws Error if the entry does not match the ManifestEntry schema
|
|
20
|
+
*/
|
|
21
|
+
export function validateManifestEntry(entry) {
|
|
22
|
+
const valid = validate(entry);
|
|
23
|
+
if (!valid) {
|
|
24
|
+
const errors = validate.errors
|
|
25
|
+
?.map((e) => `${e.instancePath || 'entry'} ${e.message ?? 'validation failed'}`)
|
|
26
|
+
.join('; ');
|
|
27
|
+
throw new Error(`Invalid manifest entry: ${errors}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns an array of validation error messages for a ManifestEntry candidate.
|
|
32
|
+
* Returns an empty array if the entry is valid.
|
|
33
|
+
*
|
|
34
|
+
* @param entry - The value to validate
|
|
35
|
+
* @returns Array of human-readable error strings
|
|
36
|
+
*/
|
|
37
|
+
export function getEntryValidationErrors(entry) {
|
|
38
|
+
validate(entry);
|
|
39
|
+
if (!validate.errors) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
return validate.errors.map((e) => {
|
|
43
|
+
const path = e.instancePath || 'entry';
|
|
44
|
+
return `${path}: ${e.message ?? 'validation failed'}`;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=entry-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-validator.js","sourceRoot":"","sources":["../../src/capture/entry-validator.ts"],"names":[],"mappings":"AAAA,OAAO,SAAsD,MAAM,KAAK,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC;AAE3C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,UAAU,CAAC,0BAA0B,CAA4B,CAAC;AAEzF,uDAAuD;AACvD,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,yCAAyC;IAClD,GAAI,cAAc,CAAC,aAAa,CAA6B,CAAC,eAAe,CAA4B;IACzG,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC;CAC3C,CAAC;AAEF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAoC,GAAG,CAAC,OAAO,CAAgB,WAAW,CAAC,CAAC;AAE1F;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;YAC5B,EAAE,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;aAC5F,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC;QACvC,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ManifestEntry } from '../planning/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Result of a single heuristic check applied to a manifest entry.
|
|
4
|
+
*/
|
|
5
|
+
export interface HeuristicFix {
|
|
6
|
+
/** Identifier for the check that fired (e.g. 'binary_file_globs') */
|
|
7
|
+
check: string;
|
|
8
|
+
/** Human-readable description of what was found and (if auto-fixed) what changed */
|
|
9
|
+
description: string;
|
|
10
|
+
/** Whether the entry was mutated in place to resolve the issue */
|
|
11
|
+
autoFixed: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Applies a set of fast, non-AI heuristic checks to a manifest entry.
|
|
15
|
+
* The entry is mutated in place when an auto-fix is applied.
|
|
16
|
+
*
|
|
17
|
+
* Checks performed:
|
|
18
|
+
* 1. Binary file globs — removed automatically
|
|
19
|
+
* 2. Catch-all globs mixed with specific globs — catch-alls removed automatically
|
|
20
|
+
* 3. Short detection patterns (< 4 chars) when longer ones exist — removed automatically
|
|
21
|
+
* 4. Invalid regex in /pattern/ wrapped detection_patterns — flagged, not fixed
|
|
22
|
+
* 5. Missing isRegex on TransformPatterns with regex metacharacters — flagged, not fixed
|
|
23
|
+
* 6. Missing changelog_summary when informational is true — derived automatically
|
|
24
|
+
* 7. Invalid informational_category enum value — removed automatically
|
|
25
|
+
*
|
|
26
|
+
* @param entry - The manifest entry to check and potentially mutate
|
|
27
|
+
* @returns Array of HeuristicFix records describing every issue found
|
|
28
|
+
*/
|
|
29
|
+
export declare function applyHeuristicFixes(entry: ManifestEntry): HeuristicFix[];
|
|
30
|
+
//# sourceMappingURL=heuristics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristics.d.ts","sourceRoot":"","sources":["../../src/capture/heuristics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,OAAO,CAAC;CACpB;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAYxE"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary file extensions whose globs should never appear in file_globs because
|
|
3
|
+
* automated text-transform patterns cannot act on binary content.
|
|
4
|
+
*/
|
|
5
|
+
const BINARY_EXTENSIONS = new Set([
|
|
6
|
+
'jpg', 'jpeg', 'png', 'gif', 'bmp', 'ico', 'svg',
|
|
7
|
+
'jar', 'class', 'war', 'ear',
|
|
8
|
+
'zip', 'gz', 'tar',
|
|
9
|
+
'pdf', 'doc', 'docx', 'xls', 'xlsx',
|
|
10
|
+
]);
|
|
11
|
+
/**
|
|
12
|
+
* Glob patterns that match any file of a given extension — treated as catch-alls.
|
|
13
|
+
* A lone catch-all is acceptable; one mixed with specific globs is not.
|
|
14
|
+
*/
|
|
15
|
+
const CATCH_ALL_GLOB_PATTERN = /^\*\*\/\*\.[a-zA-Z0-9]+$/;
|
|
16
|
+
/**
|
|
17
|
+
* Regex metacharacter sequences that indicate a `match` string is likely intended
|
|
18
|
+
* as a regex but may be missing `isRegex: true`.
|
|
19
|
+
*/
|
|
20
|
+
const REGEX_META_SEQUENCES = [
|
|
21
|
+
'\\s', '\\d', '\\w', '\\b',
|
|
22
|
+
'.*',
|
|
23
|
+
'[^',
|
|
24
|
+
'\\+', '\\{', '\\}',
|
|
25
|
+
'(?', '(?:', '(?=', '(?!',
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Applies a set of fast, non-AI heuristic checks to a manifest entry.
|
|
29
|
+
* The entry is mutated in place when an auto-fix is applied.
|
|
30
|
+
*
|
|
31
|
+
* Checks performed:
|
|
32
|
+
* 1. Binary file globs — removed automatically
|
|
33
|
+
* 2. Catch-all globs mixed with specific globs — catch-alls removed automatically
|
|
34
|
+
* 3. Short detection patterns (< 4 chars) when longer ones exist — removed automatically
|
|
35
|
+
* 4. Invalid regex in /pattern/ wrapped detection_patterns — flagged, not fixed
|
|
36
|
+
* 5. Missing isRegex on TransformPatterns with regex metacharacters — flagged, not fixed
|
|
37
|
+
* 6. Missing changelog_summary when informational is true — derived automatically
|
|
38
|
+
* 7. Invalid informational_category enum value — removed automatically
|
|
39
|
+
*
|
|
40
|
+
* @param entry - The manifest entry to check and potentially mutate
|
|
41
|
+
* @returns Array of HeuristicFix records describing every issue found
|
|
42
|
+
*/
|
|
43
|
+
export function applyHeuristicFixes(entry) {
|
|
44
|
+
const fixes = [];
|
|
45
|
+
fixes.push(...checkBinaryFileGlobs(entry));
|
|
46
|
+
fixes.push(...checkCatchAllGlobs(entry));
|
|
47
|
+
fixes.push(...checkShortDetectionPatterns(entry));
|
|
48
|
+
fixes.push(...checkInvalidRegexPatterns(entry));
|
|
49
|
+
fixes.push(...checkMissingIsRegex(entry));
|
|
50
|
+
fixes.push(...checkMissingChangelogSummary(entry));
|
|
51
|
+
fixes.push(...checkInvalidInformationalCategory(entry));
|
|
52
|
+
return fixes;
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Check 1 – Binary file globs
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
function checkBinaryFileGlobs(entry) {
|
|
58
|
+
if (!entry.file_globs || entry.file_globs.length === 0)
|
|
59
|
+
return [];
|
|
60
|
+
const removed = [];
|
|
61
|
+
const filtered = entry.file_globs.filter(glob => {
|
|
62
|
+
const ext = extractExtension(glob);
|
|
63
|
+
if (ext !== null && BINARY_EXTENSIONS.has(ext)) {
|
|
64
|
+
removed.push(glob);
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
});
|
|
69
|
+
if (removed.length === 0)
|
|
70
|
+
return [];
|
|
71
|
+
// Don't leave file_globs empty — warn instead of removing when all globs are binary
|
|
72
|
+
if (filtered.length === 0) {
|
|
73
|
+
return [{
|
|
74
|
+
check: 'binary_file_globs',
|
|
75
|
+
description: `All file globs are binary (${removed.join(', ')}) — kept unchanged to avoid empty file_globs`,
|
|
76
|
+
autoFixed: false,
|
|
77
|
+
}];
|
|
78
|
+
}
|
|
79
|
+
entry.file_globs = filtered;
|
|
80
|
+
return [{
|
|
81
|
+
check: 'binary_file_globs',
|
|
82
|
+
description: `Removed ${removed.length} binary file glob(s): ${removed.join(', ')}`,
|
|
83
|
+
autoFixed: true,
|
|
84
|
+
}];
|
|
85
|
+
}
|
|
86
|
+
/** Extracts the lowercase extension from a glob like **\/*.jpg → 'jpg', or null. */
|
|
87
|
+
function extractExtension(glob) {
|
|
88
|
+
const match = /\.([a-zA-Z0-9]+)$/.exec(glob);
|
|
89
|
+
return match ? match[1].toLowerCase() : null;
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// Check 2 – Catch-all globs
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
function checkCatchAllGlobs(entry) {
|
|
95
|
+
if (!entry.file_globs || entry.file_globs.length === 0)
|
|
96
|
+
return [];
|
|
97
|
+
const catchAlls = entry.file_globs.filter(g => CATCH_ALL_GLOB_PATTERN.test(g));
|
|
98
|
+
const specifics = entry.file_globs.filter(g => !CATCH_ALL_GLOB_PATTERN.test(g));
|
|
99
|
+
// Only act when there is a mix of specific and catch-all globs
|
|
100
|
+
if (catchAlls.length === 0 || specifics.length === 0)
|
|
101
|
+
return [];
|
|
102
|
+
entry.file_globs = specifics;
|
|
103
|
+
return [{
|
|
104
|
+
check: 'catch_all_globs',
|
|
105
|
+
description: `Removed ${catchAlls.length} catch-all glob(s) (${catchAlls.join(', ')}) because specific globs are present`,
|
|
106
|
+
autoFixed: true,
|
|
107
|
+
}];
|
|
108
|
+
}
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Check 3 – Short detection patterns
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
function checkShortDetectionPatterns(entry) {
|
|
113
|
+
if (!entry.detection_patterns || entry.detection_patterns.length === 0)
|
|
114
|
+
return [];
|
|
115
|
+
const SHORT_MIN_LENGTH = 4;
|
|
116
|
+
const short = entry.detection_patterns.filter(p => p.length < SHORT_MIN_LENGTH);
|
|
117
|
+
const longer = entry.detection_patterns.filter(p => p.length >= SHORT_MIN_LENGTH);
|
|
118
|
+
// Only remove if there are longer patterns to fall back on
|
|
119
|
+
if (short.length === 0 || longer.length === 0)
|
|
120
|
+
return [];
|
|
121
|
+
entry.detection_patterns = longer;
|
|
122
|
+
return [{
|
|
123
|
+
check: 'short_detection_patterns',
|
|
124
|
+
description: `Removed ${short.length} detection pattern(s) shorter than ${SHORT_MIN_LENGTH} chars: ${short.map(p => JSON.stringify(p)).join(', ')}`,
|
|
125
|
+
autoFixed: true,
|
|
126
|
+
}];
|
|
127
|
+
}
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// Check 4 – Invalid regex in /pattern/ wrapped detection_patterns
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
function checkInvalidRegexPatterns(entry) {
|
|
132
|
+
if (!entry.detection_patterns || entry.detection_patterns.length === 0)
|
|
133
|
+
return [];
|
|
134
|
+
const fixes = [];
|
|
135
|
+
for (const pattern of entry.detection_patterns) {
|
|
136
|
+
// Only inspect patterns explicitly wrapped as /regex/
|
|
137
|
+
if (!pattern.startsWith('/') || !pattern.endsWith('/') || pattern.length < 3)
|
|
138
|
+
continue;
|
|
139
|
+
const inner = pattern.slice(1, -1);
|
|
140
|
+
try {
|
|
141
|
+
new RegExp(inner);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
fixes.push({
|
|
145
|
+
check: 'invalid_regex_pattern',
|
|
146
|
+
description: `Detection pattern ${JSON.stringify(pattern)} is wrapped as a regex but is not valid: ${inner}`,
|
|
147
|
+
autoFixed: false,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return fixes;
|
|
152
|
+
}
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Check 5 – Missing isRegex on TransformPatterns
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
function checkMissingIsRegex(entry) {
|
|
157
|
+
if (!entry.patterns || entry.patterns.length === 0)
|
|
158
|
+
return [];
|
|
159
|
+
const fixes = [];
|
|
160
|
+
for (const pattern of entry.patterns) {
|
|
161
|
+
if (pattern.isRegex !== undefined)
|
|
162
|
+
continue;
|
|
163
|
+
const looksLikeRegex = REGEX_META_SEQUENCES.some(seq => pattern.match.includes(seq));
|
|
164
|
+
if (looksLikeRegex) {
|
|
165
|
+
fixes.push({
|
|
166
|
+
check: 'missing_is_regex',
|
|
167
|
+
description: `TransformPattern match ${JSON.stringify(pattern.match)} contains regex metacharacters but isRegex is not set`,
|
|
168
|
+
autoFixed: false,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return fixes;
|
|
173
|
+
}
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Check 6 – Missing changelog_summary when informational is true
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
/**
|
|
178
|
+
* The JSON schema requires changelog_summary when informational is true.
|
|
179
|
+
* If the AI omitted it, derive one from changelog_entry or description
|
|
180
|
+
* (truncated to a single sentence).
|
|
181
|
+
*/
|
|
182
|
+
function checkMissingChangelogSummary(entry) {
|
|
183
|
+
if (!entry.informational || entry.changelog_summary)
|
|
184
|
+
return [];
|
|
185
|
+
const source = entry.changelog_entry ?? entry.description;
|
|
186
|
+
// Take the first sentence (up to first period followed by space or end)
|
|
187
|
+
const firstSentence = source.replace(/\.\s[\s\S]*$/, '').trim();
|
|
188
|
+
// Cap at 200 chars
|
|
189
|
+
entry.changelog_summary = firstSentence.length > 200
|
|
190
|
+
? firstSentence.slice(0, 197) + '...'
|
|
191
|
+
: firstSentence;
|
|
192
|
+
return [{
|
|
193
|
+
check: 'missing_changelog_summary',
|
|
194
|
+
description: `Derived changelog_summary from ${entry.changelog_entry ? 'changelog_entry' : 'description'} (required when informational is true)`,
|
|
195
|
+
autoFixed: true,
|
|
196
|
+
}];
|
|
197
|
+
}
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
// Check 7 – Invalid informational_category enum value
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
const VALID_INFORMATIONAL_CATEGORIES = new Set([
|
|
202
|
+
'security', 'performance', 'ui_ux', 'internal_cleanup', 'configuration',
|
|
203
|
+
]);
|
|
204
|
+
/**
|
|
205
|
+
* The schema restricts informational_category to a fixed enum. The AI
|
|
206
|
+
* sometimes invents values like "api_change" or "new_feature". Since
|
|
207
|
+
* the field is optional (falls back to a mapping from entry type),
|
|
208
|
+
* removing invalid values is safe.
|
|
209
|
+
*/
|
|
210
|
+
function checkInvalidInformationalCategory(entry) {
|
|
211
|
+
if (!entry.informational_category)
|
|
212
|
+
return [];
|
|
213
|
+
if (VALID_INFORMATIONAL_CATEGORIES.has(entry.informational_category))
|
|
214
|
+
return [];
|
|
215
|
+
const removed = entry.informational_category;
|
|
216
|
+
delete entry.informational_category;
|
|
217
|
+
return [{
|
|
218
|
+
check: 'invalid_informational_category',
|
|
219
|
+
description: `Removed invalid informational_category "${removed}" (allowed: ${[...VALID_INFORMATIONAL_CATEGORIES].join(', ')})`,
|
|
220
|
+
autoFixed: true,
|
|
221
|
+
}];
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=heuristics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../../src/capture/heuristics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { ChangeDocMetadata, AIContextTags, ChangeDocument, ConflictCheckResult, ReviewDecision, ReviewResult, LogChangeSummary, LogChangeOptions, FinalizeOptions, } from './types.js';
|
|
2
|
+
export { scanChangeDocuments, parseChangeDocument, extractMetadata, extractContextTags, } from './change-scanner.js';
|
|
3
|
+
export { checkConflict, resolveConflict, } from './conflict-resolver.js';
|
|
4
|
+
export { generateManifestEntry, buildEntryPrompt, } from './entry-generator.js';
|
|
5
|
+
export { validateManifestEntry, getEntryValidationErrors, } from './entry-validator.js';
|
|
6
|
+
export { ReviewFlow } from './review-flow.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Change scanning
|
|
2
|
+
export { scanChangeDocuments, parseChangeDocument, extractMetadata, extractContextTags, } from './change-scanner.js';
|
|
3
|
+
// Conflict resolution
|
|
4
|
+
export { checkConflict, resolveConflict, } from './conflict-resolver.js';
|
|
5
|
+
// Entry generation
|
|
6
|
+
export { generateManifestEntry, buildEntryPrompt, } from './entry-generator.js';
|
|
7
|
+
// Entry validation
|
|
8
|
+
export { validateManifestEntry, getEntryValidationErrors, } from './entry-validator.js';
|
|
9
|
+
// Review flow
|
|
10
|
+
export { ReviewFlow } from './review-flow.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AAaA,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,sBAAsB;AACtB,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,mBAAmB;AACnB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { QARecord } from './critique-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a markdown quality report for the QA pipeline run against a single
|
|
4
|
+
* manifest version.
|
|
5
|
+
*
|
|
6
|
+
* Sections produced (conditional sections are omitted when empty):
|
|
7
|
+
* 1. Header with version and date
|
|
8
|
+
* 2. Summary table with key metrics
|
|
9
|
+
* 3. Informational Reclassifications (if any)
|
|
10
|
+
* 4. Entries Regenerated (if any), with full critique issue details
|
|
11
|
+
* 5. Warnings (needs_improvement entries not regenerated, if any)
|
|
12
|
+
* 6. Heuristic Fixes (if any)
|
|
13
|
+
*
|
|
14
|
+
* @param version - The manifest version string (e.g. "16.7.0")
|
|
15
|
+
* @param records - All QARecord objects produced by the pipeline
|
|
16
|
+
* @returns A markdown-formatted quality report string
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateQualityReport(version: string, records: QARecord[]): string;
|
|
19
|
+
//# sourceMappingURL=quality-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-report.d.ts","sourceRoot":"","sources":["../../src/capture/quality-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,qBAAqB,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CA8BlF"}
|