agentic-qe 1.4.4 → 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.
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 +397 -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 +535 -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,554 @@
1
+ "use strict";
2
+ /**
3
+ * Flaky Test Pattern Analysis Tool
4
+ *
5
+ * Identifies flaky test patterns: timing, environment, dependency, race-condition.
6
+ * Provides root cause analysis and pattern classification using ML-enhanced detection.
7
+ *
8
+ * Features:
9
+ * - Pattern identification (timing, environment, order-dependency, race-condition)
10
+ * - Root cause classification with confidence scores
11
+ * - Pattern correlation analysis
12
+ * - Trend detection across test suite
13
+ * - Evidence-based diagnosis
14
+ *
15
+ * @version 1.0.0
16
+ * @author Agentic QE Team - Phase 3
17
+ * @date 2025-11-08
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.detectTimingPattern = detectTimingPattern;
21
+ exports.detectEnvironmentPattern = detectEnvironmentPattern;
22
+ exports.detectRaceConditionPattern = detectRaceConditionPattern;
23
+ exports.detectDependencyPattern = detectDependencyPattern;
24
+ exports.detectResourceContentionPattern = detectResourceContentionPattern;
25
+ exports.analyzeFlakyTestPatterns = analyzeFlakyTestPatterns;
26
+ // ==================== Pattern Detection ====================
27
+ /**
28
+ * Detect timing patterns
29
+ */
30
+ function detectTimingPattern(results) {
31
+ const durations = results.map(r => r.duration);
32
+ const mean = durations.reduce((sum, d) => sum + d, 0) / durations.length;
33
+ const variance = durations.reduce((sum, d) => sum + Math.pow(d - mean, 2), 0) / durations.length;
34
+ const stdDev = Math.sqrt(variance);
35
+ const cv = mean > 0 ? stdDev / mean : 0;
36
+ // High coefficient of variation indicates timing issues
37
+ if (cv > 0.5) {
38
+ const evidence = [
39
+ `Coefficient of variation: ${(cv * 100).toFixed(1)}%`,
40
+ `Mean duration: ${mean.toFixed(0)}ms`,
41
+ `Standard deviation: ${stdDev.toFixed(0)}ms`,
42
+ `Duration range: ${Math.min(...durations).toFixed(0)}-${Math.max(...durations).toFixed(0)}ms`
43
+ ];
44
+ // Check for timeout-related failures
45
+ const timeoutFailures = results.filter(r => r.status === 'failed' && r.error?.toLowerCase().includes('timeout'));
46
+ if (timeoutFailures.length > 0) {
47
+ evidence.push(`${timeoutFailures.length} timeout-related failures`);
48
+ }
49
+ const confidence = Math.min(cv, 1.0);
50
+ const frequency = cv;
51
+ return {
52
+ id: `timing-${Date.now()}`,
53
+ type: 'timing',
54
+ affectedTests: [results[0].testId],
55
+ confidence,
56
+ frequency,
57
+ severity: cv > 0.7 ? 'high' : 'medium',
58
+ description: 'Test duration varies significantly, indicating timing dependencies',
59
+ rootCause: {
60
+ category: 'code',
61
+ cause: 'Hardcoded waits or timing-dependent assertions',
62
+ confidence: 0.85,
63
+ complexity: 'medium',
64
+ estimatedFixTime: 2
65
+ },
66
+ evidence,
67
+ mitigation: [
68
+ 'Replace hardcoded sleep() with explicit wait conditions',
69
+ 'Use polling with timeout instead of fixed delays',
70
+ 'Add retry logic with exponential backoff',
71
+ 'Increase timeouts for slow operations'
72
+ ],
73
+ firstDetected: Math.min(...results.map(r => new Date(r.timestamp).getTime())),
74
+ lastSeen: Math.max(...results.map(r => new Date(r.timestamp).getTime()))
75
+ };
76
+ }
77
+ return null;
78
+ }
79
+ /**
80
+ * Detect environment patterns
81
+ */
82
+ function detectEnvironmentPattern(results) {
83
+ const withEnv = results.filter(r => r.environment);
84
+ if (withEnv.length < 2)
85
+ return null;
86
+ // Calculate environment variability
87
+ const envKeys = new Set();
88
+ withEnv.forEach(r => Object.keys(r.environment || {}).forEach(k => envKeys.add(k)));
89
+ let totalVariability = 0;
90
+ const evidenceDetails = [];
91
+ envKeys.forEach(key => {
92
+ const values = new Set(withEnv.map(r => JSON.stringify(r.environment?.[key])));
93
+ const variability = (values.size - 1) / Math.max(withEnv.length - 1, 1);
94
+ totalVariability += variability;
95
+ if (variability > 0.2) {
96
+ evidenceDetails.push(`Environment variable "${key}" has ${values.size} different values`);
97
+ }
98
+ });
99
+ const avgVariability = totalVariability / Math.max(envKeys.size, 1);
100
+ if (avgVariability > 0.3) {
101
+ const failuresByEnv = new Map();
102
+ results.forEach(r => {
103
+ if (r.status === 'failed' && r.environment) {
104
+ const envKey = JSON.stringify(r.environment);
105
+ failuresByEnv.set(envKey, (failuresByEnv.get(envKey) || 0) + 1);
106
+ }
107
+ });
108
+ const evidence = [
109
+ `Environment variability: ${(avgVariability * 100).toFixed(1)}%`,
110
+ `${envKeys.size} environment variables analyzed`,
111
+ ...evidenceDetails
112
+ ];
113
+ if (failuresByEnv.size > 0) {
114
+ evidence.push(`Failures concentrated in ${failuresByEnv.size} environment configurations`);
115
+ }
116
+ return {
117
+ id: `environment-${Date.now()}`,
118
+ type: 'environment',
119
+ affectedTests: [results[0].testId],
120
+ confidence: avgVariability,
121
+ frequency: avgVariability,
122
+ severity: avgVariability > 0.5 ? 'high' : 'medium',
123
+ description: 'Test results vary across different environment configurations',
124
+ rootCause: {
125
+ category: 'configuration',
126
+ cause: 'Environment-specific behavior or configuration dependencies',
127
+ confidence: 0.8,
128
+ complexity: 'medium',
129
+ estimatedFixTime: 3
130
+ },
131
+ evidence,
132
+ mitigation: [
133
+ 'Normalize environment configuration across test runs',
134
+ 'Use test containers for consistent environment',
135
+ 'Add environment validation in test setup',
136
+ 'Mock environment-specific dependencies'
137
+ ],
138
+ firstDetected: Math.min(...results.map(r => new Date(r.timestamp).getTime())),
139
+ lastSeen: Math.max(...results.map(r => new Date(r.timestamp).getTime()))
140
+ };
141
+ }
142
+ return null;
143
+ }
144
+ /**
145
+ * Detect race condition patterns
146
+ */
147
+ function detectRaceConditionPattern(results) {
148
+ const failures = results.filter(r => r.status === 'failed');
149
+ if (failures.length < 2)
150
+ return null;
151
+ // Check for sequential failures (indicator of race conditions)
152
+ const allIndices = results.map((r, i) => ({ result: r, index: i }));
153
+ const failureIndices = allIndices.filter(item => item.result.status === 'failed').map(item => item.index);
154
+ let consecutiveCount = 0;
155
+ for (let i = 1; i < failureIndices.length; i++) {
156
+ if (failureIndices[i] - failureIndices[i - 1] === 1) {
157
+ consecutiveCount++;
158
+ }
159
+ }
160
+ const consecutiveRatio = failureIndices.length > 1
161
+ ? consecutiveCount / (failureIndices.length - 1)
162
+ : 0;
163
+ // Check for concurrency keywords in error messages
164
+ const concurrencyKeywords = ['race', 'concurrent', 'parallel', 'synchronized', 'lock', 'deadlock'];
165
+ const hasConcurrencyErrors = failures.some(r => r.error && concurrencyKeywords.some(kw => r.error.toLowerCase().includes(kw)));
166
+ if (consecutiveRatio > 0.5 || hasConcurrencyErrors) {
167
+ const evidence = [
168
+ `${(consecutiveRatio * 100).toFixed(1)}% of failures are consecutive`,
169
+ `${failures.length} failures out of ${results.length} runs`
170
+ ];
171
+ if (hasConcurrencyErrors) {
172
+ evidence.push('Concurrency-related keywords found in error messages');
173
+ }
174
+ const confidence = hasConcurrencyErrors ? 0.9 : consecutiveRatio;
175
+ return {
176
+ id: `race-condition-${Date.now()}`,
177
+ type: 'race-condition',
178
+ affectedTests: [results[0].testId],
179
+ confidence,
180
+ frequency: consecutiveRatio,
181
+ severity: 'high',
182
+ description: 'Test exhibits race condition behavior with sequential failures',
183
+ rootCause: {
184
+ category: 'code',
185
+ cause: 'Concurrent access to shared resources without proper synchronization',
186
+ confidence: 0.85,
187
+ complexity: 'high',
188
+ estimatedFixTime: 4
189
+ },
190
+ evidence,
191
+ mitigation: [
192
+ 'Add proper synchronization (locks, semaphores)',
193
+ 'Use atomic operations for shared state',
194
+ 'Implement thread-safe data structures',
195
+ 'Add explicit wait conditions for async operations'
196
+ ],
197
+ firstDetected: Math.min(...results.map(r => new Date(r.timestamp).getTime())),
198
+ lastSeen: Math.max(...results.map(r => new Date(r.timestamp).getTime()))
199
+ };
200
+ }
201
+ return null;
202
+ }
203
+ /**
204
+ * Detect dependency patterns
205
+ */
206
+ function detectDependencyPattern(results) {
207
+ const failures = results.filter(r => r.status === 'failed');
208
+ if (failures.length === 0)
209
+ return null;
210
+ // Check for network/external service errors
211
+ const networkKeywords = ['network', 'connection', 'timeout', 'unreachable', 'refused', 'econnrefused', 'etimedout'];
212
+ const hasNetworkErrors = failures.some(r => r.error && networkKeywords.some(kw => r.error.toLowerCase().includes(kw)));
213
+ if (hasNetworkErrors) {
214
+ const networkFailures = failures.filter(r => r.error && networkKeywords.some(kw => r.error.toLowerCase().includes(kw)));
215
+ const frequency = networkFailures.length / results.length;
216
+ const evidence = [
217
+ `${networkFailures.length} network-related failures`,
218
+ `${(frequency * 100).toFixed(1)}% failure rate`,
219
+ 'External dependency keywords detected in errors'
220
+ ];
221
+ return {
222
+ id: `dependency-${Date.now()}`,
223
+ type: 'dependency',
224
+ affectedTests: [results[0].testId],
225
+ confidence: 0.85,
226
+ frequency,
227
+ severity: frequency > 0.3 ? 'high' : 'medium',
228
+ description: 'Test depends on external services that may be unavailable',
229
+ rootCause: {
230
+ category: 'external',
231
+ cause: 'External service dependency without proper error handling',
232
+ confidence: 0.85,
233
+ complexity: 'medium',
234
+ estimatedFixTime: 3
235
+ },
236
+ evidence,
237
+ mitigation: [
238
+ 'Mock external dependencies in tests',
239
+ 'Add retry logic with exponential backoff',
240
+ 'Implement circuit breaker pattern',
241
+ 'Use test doubles instead of real services'
242
+ ],
243
+ firstDetected: Math.min(...results.map(r => new Date(r.timestamp).getTime())),
244
+ lastSeen: Math.max(...results.map(r => new Date(r.timestamp).getTime()))
245
+ };
246
+ }
247
+ return null;
248
+ }
249
+ /**
250
+ * Detect resource contention patterns
251
+ */
252
+ function detectResourceContentionPattern(results) {
253
+ const durations = results.map(r => r.duration);
254
+ const mean = durations.reduce((sum, d) => sum + d, 0) / durations.length;
255
+ const variance = durations.reduce((sum, d) => sum + Math.pow(d - mean, 2), 0) / durations.length;
256
+ const stdDev = Math.sqrt(variance);
257
+ // Detect outliers (>2 standard deviations from mean)
258
+ const outliers = durations.filter(d => Math.abs(d - mean) > 2 * stdDev);
259
+ const outlierRatio = outliers.length / durations.length;
260
+ if (outlierRatio > 0.15) {
261
+ const evidence = [
262
+ `${(outlierRatio * 100).toFixed(1)}% outliers detected`,
263
+ `Mean duration: ${mean.toFixed(0)}ms`,
264
+ `Standard deviation: ${stdDev.toFixed(0)}ms`,
265
+ `Outlier range: ${Math.min(...outliers).toFixed(0)}-${Math.max(...outliers).toFixed(0)}ms`
266
+ ];
267
+ // Check for memory-related errors
268
+ const memoryKeywords = ['memory', 'heap', 'oom', 'out of memory'];
269
+ const hasMemoryErrors = results.some(r => r.error && memoryKeywords.some(kw => r.error.toLowerCase().includes(kw)));
270
+ if (hasMemoryErrors) {
271
+ evidence.push('Memory-related errors detected');
272
+ }
273
+ return {
274
+ id: `resource-contention-${Date.now()}`,
275
+ type: 'resource-contention',
276
+ affectedTests: [results[0].testId],
277
+ confidence: outlierRatio,
278
+ frequency: outlierRatio,
279
+ severity: outlierRatio > 0.25 ? 'high' : 'medium',
280
+ description: 'Test shows resource contention with significant execution time outliers',
281
+ rootCause: {
282
+ category: 'infrastructure',
283
+ cause: 'Resource contention or memory leaks during test execution',
284
+ confidence: 0.75,
285
+ complexity: 'medium',
286
+ estimatedFixTime: 3
287
+ },
288
+ evidence,
289
+ mitigation: [
290
+ 'Add resource cleanup in teardown',
291
+ 'Implement connection pooling',
292
+ 'Increase resource limits',
293
+ 'Run tests in isolation with dedicated resources'
294
+ ],
295
+ firstDetected: Math.min(...results.map(r => new Date(r.timestamp).getTime())),
296
+ lastSeen: Math.max(...results.map(r => new Date(r.timestamp).getTime()))
297
+ };
298
+ }
299
+ return null;
300
+ }
301
+ // ==================== Pattern Analysis ====================
302
+ /**
303
+ * Analyze flaky test patterns
304
+ */
305
+ async function analyzeFlakyTestPatterns(params) {
306
+ const startTime = Date.now();
307
+ try {
308
+ // Group results by test
309
+ const byTest = groupByTest(params.testRunHistory);
310
+ const patterns = [];
311
+ // Detect patterns for each test
312
+ for (const [testId, results] of byTest) {
313
+ if (results.length < params.minRuns) {
314
+ continue;
315
+ }
316
+ // Detect each requested pattern type
317
+ for (const patternType of params.patternTypes) {
318
+ let pattern = null;
319
+ switch (patternType) {
320
+ case 'timing':
321
+ pattern = detectTimingPattern(results);
322
+ break;
323
+ case 'environment':
324
+ pattern = detectEnvironmentPattern(results);
325
+ break;
326
+ case 'race-condition':
327
+ pattern = detectRaceConditionPattern(results);
328
+ break;
329
+ case 'dependency':
330
+ pattern = detectDependencyPattern(results);
331
+ break;
332
+ case 'resource-contention':
333
+ pattern = detectResourceContentionPattern(results);
334
+ break;
335
+ }
336
+ if (pattern && pattern.confidence >= (params.confidenceThreshold || 0.7)) {
337
+ patterns.push(pattern);
338
+ }
339
+ }
340
+ }
341
+ // Generate statistics
342
+ const statistics = generatePatternStatistics(patterns);
343
+ // Analyze correlations if requested
344
+ const correlations = params.includeCorrelation
345
+ ? analyzePatternCorrelations(patterns)
346
+ : undefined;
347
+ // Analyze trends
348
+ const trends = analyzePatternTrends(params.testRunHistory, patterns);
349
+ const executionTime = Date.now() - startTime;
350
+ return {
351
+ success: true,
352
+ data: {
353
+ patterns,
354
+ statistics,
355
+ correlations,
356
+ trends,
357
+ metadata: {
358
+ requestId: `analyze-${Date.now()}`,
359
+ timestamp: new Date().toISOString(),
360
+ executionTime,
361
+ agent: 'qe-flaky-test-hunter',
362
+ version: '1.0.0'
363
+ }
364
+ },
365
+ metadata: {
366
+ requestId: `analyze-${Date.now()}`,
367
+ timestamp: new Date().toISOString(),
368
+ executionTime,
369
+ agent: 'qe-flaky-test-hunter',
370
+ version: '1.0.0'
371
+ }
372
+ };
373
+ }
374
+ catch (error) {
375
+ const executionTime = Date.now() - startTime;
376
+ return {
377
+ success: false,
378
+ error: {
379
+ code: 'PATTERN_ANALYSIS_ERROR',
380
+ message: error instanceof Error ? error.message : 'Unknown error',
381
+ stack: error instanceof Error ? error.stack : undefined
382
+ },
383
+ metadata: {
384
+ requestId: `analyze-${Date.now()}`,
385
+ timestamp: new Date().toISOString(),
386
+ executionTime,
387
+ agent: 'qe-flaky-test-hunter',
388
+ version: '1.0.0'
389
+ }
390
+ };
391
+ }
392
+ }
393
+ // ==================== Helper Functions ====================
394
+ /**
395
+ * Group test results by test ID
396
+ */
397
+ function groupByTest(results) {
398
+ const groups = new Map();
399
+ for (const result of results) {
400
+ if (!groups.has(result.testId)) {
401
+ groups.set(result.testId, []);
402
+ }
403
+ groups.get(result.testId).push(result);
404
+ }
405
+ return groups;
406
+ }
407
+ /**
408
+ * Generate pattern statistics
409
+ */
410
+ function generatePatternStatistics(patterns) {
411
+ const byType = {
412
+ 'timing': 0,
413
+ 'environment': 0,
414
+ 'dependency': 0,
415
+ 'race-condition': 0,
416
+ 'order-dependency': 0,
417
+ 'resource-contention': 0
418
+ };
419
+ const bySeverity = {
420
+ critical: 0,
421
+ high: 0,
422
+ medium: 0,
423
+ low: 0
424
+ };
425
+ patterns.forEach(p => {
426
+ byType[p.type]++;
427
+ bySeverity[p.severity]++;
428
+ });
429
+ // Find most common pattern
430
+ let mostCommon = 'timing';
431
+ let maxCount = 0;
432
+ Object.entries(byType).forEach(([type, count]) => {
433
+ if (count > maxCount) {
434
+ maxCount = count;
435
+ mostCommon = type;
436
+ }
437
+ });
438
+ const avgConfidence = patterns.length > 0
439
+ ? patterns.reduce((sum, p) => sum + p.confidence, 0) / patterns.length
440
+ : 0;
441
+ const uniqueTests = new Set(patterns.flatMap(p => p.affectedTests));
442
+ const coverage = uniqueTests.size; // This would need total test count for accurate coverage
443
+ return {
444
+ totalPatterns: patterns.length,
445
+ byType,
446
+ bySeverity,
447
+ mostCommon,
448
+ avgConfidence,
449
+ coverage
450
+ };
451
+ }
452
+ /**
453
+ * Analyze pattern correlations
454
+ */
455
+ function analyzePatternCorrelations(patterns) {
456
+ const correlations = [];
457
+ const patternTypes = ['timing', 'environment', 'dependency', 'race-condition', 'resource-contention'];
458
+ // Check co-occurrence of patterns
459
+ for (let i = 0; i < patternTypes.length; i++) {
460
+ for (let j = i + 1; j < patternTypes.length; j++) {
461
+ const type1 = patternTypes[i];
462
+ const type2 = patternTypes[j];
463
+ const patterns1 = patterns.filter(p => p.type === type1);
464
+ const patterns2 = patterns.filter(p => p.type === type2);
465
+ // Find tests affected by both patterns
466
+ const tests1 = new Set(patterns1.flatMap(p => p.affectedTests));
467
+ const tests2 = new Set(patterns2.flatMap(p => p.affectedTests));
468
+ let coOccurrence = 0;
469
+ tests1.forEach(test => {
470
+ if (tests2.has(test))
471
+ coOccurrence++;
472
+ });
473
+ if (coOccurrence > 0) {
474
+ // Simple correlation: co-occurrence / min(tests1, tests2)
475
+ const correlation = coOccurrence / Math.min(tests1.size, tests2.size);
476
+ correlations.push({
477
+ pattern1: type1,
478
+ pattern2: type2,
479
+ correlation,
480
+ coOccurrence,
481
+ description: `${coOccurrence} tests affected by both ${type1} and ${type2} patterns`
482
+ });
483
+ }
484
+ }
485
+ }
486
+ return correlations.sort((a, b) => b.correlation - a.correlation);
487
+ }
488
+ /**
489
+ * Analyze pattern trends
490
+ */
491
+ function analyzePatternTrends(testResults, patterns) {
492
+ const trends = [];
493
+ const patternTypes = ['timing', 'environment', 'dependency', 'race-condition', 'resource-contention'];
494
+ // Group results by date
495
+ const byDate = new Map();
496
+ testResults.forEach(r => {
497
+ const date = new Date(r.timestamp).toISOString().split('T')[0];
498
+ if (!byDate.has(date)) {
499
+ byDate.set(date, []);
500
+ }
501
+ byDate.get(date).push(r);
502
+ });
503
+ // Analyze trend for each pattern type
504
+ patternTypes.forEach(type => {
505
+ const typePatterns = patterns.filter(p => p.type === type);
506
+ if (typePatterns.length === 0)
507
+ return;
508
+ const dataPoints = [];
509
+ const sortedDates = Array.from(byDate.keys()).sort();
510
+ sortedDates.forEach(date => {
511
+ const dayResults = byDate.get(date);
512
+ const affectedTests = new Set();
513
+ typePatterns.forEach(p => {
514
+ p.affectedTests.forEach(testId => {
515
+ if (dayResults.some(r => r.testId === testId)) {
516
+ affectedTests.add(testId);
517
+ }
518
+ });
519
+ });
520
+ dataPoints.push({
521
+ date,
522
+ count: typePatterns.length,
523
+ testsAffected: affectedTests.size
524
+ });
525
+ });
526
+ // Calculate trend direction
527
+ if (dataPoints.length >= 2) {
528
+ const recentCount = dataPoints.slice(-3).reduce((sum, dp) => sum + dp.count, 0) / 3;
529
+ const olderCount = dataPoints.slice(0, 3).reduce((sum, dp) => sum + dp.count, 0) / 3;
530
+ const change = recentCount - olderCount;
531
+ let direction;
532
+ if (change > 0.1)
533
+ direction = 'increasing';
534
+ else if (change < -0.1)
535
+ direction = 'decreasing';
536
+ else
537
+ direction = 'stable';
538
+ const changeRate = dataPoints.length > 1
539
+ ? change / (dataPoints.length - 1)
540
+ : 0;
541
+ // Simple linear prediction for next 7 days
542
+ const prediction = Array.from({ length: 7 }, (_, i) => Math.max(0, recentCount + (changeRate * (i + 1))));
543
+ trends.push({
544
+ type,
545
+ direction,
546
+ changeRate,
547
+ dataPoints,
548
+ prediction
549
+ });
550
+ }
551
+ });
552
+ return trends;
553
+ }
554
+ //# sourceMappingURL=analyze-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-patterns.js","sourceRoot":"","sources":["../../../../../src/mcp/tools/qe/flaky-detection/analyze-patterns.ts"],"names":[],"mappings":"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"}