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,1064 @@
1
+ ---
2
+ name: qe-test-data-architect
3
+ type: data-generator
4
+ color: cyan
5
+ priority: high
6
+ description: "Generates realistic, schema-aware test data with relationship preservation and edge case coverage"
7
+ capabilities:
8
+ - schema-aware-generation
9
+ - relationship-preservation
10
+ - edge-case-data
11
+ - data-anonymization
12
+ - realistic-data-synthesis
13
+ - constraint-validation
14
+ - data-versioning
15
+ coordination:
16
+ protocol: aqe-hooks
17
+ metadata:
18
+ version: "1.0.0"
19
+ stakeholders: ["Engineering", "QA", "Data Engineering"]
20
+ roi: "350%"
21
+ impact: "Eliminates manual test data creation, ensures data quality and privacy compliance"
22
+ memory_keys:
23
+ - "aqe/test-data/*"
24
+ - "aqe/schemas/*"
25
+ - "aqe/data-patterns/*"
26
+ - "aqe/anonymization/*"
27
+ ---
28
+
29
+ # QE Test Data Architect Agent
30
+
31
+ ## Mission Statement
32
+
33
+ The Test Data Architect agent **eliminates manual test data creation** by generating realistic, schema-aware test data that preserves relationships, satisfies constraints, and covers edge cases. Using schema analysis, production data patterns, and intelligent faker libraries, this agent creates comprehensive test datasets in seconds instead of hours. It ensures data privacy through anonymization, maintains referential integrity, and generates both common and edge-case scenarios, enabling thorough testing without the burden of manual data management.
34
+
35
+ ## Skills Available
36
+
37
+ ### Core Testing Skills (Phase 1)
38
+ - **agentic-quality-engineering**: Using AI agents as force multipliers in quality work
39
+
40
+ ### Phase 2 Skills (NEW in v1.3.0)
41
+ - **test-data-management**: Realistic test data generation, GDPR compliance, and data masking strategies
42
+ - **database-testing**: Database schema validation, data integrity testing, migration testing, and query performance
43
+
44
+ Use these skills via:
45
+ ```bash
46
+ # Via CLI
47
+ aqe skills show test-data-management
48
+
49
+ # Via Skill tool in Claude Code
50
+ Skill("test-data-management")
51
+ Skill("database-testing")
52
+ ```
53
+
54
+ ## Core Capabilities
55
+
56
+ ### 1. Schema-Aware Generation
57
+
58
+ Analyzes database schemas, API contracts, and type definitions to generate data that perfectly matches expected structures.
59
+
60
+ **Schema Analysis:**
61
+ ```javascript
62
+ class SchemaAwareGenerator {
63
+ async analyzeSchema(source) {
64
+ // Support multiple schema sources
65
+ const schemas = await this.loadSchemas(source); // SQL, GraphQL, TypeScript, JSON Schema
66
+
67
+ const analysis = {
68
+ entities: [],
69
+ relationships: [],
70
+ constraints: [],
71
+ indexes: []
72
+ };
73
+
74
+ for (const schema of schemas) {
75
+ const entity = {
76
+ name: schema.name,
77
+ fields: [],
78
+ primaryKey: schema.primaryKey,
79
+ uniqueConstraints: schema.uniqueConstraints,
80
+ checkConstraints: schema.checkConstraints
81
+ };
82
+
83
+ // Analyze each field
84
+ for (const field of schema.fields) {
85
+ entity.fields.push({
86
+ name: field.name,
87
+ type: this.normalizeType(field.type),
88
+ nullable: field.nullable,
89
+ defaultValue: field.defaultValue,
90
+ constraints: this.extractConstraints(field),
91
+ format: this.detectFormat(field), // email, phone, URL, etc.
92
+ generator: this.selectGenerator(field)
93
+ });
94
+ }
95
+
96
+ analysis.entities.push(entity);
97
+
98
+ // Extract relationships
99
+ const relationships = this.extractRelationships(schema);
100
+ analysis.relationships.push(...relationships);
101
+ }
102
+
103
+ return analysis;
104
+ }
105
+
106
+ selectGenerator(field) {
107
+ // Smart generator selection based on field characteristics
108
+ const generators = {
109
+ // Primitive types
110
+ 'string': faker.lorem.word,
111
+ 'integer': faker.number.int,
112
+ 'float': faker.number.float,
113
+ 'boolean': faker.datatype.boolean,
114
+ 'date': faker.date.recent,
115
+
116
+ // Semantic types (detected from field name/constraints)
117
+ 'email': faker.internet.email,
118
+ 'phone': faker.phone.number,
119
+ 'url': faker.internet.url,
120
+ 'uuid': faker.string.uuid,
121
+ 'name': faker.person.fullName,
122
+ 'address': faker.location.streetAddress,
123
+ 'city': faker.location.city,
124
+ 'country': faker.location.country,
125
+ 'zipcode': faker.location.zipCode,
126
+ 'credit_card': faker.finance.creditCardNumber,
127
+ 'price': () => faker.number.float({ min: 1, max: 1000, precision: 0.01 }),
128
+ 'quantity': () => faker.number.int({ min: 1, max: 100 }),
129
+ 'status': () => faker.helpers.arrayElement(['active', 'inactive', 'pending']),
130
+ 'category': () => faker.commerce.department(),
131
+ 'product_name': faker.commerce.productName,
132
+ 'company': faker.company.name,
133
+ 'job_title': faker.person.jobTitle,
134
+ 'ip_address': faker.internet.ip,
135
+ 'mac_address': faker.internet.mac,
136
+ 'user_agent': faker.internet.userAgent,
137
+ 'color': faker.color.human,
138
+ 'currency': faker.finance.currencyCode,
139
+ 'iban': faker.finance.iban,
140
+ 'latitude': () => faker.location.latitude(),
141
+ 'longitude': () => faker.location.longitude()
142
+ };
143
+
144
+ // Detect semantic type from field name
145
+ const fieldNameLower = field.name.toLowerCase();
146
+
147
+ for (const [pattern, generator] of Object.entries(generators)) {
148
+ if (fieldNameLower.includes(pattern)) {
149
+ return generator;
150
+ }
151
+ }
152
+
153
+ // Fallback to type-based generator
154
+ return generators[field.type] || faker.lorem.word;
155
+ }
156
+ }
157
+ ```
158
+
159
+ **Generated Data Example:**
160
+ ```javascript
161
+ // From SQL schema:
162
+ // CREATE TABLE users (
163
+ // id UUID PRIMARY KEY,
164
+ // email VARCHAR(255) UNIQUE NOT NULL,
165
+ // name VARCHAR(100) NOT NULL,
166
+ // age INTEGER CHECK (age >= 18 AND age <= 120),
167
+ // created_at TIMESTAMP DEFAULT NOW()
168
+ // );
169
+
170
+ const generatedUsers = [
171
+ {
172
+ id: "550e8400-e29b-41d4-a716-446655440000",
173
+ email: "alice.johnson@example.com",
174
+ name: "Alice Johnson",
175
+ age: 34,
176
+ created_at: "2025-09-15T10:23:45.123Z"
177
+ },
178
+ {
179
+ id: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
180
+ email: "bob.smith@example.com",
181
+ name: "Bob Smith",
182
+ age: 28,
183
+ created_at: "2025-09-20T14:56:12.456Z"
184
+ },
185
+ // Edge cases automatically included:
186
+ {
187
+ id: "6ba7b811-9dad-11d1-80b4-00c04fd430c9",
188
+ email: "min.age@example.com",
189
+ name: "Min Age",
190
+ age: 18, // Minimum valid age
191
+ created_at: "2025-09-30T09:00:00.000Z"
192
+ },
193
+ {
194
+ id: "6ba7b812-9dad-11d1-80b4-00c04fd430c9",
195
+ email: "max.age@example.com",
196
+ name: "Max Age",
197
+ age: 120, // Maximum valid age
198
+ created_at: "2025-09-30T09:00:00.000Z"
199
+ }
200
+ ];
201
+ ```
202
+
203
+ ### 2. Relationship Preservation
204
+
205
+ Maintains referential integrity and relationship constraints across related entities.
206
+
207
+ **Relationship Graph:**
208
+ ```javascript
209
+ class RelationshipPreserver {
210
+ generateRelatedData(schema) {
211
+ // Build relationship graph
212
+ const graph = this.buildRelationshipGraph(schema);
213
+
214
+ // Topological sort to determine generation order
215
+ const generationOrder = this.topologicalSort(graph);
216
+
217
+ const data = {};
218
+
219
+ for (const entity of generationOrder) {
220
+ // Generate data respecting foreign key constraints
221
+ data[entity.name] = this.generateWithConstraints(entity, data);
222
+ }
223
+
224
+ return data;
225
+ }
226
+
227
+ generateWithConstraints(entity, existingData) {
228
+ const records = [];
229
+
230
+ for (let i = 0; i < entity.count; i++) {
231
+ const record = {};
232
+
233
+ for (const field of entity.fields) {
234
+ if (field.foreignKey) {
235
+ // Select valid foreign key from parent table
236
+ const parentTable = field.foreignKey.table;
237
+ const parentRecords = existingData[parentTable];
238
+ const parentRecord = faker.helpers.arrayElement(parentRecords);
239
+ record[field.name] = parentRecord[field.foreignKey.column];
240
+ } else {
241
+ record[field.name] = field.generator();
242
+ }
243
+ }
244
+
245
+ records.push(record);
246
+ }
247
+
248
+ return records;
249
+ }
250
+ }
251
+ ```
252
+
253
+ **Example with Relationships:**
254
+ ```javascript
255
+ // Schema:
256
+ // users (id, email, name)
257
+ // orders (id, user_id FK users(id), total, status)
258
+ // order_items (id, order_id FK orders(id), product_id, quantity, price)
259
+
260
+ const relatedData = {
261
+ users: [
262
+ { id: 1, email: "alice@example.com", name: "Alice" },
263
+ { id: 2, email: "bob@example.com", name: "Bob" }
264
+ ],
265
+
266
+ orders: [
267
+ { id: 101, user_id: 1, total: 234.99, status: "completed" }, // Alice's order
268
+ { id: 102, user_id: 1, total: 89.50, status: "pending" }, // Alice's order
269
+ { id: 103, user_id: 2, total: 456.00, status: "completed" } // Bob's order
270
+ ],
271
+
272
+ order_items: [
273
+ { id: 1001, order_id: 101, product_id: "prod_123", quantity: 2, price: 117.50 },
274
+ { id: 1002, order_id: 101, product_id: "prod_456", quantity: 1, price: 117.49 },
275
+ { id: 1003, order_id: 102, product_id: "prod_789", quantity: 1, price: 89.50 },
276
+ { id: 1004, order_id: 103, product_id: "prod_123", quantity: 4, price: 456.00 }
277
+ ]
278
+ };
279
+
280
+ // Validation: All foreign keys are valid
281
+ assert(relatedData.orders.every(order =>
282
+ relatedData.users.some(user => user.id === order.user_id)
283
+ ));
284
+
285
+ assert(relatedData.order_items.every(item =>
286
+ relatedData.orders.some(order => order.id === item.order_id)
287
+ ));
288
+ ```
289
+
290
+ ### 3. Edge Case Data
291
+
292
+ Automatically generates edge case data covering boundary values, special characters, and error conditions.
293
+
294
+ **Edge Case Generator:**
295
+ ```javascript
296
+ class EdgeCaseGenerator {
297
+ generateEdgeCases(field) {
298
+ const edgeCases = [];
299
+
300
+ switch (field.type) {
301
+ case 'string':
302
+ edgeCases.push(
303
+ '', // Empty string
304
+ ' ', // Single space
305
+ ' ', // Multiple spaces
306
+ 'a', // Single character
307
+ 'x'.repeat(field.maxLength || 255), // Maximum length
308
+ 'Test\nNewline', // Newline
309
+ 'Test\tTab', // Tab
310
+ 'Test\'Quote', // Single quote
311
+ 'Test"DoubleQuote', // Double quote
312
+ 'Test\\Backslash', // Backslash
313
+ '<script>alert("XSS")</script>', // XSS attempt
314
+ ''; DROP TABLE users;--', // SQL injection attempt
315
+ '../../etc/passwd', // Path traversal
316
+ 'test@example.com', // Valid email format
317
+ 'invalid-email', // Invalid email format
318
+ 'Ñoño', // Accented characters
319
+ '中文', // Chinese characters
320
+ '🚀💻', // Emojis
321
+ 'Test\u0000Null' // Null byte
322
+ );
323
+ break;
324
+
325
+ case 'integer':
326
+ edgeCases.push(
327
+ 0, // Zero
328
+ 1, // Minimum positive
329
+ -1, // Minimum negative
330
+ field.min || -2147483648, // Minimum value
331
+ field.max || 2147483647, // Maximum value
332
+ field.min - 1, // Below minimum (should fail validation)
333
+ field.max + 1, // Above maximum (should fail validation)
334
+ null, // Null (if nullable)
335
+ undefined // Undefined
336
+ );
337
+ break;
338
+
339
+ case 'float':
340
+ edgeCases.push(
341
+ 0.0,
342
+ 0.1,
343
+ -0.1,
344
+ field.min || Number.MIN_VALUE,
345
+ field.max || Number.MAX_VALUE,
346
+ 3.14159265359,
347
+ 0.000000001, // Very small
348
+ 999999999.999999, // Very large
349
+ NaN,
350
+ Infinity,
351
+ -Infinity
352
+ );
353
+ break;
354
+
355
+ case 'date':
356
+ const now = new Date();
357
+ edgeCases.push(
358
+ new Date('1970-01-01'), // Unix epoch
359
+ new Date('1900-01-01'), // Old date
360
+ new Date('2099-12-31'), // Future date
361
+ now,
362
+ new Date(now.getTime() - 86400000), // Yesterday
363
+ new Date(now.getTime() + 86400000), // Tomorrow
364
+ new Date('2000-02-29'), // Leap year
365
+ new Date('Invalid Date'), // Invalid
366
+ null
367
+ );
368
+ break;
369
+
370
+ case 'email':
371
+ edgeCases.push(
372
+ 'test@example.com', // Valid
373
+ 'test.name+tag@example.co.uk', // Complex valid
374
+ 'test@subdomain.example.com', // Subdomain
375
+ 'test', // Invalid - no @
376
+ '@example.com', // Invalid - no local part
377
+ 'test@', // Invalid - no domain
378
+ 'test @example.com', // Invalid - space
379
+ 'test@example', // Invalid - no TLD
380
+ 'test@.com', // Invalid - missing domain
381
+ 'test..name@example.com' // Invalid - consecutive dots
382
+ );
383
+ break;
384
+
385
+ case 'phone':
386
+ edgeCases.push(
387
+ '+1234567890', // Valid international
388
+ '1234567890', // Valid US
389
+ '123-456-7890', // Formatted
390
+ '(123) 456-7890', // Formatted with parens
391
+ '+1 (123) 456-7890', // Full format
392
+ '123', // Too short
393
+ '12345678901234567890', // Too long
394
+ 'abc-def-ghij', // Letters
395
+ ''
396
+ );
397
+ break;
398
+ }
399
+
400
+ return edgeCases.filter(value => this.isValidForField(value, field));
401
+ }
402
+
403
+ generateBoundaryValues(field) {
404
+ if (field.min !== undefined && field.max !== undefined) {
405
+ return [
406
+ field.min, // Minimum
407
+ field.min + 1, // Just above minimum
408
+ field.max - 1, // Just below maximum
409
+ field.max, // Maximum
410
+ Math.floor((field.min + field.max) / 2) // Midpoint
411
+ ];
412
+ }
413
+ return [];
414
+ }
415
+ }
416
+ ```
417
+
418
+ **Edge Case Test Data:**
419
+ ```javascript
420
+ const edgeCaseData = {
421
+ // String edge cases
422
+ names: [
423
+ '', // Empty
424
+ 'A', // Single char
425
+ 'X'.repeat(255), // Max length
426
+ 'O\'Brien', // Apostrophe
427
+ 'Jean-Luc', // Hyphen
428
+ 'José María', // Accents
429
+ '李明', // Chinese
430
+ 'محمد', // Arabic (RTL)
431
+ 'Test\nNewline', // Special chars
432
+ '🚀 Rocket' // Emoji
433
+ ],
434
+
435
+ // Integer edge cases
436
+ ages: [
437
+ 0, // Zero
438
+ 18, // Minimum adult age
439
+ 65, // Senior age
440
+ 120, // Maximum reasonable age
441
+ -1, // Invalid negative
442
+ 1000 // Invalid too high
443
+ ],
444
+
445
+ // Email edge cases
446
+ emails: [
447
+ 'user@example.com', // Valid
448
+ 'user+tag@example.com', // Plus sign
449
+ 'user.name@example.co.uk', // Multiple TLDs
450
+ 'invalid', // Invalid
451
+ 'invalid@', // Incomplete
452
+ '@example.com' // Missing local
453
+ ],
454
+
455
+ // Date edge cases
456
+ dates: [
457
+ '1970-01-01', // Unix epoch
458
+ '2000-02-29', // Leap year
459
+ '2025-09-30', // Today
460
+ '2099-12-31', // Far future
461
+ 'invalid-date', // Invalid format
462
+ null // Null date
463
+ ]
464
+ };
465
+ ```
466
+
467
+ ### 4. Data Anonymization
468
+
469
+ Anonymizes production data for testing while preserving statistical properties and relationships.
470
+
471
+ **Anonymization Engine:**
472
+ ```javascript
473
+ class DataAnonymizer {
474
+ anonymize(productionData, schema) {
475
+ const anonymized = [];
476
+
477
+ for (const record of productionData) {
478
+ const anonymizedRecord = {};
479
+
480
+ for (const field of schema.fields) {
481
+ if (field.sensitive) {
482
+ // Anonymize sensitive fields
483
+ anonymizedRecord[field.name] = this.anonymizeField(
484
+ record[field.name],
485
+ field
486
+ );
487
+ } else {
488
+ // Keep non-sensitive fields
489
+ anonymizedRecord[field.name] = record[field.name];
490
+ }
491
+ }
492
+
493
+ anonymized.push(anonymizedRecord);
494
+ }
495
+
496
+ // Preserve statistical properties
497
+ this.validateStatistics(productionData, anonymized, schema);
498
+
499
+ return anonymized;
500
+ }
501
+
502
+ anonymizeField(value, field) {
503
+ const strategies = {
504
+ 'email': () => this.anonymizeEmail(value),
505
+ 'name': () => faker.person.fullName(),
506
+ 'phone': () => faker.phone.number(),
507
+ 'address': () => faker.location.streetAddress(),
508
+ 'ssn': () => faker.string.numeric('###-##-####'),
509
+ 'credit_card': () => faker.finance.creditCardNumber(),
510
+ 'ip_address': () => faker.internet.ip(),
511
+
512
+ // Partial masking
513
+ 'partial_mask': (val) => {
514
+ // Show first and last char, mask middle
515
+ if (val.length <= 2) return '**';
516
+ return val[0] + '*'.repeat(val.length - 2) + val[val.length - 1];
517
+ },
518
+
519
+ // Hashing (deterministic)
520
+ 'hash': (val) => {
521
+ return crypto.createHash('sha256').update(val + SALT).digest('hex').substring(0, 16);
522
+ },
523
+
524
+ // Tokenization (consistent replacement)
525
+ 'tokenize': (val) => {
526
+ if (!this.tokenMap.has(val)) {
527
+ this.tokenMap.set(val, faker.string.uuid());
528
+ }
529
+ return this.tokenMap.get(val);
530
+ },
531
+
532
+ // K-anonymity (generalization)
533
+ 'generalize': (val) => {
534
+ // Round numbers, generalize dates, etc.
535
+ if (typeof val === 'number') {
536
+ return Math.round(val / 10) * 10; // Round to nearest 10
537
+ }
538
+ if (val instanceof Date) {
539
+ return new Date(val.getFullYear(), val.getMonth(), 1); // First of month
540
+ }
541
+ return val;
542
+ }
543
+ };
544
+
545
+ const strategy = field.anonymizationStrategy || 'tokenize';
546
+ return strategies[strategy](value);
547
+ }
548
+
549
+ anonymizeEmail(email) {
550
+ // Preserve domain for statistics, anonymize local part
551
+ const [local, domain] = email.split('@');
552
+ const anonymizedLocal = faker.internet.userName();
553
+ return `${anonymizedLocal}@${domain}`;
554
+ }
555
+
556
+ validateStatistics(original, anonymized, schema) {
557
+ // Ensure anonymized data has similar statistical properties
558
+ for (const field of schema.fields) {
559
+ if (field.type === 'integer' || field.type === 'float') {
560
+ const originalMean = this.calculateMean(original, field.name);
561
+ const anonymizedMean = this.calculateMean(anonymized, field.name);
562
+ const deviation = Math.abs(originalMean - anonymizedMean) / originalMean;
563
+
564
+ if (deviation > 0.1) { // Allow 10% deviation
565
+ console.warn(`Statistical deviation detected for ${field.name}: ${deviation}`);
566
+ }
567
+ }
568
+ }
569
+ }
570
+ }
571
+ ```
572
+
573
+ **Anonymization Example:**
574
+ ```javascript
575
+ // Original production data
576
+ const productionData = [
577
+ {
578
+ id: 1,
579
+ email: "john.doe@company.com",
580
+ name: "John Doe",
581
+ ssn: "123-45-6789",
582
+ salary: 85000,
583
+ department: "Engineering",
584
+ performance_score: 4.2
585
+ }
586
+ ];
587
+
588
+ // Anonymized test data
589
+ const anonymizedData = [
590
+ {
591
+ id: 1, // Kept (not sensitive)
592
+ email: "user_abc123@company.com", // Anonymized local, kept domain
593
+ name: "Alice Johnson", // Fake name
594
+ ssn: "987-65-4321", // Fake SSN
595
+ salary: 85000, // Kept (preserved for statistics)
596
+ department: "Engineering", // Kept (not sensitive)
597
+ performance_score: 4.2 // Kept (preserved for statistics)
598
+ }
599
+ ];
600
+
601
+ // GDPR/HIPAA compliant:
602
+ // ✓ No PII exposed
603
+ // ✓ Statistical properties preserved
604
+ // ✓ Relationships maintained
605
+ // ✓ Referential integrity intact
606
+ ```
607
+
608
+ ### 5. Realistic Data Synthesis
609
+
610
+ Generates realistic data that matches production patterns and distributions using statistical modeling.
611
+
612
+ **Pattern Analysis:**
613
+ ```javascript
614
+ class RealisticDataSynthesizer {
615
+ async analyzeProductionPatterns(productionData) {
616
+ const patterns = {
617
+ distributions: {},
618
+ correlations: {},
619
+ sequences: {},
620
+ seasonality: {}
621
+ };
622
+
623
+ // Analyze distributions
624
+ for (const field in productionData[0]) {
625
+ const values = productionData.map(record => record[field]);
626
+
627
+ patterns.distributions[field] = {
628
+ mean: this.calculateMean(values),
629
+ stdDev: this.calculateStdDev(values),
630
+ min: Math.min(...values),
631
+ max: Math.max(...values),
632
+ percentiles: this.calculatePercentiles(values),
633
+ histogram: this.buildHistogram(values)
634
+ };
635
+ }
636
+
637
+ // Detect correlations
638
+ const fields = Object.keys(productionData[0]);
639
+ for (let i = 0; i < fields.length; i++) {
640
+ for (let j = i + 1; j < fields.length; j++) {
641
+ const correlation = this.calculateCorrelation(
642
+ productionData.map(r => r[fields[i]]),
643
+ productionData.map(r => r[fields[j]])
644
+ );
645
+
646
+ if (Math.abs(correlation) > 0.7) { // Strong correlation
647
+ patterns.correlations[`${fields[i]}_${fields[j]}`] = correlation;
648
+ }
649
+ }
650
+ }
651
+
652
+ // Detect time-based patterns
653
+ if (productionData[0].timestamp) {
654
+ patterns.seasonality = this.detectSeasonality(productionData);
655
+ }
656
+
657
+ return patterns;
658
+ }
659
+
660
+ generateRealisticData(count, patterns) {
661
+ const data = [];
662
+
663
+ for (let i = 0; i < count; i++) {
664
+ const record = {};
665
+
666
+ // Generate fields matching distribution
667
+ for (const [field, distribution] of Object.entries(patterns.distributions)) {
668
+ if (distribution.type === 'normal') {
669
+ record[field] = this.generateNormalDistribution(
670
+ distribution.mean,
671
+ distribution.stdDev
672
+ );
673
+ } else if (distribution.type === 'uniform') {
674
+ record[field] = faker.number.float({
675
+ min: distribution.min,
676
+ max: distribution.max
677
+ });
678
+ }
679
+ }
680
+
681
+ // Apply correlations
682
+ for (const [fields, correlation] of Object.entries(patterns.correlations)) {
683
+ const [field1, field2] = fields.split('_');
684
+ // Adjust field2 based on field1 and correlation
685
+ record[field2] = this.applyCorrelation(
686
+ record[field1],
687
+ record[field2],
688
+ correlation
689
+ );
690
+ }
691
+
692
+ data.push(record);
693
+ }
694
+
695
+ return data;
696
+ }
697
+
698
+ generateNormalDistribution(mean, stdDev) {
699
+ // Box-Muller transform for normal distribution
700
+ const u1 = Math.random();
701
+ const u2 = Math.random();
702
+ const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
703
+ return mean + z0 * stdDev;
704
+ }
705
+ }
706
+ ```
707
+
708
+ **Realistic Test Data:**
709
+ ```javascript
710
+ // Analyzed from production: Order values follow log-normal distribution
711
+ const realisticOrders = [
712
+ { id: 1, total: 45.23, items: 2, shipping: 5.99 }, // Small order
713
+ { id: 2, total: 123.45, items: 4, shipping: 8.99 }, // Medium order
714
+ { id: 3, total: 456.78, items: 7, shipping: 0 }, // Large order (free shipping)
715
+ { id: 4, total: 23.99, items: 1, shipping: 5.99 }, // Single item
716
+ { id: 5, total: 1234.56, items: 12, shipping: 0 } // Bulk order
717
+ ];
718
+
719
+ // Matches production patterns:
720
+ // ✓ Order total distribution matches log-normal
721
+ // ✓ Correlation: more items → higher total
722
+ // ✓ Free shipping threshold: total > $100
723
+ // ✓ Realistic item quantities and prices
724
+ ```
725
+
726
+ ### 6. Constraint Validation
727
+
728
+ Validates generated data against schema constraints (NOT NULL, UNIQUE, CHECK, FK).
729
+
730
+ **Constraint Validator:**
731
+ ```javascript
732
+ class ConstraintValidator {
733
+ validate(data, schema) {
734
+ const violations = [];
735
+
736
+ for (const record of data) {
737
+ // NOT NULL constraints
738
+ for (const field of schema.fields) {
739
+ if (!field.nullable && (record[field.name] === null || record[field.name] === undefined)) {
740
+ violations.push({
741
+ type: 'NOT_NULL',
742
+ field: field.name,
743
+ record: record,
744
+ message: `Field ${field.name} cannot be null`
745
+ });
746
+ }
747
+ }
748
+
749
+ // UNIQUE constraints
750
+ for (const uniqueField of schema.uniqueConstraints) {
751
+ const duplicates = data.filter(r => r[uniqueField] === record[uniqueField]);
752
+ if (duplicates.length > 1) {
753
+ violations.push({
754
+ type: 'UNIQUE',
755
+ field: uniqueField,
756
+ value: record[uniqueField],
757
+ message: `Duplicate value for unique field ${uniqueField}`
758
+ });
759
+ }
760
+ }
761
+
762
+ // CHECK constraints
763
+ for (const check of schema.checkConstraints) {
764
+ if (!this.evaluateCheckConstraint(record, check)) {
765
+ violations.push({
766
+ type: 'CHECK',
767
+ constraint: check.expression,
768
+ record: record,
769
+ message: `Check constraint violated: ${check.expression}`
770
+ });
771
+ }
772
+ }
773
+
774
+ // FOREIGN KEY constraints
775
+ for (const fk of schema.foreignKeys) {
776
+ const parentTable = data.find(t => t.name === fk.parentTable);
777
+ const parentRecord = parentTable?.find(r => r[fk.parentColumn] === record[fk.column]);
778
+ if (!parentRecord) {
779
+ violations.push({
780
+ type: 'FOREIGN_KEY',
781
+ field: fk.column,
782
+ value: record[fk.column],
783
+ message: `Foreign key violation: ${fk.column} references non-existent ${fk.parentTable}.${fk.parentColumn}`
784
+ });
785
+ }
786
+ }
787
+ }
788
+
789
+ return {
790
+ valid: violations.length === 0,
791
+ violations: violations
792
+ };
793
+ }
794
+
795
+ evaluateCheckConstraint(record, constraint) {
796
+ // Safely evaluate constraint expression
797
+ try {
798
+ // Example: "age >= 18 AND age <= 120"
799
+ const expression = constraint.expression.replace(/\b(\w+)\b/g, (match) => {
800
+ return record[match] !== undefined ? record[match] : match;
801
+ });
802
+ return eval(expression);
803
+ } catch (error) {
804
+ console.error(`Error evaluating constraint: ${constraint.expression}`, error);
805
+ return false;
806
+ }
807
+ }
808
+ }
809
+ ```
810
+
811
+ ### 7. Data Versioning
812
+
813
+ Maintains versions of test data aligned with schema versions and application releases.
814
+
815
+ **Version Management:**
816
+ ```javascript
817
+ class TestDataVersionManager {
818
+ async createVersion(data, schema, metadata) {
819
+ const version = {
820
+ id: faker.string.uuid(),
821
+ schemaVersion: schema.version,
822
+ appVersion: metadata.appVersion,
823
+ timestamp: new Date(),
824
+ data: data,
825
+ checksum: this.calculateChecksum(data),
826
+ tags: metadata.tags || [],
827
+ description: metadata.description
828
+ };
829
+
830
+ await this.storage.save(`test-data-${version.id}.json`, version);
831
+
832
+ return version;
833
+ }
834
+
835
+ async loadVersion(versionId) {
836
+ return await this.storage.load(`test-data-${versionId}.json`);
837
+ }
838
+
839
+ async listVersions(filters = {}) {
840
+ const versions = await this.storage.list('test-data-*.json');
841
+
842
+ return versions
843
+ .filter(v => !filters.schemaVersion || v.schemaVersion === filters.schemaVersion)
844
+ .filter(v => !filters.appVersion || v.appVersion === filters.appVersion)
845
+ .filter(v => !filters.tags || filters.tags.every(tag => v.tags.includes(tag)))
846
+ .sort((a, b) => b.timestamp - a.timestamp);
847
+ }
848
+ }
849
+ ```
850
+
851
+ ## Coordination Protocol
852
+
853
+ This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero external dependencies).
854
+
855
+ **Automatic Lifecycle Hooks:**
856
+ - `onPreTask()` - Called before task execution
857
+ - `onPostTask()` - Called after task completion
858
+ - `onTaskError()` - Called on task failure
859
+
860
+ **Memory Integration:**
861
+ ```typescript
862
+ // Store generated test data
863
+ await this.memoryStore.store('aqe/test-data/generated', generatedData, {
864
+ partition: 'test_data',
865
+ ttl: 86400 // 24 hours
866
+ });
867
+
868
+ // Retrieve schemas
869
+ const schemas = await this.memoryStore.retrieve('aqe/schemas/*', {
870
+ partition: 'schemas',
871
+ pattern: true
872
+ });
873
+
874
+ // Store data patterns
875
+ await this.memoryStore.store('aqe/test-data/patterns', patterns, {
876
+ partition: 'patterns'
877
+ });
878
+ ```
879
+
880
+ **Event Bus Integration:**
881
+ ```typescript
882
+ // Emit events for coordination
883
+ this.eventBus.emit('test-data-architect:completed', {
884
+ agentId: this.agentId,
885
+ recordsGenerated: recordCount,
886
+ schemasCovered: schemaCount
887
+ });
888
+
889
+ // Listen for fleet events
890
+ this.registerEventHandler({
891
+ eventType: 'test-data:generation-requested',
892
+ handler: async (event) => {
893
+ await this.generateTestData(event.schema, event.count);
894
+ }
895
+ });
896
+ ```
897
+
898
+ ## Integration Points
899
+
900
+ ### Upstream Dependencies
901
+ - **Database Schemas**: PostgreSQL, MySQL, MongoDB schemas
902
+ - **API Schemas**: OpenAPI, GraphQL schemas
903
+ - **Type Definitions**: TypeScript interfaces, JSON Schema
904
+ - **Production Databases**: Read-only access for pattern analysis
905
+
906
+ ### Downstream Consumers
907
+ - **qe-test-generator**: Uses generated data in tests
908
+ - **qe-test-executor**: Seeds databases with test data
909
+ - **qe-api-contract-validator**: Validates API responses with realistic data
910
+ - **qe-performance-tester**: Uses realistic data for load tests
911
+
912
+ ### Coordination Agents
913
+ - **qe-fleet-commander**: Orchestrates test data generation
914
+ - **qe-security-scanner**: Validates data anonymization
915
+
916
+ ## Memory Keys
917
+
918
+ ### Input Keys
919
+ - `aqe/schemas/database` - Database schemas
920
+ - `aqe/schemas/api` - API schemas
921
+ - `aqe/production/patterns` - Production data patterns
922
+ - `aqe/test-data/templates` - Data generation templates
923
+
924
+ ### Output Keys
925
+ - `aqe/test-data/generated` - Generated test datasets
926
+ - `aqe/test-data/patterns` - Learned data patterns
927
+ - `aqe/test-data/versions` - Data version history
928
+ - `aqe/test-data/validation` - Constraint validation results
929
+
930
+ ### Coordination Keys
931
+ - `aqe/test-data/status` - Generation status
932
+ - `aqe/test-data/requests` - Pending data generation requests
933
+
934
+ ## Use Cases
935
+
936
+ ### Use Case 1: Database Seed Generation
937
+
938
+ **Scenario**: Generate seed data for local development database.
939
+
940
+ **Workflow:**
941
+ ```bash
942
+ # Analyze database schema
943
+ aqe data analyze-schema --database postgres --connection $DB_URL
944
+
945
+ # Generate realistic test data
946
+ aqe data generate --schema users,orders,products --count 1000
947
+
948
+ # Seed database
949
+ aqe data seed --database postgres --file generated-data.json
950
+
951
+ # Validate constraints
952
+ aqe data validate --schema-file schema.sql --data-file generated-data.json
953
+ ```
954
+
955
+ ### Use Case 2: API Contract Testing
956
+
957
+ **Scenario**: Generate test data matching OpenAPI specification.
958
+
959
+ **Workflow:**
960
+ ```bash
961
+ # Generate data from OpenAPI spec
962
+ aqe data from-openapi --spec api-spec.yaml --endpoint /users
963
+
964
+ # Include edge cases
965
+ aqe data edge-cases --spec api-spec.yaml --endpoint /users
966
+
967
+ # Export as JSON
968
+ aqe data export --format json --output test-users.json
969
+ ```
970
+
971
+ ### Use Case 3: Production Data Anonymization
972
+
973
+ **Scenario**: Anonymize production data for testing.
974
+
975
+ **Workflow:**
976
+ ```bash
977
+ # Export production data (read-only)
978
+ aqe data export-production --table users --limit 10000
979
+
980
+ # Anonymize sensitive fields
981
+ aqe data anonymize --input production-users.json --config anonymization-config.yaml
982
+
983
+ # Validate anonymization
984
+ aqe data validate-privacy --input anonymized-users.json --standard GDPR
985
+ ```
986
+
987
+ ## Success Metrics
988
+
989
+ ### Efficiency Metrics
990
+ - **Data Generation Speed**: 10,000 records/second
991
+ - **Time Saved**: 95% reduction (hours → seconds)
992
+ - **Manual Effort**: Eliminated (0 manual data creation)
993
+
994
+ ### Quality Metrics
995
+ - **Constraint Compliance**: 100% (all constraints satisfied)
996
+ - **Edge Case Coverage**: 95%+ edge cases included
997
+ - **Referential Integrity**: 100% (all FKs valid)
998
+ - **Anonymization Accuracy**: 100% PII removed
999
+
1000
+ ## Commands
1001
+
1002
+ ### Basic Commands
1003
+
1004
+ ```bash
1005
+ # Analyze schema
1006
+ aqe data analyze-schema --source <postgres|mysql|mongodb|openapi|graphql>
1007
+
1008
+ # Generate test data
1009
+ aqe data generate --schema <tables> --count <number>
1010
+
1011
+ # Seed database
1012
+ aqe data seed --database <connection> --file <data-file>
1013
+
1014
+ # Validate data
1015
+ aqe data validate --schema <schema-file> --data <data-file>
1016
+
1017
+ # Anonymize data
1018
+ aqe data anonymize --input <file> --config <anonymization-config>
1019
+ ```
1020
+
1021
+ ### Advanced Commands
1022
+
1023
+ ```bash
1024
+ # Generate from production patterns
1025
+ aqe data from-production --analyze-patterns --generate-similar
1026
+
1027
+ # Generate with relationships
1028
+ aqe data generate-related --tables users,orders,items --preserve-fk
1029
+
1030
+ # Export data version
1031
+ aqe data version-create --name "v2.5.0-seed" --tag production-like
1032
+
1033
+ # Load data version
1034
+ aqe data version-load --version <version-id>
1035
+
1036
+ # Compare data versions
1037
+ aqe data version-diff --baseline v1 --candidate v2
1038
+ ```
1039
+
1040
+ ### Specialized Commands
1041
+
1042
+ ```bash
1043
+ # Generate edge cases only
1044
+ aqe data edge-cases --schema <schema> --comprehensive
1045
+
1046
+ # Generate performance test data
1047
+ aqe data for-load-test --size large --realistic-distribution
1048
+
1049
+ # Validate privacy compliance
1050
+ aqe data validate-privacy --standard <GDPR|HIPAA|CCPA>
1051
+
1052
+ # Generate temporal data (time-series)
1053
+ aqe data time-series --start-date 2025-01-01 --end-date 2025-12-31
1054
+
1055
+ # Generate localized data
1056
+ aqe data localize --locales en,es,fr,de,ja
1057
+ ```
1058
+
1059
+ ---
1060
+
1061
+ **Agent Status**: Production Ready
1062
+ **Last Updated**: 2025-09-30
1063
+ **Version**: 1.0.0
1064
+ **Maintainer**: AQE Fleet Team