@agentic-qe/v3 3.0.0-alpha.6 → 3.0.0-alpha.7
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/assets/agents/v3/subagents/v3-qe-code-reviewer.md +339 -0
- package/assets/agents/v3/subagents/v3-qe-integration-reviewer.md +344 -0
- package/assets/agents/v3/subagents/v3-qe-performance-reviewer.md +351 -0
- package/assets/agents/v3/subagents/v3-qe-security-reviewer.md +374 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-green.md +334 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-red.md +329 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-refactor.md +361 -0
- package/assets/agents/v3/v3-qe-accessibility-auditor.md +266 -0
- package/assets/agents/v3/v3-qe-bdd-generator.md +279 -0
- package/assets/agents/v3/v3-qe-chaos-engineer.md +265 -0
- package/assets/agents/v3/v3-qe-code-complexity.md +298 -0
- package/assets/agents/v3/v3-qe-code-intelligence.md +262 -0
- package/assets/agents/v3/v3-qe-contract-validator.md +267 -0
- package/assets/agents/v3/v3-qe-coverage-specialist.md +227 -0
- package/assets/agents/v3/v3-qe-defect-predictor.md +251 -0
- package/assets/agents/v3/v3-qe-dependency-mapper.md +277 -0
- package/assets/agents/v3/v3-qe-deployment-advisor.md +275 -0
- package/assets/agents/v3/v3-qe-flaky-hunter.md +248 -0
- package/assets/agents/v3/v3-qe-fleet-commander.md +293 -0
- package/assets/agents/v3/v3-qe-gap-detector.md +260 -0
- package/assets/agents/v3/v3-qe-graphql-tester.md +308 -0
- package/assets/agents/v3/v3-qe-impact-analyzer.md +299 -0
- package/assets/agents/v3/v3-qe-integration-tester.md +238 -0
- package/assets/agents/v3/v3-qe-kg-builder.md +273 -0
- package/assets/agents/v3/v3-qe-learning-coordinator.md +226 -0
- package/assets/agents/v3/v3-qe-load-tester.md +280 -0
- package/assets/agents/v3/v3-qe-metrics-optimizer.md +300 -0
- package/assets/agents/v3/v3-qe-mutation-tester.md +301 -0
- package/assets/agents/v3/v3-qe-parallel-executor.md +240 -0
- package/assets/agents/v3/v3-qe-pattern-learner.md +271 -0
- package/assets/agents/v3/v3-qe-performance-tester.md +262 -0
- package/assets/agents/v3/v3-qe-property-tester.md +247 -0
- package/assets/agents/v3/v3-qe-quality-gate.md +218 -0
- package/assets/agents/v3/v3-qe-queen-coordinator.md +214 -0
- package/assets/agents/v3/v3-qe-qx-partner.md +313 -0
- package/assets/agents/v3/v3-qe-regression-analyzer.md +322 -0
- package/assets/agents/v3/v3-qe-requirements-validator.md +360 -0
- package/assets/agents/v3/v3-qe-responsive-tester.md +311 -0
- package/assets/agents/v3/v3-qe-retry-handler.md +256 -0
- package/assets/agents/v3/v3-qe-risk-assessor.md +273 -0
- package/assets/agents/v3/v3-qe-root-cause-analyzer.md +286 -0
- package/assets/agents/v3/v3-qe-security-auditor.md +299 -0
- package/assets/agents/v3/v3-qe-security-scanner.md +235 -0
- package/assets/agents/v3/v3-qe-tdd-specialist.md +239 -0
- package/assets/agents/v3/v3-qe-test-architect.md +233 -0
- package/assets/agents/v3/v3-qe-transfer-specialist.md +295 -0
- package/assets/agents/v3/v3-qe-visual-tester.md +232 -0
- package/assets/skills/accessibility-testing/SKILL.md +216 -0
- package/assets/skills/agentdb-advanced/SKILL.md +550 -0
- package/assets/skills/agentdb-learning/SKILL.md +545 -0
- package/assets/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/assets/skills/agentdb-optimization/SKILL.md +509 -0
- package/assets/skills/agentdb-vector-search/SKILL.md +339 -0
- package/assets/skills/agentic-jujutsu/SKILL.md +645 -0
- package/assets/skills/agentic-quality-engineering/SKILL.md +335 -0
- package/assets/skills/api-testing-patterns/SKILL.md +294 -0
- package/assets/skills/aqe-v2-v3-migration/skill.md +322 -0
- package/assets/skills/brutal-honesty-review/README.md +218 -0
- package/assets/skills/brutal-honesty-review/SKILL.md +235 -0
- package/assets/skills/brutal-honesty-review/resources/assessment-rubrics.md +295 -0
- package/assets/skills/brutal-honesty-review/resources/review-template.md +102 -0
- package/assets/skills/brutal-honesty-review/scripts/assess-code.sh +179 -0
- package/assets/skills/brutal-honesty-review/scripts/assess-tests.sh +223 -0
- package/assets/skills/bug-reporting-excellence/SKILL.md +225 -0
- package/assets/skills/chaos-engineering-resilience/SKILL.md +158 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/README.md +304 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/SKILL.md +315 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/microservice-pipeline.md +239 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/mobile-pipeline.md +375 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/monolith-pipeline.md +268 -0
- package/assets/skills/code-review-quality/SKILL.md +227 -0
- package/assets/skills/compatibility-testing/SKILL.md +205 -0
- package/assets/skills/compliance-testing/SKILL.md +225 -0
- package/assets/skills/consultancy-practices/SKILL.md +202 -0
- package/assets/skills/context-driven-testing/SKILL.md +196 -0
- package/assets/skills/contract-testing/SKILL.md +222 -0
- package/assets/skills/database-testing/SKILL.md +244 -0
- package/assets/skills/exploratory-testing-advanced/SKILL.md +201 -0
- package/assets/skills/flow-nexus-neural/SKILL.md +738 -0
- package/assets/skills/flow-nexus-platform/SKILL.md +1157 -0
- package/assets/skills/flow-nexus-swarm/SKILL.md +610 -0
- package/assets/skills/github-code-review/SKILL.md +1140 -0
- package/assets/skills/github-multi-repo/SKILL.md +874 -0
- package/assets/skills/github-project-management/SKILL.md +1277 -0
- package/assets/skills/github-release-management/SKILL.md +1081 -0
- package/assets/skills/github-workflow-automation/SKILL.md +1065 -0
- package/assets/skills/hive-mind-advanced/SKILL.md +712 -0
- package/assets/skills/holistic-testing-pact/SKILL.md +171 -0
- package/assets/skills/hooks-automation/SKILL.md +1201 -0
- package/assets/skills/localization-testing/SKILL.md +221 -0
- package/assets/skills/mobile-testing/SKILL.md +219 -0
- package/assets/skills/mutation-testing/SKILL.md +229 -0
- package/assets/skills/n8n-expression-testing/SKILL.md +434 -0
- package/assets/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
- package/assets/skills/n8n-security-testing/SKILL.md +599 -0
- package/assets/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
- package/assets/skills/pair-programming/SKILL.md +1202 -0
- package/assets/skills/performance-analysis/SKILL.md +563 -0
- package/assets/skills/performance-testing/SKILL.md +310 -0
- package/assets/skills/quality-metrics/SKILL.md +225 -0
- package/assets/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/assets/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/assets/skills/refactoring-patterns/SKILL.md +205 -0
- package/assets/skills/regression-testing/SKILL.md +227 -0
- package/assets/skills/risk-based-testing/SKILL.md +206 -0
- package/assets/skills/security-testing/SKILL.md +306 -0
- package/assets/skills/sherlock-review/SKILL.md +250 -0
- package/assets/skills/shift-left-testing/SKILL.md +225 -0
- package/assets/skills/shift-right-testing/SKILL.md +227 -0
- package/assets/skills/six-thinking-hats/README.md +190 -0
- package/assets/skills/six-thinking-hats/SKILL.md +280 -0
- package/assets/skills/six-thinking-hats/resources/examples/api-testing-example.md +345 -0
- package/assets/skills/six-thinking-hats/resources/templates/solo-session-template.md +167 -0
- package/assets/skills/six-thinking-hats/resources/templates/team-session-template.md +336 -0
- package/assets/skills/skill-builder/SKILL.md +910 -0
- package/assets/skills/sparc-methodology/SKILL.md +1115 -0
- package/assets/skills/stream-chain/SKILL.md +563 -0
- package/assets/skills/swarm-advanced/SKILL.md +973 -0
- package/assets/skills/swarm-orchestration/SKILL.md +179 -0
- package/assets/skills/tdd-london-chicago/SKILL.md +244 -0
- package/assets/skills/technical-writing/SKILL.md +178 -0
- package/assets/skills/test-automation-strategy/SKILL.md +230 -0
- package/assets/skills/test-data-management/SKILL.md +270 -0
- package/assets/skills/test-design-techniques/SKILL.md +244 -0
- package/assets/skills/test-environment-management/SKILL.md +243 -0
- package/assets/skills/test-reporting-analytics/SKILL.md +214 -0
- package/assets/skills/testability-scoring/README.md +71 -0
- package/assets/skills/testability-scoring/SKILL.md +346 -0
- package/assets/skills/testability-scoring/resources/templates/config.template.js +84 -0
- package/assets/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
- package/assets/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
- package/assets/skills/testability-scoring/scripts/run-assessment.sh +70 -0
- package/assets/skills/v3-qe-chaos-resilience/SKILL.md +238 -0
- package/assets/skills/v3-qe-code-intelligence/SKILL.md +209 -0
- package/assets/skills/v3-qe-contract-testing/SKILL.md +218 -0
- package/assets/skills/v3-qe-coverage-analysis/SKILL.md +187 -0
- package/assets/skills/v3-qe-defect-intelligence/SKILL.md +205 -0
- package/assets/skills/v3-qe-learning-optimization/SKILL.md +238 -0
- package/assets/skills/v3-qe-quality-assessment/SKILL.md +213 -0
- package/assets/skills/v3-qe-requirements-validation/SKILL.md +248 -0
- package/assets/skills/v3-qe-test-execution/SKILL.md +182 -0
- package/assets/skills/v3-qe-test-generation/SKILL.md +141 -0
- package/assets/skills/v3-qe-visual-accessibility/SKILL.md +242 -0
- package/assets/skills/verification-quality/SKILL.md +649 -0
- package/assets/skills/visual-testing-advanced/SKILL.md +219 -0
- package/assets/skills/xp-practices/SKILL.md +229 -0
- package/dist/cli/bundle.js +8 -8
- package/dist/init/agents-installer.js +4 -4
- package/dist/init/agents-installer.js.map +1 -1
- package/dist/init/skills-installer.js +4 -4
- package/dist/init/skills-installer.js.map +1 -1
- package/package.json +7 -1
- package/docs/analysis/V3-INIT-REQUIREMENTS-ANALYSIS.md +0 -352
- package/implementation/README.md +0 -90
- package/implementation/adrs/ADR-030-coherence-gated-quality-gates.md +0 -312
- package/implementation/adrs/ADR-031-strange-loop-self-awareness.md +0 -484
- package/implementation/adrs/ADR-032-time-crystal-scheduling.md +0 -530
- package/implementation/adrs/ADR-033-early-exit-testing.md +0 -634
- package/implementation/adrs/ADR-034-neural-topology-optimizer.md +0 -589
- package/implementation/adrs/ADR-035-causal-discovery.md +0 -610
- package/implementation/adrs/ADR-036-result-persistence.md +0 -326
- package/implementation/adrs/ADR-037-v3-qe-agent-naming.md +0 -105
- package/implementation/adrs/ADR-038-v3-qe-memory-unification.md +0 -154
- package/implementation/adrs/ADR-039-v3-qe-mcp-optimization.md +0 -179
- package/implementation/adrs/ADR-040-v3-qe-agentic-flow-integration.md +0 -240
- package/implementation/adrs/ADR-041-v3-qe-cli-enhancement.md +0 -296
- package/implementation/adrs/ADR-042-v3-qe-token-tracking-integration.md +0 -517
- package/implementation/adrs/v3-adrs.md +0 -2783
- package/implementation/planning/AQE-V3-MASTER-PLAN.md +0 -815
- package/security-scan-report-2026-01-11.md +0 -410
- package/security-verification-report-2026-01-11.md +0 -278
- package/src/benchmarks/performance-benchmarks.ts +0 -646
- package/src/benchmarks/run-benchmarks.ts +0 -324
- package/src/causal-discovery/causal-graph.ts +0 -450
- package/src/causal-discovery/discovery-engine.ts +0 -438
- package/src/causal-discovery/index.ts +0 -117
- package/src/causal-discovery/types.ts +0 -456
- package/src/causal-discovery/weight-matrix.ts +0 -453
- package/src/cli/commands/qe-tools.ts +0 -634
- package/src/cli/index.ts +0 -1976
- package/src/compatibility/agent-mapper.ts +0 -291
- package/src/compatibility/cli-adapter.ts +0 -277
- package/src/compatibility/config-migrator.ts +0 -334
- package/src/compatibility/index.ts +0 -112
- package/src/compatibility/mcp-adapter.ts +0 -248
- package/src/compatibility/types.ts +0 -156
- package/src/coordination/claims/claim-repository.ts +0 -636
- package/src/coordination/claims/claim-service.ts +0 -675
- package/src/coordination/claims/handoff-manager.ts +0 -535
- package/src/coordination/claims/index.ts +0 -276
- package/src/coordination/claims/interfaces.ts +0 -687
- package/src/coordination/claims/work-stealing.ts +0 -436
- package/src/coordination/cross-domain-router.ts +0 -492
- package/src/coordination/index.ts +0 -127
- package/src/coordination/interfaces.ts +0 -691
- package/src/coordination/protocol-executor.ts +0 -760
- package/src/coordination/protocols/code-intelligence-index.ts +0 -855
- package/src/coordination/protocols/defect-investigation.ts +0 -1184
- package/src/coordination/protocols/index.ts +0 -11
- package/src/coordination/protocols/learning-consolidation.ts +0 -1181
- package/src/coordination/protocols/morning-sync.ts +0 -1055
- package/src/coordination/protocols/quality-gate.ts +0 -1566
- package/src/coordination/protocols/security-audit.ts +0 -1587
- package/src/coordination/queen-coordinator.ts +0 -1176
- package/src/coordination/result-saver.ts +0 -780
- package/src/coordination/task-executor.ts +0 -1146
- package/src/coordination/workflow-orchestrator.ts +0 -1917
- package/src/domains/chaos-resilience/coordinator.ts +0 -1032
- package/src/domains/chaos-resilience/index.ts +0 -143
- package/src/domains/chaos-resilience/interfaces.ts +0 -659
- package/src/domains/chaos-resilience/plugin.ts +0 -691
- package/src/domains/chaos-resilience/services/chaos-engineer.ts +0 -1097
- package/src/domains/chaos-resilience/services/index.ts +0 -19
- package/src/domains/chaos-resilience/services/load-tester.ts +0 -799
- package/src/domains/chaos-resilience/services/performance-profiler.ts +0 -792
- package/src/domains/code-intelligence/coordinator.ts +0 -631
- package/src/domains/code-intelligence/index.ts +0 -86
- package/src/domains/code-intelligence/interfaces.ts +0 -162
- package/src/domains/code-intelligence/plugin.ts +0 -451
- package/src/domains/code-intelligence/services/impact-analyzer.ts +0 -567
- package/src/domains/code-intelligence/services/index.ts +0 -26
- package/src/domains/code-intelligence/services/knowledge-graph.ts +0 -1067
- package/src/domains/code-intelligence/services/semantic-analyzer.ts +0 -901
- package/src/domains/contract-testing/coordinator.ts +0 -1038
- package/src/domains/contract-testing/index.ts +0 -122
- package/src/domains/contract-testing/interfaces.ts +0 -458
- package/src/domains/contract-testing/plugin.ts +0 -746
- package/src/domains/contract-testing/services/api-compatibility.ts +0 -748
- package/src/domains/contract-testing/services/contract-validator.ts +0 -1700
- package/src/domains/contract-testing/services/index.ts +0 -19
- package/src/domains/contract-testing/services/schema-validator.ts +0 -1102
- package/src/domains/coverage-analysis/coordinator.ts +0 -485
- package/src/domains/coverage-analysis/index.ts +0 -114
- package/src/domains/coverage-analysis/interfaces.ts +0 -142
- package/src/domains/coverage-analysis/plugin.ts +0 -172
- package/src/domains/coverage-analysis/services/coverage-analyzer.ts +0 -449
- package/src/domains/coverage-analysis/services/coverage-embedder.ts +0 -733
- package/src/domains/coverage-analysis/services/coverage-parser.ts +0 -753
- package/src/domains/coverage-analysis/services/gap-detector.ts +0 -592
- package/src/domains/coverage-analysis/services/hnsw-index.ts +0 -728
- package/src/domains/coverage-analysis/services/index.ts +0 -61
- package/src/domains/coverage-analysis/services/risk-scorer.ts +0 -540
- package/src/domains/coverage-analysis/services/sublinear-analyzer.ts +0 -747
- package/src/domains/defect-intelligence/coordinator.ts +0 -635
- package/src/domains/defect-intelligence/index.ts +0 -83
- package/src/domains/defect-intelligence/interfaces.ts +0 -152
- package/src/domains/defect-intelligence/plugin.ts +0 -483
- package/src/domains/defect-intelligence/services/causal-root-cause-analyzer.ts +0 -494
- package/src/domains/defect-intelligence/services/defect-predictor.ts +0 -852
- package/src/domains/defect-intelligence/services/index.ts +0 -37
- package/src/domains/defect-intelligence/services/pattern-learner.ts +0 -738
- package/src/domains/defect-intelligence/services/root-cause-analyzer.ts +0 -637
- package/src/domains/domain-interface.ts +0 -77
- package/src/domains/index.ts +0 -23
- package/src/domains/learning-optimization/coordinator.ts +0 -1215
- package/src/domains/learning-optimization/index.ts +0 -127
- package/src/domains/learning-optimization/interfaces.ts +0 -570
- package/src/domains/learning-optimization/plugin.ts +0 -851
- package/src/domains/learning-optimization/services/index.ts +0 -29
- package/src/domains/learning-optimization/services/learning-coordinator.ts +0 -972
- package/src/domains/learning-optimization/services/metrics-optimizer.ts +0 -915
- package/src/domains/learning-optimization/services/production-intel.ts +0 -971
- package/src/domains/learning-optimization/services/transfer-specialist.ts +0 -723
- package/src/domains/quality-assessment/coherence/gate-controller.ts +0 -549
- package/src/domains/quality-assessment/coherence/index.ts +0 -211
- package/src/domains/quality-assessment/coherence/lambda-calculator.ts +0 -384
- package/src/domains/quality-assessment/coherence/partition-detector.ts +0 -469
- package/src/domains/quality-assessment/coherence/types.ts +0 -384
- package/src/domains/quality-assessment/coordinator.ts +0 -605
- package/src/domains/quality-assessment/index.ts +0 -97
- package/src/domains/quality-assessment/interfaces.ts +0 -152
- package/src/domains/quality-assessment/plugin.ts +0 -496
- package/src/domains/quality-assessment/services/coherence-gate.ts +0 -358
- package/src/domains/quality-assessment/services/deployment-advisor.ts +0 -571
- package/src/domains/quality-assessment/services/index.ts +0 -34
- package/src/domains/quality-assessment/services/quality-analyzer.ts +0 -670
- package/src/domains/quality-assessment/services/quality-gate.ts +0 -384
- package/src/domains/requirements-validation/coordinator.ts +0 -812
- package/src/domains/requirements-validation/index.ts +0 -92
- package/src/domains/requirements-validation/interfaces.ts +0 -303
- package/src/domains/requirements-validation/plugin.ts +0 -576
- package/src/domains/requirements-validation/services/bdd-scenario-writer.ts +0 -676
- package/src/domains/requirements-validation/services/index.ts +0 -20
- package/src/domains/requirements-validation/services/requirements-validator.ts +0 -559
- package/src/domains/requirements-validation/services/testability-scorer.ts +0 -639
- package/src/domains/security-compliance/coordinator.ts +0 -757
- package/src/domains/security-compliance/index.ts +0 -120
- package/src/domains/security-compliance/interfaces.ts +0 -434
- package/src/domains/security-compliance/plugin.ts +0 -509
- package/src/domains/security-compliance/services/compliance-validator.ts +0 -1226
- package/src/domains/security-compliance/services/index.ts +0 -31
- package/src/domains/security-compliance/services/security-auditor.ts +0 -2227
- package/src/domains/security-compliance/services/security-scanner.ts +0 -2354
- package/src/domains/security-compliance/services/semgrep-integration.ts +0 -289
- package/src/domains/test-execution/coordinator.ts +0 -426
- package/src/domains/test-execution/index.ts +0 -76
- package/src/domains/test-execution/interfaces.ts +0 -119
- package/src/domains/test-execution/plugin.ts +0 -208
- package/src/domains/test-execution/services/flaky-detector.ts +0 -1240
- package/src/domains/test-execution/services/index.ts +0 -8
- package/src/domains/test-execution/services/retry-handler.ts +0 -820
- package/src/domains/test-execution/services/test-executor.ts +0 -885
- package/src/domains/test-generation/coordinator.ts +0 -656
- package/src/domains/test-generation/index.ts +0 -77
- package/src/domains/test-generation/interfaces.ts +0 -118
- package/src/domains/test-generation/plugin.ts +0 -397
- package/src/domains/test-generation/services/index.ts +0 -23
- package/src/domains/test-generation/services/pattern-matcher.ts +0 -1725
- package/src/domains/test-generation/services/test-generator.ts +0 -2750
- package/src/domains/visual-accessibility/coordinator.ts +0 -860
- package/src/domains/visual-accessibility/index.ts +0 -116
- package/src/domains/visual-accessibility/interfaces.ts +0 -435
- package/src/domains/visual-accessibility/plugin.ts +0 -568
- package/src/domains/visual-accessibility/services/accessibility-tester.ts +0 -982
- package/src/domains/visual-accessibility/services/axe-core-audit.ts +0 -630
- package/src/domains/visual-accessibility/services/index.ts +0 -28
- package/src/domains/visual-accessibility/services/responsive-tester.ts +0 -934
- package/src/domains/visual-accessibility/services/visual-tester.ts +0 -458
- package/src/early-exit/early-exit-controller.ts +0 -490
- package/src/early-exit/early-exit-decision.ts +0 -391
- package/src/early-exit/index.ts +0 -115
- package/src/early-exit/quality-signal.ts +0 -389
- package/src/early-exit/speculative-executor.ts +0 -505
- package/src/early-exit/types.ts +0 -407
- package/src/feedback/coverage-learner.ts +0 -456
- package/src/feedback/feedback-loop.ts +0 -426
- package/src/feedback/index.ts +0 -72
- package/src/feedback/pattern-promotion.ts +0 -373
- package/src/feedback/quality-score-calculator.ts +0 -334
- package/src/feedback/test-outcome-tracker.ts +0 -450
- package/src/feedback/types.ts +0 -497
- package/src/index.ts +0 -224
- package/src/init/agents-installer.ts +0 -536
- package/src/init/index.ts +0 -80
- package/src/init/init-wizard.ts +0 -1061
- package/src/init/project-analyzer.ts +0 -696
- package/src/init/self-configurator.ts +0 -488
- package/src/init/skills-installer.ts +0 -467
- package/src/init/types.ts +0 -432
- package/src/integrations/ruvector/ast-complexity.ts +0 -470
- package/src/integrations/ruvector/coverage-router.ts +0 -594
- package/src/integrations/ruvector/diff-risk-classifier.ts +0 -759
- package/src/integrations/ruvector/fallback.ts +0 -942
- package/src/integrations/ruvector/graph-boundaries.ts +0 -809
- package/src/integrations/ruvector/index.ts +0 -363
- package/src/integrations/ruvector/interfaces.ts +0 -609
- package/src/integrations/ruvector/q-learning-router.ts +0 -550
- package/src/kernel/agent-coordinator.ts +0 -165
- package/src/kernel/agentdb-backend.ts +0 -504
- package/src/kernel/event-bus.ts +0 -129
- package/src/kernel/hybrid-backend.ts +0 -538
- package/src/kernel/index.ts +0 -28
- package/src/kernel/interfaces.ts +0 -257
- package/src/kernel/kernel.ts +0 -285
- package/src/kernel/memory-backend.ts +0 -169
- package/src/kernel/memory-factory.ts +0 -293
- package/src/kernel/plugin-loader.ts +0 -179
- package/src/learning/index.ts +0 -219
- package/src/learning/pattern-store.ts +0 -990
- package/src/learning/qe-guidance.ts +0 -832
- package/src/learning/qe-hooks.ts +0 -644
- package/src/learning/qe-patterns.ts +0 -449
- package/src/learning/qe-reasoning-bank.ts +0 -951
- package/src/learning/real-embeddings.ts +0 -277
- package/src/learning/real-qe-reasoning-bank.ts +0 -833
- package/src/learning/sqlite-persistence.ts +0 -554
- package/src/mcp/entry.ts +0 -59
- package/src/mcp/handlers/agent-handlers.ts +0 -285
- package/src/mcp/handlers/core-handlers.ts +0 -317
- package/src/mcp/handlers/domain-handlers.ts +0 -1444
- package/src/mcp/handlers/index.ts +0 -57
- package/src/mcp/handlers/memory-handlers.ts +0 -338
- package/src/mcp/handlers/task-handlers.ts +0 -363
- package/src/mcp/index.ts +0 -30
- package/src/mcp/metrics/index.ts +0 -14
- package/src/mcp/metrics/metrics-collector.ts +0 -503
- package/src/mcp/protocol-server.ts +0 -752
- package/src/mcp/security/cve-prevention.ts +0 -742
- package/src/mcp/security/index.ts +0 -356
- package/src/mcp/security/oauth21-provider.ts +0 -821
- package/src/mcp/security/rate-limiter.ts +0 -615
- package/src/mcp/security/sampling-server.ts +0 -662
- package/src/mcp/security/schema-validator.ts +0 -855
- package/src/mcp/server.ts +0 -657
- package/src/mcp/tool-registry.ts +0 -391
- package/src/mcp/tools/base.ts +0 -399
- package/src/mcp/tools/chaos-resilience/inject.ts +0 -699
- package/src/mcp/tools/code-intelligence/analyze.ts +0 -745
- package/src/mcp/tools/contract-testing/validate.ts +0 -708
- package/src/mcp/tools/coverage-analysis/index.ts +0 -770
- package/src/mcp/tools/defect-intelligence/predict.ts +0 -466
- package/src/mcp/tools/index.ts +0 -214
- package/src/mcp/tools/learning-optimization/optimize.ts +0 -772
- package/src/mcp/tools/quality-assessment/evaluate.ts +0 -385
- package/src/mcp/tools/registry.ts +0 -248
- package/src/mcp/tools/requirements-validation/validate.ts +0 -394
- package/src/mcp/tools/security-compliance/scan.ts +0 -365
- package/src/mcp/tools/test-execution/execute.ts +0 -291
- package/src/mcp/tools/test-generation/generate.ts +0 -544
- package/src/mcp/tools/visual-accessibility/index.ts +0 -791
- package/src/mcp/transport/index.ts +0 -31
- package/src/mcp/transport/stdio.ts +0 -318
- package/src/mcp/types.ts +0 -543
- package/src/neural-optimizer/index.ts +0 -111
- package/src/neural-optimizer/replay-buffer.ts +0 -455
- package/src/neural-optimizer/swarm-topology.ts +0 -508
- package/src/neural-optimizer/topology-optimizer.ts +0 -828
- package/src/neural-optimizer/types.ts +0 -481
- package/src/neural-optimizer/value-network.ts +0 -351
- package/src/optimization/auto-tuner.ts +0 -817
- package/src/optimization/index.ts +0 -77
- package/src/optimization/metric-collectors.ts +0 -474
- package/src/optimization/qe-workers.ts +0 -704
- package/src/optimization/tuning-algorithm.ts +0 -401
- package/src/optimization/types.ts +0 -314
- package/src/routing/index.ts +0 -51
- package/src/routing/qe-agent-registry.ts +0 -963
- package/src/routing/qe-task-router.ts +0 -564
- package/src/routing/routing-feedback.ts +0 -365
- package/src/routing/types.ts +0 -406
- package/src/shared/embeddings/embedding-cache.ts +0 -157
- package/src/shared/embeddings/index.ts +0 -50
- package/src/shared/embeddings/nomic-embedder.ts +0 -404
- package/src/shared/embeddings/ollama-client.ts +0 -195
- package/src/shared/embeddings/types.ts +0 -147
- package/src/shared/entities/agent.ts +0 -141
- package/src/shared/entities/base-entity.ts +0 -79
- package/src/shared/entities/index.ts +0 -6
- package/src/shared/events/domain-events.ts +0 -259
- package/src/shared/events/index.ts +0 -5
- package/src/shared/git/git-analyzer.ts +0 -656
- package/src/shared/git/index.ts +0 -11
- package/src/shared/http/http-client.ts +0 -420
- package/src/shared/http/index.ts +0 -13
- package/src/shared/index.ts +0 -41
- package/src/shared/io/file-reader.ts +0 -525
- package/src/shared/io/index.ts +0 -25
- package/src/shared/llm/cache.ts +0 -473
- package/src/shared/llm/circuit-breaker.ts +0 -369
- package/src/shared/llm/cost-tracker.ts +0 -460
- package/src/shared/llm/index.ts +0 -140
- package/src/shared/llm/interfaces.ts +0 -629
- package/src/shared/llm/provider-manager.ts +0 -685
- package/src/shared/llm/providers/claude.ts +0 -524
- package/src/shared/llm/providers/index.ts +0 -8
- package/src/shared/llm/providers/ollama.ts +0 -575
- package/src/shared/llm/providers/openai.ts +0 -609
- package/src/shared/metrics/code-metrics.ts +0 -520
- package/src/shared/metrics/index.ts +0 -23
- package/src/shared/metrics/system-metrics.ts +0 -353
- package/src/shared/parsers/index.ts +0 -6
- package/src/shared/parsers/typescript-parser.ts +0 -841
- package/src/shared/security/compliance-patterns.ts +0 -666
- package/src/shared/security/index.ts +0 -30
- package/src/shared/security/osv-client.ts +0 -468
- package/src/shared/types/index.ts +0 -150
- package/src/shared/value-objects/index.ts +0 -273
- package/src/strange-loop/healing-controller.ts +0 -833
- package/src/strange-loop/index.ts +0 -104
- package/src/strange-loop/self-model.ts +0 -494
- package/src/strange-loop/strange-loop.ts +0 -446
- package/src/strange-loop/swarm-observer.ts +0 -448
- package/src/strange-loop/topology-analyzer.ts +0 -565
- package/src/strange-loop/types.ts +0 -640
- package/src/time-crystal/default-phases.ts +0 -520
- package/src/time-crystal/index.ts +0 -164
- package/src/time-crystal/oscillator.ts +0 -425
- package/src/time-crystal/phase-executor.ts +0 -521
- package/src/time-crystal/scheduler.ts +0 -1025
- package/src/time-crystal/test-runner.ts +0 -787
- package/src/time-crystal/types.ts +0 -421
- package/src/workers/base-worker.ts +0 -304
- package/src/workers/daemon.ts +0 -264
- package/src/workers/index.ts +0 -119
- package/src/workers/interfaces.ts +0 -393
- package/src/workers/worker-manager.ts +0 -424
- package/src/workers/workers/compliance-checker.ts +0 -445
- package/src/workers/workers/coverage-tracker.ts +0 -344
- package/src/workers/workers/defect-predictor.ts +0 -375
- package/src/workers/workers/flaky-detector.ts +0 -390
- package/src/workers/workers/index.ts +0 -17
- package/src/workers/workers/learning-consolidation.ts +0 -442
- package/src/workers/workers/performance-baseline.ts +0 -434
- package/src/workers/workers/quality-gate.ts +0 -419
- package/src/workers/workers/regression-monitor.ts +0 -357
- package/src/workers/workers/security-scan.ts +0 -349
- package/src/workers/workers/test-health.ts +0 -359
- package/tests/integration/code-intelligence/knowledge-graph-real.test.ts +0 -540
- package/tests/integration/coordination/cross-domain-router.test.ts +0 -403
- package/tests/integration/coordination/protocol-executor.test.ts +0 -454
- package/tests/integration/coordination/workflow-orchestrator.test.ts +0 -418
- package/tests/integration/feedback/feedback-loop-integration.test.ts +0 -560
- package/tests/integration/migration/v2-to-v3-migration.test.ts +0 -471
- package/tests/integration/parsers/typescript-parser.test.ts +0 -463
- package/tests/integration/security/vulnerability-detection.test.ts +0 -628
- package/tests/integration/test-execution/coordinator.test.ts +0 -410
- package/tests/integration/test-generation/coordinator.test.ts +0 -361
- package/tests/mocks/index.ts +0 -228
- package/tests/time-crystal/default-phases.test.ts +0 -476
- package/tests/time-crystal/oscillator.test.ts +0 -541
- package/tests/time-crystal/phase-executor.test.ts +0 -653
- package/tests/time-crystal/scheduler.test.ts +0 -626
- package/tests/time-crystal/test-runner.test.ts +0 -594
- package/tests/unit/causal-discovery/causal-graph.test.ts +0 -504
- package/tests/unit/causal-discovery/causal-root-cause-analyzer.test.ts +0 -347
- package/tests/unit/causal-discovery/discovery-engine.test.ts +0 -435
- package/tests/unit/causal-discovery/weight-matrix.test.ts +0 -328
- package/tests/unit/cli/cli.test.ts +0 -341
- package/tests/unit/cli/commands.test.ts +0 -414
- package/tests/unit/cli/init-command.test.ts +0 -274
- package/tests/unit/cli/migrate-command.test.ts +0 -396
- package/tests/unit/coordination/claims/claim-service.test.ts +0 -949
- package/tests/unit/coordination/claims/handoff-manager.test.ts +0 -773
- package/tests/unit/coordination/claims/work-stealing.test.ts +0 -492
- package/tests/unit/coordination/queen-coordinator.test.ts +0 -966
- package/tests/unit/coordination/result-saver.test.ts +0 -653
- package/tests/unit/coordination/task-executor.test.ts +0 -810
- package/tests/unit/domains/chaos-resilience/chaos-engineer.test.ts +0 -484
- package/tests/unit/domains/chaos-resilience/load-tester.test.ts +0 -559
- package/tests/unit/domains/chaos-resilience/performance-profiler.test.ts +0 -490
- package/tests/unit/domains/code-intelligence/impact-analyzer.test.ts +0 -560
- package/tests/unit/domains/code-intelligence/knowledge-graph.test.ts +0 -460
- package/tests/unit/domains/code-intelligence/semantic-analyzer.test.ts +0 -584
- package/tests/unit/domains/contract-testing/api-compatibility.test.ts +0 -483
- package/tests/unit/domains/contract-testing/contract-validator.test.ts +0 -370
- package/tests/unit/domains/contract-testing/schema-validator.test.ts +0 -610
- package/tests/unit/domains/coverage-analysis/coverage-embedder.test.ts +0 -298
- package/tests/unit/domains/coverage-analysis/hnsw-index.test.ts +0 -292
- package/tests/unit/domains/coverage-analysis/sublinear-analyzer.test.ts +0 -506
- package/tests/unit/domains/defect-intelligence/defect-predictor.test.ts +0 -370
- package/tests/unit/domains/defect-intelligence/pattern-learner.test.ts +0 -546
- package/tests/unit/domains/defect-intelligence/root-cause-analyzer.test.ts +0 -534
- package/tests/unit/domains/learning-optimization/learning-coordinator.test.ts +0 -541
- package/tests/unit/domains/learning-optimization/metrics-optimizer.test.ts +0 -552
- package/tests/unit/domains/learning-optimization/production-intel.test.ts +0 -589
- package/tests/unit/domains/learning-optimization/transfer-specialist.test.ts +0 -453
- package/tests/unit/domains/quality-assessment/coherence-gate.test.ts +0 -1006
- package/tests/unit/domains/quality-assessment/deployment-advisor.test.ts +0 -515
- package/tests/unit/domains/quality-assessment/quality-analyzer.test.ts +0 -401
- package/tests/unit/domains/quality-assessment/quality-gate.test.ts +0 -324
- package/tests/unit/domains/requirements-validation/bdd-scenario-writer.test.ts +0 -479
- package/tests/unit/domains/requirements-validation/requirements-validator.test.ts +0 -452
- package/tests/unit/domains/requirements-validation/testability-scorer.test.ts +0 -505
- package/tests/unit/domains/security-compliance/compliance-validator.test.ts +0 -500
- package/tests/unit/domains/security-compliance/security-auditor.test.ts +0 -498
- package/tests/unit/domains/security-compliance/security-scanner.test.ts +0 -412
- package/tests/unit/domains/visual-accessibility/accessibility-tester.test.ts +0 -432
- package/tests/unit/domains/visual-accessibility/responsive-tester.test.ts +0 -506
- package/tests/unit/domains/visual-accessibility/visual-tester.test.ts +0 -412
- package/tests/unit/early-exit/early-exit-controller.test.ts +0 -548
- package/tests/unit/early-exit/early-exit-decision.test.ts +0 -617
- package/tests/unit/early-exit/index.test.ts +0 -254
- package/tests/unit/early-exit/quality-signal.test.ts +0 -589
- package/tests/unit/early-exit/speculative-executor.test.ts +0 -453
- package/tests/unit/feedback/coverage-learner.test.ts +0 -288
- package/tests/unit/feedback/feedback-loop.test.ts +0 -458
- package/tests/unit/feedback/pattern-promotion.test.ts +0 -390
- package/tests/unit/feedback/quality-score-calculator.test.ts +0 -364
- package/tests/unit/feedback/test-outcome-tracker.test.ts +0 -243
- package/tests/unit/init/init-wizard.test.ts +0 -881
- package/tests/unit/init/project-analyzer.test.ts +0 -807
- package/tests/unit/init/self-configurator.test.ts +0 -493
- package/tests/unit/integrations/ruvector/ast-complexity.test.ts +0 -240
- package/tests/unit/integrations/ruvector/coverage-router.test.ts +0 -366
- package/tests/unit/integrations/ruvector/diff-risk-classifier.test.ts +0 -340
- package/tests/unit/integrations/ruvector/graph-boundaries.test.ts +0 -355
- package/tests/unit/integrations/ruvector/q-learning-router.test.ts +0 -314
- package/tests/unit/kernel/agent-coordinator.test.ts +0 -220
- package/tests/unit/kernel/event-bus.test.ts +0 -197
- package/tests/unit/learning/qe-reasoning-bank.test.ts +0 -666
- package/tests/unit/learning/real-qe-reasoning-bank.benchmark.test.ts +0 -415
- package/tests/unit/mcp/mcp-server.test.ts +0 -544
- package/tests/unit/mcp/metrics/metrics-collector.test.ts +0 -340
- package/tests/unit/mcp/security/cve-prevention.test.ts +0 -512
- package/tests/unit/mcp/security/oauth21-provider.test.ts +0 -624
- package/tests/unit/mcp/security/rate-limiter.test.ts +0 -410
- package/tests/unit/mcp/security/sampling-server.test.ts +0 -420
- package/tests/unit/mcp/security/schema-validator.test.ts +0 -494
- package/tests/unit/mcp/tools/base.test.ts +0 -336
- package/tests/unit/mcp/tools/domain-tools.test.ts +0 -759
- package/tests/unit/mcp/tools/registry.test.ts +0 -240
- package/tests/unit/neural-optimizer/replay-buffer.test.ts +0 -403
- package/tests/unit/neural-optimizer/swarm-topology.test.ts +0 -473
- package/tests/unit/neural-optimizer/topology-optimizer.test.ts +0 -595
- package/tests/unit/neural-optimizer/value-network.test.ts +0 -343
- package/tests/unit/optimization/auto-tuner.test.ts +0 -506
- package/tests/unit/optimization/metric-collectors.test.ts +0 -352
- package/tests/unit/optimization/qe-workers.test.ts +0 -407
- package/tests/unit/optimization/tuning-algorithm.test.ts +0 -467
- package/tests/unit/routing/qe-agent-registry.test.ts +0 -229
- package/tests/unit/routing/qe-task-router.test.ts +0 -390
- package/tests/unit/routing/routing-feedback.test.ts +0 -339
- package/tests/unit/shared/embeddings/nomic-embedder.test.ts +0 -419
- package/tests/unit/shared/http/http-client.test.ts +0 -719
- package/tests/unit/shared/io/file-reader.test.ts +0 -511
- package/tests/unit/shared/llm/cache.test.ts +0 -391
- package/tests/unit/shared/llm/circuit-breaker.test.ts +0 -293
- package/tests/unit/shared/llm/cost-tracker.test.ts +0 -431
- package/tests/unit/shared/llm/provider-manager.test.ts +0 -550
- package/tests/unit/shared/llm/providers.test.ts +0 -532
- package/tests/unit/shared/parsers/typescript-parser.test.ts +0 -693
- package/tests/unit/shared/value-objects.test.ts +0 -184
- package/tests/unit/strange-loop/strange-loop.test.ts +0 -1170
- package/tests/unit/workers/base-worker.test.ts +0 -341
- package/tests/unit/workers/daemon.test.ts +0 -291
- package/tests/unit/workers/worker-manager.test.ts +0 -284
- package/tsconfig.json +0 -32
- package/vitest.config.ts +0 -27
|
@@ -1,747 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agentic QE v3 - Sublinear Coverage Analyzer
|
|
3
|
-
*
|
|
4
|
-
* This is the main implementation of ADR-003: Sublinear Algorithms for Coverage Analysis.
|
|
5
|
-
* Uses HNSW (Hierarchical Navigable Small World) indexing for O(log n) coverage gap
|
|
6
|
-
* detection across large codebases.
|
|
7
|
-
*
|
|
8
|
-
* Performance characteristics (per ADR-003):
|
|
9
|
-
* | Codebase Size | Traditional O(n) | v3 O(log n) | Improvement |
|
|
10
|
-
* |---------------|-----------------|-------------|-------------|
|
|
11
|
-
* | 1,000 files | 1,000 ops | 10 ops | 100x |
|
|
12
|
-
* | 10,000 files | 10,000 ops | 13 ops | 770x |
|
|
13
|
-
* | 100,000 files | 100,000 ops | 17 ops | 5,900x |
|
|
14
|
-
*
|
|
15
|
-
* Success metrics target: <100ms gap detection on 100k files
|
|
16
|
-
*
|
|
17
|
-
* @module coverage-analysis/sublinear-analyzer
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { Result, ok, err, Severity } from '../../../shared/types';
|
|
21
|
-
import { MemoryBackend } from '../../../kernel/interfaces';
|
|
22
|
-
import {
|
|
23
|
-
CoverageData,
|
|
24
|
-
FileCoverage,
|
|
25
|
-
CoverageGaps,
|
|
26
|
-
CoverageGap,
|
|
27
|
-
SimilarPatterns,
|
|
28
|
-
} from '../interfaces';
|
|
29
|
-
import {
|
|
30
|
-
HNSWIndex,
|
|
31
|
-
IHNSWIndex,
|
|
32
|
-
HNSWSearchResult,
|
|
33
|
-
HNSWIndexStats,
|
|
34
|
-
CoverageVectorMetadata,
|
|
35
|
-
createHNSWIndex,
|
|
36
|
-
} from './hnsw-index';
|
|
37
|
-
import {
|
|
38
|
-
CoverageEmbedder,
|
|
39
|
-
ICoverageEmbedder,
|
|
40
|
-
CoverageQuery,
|
|
41
|
-
createCoverageEmbedder,
|
|
42
|
-
} from './coverage-embedder';
|
|
43
|
-
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// Sublinear Analyzer Configuration
|
|
46
|
-
// ============================================================================
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Configuration for the sublinear coverage analyzer
|
|
50
|
-
*/
|
|
51
|
-
export interface SublinearAnalyzerConfig {
|
|
52
|
-
/** Number of nearest neighbors to search (default: 10) */
|
|
53
|
-
searchK: number;
|
|
54
|
-
/** Minimum coverage threshold to identify gaps (default: 80) */
|
|
55
|
-
coverageThreshold: number;
|
|
56
|
-
/** Minimum risk score to include in results (default: 0.3) */
|
|
57
|
-
riskThreshold: number;
|
|
58
|
-
/** Maximum results to return (default: 100) */
|
|
59
|
-
maxResults: number;
|
|
60
|
-
/** Enable automatic index updates on analyze (default: true) */
|
|
61
|
-
autoIndex: boolean;
|
|
62
|
-
/** Batch size for bulk operations (default: 100) */
|
|
63
|
-
batchSize: number;
|
|
64
|
-
/** Vector dimensions for embeddings (default: 128) */
|
|
65
|
-
dimensions: number;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Default analyzer configuration
|
|
70
|
-
*/
|
|
71
|
-
export const DEFAULT_ANALYZER_CONFIG: SublinearAnalyzerConfig = {
|
|
72
|
-
searchK: 10,
|
|
73
|
-
coverageThreshold: 80,
|
|
74
|
-
riskThreshold: 0.3,
|
|
75
|
-
maxResults: 100,
|
|
76
|
-
autoIndex: true,
|
|
77
|
-
batchSize: 100,
|
|
78
|
-
dimensions: 128,
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
// ============================================================================
|
|
82
|
-
// Sublinear Analyzer Interface
|
|
83
|
-
// ============================================================================
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Interface for sublinear coverage analysis operations
|
|
87
|
-
*/
|
|
88
|
-
export interface ISublinearCoverageAnalyzer {
|
|
89
|
-
/** Initialize the analyzer and HNSW index */
|
|
90
|
-
initialize(): Promise<void>;
|
|
91
|
-
|
|
92
|
-
/** Index coverage data for O(log n) search */
|
|
93
|
-
indexCoverageData(data: CoverageData): Promise<IndexingResult>;
|
|
94
|
-
|
|
95
|
-
/** Find coverage gaps using O(log n) HNSW search */
|
|
96
|
-
findGapsSublinear(query: CoverageQuery): Promise<Result<CoverageGaps, Error>>;
|
|
97
|
-
|
|
98
|
-
/** Find similar coverage patterns using vector similarity */
|
|
99
|
-
findSimilarPatterns(gap: CoverageGap, k: number): Promise<Result<SimilarPatterns, Error>>;
|
|
100
|
-
|
|
101
|
-
/** Detect high-risk coverage zones using embeddings */
|
|
102
|
-
detectRiskZones(threshold: number): Promise<Result<RiskZone[], Error>>;
|
|
103
|
-
|
|
104
|
-
/** Get analyzer statistics */
|
|
105
|
-
getStats(): Promise<SublinearAnalyzerStats>;
|
|
106
|
-
|
|
107
|
-
/** Clear all indexed data */
|
|
108
|
-
clearIndex(): Promise<void>;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Result of indexing operation
|
|
113
|
-
*/
|
|
114
|
-
export interface IndexingResult {
|
|
115
|
-
/** Number of files indexed */
|
|
116
|
-
filesIndexed: number;
|
|
117
|
-
/** Time taken in milliseconds */
|
|
118
|
-
indexingTimeMs: number;
|
|
119
|
-
/** Number of vectors stored */
|
|
120
|
-
vectorsStored: number;
|
|
121
|
-
/** Any errors encountered */
|
|
122
|
-
errors: string[];
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* High-risk coverage zone
|
|
127
|
-
*/
|
|
128
|
-
export interface RiskZone {
|
|
129
|
-
/** File path */
|
|
130
|
-
file: string;
|
|
131
|
-
/** Risk score (0-1) */
|
|
132
|
-
riskScore: number;
|
|
133
|
-
/** Severity level */
|
|
134
|
-
severity: Severity;
|
|
135
|
-
/** Number of uncovered lines */
|
|
136
|
-
uncoveredLines: number;
|
|
137
|
-
/** Number of uncovered branches */
|
|
138
|
-
uncoveredBranches: number;
|
|
139
|
-
/** Recommended actions */
|
|
140
|
-
recommendations: string[];
|
|
141
|
-
/** Similar files with same pattern */
|
|
142
|
-
similarFiles: string[];
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Analyzer statistics
|
|
147
|
-
*/
|
|
148
|
-
export interface SublinearAnalyzerStats {
|
|
149
|
-
/** Total vectors indexed */
|
|
150
|
-
totalVectors: number;
|
|
151
|
-
/** Total files tracked */
|
|
152
|
-
totalFiles: number;
|
|
153
|
-
/** Index size in bytes */
|
|
154
|
-
indexSizeBytes: number;
|
|
155
|
-
/** Average search latency */
|
|
156
|
-
avgSearchLatencyMs: number;
|
|
157
|
-
/** P95 search latency */
|
|
158
|
-
p95SearchLatencyMs: number;
|
|
159
|
-
/** P99 search latency */
|
|
160
|
-
p99SearchLatencyMs: number;
|
|
161
|
-
/** Total search operations */
|
|
162
|
-
searchOperations: number;
|
|
163
|
-
/** Time since last index update */
|
|
164
|
-
lastIndexUpdateMs: number;
|
|
165
|
-
/** Performance vs linear scan improvement factor */
|
|
166
|
-
performanceImprovement: number;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// ============================================================================
|
|
170
|
-
// Sublinear Coverage Analyzer Implementation
|
|
171
|
-
// ============================================================================
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Sublinear Coverage Analyzer
|
|
175
|
-
*
|
|
176
|
-
* Implements O(log n) coverage gap detection using HNSW vector indexing.
|
|
177
|
-
* This is the core implementation for ADR-003 performance targets.
|
|
178
|
-
*
|
|
179
|
-
* Key features:
|
|
180
|
-
* - O(log n) gap detection via HNSW approximate nearest neighbor search
|
|
181
|
-
* - Dense coverage embeddings capture coverage patterns
|
|
182
|
-
* - Batch indexing for efficient bulk operations
|
|
183
|
-
* - Risk zone detection using vector similarity clustering
|
|
184
|
-
* - <100ms target for 100k file codebases
|
|
185
|
-
*
|
|
186
|
-
* @example
|
|
187
|
-
* ```typescript
|
|
188
|
-
* const analyzer = new SublinearCoverageAnalyzer(memoryBackend);
|
|
189
|
-
* await analyzer.initialize();
|
|
190
|
-
* await analyzer.indexCoverageData(coverageData);
|
|
191
|
-
*
|
|
192
|
-
* // O(log n) gap detection
|
|
193
|
-
* const gaps = await analyzer.findGapsSublinear({ maxLineCoverage: 60 });
|
|
194
|
-
*
|
|
195
|
-
* // Find similar patterns
|
|
196
|
-
* const similar = await analyzer.findSimilarPatterns(gap, 5);
|
|
197
|
-
* ```
|
|
198
|
-
*/
|
|
199
|
-
export class SublinearCoverageAnalyzer implements ISublinearCoverageAnalyzer {
|
|
200
|
-
private readonly config: SublinearAnalyzerConfig;
|
|
201
|
-
private readonly hnswIndex: IHNSWIndex;
|
|
202
|
-
private readonly embedder: ICoverageEmbedder;
|
|
203
|
-
private lastIndexUpdate: number = 0;
|
|
204
|
-
private fileCount: number = 0;
|
|
205
|
-
private initialized: boolean = false;
|
|
206
|
-
|
|
207
|
-
constructor(
|
|
208
|
-
private readonly memory: MemoryBackend,
|
|
209
|
-
config: Partial<SublinearAnalyzerConfig> = {}
|
|
210
|
-
) {
|
|
211
|
-
this.config = { ...DEFAULT_ANALYZER_CONFIG, ...config };
|
|
212
|
-
this.hnswIndex = createHNSWIndex(memory, {
|
|
213
|
-
dimensions: this.config.dimensions,
|
|
214
|
-
namespace: 'coverage-sublinear',
|
|
215
|
-
});
|
|
216
|
-
this.embedder = createCoverageEmbedder({
|
|
217
|
-
dimensions: this.config.dimensions,
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Initialize the analyzer
|
|
223
|
-
*/
|
|
224
|
-
async initialize(): Promise<void> {
|
|
225
|
-
if (this.initialized) return;
|
|
226
|
-
|
|
227
|
-
// Load existing index stats to get file count
|
|
228
|
-
try {
|
|
229
|
-
const stats = await this.hnswIndex.getStats();
|
|
230
|
-
this.fileCount = stats.vectorCount;
|
|
231
|
-
} catch {
|
|
232
|
-
this.fileCount = 0;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
this.initialized = true;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Index coverage data for O(log n) search
|
|
240
|
-
*
|
|
241
|
-
* This method creates dense vector embeddings for each file's coverage
|
|
242
|
-
* data and stores them in the HNSW index for efficient similarity search.
|
|
243
|
-
*
|
|
244
|
-
* Time complexity: O(n log n) for n files during indexing
|
|
245
|
-
* Search complexity: O(log n) after indexing
|
|
246
|
-
*
|
|
247
|
-
* @param data - Coverage data to index
|
|
248
|
-
* @returns Indexing result with statistics
|
|
249
|
-
*/
|
|
250
|
-
async indexCoverageData(data: CoverageData): Promise<IndexingResult> {
|
|
251
|
-
const startTime = performance.now();
|
|
252
|
-
const errors: string[] = [];
|
|
253
|
-
let vectorsStored = 0;
|
|
254
|
-
|
|
255
|
-
// Process files in batches to avoid memory pressure
|
|
256
|
-
for (let i = 0; i < data.files.length; i += this.config.batchSize) {
|
|
257
|
-
const batch = data.files.slice(i, i + this.config.batchSize);
|
|
258
|
-
|
|
259
|
-
const batchItems = batch.map((file) => {
|
|
260
|
-
try {
|
|
261
|
-
const result = this.embedder.embedFileCoverage(file);
|
|
262
|
-
return {
|
|
263
|
-
key: `file:${file.path}`,
|
|
264
|
-
vector: result.vector,
|
|
265
|
-
metadata: result.metadata,
|
|
266
|
-
};
|
|
267
|
-
} catch (error) {
|
|
268
|
-
errors.push(`Failed to embed ${file.path}: ${error}`);
|
|
269
|
-
return null;
|
|
270
|
-
}
|
|
271
|
-
}).filter((item): item is NonNullable<typeof item> => item !== null);
|
|
272
|
-
|
|
273
|
-
await this.hnswIndex.batchInsert(batchItems);
|
|
274
|
-
vectorsStored += batchItems.length;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
this.lastIndexUpdate = Date.now();
|
|
278
|
-
this.fileCount = data.files.length;
|
|
279
|
-
|
|
280
|
-
const endTime = performance.now();
|
|
281
|
-
|
|
282
|
-
return {
|
|
283
|
-
filesIndexed: data.files.length,
|
|
284
|
-
indexingTimeMs: endTime - startTime,
|
|
285
|
-
vectorsStored,
|
|
286
|
-
errors,
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Find coverage gaps using O(log n) HNSW search
|
|
292
|
-
*
|
|
293
|
-
* This is the core sublinear operation. Instead of scanning all files
|
|
294
|
-
* linearly, we use vector similarity to find files matching the query
|
|
295
|
-
* criteria efficiently.
|
|
296
|
-
*
|
|
297
|
-
* Performance: O(log n) operations for n indexed files
|
|
298
|
-
* Target: <100ms for 100k files
|
|
299
|
-
*
|
|
300
|
-
* @param query - Query parameters for gap detection
|
|
301
|
-
* @returns Coverage gaps matching the query
|
|
302
|
-
*/
|
|
303
|
-
async findGapsSublinear(query: CoverageQuery): Promise<Result<CoverageGaps, Error>> {
|
|
304
|
-
try {
|
|
305
|
-
const startTime = performance.now();
|
|
306
|
-
|
|
307
|
-
// Create query embedding
|
|
308
|
-
const queryResult = this.embedder.embedQuery(query);
|
|
309
|
-
|
|
310
|
-
// Perform O(log n) HNSW search
|
|
311
|
-
const searchResults = await this.hnswIndex.search(
|
|
312
|
-
queryResult.vector,
|
|
313
|
-
this.config.searchK * 2 // Search more to allow filtering
|
|
314
|
-
);
|
|
315
|
-
|
|
316
|
-
// Filter results by query criteria
|
|
317
|
-
const filteredResults = this.filterByQueryCriteria(searchResults, query);
|
|
318
|
-
|
|
319
|
-
// Convert to coverage gaps
|
|
320
|
-
const gaps = await this.convertToGaps(filteredResults, query);
|
|
321
|
-
|
|
322
|
-
// Sort by risk score
|
|
323
|
-
gaps.sort((a, b) => b.riskScore - a.riskScore);
|
|
324
|
-
|
|
325
|
-
// Limit results
|
|
326
|
-
const limitedGaps = gaps.slice(0, this.config.maxResults);
|
|
327
|
-
|
|
328
|
-
const endTime = performance.now();
|
|
329
|
-
const searchTimeMs = endTime - startTime;
|
|
330
|
-
|
|
331
|
-
// Calculate total uncovered lines
|
|
332
|
-
const totalUncoveredLines = limitedGaps.reduce(
|
|
333
|
-
(sum, gap) => sum + gap.lines.length,
|
|
334
|
-
0
|
|
335
|
-
);
|
|
336
|
-
|
|
337
|
-
// Estimate effort
|
|
338
|
-
const estimatedEffort = this.estimateEffort(totalUncoveredLines);
|
|
339
|
-
|
|
340
|
-
// Verify performance target
|
|
341
|
-
if (searchTimeMs > 100) {
|
|
342
|
-
console.warn(
|
|
343
|
-
`Sublinear search took ${searchTimeMs.toFixed(2)}ms, ` +
|
|
344
|
-
`exceeding 100ms target for ${this.fileCount} files`
|
|
345
|
-
);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
return ok({
|
|
349
|
-
gaps: limitedGaps,
|
|
350
|
-
totalUncoveredLines,
|
|
351
|
-
estimatedEffort,
|
|
352
|
-
});
|
|
353
|
-
} catch (error) {
|
|
354
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/**
|
|
359
|
-
* Find similar coverage patterns using vector similarity
|
|
360
|
-
*
|
|
361
|
-
* Uses HNSW to find files with similar coverage characteristics
|
|
362
|
-
* to a given gap pattern.
|
|
363
|
-
*
|
|
364
|
-
* @param gap - Coverage gap to find similar patterns for
|
|
365
|
-
* @param k - Number of similar patterns to return
|
|
366
|
-
* @returns Similar patterns with similarity scores
|
|
367
|
-
*/
|
|
368
|
-
async findSimilarPatterns(
|
|
369
|
-
gap: CoverageGap,
|
|
370
|
-
k: number
|
|
371
|
-
): Promise<Result<SimilarPatterns, Error>> {
|
|
372
|
-
try {
|
|
373
|
-
const startTime = performance.now();
|
|
374
|
-
|
|
375
|
-
// Create gap embedding
|
|
376
|
-
const embeddingResult = this.embedder.embedCoverageGap(gap);
|
|
377
|
-
|
|
378
|
-
// O(log n) search for similar patterns
|
|
379
|
-
const searchResults = await this.hnswIndex.search(embeddingResult.vector, k);
|
|
380
|
-
|
|
381
|
-
// Convert to similar patterns format
|
|
382
|
-
const patterns = searchResults.map((result) => ({
|
|
383
|
-
gap: this.createGapFromMetadata(result),
|
|
384
|
-
similarity: result.score,
|
|
385
|
-
}));
|
|
386
|
-
|
|
387
|
-
const searchTime = performance.now() - startTime;
|
|
388
|
-
|
|
389
|
-
return ok({
|
|
390
|
-
patterns,
|
|
391
|
-
searchTime,
|
|
392
|
-
});
|
|
393
|
-
} catch (error) {
|
|
394
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Detect high-risk coverage zones using clustering
|
|
400
|
-
*
|
|
401
|
-
* Identifies files with similar high-risk coverage patterns
|
|
402
|
-
* that may require coordinated test improvements.
|
|
403
|
-
*
|
|
404
|
-
* @param threshold - Minimum risk score to include
|
|
405
|
-
* @returns High-risk zones with similar files grouped
|
|
406
|
-
*/
|
|
407
|
-
async detectRiskZones(threshold: number): Promise<Result<RiskZone[], Error>> {
|
|
408
|
-
try {
|
|
409
|
-
// Create query for high-risk files
|
|
410
|
-
const queryResult = this.embedder.embedQuery({
|
|
411
|
-
minRiskScore: threshold,
|
|
412
|
-
maxLineCoverage: this.config.coverageThreshold,
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
// Search for high-risk patterns
|
|
416
|
-
const searchResults = await this.hnswIndex.search(
|
|
417
|
-
queryResult.vector,
|
|
418
|
-
this.config.maxResults
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
// Group by similarity to identify risk zones
|
|
422
|
-
const zones = this.clusterRiskZones(searchResults, threshold);
|
|
423
|
-
|
|
424
|
-
return ok(zones);
|
|
425
|
-
} catch (error) {
|
|
426
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
/**
|
|
431
|
-
* Get analyzer statistics
|
|
432
|
-
*
|
|
433
|
-
* @returns Current statistics including performance metrics
|
|
434
|
-
*/
|
|
435
|
-
async getStats(): Promise<SublinearAnalyzerStats> {
|
|
436
|
-
const indexStats = await this.hnswIndex.getStats();
|
|
437
|
-
|
|
438
|
-
// Calculate performance improvement vs linear scan
|
|
439
|
-
// For HNSW: O(log n) vs O(n), improvement is approximately n / log2(n)
|
|
440
|
-
const n = Math.max(1, indexStats.vectorCount);
|
|
441
|
-
const log2n = Math.max(1, Math.log2(n));
|
|
442
|
-
const performanceImprovement = n / log2n;
|
|
443
|
-
|
|
444
|
-
return {
|
|
445
|
-
totalVectors: indexStats.vectorCount,
|
|
446
|
-
totalFiles: this.fileCount,
|
|
447
|
-
indexSizeBytes: indexStats.indexSizeBytes,
|
|
448
|
-
avgSearchLatencyMs: indexStats.avgSearchLatencyMs,
|
|
449
|
-
p95SearchLatencyMs: indexStats.p95SearchLatencyMs,
|
|
450
|
-
p99SearchLatencyMs: indexStats.p99SearchLatencyMs,
|
|
451
|
-
searchOperations: indexStats.searchOperations,
|
|
452
|
-
lastIndexUpdateMs: this.lastIndexUpdate > 0 ? Date.now() - this.lastIndexUpdate : 0,
|
|
453
|
-
performanceImprovement,
|
|
454
|
-
};
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
/**
|
|
458
|
-
* Clear all indexed data
|
|
459
|
-
*/
|
|
460
|
-
async clearIndex(): Promise<void> {
|
|
461
|
-
await this.hnswIndex.clear();
|
|
462
|
-
this.fileCount = 0;
|
|
463
|
-
this.lastIndexUpdate = 0;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// ============================================================================
|
|
467
|
-
// Private Helper Methods
|
|
468
|
-
// ============================================================================
|
|
469
|
-
|
|
470
|
-
private filterByQueryCriteria(
|
|
471
|
-
results: HNSWSearchResult[],
|
|
472
|
-
query: CoverageQuery
|
|
473
|
-
): HNSWSearchResult[] {
|
|
474
|
-
return results.filter((result) => {
|
|
475
|
-
const metadata = result.metadata;
|
|
476
|
-
if (!metadata) return false;
|
|
477
|
-
|
|
478
|
-
// Apply coverage filters
|
|
479
|
-
if (query.minLineCoverage !== undefined && metadata.lineCoverage < query.minLineCoverage) {
|
|
480
|
-
return false;
|
|
481
|
-
}
|
|
482
|
-
if (query.maxLineCoverage !== undefined && metadata.lineCoverage > query.maxLineCoverage) {
|
|
483
|
-
return false;
|
|
484
|
-
}
|
|
485
|
-
if (query.minBranchCoverage !== undefined && metadata.branchCoverage < query.minBranchCoverage) {
|
|
486
|
-
return false;
|
|
487
|
-
}
|
|
488
|
-
if (query.maxBranchCoverage !== undefined && metadata.branchCoverage > query.maxBranchCoverage) {
|
|
489
|
-
return false;
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
// Apply risk filters
|
|
493
|
-
if (query.minRiskScore !== undefined && metadata.riskScore < query.minRiskScore) {
|
|
494
|
-
return false;
|
|
495
|
-
}
|
|
496
|
-
if (query.maxRiskScore !== undefined && metadata.riskScore > query.maxRiskScore) {
|
|
497
|
-
return false;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// Apply uncovered lines filter
|
|
501
|
-
if (query.maxUncoveredLines !== undefined && metadata.uncoveredLineCount > query.maxUncoveredLines) {
|
|
502
|
-
return false;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
// Apply file pattern filter
|
|
506
|
-
if (query.filePattern && !metadata.filePath.includes(query.filePattern)) {
|
|
507
|
-
return false;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
return true;
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
private async convertToGaps(
|
|
515
|
-
results: HNSWSearchResult[],
|
|
516
|
-
query: CoverageQuery
|
|
517
|
-
): Promise<CoverageGap[]> {
|
|
518
|
-
return results.map((result) => {
|
|
519
|
-
const metadata = result.metadata!;
|
|
520
|
-
|
|
521
|
-
// Determine severity based on risk score
|
|
522
|
-
const severity = this.riskScoreToSeverity(metadata.riskScore);
|
|
523
|
-
|
|
524
|
-
// Generate recommendation
|
|
525
|
-
const recommendation = this.generateRecommendation(metadata, severity);
|
|
526
|
-
|
|
527
|
-
// Generate gap ID from file path
|
|
528
|
-
const id = this.generateGapId(metadata.filePath);
|
|
529
|
-
|
|
530
|
-
return {
|
|
531
|
-
id,
|
|
532
|
-
file: metadata.filePath,
|
|
533
|
-
lines: this.generateUncoveredLineEstimate(metadata),
|
|
534
|
-
branches: this.generateUncoveredBranchEstimate(metadata),
|
|
535
|
-
riskScore: metadata.riskScore,
|
|
536
|
-
severity,
|
|
537
|
-
recommendation,
|
|
538
|
-
};
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
private createGapFromMetadata(result: HNSWSearchResult): CoverageGap {
|
|
543
|
-
const metadata = result.metadata;
|
|
544
|
-
|
|
545
|
-
if (!metadata) {
|
|
546
|
-
return {
|
|
547
|
-
id: result.key,
|
|
548
|
-
file: 'unknown',
|
|
549
|
-
lines: [],
|
|
550
|
-
branches: [],
|
|
551
|
-
riskScore: 0,
|
|
552
|
-
severity: 'low',
|
|
553
|
-
recommendation: 'Unable to retrieve metadata',
|
|
554
|
-
};
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
return {
|
|
558
|
-
id: this.generateGapId(metadata.filePath),
|
|
559
|
-
file: metadata.filePath,
|
|
560
|
-
lines: this.generateUncoveredLineEstimate(metadata),
|
|
561
|
-
branches: this.generateUncoveredBranchEstimate(metadata),
|
|
562
|
-
riskScore: metadata.riskScore,
|
|
563
|
-
severity: this.riskScoreToSeverity(metadata.riskScore),
|
|
564
|
-
recommendation: this.generateRecommendation(
|
|
565
|
-
metadata,
|
|
566
|
-
this.riskScoreToSeverity(metadata.riskScore)
|
|
567
|
-
),
|
|
568
|
-
};
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
private clusterRiskZones(
|
|
572
|
-
results: HNSWSearchResult[],
|
|
573
|
-
threshold: number
|
|
574
|
-
): RiskZone[] {
|
|
575
|
-
// Filter to high-risk only
|
|
576
|
-
const highRisk = results.filter(
|
|
577
|
-
(r) => r.metadata && r.metadata.riskScore >= threshold
|
|
578
|
-
);
|
|
579
|
-
|
|
580
|
-
// Group by similarity (using simple threshold-based clustering)
|
|
581
|
-
const zones: RiskZone[] = [];
|
|
582
|
-
const processed = new Set<string>();
|
|
583
|
-
|
|
584
|
-
for (const result of highRisk) {
|
|
585
|
-
const metadata = result.metadata!;
|
|
586
|
-
if (processed.has(metadata.filePath)) continue;
|
|
587
|
-
|
|
588
|
-
processed.add(metadata.filePath);
|
|
589
|
-
|
|
590
|
-
// Find similar files
|
|
591
|
-
const similar = highRisk
|
|
592
|
-
.filter(
|
|
593
|
-
(r) =>
|
|
594
|
-
r.metadata &&
|
|
595
|
-
!processed.has(r.metadata.filePath) &&
|
|
596
|
-
r.score >= 0.7 // High similarity threshold
|
|
597
|
-
)
|
|
598
|
-
.map((r) => r.metadata!.filePath);
|
|
599
|
-
|
|
600
|
-
// Mark similar files as processed
|
|
601
|
-
similar.forEach((f) => processed.add(f));
|
|
602
|
-
|
|
603
|
-
zones.push({
|
|
604
|
-
file: metadata.filePath,
|
|
605
|
-
riskScore: metadata.riskScore,
|
|
606
|
-
severity: this.riskScoreToSeverity(metadata.riskScore),
|
|
607
|
-
uncoveredLines: metadata.uncoveredLineCount,
|
|
608
|
-
uncoveredBranches: metadata.uncoveredBranchCount,
|
|
609
|
-
recommendations: this.generateZoneRecommendations(metadata),
|
|
610
|
-
similarFiles: similar,
|
|
611
|
-
});
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
// Sort by risk score
|
|
615
|
-
zones.sort((a, b) => b.riskScore - a.riskScore);
|
|
616
|
-
|
|
617
|
-
return zones;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
private riskScoreToSeverity(riskScore: number): Severity {
|
|
621
|
-
if (riskScore >= 0.8) return 'critical';
|
|
622
|
-
if (riskScore >= 0.6) return 'high';
|
|
623
|
-
if (riskScore >= 0.3) return 'medium';
|
|
624
|
-
return 'low';
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
private generateRecommendation(metadata: CoverageVectorMetadata, severity: Severity): string {
|
|
628
|
-
const uncovered = metadata.uncoveredLineCount;
|
|
629
|
-
const file = metadata.filePath.split('/').pop() || metadata.filePath;
|
|
630
|
-
|
|
631
|
-
let rec = `Add tests for ${uncovered} uncovered lines in ${file}`;
|
|
632
|
-
|
|
633
|
-
if (severity === 'critical') {
|
|
634
|
-
rec += '. CRITICAL: This file has very low coverage and high risk.';
|
|
635
|
-
} else if (severity === 'high') {
|
|
636
|
-
rec += '. HIGH priority for test coverage.';
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
if (metadata.uncoveredBranchCount > 5) {
|
|
640
|
-
rec += ` Focus on ${metadata.uncoveredBranchCount} uncovered branches.`;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
return rec;
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
private generateZoneRecommendations(metadata: CoverageVectorMetadata): string[] {
|
|
647
|
-
const recommendations: string[] = [];
|
|
648
|
-
|
|
649
|
-
if (metadata.riskScore >= 0.8) {
|
|
650
|
-
recommendations.push(
|
|
651
|
-
'CRITICAL: Immediate test coverage required for this risk zone.'
|
|
652
|
-
);
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
if (metadata.lineCoverage < 50) {
|
|
656
|
-
recommendations.push(
|
|
657
|
-
'Line coverage is below 50%. Add comprehensive unit tests.'
|
|
658
|
-
);
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
if (metadata.branchCoverage < 50) {
|
|
662
|
-
recommendations.push(
|
|
663
|
-
'Branch coverage is below 50%. Add tests for conditional logic.'
|
|
664
|
-
);
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
if (metadata.uncoveredLineCount > 50) {
|
|
668
|
-
recommendations.push(
|
|
669
|
-
'Consider breaking this file into smaller, more testable modules.'
|
|
670
|
-
);
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
return recommendations;
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
private generateUncoveredLineEstimate(metadata: CoverageVectorMetadata): number[] {
|
|
677
|
-
// Generate estimated line numbers based on metadata
|
|
678
|
-
// In production, this would be populated from actual coverage data
|
|
679
|
-
const count = metadata.uncoveredLineCount;
|
|
680
|
-
if (count === 0) return [];
|
|
681
|
-
|
|
682
|
-
const totalLines = metadata.totalLines || 100;
|
|
683
|
-
const coverage = metadata.lineCoverage / 100;
|
|
684
|
-
|
|
685
|
-
// Distribute uncovered lines across the file
|
|
686
|
-
const lines: number[] = [];
|
|
687
|
-
const step = Math.max(1, Math.floor(totalLines / count));
|
|
688
|
-
|
|
689
|
-
for (let i = 0; i < count && lines.length < count; i++) {
|
|
690
|
-
const line = Math.min(totalLines, (i + 1) * step);
|
|
691
|
-
if (!lines.includes(line)) {
|
|
692
|
-
lines.push(line);
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
return lines;
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
private generateUncoveredBranchEstimate(metadata: CoverageVectorMetadata): number[] {
|
|
700
|
-
const count = metadata.uncoveredBranchCount;
|
|
701
|
-
if (count === 0) return [];
|
|
702
|
-
|
|
703
|
-
const totalLines = metadata.totalLines || 100;
|
|
704
|
-
const branches: number[] = [];
|
|
705
|
-
const step = Math.max(1, Math.floor(totalLines / count));
|
|
706
|
-
|
|
707
|
-
for (let i = 0; i < count; i++) {
|
|
708
|
-
branches.push(Math.min(totalLines, (i + 1) * step));
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
return branches;
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
private generateGapId(filePath: string): string {
|
|
715
|
-
const hash = filePath.split('').reduce((acc, char) => {
|
|
716
|
-
const chr = char.charCodeAt(0);
|
|
717
|
-
return ((acc << 5) - acc + chr) | 0;
|
|
718
|
-
}, 0);
|
|
719
|
-
return `gap-${Math.abs(hash).toString(16)}`;
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
private estimateEffort(uncoveredLines: number): number {
|
|
723
|
-
// Estimate effort in hours
|
|
724
|
-
// Assumes ~12 lines of test code per source line
|
|
725
|
-
// and ~20 lines of test code per hour
|
|
726
|
-
const testLinesNeeded = uncoveredLines * 12;
|
|
727
|
-
return Math.ceil(testLinesNeeded / 20);
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
// ============================================================================
|
|
732
|
-
// Factory Functions
|
|
733
|
-
// ============================================================================
|
|
734
|
-
|
|
735
|
-
/**
|
|
736
|
-
* Create a new sublinear coverage analyzer instance
|
|
737
|
-
*
|
|
738
|
-
* @param memory - Memory backend for storage
|
|
739
|
-
* @param config - Optional configuration overrides
|
|
740
|
-
* @returns Configured sublinear analyzer
|
|
741
|
-
*/
|
|
742
|
-
export function createSublinearAnalyzer(
|
|
743
|
-
memory: MemoryBackend,
|
|
744
|
-
config?: Partial<SublinearAnalyzerConfig>
|
|
745
|
-
): SublinearCoverageAnalyzer {
|
|
746
|
-
return new SublinearCoverageAnalyzer(memory, config);
|
|
747
|
-
}
|