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,110 @@
1
+ /**
2
+ * Code Complexity Analysis Tool
3
+ * Cyclomatic and cognitive complexity analysis with hotspot detection
4
+ *
5
+ * @module code-quality/analyze-complexity
6
+ * @version 1.0.0
7
+ */
8
+ export interface ComplexityAnalysisParams {
9
+ /** Source code to analyze */
10
+ sourceCode: string;
11
+ /** File path for context */
12
+ filePath: string;
13
+ /** Programming language */
14
+ language: 'typescript' | 'javascript' | 'python' | 'java';
15
+ /** Cyclomatic complexity threshold for hotspot detection */
16
+ cyclomaticThreshold?: number;
17
+ /** Cognitive complexity threshold for hotspot detection */
18
+ cognitiveThreshold?: number;
19
+ /** Include per-function analysis */
20
+ includePerFunction?: boolean;
21
+ /** Include refactoring recommendations */
22
+ includeRecommendations?: boolean;
23
+ }
24
+ export interface ComplexityMetric {
25
+ /** Cyclomatic complexity score (minimum: 1) */
26
+ cyclomatic: number;
27
+ /** Cognitive complexity score */
28
+ cognitive: number;
29
+ /** Lines of code (excluding comments) */
30
+ linesOfCode: number;
31
+ /** Function/method count */
32
+ functionCount: number;
33
+ /** Average complexity per function */
34
+ averageComplexityPerFunction: number;
35
+ /** Maximum complexity in any function */
36
+ maxComplexity: number;
37
+ }
38
+ export interface FunctionComplexity {
39
+ /** Function name or location */
40
+ name: string;
41
+ /** Starting line number */
42
+ startLine: number;
43
+ /** Ending line number */
44
+ endLine: number;
45
+ /** Cyclomatic complexity */
46
+ cyclomatic: number;
47
+ /** Cognitive complexity */
48
+ cognitive: number;
49
+ /** Lines of code in function */
50
+ linesOfCode: number;
51
+ /** Parameter count */
52
+ parameters: number;
53
+ /** Nesting depth */
54
+ nestingDepth: number;
55
+ /** Is hotspot (exceeds threshold) */
56
+ isHotspot: boolean;
57
+ }
58
+ export interface ComplexityHotspot {
59
+ /** Function name */
60
+ name: string;
61
+ /** Starting line number */
62
+ startLine: number;
63
+ /** Hotspot type */
64
+ type: 'cyclomatic' | 'cognitive' | 'size';
65
+ /** Severity level */
66
+ severity: 'low' | 'medium' | 'high' | 'critical';
67
+ /** Current value */
68
+ current: number;
69
+ /** Threshold exceeded */
70
+ threshold: number;
71
+ /** Excess percentage */
72
+ excessPercentage: number;
73
+ /** Recommended action */
74
+ recommendation: string;
75
+ }
76
+ export interface ComplexityAnalysisResult {
77
+ /** File path analyzed */
78
+ filePath: string;
79
+ /** Overall complexity metrics */
80
+ overallMetrics: ComplexityMetric;
81
+ /** Per-function analysis */
82
+ functionMetrics?: FunctionComplexity[];
83
+ /** Detected hotspots */
84
+ hotspots: ComplexityHotspot[];
85
+ /** Quality score (0-100, higher is better) */
86
+ qualityScore: number;
87
+ /** Analysis summary */
88
+ summary: {
89
+ totalFunctions: number;
90
+ hotspotsDetected: number;
91
+ criticalHotspots: number;
92
+ averageComplexity: number;
93
+ maxComplexity: number;
94
+ };
95
+ /** Refactoring recommendations */
96
+ recommendations?: string[];
97
+ /** Analysis metadata */
98
+ metadata: {
99
+ timestamp: string;
100
+ analysisTimeMs: number;
101
+ language: string;
102
+ linesAnalyzed: number;
103
+ };
104
+ }
105
+ /**
106
+ * Analyze code complexity with hotspot detection
107
+ * Provides cyclomatic and cognitive complexity metrics with actionable recommendations
108
+ */
109
+ export declare function analyzeComplexity(params: ComplexityAnalysisParams): Promise<ComplexityAnalysisResult>;
110
+ //# sourceMappingURL=analyze-complexity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-complexity.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/tools/qe/code-quality/analyze-complexity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ /**
3
+ * Code Complexity Analysis Tool
4
+ * Cyclomatic and cognitive complexity analysis with hotspot detection
5
+ *
6
+ * @module code-quality/analyze-complexity
7
+ * @version 1.0.0
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.analyzeComplexity = analyzeComplexity;
11
+ // ============================================================================
12
+ // Helper Functions
13
+ // ============================================================================
14
+ /**
15
+ * Count decision points for cyclomatic complexity
16
+ */
17
+ function countDecisionPoints(code) {
18
+ // Pattern: keywords that increase cyclomatic complexity
19
+ const decisionPatterns = [
20
+ /\b(if|else\s+if)\b/g, // if/else if
21
+ /\bcase\b/g, // switch case
22
+ /\bfor\b/g, // for loop
23
+ /\bforeach\b/g, // foreach (C#, etc.)
24
+ /\bwhile\b/g, // while loop
25
+ /\bdo\b/g, // do-while
26
+ /\bcatch\b/g, // catch block
27
+ /\?\s*[^:]+\s*:/g, // ternary operator
28
+ /\|\|/g, // logical OR
29
+ /&&/g, // logical AND
30
+ /\btry\b/g, // try block (adds complexity)
31
+ ];
32
+ let count = 0;
33
+ for (const pattern of decisionPatterns) {
34
+ const matches = code.match(pattern);
35
+ count += matches ? matches.length : 0;
36
+ }
37
+ return count;
38
+ }
39
+ /**
40
+ * Calculate cognitive complexity with nesting penalty
41
+ * Cognitive complexity penalizes nesting more heavily than cyclomatic
42
+ */
43
+ function calculateCognitiveComplexity(code) {
44
+ let complexity = 0;
45
+ let currentNesting = 0;
46
+ let maxNesting = 0;
47
+ // Track braces to understand nesting
48
+ for (const char of code) {
49
+ if (char === '{') {
50
+ currentNesting++;
51
+ maxNesting = Math.max(maxNesting, currentNesting);
52
+ }
53
+ else if (char === '}') {
54
+ currentNesting = Math.max(0, currentNesting - 1);
55
+ }
56
+ }
57
+ // Base complexity: decision points
58
+ const decisionPoints = countDecisionPoints(code);
59
+ complexity = decisionPoints + 1; // Minimum 1
60
+ // Add nesting penalty (each level above 1 adds weight)
61
+ complexity += Math.max(0, maxNesting - 1) * 2;
62
+ return complexity;
63
+ }
64
+ /**
65
+ * Extract lines of code (excluding comments and blank lines)
66
+ */
67
+ function extractLinesOfCode(code) {
68
+ const lines = code.split('\n');
69
+ let count = 0;
70
+ for (const line of lines) {
71
+ const trimmed = line.trim();
72
+ // Skip empty lines and comment-only lines
73
+ if (trimmed && !trimmed.startsWith('//') && !trimmed.startsWith('#') &&
74
+ !trimmed.startsWith('*') && !trimmed.startsWith('/*') && !trimmed.startsWith('*/')) {
75
+ count++;
76
+ }
77
+ }
78
+ return count;
79
+ }
80
+ /**
81
+ * Extract function/method definitions
82
+ */
83
+ function extractFunctions(code, language) {
84
+ const functions = [];
85
+ const lines = code.split('\n');
86
+ let i = 0;
87
+ while (i < lines.length) {
88
+ const line = lines[i];
89
+ // Pattern matching for function declarations based on language
90
+ let functionMatch = null;
91
+ let name = '';
92
+ if (language === 'typescript' || language === 'javascript') {
93
+ functionMatch = line.match(/(?:function|async\s+function|\w+\s*\(|const\s+(\w+)\s*=\s*(?:async\s*)?\()\s*(\w+)?/);
94
+ if (functionMatch) {
95
+ name = functionMatch[1] || functionMatch[2] || `function_${i}`;
96
+ }
97
+ }
98
+ else if (language === 'python') {
99
+ functionMatch = line.match(/^\s*(?:async\s+)?def\s+(\w+)\s*\(/);
100
+ if (functionMatch) {
101
+ name = functionMatch[1];
102
+ }
103
+ }
104
+ else if (language === 'java') {
105
+ functionMatch = line.match(/(?:public|private|protected)?\s+(?:static\s+)?(?:\w+\s+)+(\w+)\s*\(/);
106
+ if (functionMatch) {
107
+ name = functionMatch[1];
108
+ }
109
+ }
110
+ if (functionMatch && name) {
111
+ // Find matching closing brace
112
+ let braceCount = 0;
113
+ let endLine = i;
114
+ let foundStart = false;
115
+ for (let j = i; j < lines.length; j++) {
116
+ const funcLine = lines[j];
117
+ for (const char of funcLine) {
118
+ if (char === '{') {
119
+ braceCount++;
120
+ foundStart = true;
121
+ }
122
+ else if (char === '}') {
123
+ braceCount--;
124
+ if (foundStart && braceCount === 0) {
125
+ endLine = j;
126
+ break;
127
+ }
128
+ }
129
+ }
130
+ if (foundStart && braceCount === 0)
131
+ break;
132
+ }
133
+ functions.push({
134
+ name,
135
+ startLine: i + 1,
136
+ endLine: endLine + 1,
137
+ content: lines.slice(i, endLine + 1).join('\n')
138
+ });
139
+ i = endLine + 1;
140
+ }
141
+ else {
142
+ i++;
143
+ }
144
+ }
145
+ return functions;
146
+ }
147
+ /**
148
+ * Calculate nesting depth for a code block
149
+ */
150
+ function calculateNestingDepth(code) {
151
+ let maxNesting = 0;
152
+ let currentNesting = 0;
153
+ for (const char of code) {
154
+ if (char === '{' || char === '[' || char === '(') {
155
+ currentNesting++;
156
+ maxNesting = Math.max(maxNesting, currentNesting);
157
+ }
158
+ else if (char === '}' || char === ']' || char === ')') {
159
+ currentNesting = Math.max(0, currentNesting - 1);
160
+ }
161
+ }
162
+ return maxNesting;
163
+ }
164
+ /**
165
+ * Determine hotspot severity based on excess percentage
166
+ */
167
+ function determineSeverity(excessPercentage) {
168
+ if (excessPercentage >= 200)
169
+ return 'critical';
170
+ if (excessPercentage >= 100)
171
+ return 'high';
172
+ if (excessPercentage >= 50)
173
+ return 'medium';
174
+ return 'low';
175
+ }
176
+ /**
177
+ * Generate refactoring recommendations
178
+ */
179
+ function generateRecommendations(hotspots, overallMetrics) {
180
+ const recommendations = [];
181
+ // Group hotspots by type
182
+ const cyclomaticHotspots = hotspots.filter(h => h.type === 'cyclomatic');
183
+ const cognitiveHotspots = hotspots.filter(h => h.type === 'cognitive');
184
+ const sizeHotspots = hotspots.filter(h => h.type === 'size');
185
+ if (cyclomaticHotspots.length > 0) {
186
+ const critical = cyclomaticHotspots.filter(h => h.severity === 'critical');
187
+ if (critical.length > 0) {
188
+ recommendations.push(`Apply Extract Method refactoring to ${critical.length} function(s) with critical cyclomatic complexity`);
189
+ }
190
+ recommendations.push('Use Strategy or State pattern to reduce complex conditional logic');
191
+ recommendations.push('Consider polymorphism instead of switch statements');
192
+ }
193
+ if (cognitiveHotspots.length > 0) {
194
+ recommendations.push('Use early returns (guard clauses) to reduce nesting levels');
195
+ recommendations.push('Extract nested loops and conditionals into separate methods');
196
+ recommendations.push('Replace nested ternary operators with if-else or helper methods');
197
+ }
198
+ if (sizeHotspots.length > 0) {
199
+ recommendations.push('Split large functions into focused, single-responsibility methods');
200
+ recommendations.push('Move related functionality into separate classes or modules');
201
+ }
202
+ if (overallMetrics.averageComplexityPerFunction > 10) {
203
+ recommendations.push('Target: Keep average function complexity under 10 for maintainability');
204
+ }
205
+ if (overallMetrics.maxComplexity > 30) {
206
+ recommendations.push('Critical: Functions with complexity > 30 are extremely difficult to test');
207
+ }
208
+ return recommendations;
209
+ }
210
+ /**
211
+ * Calculate quality score based on complexity metrics
212
+ */
213
+ function calculateQualityScore(metrics, hotspots) {
214
+ let score = 100;
215
+ // Deduct points for hotspots
216
+ for (const hotspot of hotspots) {
217
+ const deduction = {
218
+ 'low': 3,
219
+ 'medium': 8,
220
+ 'high': 15,
221
+ 'critical': 25
222
+ }[hotspot.severity];
223
+ score -= deduction;
224
+ }
225
+ // Deduct for overall complexity
226
+ if (metrics.cyclomatic > 15)
227
+ score -= 10;
228
+ if (metrics.averageComplexityPerFunction > 15)
229
+ score -= 15;
230
+ if (metrics.linesOfCode > 500)
231
+ score -= 5;
232
+ return Math.max(0, Math.min(100, score));
233
+ }
234
+ // ============================================================================
235
+ // Main Analysis Function
236
+ // ============================================================================
237
+ /**
238
+ * Analyze code complexity with hotspot detection
239
+ * Provides cyclomatic and cognitive complexity metrics with actionable recommendations
240
+ */
241
+ async function analyzeComplexity(params) {
242
+ const startTime = Date.now();
243
+ const { sourceCode, filePath, language, cyclomaticThreshold = 10, cognitiveThreshold = 15, includePerFunction = true, includeRecommendations = true } = params;
244
+ // Calculate overall metrics
245
+ const decisionPoints = countDecisionPoints(sourceCode);
246
+ const cyclomaticComplexity = decisionPoints + 1;
247
+ const cognitiveComplexity = calculateCognitiveComplexity(sourceCode);
248
+ const linesOfCode = extractLinesOfCode(sourceCode);
249
+ const functions = extractFunctions(sourceCode, language);
250
+ const functionCount = functions.length || 1;
251
+ const averageComplexityPerFunction = functionCount > 0
252
+ ? cyclomaticComplexity / functionCount
253
+ : cyclomaticComplexity;
254
+ // Find max complexity
255
+ let maxComplexity = cyclomaticComplexity;
256
+ // Per-function analysis
257
+ let functionMetrics;
258
+ if (includePerFunction && functions.length > 0) {
259
+ functionMetrics = functions.map(func => {
260
+ const funcCyclomatic = countDecisionPoints(func.content) + 1;
261
+ const funcCognitive = calculateCognitiveComplexity(func.content);
262
+ const funcLoc = extractLinesOfCode(func.content);
263
+ const funcNesting = calculateNestingDepth(func.content);
264
+ const funcParams = (func.content.match(/\([^)]*\)/)?.[0]?.split(',') || []).length;
265
+ maxComplexity = Math.max(maxComplexity, funcCyclomatic);
266
+ return {
267
+ name: func.name,
268
+ startLine: func.startLine,
269
+ endLine: func.endLine,
270
+ cyclomatic: funcCyclomatic,
271
+ cognitive: funcCognitive,
272
+ linesOfCode: funcLoc,
273
+ parameters: funcParams,
274
+ nestingDepth: funcNesting,
275
+ isHotspot: funcCyclomatic > cyclomaticThreshold || funcCognitive > cognitiveThreshold
276
+ };
277
+ });
278
+ }
279
+ // Detect hotspots
280
+ const hotspots = [];
281
+ if (cyclomaticComplexity > cyclomaticThreshold) {
282
+ hotspots.push({
283
+ name: 'Overall',
284
+ startLine: 1,
285
+ type: 'cyclomatic',
286
+ severity: determineSeverity(((cyclomaticComplexity - cyclomaticThreshold) / cyclomaticThreshold) * 100),
287
+ current: cyclomaticComplexity,
288
+ threshold: cyclomaticThreshold,
289
+ excessPercentage: ((cyclomaticComplexity - cyclomaticThreshold) / cyclomaticThreshold) * 100,
290
+ recommendation: 'Break down complex logic into smaller, focused functions'
291
+ });
292
+ }
293
+ if (cognitiveComplexity > cognitiveThreshold) {
294
+ hotspots.push({
295
+ name: 'Overall',
296
+ startLine: 1,
297
+ type: 'cognitive',
298
+ severity: determineSeverity(((cognitiveComplexity - cognitiveThreshold) / cognitiveThreshold) * 100),
299
+ current: cognitiveComplexity,
300
+ threshold: cognitiveThreshold,
301
+ excessPercentage: ((cognitiveComplexity - cognitiveThreshold) / cognitiveThreshold) * 100,
302
+ recommendation: 'Reduce nesting levels and simplify control flow'
303
+ });
304
+ }
305
+ // Per-function hotspots
306
+ if (functionMetrics) {
307
+ for (const func of functionMetrics) {
308
+ if (func.cyclomatic > cyclomaticThreshold) {
309
+ hotspots.push({
310
+ name: func.name,
311
+ startLine: func.startLine,
312
+ type: 'cyclomatic',
313
+ severity: determineSeverity(((func.cyclomatic - cyclomaticThreshold) / cyclomaticThreshold) * 100),
314
+ current: func.cyclomatic,
315
+ threshold: cyclomaticThreshold,
316
+ excessPercentage: ((func.cyclomatic - cyclomaticThreshold) / cyclomaticThreshold) * 100,
317
+ recommendation: `Extract method: ${func.name} has excessive cyclomatic complexity`
318
+ });
319
+ }
320
+ if (func.cognitive > cognitiveThreshold) {
321
+ hotspots.push({
322
+ name: func.name,
323
+ startLine: func.startLine,
324
+ type: 'cognitive',
325
+ severity: determineSeverity(((func.cognitive - cognitiveThreshold) / cognitiveThreshold) * 100),
326
+ current: func.cognitive,
327
+ threshold: cognitiveThreshold,
328
+ excessPercentage: ((func.cognitive - cognitiveThreshold) / cognitiveThreshold) * 100,
329
+ recommendation: `Refactor: ${func.name} has high cognitive complexity due to nesting`
330
+ });
331
+ }
332
+ if (func.linesOfCode > 100) {
333
+ hotspots.push({
334
+ name: func.name,
335
+ startLine: func.startLine,
336
+ type: 'size',
337
+ severity: func.linesOfCode > 300 ? 'critical' : func.linesOfCode > 200 ? 'high' : 'medium',
338
+ current: func.linesOfCode,
339
+ threshold: 100,
340
+ excessPercentage: ((func.linesOfCode - 100) / 100) * 100,
341
+ recommendation: `Split: ${func.name} is too large (${func.linesOfCode} lines)`
342
+ });
343
+ }
344
+ }
345
+ }
346
+ const overallMetrics = {
347
+ cyclomatic: cyclomaticComplexity,
348
+ cognitive: cognitiveComplexity,
349
+ linesOfCode,
350
+ functionCount,
351
+ averageComplexityPerFunction,
352
+ maxComplexity
353
+ };
354
+ const qualityScore = calculateQualityScore(overallMetrics, hotspots);
355
+ const recommendations = includeRecommendations
356
+ ? generateRecommendations(hotspots, overallMetrics)
357
+ : [];
358
+ const criticalHotspots = hotspots.filter(h => h.severity === 'critical').length;
359
+ return {
360
+ filePath,
361
+ overallMetrics,
362
+ functionMetrics,
363
+ hotspots,
364
+ qualityScore,
365
+ summary: {
366
+ totalFunctions: functionCount,
367
+ hotspotsDetected: hotspots.length,
368
+ criticalHotspots,
369
+ averageComplexity: averageComplexityPerFunction,
370
+ maxComplexity
371
+ },
372
+ recommendations,
373
+ metadata: {
374
+ timestamp: new Date().toISOString(),
375
+ analysisTimeMs: Date.now() - startTime,
376
+ language,
377
+ linesAnalyzed: sourceCode.split('\n').length
378
+ }
379
+ };
380
+ }
381
+ //# sourceMappingURL=analyze-complexity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-complexity.js","sourceRoot":"","sources":["../../../../../src/mcp/tools/qe/code-quality/analyze-complexity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Code Quality Metrics Calculator
3
+ * Maintainability, reliability, and security score calculation
4
+ *
5
+ * @module code-quality/calculate-quality-metrics
6
+ * @version 1.0.0
7
+ */
8
+ export interface QualityMetricsParams {
9
+ /** Source code to analyze */
10
+ sourceCode: string;
11
+ /** File path for context */
12
+ filePath: string;
13
+ /** Programming language */
14
+ language: 'typescript' | 'javascript' | 'python' | 'java';
15
+ /** Code coverage percentage (0-100) */
16
+ coveragePercentage?: number;
17
+ /** Number of code smells detected */
18
+ codeSmells?: number;
19
+ /** Duplication percentage (0-100) */
20
+ duplicationPercentage?: number;
21
+ /** Include security analysis */
22
+ includeSecurityAnalysis?: boolean;
23
+ /** Include technical debt calculation */
24
+ includeTechnicalDebt?: boolean;
25
+ }
26
+ export interface MaintainabilityScore {
27
+ /** Maintainability Index (0-100, higher is better) */
28
+ index: number;
29
+ /** Readability score (0-100) */
30
+ readability: number;
31
+ /** Modularity score (0-100) */
32
+ modularity: number;
33
+ /** Documentation coverage (0-100) */
34
+ documentationCoverage: number;
35
+ /** Consistency score (0-100) */
36
+ consistency: number;
37
+ }
38
+ export interface ReliabilityScore {
39
+ /** Reliability Index (0-100) */
40
+ index: number;
41
+ /** Test coverage adequacy (0-100) */
42
+ testCoverage: number;
43
+ /** Error handling score (0-100) */
44
+ errorHandling: number;
45
+ /** Code smell density (0-100, 100 = no smells) */
46
+ codeSmellDensity: number;
47
+ /** Cyclomatic complexity impact (0-100) */
48
+ complexityImpact: number;
49
+ }
50
+ export interface SecurityScore {
51
+ /** Security Index (0-100) */
52
+ index: number;
53
+ /** Vulnerability risk (0-100, 100 = no risk) */
54
+ vulnerabilityRisk: number;
55
+ /** Input validation coverage (0-100) */
56
+ inputValidation: number;
57
+ /** Dependency safety (0-100) */
58
+ dependencySafety: number;
59
+ /** Sensitive data handling (0-100) */
60
+ sensitiveDataHandling: number;
61
+ }
62
+ export interface TechnicalDebt {
63
+ /** Total technical debt in person-hours */
64
+ hoursOfDebt: number;
65
+ /** Debt breakdown by category */
66
+ breakdown: {
67
+ category: string;
68
+ hours: number;
69
+ percentage: number;
70
+ }[];
71
+ /** Debt trend (increasing/stable/decreasing) */
72
+ trend: 'increasing' | 'stable' | 'decreasing';
73
+ /** Estimated payoff time (hours) */
74
+ payoffHours: number;
75
+ /** Priority items for debt reduction */
76
+ topPriorities: string[];
77
+ }
78
+ export interface QualityMetricsResult {
79
+ /** File path analyzed */
80
+ filePath: string;
81
+ /** Maintainability score and components */
82
+ maintainability: MaintainabilityScore;
83
+ /** Reliability score and components */
84
+ reliability: ReliabilityScore;
85
+ /** Security score and components */
86
+ security: SecurityScore;
87
+ /** Overall quality score (0-100) */
88
+ overallScore: number;
89
+ /** Quality rating */
90
+ rating: 'A' | 'B' | 'C' | 'D' | 'F';
91
+ /** Technical debt analysis */
92
+ technicalDebt?: TechnicalDebt;
93
+ /** Quality grade interpretation */
94
+ interpretation: string;
95
+ /** Improvement priorities */
96
+ priorities: Array<{
97
+ category: string;
98
+ issue: string;
99
+ impact: 'high' | 'medium' | 'low';
100
+ effort: 'high' | 'medium' | 'low';
101
+ }>;
102
+ /** Analysis metadata */
103
+ metadata: {
104
+ timestamp: string;
105
+ analysisTimeMs: number;
106
+ language: string;
107
+ linesAnalyzed: number;
108
+ };
109
+ }
110
+ /**
111
+ * Calculate comprehensive code quality metrics
112
+ * Combines maintainability, reliability, and security into actionable scores
113
+ */
114
+ export declare function calculateQualityMetrics(params: QualityMetricsParams): Promise<QualityMetricsResult>;
115
+ //# sourceMappingURL=calculate-quality-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-quality-metrics.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/tools/qe/code-quality/calculate-quality-metrics.ts"],"names":[],"mappings":"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"}