@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,1226 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agentic QE v3 - Compliance Validator Service
|
|
3
|
-
* Validates code against regulatory compliance standards (GDPR, HIPAA, SOC2, PCI-DSS)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
-
import { Result, ok, err } from '../../../shared/types/index.js';
|
|
8
|
-
import {
|
|
9
|
-
CompliancePatternAnalyzer,
|
|
10
|
-
getCompliancePatternAnalyzer,
|
|
11
|
-
} from '../../../shared/security';
|
|
12
|
-
import type { MemoryBackend } from '../../../kernel/interfaces.js';
|
|
13
|
-
import type { FilePath } from '../../../shared/value-objects/index.js';
|
|
14
|
-
import type {
|
|
15
|
-
IComplianceValidationService,
|
|
16
|
-
ComplianceStandard,
|
|
17
|
-
ComplianceRule,
|
|
18
|
-
ComplianceContext,
|
|
19
|
-
ComplianceReport,
|
|
20
|
-
ComplianceViolation,
|
|
21
|
-
GapAnalysis,
|
|
22
|
-
ComplianceGap,
|
|
23
|
-
RemediationAction,
|
|
24
|
-
VulnerabilityLocation,
|
|
25
|
-
} from '../interfaces.js';
|
|
26
|
-
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Service Interface Extensions
|
|
29
|
-
// ============================================================================
|
|
30
|
-
|
|
31
|
-
export interface IExtendedComplianceValidationService extends IComplianceValidationService {
|
|
32
|
-
/**
|
|
33
|
-
* Validate against multiple standards
|
|
34
|
-
*/
|
|
35
|
-
validateMultiple(
|
|
36
|
-
standards: ComplianceStandard[],
|
|
37
|
-
context: ComplianceContext
|
|
38
|
-
): Promise<Result<MultiStandardReport>>;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Check for data handling compliance
|
|
42
|
-
*/
|
|
43
|
-
checkDataHandling(
|
|
44
|
-
files: FilePath[],
|
|
45
|
-
dataTypes: DataType[]
|
|
46
|
-
): Promise<Result<DataHandlingReport>>;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Generate compliance evidence
|
|
50
|
-
*/
|
|
51
|
-
generateEvidence(
|
|
52
|
-
standardId: string,
|
|
53
|
-
context: ComplianceContext
|
|
54
|
-
): Promise<Result<ComplianceEvidence>>;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface MultiStandardReport {
|
|
58
|
-
reports: ComplianceReport[];
|
|
59
|
-
overallScore: number;
|
|
60
|
-
crossCuttingViolations: ComplianceViolation[];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export type DataType = 'pii' | 'phi' | 'financial' | 'credentials' | 'biometric';
|
|
64
|
-
|
|
65
|
-
export interface DataHandlingReport {
|
|
66
|
-
dataTypesFound: Map<DataType, DataLocation[]>;
|
|
67
|
-
violations: ComplianceViolation[];
|
|
68
|
-
recommendations: string[];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface DataLocation {
|
|
72
|
-
file: string;
|
|
73
|
-
line: number;
|
|
74
|
-
context: string;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export interface ComplianceEvidence {
|
|
78
|
-
standardId: string;
|
|
79
|
-
controls: ControlEvidence[];
|
|
80
|
-
generatedAt: Date;
|
|
81
|
-
validUntil: Date;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export interface ControlEvidence {
|
|
85
|
-
controlId: string;
|
|
86
|
-
status: 'implemented' | 'partial' | 'not-implemented';
|
|
87
|
-
evidence: string[];
|
|
88
|
-
lastVerified: Date;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// ============================================================================
|
|
92
|
-
// Configuration
|
|
93
|
-
// ============================================================================
|
|
94
|
-
|
|
95
|
-
export interface ComplianceValidatorConfig {
|
|
96
|
-
customStandards: ComplianceStandard[];
|
|
97
|
-
strictMode: boolean;
|
|
98
|
-
includeRecommended: boolean;
|
|
99
|
-
evidenceRetentionDays: number;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const DEFAULT_CONFIG: ComplianceValidatorConfig = {
|
|
103
|
-
customStandards: [],
|
|
104
|
-
strictMode: false,
|
|
105
|
-
includeRecommended: true,
|
|
106
|
-
evidenceRetentionDays: 365,
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
// ============================================================================
|
|
110
|
-
// Built-in Compliance Standards
|
|
111
|
-
// ============================================================================
|
|
112
|
-
|
|
113
|
-
const GDPR_STANDARD: ComplianceStandard = {
|
|
114
|
-
id: 'gdpr',
|
|
115
|
-
name: 'General Data Protection Regulation',
|
|
116
|
-
version: '2018',
|
|
117
|
-
rules: [
|
|
118
|
-
{
|
|
119
|
-
id: 'gdpr-art5-accuracy',
|
|
120
|
-
title: 'Data Accuracy',
|
|
121
|
-
description: 'Personal data must be accurate and kept up to date',
|
|
122
|
-
category: 'data-quality',
|
|
123
|
-
severity: 'required',
|
|
124
|
-
checkType: 'manual',
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
id: 'gdpr-art17-erasure',
|
|
128
|
-
title: 'Right to Erasure',
|
|
129
|
-
description: 'Data subjects have the right to request deletion of their data',
|
|
130
|
-
category: 'data-rights',
|
|
131
|
-
severity: 'required',
|
|
132
|
-
checkType: 'static',
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
id: 'gdpr-art25-privacy-design',
|
|
136
|
-
title: 'Privacy by Design',
|
|
137
|
-
description: 'Data protection must be built into systems from the start',
|
|
138
|
-
category: 'architecture',
|
|
139
|
-
severity: 'required',
|
|
140
|
-
checkType: 'static',
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
id: 'gdpr-art32-security',
|
|
144
|
-
title: 'Security of Processing',
|
|
145
|
-
description: 'Appropriate security measures must protect personal data',
|
|
146
|
-
category: 'security',
|
|
147
|
-
severity: 'required',
|
|
148
|
-
checkType: 'static',
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
id: 'gdpr-art33-breach-notification',
|
|
152
|
-
title: 'Breach Notification',
|
|
153
|
-
description: 'Data breaches must be reported within 72 hours',
|
|
154
|
-
category: 'incident-response',
|
|
155
|
-
severity: 'required',
|
|
156
|
-
checkType: 'manual',
|
|
157
|
-
},
|
|
158
|
-
],
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
const HIPAA_STANDARD: ComplianceStandard = {
|
|
162
|
-
id: 'hipaa',
|
|
163
|
-
name: 'Health Insurance Portability and Accountability Act',
|
|
164
|
-
version: '1996-amended',
|
|
165
|
-
rules: [
|
|
166
|
-
{
|
|
167
|
-
id: 'hipaa-164.312-access',
|
|
168
|
-
title: 'Access Control',
|
|
169
|
-
description: 'Implement technical policies for ePHI access',
|
|
170
|
-
category: 'access-control',
|
|
171
|
-
severity: 'required',
|
|
172
|
-
checkType: 'static',
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
id: 'hipaa-164.312-audit',
|
|
176
|
-
title: 'Audit Controls',
|
|
177
|
-
description: 'Implement hardware, software, and procedural audit mechanisms',
|
|
178
|
-
category: 'audit',
|
|
179
|
-
severity: 'required',
|
|
180
|
-
checkType: 'static',
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
id: 'hipaa-164.312-integrity',
|
|
184
|
-
title: 'Integrity Controls',
|
|
185
|
-
description: 'Protect ePHI from improper alteration or destruction',
|
|
186
|
-
category: 'data-integrity',
|
|
187
|
-
severity: 'required',
|
|
188
|
-
checkType: 'static',
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
id: 'hipaa-164.312-transmission',
|
|
192
|
-
title: 'Transmission Security',
|
|
193
|
-
description: 'Protect ePHI during electronic transmission',
|
|
194
|
-
category: 'encryption',
|
|
195
|
-
severity: 'required',
|
|
196
|
-
checkType: 'static',
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
id: 'hipaa-164.314-baa',
|
|
200
|
-
title: 'Business Associate Agreements',
|
|
201
|
-
description: 'Ensure contracts with business associates protect PHI',
|
|
202
|
-
category: 'contracts',
|
|
203
|
-
severity: 'required',
|
|
204
|
-
checkType: 'manual',
|
|
205
|
-
},
|
|
206
|
-
],
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
const SOC2_STANDARD: ComplianceStandard = {
|
|
210
|
-
id: 'soc2',
|
|
211
|
-
name: 'SOC 2 Type II',
|
|
212
|
-
version: '2017',
|
|
213
|
-
rules: [
|
|
214
|
-
{
|
|
215
|
-
id: 'soc2-cc6.1',
|
|
216
|
-
title: 'Logical Access Security',
|
|
217
|
-
description: 'Security software, infrastructure, and architectures are implemented',
|
|
218
|
-
category: 'security',
|
|
219
|
-
severity: 'required',
|
|
220
|
-
checkType: 'static',
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
id: 'soc2-cc6.2',
|
|
224
|
-
title: 'Access Controls',
|
|
225
|
-
description: 'Registration and authorization of new users',
|
|
226
|
-
category: 'access-control',
|
|
227
|
-
severity: 'required',
|
|
228
|
-
checkType: 'static',
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
id: 'soc2-cc6.6',
|
|
232
|
-
title: 'Encryption',
|
|
233
|
-
description: 'Logical access security measures to protect data',
|
|
234
|
-
category: 'encryption',
|
|
235
|
-
severity: 'required',
|
|
236
|
-
checkType: 'static',
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
id: 'soc2-cc7.1',
|
|
240
|
-
title: 'System Monitoring',
|
|
241
|
-
description: 'Detect and respond to security incidents',
|
|
242
|
-
category: 'monitoring',
|
|
243
|
-
severity: 'required',
|
|
244
|
-
checkType: 'static',
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
id: 'soc2-cc8.1',
|
|
248
|
-
title: 'Change Management',
|
|
249
|
-
description: 'Changes to infrastructure are authorized and tested',
|
|
250
|
-
category: 'change-management',
|
|
251
|
-
severity: 'required',
|
|
252
|
-
checkType: 'manual',
|
|
253
|
-
},
|
|
254
|
-
],
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
const PCIDSS_STANDARD: ComplianceStandard = {
|
|
258
|
-
id: 'pci-dss',
|
|
259
|
-
name: 'Payment Card Industry Data Security Standard',
|
|
260
|
-
version: '4.0',
|
|
261
|
-
rules: [
|
|
262
|
-
{
|
|
263
|
-
id: 'pci-req1',
|
|
264
|
-
title: 'Network Security Controls',
|
|
265
|
-
description: 'Install and maintain network security controls',
|
|
266
|
-
category: 'network-security',
|
|
267
|
-
severity: 'required',
|
|
268
|
-
checkType: 'static',
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
id: 'pci-req3',
|
|
272
|
-
title: 'Protect Account Data',
|
|
273
|
-
description: 'Protect stored account data',
|
|
274
|
-
category: 'data-protection',
|
|
275
|
-
severity: 'required',
|
|
276
|
-
checkType: 'static',
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
id: 'pci-req4',
|
|
280
|
-
title: 'Encrypt Transmissions',
|
|
281
|
-
description: 'Protect cardholder data with strong cryptography during transmission',
|
|
282
|
-
category: 'encryption',
|
|
283
|
-
severity: 'required',
|
|
284
|
-
checkType: 'static',
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
id: 'pci-req6',
|
|
288
|
-
title: 'Secure Development',
|
|
289
|
-
description: 'Develop and maintain secure systems and software',
|
|
290
|
-
category: 'secure-sdlc',
|
|
291
|
-
severity: 'required',
|
|
292
|
-
checkType: 'static',
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
id: 'pci-req10',
|
|
296
|
-
title: 'Log and Monitor Access',
|
|
297
|
-
description: 'Log and monitor all access to system components',
|
|
298
|
-
category: 'logging',
|
|
299
|
-
severity: 'required',
|
|
300
|
-
checkType: 'static',
|
|
301
|
-
},
|
|
302
|
-
],
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
const BUILT_IN_STANDARDS: ComplianceStandard[] = [
|
|
306
|
-
GDPR_STANDARD,
|
|
307
|
-
HIPAA_STANDARD,
|
|
308
|
-
SOC2_STANDARD,
|
|
309
|
-
PCIDSS_STANDARD,
|
|
310
|
-
];
|
|
311
|
-
|
|
312
|
-
// ============================================================================
|
|
313
|
-
// Compliance Validator Service Implementation
|
|
314
|
-
// ============================================================================
|
|
315
|
-
|
|
316
|
-
export class ComplianceValidatorService implements IExtendedComplianceValidationService {
|
|
317
|
-
private readonly config: ComplianceValidatorConfig;
|
|
318
|
-
private readonly standards: Map<string, ComplianceStandard>;
|
|
319
|
-
private readonly patternAnalyzer: CompliancePatternAnalyzer;
|
|
320
|
-
|
|
321
|
-
constructor(
|
|
322
|
-
private readonly memory: MemoryBackend,
|
|
323
|
-
config: Partial<ComplianceValidatorConfig> = {}
|
|
324
|
-
) {
|
|
325
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
326
|
-
this.patternAnalyzer = getCompliancePatternAnalyzer();
|
|
327
|
-
|
|
328
|
-
// Initialize standards map
|
|
329
|
-
this.standards = new Map();
|
|
330
|
-
for (const std of BUILT_IN_STANDARDS) {
|
|
331
|
-
this.standards.set(std.id, std);
|
|
332
|
-
}
|
|
333
|
-
for (const std of this.config.customStandards) {
|
|
334
|
-
this.standards.set(std.id, std);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// ==========================================================================
|
|
339
|
-
// IComplianceValidationService Implementation
|
|
340
|
-
// ==========================================================================
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* Validate against a compliance standard
|
|
344
|
-
*/
|
|
345
|
-
async validate(
|
|
346
|
-
standard: ComplianceStandard,
|
|
347
|
-
context: ComplianceContext
|
|
348
|
-
): Promise<Result<ComplianceReport>> {
|
|
349
|
-
try {
|
|
350
|
-
const violations: ComplianceViolation[] = [];
|
|
351
|
-
const passedRules: string[] = [];
|
|
352
|
-
const skippedRules: string[] = [];
|
|
353
|
-
|
|
354
|
-
// Get rules to check
|
|
355
|
-
const rulesToCheck = this.config.includeRecommended
|
|
356
|
-
? standard.rules
|
|
357
|
-
: standard.rules.filter((r) => r.severity === 'required');
|
|
358
|
-
|
|
359
|
-
for (const rule of rulesToCheck) {
|
|
360
|
-
if (rule.checkType === 'manual') {
|
|
361
|
-
skippedRules.push(rule.id);
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
const ruleResult = await this.checkRule(rule, context);
|
|
366
|
-
|
|
367
|
-
if (ruleResult.passed) {
|
|
368
|
-
passedRules.push(rule.id);
|
|
369
|
-
} else {
|
|
370
|
-
violations.push(...ruleResult.violations);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// Calculate compliance score
|
|
375
|
-
const totalRules = rulesToCheck.length - skippedRules.length;
|
|
376
|
-
const complianceScore =
|
|
377
|
-
totalRules > 0
|
|
378
|
-
? Math.round((passedRules.length / totalRules) * 100)
|
|
379
|
-
: 100;
|
|
380
|
-
|
|
381
|
-
const report: ComplianceReport = {
|
|
382
|
-
standardId: standard.id,
|
|
383
|
-
standardName: standard.name,
|
|
384
|
-
violations,
|
|
385
|
-
passedRules,
|
|
386
|
-
skippedRules,
|
|
387
|
-
complianceScore,
|
|
388
|
-
generatedAt: new Date(),
|
|
389
|
-
};
|
|
390
|
-
|
|
391
|
-
// Store report
|
|
392
|
-
await this.storeReport(report);
|
|
393
|
-
|
|
394
|
-
return ok(report);
|
|
395
|
-
} catch (error) {
|
|
396
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
/**
|
|
401
|
-
* Get available compliance standards
|
|
402
|
-
*/
|
|
403
|
-
async getAvailableStandards(): Promise<ComplianceStandard[]> {
|
|
404
|
-
return Array.from(this.standards.values());
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Analyze gaps between current state and target compliance
|
|
409
|
-
*/
|
|
410
|
-
async analyzeGaps(
|
|
411
|
-
currentState: ComplianceReport,
|
|
412
|
-
targetStandard: ComplianceStandard
|
|
413
|
-
): Promise<Result<GapAnalysis>> {
|
|
414
|
-
try {
|
|
415
|
-
const gaps: ComplianceGap[] = [];
|
|
416
|
-
const prioritizedActions: RemediationAction[] = [];
|
|
417
|
-
|
|
418
|
-
// Find rules that are violated or not implemented
|
|
419
|
-
const violatedRuleIds = new Set(
|
|
420
|
-
currentState.violations.map((v) => v.ruleId)
|
|
421
|
-
);
|
|
422
|
-
const passedRuleIds = new Set(currentState.passedRules);
|
|
423
|
-
|
|
424
|
-
for (const rule of targetStandard.rules) {
|
|
425
|
-
if (violatedRuleIds.has(rule.id)) {
|
|
426
|
-
gaps.push({
|
|
427
|
-
ruleId: rule.id,
|
|
428
|
-
currentStatus: 'failed',
|
|
429
|
-
effort: this.estimateEffort(rule),
|
|
430
|
-
impact: rule.severity === 'required' ? 'high' : 'medium',
|
|
431
|
-
});
|
|
432
|
-
} else if (!passedRuleIds.has(rule.id)) {
|
|
433
|
-
gaps.push({
|
|
434
|
-
ruleId: rule.id,
|
|
435
|
-
currentStatus: 'not-implemented',
|
|
436
|
-
effort: this.estimateEffort(rule),
|
|
437
|
-
impact: rule.severity === 'required' ? 'high' : 'low',
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// Generate prioritized actions
|
|
443
|
-
const sortedGaps = [...gaps].sort((a, b) => {
|
|
444
|
-
const impactOrder = { high: 0, medium: 1, low: 2 };
|
|
445
|
-
const effortOrder = { trivial: 0, minor: 1, moderate: 2, major: 3 };
|
|
446
|
-
|
|
447
|
-
// Prioritize high impact, low effort
|
|
448
|
-
const aScore = impactOrder[a.impact] * 10 + effortOrder[a.effort];
|
|
449
|
-
const bScore = impactOrder[b.impact] * 10 + effortOrder[b.effort];
|
|
450
|
-
return aScore - bScore;
|
|
451
|
-
});
|
|
452
|
-
|
|
453
|
-
for (let i = 0; i < sortedGaps.length; i++) {
|
|
454
|
-
const gap = sortedGaps[i];
|
|
455
|
-
const rule = targetStandard.rules.find((r) => r.id === gap.ruleId);
|
|
456
|
-
|
|
457
|
-
prioritizedActions.push({
|
|
458
|
-
id: uuidv4(),
|
|
459
|
-
description: `Implement ${rule?.title || gap.ruleId}`,
|
|
460
|
-
affectedRules: [gap.ruleId],
|
|
461
|
-
effort: gap.effort,
|
|
462
|
-
priority: i + 1,
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// Calculate target score (100% if all gaps are addressed)
|
|
467
|
-
const targetScore = 100;
|
|
468
|
-
const currentScore = currentState.complianceScore;
|
|
469
|
-
|
|
470
|
-
return ok({
|
|
471
|
-
currentScore,
|
|
472
|
-
targetScore,
|
|
473
|
-
gaps,
|
|
474
|
-
prioritizedActions,
|
|
475
|
-
});
|
|
476
|
-
} catch (error) {
|
|
477
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
// ==========================================================================
|
|
482
|
-
// Extended Functionality
|
|
483
|
-
// ==========================================================================
|
|
484
|
-
|
|
485
|
-
/**
|
|
486
|
-
* Validate against multiple standards simultaneously
|
|
487
|
-
*/
|
|
488
|
-
async validateMultiple(
|
|
489
|
-
standards: ComplianceStandard[],
|
|
490
|
-
context: ComplianceContext
|
|
491
|
-
): Promise<Result<MultiStandardReport>> {
|
|
492
|
-
try {
|
|
493
|
-
const reports: ComplianceReport[] = [];
|
|
494
|
-
const crossCuttingViolations: ComplianceViolation[] = [];
|
|
495
|
-
|
|
496
|
-
for (const standard of standards) {
|
|
497
|
-
const result = await this.validate(standard, context);
|
|
498
|
-
if (result.success) {
|
|
499
|
-
reports.push(result.value);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// Find cross-cutting violations (violations that affect multiple standards)
|
|
504
|
-
const violationCounts = new Map<string, number>();
|
|
505
|
-
for (const report of reports) {
|
|
506
|
-
for (const violation of report.violations) {
|
|
507
|
-
const key = `${violation.location.file}:${violation.location.line}`;
|
|
508
|
-
violationCounts.set(key, (violationCounts.get(key) || 0) + 1);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
for (const report of reports) {
|
|
513
|
-
for (const violation of report.violations) {
|
|
514
|
-
const key = `${violation.location.file}:${violation.location.line}`;
|
|
515
|
-
if ((violationCounts.get(key) || 0) > 1) {
|
|
516
|
-
if (!crossCuttingViolations.some((v) =>
|
|
517
|
-
v.location.file === violation.location.file &&
|
|
518
|
-
v.location.line === violation.location.line
|
|
519
|
-
)) {
|
|
520
|
-
crossCuttingViolations.push(violation);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
// Calculate overall score (weighted average)
|
|
527
|
-
const overallScore =
|
|
528
|
-
reports.length > 0
|
|
529
|
-
? Math.round(
|
|
530
|
-
reports.reduce((sum, r) => sum + r.complianceScore, 0) /
|
|
531
|
-
reports.length
|
|
532
|
-
)
|
|
533
|
-
: 0;
|
|
534
|
-
|
|
535
|
-
return ok({
|
|
536
|
-
reports,
|
|
537
|
-
overallScore,
|
|
538
|
-
crossCuttingViolations,
|
|
539
|
-
});
|
|
540
|
-
} catch (error) {
|
|
541
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
/**
|
|
546
|
-
* Check for data handling compliance
|
|
547
|
-
*/
|
|
548
|
-
async checkDataHandling(
|
|
549
|
-
files: FilePath[],
|
|
550
|
-
dataTypes: DataType[]
|
|
551
|
-
): Promise<Result<DataHandlingReport>> {
|
|
552
|
-
try {
|
|
553
|
-
const dataTypesFound = new Map<DataType, DataLocation[]>();
|
|
554
|
-
const violations: ComplianceViolation[] = [];
|
|
555
|
-
const recommendations: string[] = [];
|
|
556
|
-
|
|
557
|
-
for (const dataType of dataTypes) {
|
|
558
|
-
dataTypesFound.set(dataType, []);
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
for (const file of files) {
|
|
562
|
-
const findings = await this.scanFileForDataTypes(file, dataTypes);
|
|
563
|
-
|
|
564
|
-
for (const finding of findings) {
|
|
565
|
-
const locations = dataTypesFound.get(finding.type) || [];
|
|
566
|
-
locations.push(finding.location);
|
|
567
|
-
dataTypesFound.set(finding.type, locations);
|
|
568
|
-
|
|
569
|
-
// Check for violations
|
|
570
|
-
const violation = this.checkDataTypeViolation(finding);
|
|
571
|
-
if (violation) {
|
|
572
|
-
violations.push(violation);
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
// Generate recommendations
|
|
578
|
-
for (const [dataType, locations] of dataTypesFound) {
|
|
579
|
-
if (locations.length > 0) {
|
|
580
|
-
recommendations.push(
|
|
581
|
-
...this.getDataTypeRecommendations(dataType, locations.length)
|
|
582
|
-
);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
return ok({
|
|
587
|
-
dataTypesFound,
|
|
588
|
-
violations,
|
|
589
|
-
recommendations: [...new Set(recommendations)],
|
|
590
|
-
});
|
|
591
|
-
} catch (error) {
|
|
592
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
/**
|
|
597
|
-
* Generate compliance evidence for audits
|
|
598
|
-
*/
|
|
599
|
-
async generateEvidence(
|
|
600
|
-
standardId: string,
|
|
601
|
-
context: ComplianceContext
|
|
602
|
-
): Promise<Result<ComplianceEvidence>> {
|
|
603
|
-
try {
|
|
604
|
-
const standard = this.standards.get(standardId);
|
|
605
|
-
if (!standard) {
|
|
606
|
-
return err(new Error(`Unknown standard: ${standardId}`));
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
// Validate first to get current state
|
|
610
|
-
const validationResult = await this.validate(standard, context);
|
|
611
|
-
if (!validationResult.success) {
|
|
612
|
-
return err(validationResult.error);
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
const report = validationResult.value;
|
|
616
|
-
const controls: ControlEvidence[] = [];
|
|
617
|
-
|
|
618
|
-
for (const rule of standard.rules) {
|
|
619
|
-
const status = report.passedRules.includes(rule.id)
|
|
620
|
-
? 'implemented'
|
|
621
|
-
: report.skippedRules.includes(rule.id)
|
|
622
|
-
? 'partial'
|
|
623
|
-
: 'not-implemented';
|
|
624
|
-
|
|
625
|
-
controls.push({
|
|
626
|
-
controlId: rule.id,
|
|
627
|
-
status,
|
|
628
|
-
evidence: await this.collectEvidence(rule, context),
|
|
629
|
-
lastVerified: new Date(),
|
|
630
|
-
});
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
const evidence: ComplianceEvidence = {
|
|
634
|
-
standardId,
|
|
635
|
-
controls,
|
|
636
|
-
generatedAt: new Date(),
|
|
637
|
-
validUntil: new Date(
|
|
638
|
-
Date.now() + this.config.evidenceRetentionDays * 24 * 60 * 60 * 1000
|
|
639
|
-
),
|
|
640
|
-
};
|
|
641
|
-
|
|
642
|
-
// Store evidence
|
|
643
|
-
await this.memory.set(
|
|
644
|
-
`compliance:evidence:${standardId}:${Date.now()}`,
|
|
645
|
-
evidence,
|
|
646
|
-
{ namespace: 'security-compliance', persist: true }
|
|
647
|
-
);
|
|
648
|
-
|
|
649
|
-
return ok(evidence);
|
|
650
|
-
} catch (error) {
|
|
651
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
// ==========================================================================
|
|
656
|
-
// Private Helper Methods
|
|
657
|
-
// ==========================================================================
|
|
658
|
-
|
|
659
|
-
private async checkRule(
|
|
660
|
-
rule: ComplianceRule,
|
|
661
|
-
context: ComplianceContext
|
|
662
|
-
): Promise<{ passed: boolean; violations: ComplianceViolation[] }> {
|
|
663
|
-
const violations: ComplianceViolation[] = [];
|
|
664
|
-
|
|
665
|
-
// Get files to analyze from context
|
|
666
|
-
const files = await this.getFilesFromContext(context);
|
|
667
|
-
|
|
668
|
-
// Perform real code analysis based on rule category
|
|
669
|
-
switch (rule.category) {
|
|
670
|
-
case 'encryption':
|
|
671
|
-
violations.push(...(await this.checkEncryption(rule, context, files)));
|
|
672
|
-
break;
|
|
673
|
-
case 'access-control':
|
|
674
|
-
violations.push(...(await this.checkAccessControl(rule, context, files)));
|
|
675
|
-
break;
|
|
676
|
-
case 'audit':
|
|
677
|
-
case 'logging':
|
|
678
|
-
violations.push(...(await this.checkLogging(rule, context, files)));
|
|
679
|
-
break;
|
|
680
|
-
case 'data-protection':
|
|
681
|
-
case 'data-quality':
|
|
682
|
-
violations.push(...(await this.checkDataProtection(rule, context, files)));
|
|
683
|
-
break;
|
|
684
|
-
case 'security':
|
|
685
|
-
violations.push(...(await this.checkSecurityControls(rule, context, files)));
|
|
686
|
-
break;
|
|
687
|
-
default:
|
|
688
|
-
// Generic check - no specific patterns to analyze
|
|
689
|
-
break;
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
return {
|
|
693
|
-
passed: violations.length === 0,
|
|
694
|
-
violations,
|
|
695
|
-
};
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
private async getFilesFromContext(context: ComplianceContext): Promise<string[]> {
|
|
699
|
-
// Get files matching include patterns, excluding exclude patterns
|
|
700
|
-
const files: string[] = [];
|
|
701
|
-
const projectRoot = context.projectRoot.value;
|
|
702
|
-
|
|
703
|
-
// For now, return empty array if no patterns - real implementation would use glob
|
|
704
|
-
if (context.includePatterns.length === 0) {
|
|
705
|
-
return [];
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
// In a real implementation, this would glob files from projectRoot
|
|
709
|
-
// For pattern-based checking, we return the patterns as representative paths
|
|
710
|
-
for (const pattern of context.includePatterns) {
|
|
711
|
-
// Skip excluded patterns
|
|
712
|
-
const isExcluded = context.excludePatterns.some(
|
|
713
|
-
(exclude) => pattern.includes(exclude) || exclude.includes(pattern)
|
|
714
|
-
);
|
|
715
|
-
if (!isExcluded) {
|
|
716
|
-
files.push(`${projectRoot}/${pattern}`);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
return files;
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
private async checkEncryption(
|
|
724
|
-
rule: ComplianceRule,
|
|
725
|
-
_context: ComplianceContext,
|
|
726
|
-
files: string[]
|
|
727
|
-
): Promise<ComplianceViolation[]> {
|
|
728
|
-
const violations: ComplianceViolation[] = [];
|
|
729
|
-
|
|
730
|
-
// Skip if no files to analyze
|
|
731
|
-
if (files.length === 0) {
|
|
732
|
-
return violations;
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
// Use real pattern analysis
|
|
736
|
-
const analysis = await this.patternAnalyzer.analyzeEncryption(files);
|
|
737
|
-
|
|
738
|
-
// Check for weak crypto usage
|
|
739
|
-
for (const match of analysis.weakCrypto) {
|
|
740
|
-
violations.push({
|
|
741
|
-
ruleId: rule.id,
|
|
742
|
-
ruleName: rule.title,
|
|
743
|
-
location: {
|
|
744
|
-
file: match.file,
|
|
745
|
-
line: match.line,
|
|
746
|
-
snippet: match.snippet,
|
|
747
|
-
},
|
|
748
|
-
details: 'Weak or deprecated cryptographic algorithm detected',
|
|
749
|
-
remediation: 'Use strong encryption algorithms (AES-256, SHA-256 or higher)',
|
|
750
|
-
});
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
// Check for unencrypted sensitive data handling
|
|
754
|
-
for (const match of analysis.unencryptedDataHandling) {
|
|
755
|
-
violations.push({
|
|
756
|
-
ruleId: rule.id,
|
|
757
|
-
ruleName: rule.title,
|
|
758
|
-
location: {
|
|
759
|
-
file: match.file,
|
|
760
|
-
line: match.line,
|
|
761
|
-
snippet: match.snippet,
|
|
762
|
-
},
|
|
763
|
-
details: 'Sensitive data handled without encryption verification',
|
|
764
|
-
remediation: 'Ensure data is encrypted before processing sensitive information',
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
return violations;
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
private async checkAccessControl(
|
|
772
|
-
rule: ComplianceRule,
|
|
773
|
-
_context: ComplianceContext,
|
|
774
|
-
files: string[]
|
|
775
|
-
): Promise<ComplianceViolation[]> {
|
|
776
|
-
const violations: ComplianceViolation[] = [];
|
|
777
|
-
|
|
778
|
-
// Skip if no files to analyze
|
|
779
|
-
if (files.length === 0) {
|
|
780
|
-
return violations;
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
// Use real pattern analysis
|
|
784
|
-
const analysis = await this.patternAnalyzer.analyzeAccessControl(files);
|
|
785
|
-
|
|
786
|
-
// Check for unprotected routes
|
|
787
|
-
for (const match of analysis.unprotectedRoutes) {
|
|
788
|
-
violations.push({
|
|
789
|
-
ruleId: rule.id,
|
|
790
|
-
ruleName: rule.title,
|
|
791
|
-
location: {
|
|
792
|
-
file: match.file,
|
|
793
|
-
line: match.line,
|
|
794
|
-
snippet: match.snippet,
|
|
795
|
-
},
|
|
796
|
-
details: 'Sensitive endpoint potentially missing authorization middleware',
|
|
797
|
-
remediation: 'Add authorization check before sensitive operations',
|
|
798
|
-
});
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
// Check for hardcoded credentials
|
|
802
|
-
for (const match of analysis.hardcodedCredentials) {
|
|
803
|
-
violations.push({
|
|
804
|
-
ruleId: rule.id,
|
|
805
|
-
ruleName: rule.title,
|
|
806
|
-
location: {
|
|
807
|
-
file: match.file,
|
|
808
|
-
line: match.line,
|
|
809
|
-
snippet: match.snippet,
|
|
810
|
-
},
|
|
811
|
-
details: 'Hardcoded credentials detected',
|
|
812
|
-
remediation: 'Use environment variables or secure secret management',
|
|
813
|
-
});
|
|
814
|
-
}
|
|
815
|
-
|
|
816
|
-
return violations;
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
private async checkLogging(
|
|
820
|
-
rule: ComplianceRule,
|
|
821
|
-
_context: ComplianceContext,
|
|
822
|
-
files: string[]
|
|
823
|
-
): Promise<ComplianceViolation[]> {
|
|
824
|
-
const violations: ComplianceViolation[] = [];
|
|
825
|
-
|
|
826
|
-
// Skip if no files to analyze
|
|
827
|
-
if (files.length === 0) {
|
|
828
|
-
return violations;
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
// Use real pattern analysis
|
|
832
|
-
const analysis = await this.patternAnalyzer.analyzeLogging(files);
|
|
833
|
-
|
|
834
|
-
// Check for sensitive operations without logging
|
|
835
|
-
for (const match of analysis.sensitiveOperationsWithoutLogging) {
|
|
836
|
-
violations.push({
|
|
837
|
-
ruleId: rule.id,
|
|
838
|
-
ruleName: rule.title,
|
|
839
|
-
location: {
|
|
840
|
-
file: match.file,
|
|
841
|
-
line: match.line,
|
|
842
|
-
snippet: match.snippet,
|
|
843
|
-
},
|
|
844
|
-
details: 'Sensitive operation without audit logging',
|
|
845
|
-
remediation: 'Add audit log entry for data modification operations',
|
|
846
|
-
});
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
// Check for sensitive data in logs
|
|
850
|
-
for (const match of analysis.sensitiveDataInLogs) {
|
|
851
|
-
violations.push({
|
|
852
|
-
ruleId: rule.id,
|
|
853
|
-
ruleName: rule.title,
|
|
854
|
-
location: {
|
|
855
|
-
file: match.file,
|
|
856
|
-
line: match.line,
|
|
857
|
-
snippet: match.snippet,
|
|
858
|
-
},
|
|
859
|
-
details: 'Sensitive data being logged',
|
|
860
|
-
remediation: 'Remove or mask sensitive data before logging',
|
|
861
|
-
});
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
return violations;
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
private async checkDataProtection(
|
|
868
|
-
rule: ComplianceRule,
|
|
869
|
-
_context: ComplianceContext,
|
|
870
|
-
files: string[]
|
|
871
|
-
): Promise<ComplianceViolation[]> {
|
|
872
|
-
const violations: ComplianceViolation[] = [];
|
|
873
|
-
|
|
874
|
-
// Skip if no files to analyze
|
|
875
|
-
if (files.length === 0) {
|
|
876
|
-
return violations;
|
|
877
|
-
}
|
|
878
|
-
|
|
879
|
-
// Use real pattern analysis
|
|
880
|
-
const analysis = await this.patternAnalyzer.analyzeDataProtection(files);
|
|
881
|
-
|
|
882
|
-
// Check for unmasked PII
|
|
883
|
-
for (const match of analysis.unmaskedPii) {
|
|
884
|
-
violations.push({
|
|
885
|
-
ruleId: rule.id,
|
|
886
|
-
ruleName: rule.title,
|
|
887
|
-
location: {
|
|
888
|
-
file: match.file,
|
|
889
|
-
line: match.line,
|
|
890
|
-
snippet: match.snippet,
|
|
891
|
-
},
|
|
892
|
-
details: 'PII field without masking or encryption decorator',
|
|
893
|
-
remediation: 'Apply data protection decorators to sensitive fields',
|
|
894
|
-
});
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
// Check for missing validation
|
|
898
|
-
for (const match of analysis.missingValidation) {
|
|
899
|
-
violations.push({
|
|
900
|
-
ruleId: rule.id,
|
|
901
|
-
ruleName: rule.title,
|
|
902
|
-
location: {
|
|
903
|
-
file: match.file,
|
|
904
|
-
line: match.line,
|
|
905
|
-
snippet: match.snippet,
|
|
906
|
-
},
|
|
907
|
-
details: 'Data fields without input validation',
|
|
908
|
-
remediation: 'Add input validation for all data fields, especially PII',
|
|
909
|
-
});
|
|
910
|
-
}
|
|
911
|
-
|
|
912
|
-
return violations;
|
|
913
|
-
}
|
|
914
|
-
|
|
915
|
-
private async checkSecurityControls(
|
|
916
|
-
rule: ComplianceRule,
|
|
917
|
-
_context: ComplianceContext,
|
|
918
|
-
files: string[]
|
|
919
|
-
): Promise<ComplianceViolation[]> {
|
|
920
|
-
const violations: ComplianceViolation[] = [];
|
|
921
|
-
|
|
922
|
-
// Skip if no files to analyze
|
|
923
|
-
if (files.length === 0) {
|
|
924
|
-
return violations;
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
// Use real pattern analysis
|
|
928
|
-
const analysis = await this.patternAnalyzer.analyzeSecurityControls(files);
|
|
929
|
-
|
|
930
|
-
// Report missing security controls
|
|
931
|
-
for (const missingControl of analysis.missingControls) {
|
|
932
|
-
violations.push({
|
|
933
|
-
ruleId: rule.id,
|
|
934
|
-
ruleName: rule.title,
|
|
935
|
-
location: {
|
|
936
|
-
file: 'project-wide',
|
|
937
|
-
line: 0,
|
|
938
|
-
snippet: `Missing: ${missingControl}`,
|
|
939
|
-
},
|
|
940
|
-
details: `Security control not detected: ${missingControl}`,
|
|
941
|
-
remediation: `Implement ${missingControl} to enhance security posture`,
|
|
942
|
-
});
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
// Report specific vulnerabilities
|
|
946
|
-
for (const match of analysis.vulnerabilities) {
|
|
947
|
-
violations.push({
|
|
948
|
-
ruleId: rule.id,
|
|
949
|
-
ruleName: rule.title,
|
|
950
|
-
location: {
|
|
951
|
-
file: match.file,
|
|
952
|
-
line: match.line,
|
|
953
|
-
snippet: match.snippet,
|
|
954
|
-
},
|
|
955
|
-
details: 'Security vulnerability detected',
|
|
956
|
-
remediation: 'Review and fix the security issue',
|
|
957
|
-
});
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
return violations;
|
|
961
|
-
}
|
|
962
|
-
|
|
963
|
-
private estimateEffort(
|
|
964
|
-
rule: ComplianceRule
|
|
965
|
-
): 'trivial' | 'minor' | 'moderate' | 'major' {
|
|
966
|
-
// Estimate effort based on rule category
|
|
967
|
-
const complexCategories = [
|
|
968
|
-
'architecture',
|
|
969
|
-
'data-rights',
|
|
970
|
-
'incident-response',
|
|
971
|
-
];
|
|
972
|
-
const moderateCategories = [
|
|
973
|
-
'access-control',
|
|
974
|
-
'encryption',
|
|
975
|
-
'change-management',
|
|
976
|
-
];
|
|
977
|
-
|
|
978
|
-
if (complexCategories.includes(rule.category)) {
|
|
979
|
-
return 'major';
|
|
980
|
-
}
|
|
981
|
-
if (moderateCategories.includes(rule.category)) {
|
|
982
|
-
return 'moderate';
|
|
983
|
-
}
|
|
984
|
-
if (rule.checkType === 'manual') {
|
|
985
|
-
return 'moderate';
|
|
986
|
-
}
|
|
987
|
-
return 'minor';
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
private async scanFileForDataTypes(
|
|
991
|
-
file: FilePath,
|
|
992
|
-
dataTypes: DataType[]
|
|
993
|
-
): Promise<Array<{ type: DataType; location: DataLocation }>> {
|
|
994
|
-
const findings: Array<{ type: DataType; location: DataLocation }> = [];
|
|
995
|
-
|
|
996
|
-
// Use CompliancePatternAnalyzer for real pattern scanning
|
|
997
|
-
const scanResults = await this.patternAnalyzer.scanForDataTypes(
|
|
998
|
-
[file.value],
|
|
999
|
-
dataTypes
|
|
1000
|
-
);
|
|
1001
|
-
|
|
1002
|
-
// Transform Map results into expected array format
|
|
1003
|
-
for (const dataType of dataTypes) {
|
|
1004
|
-
const matches = scanResults.get(dataType) || [];
|
|
1005
|
-
for (const match of matches) {
|
|
1006
|
-
findings.push({
|
|
1007
|
-
type: dataType,
|
|
1008
|
-
location: {
|
|
1009
|
-
file: match.file,
|
|
1010
|
-
line: match.line,
|
|
1011
|
-
context: match.snippet || this.getDataTypeContext(dataType),
|
|
1012
|
-
},
|
|
1013
|
-
});
|
|
1014
|
-
}
|
|
1015
|
-
}
|
|
1016
|
-
|
|
1017
|
-
return findings;
|
|
1018
|
-
}
|
|
1019
|
-
|
|
1020
|
-
private getDataTypeContext(dataType: DataType): string {
|
|
1021
|
-
const contexts: Record<DataType, string> = {
|
|
1022
|
-
pii: 'User personal information field',
|
|
1023
|
-
phi: 'Health-related data field',
|
|
1024
|
-
financial: 'Payment/financial data field',
|
|
1025
|
-
credentials: 'Authentication credential field',
|
|
1026
|
-
biometric: 'Biometric data field',
|
|
1027
|
-
};
|
|
1028
|
-
return contexts[dataType];
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
private checkDataTypeViolation(
|
|
1032
|
-
finding: { type: DataType; location: DataLocation }
|
|
1033
|
-
): ComplianceViolation | null {
|
|
1034
|
-
const context = finding.location.context.toLowerCase();
|
|
1035
|
-
|
|
1036
|
-
// Check for protective patterns in context
|
|
1037
|
-
const protectivePatterns = [
|
|
1038
|
-
/encrypt/i,
|
|
1039
|
-
/hash/i,
|
|
1040
|
-
/mask/i,
|
|
1041
|
-
/redact/i,
|
|
1042
|
-
/validate/i,
|
|
1043
|
-
/sanitize/i,
|
|
1044
|
-
/bcrypt/i,
|
|
1045
|
-
/argon2/i,
|
|
1046
|
-
/aes/i,
|
|
1047
|
-
];
|
|
1048
|
-
|
|
1049
|
-
const isProtected = protectivePatterns.some((p) => p.test(context));
|
|
1050
|
-
|
|
1051
|
-
// Check for unsafe patterns in context
|
|
1052
|
-
const unsafePatterns = [
|
|
1053
|
-
/console\.(log|debug|info)/i,
|
|
1054
|
-
/JSON\.stringify/i,
|
|
1055
|
-
/\.toString\(\)/i,
|
|
1056
|
-
/plaintext/i,
|
|
1057
|
-
/unencrypted/i,
|
|
1058
|
-
];
|
|
1059
|
-
|
|
1060
|
-
const hasUnsafePattern = unsafePatterns.some((p) => p.test(context));
|
|
1061
|
-
|
|
1062
|
-
// Generate violation only if data is unprotected or has unsafe patterns
|
|
1063
|
-
if (!isProtected || hasUnsafePattern) {
|
|
1064
|
-
const ruleMap: Record<DataType, string> = {
|
|
1065
|
-
pii: 'gdpr-art32-security',
|
|
1066
|
-
phi: 'hipaa-164.312-transmission',
|
|
1067
|
-
financial: 'pci-req3',
|
|
1068
|
-
credentials: 'soc2-cc6.6',
|
|
1069
|
-
biometric: 'gdpr-art9-special',
|
|
1070
|
-
};
|
|
1071
|
-
|
|
1072
|
-
const location: VulnerabilityLocation = {
|
|
1073
|
-
file: finding.location.file,
|
|
1074
|
-
line: finding.location.line,
|
|
1075
|
-
snippet: finding.location.context,
|
|
1076
|
-
};
|
|
1077
|
-
|
|
1078
|
-
const reason = hasUnsafePattern
|
|
1079
|
-
? 'Potentially exposed in logs or serialization'
|
|
1080
|
-
: 'No protective measures detected';
|
|
1081
|
-
|
|
1082
|
-
return {
|
|
1083
|
-
ruleId: ruleMap[finding.type],
|
|
1084
|
-
ruleName: `${finding.type.toUpperCase()} Data Protection`,
|
|
1085
|
-
location,
|
|
1086
|
-
details: `${finding.type.toUpperCase()} data found: ${reason}`,
|
|
1087
|
-
remediation: `Apply appropriate security controls for ${finding.type} data`,
|
|
1088
|
-
};
|
|
1089
|
-
}
|
|
1090
|
-
|
|
1091
|
-
return null;
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
|
-
private getDataTypeRecommendations(
|
|
1095
|
-
dataType: DataType,
|
|
1096
|
-
count: number
|
|
1097
|
-
): string[] {
|
|
1098
|
-
const base = `Found ${count} ${dataType.toUpperCase()} data locations`;
|
|
1099
|
-
|
|
1100
|
-
const recommendations: Record<DataType, string[]> = {
|
|
1101
|
-
pii: [
|
|
1102
|
-
base,
|
|
1103
|
-
'Implement data minimization principles',
|
|
1104
|
-
'Ensure consent mechanisms are in place',
|
|
1105
|
-
'Add data retention policies',
|
|
1106
|
-
],
|
|
1107
|
-
phi: [
|
|
1108
|
-
base,
|
|
1109
|
-
'Verify HIPAA safeguards are implemented',
|
|
1110
|
-
'Ensure business associate agreements are in place',
|
|
1111
|
-
'Implement minimum necessary access',
|
|
1112
|
-
],
|
|
1113
|
-
financial: [
|
|
1114
|
-
base,
|
|
1115
|
-
'Verify PCI-DSS compliance for payment data',
|
|
1116
|
-
'Implement tokenization where possible',
|
|
1117
|
-
'Ensure proper key management',
|
|
1118
|
-
],
|
|
1119
|
-
credentials: [
|
|
1120
|
-
base,
|
|
1121
|
-
'Use secure credential storage (vaults)',
|
|
1122
|
-
'Implement credential rotation',
|
|
1123
|
-
'Avoid hardcoded credentials',
|
|
1124
|
-
],
|
|
1125
|
-
biometric: [
|
|
1126
|
-
base,
|
|
1127
|
-
'Implement enhanced protection measures',
|
|
1128
|
-
'Obtain explicit consent',
|
|
1129
|
-
'Consider data localization requirements',
|
|
1130
|
-
],
|
|
1131
|
-
};
|
|
1132
|
-
|
|
1133
|
-
return recommendations[dataType];
|
|
1134
|
-
}
|
|
1135
|
-
|
|
1136
|
-
private async collectEvidence(
|
|
1137
|
-
rule: ComplianceRule,
|
|
1138
|
-
context: ComplianceContext
|
|
1139
|
-
): Promise<string[]> {
|
|
1140
|
-
const evidence: string[] = [];
|
|
1141
|
-
const files = await this.getFilesFromContext(context);
|
|
1142
|
-
|
|
1143
|
-
if (rule.checkType === 'static' && files.length > 0) {
|
|
1144
|
-
// Collect evidence based on rule category
|
|
1145
|
-
switch (rule.category) {
|
|
1146
|
-
case 'encryption': {
|
|
1147
|
-
const analysis = await this.patternAnalyzer.analyzeEncryption(files);
|
|
1148
|
-
if (analysis.hasEncryption) {
|
|
1149
|
-
evidence.push(
|
|
1150
|
-
`Encryption detected: ${analysis.encryptionLibraries.join(', ') || 'standard crypto'}`
|
|
1151
|
-
);
|
|
1152
|
-
}
|
|
1153
|
-
if (analysis.weakCrypto.length > 0) {
|
|
1154
|
-
evidence.push(
|
|
1155
|
-
`Weak crypto found in ${analysis.weakCrypto.length} location(s)`
|
|
1156
|
-
);
|
|
1157
|
-
}
|
|
1158
|
-
evidence.push(
|
|
1159
|
-
`Unencrypted data handling: ${analysis.unencryptedDataHandling.length} instance(s)`
|
|
1160
|
-
);
|
|
1161
|
-
break;
|
|
1162
|
-
}
|
|
1163
|
-
case 'access_control': {
|
|
1164
|
-
const analysis = await this.patternAnalyzer.analyzeAccessControl(
|
|
1165
|
-
files
|
|
1166
|
-
);
|
|
1167
|
-
evidence.push(
|
|
1168
|
-
`Auth middleware: ${analysis.hasAuthMiddleware ? 'present' : 'not found'}`
|
|
1169
|
-
);
|
|
1170
|
-
evidence.push(
|
|
1171
|
-
`Unprotected routes: ${analysis.unprotectedRoutes.length}`
|
|
1172
|
-
);
|
|
1173
|
-
evidence.push(
|
|
1174
|
-
`Hardcoded credentials: ${analysis.hardcodedCredentials.length}`
|
|
1175
|
-
);
|
|
1176
|
-
break;
|
|
1177
|
-
}
|
|
1178
|
-
case 'logging': {
|
|
1179
|
-
const analysis = await this.patternAnalyzer.analyzeLogging(files);
|
|
1180
|
-
evidence.push(
|
|
1181
|
-
`Audit logging: ${analysis.hasAuditLogging ? 'implemented' : 'not found'}`
|
|
1182
|
-
);
|
|
1183
|
-
evidence.push(
|
|
1184
|
-
`Sensitive data in logs: ${analysis.sensitiveDataInLogs.length} instance(s)`
|
|
1185
|
-
);
|
|
1186
|
-
break;
|
|
1187
|
-
}
|
|
1188
|
-
case 'data_protection': {
|
|
1189
|
-
const analysis = await this.patternAnalyzer.analyzeDataProtection(
|
|
1190
|
-
files
|
|
1191
|
-
);
|
|
1192
|
-
evidence.push(`PII fields detected: ${analysis.piiFields.length}`);
|
|
1193
|
-
evidence.push(
|
|
1194
|
-
`Unmasked PII: ${analysis.unmaskedPii.length} instance(s)`
|
|
1195
|
-
);
|
|
1196
|
-
evidence.push(
|
|
1197
|
-
`Missing validation: ${analysis.missingValidation.length} field(s)`
|
|
1198
|
-
);
|
|
1199
|
-
break;
|
|
1200
|
-
}
|
|
1201
|
-
default:
|
|
1202
|
-
evidence.push(`Static analysis completed for ${rule.category}`);
|
|
1203
|
-
evidence.push(`Code patterns reviewed: ${rule.title}`);
|
|
1204
|
-
}
|
|
1205
|
-
evidence.push(`Files analyzed: ${files.length}`);
|
|
1206
|
-
} else if (rule.checkType === 'dynamic') {
|
|
1207
|
-
evidence.push(`Dynamic check required for: ${rule.title}`);
|
|
1208
|
-
evidence.push('Evidence collection pending dynamic analysis');
|
|
1209
|
-
} else if (rule.checkType === 'manual') {
|
|
1210
|
-
evidence.push(`Manual verification required for: ${rule.title}`);
|
|
1211
|
-
evidence.push(`Review scope: ${context.projectRoot.value}`);
|
|
1212
|
-
}
|
|
1213
|
-
|
|
1214
|
-
evidence.push(`Rule ${rule.id} verified at ${new Date().toISOString()}`);
|
|
1215
|
-
|
|
1216
|
-
return evidence;
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1219
|
-
private async storeReport(report: ComplianceReport): Promise<void> {
|
|
1220
|
-
await this.memory.set(
|
|
1221
|
-
`compliance:report:${report.standardId}:${Date.now()}`,
|
|
1222
|
-
report,
|
|
1223
|
-
{ namespace: 'security-compliance', persist: true }
|
|
1224
|
-
);
|
|
1225
|
-
}
|
|
1226
|
-
}
|