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.
Files changed (390) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +133 -27
  2. package/.claude/agents/qe-api-contract-validator.md.backup +1148 -0
  3. package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +1148 -0
  4. package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +1123 -0
  5. package/.claude/agents/qe-chaos-engineer.md +142 -23
  6. package/.claude/agents/qe-chaos-engineer.md.backup +808 -0
  7. package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +808 -0
  8. package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +787 -0
  9. package/.claude/agents/qe-code-complexity.md +111 -23
  10. package/.claude/agents/qe-code-complexity.md.backup +291 -0
  11. package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +291 -0
  12. package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +286 -0
  13. package/.claude/agents/qe-coverage-analyzer.md +306 -30
  14. package/.claude/agents/qe-coverage-analyzer.md.backup +467 -0
  15. package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +467 -0
  16. package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +438 -0
  17. package/.claude/agents/qe-deployment-readiness.md +84 -28
  18. package/.claude/agents/qe-deployment-readiness.md.backup +1166 -0
  19. package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +1166 -0
  20. package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +1140 -0
  21. package/.claude/agents/qe-flaky-test-hunter.md +277 -35
  22. package/.claude/agents/qe-flaky-test-hunter.md.backup +1195 -0
  23. package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +1195 -0
  24. package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +1162 -0
  25. package/.claude/agents/qe-fleet-commander.md +126 -23
  26. package/.claude/agents/qe-fleet-commander.md.backup +718 -0
  27. package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +718 -0
  28. package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +697 -0
  29. package/.claude/agents/qe-performance-tester.md +314 -57
  30. package/.claude/agents/qe-performance-tester.md.backup +428 -0
  31. package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +428 -0
  32. package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +372 -0
  33. package/.claude/agents/qe-production-intelligence.md +126 -27
  34. package/.claude/agents/qe-production-intelligence.md.backup +1219 -0
  35. package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +1219 -0
  36. package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +1194 -0
  37. package/.claude/agents/qe-quality-analyzer.md +127 -32
  38. package/.claude/agents/qe-quality-analyzer.md.backup +425 -0
  39. package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +425 -0
  40. package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +394 -0
  41. package/.claude/agents/qe-quality-gate.md +148 -33
  42. package/.claude/agents/qe-quality-gate.md.backup +446 -0
  43. package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +446 -0
  44. package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +415 -0
  45. package/.claude/agents/qe-regression-risk-analyzer.md +78 -27
  46. package/.claude/agents/qe-regression-risk-analyzer.md.backup +1009 -0
  47. package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +1009 -0
  48. package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +984 -0
  49. package/.claude/agents/qe-requirements-validator.md +131 -27
  50. package/.claude/agents/qe-requirements-validator.md.backup +748 -0
  51. package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +748 -0
  52. package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +723 -0
  53. package/.claude/agents/qe-security-scanner.md +137 -62
  54. package/.claude/agents/qe-security-scanner.md.backup +634 -0
  55. package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +634 -0
  56. package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +573 -0
  57. package/.claude/agents/qe-test-data-architect.md +129 -26
  58. package/.claude/agents/qe-test-data-architect.md.backup +1064 -0
  59. package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +1064 -0
  60. package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +1040 -0
  61. package/.claude/agents/qe-test-executor.md +165 -21
  62. package/.claude/agents/qe-test-executor.md.backup +389 -0
  63. package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +389 -0
  64. package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +369 -0
  65. package/.claude/agents/qe-test-generator.md +379 -34
  66. package/.claude/agents/qe-test-generator.md.backup +997 -0
  67. package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +997 -0
  68. package/.claude/agents/qe-visual-tester.md +236 -23
  69. package/.claude/agents/qe-visual-tester.md.backup +777 -0
  70. package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +777 -0
  71. package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +756 -0
  72. package/.claude/agents/subagents/qe-code-reviewer.md +59 -0
  73. package/.claude/agents/subagents/qe-data-generator.md +60 -0
  74. package/.claude/agents/subagents/qe-integration-tester.md +77 -0
  75. package/.claude/agents/subagents/qe-performance-validator.md +55 -0
  76. package/.claude/agents/subagents/qe-security-auditor.md +51 -0
  77. package/.claude/agents/subagents/qe-test-implementer.md +371 -0
  78. package/.claude/agents/subagents/qe-test-refactorer.md +510 -0
  79. package/.claude/agents/subagents/qe-test-writer.md +603 -0
  80. package/.claude/skills/accessibility-testing/SKILL.md +764 -777
  81. package/.claude/skills/agentic-quality-engineering/SKILL.md +0 -6
  82. package/.claude/skills/api-testing-patterns/SKILL.md +0 -12
  83. package/.claude/skills/bug-reporting-excellence/SKILL.md +0 -6
  84. package/.claude/skills/chaos-engineering-resilience/SKILL.md +0 -6
  85. package/.claude/skills/code-review-quality/SKILL.md +0 -6
  86. package/.claude/skills/compatibility-testing/SKILL.md +0 -6
  87. package/.claude/skills/compliance-testing/SKILL.md +0 -6
  88. package/.claude/skills/consultancy-practices/SKILL.md +0 -6
  89. package/.claude/skills/context-driven-testing/SKILL.md +0 -6
  90. package/.claude/skills/contract-testing/SKILL.md +0 -6
  91. package/.claude/skills/database-testing/SKILL.md +0 -6
  92. package/.claude/skills/exploratory-testing-advanced/SKILL.md +0 -6
  93. package/.claude/skills/holistic-testing-pact/SKILL.md +0 -6
  94. package/.claude/skills/localization-testing/SKILL.md +0 -6
  95. package/.claude/skills/mobile-testing/SKILL.md +535 -548
  96. package/.claude/skills/mutation-testing/SKILL.md +0 -6
  97. package/.claude/skills/performance-testing/SKILL.md +0 -6
  98. package/.claude/skills/quality-metrics/SKILL.md +0 -12
  99. package/.claude/skills/refactoring-patterns/SKILL.md +0 -6
  100. package/.claude/skills/regression-testing/SKILL.md +1033 -1045
  101. package/.claude/skills/risk-based-testing/SKILL.md +0 -12
  102. package/.claude/skills/security-testing/SKILL.md +0 -6
  103. package/.claude/skills/shift-left-testing/SKILL.md +529 -535
  104. package/.claude/skills/shift-right-testing/SKILL.md +585 -591
  105. package/.claude/skills/tdd-london-chicago/SKILL.md +0 -6
  106. package/.claude/skills/technical-writing/SKILL.md +0 -6
  107. package/.claude/skills/test-automation-strategy/SKILL.md +0 -6
  108. package/.claude/skills/test-data-management/SKILL.md +1054 -1067
  109. package/.claude/skills/test-design-techniques/SKILL.md +0 -6
  110. package/.claude/skills/test-environment-management/SKILL.md +0 -6
  111. package/.claude/skills/test-reporting-analytics/SKILL.md +0 -6
  112. package/.claude/skills/visual-testing-advanced/SKILL.md +0 -6
  113. package/.claude/skills/xp-practices/SKILL.md +0 -6
  114. package/CHANGELOG.md +426 -5
  115. package/README.md +24 -19
  116. package/dist/cli/commands/init.d.ts +4 -0
  117. package/dist/cli/commands/init.d.ts.map +1 -1
  118. package/dist/cli/commands/init.js +97 -44
  119. package/dist/cli/commands/init.js.map +1 -1
  120. package/dist/mcp/handlers/coordination/index.d.ts +14 -14
  121. package/dist/mcp/handlers/coordination/index.d.ts.map +1 -1
  122. package/dist/mcp/handlers/coordination/index.js +14 -14
  123. package/dist/mcp/handlers/coordination/index.js.map +1 -1
  124. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
  125. package/dist/mcp/handlers/phase2/Phase2Tools.js +39 -10
  126. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  127. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +63 -0
  128. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -0
  129. package/dist/mcp/handlers/phase3/Phase3DomainTools.js +885 -0
  130. package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -0
  131. package/dist/mcp/handlers/phase3/index.d.ts +6 -0
  132. package/dist/mcp/handlers/phase3/index.d.ts.map +1 -0
  133. package/dist/mcp/handlers/phase3/index.js +10 -0
  134. package/dist/mcp/handlers/phase3/index.js.map +1 -0
  135. package/dist/mcp/handlers/prediction/index.d.ts +10 -10
  136. package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
  137. package/dist/mcp/handlers/prediction/index.js +10 -10
  138. package/dist/mcp/handlers/prediction/index.js.map +1 -1
  139. package/dist/mcp/handlers/security/check-authz.d.ts +152 -0
  140. package/dist/mcp/handlers/security/check-authz.d.ts.map +1 -0
  141. package/dist/mcp/handlers/security/check-authz.js +434 -0
  142. package/dist/mcp/handlers/security/check-authz.js.map +1 -0
  143. package/dist/mcp/handlers/security/generate-report.d.ts +156 -0
  144. package/dist/mcp/handlers/security/generate-report.d.ts.map +1 -0
  145. package/dist/mcp/handlers/security/generate-report.js +469 -0
  146. package/dist/mcp/handlers/security/generate-report.js.map +1 -0
  147. package/dist/mcp/handlers/security/index.d.ts +80 -0
  148. package/dist/mcp/handlers/security/index.d.ts.map +1 -0
  149. package/dist/mcp/handlers/security/index.js +91 -0
  150. package/dist/mcp/handlers/security/index.js.map +1 -0
  151. package/dist/mcp/handlers/security/scan-comprehensive.d.ts +66 -0
  152. package/dist/mcp/handlers/security/scan-comprehensive.d.ts.map +1 -0
  153. package/dist/mcp/handlers/security/scan-comprehensive.js +296 -0
  154. package/dist/mcp/handlers/security/scan-comprehensive.js.map +1 -0
  155. package/dist/mcp/handlers/security/scan-dependencies.d.ts +148 -0
  156. package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +1 -0
  157. package/dist/mcp/handlers/security/scan-dependencies.js +354 -0
  158. package/dist/mcp/handlers/security/scan-dependencies.js.map +1 -0
  159. package/dist/mcp/handlers/security/validate-auth.d.ts +128 -0
  160. package/dist/mcp/handlers/security/validate-auth.d.ts.map +1 -0
  161. package/dist/mcp/handlers/security/validate-auth.js +294 -0
  162. package/dist/mcp/handlers/security/validate-auth.js.map +1 -0
  163. package/dist/mcp/handlers/test/generate-integration-tests.d.ts +95 -0
  164. package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -0
  165. package/dist/mcp/handlers/test/generate-integration-tests.js +286 -0
  166. package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -0
  167. package/dist/mcp/handlers/test/generate-unit-tests.d.ts +89 -0
  168. package/dist/mcp/handlers/test/generate-unit-tests.d.ts.map +1 -0
  169. package/dist/mcp/handlers/test/generate-unit-tests.js +273 -0
  170. package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -0
  171. package/dist/mcp/handlers/test/optimize-test-suite.d.ts +97 -0
  172. package/dist/mcp/handlers/test/optimize-test-suite.d.ts.map +1 -0
  173. package/dist/mcp/handlers/test/optimize-test-suite.js +282 -0
  174. package/dist/mcp/handlers/test/optimize-test-suite.js.map +1 -0
  175. package/dist/mcp/server.d.ts.map +1 -1
  176. package/dist/mcp/server.js +211 -0
  177. package/dist/mcp/server.js.map +1 -1
  178. package/dist/mcp/tools/deprecated.d.ts +1390 -0
  179. package/dist/mcp/tools/deprecated.d.ts.map +1 -0
  180. package/dist/mcp/tools/deprecated.js +859 -0
  181. package/dist/mcp/tools/deprecated.js.map +1 -0
  182. package/dist/mcp/tools/qe/api-contract/index.d.ts +138 -0
  183. package/dist/mcp/tools/qe/api-contract/index.d.ts.map +1 -0
  184. package/dist/mcp/tools/qe/api-contract/index.js +572 -0
  185. package/dist/mcp/tools/qe/api-contract/index.js.map +1 -0
  186. package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts +110 -0
  187. package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts.map +1 -0
  188. package/dist/mcp/tools/qe/code-quality/analyze-complexity.js +381 -0
  189. package/dist/mcp/tools/qe/code-quality/analyze-complexity.js.map +1 -0
  190. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts +115 -0
  191. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts.map +1 -0
  192. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js +461 -0
  193. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js.map +1 -0
  194. package/dist/mcp/tools/qe/code-quality/index.d.ts +12 -0
  195. package/dist/mcp/tools/qe/code-quality/index.d.ts.map +1 -0
  196. package/dist/mcp/tools/qe/code-quality/index.js +30 -0
  197. package/dist/mcp/tools/qe/code-quality/index.js.map +1 -0
  198. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts +58 -0
  199. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts.map +1 -0
  200. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js +172 -0
  201. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js.map +1 -0
  202. package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts +73 -0
  203. package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts.map +1 -0
  204. package/dist/mcp/tools/qe/coverage/calculate-trends.js +240 -0
  205. package/dist/mcp/tools/qe/coverage/calculate-trends.js.map +1 -0
  206. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts +38 -0
  207. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts.map +1 -0
  208. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js +204 -0
  209. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js.map +1 -0
  210. package/dist/mcp/tools/qe/coverage/index.d.ts +12 -0
  211. package/dist/mcp/tools/qe/coverage/index.d.ts.map +1 -0
  212. package/dist/mcp/tools/qe/coverage/index.js +23 -0
  213. package/dist/mcp/tools/qe/coverage/index.js.map +1 -0
  214. package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts +46 -0
  215. package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts.map +1 -0
  216. package/dist/mcp/tools/qe/coverage/recommend-tests.js +248 -0
  217. package/dist/mcp/tools/qe/coverage/recommend-tests.js.map +1 -0
  218. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts +179 -0
  219. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts.map +1 -0
  220. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js +554 -0
  221. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js.map +1 -0
  222. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts +172 -0
  223. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts.map +1 -0
  224. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js +498 -0
  225. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js.map +1 -0
  226. package/dist/mcp/tools/qe/flaky-detection/index.d.ts +35 -0
  227. package/dist/mcp/tools/qe/flaky-detection/index.d.ts.map +1 -0
  228. package/dist/mcp/tools/qe/flaky-detection/index.js +66 -0
  229. package/dist/mcp/tools/qe/flaky-detection/index.js.map +1 -0
  230. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts +159 -0
  231. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts.map +1 -0
  232. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js +462 -0
  233. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js.map +1 -0
  234. package/dist/mcp/tools/qe/fleet/index.d.ts +422 -0
  235. package/dist/mcp/tools/qe/fleet/index.d.ts.map +1 -0
  236. package/dist/mcp/tools/qe/fleet/index.js +652 -0
  237. package/dist/mcp/tools/qe/fleet/index.js.map +1 -0
  238. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts +180 -0
  239. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts.map +1 -0
  240. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js +347 -0
  241. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js.map +1 -0
  242. package/dist/mcp/tools/qe/performance/generate-report.d.ts +146 -0
  243. package/dist/mcp/tools/qe/performance/generate-report.d.ts.map +1 -0
  244. package/dist/mcp/tools/qe/performance/generate-report.js +354 -0
  245. package/dist/mcp/tools/qe/performance/generate-report.js.map +1 -0
  246. package/dist/mcp/tools/qe/performance/index.d.ts +13 -0
  247. package/dist/mcp/tools/qe/performance/index.d.ts.map +1 -0
  248. package/dist/mcp/tools/qe/performance/index.js +24 -0
  249. package/dist/mcp/tools/qe/performance/index.js.map +1 -0
  250. package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts +120 -0
  251. package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts.map +1 -0
  252. package/dist/mcp/tools/qe/performance/monitor-realtime.js +215 -0
  253. package/dist/mcp/tools/qe/performance/monitor-realtime.js.map +1 -0
  254. package/dist/mcp/tools/qe/performance/run-benchmark.d.ts +68 -0
  255. package/dist/mcp/tools/qe/performance/run-benchmark.d.ts.map +1 -0
  256. package/dist/mcp/tools/qe/performance/run-benchmark.js +120 -0
  257. package/dist/mcp/tools/qe/performance/run-benchmark.js.map +1 -0
  258. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts +239 -0
  259. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts.map +1 -0
  260. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js +671 -0
  261. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js.map +1 -0
  262. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +219 -0
  263. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -0
  264. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +732 -0
  265. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -0
  266. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts +447 -0
  267. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts.map +1 -0
  268. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js +551 -0
  269. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js.map +1 -0
  270. package/dist/mcp/tools/qe/quality-gates/index.d.ts +40 -0
  271. package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -0
  272. package/dist/mcp/tools/qe/quality-gates/index.js +56 -0
  273. package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -0
  274. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts +226 -0
  275. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts.map +1 -0
  276. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js +603 -0
  277. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js.map +1 -0
  278. package/dist/mcp/tools/qe/regression/analyze-risk.d.ts +212 -0
  279. package/dist/mcp/tools/qe/regression/analyze-risk.d.ts.map +1 -0
  280. package/dist/mcp/tools/qe/regression/analyze-risk.js +617 -0
  281. package/dist/mcp/tools/qe/regression/analyze-risk.js.map +1 -0
  282. package/dist/mcp/tools/qe/regression/index.d.ts +36 -0
  283. package/dist/mcp/tools/qe/regression/index.d.ts.map +1 -0
  284. package/dist/mcp/tools/qe/regression/index.js +63 -0
  285. package/dist/mcp/tools/qe/regression/index.js.map +1 -0
  286. package/dist/mcp/tools/qe/regression/select-tests.d.ts +241 -0
  287. package/dist/mcp/tools/qe/regression/select-tests.d.ts.map +1 -0
  288. package/dist/mcp/tools/qe/regression/select-tests.js +601 -0
  289. package/dist/mcp/tools/qe/regression/select-tests.js.map +1 -0
  290. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts +134 -0
  291. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts.map +1 -0
  292. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js +737 -0
  293. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js.map +1 -0
  294. package/dist/mcp/tools/qe/requirements/index.d.ts +40 -0
  295. package/dist/mcp/tools/qe/requirements/index.d.ts.map +1 -0
  296. package/dist/mcp/tools/qe/requirements/index.js +84 -0
  297. package/dist/mcp/tools/qe/requirements/index.js.map +1 -0
  298. package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts +196 -0
  299. package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts.map +1 -0
  300. package/dist/mcp/tools/qe/requirements/validate-requirements.js +740 -0
  301. package/dist/mcp/tools/qe/requirements/validate-requirements.js.map +1 -0
  302. package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts +300 -0
  303. package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts.map +1 -0
  304. package/dist/mcp/tools/qe/security/detect-vulnerabilities.js +492 -0
  305. package/dist/mcp/tools/qe/security/detect-vulnerabilities.js.map +1 -0
  306. package/dist/mcp/tools/qe/security/index.d.ts +34 -0
  307. package/dist/mcp/tools/qe/security/index.d.ts.map +1 -0
  308. package/dist/mcp/tools/qe/security/index.js +44 -0
  309. package/dist/mcp/tools/qe/security/index.js.map +1 -0
  310. package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts +240 -0
  311. package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts.map +1 -0
  312. package/dist/mcp/tools/qe/security/scan-comprehensive.js +557 -0
  313. package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -0
  314. package/dist/mcp/tools/qe/security/validate-compliance.d.ts +299 -0
  315. package/dist/mcp/tools/qe/security/validate-compliance.d.ts.map +1 -0
  316. package/dist/mcp/tools/qe/security/validate-compliance.js +517 -0
  317. package/dist/mcp/tools/qe/security/validate-compliance.js.map +1 -0
  318. package/dist/mcp/tools/qe/shared/types.d.ts +840 -0
  319. package/dist/mcp/tools/qe/shared/types.d.ts.map +1 -0
  320. package/dist/mcp/tools/qe/shared/types.js +13 -0
  321. package/dist/mcp/tools/qe/shared/types.js.map +1 -0
  322. package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts +264 -0
  323. package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts.map +1 -0
  324. package/dist/mcp/tools/qe/test-data/analyze-schema.js +553 -0
  325. package/dist/mcp/tools/qe/test-data/analyze-schema.js.map +1 -0
  326. package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts +167 -0
  327. package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts.map +1 -0
  328. package/dist/mcp/tools/qe/test-data/generate-test-data.js +336 -0
  329. package/dist/mcp/tools/qe/test-data/generate-test-data.js.map +1 -0
  330. package/dist/mcp/tools/qe/test-data/index.d.ts +44 -0
  331. package/dist/mcp/tools/qe/test-data/index.d.ts.map +1 -0
  332. package/dist/mcp/tools/qe/test-data/index.js +90 -0
  333. package/dist/mcp/tools/qe/test-data/index.js.map +1 -0
  334. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +165 -0
  335. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -0
  336. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js +342 -0
  337. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -0
  338. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts +144 -0
  339. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts.map +1 -0
  340. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js +432 -0
  341. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js.map +1 -0
  342. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts +98 -0
  343. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts.map +1 -0
  344. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js +459 -0
  345. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js.map +1 -0
  346. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts +83 -0
  347. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts.map +1 -0
  348. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js +483 -0
  349. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js.map +1 -0
  350. package/dist/mcp/tools/qe/test-generation/index.d.ts +56 -0
  351. package/dist/mcp/tools/qe/test-generation/index.d.ts.map +1 -0
  352. package/dist/mcp/tools/qe/test-generation/index.js +97 -0
  353. package/dist/mcp/tools/qe/test-generation/index.js.map +1 -0
  354. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts +124 -0
  355. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts.map +1 -0
  356. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js +362 -0
  357. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js.map +1 -0
  358. package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts +119 -0
  359. package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts.map +1 -0
  360. package/dist/mcp/tools/qe/visual/compare-screenshots.js +280 -0
  361. package/dist/mcp/tools/qe/visual/compare-screenshots.js.map +1 -0
  362. package/dist/mcp/tools/qe/visual/detect-regression.d.ts +138 -0
  363. package/dist/mcp/tools/qe/visual/detect-regression.d.ts.map +1 -0
  364. package/dist/mcp/tools/qe/visual/detect-regression.js +271 -0
  365. package/dist/mcp/tools/qe/visual/detect-regression.js.map +1 -0
  366. package/dist/mcp/tools/qe/visual/index.d.ts +16 -0
  367. package/dist/mcp/tools/qe/visual/index.d.ts.map +1 -0
  368. package/dist/mcp/tools/qe/visual/index.js +22 -0
  369. package/dist/mcp/tools/qe/visual/index.js.map +1 -0
  370. package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts +276 -0
  371. package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts.map +1 -0
  372. package/dist/mcp/tools/qe/visual/validate-accessibility.js +413 -0
  373. package/dist/mcp/tools/qe/visual/validate-accessibility.js.map +1 -0
  374. package/dist/mcp/tools.d.ts +44 -0
  375. package/dist/mcp/tools.d.ts.map +1 -1
  376. package/dist/mcp/tools.js +1980 -1
  377. package/dist/mcp/tools.js.map +1 -1
  378. package/package.json +2 -2
  379. package/dist/learning/__mocks__/LearningEngine.d.ts +0 -39
  380. package/dist/learning/__mocks__/LearningEngine.d.ts.map +0 -1
  381. package/dist/learning/__mocks__/LearningEngine.js +0 -116
  382. package/dist/learning/__mocks__/LearningEngine.js.map +0 -1
  383. package/dist/utils/__mocks__/Database.d.ts +0 -85
  384. package/dist/utils/__mocks__/Database.d.ts.map +0 -1
  385. package/dist/utils/__mocks__/Database.js +0 -125
  386. package/dist/utils/__mocks__/Database.js.map +0 -1
  387. package/dist/utils/__mocks__/Logger.d.ts +0 -26
  388. package/dist/utils/__mocks__/Logger.d.ts.map +0 -1
  389. package/dist/utils/__mocks__/Logger.js +0 -44
  390. 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