@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,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a markdown quality report for the QA pipeline run against a single
|
|
3
|
+
* manifest version.
|
|
4
|
+
*
|
|
5
|
+
* Sections produced (conditional sections are omitted when empty):
|
|
6
|
+
* 1. Header with version and date
|
|
7
|
+
* 2. Summary table with key metrics
|
|
8
|
+
* 3. Informational Reclassifications (if any)
|
|
9
|
+
* 4. Entries Regenerated (if any), with full critique issue details
|
|
10
|
+
* 5. Warnings (needs_improvement entries not regenerated, if any)
|
|
11
|
+
* 6. Heuristic Fixes (if any)
|
|
12
|
+
*
|
|
13
|
+
* @param version - The manifest version string (e.g. "16.7.0")
|
|
14
|
+
* @param records - All QARecord objects produced by the pipeline
|
|
15
|
+
* @returns A markdown-formatted quality report string
|
|
16
|
+
*/
|
|
17
|
+
export function generateQualityReport(version, records) {
|
|
18
|
+
const summary = computeSummary(records);
|
|
19
|
+
const sections = [];
|
|
20
|
+
sections.push(renderHeader(version));
|
|
21
|
+
sections.push(renderSummary(summary));
|
|
22
|
+
const informational = records.filter(r => r.critique.shouldBeInformational);
|
|
23
|
+
if (informational.length > 0) {
|
|
24
|
+
sections.push(renderInformationalSection(informational));
|
|
25
|
+
}
|
|
26
|
+
const regenerated = records.filter(r => r.regenerated);
|
|
27
|
+
if (regenerated.length > 0) {
|
|
28
|
+
sections.push(renderRegeneratedSection(regenerated));
|
|
29
|
+
}
|
|
30
|
+
const warnings = records.filter(r => r.finalQuality === 'needs_improvement' && !r.regenerated);
|
|
31
|
+
if (warnings.length > 0) {
|
|
32
|
+
sections.push(renderWarningsSection(warnings));
|
|
33
|
+
}
|
|
34
|
+
const withFixes = records.filter(r => r.heuristicFixes.length > 0);
|
|
35
|
+
if (withFixes.length > 0) {
|
|
36
|
+
sections.push(renderHeuristicFixesSection(withFixes));
|
|
37
|
+
}
|
|
38
|
+
return sections.join('\n\n') + '\n';
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Summary computation
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function computeSummary(records) {
|
|
44
|
+
const entriesProcessed = records.length;
|
|
45
|
+
const passed = records.filter(r => r.finalQuality === 'good' && !r.regenerated).length;
|
|
46
|
+
const improved = records.filter(r => r.finalQuality === 'needs_improvement' && !r.regenerated).length;
|
|
47
|
+
const regenerated = records.filter(r => r.regenerated).length;
|
|
48
|
+
const splitCount = records.filter(r => r.split).length;
|
|
49
|
+
// Final entry count: non-split entries count as 1 each; split entries count
|
|
50
|
+
// as their splitCount (falling back to 1 if not set).
|
|
51
|
+
const finalEntryCount = records.reduce((total, r) => {
|
|
52
|
+
if (r.split && r.splitCount !== undefined) {
|
|
53
|
+
return total + r.splitCount;
|
|
54
|
+
}
|
|
55
|
+
return total + 1;
|
|
56
|
+
}, 0);
|
|
57
|
+
const informationalReclassifications = records.filter(r => r.critique.shouldBeInformational).length;
|
|
58
|
+
return {
|
|
59
|
+
entriesProcessed,
|
|
60
|
+
passed,
|
|
61
|
+
improved,
|
|
62
|
+
regenerated,
|
|
63
|
+
splitCount,
|
|
64
|
+
finalEntryCount,
|
|
65
|
+
informationalReclassifications,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Section renderers
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
function renderHeader(version) {
|
|
72
|
+
const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
|
73
|
+
return `# Manifest Quality Report: ${version}\n\n_Generated on ${date}_`;
|
|
74
|
+
}
|
|
75
|
+
function renderSummary(summary) {
|
|
76
|
+
const rows = [
|
|
77
|
+
`| Entries processed | ${summary.entriesProcessed} |`,
|
|
78
|
+
`| Passed (good, no regeneration) | ${summary.passed} |`,
|
|
79
|
+
`| Warnings (needs improvement) | ${summary.improved} |`,
|
|
80
|
+
`| Regenerated | ${summary.regenerated} |`,
|
|
81
|
+
`| Split entries | ${summary.splitCount} |`,
|
|
82
|
+
`| Final entry count | ${summary.finalEntryCount} |`,
|
|
83
|
+
];
|
|
84
|
+
if (summary.informationalReclassifications > 0) {
|
|
85
|
+
rows.push(`| Informational reclassifications | ${summary.informationalReclassifications} |`);
|
|
86
|
+
}
|
|
87
|
+
const lines = [
|
|
88
|
+
'## Summary',
|
|
89
|
+
'',
|
|
90
|
+
'| Metric | Count |',
|
|
91
|
+
'|--------|-------|',
|
|
92
|
+
...rows,
|
|
93
|
+
];
|
|
94
|
+
return lines.join('\n');
|
|
95
|
+
}
|
|
96
|
+
function renderInformationalSection(records) {
|
|
97
|
+
const lines = ['## Informational Reclassifications', ''];
|
|
98
|
+
lines.push('The following entries were flagged as candidates for reclassification to the ' +
|
|
99
|
+
'`informational` type:');
|
|
100
|
+
lines.push('');
|
|
101
|
+
for (const r of records) {
|
|
102
|
+
lines.push(`- \`${r.entryId}\``);
|
|
103
|
+
}
|
|
104
|
+
return lines.join('\n');
|
|
105
|
+
}
|
|
106
|
+
function renderRegeneratedSection(records) {
|
|
107
|
+
const lines = ['## Entries Regenerated', ''];
|
|
108
|
+
for (const r of records) {
|
|
109
|
+
lines.push(`### \`${r.entryId}\``);
|
|
110
|
+
lines.push('');
|
|
111
|
+
if (r.critique.issues.length === 0) {
|
|
112
|
+
lines.push('_No issues recorded (critique data unavailable)._');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
for (const issue of r.critique.issues) {
|
|
116
|
+
lines.push(`- **[${issue.severity}] ${issue.category}**: ${issue.description}`);
|
|
117
|
+
lines.push(` - _Suggestion_: ${issue.suggestion}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
lines.push('');
|
|
121
|
+
}
|
|
122
|
+
// Remove trailing blank line from last entry
|
|
123
|
+
if (lines[lines.length - 1] === '') {
|
|
124
|
+
lines.pop();
|
|
125
|
+
}
|
|
126
|
+
return lines.join('\n');
|
|
127
|
+
}
|
|
128
|
+
function renderWarningsSection(records) {
|
|
129
|
+
const lines = ['## Warnings', ''];
|
|
130
|
+
lines.push('These entries have quality issues but were kept without regeneration:');
|
|
131
|
+
lines.push('');
|
|
132
|
+
for (const r of records) {
|
|
133
|
+
lines.push(`### \`${r.entryId}\``);
|
|
134
|
+
lines.push('');
|
|
135
|
+
for (const issue of r.critique.issues) {
|
|
136
|
+
lines.push(`- **[${issue.severity}] ${issue.category}**: ${issue.description}`);
|
|
137
|
+
lines.push(` - _Suggestion_: ${issue.suggestion}`);
|
|
138
|
+
}
|
|
139
|
+
lines.push('');
|
|
140
|
+
}
|
|
141
|
+
if (lines[lines.length - 1] === '') {
|
|
142
|
+
lines.pop();
|
|
143
|
+
}
|
|
144
|
+
return lines.join('\n');
|
|
145
|
+
}
|
|
146
|
+
function renderHeuristicFixesSection(records) {
|
|
147
|
+
const lines = ['## Heuristic Fixes Applied', ''];
|
|
148
|
+
for (const r of records) {
|
|
149
|
+
lines.push(`### \`${r.entryId}\``);
|
|
150
|
+
lines.push('');
|
|
151
|
+
for (const fix of r.heuristicFixes) {
|
|
152
|
+
lines.push(`- ${fix}`);
|
|
153
|
+
}
|
|
154
|
+
lines.push('');
|
|
155
|
+
}
|
|
156
|
+
if (lines[lines.length - 1] === '') {
|
|
157
|
+
lines.pop();
|
|
158
|
+
}
|
|
159
|
+
return lines.join('\n');
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=quality-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-report.js","sourceRoot":"","sources":["../../src/capture/quality-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ManifestEntry } from '../planning/types.js';
|
|
2
|
+
import type { ChangeDocument, ConflictCheckResult, ReviewResult } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Interactive review flow for manifest entries during change capture.
|
|
5
|
+
* Presents each generated entry to the user and collects their decision.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ReviewFlow {
|
|
8
|
+
/**
|
|
9
|
+
* Formats a ManifestEntry as a human-readable summary for terminal display.
|
|
10
|
+
*
|
|
11
|
+
* @param entry - The manifest entry to format
|
|
12
|
+
* @returns A multi-line string with color-coded field names
|
|
13
|
+
*/
|
|
14
|
+
formatEntrySummary(entry: ManifestEntry): string;
|
|
15
|
+
/**
|
|
16
|
+
* Presents a manifest entry for interactive review and collects the user's decision.
|
|
17
|
+
* Displays the entry summary, conflict information (if any), and prompts the user
|
|
18
|
+
* to accept, skip, edit, replace, or add as a separate entry.
|
|
19
|
+
*
|
|
20
|
+
* @param entry - The generated manifest entry to review
|
|
21
|
+
* @param doc - The source change document
|
|
22
|
+
* @param conflict - Result of conflict checking against existing entries
|
|
23
|
+
* @returns The user's review result including decision and (possibly edited) entry
|
|
24
|
+
*/
|
|
25
|
+
reviewEntry(entry: ManifestEntry, doc: ChangeDocument, conflict: ConflictCheckResult): Promise<ReviewResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Opens the entry in the user's $EDITOR for manual editing, validates the
|
|
28
|
+
* result against the ManifestEntry schema, and re-prompts on validation errors.
|
|
29
|
+
*
|
|
30
|
+
* @param entry - The original manifest entry to edit
|
|
31
|
+
* @param doc - The source change document
|
|
32
|
+
* @param conflict - Conflict check result for post-edit decision
|
|
33
|
+
* @returns The review result with the edited entry
|
|
34
|
+
*/
|
|
35
|
+
private handleEdit;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=review-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-flow.d.ts","sourceRoot":"","sources":["../../src/capture/review-flow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpG;;;GAGG;AACH,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IA0ChD;;;;;;;;;OASG;IACG,WAAW,CACf,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC;IAmExB;;;;;;;;OAQG;YACW,UAAU;CA0FzB"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
/**
|
|
6
|
+
* Interactive review flow for manifest entries during change capture.
|
|
7
|
+
* Presents each generated entry to the user and collects their decision.
|
|
8
|
+
*/
|
|
9
|
+
export class ReviewFlow {
|
|
10
|
+
/**
|
|
11
|
+
* Formats a ManifestEntry as a human-readable summary for terminal display.
|
|
12
|
+
*
|
|
13
|
+
* @param entry - The manifest entry to format
|
|
14
|
+
* @returns A multi-line string with color-coded field names
|
|
15
|
+
*/
|
|
16
|
+
formatEntrySummary(entry) {
|
|
17
|
+
const lines = [];
|
|
18
|
+
lines.push(` ${chalk.cyan('id')}: ${entry.id}`);
|
|
19
|
+
lines.push(` ${chalk.cyan('type')}: ${entry.type}`);
|
|
20
|
+
lines.push(` ${chalk.cyan('automatable')}: ${entry.automatable}`);
|
|
21
|
+
lines.push(` ${chalk.cyan('description')}: ${entry.description}`);
|
|
22
|
+
if (entry.jira_ticket) {
|
|
23
|
+
lines.push(` ${chalk.cyan('jira_ticket')}: ${entry.jira_ticket}`);
|
|
24
|
+
}
|
|
25
|
+
if (entry.patterns && entry.patterns.length > 0) {
|
|
26
|
+
lines.push(` ${chalk.cyan('patterns')}:`);
|
|
27
|
+
for (const p of entry.patterns) {
|
|
28
|
+
lines.push(` - match: "${p.match}"`);
|
|
29
|
+
lines.push(` replace: "${p.replace}"`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (entry.file_globs) {
|
|
33
|
+
lines.push(` ${chalk.cyan('file_globs')}: ${JSON.stringify(entry.file_globs)}`);
|
|
34
|
+
}
|
|
35
|
+
if (entry.detection_patterns) {
|
|
36
|
+
lines.push(` ${chalk.cyan('detection_patterns')}: ${JSON.stringify(entry.detection_patterns)}`);
|
|
37
|
+
}
|
|
38
|
+
if (entry.ai_guidance) {
|
|
39
|
+
lines.push(` ${chalk.cyan('ai_guidance')}: ${entry.ai_guidance}`);
|
|
40
|
+
}
|
|
41
|
+
if (entry.manual_steps) {
|
|
42
|
+
lines.push(` ${chalk.cyan('manual_steps')}:`);
|
|
43
|
+
for (const s of entry.manual_steps) {
|
|
44
|
+
lines.push(` - "${s}"`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (entry.changelog_entry) {
|
|
48
|
+
lines.push(` ${chalk.cyan('changelog_entry')}: ${entry.changelog_entry}`);
|
|
49
|
+
}
|
|
50
|
+
if (entry.risk_level !== undefined) {
|
|
51
|
+
lines.push(` ${chalk.cyan('risk_level')}: ${entry.risk_level}`);
|
|
52
|
+
}
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Presents a manifest entry for interactive review and collects the user's decision.
|
|
57
|
+
* Displays the entry summary, conflict information (if any), and prompts the user
|
|
58
|
+
* to accept, skip, edit, replace, or add as a separate entry.
|
|
59
|
+
*
|
|
60
|
+
* @param entry - The generated manifest entry to review
|
|
61
|
+
* @param doc - The source change document
|
|
62
|
+
* @param conflict - Result of conflict checking against existing entries
|
|
63
|
+
* @returns The user's review result including decision and (possibly edited) entry
|
|
64
|
+
*/
|
|
65
|
+
async reviewEntry(entry, doc, conflict) {
|
|
66
|
+
// eslint-disable-next-line no-console
|
|
67
|
+
console.log('');
|
|
68
|
+
// eslint-disable-next-line no-console
|
|
69
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
70
|
+
// eslint-disable-next-line no-console
|
|
71
|
+
console.log(chalk.bold(`Change doc: ${doc.filename}`));
|
|
72
|
+
if (doc.metadata.jiraTicket) {
|
|
73
|
+
// eslint-disable-next-line no-console
|
|
74
|
+
console.log(chalk.bold(`JIRA: ${doc.metadata.jiraTicket}`));
|
|
75
|
+
}
|
|
76
|
+
// eslint-disable-next-line no-console
|
|
77
|
+
console.log(chalk.bold('\u2501'.repeat(60)));
|
|
78
|
+
if (conflict.hasConflict) {
|
|
79
|
+
// eslint-disable-next-line no-console
|
|
80
|
+
console.log('');
|
|
81
|
+
// eslint-disable-next-line no-console
|
|
82
|
+
console.log(chalk.yellow(`\u26A0 JIRA ${doc.metadata.jiraTicket} already has ${conflict.existingEntries.length} entry(ies) in unreleased.yaml:`));
|
|
83
|
+
for (const existing of conflict.existingEntries) {
|
|
84
|
+
// eslint-disable-next-line no-console
|
|
85
|
+
console.log(chalk.dim(this.formatEntrySummary(existing)));
|
|
86
|
+
}
|
|
87
|
+
// eslint-disable-next-line no-console
|
|
88
|
+
console.log('');
|
|
89
|
+
}
|
|
90
|
+
// eslint-disable-next-line no-console
|
|
91
|
+
console.log(chalk.green('Suggested manifest entry:'));
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.log('');
|
|
94
|
+
// eslint-disable-next-line no-console
|
|
95
|
+
console.log(this.formatEntrySummary(entry));
|
|
96
|
+
// eslint-disable-next-line no-console
|
|
97
|
+
console.log('');
|
|
98
|
+
const choices = [];
|
|
99
|
+
if (conflict.hasConflict) {
|
|
100
|
+
choices.push({ name: 'Replace existing entry(ies)', value: 'replace' });
|
|
101
|
+
choices.push({ name: 'Add as separate entry', value: 'add_separate' });
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
choices.push({ name: 'Accept', value: 'accept' });
|
|
105
|
+
}
|
|
106
|
+
choices.push({ name: 'Edit in $EDITOR', value: 'edit' });
|
|
107
|
+
choices.push({ name: 'Skip', value: 'skip' });
|
|
108
|
+
const { decision } = await inquirer.prompt([
|
|
109
|
+
{
|
|
110
|
+
type: 'select',
|
|
111
|
+
name: 'decision',
|
|
112
|
+
message: 'What would you like to do?',
|
|
113
|
+
choices,
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
116
|
+
if (decision === 'edit') {
|
|
117
|
+
return this.handleEdit(entry, doc, conflict);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
entry,
|
|
121
|
+
decision,
|
|
122
|
+
sourceFile: doc.filename,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Opens the entry in the user's $EDITOR for manual editing, validates the
|
|
127
|
+
* result against the ManifestEntry schema, and re-prompts on validation errors.
|
|
128
|
+
*
|
|
129
|
+
* @param entry - The original manifest entry to edit
|
|
130
|
+
* @param doc - The source change document
|
|
131
|
+
* @param conflict - Conflict check result for post-edit decision
|
|
132
|
+
* @returns The review result with the edited entry
|
|
133
|
+
*/
|
|
134
|
+
async handleEdit(entry, doc, conflict) {
|
|
135
|
+
const { writeFile, readFile, unlink } = await import('node:fs/promises');
|
|
136
|
+
const { tmpdir } = await import('node:os');
|
|
137
|
+
const pathModule = await import('node:path');
|
|
138
|
+
const { spawnSync } = await import('node:child_process');
|
|
139
|
+
const { getEntryValidationErrors } = await import('./entry-validator.js');
|
|
140
|
+
const tmpPath = pathModule.join(tmpdir(), `brxm-entry-${randomUUID()}.yaml`);
|
|
141
|
+
const entryYaml = yaml.dump(entry, { lineWidth: 120, noRefs: true });
|
|
142
|
+
await writeFile(tmpPath, entryYaml, 'utf-8');
|
|
143
|
+
const editor = process.env['EDITOR'] ?? process.env['VISUAL'] ?? 'vi';
|
|
144
|
+
let editedEntry;
|
|
145
|
+
try {
|
|
146
|
+
while (!editedEntry) {
|
|
147
|
+
const editorResult = spawnSync(editor, [tmpPath], { stdio: 'inherit' });
|
|
148
|
+
if (editorResult.error || editorResult.status !== 0) {
|
|
149
|
+
// eslint-disable-next-line no-console
|
|
150
|
+
console.log(chalk.red(`\nFailed to launch editor (${editor}).`));
|
|
151
|
+
const { retry } = await inquirer.prompt([
|
|
152
|
+
{
|
|
153
|
+
type: 'confirm',
|
|
154
|
+
name: 'retry',
|
|
155
|
+
message: 'Try again?',
|
|
156
|
+
default: false,
|
|
157
|
+
},
|
|
158
|
+
]);
|
|
159
|
+
if (!retry) {
|
|
160
|
+
return { entry, decision: 'skip', sourceFile: doc.filename };
|
|
161
|
+
}
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const editedContent = await readFile(tmpPath, 'utf-8');
|
|
165
|
+
const parsed = yaml.load(editedContent);
|
|
166
|
+
const errors = getEntryValidationErrors(parsed);
|
|
167
|
+
if (errors.length > 0) {
|
|
168
|
+
// eslint-disable-next-line no-console
|
|
169
|
+
console.log(chalk.red('\nValidation errors:'));
|
|
170
|
+
for (const err of errors) {
|
|
171
|
+
// eslint-disable-next-line no-console
|
|
172
|
+
console.log(chalk.red(` - ${err}`));
|
|
173
|
+
}
|
|
174
|
+
const { retry } = await inquirer.prompt([
|
|
175
|
+
{
|
|
176
|
+
type: 'confirm',
|
|
177
|
+
name: 'retry',
|
|
178
|
+
message: 'Re-open editor to fix?',
|
|
179
|
+
default: true,
|
|
180
|
+
},
|
|
181
|
+
]);
|
|
182
|
+
if (!retry) {
|
|
183
|
+
return { entry, decision: 'skip', sourceFile: doc.filename };
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
editedEntry = parsed;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
await unlink(tmpPath).catch(() => { });
|
|
193
|
+
}
|
|
194
|
+
if (conflict.hasConflict) {
|
|
195
|
+
const { decision } = await inquirer.prompt([
|
|
196
|
+
{
|
|
197
|
+
type: 'select',
|
|
198
|
+
name: 'decision',
|
|
199
|
+
message: 'Edited entry ready. What would you like to do?',
|
|
200
|
+
choices: [
|
|
201
|
+
{ name: 'Replace existing entry(ies)', value: 'replace' },
|
|
202
|
+
{ name: 'Add as separate entry', value: 'add_separate' },
|
|
203
|
+
{ name: 'Skip', value: 'skip' },
|
|
204
|
+
],
|
|
205
|
+
},
|
|
206
|
+
]);
|
|
207
|
+
return { entry: editedEntry, decision, sourceFile: doc.filename };
|
|
208
|
+
}
|
|
209
|
+
return { entry: editedEntry, decision: 'accept', sourceFile: doc.filename };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=review-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-flow.js","sourceRoot":"","sources":["../../src/capture/review-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B;;;GAGG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,KAAoB;QACrC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAEnE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,WAAW,CACf,KAAoB,EACpB,GAAmB,EACnB,QAA6B;QAE7B,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC5B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,UAAU,gBAAgB,QAAQ,CAAC,eAAe,CAAC,MAAM,iCAAiC,CAAC,CAAC,CAAC;YAClJ,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAChD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,OAAO,GAAmD,EAAE,CAAC;QAEnE,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAE9C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA+B;YACvE;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,4BAA4B;gBACrC,OAAO;aACR;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACL,KAAK;YACL,QAAQ;YACR,UAAU,EAAE,GAAG,CAAC,QAAQ;SACzB,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,UAAU,CACtB,KAAoB,EACpB,GAAmB,EACnB,QAA6B;QAE7B,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACzE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACzD,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAErE,MAAM,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QAEtE,IAAI,WAAsC,CAAC;QAE3C,IAAI,CAAC;YACH,OAAO,CAAC,WAAW,EAAE,CAAC;gBACpB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxE,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACpD,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,MAAM,IAAI,CAAC,CAAC,CAAC;oBACjE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAqB;wBAC1D;4BACE,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,YAAY;4BACrB,OAAO,EAAE,KAAK;yBACf;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC/D,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEjD,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;oBAC/C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;wBACzB,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;oBACvC,CAAC;oBAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAqB;wBAC1D;4BACE,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,wBAAwB;4BACjC,OAAO,EAAE,IAAI;yBACd;qBACF,CAAC,CAAC;oBAEH,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC/D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,MAAuB,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA+B;gBACvE;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,gDAAgD;oBACzD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,SAAkB,EAAE;wBAClE,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,cAAuB,EAAE;wBACjE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAe,EAAE;qBACzC;iBACF;aACF,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpE,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC9E,CAAC;CACF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ManifestEntry } from '../planning/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Metadata extracted from a change document's front-matter.
|
|
4
|
+
*/
|
|
5
|
+
export interface ChangeDocMetadata {
|
|
6
|
+
/** JIRA ticket (e.g., "CMS-18384") */
|
|
7
|
+
jiraTicket: string | undefined;
|
|
8
|
+
/** Branch name */
|
|
9
|
+
branch: string | undefined;
|
|
10
|
+
/** Document date (YYYY-MM-DD) */
|
|
11
|
+
date: string | undefined;
|
|
12
|
+
/** Author name */
|
|
13
|
+
author: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* AI Context Tags parsed from the YAML block at the end of a change document.
|
|
17
|
+
*/
|
|
18
|
+
export interface AIContextTags {
|
|
19
|
+
change_type?: string;
|
|
20
|
+
modules_affected?: string[];
|
|
21
|
+
api_changes?: string;
|
|
22
|
+
breaking_changes?: boolean;
|
|
23
|
+
database_changes?: boolean;
|
|
24
|
+
test_coverage?: string;
|
|
25
|
+
risk_level?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A parsed change document ready for AI analysis.
|
|
29
|
+
*/
|
|
30
|
+
export interface ChangeDocument {
|
|
31
|
+
/** Filename (e.g., "2026-01-15-CMS-18384-jakarta.md") */
|
|
32
|
+
filename: string;
|
|
33
|
+
/** Absolute file path */
|
|
34
|
+
filePath: string;
|
|
35
|
+
/** Extracted metadata from front-matter */
|
|
36
|
+
metadata: ChangeDocMetadata;
|
|
37
|
+
/** AI Context Tags from the YAML block */
|
|
38
|
+
contextTags: AIContextTags;
|
|
39
|
+
/** Full Markdown content */
|
|
40
|
+
content: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of conflict checking a change document against unreleased.yaml.
|
|
44
|
+
*/
|
|
45
|
+
export interface ConflictCheckResult {
|
|
46
|
+
/** Whether a conflict exists */
|
|
47
|
+
hasConflict: boolean;
|
|
48
|
+
/** Existing entries with the same JIRA ticket */
|
|
49
|
+
existingEntries: ManifestEntry[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* User decision for a manifest entry during interactive review.
|
|
53
|
+
*/
|
|
54
|
+
export type ReviewDecision = 'accept' | 'edit' | 'skip' | 'replace' | 'add_separate';
|
|
55
|
+
/**
|
|
56
|
+
* Result of reviewing a single entry.
|
|
57
|
+
*/
|
|
58
|
+
export interface ReviewResult {
|
|
59
|
+
/** The candidate manifest entry (after possible edits). Always present, but unused when decision is 'skip'. */
|
|
60
|
+
entry: ManifestEntry;
|
|
61
|
+
/** User's decision */
|
|
62
|
+
decision: ReviewDecision;
|
|
63
|
+
/** The source change document filename */
|
|
64
|
+
sourceFile: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Summary of the log-change processing run.
|
|
68
|
+
*/
|
|
69
|
+
export interface LogChangeSummary {
|
|
70
|
+
/** Total change documents scanned */
|
|
71
|
+
totalScanned: number;
|
|
72
|
+
/** Entries accepted (new or edited) */
|
|
73
|
+
accepted: number;
|
|
74
|
+
/** Entries intentionally skipped (user choice in interactive review,
|
|
75
|
+
* or conflict resolution blocked by missing metadata) */
|
|
76
|
+
skipped: number;
|
|
77
|
+
/** Documents that failed to produce a manifest entry (validation error,
|
|
78
|
+
* AI returned malformed data, etc.) — separate from `skipped` so the
|
|
79
|
+
* CI wrapper can hard-fail when these are non-zero */
|
|
80
|
+
failed: number;
|
|
81
|
+
/** Entries that replaced existing ones */
|
|
82
|
+
replaced: number;
|
|
83
|
+
/** Entries added alongside existing (same JIRA) */
|
|
84
|
+
addedSeparate: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Options for the log-change command.
|
|
88
|
+
*/
|
|
89
|
+
export interface LogChangeOptions {
|
|
90
|
+
/** Path to change documents directory (default: docs/changes) */
|
|
91
|
+
changesDir?: string;
|
|
92
|
+
/** Path to unreleased.yaml */
|
|
93
|
+
unreleasedPath?: string;
|
|
94
|
+
/** Skip interactive review (auto-accept all) */
|
|
95
|
+
autoAccept?: boolean;
|
|
96
|
+
/** Enable verbose output */
|
|
97
|
+
verbose?: boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Options for the finalize command.
|
|
101
|
+
*/
|
|
102
|
+
export interface FinalizeOptions {
|
|
103
|
+
/** Version string to finalize as (e.g., "16.3.0") */
|
|
104
|
+
version: string;
|
|
105
|
+
/** Path to unreleased.yaml */
|
|
106
|
+
unreleasedPath?: string;
|
|
107
|
+
/** Path to released manifests directory */
|
|
108
|
+
releasedDir?: string;
|
|
109
|
+
/** Skip confirmation prompt */
|
|
110
|
+
force?: boolean;
|
|
111
|
+
/** Enable verbose output */
|
|
112
|
+
verbose?: boolean;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capture/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,0CAA0C;IAC1C,WAAW,EAAE,aAAa,CAAC;IAC3B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+GAA+G;IAC/G,KAAK,EAAE,aAAa,CAAC;IACrB,sBAAsB;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB;8DAC0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB;;2DAEuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/capture/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwGpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA+D/C"}
|