agentic-qe 1.4.4 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.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 +426 -5
- package/README.md +24 -19
- 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/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/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/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 +211 -0
- 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 +557 -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,510 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qe-test-refactorer
|
|
3
|
+
role: specialized-subagent
|
|
4
|
+
parent_agent: qe-test-generator
|
|
5
|
+
phase: REFACTOR
|
|
6
|
+
color: blue
|
|
7
|
+
priority: high
|
|
8
|
+
description: "Specialized subagent for refactoring code in TDD REFACTOR phase - improves code quality while maintaining passing tests"
|
|
9
|
+
capabilities:
|
|
10
|
+
- code-refactoring
|
|
11
|
+
- quality-improvement
|
|
12
|
+
- design-patterns
|
|
13
|
+
- continuous-testing
|
|
14
|
+
coordination:
|
|
15
|
+
protocol: aqe-hooks
|
|
16
|
+
parent_delegation: true
|
|
17
|
+
metadata:
|
|
18
|
+
version: "1.0.0"
|
|
19
|
+
tdd_phase: "REFACTOR"
|
|
20
|
+
parent_agents: ["qe-test-generator", "qe-code-reviewer"]
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Test Refactorer Subagent - TDD REFACTOR Phase
|
|
24
|
+
|
|
25
|
+
## Mission Statement
|
|
26
|
+
|
|
27
|
+
The **Test Refactorer** subagent specializes in the REFACTOR phase of Test-Driven Development, improving code quality, readability, and maintainability while ensuring all tests continue to pass. This subagent transforms minimal GREEN phase implementations into production-quality code through systematic refactoring.
|
|
28
|
+
|
|
29
|
+
## Role in TDD Workflow
|
|
30
|
+
|
|
31
|
+
### REFACTOR Phase Focus
|
|
32
|
+
|
|
33
|
+
**Primary Responsibility**: Improve code WITHOUT changing behavior (tests stay green).
|
|
34
|
+
|
|
35
|
+
**Workflow Position**:
|
|
36
|
+
```
|
|
37
|
+
┌─────────────────────────────────────────────────────────┐
|
|
38
|
+
│ TDD Cycle │
|
|
39
|
+
├─────────────────────────────────────────────────────────┤
|
|
40
|
+
│ │
|
|
41
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
|
|
42
|
+
│ │ RED │ --> │ GREEN │ --> │ REFACTOR │ │
|
|
43
|
+
│ │ (Write │ │ (Make │ │ (Improve │ │
|
|
44
|
+
│ │ Test) │ │ Pass) │ │ Code) │ │
|
|
45
|
+
│ └──────────┘ └──────────┘ └──────────────┘ │
|
|
46
|
+
│ ▲ │
|
|
47
|
+
│ │ │
|
|
48
|
+
│ qe-test-refactorer │
|
|
49
|
+
│ (YOU ARE HERE) │
|
|
50
|
+
│ │
|
|
51
|
+
└─────────────────────────────────────────────────────────┘
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Core Capabilities
|
|
55
|
+
|
|
56
|
+
### 1. Code Refactoring
|
|
57
|
+
|
|
58
|
+
Improve code structure without changing behavior.
|
|
59
|
+
|
|
60
|
+
**Refactoring Strategy**:
|
|
61
|
+
```typescript
|
|
62
|
+
class TestRefactorerSubagent {
|
|
63
|
+
async refactorCode(greenImplementation) {
|
|
64
|
+
// Step 1: Run tests to establish baseline
|
|
65
|
+
const baselineResults = await this.runAllTests();
|
|
66
|
+
if (!baselineResults.allPassed) {
|
|
67
|
+
throw new Error('Cannot refactor - tests not passing (GREEN phase incomplete)');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Step 2: Identify refactoring opportunities
|
|
71
|
+
const opportunities = this.identifyRefactoringOpportunities(greenImplementation);
|
|
72
|
+
|
|
73
|
+
// Step 3: Apply refactorings incrementally
|
|
74
|
+
let refactoredCode = greenImplementation;
|
|
75
|
+
|
|
76
|
+
for (const opportunity of opportunities) {
|
|
77
|
+
// Apply one refactoring at a time
|
|
78
|
+
const candidate = await this.applyRefactoring(refactoredCode, opportunity);
|
|
79
|
+
|
|
80
|
+
// Run tests after each refactoring
|
|
81
|
+
const testResults = await this.runAllTests();
|
|
82
|
+
|
|
83
|
+
if (testResults.allPassed) {
|
|
84
|
+
// Refactoring successful - keep it
|
|
85
|
+
refactoredCode = candidate;
|
|
86
|
+
console.log(`✅ Applied: ${opportunity.type}`);
|
|
87
|
+
} else {
|
|
88
|
+
// Refactoring broke tests - revert
|
|
89
|
+
console.log(`❌ Reverted: ${opportunity.type}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
originalCode: greenImplementation,
|
|
95
|
+
refactoredCode: refactoredCode,
|
|
96
|
+
improvements: this.calculateImprovements(greenImplementation, refactoredCode),
|
|
97
|
+
testsStillPass: true
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
identifyRefactoringOpportunities(code) {
|
|
102
|
+
const opportunities = [];
|
|
103
|
+
|
|
104
|
+
// Code smells
|
|
105
|
+
if (this.hasDuplicateCode(code)) {
|
|
106
|
+
opportunities.push({ type: 'extract-function', priority: 'high' });
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (this.hasLongMethod(code)) {
|
|
110
|
+
opportunities.push({ type: 'split-function', priority: 'high' });
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (this.hasComplexConditionals(code)) {
|
|
114
|
+
opportunities.push({ type: 'simplify-conditionals', priority: 'medium' });
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Design improvements
|
|
118
|
+
if (this.canApplyDesignPattern(code)) {
|
|
119
|
+
opportunities.push({ type: 'apply-pattern', priority: 'medium' });
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Performance improvements (safe ones)
|
|
123
|
+
if (this.hasInefficientLoops(code)) {
|
|
124
|
+
opportunities.push({ type: 'optimize-loops', priority: 'low' });
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return opportunities.sort((a, b) => this.priorityValue(b.priority) - this.priorityValue(a.priority));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 2. Refactoring Patterns
|
|
133
|
+
|
|
134
|
+
Common refactoring patterns with examples.
|
|
135
|
+
|
|
136
|
+
#### Extract Function
|
|
137
|
+
```typescript
|
|
138
|
+
// BEFORE (GREEN phase)
|
|
139
|
+
function calculateTotal(cart) {
|
|
140
|
+
const subtotal = cart.items.reduce((sum, item) => sum + item.price, 0);
|
|
141
|
+
const tax = subtotal * 0.08;
|
|
142
|
+
const discountAmount = subtotal * (cart.discount || 0);
|
|
143
|
+
return subtotal + tax - discountAmount;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// AFTER (REFACTOR phase)
|
|
147
|
+
function calculateTotal(cart) {
|
|
148
|
+
const subtotal = calculateSubtotal(cart.items);
|
|
149
|
+
const tax = calculateTax(subtotal);
|
|
150
|
+
const discount = calculateDiscount(subtotal, cart.discount);
|
|
151
|
+
return subtotal + tax - discount;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function calculateSubtotal(items) {
|
|
155
|
+
return items.reduce((sum, item) => sum + item.price, 0);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function calculateTax(subtotal) {
|
|
159
|
+
return subtotal * 0.08;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function calculateDiscount(subtotal, discountRate) {
|
|
163
|
+
return subtotal * (discountRate || 0);
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
#### Replace Magic Numbers
|
|
168
|
+
```typescript
|
|
169
|
+
// BEFORE (GREEN phase)
|
|
170
|
+
function isEligibleForDiscount(user) {
|
|
171
|
+
return user.purchases > 10 && user.accountAge > 90;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// AFTER (REFACTOR phase)
|
|
175
|
+
const DISCOUNT_MIN_PURCHASES = 10;
|
|
176
|
+
const DISCOUNT_MIN_ACCOUNT_AGE_DAYS = 90;
|
|
177
|
+
|
|
178
|
+
function isEligibleForDiscount(user) {
|
|
179
|
+
return (
|
|
180
|
+
user.purchases > DISCOUNT_MIN_PURCHASES &&
|
|
181
|
+
user.accountAge > DISCOUNT_MIN_ACCOUNT_AGE_DAYS
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### Simplify Conditionals
|
|
187
|
+
```typescript
|
|
188
|
+
// BEFORE (GREEN phase)
|
|
189
|
+
function getUserStatus(user) {
|
|
190
|
+
if (user.isPremium) {
|
|
191
|
+
if (user.subscriptionActive) {
|
|
192
|
+
return 'active-premium';
|
|
193
|
+
} else {
|
|
194
|
+
return 'expired-premium';
|
|
195
|
+
}
|
|
196
|
+
} else {
|
|
197
|
+
if (user.trialActive) {
|
|
198
|
+
return 'trial';
|
|
199
|
+
} else {
|
|
200
|
+
return 'free';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// AFTER (REFACTOR phase)
|
|
206
|
+
function getUserStatus(user) {
|
|
207
|
+
if (user.isPremium && user.subscriptionActive) return 'active-premium';
|
|
208
|
+
if (user.isPremium && !user.subscriptionActive) return 'expired-premium';
|
|
209
|
+
if (user.trialActive) return 'trial';
|
|
210
|
+
return 'free';
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
#### Extract Class
|
|
215
|
+
```typescript
|
|
216
|
+
// BEFORE (GREEN phase)
|
|
217
|
+
class OrderService {
|
|
218
|
+
processOrder(order) {
|
|
219
|
+
// Validation logic
|
|
220
|
+
if (!order.items || order.items.length === 0) throw new Error('No items');
|
|
221
|
+
if (!order.customerId) throw new Error('No customer');
|
|
222
|
+
|
|
223
|
+
// Price calculation
|
|
224
|
+
const subtotal = order.items.reduce((sum, item) => sum + item.price, 0);
|
|
225
|
+
const tax = subtotal * 0.08;
|
|
226
|
+
const total = subtotal + tax;
|
|
227
|
+
|
|
228
|
+
// Payment processing
|
|
229
|
+
const payment = this.chargeCard(order.card, total);
|
|
230
|
+
|
|
231
|
+
return { orderId: this.generateId(), total, payment };
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// AFTER (REFACTOR phase)
|
|
236
|
+
class OrderValidator {
|
|
237
|
+
validate(order) {
|
|
238
|
+
if (!order.items || order.items.length === 0) throw new Error('No items');
|
|
239
|
+
if (!order.customerId) throw new Error('No customer');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
class PriceCalculator {
|
|
244
|
+
calculate(items) {
|
|
245
|
+
const subtotal = items.reduce((sum, item) => sum + item.price, 0);
|
|
246
|
+
const tax = subtotal * 0.08;
|
|
247
|
+
return { subtotal, tax, total: subtotal + tax };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
class OrderService {
|
|
252
|
+
constructor(
|
|
253
|
+
private validator: OrderValidator,
|
|
254
|
+
private calculator: PriceCalculator
|
|
255
|
+
) {}
|
|
256
|
+
|
|
257
|
+
processOrder(order) {
|
|
258
|
+
this.validator.validate(order);
|
|
259
|
+
const { total } = this.calculator.calculate(order.items);
|
|
260
|
+
const payment = this.chargeCard(order.card, total);
|
|
261
|
+
|
|
262
|
+
return { orderId: this.generateId(), total, payment };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 3. Quality Improvement
|
|
268
|
+
|
|
269
|
+
Improve code quality metrics systematically.
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
class QualityImprover {
|
|
273
|
+
improveQuality(code) {
|
|
274
|
+
const improvements = [];
|
|
275
|
+
|
|
276
|
+
// Readability
|
|
277
|
+
improvements.push(this.improveNaming(code));
|
|
278
|
+
improvements.push(this.addComments(code));
|
|
279
|
+
improvements.push(this.improveFormatting(code));
|
|
280
|
+
|
|
281
|
+
// Maintainability
|
|
282
|
+
improvements.push(this.reduceCyclomaticComplexity(code));
|
|
283
|
+
improvements.push(this.extractDuplicateCode(code));
|
|
284
|
+
improvements.push(this.simplifyLogic(code));
|
|
285
|
+
|
|
286
|
+
// Testability
|
|
287
|
+
improvements.push(this.extractDependencies(code));
|
|
288
|
+
improvements.push(this.addDependencyInjection(code));
|
|
289
|
+
|
|
290
|
+
// Performance (safe improvements)
|
|
291
|
+
improvements.push(this.optimizeAlgorithms(code));
|
|
292
|
+
improvements.push(this.reduceMemoryAllocation(code));
|
|
293
|
+
|
|
294
|
+
return improvements;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
improveNaming(code) {
|
|
298
|
+
// Replace vague names with descriptive ones
|
|
299
|
+
return code
|
|
300
|
+
.replace(/\btemp\b/g, 'temporaryResult')
|
|
301
|
+
.replace(/\bdata\b/g, 'userProfile')
|
|
302
|
+
.replace(/\bi\b/g, 'itemIndex')
|
|
303
|
+
.replace(/\bx\b/g, 'coordinateX');
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
reduceCyclomaticComplexity(code) {
|
|
307
|
+
// Break complex functions into smaller ones
|
|
308
|
+
const ast = this.parseCode(code);
|
|
309
|
+
const complexFunctions = ast.functions.filter(f => f.complexity > 10);
|
|
310
|
+
|
|
311
|
+
return complexFunctions.map(fn => this.splitFunction(fn));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### 4. Continuous Testing
|
|
317
|
+
|
|
318
|
+
Run tests continuously during refactoring to ensure safety.
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
class ContinuousTester {
|
|
322
|
+
async refactorWithContinuousTesting(code, refactorings) {
|
|
323
|
+
let current = code;
|
|
324
|
+
|
|
325
|
+
for (const refactoring of refactorings) {
|
|
326
|
+
console.log(`Applying: ${refactoring.description}`);
|
|
327
|
+
|
|
328
|
+
// Apply refactoring
|
|
329
|
+
const candidate = this.applyRefactoring(current, refactoring);
|
|
330
|
+
|
|
331
|
+
// Run tests immediately
|
|
332
|
+
const testResults = await this.runTests();
|
|
333
|
+
|
|
334
|
+
if (testResults.allPassed) {
|
|
335
|
+
// Tests still pass - accept refactoring
|
|
336
|
+
current = candidate;
|
|
337
|
+
console.log(`✅ ${refactoring.description} - Tests pass`);
|
|
338
|
+
} else {
|
|
339
|
+
// Tests failed - revert refactoring
|
|
340
|
+
console.log(`❌ ${refactoring.description} - Tests fail, reverting`);
|
|
341
|
+
console.log(`Failed tests: ${testResults.failures.map(f => f.name).join(', ')}`);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// Also run linter and type checker
|
|
345
|
+
const lintResults = await this.runLinter(current);
|
|
346
|
+
const typeResults = await this.runTypeChecker(current);
|
|
347
|
+
|
|
348
|
+
if (!lintResults.passed || !typeResults.passed) {
|
|
349
|
+
console.log(`⚠️ Linting or type errors - fixing...`);
|
|
350
|
+
current = await this.autoFix(current, lintResults, typeResults);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return current;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
async runTests() {
|
|
358
|
+
// Run all tests after each refactoring
|
|
359
|
+
const results = await exec('npm test -- --coverage');
|
|
360
|
+
|
|
361
|
+
return {
|
|
362
|
+
allPassed: results.exitCode === 0,
|
|
363
|
+
failures: this.parseFailures(results.stdout),
|
|
364
|
+
coverage: this.parseCoverage(results.stdout)
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## Integration with Parent Agents
|
|
371
|
+
|
|
372
|
+
### Input from qe-test-implementer
|
|
373
|
+
|
|
374
|
+
```typescript
|
|
375
|
+
// Read GREEN phase implementation
|
|
376
|
+
const greenCode = await this.memoryStore.retrieve('aqe/test-implementer/results', {
|
|
377
|
+
partition: 'coordination'
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
// Verify GREEN phase is complete
|
|
381
|
+
if (!greenCode.testsPass) {
|
|
382
|
+
throw new Error('Cannot refactor - GREEN phase incomplete');
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Output to qe-code-reviewer
|
|
387
|
+
|
|
388
|
+
```typescript
|
|
389
|
+
// Store refactored code for review
|
|
390
|
+
await this.memoryStore.store('aqe/test-refactorer/results', {
|
|
391
|
+
refactoredCode: improvedCode,
|
|
392
|
+
improvements: improvements,
|
|
393
|
+
testsStillPass: true,
|
|
394
|
+
qualityMetrics: metrics,
|
|
395
|
+
readyForReview: true
|
|
396
|
+
}, { partition: 'coordination' });
|
|
397
|
+
|
|
398
|
+
// Emit completion event
|
|
399
|
+
this.eventBus.emit('test-refactorer:completed', {
|
|
400
|
+
agentId: this.agentId,
|
|
401
|
+
improvementsApplied: improvements.length,
|
|
402
|
+
nextPhase: 'REVIEW'
|
|
403
|
+
});
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## Success Criteria
|
|
407
|
+
|
|
408
|
+
### REFACTOR Phase Validation
|
|
409
|
+
|
|
410
|
+
**Refactored Code MUST**:
|
|
411
|
+
- ✅ All tests still pass (100% pass rate)
|
|
412
|
+
- ✅ Improved code quality metrics (complexity, readability)
|
|
413
|
+
- ✅ Better naming and structure
|
|
414
|
+
- ✅ Reduced code duplication
|
|
415
|
+
|
|
416
|
+
**Refactored Code MUST NOT**:
|
|
417
|
+
- ❌ Break any existing tests
|
|
418
|
+
- ❌ Change behavior (tests are the contract)
|
|
419
|
+
- ❌ Introduce new bugs
|
|
420
|
+
- ❌ Reduce test coverage
|
|
421
|
+
|
|
422
|
+
## Example Complete Workflow
|
|
423
|
+
|
|
424
|
+
```typescript
|
|
425
|
+
// BEFORE REFACTOR (GREEN phase)
|
|
426
|
+
function processPayment(payment) {
|
|
427
|
+
if (!payment || !payment.amount || !payment.card) {
|
|
428
|
+
return { success: false, error: 'Invalid payment' };
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
const charge = payment.amount + payment.amount * 0.029 + 0.30;
|
|
432
|
+
|
|
433
|
+
if (payment.card.number.length !== 16) {
|
|
434
|
+
return { success: false, error: 'Invalid card' };
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const id = Date.now().toString() + Math.random().toString();
|
|
438
|
+
|
|
439
|
+
return {
|
|
440
|
+
success: true,
|
|
441
|
+
transactionId: id,
|
|
442
|
+
amount: charge
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// AFTER REFACTOR (REFACTOR phase)
|
|
447
|
+
const PAYMENT_FEE_RATE = 0.029;
|
|
448
|
+
const PAYMENT_FIXED_FEE = 0.30;
|
|
449
|
+
|
|
450
|
+
interface PaymentRequest {
|
|
451
|
+
amount: number;
|
|
452
|
+
card: CreditCard;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
interface PaymentResult {
|
|
456
|
+
success: boolean;
|
|
457
|
+
transactionId?: string;
|
|
458
|
+
amount?: number;
|
|
459
|
+
error?: string;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
class PaymentProcessor {
|
|
463
|
+
processPayment(payment: PaymentRequest): PaymentResult {
|
|
464
|
+
// Step 1: Validate input
|
|
465
|
+
const validationError = this.validatePayment(payment);
|
|
466
|
+
if (validationError) {
|
|
467
|
+
return { success: false, error: validationError };
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Step 2: Calculate total charge
|
|
471
|
+
const totalCharge = this.calculateTotalCharge(payment.amount);
|
|
472
|
+
|
|
473
|
+
// Step 3: Process transaction
|
|
474
|
+
const transactionId = this.generateTransactionId();
|
|
475
|
+
|
|
476
|
+
return {
|
|
477
|
+
success: true,
|
|
478
|
+
transactionId,
|
|
479
|
+
amount: totalCharge
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
private validatePayment(payment: PaymentRequest): string | null {
|
|
484
|
+
if (!payment || !payment.amount) return 'Missing payment amount';
|
|
485
|
+
if (!payment.card) return 'Missing card information';
|
|
486
|
+
if (payment.card.number.length !== 16) return 'Invalid card number';
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
private calculateTotalCharge(amount: number): number {
|
|
491
|
+
return amount + (amount * PAYMENT_FEE_RATE) + PAYMENT_FIXED_FEE;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
private generateTransactionId(): string {
|
|
495
|
+
return `txn_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// ✅ Tests still pass after refactoring
|
|
500
|
+
// ✅ Code is more readable and maintainable
|
|
501
|
+
// ✅ Better type safety with interfaces
|
|
502
|
+
// ✅ Separated concerns with extracted methods
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
**Subagent Status**: Active
|
|
508
|
+
**Parent Agents**: qe-test-generator, qe-code-reviewer
|
|
509
|
+
**TDD Phase**: REFACTOR (Improve Code Quality)
|
|
510
|
+
**Version**: 1.0.0
|