agentic-qe 1.4.3 → 1.5.0
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/.claude/agents/qe-api-contract-validator.md +133 -27
- package/.claude/agents/qe-api-contract-validator.md.backup +1148 -0
- package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +1148 -0
- package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +1123 -0
- package/.claude/agents/qe-chaos-engineer.md +142 -23
- package/.claude/agents/qe-chaos-engineer.md.backup +808 -0
- package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +808 -0
- package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +787 -0
- package/.claude/agents/qe-code-complexity.md +111 -23
- package/.claude/agents/qe-code-complexity.md.backup +291 -0
- package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +291 -0
- package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +286 -0
- package/.claude/agents/qe-coverage-analyzer.md +306 -30
- package/.claude/agents/qe-coverage-analyzer.md.backup +467 -0
- package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +467 -0
- package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +438 -0
- package/.claude/agents/qe-deployment-readiness.md +84 -28
- package/.claude/agents/qe-deployment-readiness.md.backup +1166 -0
- package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +1166 -0
- package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +1140 -0
- package/.claude/agents/qe-flaky-test-hunter.md +277 -35
- package/.claude/agents/qe-flaky-test-hunter.md.backup +1195 -0
- package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +1195 -0
- package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +1162 -0
- package/.claude/agents/qe-fleet-commander.md +126 -23
- package/.claude/agents/qe-fleet-commander.md.backup +718 -0
- package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +718 -0
- package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +697 -0
- package/.claude/agents/qe-performance-tester.md +314 -57
- package/.claude/agents/qe-performance-tester.md.backup +428 -0
- package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +428 -0
- package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +372 -0
- package/.claude/agents/qe-production-intelligence.md +126 -27
- package/.claude/agents/qe-production-intelligence.md.backup +1219 -0
- package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +1219 -0
- package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +1194 -0
- package/.claude/agents/qe-quality-analyzer.md +127 -32
- package/.claude/agents/qe-quality-analyzer.md.backup +425 -0
- package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +425 -0
- package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +394 -0
- package/.claude/agents/qe-quality-gate.md +148 -33
- package/.claude/agents/qe-quality-gate.md.backup +446 -0
- package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +446 -0
- package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +415 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +78 -27
- package/.claude/agents/qe-regression-risk-analyzer.md.backup +1009 -0
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +1009 -0
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +984 -0
- package/.claude/agents/qe-requirements-validator.md +131 -27
- package/.claude/agents/qe-requirements-validator.md.backup +748 -0
- package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +748 -0
- package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +723 -0
- package/.claude/agents/qe-security-scanner.md +137 -62
- package/.claude/agents/qe-security-scanner.md.backup +634 -0
- package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +634 -0
- package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +573 -0
- package/.claude/agents/qe-test-data-architect.md +129 -26
- package/.claude/agents/qe-test-data-architect.md.backup +1064 -0
- package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +1064 -0
- package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +1040 -0
- package/.claude/agents/qe-test-executor.md +165 -21
- package/.claude/agents/qe-test-executor.md.backup +389 -0
- package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +389 -0
- package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +369 -0
- package/.claude/agents/qe-test-generator.md +379 -34
- package/.claude/agents/qe-test-generator.md.backup +997 -0
- package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +997 -0
- package/.claude/agents/qe-visual-tester.md +236 -23
- package/.claude/agents/qe-visual-tester.md.backup +777 -0
- package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +777 -0
- package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +756 -0
- package/.claude/agents/subagents/qe-code-reviewer.md +59 -0
- package/.claude/agents/subagents/qe-data-generator.md +60 -0
- package/.claude/agents/subagents/qe-integration-tester.md +77 -0
- package/.claude/agents/subagents/qe-performance-validator.md +55 -0
- package/.claude/agents/subagents/qe-security-auditor.md +51 -0
- package/.claude/agents/subagents/qe-test-implementer.md +371 -0
- package/.claude/agents/subagents/qe-test-refactorer.md +510 -0
- package/.claude/agents/subagents/qe-test-writer.md +603 -0
- package/.claude/skills/accessibility-testing/SKILL.md +764 -777
- package/.claude/skills/agentic-quality-engineering/SKILL.md +0 -6
- package/.claude/skills/api-testing-patterns/SKILL.md +0 -12
- package/.claude/skills/bug-reporting-excellence/SKILL.md +0 -6
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +0 -6
- package/.claude/skills/code-review-quality/SKILL.md +0 -6
- package/.claude/skills/compatibility-testing/SKILL.md +0 -6
- package/.claude/skills/compliance-testing/SKILL.md +0 -6
- package/.claude/skills/consultancy-practices/SKILL.md +0 -6
- package/.claude/skills/context-driven-testing/SKILL.md +0 -6
- package/.claude/skills/contract-testing/SKILL.md +0 -6
- package/.claude/skills/database-testing/SKILL.md +0 -6
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +0 -6
- package/.claude/skills/holistic-testing-pact/SKILL.md +0 -6
- package/.claude/skills/localization-testing/SKILL.md +0 -6
- package/.claude/skills/mobile-testing/SKILL.md +535 -548
- package/.claude/skills/mutation-testing/SKILL.md +0 -6
- package/.claude/skills/performance-testing/SKILL.md +0 -6
- package/.claude/skills/quality-metrics/SKILL.md +0 -12
- package/.claude/skills/refactoring-patterns/SKILL.md +0 -6
- package/.claude/skills/regression-testing/SKILL.md +1033 -1045
- package/.claude/skills/risk-based-testing/SKILL.md +0 -12
- package/.claude/skills/security-testing/SKILL.md +0 -6
- package/.claude/skills/shift-left-testing/SKILL.md +529 -535
- package/.claude/skills/shift-right-testing/SKILL.md +585 -591
- package/.claude/skills/tdd-london-chicago/SKILL.md +0 -6
- package/.claude/skills/technical-writing/SKILL.md +0 -6
- package/.claude/skills/test-automation-strategy/SKILL.md +0 -6
- package/.claude/skills/test-data-management/SKILL.md +1054 -1067
- package/.claude/skills/test-design-techniques/SKILL.md +0 -6
- package/.claude/skills/test-environment-management/SKILL.md +0 -6
- package/.claude/skills/test-reporting-analytics/SKILL.md +0 -6
- package/.claude/skills/visual-testing-advanced/SKILL.md +0 -6
- package/.claude/skills/xp-practices/SKILL.md +0 -6
- package/CHANGELOG.md +504 -0
- package/README.md +24 -16
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +97 -44
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/core/FleetManager.d.ts.map +1 -1
- package/dist/core/FleetManager.js +17 -5
- package/dist/core/FleetManager.js.map +1 -1
- package/dist/core/MemoryManager.d.ts +27 -0
- package/dist/core/MemoryManager.d.ts.map +1 -1
- package/dist/core/MemoryManager.js +69 -4
- package/dist/core/MemoryManager.js.map +1 -1
- package/dist/core/PatternDatabaseAdapter.d.ts.map +1 -1
- package/dist/core/PatternDatabaseAdapter.js +14 -4
- package/dist/core/PatternDatabaseAdapter.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +18 -4
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/mcp/handlers/coordination/index.d.ts +14 -14
- package/dist/mcp/handlers/coordination/index.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/index.js +14 -14
- package/dist/mcp/handlers/coordination/index.js.map +1 -1
- package/dist/mcp/handlers/coordination/task-status.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/task-status.js +3 -5
- package/dist/mcp/handlers/coordination/task-status.js.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.js +39 -10
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +63 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js +885 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -0
- package/dist/mcp/handlers/phase3/index.d.ts +6 -0
- package/dist/mcp/handlers/phase3/index.d.ts.map +1 -0
- package/dist/mcp/handlers/phase3/index.js +10 -0
- package/dist/mcp/handlers/phase3/index.js.map +1 -0
- package/dist/mcp/handlers/prediction/index.d.ts +10 -10
- package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/index.js +10 -10
- package/dist/mcp/handlers/prediction/index.js.map +1 -1
- package/dist/mcp/handlers/security/check-authz.d.ts +152 -0
- package/dist/mcp/handlers/security/check-authz.d.ts.map +1 -0
- package/dist/mcp/handlers/security/check-authz.js +434 -0
- package/dist/mcp/handlers/security/check-authz.js.map +1 -0
- package/dist/mcp/handlers/security/generate-report.d.ts +156 -0
- package/dist/mcp/handlers/security/generate-report.d.ts.map +1 -0
- package/dist/mcp/handlers/security/generate-report.js +469 -0
- package/dist/mcp/handlers/security/generate-report.js.map +1 -0
- package/dist/mcp/handlers/security/index.d.ts +80 -0
- package/dist/mcp/handlers/security/index.d.ts.map +1 -0
- package/dist/mcp/handlers/security/index.js +91 -0
- package/dist/mcp/handlers/security/index.js.map +1 -0
- package/dist/mcp/handlers/security/scan-comprehensive.d.ts +66 -0
- package/dist/mcp/handlers/security/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/handlers/security/scan-comprehensive.js +296 -0
- package/dist/mcp/handlers/security/scan-comprehensive.js.map +1 -0
- package/dist/mcp/handlers/security/scan-dependencies.d.ts +148 -0
- package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +1 -0
- package/dist/mcp/handlers/security/scan-dependencies.js +354 -0
- package/dist/mcp/handlers/security/scan-dependencies.js.map +1 -0
- package/dist/mcp/handlers/security/validate-auth.d.ts +128 -0
- package/dist/mcp/handlers/security/validate-auth.d.ts.map +1 -0
- package/dist/mcp/handlers/security/validate-auth.js +294 -0
- package/dist/mcp/handlers/security/validate-auth.js.map +1 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts +21 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +32 -2
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts +95 -0
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/test/generate-integration-tests.js +286 -0
- package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -0
- package/dist/mcp/handlers/test/generate-unit-tests.d.ts +89 -0
- package/dist/mcp/handlers/test/generate-unit-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/test/generate-unit-tests.js +273 -0
- package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -0
- package/dist/mcp/handlers/test/optimize-test-suite.d.ts +97 -0
- package/dist/mcp/handlers/test/optimize-test-suite.d.ts.map +1 -0
- package/dist/mcp/handlers/test/optimize-test-suite.js +282 -0
- package/dist/mcp/handlers/test/optimize-test-suite.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +212 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/deprecated.d.ts +1390 -0
- package/dist/mcp/tools/deprecated.d.ts.map +1 -0
- package/dist/mcp/tools/deprecated.js +859 -0
- package/dist/mcp/tools/deprecated.js.map +1 -0
- package/dist/mcp/tools/qe/api-contract/index.d.ts +138 -0
- package/dist/mcp/tools/qe/api-contract/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/api-contract/index.js +572 -0
- package/dist/mcp/tools/qe/api-contract/index.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts +110 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.js +381 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts +115 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js +461 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/index.d.ts +12 -0
- package/dist/mcp/tools/qe/code-quality/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/index.js +30 -0
- package/dist/mcp/tools/qe/code-quality/index.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts +58 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js +172 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts +73 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.js +240 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts +38 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js +204 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/index.d.ts +12 -0
- package/dist/mcp/tools/qe/coverage/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/index.js +23 -0
- package/dist/mcp/tools/qe/coverage/index.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts +46 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.js +248 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts +179 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js +554 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts +172 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js +498 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/index.d.ts +35 -0
- package/dist/mcp/tools/qe/flaky-detection/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/index.js +66 -0
- package/dist/mcp/tools/qe/flaky-detection/index.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts +159 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js +462 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js.map +1 -0
- package/dist/mcp/tools/qe/fleet/index.d.ts +422 -0
- package/dist/mcp/tools/qe/fleet/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/fleet/index.js +652 -0
- package/dist/mcp/tools/qe/fleet/index.js.map +1 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts +180 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js +347 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js.map +1 -0
- package/dist/mcp/tools/qe/performance/generate-report.d.ts +146 -0
- package/dist/mcp/tools/qe/performance/generate-report.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/generate-report.js +354 -0
- package/dist/mcp/tools/qe/performance/generate-report.js.map +1 -0
- package/dist/mcp/tools/qe/performance/index.d.ts +13 -0
- package/dist/mcp/tools/qe/performance/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/index.js +24 -0
- package/dist/mcp/tools/qe/performance/index.js.map +1 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts +120 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.js +215 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.js.map +1 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.d.ts +68 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.js +120 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts +239 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js +671 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +219 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +732 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts +447 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js +551 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/index.d.ts +40 -0
- package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/index.js +56 -0
- package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts +226 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js +603 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js.map +1 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.d.ts +212 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.js +617 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.js.map +1 -0
- package/dist/mcp/tools/qe/regression/index.d.ts +36 -0
- package/dist/mcp/tools/qe/regression/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/index.js +63 -0
- package/dist/mcp/tools/qe/regression/index.js.map +1 -0
- package/dist/mcp/tools/qe/regression/select-tests.d.ts +241 -0
- package/dist/mcp/tools/qe/regression/select-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/select-tests.js +601 -0
- package/dist/mcp/tools/qe/regression/select-tests.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts +134 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js +737 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/index.d.ts +40 -0
- package/dist/mcp/tools/qe/requirements/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/index.js +84 -0
- package/dist/mcp/tools/qe/requirements/index.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts +196 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.js +740 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.js.map +1 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts +300 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.js +492 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.js.map +1 -0
- package/dist/mcp/tools/qe/security/index.d.ts +34 -0
- package/dist/mcp/tools/qe/security/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/index.js +44 -0
- package/dist/mcp/tools/qe/security/index.js.map +1 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts +240 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.js +535 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -0
- package/dist/mcp/tools/qe/security/validate-compliance.d.ts +299 -0
- package/dist/mcp/tools/qe/security/validate-compliance.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/validate-compliance.js +517 -0
- package/dist/mcp/tools/qe/security/validate-compliance.js.map +1 -0
- package/dist/mcp/tools/qe/shared/types.d.ts +840 -0
- package/dist/mcp/tools/qe/shared/types.d.ts.map +1 -0
- package/dist/mcp/tools/qe/shared/types.js +13 -0
- package/dist/mcp/tools/qe/shared/types.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts +264 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.js +553 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts +167 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.js +336 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/index.d.ts +44 -0
- package/dist/mcp/tools/qe/test-data/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/index.js +90 -0
- package/dist/mcp/tools/qe/test-data/index.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +165 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js +342 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts +144 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js +432 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts +98 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js +459 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts +83 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js +483 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/index.d.ts +56 -0
- package/dist/mcp/tools/qe/test-generation/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/index.js +97 -0
- package/dist/mcp/tools/qe/test-generation/index.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts +124 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js +362 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js.map +1 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts +119 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.js +280 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.js.map +1 -0
- package/dist/mcp/tools/qe/visual/detect-regression.d.ts +138 -0
- package/dist/mcp/tools/qe/visual/detect-regression.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/detect-regression.js +271 -0
- package/dist/mcp/tools/qe/visual/detect-regression.js.map +1 -0
- package/dist/mcp/tools/qe/visual/index.d.ts +16 -0
- package/dist/mcp/tools/qe/visual/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/index.js +22 -0
- package/dist/mcp/tools/qe/visual/index.js.map +1 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts +276 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.js +413 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.js.map +1 -0
- package/dist/mcp/tools.d.ts +44 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1980 -1
- package/dist/mcp/tools.js.map +1 -1
- package/package.json +2 -2
- package/dist/learning/__mocks__/LearningEngine.d.ts +0 -39
- package/dist/learning/__mocks__/LearningEngine.d.ts.map +0 -1
- package/dist/learning/__mocks__/LearningEngine.js +0 -116
- package/dist/learning/__mocks__/LearningEngine.js.map +0 -1
- package/dist/utils/__mocks__/Database.d.ts +0 -85
- package/dist/utils/__mocks__/Database.d.ts.map +0 -1
- package/dist/utils/__mocks__/Database.js +0 -125
- package/dist/utils/__mocks__/Database.js.map +0 -1
- package/dist/utils/__mocks__/Logger.d.ts +0 -26
- package/dist/utils/__mocks__/Logger.d.ts.map +0 -1
- package/dist/utils/__mocks__/Logger.js +0 -44
- package/dist/utils/__mocks__/Logger.js.map +0 -1
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Analyze Database Schema Tool
|
|
4
|
+
*
|
|
5
|
+
* Comprehensive database schema analysis with support for:
|
|
6
|
+
* - Multi-database introspection (PostgreSQL, MySQL, SQLite, MongoDB)
|
|
7
|
+
* - Constraint detection and validation
|
|
8
|
+
* - Relationship mapping and integrity checks
|
|
9
|
+
* - Data type analysis and compatibility
|
|
10
|
+
* - Index optimization recommendations
|
|
11
|
+
*
|
|
12
|
+
* @module test-data/analyze-schema
|
|
13
|
+
* @version 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ConstraintType = exports.DataTypeCategory = void 0;
|
|
17
|
+
exports.analyzeSchema = analyzeSchema;
|
|
18
|
+
/**
|
|
19
|
+
* Data type categories
|
|
20
|
+
*/
|
|
21
|
+
var DataTypeCategory;
|
|
22
|
+
(function (DataTypeCategory) {
|
|
23
|
+
DataTypeCategory["NUMERIC"] = "numeric";
|
|
24
|
+
DataTypeCategory["STRING"] = "string";
|
|
25
|
+
DataTypeCategory["TEMPORAL"] = "temporal";
|
|
26
|
+
DataTypeCategory["BOOLEAN"] = "boolean";
|
|
27
|
+
DataTypeCategory["SPATIAL"] = "spatial";
|
|
28
|
+
DataTypeCategory["JSON"] = "json";
|
|
29
|
+
DataTypeCategory["BINARY"] = "binary";
|
|
30
|
+
DataTypeCategory["ARRAY"] = "array";
|
|
31
|
+
DataTypeCategory["UNKNOWN"] = "unknown";
|
|
32
|
+
})(DataTypeCategory || (exports.DataTypeCategory = DataTypeCategory = {}));
|
|
33
|
+
/**
|
|
34
|
+
* Constraint type
|
|
35
|
+
*/
|
|
36
|
+
var ConstraintType;
|
|
37
|
+
(function (ConstraintType) {
|
|
38
|
+
ConstraintType["PRIMARY_KEY"] = "PRIMARY_KEY";
|
|
39
|
+
ConstraintType["FOREIGN_KEY"] = "FOREIGN_KEY";
|
|
40
|
+
ConstraintType["UNIQUE"] = "UNIQUE";
|
|
41
|
+
ConstraintType["NOT_NULL"] = "NOT_NULL";
|
|
42
|
+
ConstraintType["CHECK"] = "CHECK";
|
|
43
|
+
ConstraintType["DEFAULT"] = "DEFAULT";
|
|
44
|
+
})(ConstraintType || (exports.ConstraintType = ConstraintType = {}));
|
|
45
|
+
/**
|
|
46
|
+
* Schema analyzer
|
|
47
|
+
*/
|
|
48
|
+
class SchemaAnalyzer {
|
|
49
|
+
constructor() {
|
|
50
|
+
this.schema = {
|
|
51
|
+
name: '',
|
|
52
|
+
type: 'postgresql',
|
|
53
|
+
tables: [],
|
|
54
|
+
relationships: []
|
|
55
|
+
};
|
|
56
|
+
this.dataTypeMap = new Map([
|
|
57
|
+
['int', DataTypeCategory.NUMERIC],
|
|
58
|
+
['integer', DataTypeCategory.NUMERIC],
|
|
59
|
+
['bigint', DataTypeCategory.NUMERIC],
|
|
60
|
+
['smallint', DataTypeCategory.NUMERIC],
|
|
61
|
+
['decimal', DataTypeCategory.NUMERIC],
|
|
62
|
+
['numeric', DataTypeCategory.NUMERIC],
|
|
63
|
+
['real', DataTypeCategory.NUMERIC],
|
|
64
|
+
['double', DataTypeCategory.NUMERIC],
|
|
65
|
+
['float', DataTypeCategory.NUMERIC],
|
|
66
|
+
['varchar', DataTypeCategory.STRING],
|
|
67
|
+
['char', DataTypeCategory.STRING],
|
|
68
|
+
['text', DataTypeCategory.STRING],
|
|
69
|
+
['string', DataTypeCategory.STRING],
|
|
70
|
+
['date', DataTypeCategory.TEMPORAL],
|
|
71
|
+
['time', DataTypeCategory.TEMPORAL],
|
|
72
|
+
['timestamp', DataTypeCategory.TEMPORAL],
|
|
73
|
+
['datetime', DataTypeCategory.TEMPORAL],
|
|
74
|
+
['boolean', DataTypeCategory.BOOLEAN],
|
|
75
|
+
['bool', DataTypeCategory.BOOLEAN],
|
|
76
|
+
['json', DataTypeCategory.JSON],
|
|
77
|
+
['jsonb', DataTypeCategory.JSON],
|
|
78
|
+
['bytea', DataTypeCategory.BINARY],
|
|
79
|
+
['blob', DataTypeCategory.BINARY],
|
|
80
|
+
['uuid', DataTypeCategory.STRING],
|
|
81
|
+
['array', DataTypeCategory.ARRAY]
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse data type
|
|
86
|
+
*/
|
|
87
|
+
parseDataType(dataType) {
|
|
88
|
+
const normalized = dataType.toLowerCase().split('(')[0].trim();
|
|
89
|
+
return this.dataTypeMap.get(normalized) || DataTypeCategory.UNKNOWN;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Analyze relationships
|
|
93
|
+
*/
|
|
94
|
+
analyzeRelationships() {
|
|
95
|
+
const relationshipCount = this.schema.tables.reduce((sum, t) => sum + t.foreignKeys.length, 0);
|
|
96
|
+
// Find orphaned record risks
|
|
97
|
+
const orphanedRecordRisks = this.schema.tables
|
|
98
|
+
.filter(t => t.foreignKeys.length > 0)
|
|
99
|
+
.map(t => ({
|
|
100
|
+
table: t.name,
|
|
101
|
+
foreignKeyCount: t.foreignKeys.length,
|
|
102
|
+
risk: (t.foreignKeys.some(fk => fk.onDelete === 'SET NULL') ? 'low' : 'medium')
|
|
103
|
+
}));
|
|
104
|
+
// Find circular dependencies
|
|
105
|
+
const circularDependencies = this.detectCircularDependencies();
|
|
106
|
+
// Find cascading delete risks
|
|
107
|
+
const cascadingDeleteRisks = this.schema.tables
|
|
108
|
+
.flatMap(t => t.foreignKeys
|
|
109
|
+
.filter(fk => fk.onDelete === 'CASCADE')
|
|
110
|
+
.map(fk => ({
|
|
111
|
+
from: t.name,
|
|
112
|
+
to: fk.toTable,
|
|
113
|
+
depth: 1
|
|
114
|
+
})))
|
|
115
|
+
.filter(r => r.depth > 0);
|
|
116
|
+
return {
|
|
117
|
+
relationshipCount,
|
|
118
|
+
orphanedRecordRisks,
|
|
119
|
+
circularDependencies,
|
|
120
|
+
cascadingDeleteRisks
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Detect circular dependencies
|
|
125
|
+
*/
|
|
126
|
+
detectCircularDependencies() {
|
|
127
|
+
const circularDeps = [];
|
|
128
|
+
for (const table of this.schema.tables) {
|
|
129
|
+
for (const fk of table.foreignKeys) {
|
|
130
|
+
// Check if referenced table references back to this table
|
|
131
|
+
const referencedTable = this.schema.tables.find(t => t.name === fk.toTable);
|
|
132
|
+
if (referencedTable) {
|
|
133
|
+
for (const refFk of referencedTable.foreignKeys) {
|
|
134
|
+
if (refFk.toTable === table.name) {
|
|
135
|
+
circularDeps.push([table.name, fk.toTable]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return circularDeps;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Analyze indexes
|
|
145
|
+
*/
|
|
146
|
+
analyzeIndexes() {
|
|
147
|
+
const analyses = [];
|
|
148
|
+
for (const table of this.schema.tables) {
|
|
149
|
+
const unused = [];
|
|
150
|
+
const missing = [];
|
|
151
|
+
const redundant = [];
|
|
152
|
+
// Check for redundant indexes (subsets of other indexes)
|
|
153
|
+
for (let i = 0; i < table.indexes.length; i++) {
|
|
154
|
+
for (let j = i + 1; j < table.indexes.length; j++) {
|
|
155
|
+
const idx1 = table.indexes[i];
|
|
156
|
+
const idx2 = table.indexes[j];
|
|
157
|
+
const idx1Start = idx1.columns.slice(0, Math.min(idx1.columns.length, idx2.columns.length));
|
|
158
|
+
const idx2Start = idx2.columns.slice(0, Math.min(idx1.columns.length, idx2.columns.length));
|
|
159
|
+
if (JSON.stringify(idx1Start) === JSON.stringify(idx2Start)) {
|
|
160
|
+
redundant.push({
|
|
161
|
+
indexes: [idx1.name, idx2.name],
|
|
162
|
+
reason: 'One index is a prefix of another'
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Recommend indexes on foreign keys
|
|
168
|
+
for (const fk of table.foreignKeys) {
|
|
169
|
+
const hasIndex = table.indexes.some(idx => idx.columns.length > 0 && idx.columns[0] === fk.fromColumns[0]);
|
|
170
|
+
if (!hasIndex) {
|
|
171
|
+
missing.push({
|
|
172
|
+
columns: fk.fromColumns,
|
|
173
|
+
reason: 'Foreign key column should be indexed for join performance',
|
|
174
|
+
estimatedPerformanceGain: 25
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
analyses.push({
|
|
179
|
+
tableName: table.name,
|
|
180
|
+
unusedIndexes: unused,
|
|
181
|
+
missingIndexes: missing,
|
|
182
|
+
redundantIndexes: redundant
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return analyses[0] || { tableName: '', unusedIndexes: [], missingIndexes: [], redundantIndexes: [] };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Detect data quality issues
|
|
189
|
+
*/
|
|
190
|
+
detectQualityIssues() {
|
|
191
|
+
const issues = [];
|
|
192
|
+
for (const table of this.schema.tables) {
|
|
193
|
+
// Check for tables without primary keys
|
|
194
|
+
if (table.primaryKey.length === 0) {
|
|
195
|
+
issues.push({
|
|
196
|
+
table: table.name,
|
|
197
|
+
severity: 'warning',
|
|
198
|
+
type: 'missing-primary-key',
|
|
199
|
+
description: 'Table has no primary key',
|
|
200
|
+
recommendation: 'Add a primary key to enable efficient updates and deletes'
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// Check for timestamp columns
|
|
204
|
+
const hasTimestamps = table.columns.some(c => c.dataType.toLowerCase().includes('timestamp') ||
|
|
205
|
+
c.dataType.toLowerCase().includes('datetime'));
|
|
206
|
+
if (!hasTimestamps && table.columns.length > 3) {
|
|
207
|
+
issues.push({
|
|
208
|
+
table: table.name,
|
|
209
|
+
severity: 'info',
|
|
210
|
+
type: 'missing-timestamps',
|
|
211
|
+
description: 'Table lacks created_at/updated_at timestamps',
|
|
212
|
+
recommendation: 'Add timestamp columns for audit trails'
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// Check for high percentage of nullable columns
|
|
216
|
+
const nullableCount = table.columns.filter(c => c.nullable).length;
|
|
217
|
+
const nullablePercentage = (nullableCount / table.columns.length) * 100;
|
|
218
|
+
if (nullablePercentage > 50) {
|
|
219
|
+
issues.push({
|
|
220
|
+
table: table.name,
|
|
221
|
+
severity: 'warning',
|
|
222
|
+
type: 'high-nullability',
|
|
223
|
+
description: `${nullablePercentage.toFixed(0)}% of columns are nullable`,
|
|
224
|
+
recommendation: 'Review column nullability requirements'
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Check for text columns that might be enums
|
|
228
|
+
for (const col of table.columns) {
|
|
229
|
+
if (col.category === DataTypeCategory.STRING && col.maxLength && col.maxLength < 50) {
|
|
230
|
+
issues.push({
|
|
231
|
+
table: table.name,
|
|
232
|
+
column: col.name,
|
|
233
|
+
severity: 'info',
|
|
234
|
+
type: 'possible-enum',
|
|
235
|
+
description: `Column '${col.name}' might be better as an enum`,
|
|
236
|
+
recommendation: 'Consider using enum type for better storage and validation'
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return issues;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Generate recommendations
|
|
245
|
+
*/
|
|
246
|
+
generateRecommendations() {
|
|
247
|
+
const recommendations = [];
|
|
248
|
+
// Analyze all tables
|
|
249
|
+
for (const table of this.schema.tables) {
|
|
250
|
+
// Recommend normalized design for large text fields
|
|
251
|
+
const largeTextColumns = table.columns.filter(c => c.category === DataTypeCategory.STRING && c.maxLength && c.maxLength > 1000);
|
|
252
|
+
if (largeTextColumns.length > 1) {
|
|
253
|
+
recommendations.push({
|
|
254
|
+
table: table.name,
|
|
255
|
+
type: 'normalization',
|
|
256
|
+
priority: 'medium',
|
|
257
|
+
description: 'Multiple large text columns detected',
|
|
258
|
+
impact: 'Could reduce storage footprint and improve query performance',
|
|
259
|
+
implementation: 'Consider extracting frequently-accessed text to separate table'
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// Recommend composite indexes
|
|
263
|
+
if (table.foreignKeys.length > 0) {
|
|
264
|
+
recommendations.push({
|
|
265
|
+
table: table.name,
|
|
266
|
+
type: 'indexing',
|
|
267
|
+
priority: 'high',
|
|
268
|
+
description: 'Table has foreign keys but might lack efficient indexes',
|
|
269
|
+
impact: 'Could significantly improve JOIN performance',
|
|
270
|
+
implementation: 'Create indexes on foreign key columns'
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
// Recommend partitioning for large tables
|
|
274
|
+
if (table.rowCount && table.rowCount > 1000000) {
|
|
275
|
+
recommendations.push({
|
|
276
|
+
table: table.name,
|
|
277
|
+
type: 'partitioning',
|
|
278
|
+
priority: 'medium',
|
|
279
|
+
description: `Large table (${table.rowCount.toLocaleString()} rows) might benefit from partitioning`,
|
|
280
|
+
impact: 'Could improve query performance and maintenance operations',
|
|
281
|
+
implementation: 'Consider range or hash partitioning by a suitable column'
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return recommendations;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Calculate metrics
|
|
289
|
+
*/
|
|
290
|
+
calculateMetrics() {
|
|
291
|
+
const metrics = {
|
|
292
|
+
totalTables: this.schema.tables.length,
|
|
293
|
+
totalColumns: 0,
|
|
294
|
+
totalIndexes: 0,
|
|
295
|
+
totalForeignKeys: 0,
|
|
296
|
+
totalConstraints: 0,
|
|
297
|
+
averageColumnsPerTable: 0,
|
|
298
|
+
nullableColumnsPercentage: 0,
|
|
299
|
+
estimatedSize: 0
|
|
300
|
+
};
|
|
301
|
+
let nullableCount = 0;
|
|
302
|
+
for (const table of this.schema.tables) {
|
|
303
|
+
metrics.totalColumns += table.columns.length;
|
|
304
|
+
metrics.totalIndexes += table.indexes.length;
|
|
305
|
+
metrics.totalForeignKeys += table.foreignKeys.length;
|
|
306
|
+
metrics.totalConstraints += table.checkConstraints.length;
|
|
307
|
+
nullableCount += table.columns.filter(c => c.nullable).length;
|
|
308
|
+
if (table.size) {
|
|
309
|
+
metrics.estimatedSize += table.size;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
metrics.averageColumnsPerTable = metrics.totalTables > 0 ? metrics.totalColumns / metrics.totalTables : 0;
|
|
313
|
+
metrics.nullableColumnsPercentage = metrics.totalColumns > 0 ? (nullableCount / metrics.totalColumns) * 100 : 0;
|
|
314
|
+
return metrics;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Get data type distribution
|
|
318
|
+
*/
|
|
319
|
+
getDataTypeDistribution() {
|
|
320
|
+
const distribution = {};
|
|
321
|
+
for (const table of this.schema.tables) {
|
|
322
|
+
for (const column of table.columns) {
|
|
323
|
+
const category = column.category;
|
|
324
|
+
distribution[category] = (distribution[category] || 0) + 1;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return distribution;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Analyze database schema
|
|
332
|
+
*
|
|
333
|
+
* Performs comprehensive analysis of database schema including:
|
|
334
|
+
* - Table and column structure
|
|
335
|
+
* - Constraint and index analysis
|
|
336
|
+
* - Relationship mapping
|
|
337
|
+
* - Data quality assessment
|
|
338
|
+
* - Performance recommendations
|
|
339
|
+
*
|
|
340
|
+
* @param params - Analysis parameters
|
|
341
|
+
* @returns Promise resolving to schema analysis result
|
|
342
|
+
*
|
|
343
|
+
* @example
|
|
344
|
+
* ```typescript
|
|
345
|
+
* const result = await analyzeSchema({
|
|
346
|
+
* databaseType: 'postgresql',
|
|
347
|
+
* databaseName: 'myapp',
|
|
348
|
+
* includeStatistics: true,
|
|
349
|
+
* analyzeIndexes: true,
|
|
350
|
+
* generateRecommendations: true
|
|
351
|
+
* });
|
|
352
|
+
*
|
|
353
|
+
* console.log(`Found ${result.metrics.totalTables} tables`);
|
|
354
|
+
* console.log(`Data quality issues: ${result.qualityIssues?.length || 0}`);
|
|
355
|
+
* console.log(`Recommendations: ${result.recommendations?.length || 0}`);
|
|
356
|
+
* ```
|
|
357
|
+
*/
|
|
358
|
+
async function analyzeSchema(params) {
|
|
359
|
+
const startTime = Date.now();
|
|
360
|
+
const warnings = [];
|
|
361
|
+
// Initialize analyzer
|
|
362
|
+
const analyzer = new SchemaAnalyzer();
|
|
363
|
+
// Create mock schema for demonstration
|
|
364
|
+
const schema = {
|
|
365
|
+
name: params.databaseName || 'unknown',
|
|
366
|
+
type: params.databaseType,
|
|
367
|
+
tables: [
|
|
368
|
+
{
|
|
369
|
+
name: 'users',
|
|
370
|
+
columns: [
|
|
371
|
+
{
|
|
372
|
+
name: 'id',
|
|
373
|
+
dataType: 'uuid',
|
|
374
|
+
category: DataTypeCategory.STRING,
|
|
375
|
+
nullable: false,
|
|
376
|
+
constraints: [ConstraintType.PRIMARY_KEY]
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
name: 'email',
|
|
380
|
+
dataType: 'varchar(255)',
|
|
381
|
+
category: DataTypeCategory.STRING,
|
|
382
|
+
nullable: false,
|
|
383
|
+
maxLength: 255,
|
|
384
|
+
constraints: [ConstraintType.UNIQUE, ConstraintType.NOT_NULL]
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
name: 'name',
|
|
388
|
+
dataType: 'varchar(100)',
|
|
389
|
+
category: DataTypeCategory.STRING,
|
|
390
|
+
nullable: false,
|
|
391
|
+
maxLength: 100,
|
|
392
|
+
constraints: [ConstraintType.NOT_NULL]
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
name: 'age',
|
|
396
|
+
dataType: 'integer',
|
|
397
|
+
category: DataTypeCategory.NUMERIC,
|
|
398
|
+
nullable: true,
|
|
399
|
+
constraints: [ConstraintType.CHECK]
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
name: 'created_at',
|
|
403
|
+
dataType: 'timestamp',
|
|
404
|
+
category: DataTypeCategory.TEMPORAL,
|
|
405
|
+
nullable: false,
|
|
406
|
+
defaultValue: 'CURRENT_TIMESTAMP',
|
|
407
|
+
constraints: [ConstraintType.NOT_NULL, ConstraintType.DEFAULT]
|
|
408
|
+
}
|
|
409
|
+
],
|
|
410
|
+
primaryKey: ['id'],
|
|
411
|
+
indexes: [
|
|
412
|
+
{
|
|
413
|
+
name: 'idx_users_email',
|
|
414
|
+
tableName: 'users',
|
|
415
|
+
columns: ['email'],
|
|
416
|
+
unique: true,
|
|
417
|
+
type: 'B-tree'
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
foreignKeys: [],
|
|
421
|
+
checkConstraints: [
|
|
422
|
+
{
|
|
423
|
+
name: 'age_check',
|
|
424
|
+
expression: 'age >= 18 AND age <= 120'
|
|
425
|
+
}
|
|
426
|
+
],
|
|
427
|
+
uniqueConstraints: [['email']],
|
|
428
|
+
rowCount: 5000,
|
|
429
|
+
size: 512000
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
name: 'orders',
|
|
433
|
+
columns: [
|
|
434
|
+
{
|
|
435
|
+
name: 'id',
|
|
436
|
+
dataType: 'bigserial',
|
|
437
|
+
category: DataTypeCategory.NUMERIC,
|
|
438
|
+
nullable: false,
|
|
439
|
+
constraints: [ConstraintType.PRIMARY_KEY]
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
name: 'user_id',
|
|
443
|
+
dataType: 'uuid',
|
|
444
|
+
category: DataTypeCategory.STRING,
|
|
445
|
+
nullable: false,
|
|
446
|
+
constraints: [ConstraintType.NOT_NULL, ConstraintType.FOREIGN_KEY]
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
name: 'total',
|
|
450
|
+
dataType: 'decimal(10,2)',
|
|
451
|
+
category: DataTypeCategory.NUMERIC,
|
|
452
|
+
nullable: false,
|
|
453
|
+
precision: 10,
|
|
454
|
+
scale: 2,
|
|
455
|
+
constraints: [ConstraintType.NOT_NULL]
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
name: 'status',
|
|
459
|
+
dataType: "varchar(20)",
|
|
460
|
+
category: DataTypeCategory.STRING,
|
|
461
|
+
nullable: false,
|
|
462
|
+
maxLength: 20,
|
|
463
|
+
constraints: [ConstraintType.NOT_NULL]
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
name: 'created_at',
|
|
467
|
+
dataType: 'timestamp',
|
|
468
|
+
category: DataTypeCategory.TEMPORAL,
|
|
469
|
+
nullable: false,
|
|
470
|
+
defaultValue: 'CURRENT_TIMESTAMP',
|
|
471
|
+
constraints: [ConstraintType.NOT_NULL, ConstraintType.DEFAULT]
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
primaryKey: ['id'],
|
|
475
|
+
indexes: [
|
|
476
|
+
{
|
|
477
|
+
name: 'idx_orders_user_id',
|
|
478
|
+
tableName: 'orders',
|
|
479
|
+
columns: ['user_id'],
|
|
480
|
+
unique: false,
|
|
481
|
+
type: 'B-tree'
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'idx_orders_created',
|
|
485
|
+
tableName: 'orders',
|
|
486
|
+
columns: ['created_at'],
|
|
487
|
+
unique: false,
|
|
488
|
+
type: 'B-tree'
|
|
489
|
+
}
|
|
490
|
+
],
|
|
491
|
+
foreignKeys: [
|
|
492
|
+
{
|
|
493
|
+
name: 'fk_orders_user_id',
|
|
494
|
+
fromTable: 'orders',
|
|
495
|
+
fromColumns: ['user_id'],
|
|
496
|
+
toTable: 'users',
|
|
497
|
+
toColumns: ['id'],
|
|
498
|
+
onDelete: 'CASCADE',
|
|
499
|
+
onUpdate: 'CASCADE'
|
|
500
|
+
}
|
|
501
|
+
],
|
|
502
|
+
checkConstraints: [
|
|
503
|
+
{
|
|
504
|
+
name: 'total_positive',
|
|
505
|
+
expression: 'total >= 0'
|
|
506
|
+
}
|
|
507
|
+
],
|
|
508
|
+
uniqueConstraints: [],
|
|
509
|
+
rowCount: 25000,
|
|
510
|
+
size: 2560000
|
|
511
|
+
}
|
|
512
|
+
],
|
|
513
|
+
relationships: [
|
|
514
|
+
{
|
|
515
|
+
from: 'orders',
|
|
516
|
+
to: 'users',
|
|
517
|
+
type: 'one-to-many'
|
|
518
|
+
}
|
|
519
|
+
]
|
|
520
|
+
};
|
|
521
|
+
// Calculate metrics
|
|
522
|
+
const metrics = analyzer.calculateMetrics();
|
|
523
|
+
const dataTypeDistribution = analyzer.getDataTypeDistribution();
|
|
524
|
+
// Optional analyses
|
|
525
|
+
let indexAnalysis;
|
|
526
|
+
let relationshipAnalysis;
|
|
527
|
+
let qualityIssues;
|
|
528
|
+
let recommendations;
|
|
529
|
+
if (params.analyzeIndexes) {
|
|
530
|
+
indexAnalysis = analyzer.analyzeIndexes();
|
|
531
|
+
}
|
|
532
|
+
if (params.generateRecommendations) {
|
|
533
|
+
relationshipAnalysis = analyzer.analyzeRelationships();
|
|
534
|
+
qualityIssues = analyzer.detectQualityIssues();
|
|
535
|
+
recommendations = analyzer.generateRecommendations();
|
|
536
|
+
}
|
|
537
|
+
const duration = Date.now() - startTime;
|
|
538
|
+
return {
|
|
539
|
+
databaseName: params.databaseName || 'unknown',
|
|
540
|
+
databaseType: params.databaseType,
|
|
541
|
+
schema,
|
|
542
|
+
metrics,
|
|
543
|
+
dataTypeDistribution,
|
|
544
|
+
indexAnalysis,
|
|
545
|
+
relationshipAnalysis,
|
|
546
|
+
qualityIssues,
|
|
547
|
+
recommendations,
|
|
548
|
+
duration,
|
|
549
|
+
success: true,
|
|
550
|
+
warnings
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
//# sourceMappingURL=analyze-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-schema.js","sourceRoot":"","sources":["../../../../../src/mcp/tools/qe/test-data/analyze-schema.ts"],"names":[],"mappings":"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"}
|