agentic-qe 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/.claude/agents/analysis/code-analyzer.md +209 -0
  2. package/.claude/agents/analysis/code-review/analyze-code-quality.md +180 -0
  3. package/.claude/agents/architecture/system-design/arch-system-design.md +156 -0
  4. package/.claude/agents/base-template-generator.md +42 -0
  5. package/.claude/agents/consensus/byzantine-coordinator.md +63 -0
  6. package/.claude/agents/consensus/crdt-synchronizer.md +997 -0
  7. package/.claude/agents/consensus/gossip-coordinator.md +63 -0
  8. package/.claude/agents/consensus/performance-benchmarker.md +851 -0
  9. package/.claude/agents/consensus/quorum-manager.md +823 -0
  10. package/.claude/agents/consensus/raft-manager.md +63 -0
  11. package/.claude/agents/consensus/security-manager.md +622 -0
  12. package/.claude/agents/core/coder.md +266 -0
  13. package/.claude/agents/core/planner.md +168 -0
  14. package/.claude/agents/core/researcher.md +190 -0
  15. package/.claude/agents/core/reviewer.md +326 -0
  16. package/.claude/agents/core/tester.md +319 -0
  17. package/.claude/agents/data/ml/data-ml-model.md +193 -0
  18. package/.claude/agents/development/backend/dev-backend-api.md +142 -0
  19. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +164 -0
  20. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -0
  21. package/.claude/agents/flow-nexus/app-store.md +88 -0
  22. package/.claude/agents/flow-nexus/authentication.md +69 -0
  23. package/.claude/agents/flow-nexus/challenges.md +81 -0
  24. package/.claude/agents/flow-nexus/neural-network.md +88 -0
  25. package/.claude/agents/flow-nexus/payments.md +83 -0
  26. package/.claude/agents/flow-nexus/sandbox.md +76 -0
  27. package/.claude/agents/flow-nexus/swarm.md +76 -0
  28. package/.claude/agents/flow-nexus/user-tools.md +96 -0
  29. package/.claude/agents/flow-nexus/workflow.md +84 -0
  30. package/.claude/agents/github/code-review-swarm.md +538 -0
  31. package/.claude/agents/github/github-modes.md +173 -0
  32. package/.claude/agents/github/issue-tracker.md +319 -0
  33. package/.claude/agents/github/multi-repo-swarm.md +553 -0
  34. package/.claude/agents/github/pr-manager.md +191 -0
  35. package/.claude/agents/github/project-board-sync.md +509 -0
  36. package/.claude/agents/github/release-manager.md +367 -0
  37. package/.claude/agents/github/release-swarm.md +583 -0
  38. package/.claude/agents/github/repo-architect.md +398 -0
  39. package/.claude/agents/github/swarm-issue.md +573 -0
  40. package/.claude/agents/github/swarm-pr.md +428 -0
  41. package/.claude/agents/github/sync-coordinator.md +452 -0
  42. package/.claude/agents/github/workflow-automation.md +635 -0
  43. package/.claude/agents/goal/code-goal-planner.md +446 -0
  44. package/.claude/agents/goal/goal-planner.md +168 -0
  45. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +130 -0
  46. package/.claude/agents/hive-mind/queen-coordinator.md +203 -0
  47. package/.claude/agents/hive-mind/scout-explorer.md +242 -0
  48. package/.claude/agents/hive-mind/swarm-memory-manager.md +193 -0
  49. package/.claude/agents/hive-mind/worker-specialist.md +217 -0
  50. package/.claude/agents/neural/safla-neural.md +74 -0
  51. package/.claude/agents/optimization/benchmark-suite.md +665 -0
  52. package/.claude/agents/optimization/load-balancer.md +431 -0
  53. package/.claude/agents/optimization/performance-monitor.md +672 -0
  54. package/.claude/agents/optimization/resource-allocator.md +674 -0
  55. package/.claude/agents/optimization/topology-optimizer.md +808 -0
  56. package/.claude/agents/qe-api-contract-validator.md +1088 -0
  57. package/.claude/agents/qe-chaos-engineer.md +736 -0
  58. package/.claude/agents/qe-coverage-analyzer.md +282 -0
  59. package/.claude/agents/qe-deployment-readiness.md +1109 -0
  60. package/.claude/agents/qe-flaky-test-hunter.md +1121 -0
  61. package/.claude/agents/qe-fleet-commander.md +641 -0
  62. package/.claude/agents/qe-performance-tester.md +354 -0
  63. package/.claude/agents/qe-production-intelligence.md +1162 -0
  64. package/.claude/agents/qe-quality-gate.md +294 -0
  65. package/.claude/agents/qe-regression-risk-analyzer.md +947 -0
  66. package/.claude/agents/qe-requirements-validator.md +691 -0
  67. package/.claude/agents/qe-security-scanner.md +430 -0
  68. package/.claude/agents/qe-test-data-architect.md +1007 -0
  69. package/.claude/agents/qe-test-executor.md +365 -0
  70. package/.claude/agents/qe-test-generator.md +332 -0
  71. package/.claude/agents/qe-visual-tester.md +754 -0
  72. package/.claude/agents/sparc/architecture.md +472 -0
  73. package/.claude/agents/sparc/pseudocode.md +318 -0
  74. package/.claude/agents/sparc/refinement.md +525 -0
  75. package/.claude/agents/sparc/specification.md +276 -0
  76. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +226 -0
  77. package/.claude/agents/swarm/adaptive-coordinator.md +396 -0
  78. package/.claude/agents/swarm/hierarchical-coordinator.md +327 -0
  79. package/.claude/agents/swarm/mesh-coordinator.md +392 -0
  80. package/.claude/agents/templates/automation-smart-agent.md +205 -0
  81. package/.claude/agents/templates/coordinator-swarm-init.md +105 -0
  82. package/.claude/agents/templates/github-pr-manager.md +177 -0
  83. package/.claude/agents/templates/implementer-sparc-coder.md +259 -0
  84. package/.claude/agents/templates/memory-coordinator.md +187 -0
  85. package/.claude/agents/templates/migration-plan.md +746 -0
  86. package/.claude/agents/templates/orchestrator-task.md +139 -0
  87. package/.claude/agents/templates/performance-analyzer.md +199 -0
  88. package/.claude/agents/templates/sparc-coordinator.md +183 -0
  89. package/.claude/agents/testing/unit/tdd-london-swarm.md +244 -0
  90. package/.claude/agents/testing/validation/production-validator.md +395 -0
  91. package/.claude/aqe-fleet.json +47 -0
  92. package/.claude/commands/README.md +106 -0
  93. package/.claude/commands/agents/README.md +10 -0
  94. package/.claude/commands/agents/agent-capabilities.md +21 -0
  95. package/.claude/commands/agents/agent-coordination.md +28 -0
  96. package/.claude/commands/agents/agent-spawning.md +28 -0
  97. package/.claude/commands/agents/agent-types.md +26 -0
  98. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
  99. package/.claude/commands/analysis/README.md +9 -0
  100. package/.claude/commands/analysis/bottleneck-detect.md +162 -0
  101. package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
  102. package/.claude/commands/analysis/performance-report.md +25 -0
  103. package/.claude/commands/analysis/token-efficiency.md +45 -0
  104. package/.claude/commands/analysis/token-usage.md +25 -0
  105. package/.claude/commands/aqe-analyze.md +344 -0
  106. package/.claude/commands/aqe-benchmark.md +466 -0
  107. package/.claude/commands/aqe-chaos.md +443 -0
  108. package/.claude/commands/aqe-execute.md +322 -0
  109. package/.claude/commands/aqe-fleet-status.md +431 -0
  110. package/.claude/commands/aqe-generate.md +301 -0
  111. package/.claude/commands/aqe-optimize.md +361 -0
  112. package/.claude/commands/aqe-report.md +411 -0
  113. package/.claude/commands/automation/README.md +9 -0
  114. package/.claude/commands/automation/auto-agent.md +122 -0
  115. package/.claude/commands/automation/self-healing.md +106 -0
  116. package/.claude/commands/automation/session-memory.md +90 -0
  117. package/.claude/commands/automation/smart-agents.md +73 -0
  118. package/.claude/commands/automation/smart-spawn.md +25 -0
  119. package/.claude/commands/automation/workflow-select.md +25 -0
  120. package/.claude/commands/coordination/README.md +9 -0
  121. package/.claude/commands/coordination/agent-spawn.md +25 -0
  122. package/.claude/commands/coordination/init.md +44 -0
  123. package/.claude/commands/coordination/orchestrate.md +43 -0
  124. package/.claude/commands/coordination/spawn.md +45 -0
  125. package/.claude/commands/coordination/swarm-init.md +85 -0
  126. package/.claude/commands/coordination/task-orchestrate.md +25 -0
  127. package/.claude/commands/flow-nexus/app-store.md +124 -0
  128. package/.claude/commands/flow-nexus/challenges.md +120 -0
  129. package/.claude/commands/flow-nexus/login-registration.md +65 -0
  130. package/.claude/commands/flow-nexus/neural-network.md +134 -0
  131. package/.claude/commands/flow-nexus/payments.md +116 -0
  132. package/.claude/commands/flow-nexus/sandbox.md +83 -0
  133. package/.claude/commands/flow-nexus/swarm.md +87 -0
  134. package/.claude/commands/flow-nexus/user-tools.md +152 -0
  135. package/.claude/commands/flow-nexus/workflow.md +115 -0
  136. package/.claude/commands/github/README.md +11 -0
  137. package/.claude/commands/github/code-review-swarm.md +514 -0
  138. package/.claude/commands/github/code-review.md +25 -0
  139. package/.claude/commands/github/github-modes.md +147 -0
  140. package/.claude/commands/github/github-swarm.md +121 -0
  141. package/.claude/commands/github/issue-tracker.md +292 -0
  142. package/.claude/commands/github/issue-triage.md +25 -0
  143. package/.claude/commands/github/multi-repo-swarm.md +519 -0
  144. package/.claude/commands/github/pr-enhance.md +26 -0
  145. package/.claude/commands/github/pr-manager.md +170 -0
  146. package/.claude/commands/github/project-board-sync.md +471 -0
  147. package/.claude/commands/github/release-manager.md +338 -0
  148. package/.claude/commands/github/release-swarm.md +544 -0
  149. package/.claude/commands/github/repo-analyze.md +25 -0
  150. package/.claude/commands/github/repo-architect.md +367 -0
  151. package/.claude/commands/github/swarm-issue.md +482 -0
  152. package/.claude/commands/github/swarm-pr.md +285 -0
  153. package/.claude/commands/github/sync-coordinator.md +301 -0
  154. package/.claude/commands/github/workflow-automation.md +442 -0
  155. package/.claude/commands/hive-mind/README.md +17 -0
  156. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
  157. package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
  158. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
  159. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
  160. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
  161. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
  162. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
  163. package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
  164. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
  165. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
  166. package/.claude/commands/hive-mind/hive-mind.md +27 -0
  167. package/.claude/commands/hooks/README.md +11 -0
  168. package/.claude/commands/hooks/overview.md +132 -0
  169. package/.claude/commands/hooks/post-edit.md +117 -0
  170. package/.claude/commands/hooks/post-task.md +112 -0
  171. package/.claude/commands/hooks/pre-edit.md +113 -0
  172. package/.claude/commands/hooks/pre-task.md +111 -0
  173. package/.claude/commands/hooks/session-end.md +118 -0
  174. package/.claude/commands/hooks/setup.md +103 -0
  175. package/.claude/commands/memory/README.md +9 -0
  176. package/.claude/commands/memory/memory-persist.md +25 -0
  177. package/.claude/commands/memory/memory-search.md +25 -0
  178. package/.claude/commands/memory/memory-usage.md +25 -0
  179. package/.claude/commands/memory/neural.md +47 -0
  180. package/.claude/commands/memory/usage.md +46 -0
  181. package/.claude/commands/monitoring/README.md +9 -0
  182. package/.claude/commands/monitoring/agent-metrics.md +25 -0
  183. package/.claude/commands/monitoring/agents.md +44 -0
  184. package/.claude/commands/monitoring/real-time-view.md +25 -0
  185. package/.claude/commands/monitoring/status.md +46 -0
  186. package/.claude/commands/monitoring/swarm-monitor.md +25 -0
  187. package/.claude/commands/optimization/README.md +9 -0
  188. package/.claude/commands/optimization/auto-topology.md +62 -0
  189. package/.claude/commands/optimization/cache-manage.md +25 -0
  190. package/.claude/commands/optimization/parallel-execute.md +25 -0
  191. package/.claude/commands/optimization/parallel-execution.md +50 -0
  192. package/.claude/commands/optimization/topology-optimize.md +25 -0
  193. package/.claude/commands/pair/commands.md +546 -0
  194. package/.claude/commands/pair/config.md +510 -0
  195. package/.claude/commands/pair/examples.md +512 -0
  196. package/.claude/commands/pair/modes.md +348 -0
  197. package/.claude/commands/pair/session.md +407 -0
  198. package/.claude/commands/pair/start.md +209 -0
  199. package/.claude/commands/sparc/analyzer.md +52 -0
  200. package/.claude/commands/sparc/architect.md +53 -0
  201. package/.claude/commands/sparc/batch-executor.md +54 -0
  202. package/.claude/commands/sparc/coder.md +54 -0
  203. package/.claude/commands/sparc/debugger.md +54 -0
  204. package/.claude/commands/sparc/designer.md +53 -0
  205. package/.claude/commands/sparc/documenter.md +54 -0
  206. package/.claude/commands/sparc/innovator.md +54 -0
  207. package/.claude/commands/sparc/memory-manager.md +54 -0
  208. package/.claude/commands/sparc/optimizer.md +54 -0
  209. package/.claude/commands/sparc/orchestrator.md +132 -0
  210. package/.claude/commands/sparc/researcher.md +54 -0
  211. package/.claude/commands/sparc/reviewer.md +54 -0
  212. package/.claude/commands/sparc/sparc-modes.md +174 -0
  213. package/.claude/commands/sparc/swarm-coordinator.md +54 -0
  214. package/.claude/commands/sparc/tdd.md +54 -0
  215. package/.claude/commands/sparc/tester.md +54 -0
  216. package/.claude/commands/sparc/workflow-manager.md +54 -0
  217. package/.claude/commands/stream-chain/pipeline.md +121 -0
  218. package/.claude/commands/stream-chain/run.md +70 -0
  219. package/.claude/commands/swarm/README.md +15 -0
  220. package/.claude/commands/swarm/analysis.md +95 -0
  221. package/.claude/commands/swarm/development.md +96 -0
  222. package/.claude/commands/swarm/examples.md +168 -0
  223. package/.claude/commands/swarm/maintenance.md +102 -0
  224. package/.claude/commands/swarm/optimization.md +117 -0
  225. package/.claude/commands/swarm/research.md +136 -0
  226. package/.claude/commands/swarm/swarm-analysis.md +8 -0
  227. package/.claude/commands/swarm/swarm-background.md +8 -0
  228. package/.claude/commands/swarm/swarm-init.md +19 -0
  229. package/.claude/commands/swarm/swarm-modes.md +8 -0
  230. package/.claude/commands/swarm/swarm-monitor.md +8 -0
  231. package/.claude/commands/swarm/swarm-spawn.md +19 -0
  232. package/.claude/commands/swarm/swarm-status.md +8 -0
  233. package/.claude/commands/swarm/swarm-strategies.md +8 -0
  234. package/.claude/commands/swarm/swarm.md +27 -0
  235. package/.claude/commands/swarm/testing.md +131 -0
  236. package/.claude/commands/training/README.md +9 -0
  237. package/.claude/commands/training/model-update.md +25 -0
  238. package/.claude/commands/training/neural-patterns.md +74 -0
  239. package/.claude/commands/training/neural-train.md +25 -0
  240. package/.claude/commands/training/pattern-learn.md +25 -0
  241. package/.claude/commands/training/specialization.md +63 -0
  242. package/.claude/commands/truth/start.md +143 -0
  243. package/.claude/commands/verify/check.md +50 -0
  244. package/.claude/commands/verify/start.md +128 -0
  245. package/.claude/commands/workflows/README.md +9 -0
  246. package/.claude/commands/workflows/development.md +78 -0
  247. package/.claude/commands/workflows/research.md +63 -0
  248. package/.claude/commands/workflows/workflow-create.md +25 -0
  249. package/.claude/commands/workflows/workflow-execute.md +25 -0
  250. package/.claude/commands/workflows/workflow-export.md +25 -0
  251. package/.claude/helpers/checkpoint-manager.sh +251 -0
  252. package/.claude/helpers/github-safe.js +106 -0
  253. package/.claude/helpers/github-setup.sh +28 -0
  254. package/.claude/helpers/quick-start.sh +19 -0
  255. package/.claude/helpers/setup-mcp.sh +18 -0
  256. package/.claude/helpers/standard-checkpoint-hooks.sh +179 -0
  257. package/.claude/settings.json +114 -0
  258. package/.claude/settings.local.json +10 -0
  259. package/CONTRIBUTING.md +897 -0
  260. package/LICENSE +21 -0
  261. package/README.md +632 -0
  262. package/bin/aqe +959 -0
  263. package/config/fleet.yaml +50 -0
  264. package/dist/agents/ApiContractValidatorAgent.d.ts +222 -0
  265. package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -0
  266. package/dist/agents/ApiContractValidatorAgent.js +787 -0
  267. package/dist/agents/ApiContractValidatorAgent.js.map +1 -0
  268. package/dist/agents/BaseAgent.d.ts +147 -0
  269. package/dist/agents/BaseAgent.d.ts.map +1 -0
  270. package/dist/agents/BaseAgent.js +374 -0
  271. package/dist/agents/BaseAgent.js.map +1 -0
  272. package/dist/agents/CoverageAnalyzerAgent.d.ts +103 -0
  273. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -0
  274. package/dist/agents/CoverageAnalyzerAgent.js +466 -0
  275. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -0
  276. package/dist/agents/DeploymentReadinessAgent.d.ts +244 -0
  277. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -0
  278. package/dist/agents/DeploymentReadinessAgent.js +974 -0
  279. package/dist/agents/DeploymentReadinessAgent.js.map +1 -0
  280. package/dist/agents/FlakyTestHunterAgent.d.ts +172 -0
  281. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -0
  282. package/dist/agents/FlakyTestHunterAgent.js +867 -0
  283. package/dist/agents/FlakyTestHunterAgent.js.map +1 -0
  284. package/dist/agents/FleetCommanderAgent.d.ts +154 -0
  285. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -0
  286. package/dist/agents/FleetCommanderAgent.js +924 -0
  287. package/dist/agents/FleetCommanderAgent.js.map +1 -0
  288. package/dist/agents/PerformanceTesterAgent.d.ts +194 -0
  289. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -0
  290. package/dist/agents/PerformanceTesterAgent.js +972 -0
  291. package/dist/agents/PerformanceTesterAgent.js.map +1 -0
  292. package/dist/agents/ProductionIntelligenceAgent.d.ts +224 -0
  293. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -0
  294. package/dist/agents/ProductionIntelligenceAgent.js +856 -0
  295. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -0
  296. package/dist/agents/QualityAnalyzerAgent.d.ts +67 -0
  297. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -0
  298. package/dist/agents/QualityAnalyzerAgent.js +453 -0
  299. package/dist/agents/QualityAnalyzerAgent.js.map +1 -0
  300. package/dist/agents/QualityGateAgent.d.ts +104 -0
  301. package/dist/agents/QualityGateAgent.d.ts.map +1 -0
  302. package/dist/agents/QualityGateAgent.js +522 -0
  303. package/dist/agents/QualityGateAgent.js.map +1 -0
  304. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +274 -0
  305. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -0
  306. package/dist/agents/RegressionRiskAnalyzerAgent.js +1076 -0
  307. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -0
  308. package/dist/agents/RequirementsValidatorAgent.d.ts +195 -0
  309. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -0
  310. package/dist/agents/RequirementsValidatorAgent.js +992 -0
  311. package/dist/agents/RequirementsValidatorAgent.js.map +1 -0
  312. package/dist/agents/SecurityScannerAgent.d.ts +126 -0
  313. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -0
  314. package/dist/agents/SecurityScannerAgent.js +695 -0
  315. package/dist/agents/SecurityScannerAgent.js.map +1 -0
  316. package/dist/agents/TestDataArchitectAgent.d.ts +452 -0
  317. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -0
  318. package/dist/agents/TestDataArchitectAgent.js +1346 -0
  319. package/dist/agents/TestDataArchitectAgent.js.map +1 -0
  320. package/dist/agents/TestExecutorAgent.d.ts +101 -0
  321. package/dist/agents/TestExecutorAgent.d.ts.map +1 -0
  322. package/dist/agents/TestExecutorAgent.js +730 -0
  323. package/dist/agents/TestExecutorAgent.js.map +1 -0
  324. package/dist/agents/TestGeneratorAgent.d.ts +109 -0
  325. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -0
  326. package/dist/agents/TestGeneratorAgent.js +450 -0
  327. package/dist/agents/TestGeneratorAgent.js.map +1 -0
  328. package/dist/agents/index.d.ts +51 -0
  329. package/dist/agents/index.d.ts.map +1 -0
  330. package/dist/agents/index.js +738 -0
  331. package/dist/agents/index.js.map +1 -0
  332. package/dist/cli/commands/analyze.d.ts +32 -0
  333. package/dist/cli/commands/analyze.d.ts.map +1 -0
  334. package/dist/cli/commands/analyze.js +764 -0
  335. package/dist/cli/commands/analyze.js.map +1 -0
  336. package/dist/cli/commands/fleet.d.ts +36 -0
  337. package/dist/cli/commands/fleet.d.ts.map +1 -0
  338. package/dist/cli/commands/fleet.js +745 -0
  339. package/dist/cli/commands/fleet.js.map +1 -0
  340. package/dist/cli/commands/generate.d.ts +24 -0
  341. package/dist/cli/commands/generate.d.ts.map +1 -0
  342. package/dist/cli/commands/generate.js +424 -0
  343. package/dist/cli/commands/generate.js.map +1 -0
  344. package/dist/cli/commands/init.d.ts +17 -0
  345. package/dist/cli/commands/init.d.ts.map +1 -0
  346. package/dist/cli/commands/init.js +570 -0
  347. package/dist/cli/commands/init.js.map +1 -0
  348. package/dist/cli/commands/run.d.ts +25 -0
  349. package/dist/cli/commands/run.d.ts.map +1 -0
  350. package/dist/cli/commands/run.js +558 -0
  351. package/dist/cli/commands/run.js.map +1 -0
  352. package/dist/cli/index-spec.d.ts +3 -0
  353. package/dist/cli/index-spec.d.ts.map +1 -0
  354. package/dist/cli/index-spec.js +154 -0
  355. package/dist/cli/index-spec.js.map +1 -0
  356. package/dist/cli/index-working.d.ts +7 -0
  357. package/dist/cli/index-working.d.ts.map +1 -0
  358. package/dist/cli/index-working.js +470 -0
  359. package/dist/cli/index-working.js.map +1 -0
  360. package/dist/cli/index.d.ts +9 -0
  361. package/dist/cli/index.d.ts.map +1 -0
  362. package/dist/cli/index.js +174 -0
  363. package/dist/cli/index.js.map +1 -0
  364. package/dist/core/Agent.d.ts +189 -0
  365. package/dist/core/Agent.d.ts.map +1 -0
  366. package/dist/core/Agent.js +288 -0
  367. package/dist/core/Agent.js.map +1 -0
  368. package/dist/core/EventBus.d.ts +40 -0
  369. package/dist/core/EventBus.d.ts.map +1 -0
  370. package/dist/core/EventBus.js +114 -0
  371. package/dist/core/EventBus.js.map +1 -0
  372. package/dist/core/FleetManager.d.ts +219 -0
  373. package/dist/core/FleetManager.d.ts.map +1 -0
  374. package/dist/core/FleetManager.js +354 -0
  375. package/dist/core/FleetManager.js.map +1 -0
  376. package/dist/core/MemoryManager.d.ts +119 -0
  377. package/dist/core/MemoryManager.d.ts.map +1 -0
  378. package/dist/core/MemoryManager.js +460 -0
  379. package/dist/core/MemoryManager.js.map +1 -0
  380. package/dist/core/Task.d.ts +264 -0
  381. package/dist/core/Task.d.ts.map +1 -0
  382. package/dist/core/Task.js +397 -0
  383. package/dist/core/Task.js.map +1 -0
  384. package/dist/core/coverage-analyzer.d.ts +50 -0
  385. package/dist/core/coverage-analyzer.d.ts.map +1 -0
  386. package/dist/core/coverage-analyzer.js +146 -0
  387. package/dist/core/coverage-analyzer.js.map +1 -0
  388. package/dist/core/index.d.ts +14 -0
  389. package/dist/core/index.d.ts.map +1 -0
  390. package/dist/core/index.js +20 -0
  391. package/dist/core/index.js.map +1 -0
  392. package/dist/core/quality-gate.d.ts +81 -0
  393. package/dist/core/quality-gate.d.ts.map +1 -0
  394. package/dist/core/quality-gate.js +254 -0
  395. package/dist/core/quality-gate.js.map +1 -0
  396. package/dist/coverage/coverage-collector.d.ts +62 -0
  397. package/dist/coverage/coverage-collector.d.ts.map +1 -0
  398. package/dist/coverage/coverage-collector.js +61 -0
  399. package/dist/coverage/coverage-collector.js.map +1 -0
  400. package/dist/coverage/coverage-reporter.d.ts +42 -0
  401. package/dist/coverage/coverage-reporter.d.ts.map +1 -0
  402. package/dist/coverage/coverage-reporter.js +53 -0
  403. package/dist/coverage/coverage-reporter.js.map +1 -0
  404. package/dist/index.d.ts +89 -0
  405. package/dist/index.d.ts.map +1 -0
  406. package/dist/index.js +142 -0
  407. package/dist/index.js.map +1 -0
  408. package/dist/mcp/handlers/agent-spawn.d.ts +72 -0
  409. package/dist/mcp/handlers/agent-spawn.d.ts.map +1 -0
  410. package/dist/mcp/handlers/agent-spawn.js +255 -0
  411. package/dist/mcp/handlers/agent-spawn.js.map +1 -0
  412. package/dist/mcp/handlers/base-handler.d.ts +53 -0
  413. package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
  414. package/dist/mcp/handlers/base-handler.js +77 -0
  415. package/dist/mcp/handlers/base-handler.js.map +1 -0
  416. package/dist/mcp/handlers/fleet-init.d.ts +55 -0
  417. package/dist/mcp/handlers/fleet-init.d.ts.map +1 -0
  418. package/dist/mcp/handlers/fleet-init.js +149 -0
  419. package/dist/mcp/handlers/fleet-init.js.map +1 -0
  420. package/dist/mcp/handlers/fleet-status.d.ts +103 -0
  421. package/dist/mcp/handlers/fleet-status.d.ts.map +1 -0
  422. package/dist/mcp/handlers/fleet-status.js +244 -0
  423. package/dist/mcp/handlers/fleet-status.js.map +1 -0
  424. package/dist/mcp/handlers/optimize-tests.d.ts +219 -0
  425. package/dist/mcp/handlers/optimize-tests.d.ts.map +1 -0
  426. package/dist/mcp/handlers/optimize-tests.js +532 -0
  427. package/dist/mcp/handlers/optimize-tests.js.map +1 -0
  428. package/dist/mcp/handlers/predict-defects.d.ts +194 -0
  429. package/dist/mcp/handlers/predict-defects.d.ts.map +1 -0
  430. package/dist/mcp/handlers/predict-defects.js +721 -0
  431. package/dist/mcp/handlers/predict-defects.js.map +1 -0
  432. package/dist/mcp/handlers/quality-analyze.d.ts +273 -0
  433. package/dist/mcp/handlers/quality-analyze.d.ts.map +1 -0
  434. package/dist/mcp/handlers/quality-analyze.js +702 -0
  435. package/dist/mcp/handlers/quality-analyze.js.map +1 -0
  436. package/dist/mcp/handlers/task-orchestrate.d.ts +152 -0
  437. package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -0
  438. package/dist/mcp/handlers/task-orchestrate.js +629 -0
  439. package/dist/mcp/handlers/task-orchestrate.js.map +1 -0
  440. package/dist/mcp/handlers/test-execute.d.ts +132 -0
  441. package/dist/mcp/handlers/test-execute.d.ts.map +1 -0
  442. package/dist/mcp/handlers/test-execute.js +436 -0
  443. package/dist/mcp/handlers/test-execute.js.map +1 -0
  444. package/dist/mcp/handlers/test-generate.d.ts +107 -0
  445. package/dist/mcp/handlers/test-generate.d.ts.map +1 -0
  446. package/dist/mcp/handlers/test-generate.js +437 -0
  447. package/dist/mcp/handlers/test-generate.js.map +1 -0
  448. package/dist/mcp/server.d.ts +99 -0
  449. package/dist/mcp/server.d.ts.map +1 -0
  450. package/dist/mcp/server.js +214 -0
  451. package/dist/mcp/server.js.map +1 -0
  452. package/dist/mcp/services/AgentRegistry.d.ts +191 -0
  453. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -0
  454. package/dist/mcp/services/AgentRegistry.js +403 -0
  455. package/dist/mcp/services/AgentRegistry.js.map +1 -0
  456. package/dist/mcp/services/HookExecutor.d.ts +165 -0
  457. package/dist/mcp/services/HookExecutor.d.ts.map +1 -0
  458. package/dist/mcp/services/HookExecutor.js +327 -0
  459. package/dist/mcp/services/HookExecutor.js.map +1 -0
  460. package/dist/mcp/start.d.ts +7 -0
  461. package/dist/mcp/start.d.ts.map +1 -0
  462. package/dist/mcp/start.js +35 -0
  463. package/dist/mcp/start.js.map +1 -0
  464. package/dist/mcp/tools.d.ts +81 -0
  465. package/dist/mcp/tools.d.ts.map +1 -0
  466. package/dist/mcp/tools.js +471 -0
  467. package/dist/mcp/tools.js.map +1 -0
  468. package/dist/optimization/sublinear-solver.d.ts +72 -0
  469. package/dist/optimization/sublinear-solver.d.ts.map +1 -0
  470. package/dist/optimization/sublinear-solver.js +263 -0
  471. package/dist/optimization/sublinear-solver.js.map +1 -0
  472. package/dist/scripts/verifyComplexity.d.ts +8 -0
  473. package/dist/scripts/verifyComplexity.d.ts.map +1 -0
  474. package/dist/scripts/verifyComplexity.js +56 -0
  475. package/dist/scripts/verifyComplexity.js.map +1 -0
  476. package/dist/types/api-contract.types.d.ts +273 -0
  477. package/dist/types/api-contract.types.d.ts.map +1 -0
  478. package/dist/types/api-contract.types.js +18 -0
  479. package/dist/types/api-contract.types.js.map +1 -0
  480. package/dist/types/errors.d.ts +104 -0
  481. package/dist/types/errors.d.ts.map +1 -0
  482. package/dist/types/errors.js +226 -0
  483. package/dist/types/errors.js.map +1 -0
  484. package/dist/types/events.d.ts +101 -0
  485. package/dist/types/events.d.ts.map +1 -0
  486. package/dist/types/events.js +6 -0
  487. package/dist/types/events.js.map +1 -0
  488. package/dist/types/index.d.ts +570 -0
  489. package/dist/types/index.d.ts.map +1 -0
  490. package/dist/types/index.js +131 -0
  491. package/dist/types/index.js.map +1 -0
  492. package/dist/utils/Config.d.ts +128 -0
  493. package/dist/utils/Config.d.ts.map +1 -0
  494. package/dist/utils/Config.js +232 -0
  495. package/dist/utils/Config.js.map +1 -0
  496. package/dist/utils/Database.d.ts +112 -0
  497. package/dist/utils/Database.d.ts.map +1 -0
  498. package/dist/utils/Database.js +352 -0
  499. package/dist/utils/Database.js.map +1 -0
  500. package/dist/utils/Logger.d.ts +58 -0
  501. package/dist/utils/Logger.d.ts.map +1 -0
  502. package/dist/utils/Logger.js +125 -0
  503. package/dist/utils/Logger.js.map +1 -0
  504. package/dist/utils/index.d.ts +9 -0
  505. package/dist/utils/index.d.ts.map +1 -0
  506. package/dist/utils/index.js +14 -0
  507. package/dist/utils/index.js.map +1 -0
  508. package/dist/utils/sublinear/coverageOptimizer.d.ts +84 -0
  509. package/dist/utils/sublinear/coverageOptimizer.d.ts.map +1 -0
  510. package/dist/utils/sublinear/coverageOptimizer.js +415 -0
  511. package/dist/utils/sublinear/coverageOptimizer.js.map +1 -0
  512. package/dist/utils/sublinear/index.d.ts +50 -0
  513. package/dist/utils/sublinear/index.d.ts.map +1 -0
  514. package/dist/utils/sublinear/index.js +390 -0
  515. package/dist/utils/sublinear/index.js.map +1 -0
  516. package/dist/utils/sublinear/matrixSolver.d.ts +132 -0
  517. package/dist/utils/sublinear/matrixSolver.d.ts.map +1 -0
  518. package/dist/utils/sublinear/matrixSolver.js +642 -0
  519. package/dist/utils/sublinear/matrixSolver.js.map +1 -0
  520. package/dist/utils/sublinear/temporalPredictor.d.ts +195 -0
  521. package/dist/utils/sublinear/temporalPredictor.d.ts.map +1 -0
  522. package/dist/utils/sublinear/temporalPredictor.js +474 -0
  523. package/dist/utils/sublinear/temporalPredictor.js.map +1 -0
  524. package/dist/utils/sublinear/testSelector.d.ts +81 -0
  525. package/dist/utils/sublinear/testSelector.d.ts.map +1 -0
  526. package/dist/utils/sublinear/testSelector.js +303 -0
  527. package/dist/utils/sublinear/testSelector.js.map +1 -0
  528. package/package.json +131 -0
@@ -0,0 +1,764 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.AnalyzeCommand = void 0;
30
+ const chalk_1 = __importDefault(require("chalk"));
31
+ const ora_1 = __importDefault(require("ora"));
32
+ const fs = __importStar(require("fs-extra"));
33
+ const path = __importStar(require("path"));
34
+ class AnalyzeCommand {
35
+ static async execute(target, options) {
36
+ console.log(chalk_1.default.blue.bold('\n📊 Analyzing Test Results and Quality Metrics\n'));
37
+ try {
38
+ const spinner = (0, ora_1.default)('Initializing analysis...').start();
39
+ // Validate inputs
40
+ await this.validateInputs(target, options);
41
+ spinner.text = 'Loading test data...';
42
+ // Load test execution data
43
+ const testData = await this.loadTestData();
44
+ spinner.text = 'Performing analysis...';
45
+ // Perform specific analysis based on target
46
+ let analysisResults;
47
+ switch (target) {
48
+ case 'coverage':
49
+ analysisResults = await this.analyzeCoverage(testData, options);
50
+ break;
51
+ case 'quality':
52
+ analysisResults = await this.analyzeQuality(testData, options);
53
+ break;
54
+ case 'trends':
55
+ analysisResults = await this.analyzeTrends(testData, options);
56
+ break;
57
+ case 'gaps':
58
+ analysisResults = await this.analyzeGaps(testData, options);
59
+ break;
60
+ default:
61
+ analysisResults = await this.analyzeAll(testData, options);
62
+ }
63
+ spinner.text = 'Generating recommendations...';
64
+ // Generate recommendations
65
+ const recommendations = await this.generateRecommendations(analysisResults, options);
66
+ spinner.text = 'Creating reports...';
67
+ // Generate reports
68
+ await this.generateReports(analysisResults, recommendations, options);
69
+ spinner.succeed(chalk_1.default.green('Analysis completed successfully!'));
70
+ // Display analysis summary
71
+ this.displayAnalysisSummary(analysisResults, recommendations, options);
72
+ // Store analysis results in coordination
73
+ await this.storeAnalysisResults(analysisResults, recommendations);
74
+ }
75
+ catch (error) {
76
+ console.error(chalk_1.default.red('❌ Analysis failed:'), error.message);
77
+ if (options.verbose) {
78
+ console.error(chalk_1.default.gray(error.stack));
79
+ }
80
+ process.exit(1);
81
+ }
82
+ }
83
+ static async validateInputs(target, options) {
84
+ const validTargets = ['coverage', 'quality', 'trends', 'gaps'];
85
+ if (!validTargets.includes(target)) {
86
+ throw new Error(`Invalid target '${target}'. Must be one of: ${validTargets.join(', ')}`);
87
+ }
88
+ const validFormats = ['json', 'html', 'csv'];
89
+ if (!validFormats.includes(options.format)) {
90
+ throw new Error(`Invalid format '${options.format}'. Must be one of: ${validFormats.join(', ')}`);
91
+ }
92
+ const threshold = parseInt(options.threshold);
93
+ if (threshold < 0 || threshold > 100) {
94
+ throw new Error('Threshold must be between 0 and 100');
95
+ }
96
+ // Check if reports directory exists
97
+ if (!await fs.pathExists('.agentic-qe/reports')) {
98
+ throw new Error('No test execution reports found. Run tests first: agentic-qe run tests');
99
+ }
100
+ }
101
+ static async loadTestData() {
102
+ const reportsDir = '.agentic-qe/reports';
103
+ const reportFiles = await fs.readdir(reportsDir);
104
+ const executionFiles = reportFiles
105
+ .filter(file => file.startsWith('execution-') && file.endsWith('.json'))
106
+ .sort()
107
+ .reverse(); // Most recent first
108
+ if (executionFiles.length === 0) {
109
+ throw new Error('No test execution reports found');
110
+ }
111
+ const testData = {
112
+ latest: null,
113
+ history: [],
114
+ coverage: [],
115
+ quality: []
116
+ };
117
+ // Load latest execution
118
+ const latestFile = path.join(reportsDir, executionFiles[0]);
119
+ testData.latest = await fs.readJson(latestFile);
120
+ // Load historical data (up to 30 most recent)
121
+ for (const file of executionFiles.slice(0, 30)) {
122
+ const filePath = path.join(reportsDir, file);
123
+ const data = await fs.readJson(filePath);
124
+ testData.history.push(data);
125
+ }
126
+ // Load coverage data if available
127
+ const coverageFiles = reportFiles.filter(file => file.startsWith('coverage-'));
128
+ for (const file of coverageFiles.slice(0, 10)) {
129
+ const filePath = path.join(reportsDir, file);
130
+ if (await fs.pathExists(filePath)) {
131
+ const coverage = await fs.readJson(filePath);
132
+ testData.coverage.push(coverage);
133
+ }
134
+ }
135
+ return testData;
136
+ }
137
+ static async analyzeCoverage(testData, options) {
138
+ const analysis = {
139
+ type: 'coverage',
140
+ timestamp: new Date().toISOString(),
141
+ current: {
142
+ overall: testData.latest?.coverage?.overall || 0,
143
+ details: testData.latest?.coverage?.details || {}
144
+ },
145
+ trends: {
146
+ direction: 'stable',
147
+ change: 0,
148
+ period: options.period
149
+ },
150
+ gaps: [],
151
+ recommendations: []
152
+ };
153
+ // Calculate coverage trends
154
+ if (testData.history.length > 1) {
155
+ const recentCoverage = testData.history.slice(0, 5).map((h) => h.coverage?.overall || 0);
156
+ const avgRecent = recentCoverage.reduce((sum, c) => sum + c, 0) / recentCoverage.length;
157
+ const olderCoverage = testData.history.slice(5, 10).map((h) => h.coverage?.overall || 0);
158
+ const avgOlder = olderCoverage.length > 0
159
+ ? olderCoverage.reduce((sum, c) => sum + c, 0) / olderCoverage.length
160
+ : avgRecent;
161
+ analysis.trends.change = avgRecent - avgOlder;
162
+ analysis.trends.direction = analysis.trends.change > 1 ? 'improving' :
163
+ analysis.trends.change < -1 ? 'declining' : 'stable';
164
+ }
165
+ // Identify coverage gaps if requested
166
+ if (options.gaps) {
167
+ analysis.gaps = await this.identifyCoverageGaps(testData);
168
+ }
169
+ // Add threshold-based alerts
170
+ const threshold = parseInt(options.threshold);
171
+ if (analysis.current.overall < threshold) {
172
+ analysis.recommendations.push({
173
+ type: 'coverage_below_threshold',
174
+ priority: 'high',
175
+ message: `Coverage ${analysis.current.overall.toFixed(1)}% is below threshold ${threshold}%`,
176
+ actions: ['Generate additional tests', 'Review uncovered code paths']
177
+ });
178
+ }
179
+ return analysis;
180
+ }
181
+ static async analyzeQuality(testData, options) {
182
+ const analysis = {
183
+ type: 'quality',
184
+ timestamp: new Date().toISOString(),
185
+ metrics: {
186
+ testReliability: 0,
187
+ passRate: 0,
188
+ flakyTests: 0,
189
+ testMaintainability: 0,
190
+ qualityScore: 0
191
+ },
192
+ trends: {
193
+ direction: 'stable',
194
+ period: options.period,
195
+ changes: {}
196
+ },
197
+ issues: [],
198
+ recommendations: []
199
+ };
200
+ // Calculate quality metrics from latest data
201
+ const latest = testData.latest;
202
+ if (latest?.summary) {
203
+ analysis.metrics.passRate = latest.summary.total > 0
204
+ ? (latest.summary.passed / latest.summary.total) * 100
205
+ : 0;
206
+ // Analyze test reliability over time
207
+ const reliabilityData = testData.history.slice(0, 10).map((h) => ({
208
+ total: h.summary?.total || 0,
209
+ passed: h.summary?.passed || 0,
210
+ failed: h.summary?.failed || 0
211
+ }));
212
+ analysis.metrics.testReliability = this.calculateTestReliability(reliabilityData);
213
+ analysis.metrics.flakyTests = this.identifyFlakyTests(reliabilityData);
214
+ }
215
+ // Calculate composite quality score
216
+ analysis.metrics.qualityScore = this.calculateQualityScore(analysis.metrics);
217
+ // Identify quality issues
218
+ analysis.issues = await this.identifyQualityIssues(testData, analysis.metrics);
219
+ return analysis;
220
+ }
221
+ static async analyzeTrends(testData, options) {
222
+ const analysis = {
223
+ type: 'trends',
224
+ timestamp: new Date().toISOString(),
225
+ period: options.period,
226
+ trends: {
227
+ coverage: [],
228
+ passRate: [],
229
+ testCount: [],
230
+ executionTime: []
231
+ },
232
+ insights: [],
233
+ predictions: []
234
+ };
235
+ // Analyze trends over time
236
+ const historicalData = testData.history.slice(0, 20); // Last 20 executions
237
+ for (const data of historicalData) {
238
+ const timestamp = data.timestamp;
239
+ analysis.trends.coverage.push({
240
+ timestamp,
241
+ value: data.coverage?.overall || 0
242
+ });
243
+ analysis.trends.passRate.push({
244
+ timestamp,
245
+ value: data.summary?.total > 0 ? (data.summary.passed / data.summary.total) * 100 : 0
246
+ });
247
+ analysis.trends.testCount.push({
248
+ timestamp,
249
+ value: data.summary?.total || 0
250
+ });
251
+ analysis.trends.executionTime.push({
252
+ timestamp,
253
+ value: data.summary?.duration || 0
254
+ });
255
+ }
256
+ // Generate insights
257
+ analysis.insights = this.generateTrendInsights(analysis.trends);
258
+ // Simple predictions based on trends
259
+ analysis.predictions = this.generatePredictions(analysis.trends);
260
+ return analysis;
261
+ }
262
+ static async analyzeGaps(testData, options) {
263
+ const analysis = {
264
+ type: 'gaps',
265
+ timestamp: new Date().toISOString(),
266
+ coverageGaps: [],
267
+ testingGaps: [],
268
+ qualityGaps: [],
269
+ recommendations: []
270
+ };
271
+ // Identify coverage gaps
272
+ analysis.coverageGaps = await this.identifyCoverageGaps(testData);
273
+ // Identify testing gaps
274
+ analysis.testingGaps = await this.identifyTestingGaps();
275
+ // Identify quality gaps
276
+ analysis.qualityGaps = await this.identifyQualityGaps(testData);
277
+ return analysis;
278
+ }
279
+ static async analyzeAll(testData, options) {
280
+ const coverage = await this.analyzeCoverage(testData, options);
281
+ const quality = await this.analyzeQuality(testData, options);
282
+ const trends = await this.analyzeTrends(testData, options);
283
+ const gaps = await this.analyzeGaps(testData, options);
284
+ return {
285
+ type: 'comprehensive',
286
+ timestamp: new Date().toISOString(),
287
+ coverage,
288
+ quality,
289
+ trends,
290
+ gaps,
291
+ summary: {
292
+ overallScore: this.calculateOverallScore([coverage, quality, trends, gaps]),
293
+ criticalIssues: this.identifyCriticalIssues([coverage, quality, trends, gaps]),
294
+ topRecommendations: this.prioritizeRecommendations([coverage, quality, trends, gaps])
295
+ }
296
+ };
297
+ }
298
+ static async identifyCoverageGaps(testData) {
299
+ const gaps = [];
300
+ // Check for missing test types
301
+ const testTypes = ['unit', 'integration', 'e2e', 'performance', 'security'];
302
+ const testDirs = await Promise.all(testTypes.map(async (type) => ({
303
+ type,
304
+ exists: await fs.pathExists(`tests/${type}`)
305
+ })));
306
+ for (const { type, exists } of testDirs) {
307
+ if (!exists) {
308
+ gaps.push({
309
+ type: 'missing_test_type',
310
+ category: type,
311
+ severity: type === 'unit' ? 'high' : 'medium',
312
+ description: `No ${type} tests found`,
313
+ suggestion: `Create ${type} test directory and generate tests`
314
+ });
315
+ }
316
+ }
317
+ // Check coverage by file (if coverage details available)
318
+ const coverageDetails = testData.latest?.coverage?.details || {};
319
+ Object.entries(coverageDetails).forEach(([file, coverage]) => {
320
+ if (coverage < 80) {
321
+ gaps.push({
322
+ type: 'low_file_coverage',
323
+ file,
324
+ coverage,
325
+ severity: coverage < 50 ? 'high' : 'medium',
326
+ description: `Low coverage in ${file}: ${coverage}%`,
327
+ suggestion: 'Add more comprehensive tests for this file'
328
+ });
329
+ }
330
+ });
331
+ return gaps;
332
+ }
333
+ static async identifyTestingGaps() {
334
+ const gaps = [];
335
+ // Check for test configuration files
336
+ const configFiles = [
337
+ { file: 'jest.config.js', type: 'Jest configuration' },
338
+ { file: '.agentic-qe/config/jest.config.json', type: 'QE Jest configuration' },
339
+ { file: 'cypress.json', type: 'Cypress configuration' },
340
+ { file: 'playwright.config.js', type: 'Playwright configuration' }
341
+ ];
342
+ for (const { file, type } of configFiles) {
343
+ if (!await fs.pathExists(file)) {
344
+ gaps.push({
345
+ type: 'missing_config',
346
+ file,
347
+ severity: 'low',
348
+ description: `Missing ${type}`,
349
+ suggestion: `Consider adding ${file} for better test configuration`
350
+ });
351
+ }
352
+ }
353
+ return gaps;
354
+ }
355
+ static async identifyQualityGaps(testData) {
356
+ const gaps = [];
357
+ const latest = testData.latest;
358
+ if (!latest)
359
+ return gaps;
360
+ // Check for quality issues
361
+ if (latest.summary?.failed > 0) {
362
+ gaps.push({
363
+ type: 'failing_tests',
364
+ count: latest.summary.failed,
365
+ severity: 'high',
366
+ description: `${latest.summary.failed} tests are failing`,
367
+ suggestion: 'Fix failing tests to improve quality'
368
+ });
369
+ }
370
+ if (latest.errors?.length > 0) {
371
+ gaps.push({
372
+ type: 'test_errors',
373
+ count: latest.errors.length,
374
+ severity: 'medium',
375
+ description: `${latest.errors.length} test execution errors`,
376
+ suggestion: 'Review and fix test execution errors'
377
+ });
378
+ }
379
+ return gaps;
380
+ }
381
+ static calculateTestReliability(reliabilityData) {
382
+ if (reliabilityData.length === 0)
383
+ return 0;
384
+ const consistentResults = reliabilityData.filter((data, index) => {
385
+ if (index === 0)
386
+ return true;
387
+ const prev = reliabilityData[index - 1];
388
+ const passRateDiff = Math.abs((data.passed / data.total) - (prev.passed / prev.total));
389
+ return passRateDiff < 0.1; // Less than 10% variation
390
+ });
391
+ return (consistentResults.length / reliabilityData.length) * 100;
392
+ }
393
+ static identifyFlakyTests(reliabilityData) {
394
+ // Simple heuristic: if pass rate varies significantly, there might be flaky tests
395
+ const passRates = reliabilityData.map(d => d.total > 0 ? d.passed / d.total : 0);
396
+ const variance = this.calculateVariance(passRates);
397
+ return variance > 0.05 ? Math.floor(variance * 100) : 0;
398
+ }
399
+ static calculateVariance(values) {
400
+ if (values.length === 0)
401
+ return 0;
402
+ const mean = values.reduce((sum, val) => sum + val, 0) / values.length;
403
+ const squaredDiffs = values.map(val => Math.pow(val - mean, 2));
404
+ return squaredDiffs.reduce((sum, diff) => sum + diff, 0) / values.length;
405
+ }
406
+ static calculateQualityScore(metrics) {
407
+ const weights = {
408
+ passRate: 0.4,
409
+ testReliability: 0.3,
410
+ coverage: 0.2,
411
+ flakyTests: 0.1
412
+ };
413
+ const score = metrics.passRate * weights.passRate +
414
+ metrics.testReliability * weights.testReliability +
415
+ (metrics.coverage || 0) * weights.coverage +
416
+ (100 - metrics.flakyTests) * weights.flakyTests;
417
+ return Math.max(0, Math.min(100, score));
418
+ }
419
+ static async identifyQualityIssues(testData, metrics) {
420
+ const issues = [];
421
+ if (metrics.passRate < 90) {
422
+ issues.push({
423
+ type: 'low_pass_rate',
424
+ severity: metrics.passRate < 80 ? 'high' : 'medium',
425
+ value: metrics.passRate,
426
+ description: `Test pass rate is ${metrics.passRate.toFixed(1)}%`,
427
+ impact: 'Quality confidence reduced'
428
+ });
429
+ }
430
+ if (metrics.testReliability < 95) {
431
+ issues.push({
432
+ type: 'unreliable_tests',
433
+ severity: 'medium',
434
+ value: metrics.testReliability,
435
+ description: `Test reliability is ${metrics.testReliability.toFixed(1)}%`,
436
+ impact: 'Inconsistent test results'
437
+ });
438
+ }
439
+ if (metrics.flakyTests > 5) {
440
+ issues.push({
441
+ type: 'flaky_tests',
442
+ severity: 'high',
443
+ value: metrics.flakyTests,
444
+ description: `${metrics.flakyTests} potentially flaky tests detected`,
445
+ impact: 'Reduced confidence in test results'
446
+ });
447
+ }
448
+ return issues;
449
+ }
450
+ static generateTrendInsights(trends) {
451
+ const insights = [];
452
+ // Coverage trend
453
+ const coverageTrend = this.calculateTrend(trends.coverage);
454
+ if (coverageTrend.direction !== 'stable') {
455
+ insights.push({
456
+ type: 'coverage_trend',
457
+ direction: coverageTrend.direction,
458
+ change: coverageTrend.change,
459
+ description: `Coverage is ${coverageTrend.direction} by ${Math.abs(coverageTrend.change).toFixed(1)}%`
460
+ });
461
+ }
462
+ // Pass rate trend
463
+ const passRateTrend = this.calculateTrend(trends.passRate);
464
+ if (passRateTrend.direction !== 'stable') {
465
+ insights.push({
466
+ type: 'pass_rate_trend',
467
+ direction: passRateTrend.direction,
468
+ change: passRateTrend.change,
469
+ description: `Pass rate is ${passRateTrend.direction} by ${Math.abs(passRateTrend.change).toFixed(1)}%`
470
+ });
471
+ }
472
+ // Execution time trend
473
+ const timeTrend = this.calculateTrend(trends.executionTime);
474
+ if (timeTrend.direction !== 'stable' && Math.abs(timeTrend.change) > 1000) {
475
+ insights.push({
476
+ type: 'execution_time_trend',
477
+ direction: timeTrend.direction === 'improving' ? 'decreasing' : 'increasing',
478
+ change: timeTrend.change,
479
+ description: `Test execution time is ${timeTrend.direction === 'improving' ? 'decreasing' : 'increasing'}`
480
+ });
481
+ }
482
+ return insights;
483
+ }
484
+ static calculateTrend(dataPoints) {
485
+ if (dataPoints.length < 3) {
486
+ return { direction: 'stable', change: 0 };
487
+ }
488
+ const values = dataPoints.map(point => point.value);
489
+ const recentAvg = values.slice(0, Math.floor(values.length / 2)).reduce((sum, val) => sum + val, 0) / Math.floor(values.length / 2);
490
+ const olderAvg = values.slice(Math.floor(values.length / 2)).reduce((sum, val) => sum + val, 0) / (values.length - Math.floor(values.length / 2));
491
+ const change = recentAvg - olderAvg;
492
+ const direction = Math.abs(change) < 1 ? 'stable' : change > 0 ? 'improving' : 'declining';
493
+ return { direction, change };
494
+ }
495
+ static generatePredictions(trends) {
496
+ const predictions = [];
497
+ // Simple linear prediction for coverage
498
+ const coverageTrend = this.calculateTrend(trends.coverage);
499
+ if (coverageTrend.direction !== 'stable') {
500
+ const predicted = trends.coverage[0]?.value + (coverageTrend.change * 2);
501
+ predictions.push({
502
+ type: 'coverage',
503
+ timeframe: '2 cycles',
504
+ predicted: Math.max(0, Math.min(100, predicted)),
505
+ confidence: 'medium',
506
+ description: `Coverage predicted to be ${predicted.toFixed(1)}% in 2 execution cycles`
507
+ });
508
+ }
509
+ return predictions;
510
+ }
511
+ static calculateOverallScore(analyses) {
512
+ const scores = analyses
513
+ .filter(a => a.metrics?.qualityScore)
514
+ .map(a => a.metrics.qualityScore);
515
+ return scores.length > 0
516
+ ? scores.reduce((sum, score) => sum + score, 0) / scores.length
517
+ : 0;
518
+ }
519
+ static identifyCriticalIssues(analyses) {
520
+ const criticalIssues = [];
521
+ analyses.forEach(analysis => {
522
+ if (analysis.issues) {
523
+ const critical = analysis.issues.filter((issue) => issue.severity === 'high');
524
+ criticalIssues.push(...critical);
525
+ }
526
+ if (analysis.gaps) {
527
+ const critical = analysis.gaps.filter((gap) => gap.severity === 'high');
528
+ criticalIssues.push(...critical);
529
+ }
530
+ });
531
+ return criticalIssues;
532
+ }
533
+ static prioritizeRecommendations(analyses) {
534
+ const allRecommendations = [];
535
+ analyses.forEach(analysis => {
536
+ if (analysis.recommendations) {
537
+ allRecommendations.push(...analysis.recommendations);
538
+ }
539
+ });
540
+ // Sort by priority
541
+ return allRecommendations
542
+ .sort((a, b) => {
543
+ const priorityOrder = { 'high': 3, 'medium': 2, 'low': 1 };
544
+ return (priorityOrder[b.priority] || 0) - (priorityOrder[a.priority] || 0);
545
+ })
546
+ .slice(0, 5); // Top 5 recommendations
547
+ }
548
+ static async generateRecommendations(analysis, options) {
549
+ const recommendations = [];
550
+ // Coverage-specific recommendations
551
+ if (analysis.type === 'coverage' || analysis.coverage) {
552
+ const coverageData = analysis.coverage || analysis.current;
553
+ if (coverageData.overall < 80) {
554
+ recommendations.push({
555
+ type: 'improve_coverage',
556
+ priority: 'high',
557
+ title: 'Improve Test Coverage',
558
+ description: `Current coverage (${coverageData.overall.toFixed(1)}%) is below recommended 80%`,
559
+ actions: [
560
+ 'Run: agentic-qe generate tests --coverage-target 85',
561
+ 'Focus on uncovered code paths',
562
+ 'Add integration tests for complex flows'
563
+ ],
564
+ estimatedImpact: 'High'
565
+ });
566
+ }
567
+ }
568
+ // Quality-specific recommendations
569
+ if (analysis.type === 'quality' || analysis.quality) {
570
+ const qualityData = analysis.quality || analysis;
571
+ if (qualityData.metrics?.flakyTests > 0) {
572
+ recommendations.push({
573
+ type: 'fix_flaky_tests',
574
+ priority: 'medium',
575
+ title: 'Address Flaky Tests',
576
+ description: `${qualityData.metrics.flakyTests} potentially flaky tests detected`,
577
+ actions: [
578
+ 'Review test execution logs',
579
+ 'Add proper test isolation',
580
+ 'Check for timing dependencies'
581
+ ],
582
+ estimatedImpact: 'Medium'
583
+ });
584
+ }
585
+ }
586
+ // Gap-specific recommendations
587
+ if (analysis.gaps) {
588
+ analysis.gaps.forEach((gap) => {
589
+ if (gap.severity === 'high') {
590
+ recommendations.push({
591
+ type: 'address_gap',
592
+ priority: 'high',
593
+ title: `Address ${gap.type}`,
594
+ description: gap.description,
595
+ actions: [gap.suggestion],
596
+ estimatedImpact: 'High'
597
+ });
598
+ }
599
+ });
600
+ }
601
+ return recommendations;
602
+ }
603
+ static async generateReports(analysis, recommendations, options) {
604
+ const reportsDir = '.agentic-qe/reports';
605
+ await fs.ensureDir(reportsDir);
606
+ const timestamp = new Date().toISOString().replace(/:/g, '-');
607
+ const reportData = {
608
+ analysis,
609
+ recommendations,
610
+ metadata: {
611
+ generated: new Date().toISOString(),
612
+ format: options.format,
613
+ options
614
+ }
615
+ };
616
+ // Generate JSON report
617
+ if (options.format === 'json' || options.format === 'all') {
618
+ const jsonFile = `${reportsDir}/analysis-${analysis.type}-${timestamp}.json`;
619
+ await fs.writeJson(jsonFile, reportData, { spaces: 2 });
620
+ }
621
+ // Generate HTML report
622
+ if (options.format === 'html' || options.format === 'all') {
623
+ const htmlContent = this.generateHtmlReport(reportData);
624
+ const htmlFile = `${reportsDir}/analysis-${analysis.type}-${timestamp}.html`;
625
+ await fs.writeFile(htmlFile, htmlContent);
626
+ }
627
+ // Generate CSV for trends
628
+ if (options.format === 'csv' && analysis.trends) {
629
+ const csvContent = this.generateCsvReport(analysis.trends);
630
+ const csvFile = `${reportsDir}/trends-${timestamp}.csv`;
631
+ await fs.writeFile(csvFile, csvContent);
632
+ }
633
+ }
634
+ static generateHtmlReport(reportData) {
635
+ const { analysis, recommendations } = reportData;
636
+ return `<!DOCTYPE html>
637
+ <html>
638
+ <head>
639
+ <title>Agentic QE Analysis Report</title>
640
+ <style>
641
+ body { font-family: Arial, sans-serif; margin: 20px; }
642
+ .header { background: #f0f8ff; padding: 20px; border-radius: 5px; }
643
+ .section { margin: 20px 0; padding: 15px; border: 1px solid #ddd; border-radius: 5px; }
644
+ .metric { display: inline-block; margin: 10px; padding: 10px; background: #f9f9f9; border-radius: 3px; }
645
+ .high { color: #d9534f; }
646
+ .medium { color: #f0ad4e; }
647
+ .low { color: #5bc0de; }
648
+ .recommendation { margin: 10px 0; padding: 10px; background: #dff0d8; border-radius: 3px; }
649
+ </style>
650
+ </head>
651
+ <body>
652
+ <div class="header">
653
+ <h1>Agentic QE Analysis Report</h1>
654
+ <p>Generated: ${reportData.metadata.generated}</p>
655
+ <p>Type: ${analysis.type}</p>
656
+ </div>
657
+
658
+ ${analysis.current ? `
659
+ <div class="section">
660
+ <h2>Current Metrics</h2>
661
+ <div class="metric">Coverage: ${analysis.current.overall.toFixed(1)}%</div>
662
+ ${analysis.metrics ? `
663
+ <div class="metric">Pass Rate: ${analysis.metrics.passRate.toFixed(1)}%</div>
664
+ <div class="metric">Quality Score: ${analysis.metrics.qualityScore.toFixed(1)}</div>
665
+ ` : ''}
666
+ </div>
667
+ ` : ''}
668
+
669
+ ${recommendations.length > 0 ? `
670
+ <div class="section">
671
+ <h2>Recommendations</h2>
672
+ ${recommendations.map((rec) => `
673
+ <div class="recommendation">
674
+ <h3 class="${rec.priority}">${rec.title}</h3>
675
+ <p>${rec.description}</p>
676
+ <ul>
677
+ ${rec.actions.map((action) => `<li>${action}</li>`).join('')}
678
+ </ul>
679
+ </div>
680
+ `).join('')}
681
+ </div>
682
+ ` : ''}
683
+
684
+ <div class="section">
685
+ <h2>Raw Data</h2>
686
+ <pre>${JSON.stringify(analysis, null, 2)}</pre>
687
+ </div>
688
+ </body>
689
+ </html>`;
690
+ }
691
+ static generateCsvReport(trends) {
692
+ let csv = 'Timestamp,Coverage,PassRate,TestCount,ExecutionTime\n';
693
+ const maxLength = Math.max(trends.coverage?.length || 0, trends.passRate?.length || 0, trends.testCount?.length || 0, trends.executionTime?.length || 0);
694
+ for (let i = 0; i < maxLength; i++) {
695
+ const timestamp = trends.coverage?.[i]?.timestamp || '';
696
+ const coverage = trends.coverage?.[i]?.value || '';
697
+ const passRate = trends.passRate?.[i]?.value || '';
698
+ const testCount = trends.testCount?.[i]?.value || '';
699
+ const executionTime = trends.executionTime?.[i]?.value || '';
700
+ csv += `${timestamp},${coverage},${passRate},${testCount},${executionTime}\n`;
701
+ }
702
+ return csv;
703
+ }
704
+ static displayAnalysisSummary(analysis, recommendations, options) {
705
+ console.log(chalk_1.default.yellow('\n📊 Analysis Summary:'));
706
+ console.log(chalk_1.default.gray(` Type: ${analysis.type}`));
707
+ console.log(chalk_1.default.gray(` Timestamp: ${analysis.timestamp}`));
708
+ // Display key metrics based on analysis type
709
+ if (analysis.current) {
710
+ console.log(chalk_1.default.gray(` Coverage: ${analysis.current.overall.toFixed(1)}%`));
711
+ }
712
+ if (analysis.metrics) {
713
+ console.log(chalk_1.default.gray(` Pass Rate: ${analysis.metrics.passRate.toFixed(1)}%`));
714
+ console.log(chalk_1.default.gray(` Quality Score: ${analysis.metrics.qualityScore.toFixed(1)}`));
715
+ }
716
+ if (analysis.trends?.direction) {
717
+ console.log(chalk_1.default.gray(` Trend: ${analysis.trends.direction}`));
718
+ }
719
+ // Display critical issues
720
+ const criticalIssues = analysis.issues?.filter((issue) => issue.severity === 'high') || [];
721
+ if (criticalIssues.length > 0) {
722
+ console.log(chalk_1.default.red('\n🚨 Critical Issues:'));
723
+ criticalIssues.forEach((issue) => {
724
+ console.log(chalk_1.default.red(` • ${issue.description}`));
725
+ });
726
+ }
727
+ // Display top recommendations
728
+ if (recommendations.length > 0) {
729
+ console.log(chalk_1.default.yellow('\n💡 Top Recommendations:'));
730
+ recommendations.slice(0, 3).forEach((rec, index) => {
731
+ console.log(chalk_1.default.gray(` ${index + 1}. ${rec.title}`));
732
+ console.log(chalk_1.default.gray(` ${rec.description}`));
733
+ });
734
+ }
735
+ console.log(chalk_1.default.yellow('\n📁 Reports Generated:'));
736
+ console.log(chalk_1.default.gray(` Format: ${options.format}`));
737
+ console.log(chalk_1.default.gray(` Location: .agentic-qe/reports/`));
738
+ console.log(chalk_1.default.yellow('\n💡 Next Steps:'));
739
+ if (recommendations.length > 0) {
740
+ console.log(chalk_1.default.gray(' 1. Review and implement top recommendations'));
741
+ console.log(chalk_1.default.gray(' 2. Re-run analysis after improvements'));
742
+ }
743
+ console.log(chalk_1.default.gray(' 3. Monitor trends over time for continuous improvement'));
744
+ }
745
+ static async storeAnalysisResults(analysis, recommendations) {
746
+ const summary = {
747
+ type: analysis.type,
748
+ timestamp: analysis.timestamp,
749
+ metrics: analysis.metrics || analysis.current,
750
+ issues: (analysis.issues || []).length,
751
+ recommendations: recommendations.length,
752
+ status: 'completed'
753
+ };
754
+ // Store in coordination memory
755
+ const coordinationScript = `
756
+ npx claude-flow@alpha memory store --key "agentic-qe/analysis/latest" --value '${JSON.stringify(summary)}'
757
+ npx claude-flow@alpha hooks notify --message "Analysis completed: ${analysis.type} analysis with ${recommendations.length} recommendations"
758
+ `;
759
+ await fs.writeFile('.agentic-qe/scripts/store-analysis-results.sh', coordinationScript);
760
+ await fs.chmod('.agentic-qe/scripts/store-analysis-results.sh', '755');
761
+ }
762
+ }
763
+ exports.AnalyzeCommand = AnalyzeCommand;
764
+ //# sourceMappingURL=analyze.js.map