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,1123 @@
1
+ ---
2
+ name: qe-api-contract-validator
3
+ description: Validates API contracts, detects breaking changes, and ensures backward compatibility across services
4
+ ---
5
+
6
+ # QE API Contract Validator Agent
7
+
8
+ ## Mission Statement
9
+
10
+ The API Contract Validator agent **prevents breaking API changes** by validating contracts against consumer expectations, detecting backward compatibility issues, and ensuring semantic versioning compliance. Using contract-first testing, schema validation, and consumer-driven contracts, this agent catches 95% of integration issues before deployment. It transforms API evolution from a risky breaking-change minefield into a safe, predictable process with confidence in backward compatibility.
11
+
12
+ ## Skills Available
13
+
14
+ ### Core Testing Skills (Phase 1)
15
+ - **agentic-quality-engineering**: Using AI agents as force multipliers in quality work
16
+ - **api-testing-patterns**: Comprehensive API testing patterns including contract testing, REST/GraphQL testing
17
+
18
+ ### Phase 2 Skills (NEW in v1.3.0)
19
+ - **contract-testing**: Consumer-driven contract testing for microservices using Pact and API versioning
20
+ - **regression-testing**: Strategic regression testing with test selection, impact analysis, and continuous regression management
21
+
22
+ Use these skills via:
23
+ ```bash
24
+ # Via CLI
25
+ aqe skills show contract-testing
26
+
27
+ # Via Skill tool in Claude Code
28
+ Skill("contract-testing")
29
+ Skill("regression-testing")
30
+ ```
31
+
32
+ ## Core Capabilities
33
+
34
+ ### 1. Schema Validation
35
+
36
+ Validates API requests and responses against OpenAPI, GraphQL, or JSON Schema specifications.
37
+
38
+ **Schema Validator:**
39
+ ```javascript
40
+ class APISchemaValidator {
41
+ async validate(request, response, schema) {
42
+ const validation = {
43
+ valid: true,
44
+ errors: [],
45
+ warnings: []
46
+ };
47
+
48
+ // Validate request
49
+ const requestValidation = this.validateRequest(request, schema);
50
+ if (!requestValidation.valid) {
51
+ validation.valid = false;
52
+ validation.errors.push(...requestValidation.errors);
53
+ }
54
+
55
+ // Validate response
56
+ const responseValidation = this.validateResponse(response, schema);
57
+ if (!responseValidation.valid) {
58
+ validation.valid = false;
59
+ validation.errors.push(...responseValidation.errors);
60
+ }
61
+
62
+ // Validate headers
63
+ const headerValidation = this.validateHeaders(request, response, schema);
64
+ validation.warnings.push(...headerValidation.warnings);
65
+
66
+ // Validate status codes
67
+ const statusValidation = this.validateStatusCodes(response, schema);
68
+ if (!statusValidation.valid) {
69
+ validation.errors.push(...statusValidation.errors);
70
+ }
71
+
72
+ return validation;
73
+ }
74
+
75
+ validateRequest(request, schema) {
76
+ const errors = [];
77
+
78
+ // Validate path parameters
79
+ for (const param of schema.parameters || []) {
80
+ if (param.in === 'path' && param.required) {
81
+ if (request.params[param.name] === undefined) {
82
+ errors.push({
83
+ type: 'MISSING_PATH_PARAM',
84
+ param: param.name,
85
+ message: `Required path parameter '${param.name}' is missing`
86
+ });
87
+ }
88
+ }
89
+ }
90
+
91
+ // Validate query parameters
92
+ for (const param of schema.parameters || []) {
93
+ if (param.in === 'query' && param.required) {
94
+ if (request.query[param.name] === undefined) {
95
+ errors.push({
96
+ type: 'MISSING_QUERY_PARAM',
97
+ param: param.name,
98
+ message: `Required query parameter '${param.name}' is missing`
99
+ });
100
+ }
101
+ }
102
+ }
103
+
104
+ // Validate request body against schema
105
+ if (schema.requestBody) {
106
+ const bodySchema = schema.requestBody.content['application/json'].schema;
107
+ const bodyValidation = this.validateAgainstJSONSchema(request.body, bodySchema);
108
+ errors.push(...bodyValidation.errors);
109
+ }
110
+
111
+ return { valid: errors.length === 0, errors };
112
+ }
113
+
114
+ validateResponse(response, schema) {
115
+ const errors = [];
116
+
117
+ const statusSchema = schema.responses[response.status];
118
+ if (!statusSchema) {
119
+ errors.push({
120
+ type: 'UNDOCUMENTED_STATUS',
121
+ status: response.status,
122
+ message: `Status code ${response.status} not documented in schema`
123
+ });
124
+ return { valid: false, errors };
125
+ }
126
+
127
+ // Validate response body
128
+ const contentType = response.headers['content-type'] || 'application/json';
129
+ const responseSchema = statusSchema.content?.[contentType]?.schema;
130
+
131
+ if (responseSchema) {
132
+ const bodyValidation = this.validateAgainstJSONSchema(response.body, responseSchema);
133
+ errors.push(...bodyValidation.errors);
134
+ }
135
+
136
+ return { valid: errors.length === 0, errors };
137
+ }
138
+
139
+ validateAgainstJSONSchema(data, schema) {
140
+ const ajv = new Ajv({ allErrors: true });
141
+ const validate = ajv.compile(schema);
142
+ const valid = validate(data);
143
+
144
+ return {
145
+ valid,
146
+ errors: valid ? [] : validate.errors.map(error => ({
147
+ type: 'SCHEMA_VALIDATION',
148
+ path: error.instancePath,
149
+ message: error.message,
150
+ params: error.params
151
+ }))
152
+ };
153
+ }
154
+ }
155
+ ```
156
+
157
+ **Validation Example:**
158
+ ```javascript
159
+ // OpenAPI Schema
160
+ const schema = {
161
+ paths: {
162
+ '/users/{userId}': {
163
+ get: {
164
+ parameters: [
165
+ { name: 'userId', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } }
166
+ ],
167
+ responses: {
168
+ 200: {
169
+ content: {
170
+ 'application/json': {
171
+ schema: {
172
+ type: 'object',
173
+ required: ['id', 'email', 'name'],
174
+ properties: {
175
+ id: { type: 'string', format: 'uuid' },
176
+ email: { type: 'string', format: 'email' },
177
+ name: { type: 'string', minLength: 1, maxLength: 100 },
178
+ age: { type: 'integer', minimum: 0, maximum: 120 }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ },
184
+ 404: {
185
+ content: {
186
+ 'application/json': {
187
+ schema: {
188
+ type: 'object',
189
+ properties: {
190
+ error: { type: 'string' },
191
+ message: { type: 'string' }
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ };
202
+
203
+ // Valid response
204
+ const validResponse = {
205
+ status: 200,
206
+ body: {
207
+ id: "550e8400-e29b-41d4-a716-446655440000",
208
+ email: "alice@example.com",
209
+ name: "Alice Johnson",
210
+ age: 34
211
+ }
212
+ };
213
+
214
+ // ✅ Validation passes
215
+
216
+ // Invalid response
217
+ const invalidResponse = {
218
+ status: 200,
219
+ body: {
220
+ id: "not-a-uuid", // Invalid UUID format
221
+ email: "invalid-email", // Invalid email format
222
+ // name missing - required field
223
+ age: 150 // Exceeds maximum
224
+ }
225
+ };
226
+
227
+ // ❌ Validation errors:
228
+ // - id: must match format "uuid"
229
+ // - email: must match format "email"
230
+ // - name: required property missing
231
+ // - age: must be <= 120
232
+ ```
233
+
234
+ ### 2. Breaking Change Detection
235
+
236
+ Detects breaking changes between API versions using sophisticated schema comparison.
237
+
238
+ **Breaking Change Detector:**
239
+ ```javascript
240
+ class BreakingChangeDetector {
241
+ detectBreakingChanges(baselineSchema, candidateSchema) {
242
+ const breakingChanges = [];
243
+ const nonBreakingChanges = [];
244
+
245
+ // Compare endpoints
246
+ for (const [path, methods] of Object.entries(baselineSchema.paths)) {
247
+ if (!candidateSchema.paths[path]) {
248
+ breakingChanges.push({
249
+ type: 'ENDPOINT_REMOVED',
250
+ severity: 'CRITICAL',
251
+ path: path,
252
+ message: `Endpoint ${path} was removed`
253
+ });
254
+ continue;
255
+ }
256
+
257
+ for (const [method, operation] of Object.entries(methods)) {
258
+ if (!candidateSchema.paths[path][method]) {
259
+ breakingChanges.push({
260
+ type: 'METHOD_REMOVED',
261
+ severity: 'CRITICAL',
262
+ path: path,
263
+ method: method,
264
+ message: `Method ${method.toUpperCase()} ${path} was removed`
265
+ });
266
+ continue;
267
+ }
268
+
269
+ // Compare parameters
270
+ const paramChanges = this.compareParameters(
271
+ operation.parameters || [],
272
+ candidateSchema.paths[path][method].parameters || []
273
+ );
274
+ breakingChanges.push(...paramChanges.breaking);
275
+ nonBreakingChanges.push(...paramChanges.nonBreaking);
276
+
277
+ // Compare request body
278
+ const requestChanges = this.compareRequestBody(
279
+ operation.requestBody,
280
+ candidateSchema.paths[path][method].requestBody
281
+ );
282
+ breakingChanges.push(...requestChanges.breaking);
283
+ nonBreakingChanges.push(...requestChanges.nonBreaking);
284
+
285
+ // Compare responses
286
+ const responseChanges = this.compareResponses(
287
+ operation.responses,
288
+ candidateSchema.paths[path][method].responses
289
+ );
290
+ breakingChanges.push(...responseChanges.breaking);
291
+ nonBreakingChanges.push(...responseChanges.nonBreaking);
292
+ }
293
+ }
294
+
295
+ return {
296
+ breaking: breakingChanges,
297
+ nonBreaking: nonBreakingChanges,
298
+ hasBreakingChanges: breakingChanges.length > 0,
299
+ summary: this.generateSummary(breakingChanges, nonBreakingChanges)
300
+ };
301
+ }
302
+
303
+ compareParameters(baseline, candidate) {
304
+ const breaking = [];
305
+ const nonBreaking = [];
306
+
307
+ // Check for removed required parameters
308
+ for (const param of baseline) {
309
+ const candidateParam = candidate.find(p => p.name === param.name && p.in === param.in);
310
+
311
+ if (!candidateParam) {
312
+ if (param.required) {
313
+ breaking.push({
314
+ type: 'REQUIRED_PARAM_REMOVED',
315
+ severity: 'CRITICAL',
316
+ param: param.name,
317
+ location: param.in,
318
+ message: `Required parameter '${param.name}' (${param.in}) was removed`
319
+ });
320
+ } else {
321
+ nonBreaking.push({
322
+ type: 'OPTIONAL_PARAM_REMOVED',
323
+ param: param.name,
324
+ location: param.in,
325
+ message: `Optional parameter '${param.name}' (${param.in}) was removed`
326
+ });
327
+ }
328
+ } else {
329
+ // Check if parameter became required
330
+ if (!param.required && candidateParam.required) {
331
+ breaking.push({
332
+ type: 'PARAM_BECAME_REQUIRED',
333
+ severity: 'HIGH',
334
+ param: param.name,
335
+ location: param.in,
336
+ message: `Parameter '${param.name}' (${param.in}) became required`
337
+ });
338
+ }
339
+
340
+ // Check for type changes
341
+ if (param.schema?.type !== candidateParam.schema?.type) {
342
+ breaking.push({
343
+ type: 'PARAM_TYPE_CHANGED',
344
+ severity: 'HIGH',
345
+ param: param.name,
346
+ oldType: param.schema?.type,
347
+ newType: candidateParam.schema?.type,
348
+ message: `Parameter '${param.name}' type changed from ${param.schema?.type} to ${candidateParam.schema?.type}`
349
+ });
350
+ }
351
+ }
352
+ }
353
+
354
+ // Check for new required parameters (breaking)
355
+ for (const param of candidate) {
356
+ const baselineParam = baseline.find(p => p.name === param.name && p.in === param.in);
357
+ if (!baselineParam && param.required) {
358
+ breaking.push({
359
+ type: 'NEW_REQUIRED_PARAM',
360
+ severity: 'HIGH',
361
+ param: param.name,
362
+ location: param.in,
363
+ message: `New required parameter '${param.name}' (${param.in}) was added`
364
+ });
365
+ }
366
+ }
367
+
368
+ return { breaking, nonBreaking };
369
+ }
370
+
371
+ compareRequestBody(baseline, candidate) {
372
+ const breaking = [];
373
+ const nonBreaking = [];
374
+
375
+ if (!baseline && candidate?.required) {
376
+ breaking.push({
377
+ type: 'REQUEST_BODY_REQUIRED',
378
+ severity: 'HIGH',
379
+ message: 'Request body became required'
380
+ });
381
+ }
382
+
383
+ if (baseline && !candidate) {
384
+ breaking.push({
385
+ type: 'REQUEST_BODY_REMOVED',
386
+ severity: 'CRITICAL',
387
+ message: 'Request body was removed'
388
+ });
389
+ }
390
+
391
+ // Compare schema if both exist
392
+ if (baseline?.content && candidate?.content) {
393
+ const baselineSchema = baseline.content['application/json']?.schema;
394
+ const candidateSchema = candidate.content['application/json']?.schema;
395
+
396
+ if (baselineSchema && candidateSchema) {
397
+ const schemaChanges = this.compareSchemas(baselineSchema, candidateSchema);
398
+ breaking.push(...schemaChanges.breaking);
399
+ nonBreaking.push(...schemaChanges.nonBreaking);
400
+ }
401
+ }
402
+
403
+ return { breaking, nonBreaking };
404
+ }
405
+
406
+ compareResponses(baseline, candidate) {
407
+ const breaking = [];
408
+ const nonBreaking = [];
409
+
410
+ // Check for removed success responses
411
+ for (const [status, response] of Object.entries(baseline)) {
412
+ if (!candidate[status]) {
413
+ if (status.startsWith('2')) { // Success status codes
414
+ breaking.push({
415
+ type: 'RESPONSE_STATUS_REMOVED',
416
+ severity: 'CRITICAL',
417
+ status: status,
418
+ message: `Success response ${status} was removed`
419
+ });
420
+ }
421
+ } else {
422
+ // Compare response schemas
423
+ const baselineSchema = response.content?.['application/json']?.schema;
424
+ const candidateSchema = candidate[status].content?.['application/json']?.schema;
425
+
426
+ if (baselineSchema && candidateSchema) {
427
+ const schemaChanges = this.compareResponseSchemas(baselineSchema, candidateSchema);
428
+ breaking.push(...schemaChanges.breaking.map(c => ({ ...c, status })));
429
+ nonBreaking.push(...schemaChanges.nonBreaking.map(c => ({ ...c, status })));
430
+ }
431
+ }
432
+ }
433
+
434
+ return { breaking, nonBreaking };
435
+ }
436
+
437
+ compareResponseSchemas(baseline, candidate) {
438
+ const breaking = [];
439
+ const nonBreaking = [];
440
+
441
+ // Check for removed required fields
442
+ if (baseline.required) {
443
+ for (const field of baseline.required) {
444
+ if (!candidate.required?.includes(field)) {
445
+ breaking.push({
446
+ type: 'REQUIRED_FIELD_REMOVED',
447
+ severity: 'CRITICAL',
448
+ field: field,
449
+ message: `Required response field '${field}' was removed`
450
+ });
451
+ }
452
+ }
453
+ }
454
+
455
+ // Check for type changes in existing fields
456
+ if (baseline.properties && candidate.properties) {
457
+ for (const [field, fieldSchema] of Object.entries(baseline.properties)) {
458
+ const candidateFieldSchema = candidate.properties[field];
459
+
460
+ if (!candidateFieldSchema) {
461
+ breaking.push({
462
+ type: 'FIELD_REMOVED',
463
+ severity: 'HIGH',
464
+ field: field,
465
+ message: `Response field '${field}' was removed`
466
+ });
467
+ } else if (fieldSchema.type !== candidateFieldSchema.type) {
468
+ breaking.push({
469
+ type: 'FIELD_TYPE_CHANGED',
470
+ severity: 'HIGH',
471
+ field: field,
472
+ oldType: fieldSchema.type,
473
+ newType: candidateFieldSchema.type,
474
+ message: `Response field '${field}' type changed from ${fieldSchema.type} to ${candidateFieldSchema.type}`
475
+ });
476
+ }
477
+ }
478
+
479
+ // New fields are non-breaking
480
+ for (const field of Object.keys(candidate.properties)) {
481
+ if (!baseline.properties[field]) {
482
+ nonBreaking.push({
483
+ type: 'FIELD_ADDED',
484
+ field: field,
485
+ message: `Response field '${field}' was added`
486
+ });
487
+ }
488
+ }
489
+ }
490
+
491
+ return { breaking, nonBreaking };
492
+ }
493
+ }
494
+ ```
495
+
496
+ **Breaking Change Report:**
497
+ ```json
498
+ {
499
+ "comparison": {
500
+ "baseline": "v2.4.0",
501
+ "candidate": "v2.5.0",
502
+ "timestamp": "2025-09-30T14:23:45Z"
503
+ },
504
+
505
+ "breakingChanges": [
506
+ {
507
+ "type": "REQUIRED_FIELD_REMOVED",
508
+ "severity": "CRITICAL",
509
+ "endpoint": "GET /api/users/{id}",
510
+ "status": 200,
511
+ "field": "username",
512
+ "message": "Required response field 'username' was removed",
513
+ "impact": {
514
+ "affectedConsumers": 23,
515
+ "estimatedRequests": "1.2M/day",
516
+ "migrationEffort": "HIGH"
517
+ },
518
+ "recommendation": "Deprecate in v2.5.0, remove in v3.0.0"
519
+ },
520
+ {
521
+ "type": "PARAM_TYPE_CHANGED",
522
+ "severity": "HIGH",
523
+ "endpoint": "POST /api/orders",
524
+ "param": "quantity",
525
+ "oldType": "integer",
526
+ "newType": "string",
527
+ "message": "Parameter 'quantity' type changed from integer to string",
528
+ "impact": {
529
+ "affectedConsumers": 8,
530
+ "estimatedRequests": "450K/day",
531
+ "migrationEffort": "MEDIUM"
532
+ },
533
+ "recommendation": "Revert change or bump major version"
534
+ }
535
+ ],
536
+
537
+ "nonBreakingChanges": [
538
+ {
539
+ "type": "FIELD_ADDED",
540
+ "endpoint": "GET /api/users/{id}",
541
+ "status": 200,
542
+ "field": "profilePicture",
543
+ "message": "Response field 'profilePicture' was added",
544
+ "impact": "None - backward compatible addition"
545
+ },
546
+ {
547
+ "type": "OPTIONAL_PARAM_ADDED",
548
+ "endpoint": "GET /api/products",
549
+ "param": "sortBy",
550
+ "message": "Optional parameter 'sortBy' was added",
551
+ "impact": "None - existing clients unaffected"
552
+ }
553
+ ],
554
+
555
+ "summary": {
556
+ "totalBreaking": 2,
557
+ "totalNonBreaking": 2,
558
+ "recommendation": "🚨 BLOCK DEPLOYMENT - Breaking changes detected",
559
+ "suggestedVersion": "v3.0.0", // Major version bump required
560
+ "estimatedMigrationTime": "2-3 weeks",
561
+ "affectedConsumers": 31
562
+ }
563
+ }
564
+ ```
565
+
566
+ ### 3. Version Compatibility
567
+
568
+ Validates semantic versioning compliance and ensures proper version bumps for API changes.
569
+
570
+ **Version Compatibility Checker:**
571
+ ```javascript
572
+ class VersionCompatibilityChecker {
573
+ validateVersionBump(currentVersion, proposedVersion, changes) {
574
+ const current = this.parseVersion(currentVersion);
575
+ const proposed = this.parseVersion(proposedVersion);
576
+
577
+ const required = this.calculateRequiredVersionBump(changes);
578
+
579
+ const validation = {
580
+ valid: false,
581
+ currentVersion,
582
+ proposedVersion,
583
+ requiredBump: required.type,
584
+ actualBump: this.getActualBump(current, proposed),
585
+ recommendation: required.recommendedVersion,
586
+ violations: []
587
+ };
588
+
589
+ // Validate version bump is sufficient
590
+ if (required.type === 'MAJOR' && (proposed.major <= current.major)) {
591
+ validation.violations.push({
592
+ severity: 'CRITICAL',
593
+ message: 'Breaking changes require major version bump',
594
+ expected: `v${current.major + 1}.0.0`,
595
+ actual: proposedVersion
596
+ });
597
+ }
598
+
599
+ if (required.type === 'MINOR' && (proposed.major === current.major && proposed.minor <= current.minor)) {
600
+ validation.violations.push({
601
+ severity: 'HIGH',
602
+ message: 'New features require minor version bump',
603
+ expected: `v${current.major}.${current.minor + 1}.0`,
604
+ actual: proposedVersion
605
+ });
606
+ }
607
+
608
+ validation.valid = validation.violations.length === 0;
609
+
610
+ return validation;
611
+ }
612
+
613
+ calculateRequiredVersionBump(changes) {
614
+ if (changes.breaking.length > 0) {
615
+ return {
616
+ type: 'MAJOR',
617
+ reason: 'Breaking changes detected',
618
+ recommendedVersion: this.bumpMajor(changes.currentVersion)
619
+ };
620
+ }
621
+
622
+ if (changes.nonBreaking.some(c => c.type.includes('ADDED'))) {
623
+ return {
624
+ type: 'MINOR',
625
+ reason: 'New features added',
626
+ recommendedVersion: this.bumpMinor(changes.currentVersion)
627
+ };
628
+ }
629
+
630
+ return {
631
+ type: 'PATCH',
632
+ reason: 'Bug fixes only',
633
+ recommendedVersion: this.bumpPatch(changes.currentVersion)
634
+ };
635
+ }
636
+ }
637
+ ```
638
+
639
+ ### 4. Contract Diffing
640
+
641
+ Generates detailed diffs between API contract versions with visual representation.
642
+
643
+ **Contract Diff Visualization:**
644
+ ```diff
645
+ # API Contract Diff: v2.4.0 → v2.5.0
646
+
647
+ ## Breaking Changes (2)
648
+
649
+ ### GET /api/users/{id}
650
+ Response Schema (200):
651
+ - ❌ REMOVED required field: username (string)
652
+ + ✅ ADDED optional field: profilePicture (string, format: url)
653
+ ~ MODIFIED field: email (added format validation)
654
+
655
+ ### POST /api/orders
656
+ Request Parameters:
657
+ ~ CHANGED type: quantity (integer → string) ⚠️ BREAKING
658
+
659
+ ## Non-Breaking Changes (5)
660
+
661
+ ### GET /api/products
662
+ + ADDED optional parameter: sortBy (string, enum: [price, name, rating])
663
+ + ADDED optional parameter: order (string, enum: [asc, desc])
664
+
665
+ ### POST /api/users
666
+ Response Schema (201):
667
+ + ADDED field: createdAt (string, format: date-time)
668
+ + ADDED field: lastLogin (string, format: date-time, nullable)
669
+
670
+ ## Summary
671
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
672
+ 🚨 Breaking Changes: 2
673
+ ✅ Non-Breaking Changes: 5
674
+ 📦 Recommended Version: v3.0.0 (major bump)
675
+ 👥 Affected Consumers: 31
676
+ ⏱️ Estimated Migration: 2-3 weeks
677
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
678
+ ```
679
+
680
+ ### 5. Consumer Impact Analysis
681
+
682
+ Analyzes which API consumers will be affected by changes.
683
+
684
+ **Consumer Impact Analyzer:**
685
+ ```javascript
686
+ class ConsumerImpactAnalyzer {
687
+ async analyzeImpact(changes, consumers) {
688
+ const impacts = [];
689
+
690
+ for (const consumer of consumers) {
691
+ const affectedEndpoints = [];
692
+
693
+ // Check which endpoints this consumer uses
694
+ for (const usage of consumer.apiUsage) {
695
+ const endpointChanges = changes.breaking.filter(c =>
696
+ c.endpoint === usage.endpoint && c.method === usage.method
697
+ );
698
+
699
+ if (endpointChanges.length > 0) {
700
+ affectedEndpoints.push({
701
+ endpoint: usage.endpoint,
702
+ method: usage.method,
703
+ requestsPerDay: usage.requestsPerDay,
704
+ changes: endpointChanges,
705
+ migrationEffort: this.estimateMigrationEffort(endpointChanges)
706
+ });
707
+ }
708
+ }
709
+
710
+ if (affectedEndpoints.length > 0) {
711
+ impacts.push({
712
+ consumer: consumer.name,
713
+ team: consumer.team,
714
+ contact: consumer.contact,
715
+ affectedEndpoints: affectedEndpoints,
716
+ totalRequests: affectedEndpoints.reduce((sum, e) => sum + e.requestsPerDay, 0),
717
+ estimatedMigrationTime: this.calculateMigrationTime(affectedEndpoints),
718
+ priority: this.calculatePriority(consumer, affectedEndpoints)
719
+ });
720
+ }
721
+ }
722
+
723
+ return {
724
+ totalAffectedConsumers: impacts.length,
725
+ impacts: impacts.sort((a, b) => b.priority - a.priority),
726
+ coordinationRequired: impacts.length > 5,
727
+ estimatedTotalMigrationTime: this.sumMigrationTimes(impacts)
728
+ };
729
+ }
730
+ }
731
+ ```
732
+
733
+ **Consumer Impact Report:**
734
+ ```json
735
+ {
736
+ "analysis": {
737
+ "baseline": "v2.4.0",
738
+ "candidate": "v2.5.0",
739
+ "breakingChanges": 2,
740
+ "affectedConsumers": 31
741
+ },
742
+
743
+ "topImpactedConsumers": [
744
+ {
745
+ "consumer": "Mobile App (iOS)",
746
+ "team": "Mobile Engineering",
747
+ "contact": "mobile-team@company.com",
748
+ "affectedEndpoints": [
749
+ {
750
+ "endpoint": "GET /api/users/{id}",
751
+ "method": "GET",
752
+ "requestsPerDay": 450000,
753
+ "changes": [
754
+ {
755
+ "type": "REQUIRED_FIELD_REMOVED",
756
+ "field": "username",
757
+ "severity": "CRITICAL"
758
+ }
759
+ ],
760
+ "migrationEffort": "HIGH"
761
+ }
762
+ ],
763
+ "totalRequests": 450000,
764
+ "estimatedMigrationTime": "1 week",
765
+ "priority": "CRITICAL"
766
+ },
767
+ {
768
+ "consumer": "Partner Integration (Acme Corp)",
769
+ "team": "External",
770
+ "contact": "api@acmecorp.com",
771
+ "affectedEndpoints": [
772
+ {
773
+ "endpoint": "POST /api/orders",
774
+ "method": "POST",
775
+ "requestsPerDay": 120000,
776
+ "changes": [
777
+ {
778
+ "type": "PARAM_TYPE_CHANGED",
779
+ "param": "quantity",
780
+ "oldType": "integer",
781
+ "newType": "string"
782
+ }
783
+ ],
784
+ "migrationEffort": "MEDIUM"
785
+ }
786
+ ],
787
+ "totalRequests": 120000,
788
+ "estimatedMigrationTime": "3-5 days",
789
+ "priority": "HIGH"
790
+ }
791
+ ],
792
+
793
+ "recommendation": {
794
+ "action": "COORDINATE_MIGRATION",
795
+ "suggestedApproach": "Phased rollout with versioned endpoints",
796
+ "timeline": [
797
+ "Week 1: Notify all affected consumers",
798
+ "Week 2-3: Consumer migrations",
799
+ "Week 4: Deploy v3.0.0 with deprecated v2 endpoints",
800
+ "Month 3: Sunset v2 endpoints"
801
+ ],
802
+ "alternativeApproach": "Deploy v2.5.0 without breaking changes, defer to v3.0.0"
803
+ }
804
+ }
805
+ ```
806
+
807
+ ### 6. Contract Testing
808
+
809
+ Implements contract-first testing using Pact or similar frameworks.
810
+
811
+ **Contract Test Generator:**
812
+ ```javascript
813
+ class ContractTestGenerator {
814
+ generatePactTest(apiSchema, consumer) {
815
+ const interactions = [];
816
+
817
+ for (const [path, methods] of Object.entries(apiSchema.paths)) {
818
+ for (const [method, operation] of Object.entries(methods)) {
819
+ interactions.push({
820
+ description: `${method.toUpperCase()} ${path}`,
821
+ providerState: operation['x-provider-state'] || 'default state',
822
+ request: this.generateRequest(path, method, operation),
823
+ response: this.generateResponse(operation)
824
+ });
825
+ }
826
+ }
827
+
828
+ return {
829
+ consumer: { name: consumer.name },
830
+ provider: { name: apiSchema.info.title },
831
+ interactions: interactions
832
+ };
833
+ }
834
+
835
+ generateRequest(path, method, operation) {
836
+ return {
837
+ method: method.toUpperCase(),
838
+ path: this.replacePathParams(path, operation.parameters),
839
+ query: this.generateQueryParams(operation.parameters),
840
+ headers: {
841
+ 'Content-Type': 'application/json',
842
+ 'Accept': 'application/json'
843
+ },
844
+ body: operation.requestBody ? this.generateExampleBody(operation.requestBody) : undefined
845
+ };
846
+ }
847
+
848
+ generateResponse(operation) {
849
+ const successResponse = operation.responses['200'] || operation.responses['201'];
850
+
851
+ return {
852
+ status: parseInt(Object.keys(operation.responses)[0]),
853
+ headers: {
854
+ 'Content-Type': 'application/json'
855
+ },
856
+ body: this.generateExampleBody(successResponse)
857
+ };
858
+ }
859
+ }
860
+ ```
861
+
862
+ ### 7. Semantic Versioning Validation
863
+
864
+ Enforces semantic versioning rules across all API changes.
865
+
866
+ **Semver Validator:**
867
+ ```javascript
868
+ class SemanticVersioningValidator {
869
+ validate(changes, versionBump) {
870
+ const rules = [
871
+ {
872
+ condition: (c) => c.breaking.length > 0,
873
+ requiredBump: 'major',
874
+ message: 'Breaking changes require major version bump'
875
+ },
876
+ {
877
+ condition: (c) => c.nonBreaking.some(nc => nc.type.includes('ADDED')),
878
+ requiredBump: 'minor',
879
+ message: 'New features require minor version bump'
880
+ },
881
+ {
882
+ condition: (c) => c.breaking.length === 0 && !c.nonBreaking.some(nc => nc.type.includes('ADDED')),
883
+ requiredBump: 'patch',
884
+ message: 'Bug fixes only require patch version bump'
885
+ }
886
+ ];
887
+
888
+ for (const rule of rules) {
889
+ if (rule.condition(changes)) {
890
+ if (versionBump !== rule.requiredBump) {
891
+ return {
892
+ valid: false,
893
+ violation: rule.message,
894
+ required: rule.requiredBump,
895
+ actual: versionBump
896
+ };
897
+ }
898
+ return { valid: true, bump: rule.requiredBump };
899
+ }
900
+ }
901
+
902
+ return { valid: true, bump: 'patch' };
903
+ }
904
+ }
905
+ ```
906
+
907
+ ## Integration Points
908
+
909
+ ### Upstream Dependencies
910
+ - **OpenAPI/Swagger**: API schema specifications
911
+ - **GraphQL**: GraphQL schemas
912
+ - **Git**: Schema version history
913
+ - **API Gateways**: Consumer tracking
914
+
915
+ ### Downstream Consumers
916
+ - **qe-deployment-readiness**: Blocks deployment on breaking changes
917
+ - **qe-test-generator**: Generates contract tests
918
+ - **CI/CD Pipelines**: Enforces contract validation
919
+ - **API Documentation**: Updates docs with changes
920
+
921
+ ### Coordination Agents
922
+ - **qe-fleet-commander**: Orchestrates contract validation
923
+ - **qe-requirements-validator**: Validates API requirements
924
+
925
+ ## Coordination Protocol
926
+
927
+ This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero external dependencies, 100-500x faster).
928
+
929
+ **Automatic Lifecycle Hooks:**
930
+ ```typescript
931
+ // Automatically called by BaseAgent
932
+ protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
933
+ // Load baseline contracts and schemas
934
+ const contracts = await this.memoryStore.retrieve('aqe/contracts/current');
935
+ const baseline = await this.memoryStore.retrieve('aqe/api-schemas/baseline');
936
+ this.logger.info('Loaded API contracts and baseline schemas');
937
+ }
938
+
939
+ protected async onPostTask(data: { assignment: TaskAssignment; result: any }): Promise<void> {
940
+ // Store validation results and breaking changes
941
+ await this.memoryStore.store('aqe/contracts/validation-result', data.result.validation);
942
+ await this.memoryStore.store('aqe/breaking-changes/detected', data.result.breakingChanges);
943
+
944
+ // Emit events for downstream agents
945
+ this.eventBus.emit('contract-validator:completed', {
946
+ breakingChanges: data.result.breakingChanges.length,
947
+ validationStatus: data.result.validation.passed
948
+ });
949
+ }
950
+
951
+ protected async onPostEdit(data: { filePath: string; changes: any }): Promise<void> {
952
+ // Track schema updates
953
+ const fileName = data.filePath.split('/').pop();
954
+ await this.memoryStore.store(`aqe/contracts/schema-updated/${fileName}`, {
955
+ timestamp: Date.now(),
956
+ changes: data.changes
957
+ });
958
+ }
959
+ ```
960
+
961
+ **Advanced Verification (Optional):**
962
+ ```typescript
963
+ const hookManager = new VerificationHookManager(this.memoryStore);
964
+ const verification = await hookManager.executePreTaskVerification({
965
+ task: 'contract-validation',
966
+ context: {
967
+ requiredVars: ['NODE_ENV', 'API_VERSION'],
968
+ minMemoryMB: 512,
969
+ requiredKeys: ['aqe/api-schemas/baseline']
970
+ }
971
+ });
972
+ ```
973
+
974
+ ## Memory Keys
975
+
976
+ ### Input Keys
977
+ - `aqe/api-schemas/baseline` - Baseline API schemas
978
+ - `aqe/api-schemas/candidate` - New API schemas
979
+ - `aqe/contracts/current` - Current contract specifications
980
+ - `aqe/consumers/registry` - API consumer registry
981
+
982
+ ### Output Keys
983
+ - `aqe/contracts/validation-result` - Contract validation results
984
+ - `aqe/breaking-changes/detected` - Detected breaking changes
985
+ - `aqe/consumer-impact/analysis` - Consumer impact analysis
986
+ - `aqe/compatibility/report` - Compatibility assessment
987
+
988
+ ### Coordination Keys
989
+ - `aqe/contracts/status` - Validation status
990
+ - `aqe/contracts/alerts` - Critical contract violations
991
+
992
+ ## Use Cases
993
+
994
+ ### Use Case 1: Pre-Deployment Contract Validation
995
+
996
+ **Scenario**: Validate API changes before deploying to production.
997
+
998
+ **Workflow:**
999
+ ```bash
1000
+ # Compare schemas
1001
+ aqe contract compare --baseline v2.4.0 --candidate v2.5.0
1002
+
1003
+ # Detect breaking changes
1004
+ aqe contract breaking-changes --output breaking-changes.json
1005
+
1006
+ # Analyze consumer impact
1007
+ aqe contract consumer-impact --consumers consumer-registry.json
1008
+
1009
+ # Generate migration guide
1010
+ aqe contract migration-guide --output migration-guide.md
1011
+
1012
+ # Validate version bump
1013
+ aqe contract validate-version --current 2.4.0 --proposed 2.5.0
1014
+ ```
1015
+
1016
+ ### Use Case 2: Contract-First Development
1017
+
1018
+ **Scenario**: Generate contract tests from OpenAPI spec.
1019
+
1020
+ **Workflow:**
1021
+ ```bash
1022
+ # Generate Pact contract tests
1023
+ aqe contract generate-pact --spec openapi.yaml --consumer mobile-app
1024
+
1025
+ # Run contract tests
1026
+ aqe contract test --provider user-service --consumer mobile-app
1027
+
1028
+ # Publish contract
1029
+ aqe contract publish --broker https://pact-broker.company.com
1030
+ ```
1031
+
1032
+ ### Use Case 3: Consumer Notification
1033
+
1034
+ **Scenario**: Notify affected consumers of API changes.
1035
+
1036
+ **Workflow:**
1037
+ ```bash
1038
+ # Analyze impact
1039
+ aqe contract consumer-impact --baseline v2.4.0 --candidate v2.5.0
1040
+
1041
+ # Generate notification emails
1042
+ aqe contract notify-consumers --template email-template.html
1043
+
1044
+ # Track migration progress
1045
+ aqe contract migration-status --version v3.0.0
1046
+ ```
1047
+
1048
+ ## Success Metrics
1049
+
1050
+ ### Prevention Metrics
1051
+ - **Breaking Changes Prevented**: 95%
1052
+ - **Consumer Incidents**: 90% reduction
1053
+ - **Integration Failures**: 85% reduction
1054
+
1055
+ ### Quality Metrics
1056
+ - **Contract Compliance**: 100%
1057
+ - **Semantic Versioning Compliance**: 100%
1058
+ - **Consumer Satisfaction**: 4.8/5
1059
+
1060
+ ## Commands
1061
+
1062
+ ### Basic Commands
1063
+
1064
+ ```bash
1065
+ # Compare API schemas
1066
+ aqe contract compare --baseline <version> --candidate <version>
1067
+
1068
+ # Detect breaking changes
1069
+ aqe contract breaking-changes --spec <openapi-file>
1070
+
1071
+ # Validate contract
1072
+ aqe contract validate --spec <openapi-file>
1073
+
1074
+ # Generate diff report
1075
+ aqe contract diff --baseline <v1> --candidate <v2> --output diff.html
1076
+
1077
+ # Check semantic versioning
1078
+ aqe contract semver-check --current <version> --proposed <version>
1079
+ ```
1080
+
1081
+ ### Advanced Commands
1082
+
1083
+ ```bash
1084
+ # Consumer impact analysis
1085
+ aqe contract consumer-impact --consumers <registry> --changes <changes-file>
1086
+
1087
+ # Generate Pact tests
1088
+ aqe contract generate-pact --spec <openapi> --consumer <name>
1089
+
1090
+ # Run contract tests
1091
+ aqe contract test --provider <service> --consumer <app>
1092
+
1093
+ # Migration guide generation
1094
+ aqe contract migration-guide --baseline <v1> --candidate <v2>
1095
+
1096
+ # Notify consumers
1097
+ aqe contract notify-consumers --changes <changes-file> --template <email-template>
1098
+ ```
1099
+
1100
+ ### Specialized Commands
1101
+
1102
+ ```bash
1103
+ # GraphQL schema validation
1104
+ aqe contract validate-graphql --schema schema.graphql
1105
+
1106
+ # API versioning strategy
1107
+ aqe contract versioning-strategy --analyze-history --days 180
1108
+
1109
+ # Consumer compatibility matrix
1110
+ aqe contract compatibility-matrix --output matrix.html
1111
+
1112
+ # Deprecation timeline
1113
+ aqe contract deprecation-timeline --version <v2> --sunset-date <date>
1114
+
1115
+ # Contract evolution report
1116
+ aqe contract evolution --from <v1> --to <v2> --format pdf
1117
+ ```
1118
+
1119
+
1120
+ **Agent Status**: Production Ready
1121
+ **Last Updated**: 2025-09-30
1122
+ **Version**: 1.0.0
1123
+ **Maintainer**: AQE Fleet Team