couchloop-eq-mcp 1.0.3 → 1.0.5

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 (285) hide show
  1. package/README.md +24 -11
  2. package/dist/clients/shrinkChatClient.js +1 -1
  3. package/dist/clients/shrinkChatClient.js.map +1 -1
  4. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  5. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  6. package/dist/developer/analyzers/bloat-detector.js +483 -0
  7. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  8. package/dist/developer/backup/auto-backup.d.ts +96 -0
  9. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  10. package/dist/developer/backup/auto-backup.js +346 -0
  11. package/dist/developer/backup/auto-backup.js.map +1 -0
  12. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  13. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  14. package/dist/developer/blockers/package-blocker.js +224 -0
  15. package/dist/developer/blockers/package-blocker.js.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  17. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  18. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  19. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  21. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  22. package/dist/developer/evaluators/build-context-detector.js +258 -0
  23. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  25. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  26. package/dist/developer/evaluators/package-evaluator.js +278 -0
  27. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  28. package/dist/developer/guards/file-guardian.d.ts +79 -0
  29. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  30. package/dist/developer/guards/file-guardian.js +309 -0
  31. package/dist/developer/guards/file-guardian.js.map +1 -0
  32. package/dist/developer/managers/context-manager.d.ts +61 -0
  33. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  34. package/dist/developer/managers/context-manager.js +302 -0
  35. package/dist/developer/managers/context-manager.js.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  37. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  38. package/dist/developer/metrics/complexity-calculator.js +259 -0
  39. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  40. package/dist/developer/reports/review-summary.d.ts +49 -0
  41. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  42. package/dist/developer/reports/review-summary.js +249 -0
  43. package/dist/developer/reports/review-summary.js.map +1 -0
  44. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  45. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  46. package/dist/developer/scanners/review-assistant.js +374 -0
  47. package/dist/developer/scanners/review-assistant.js.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  49. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  50. package/dist/developer/scanners/secret-scanner.js +287 -0
  51. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  53. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  54. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  55. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  56. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  57. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  58. package/dist/developer/scanners/xss-detector.js +229 -0
  59. package/dist/developer/scanners/xss-detector.js.map +1 -0
  60. package/dist/developer/types/ai-errors.d.ts +34 -0
  61. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  62. package/dist/developer/types/ai-errors.js +271 -0
  63. package/dist/developer/types/ai-errors.js.map +1 -0
  64. package/dist/developer/types/package.d.ts +32 -0
  65. package/dist/developer/types/package.d.ts.map +1 -0
  66. package/dist/developer/types/package.js +5 -0
  67. package/dist/developer/types/package.js.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  69. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  70. package/dist/developer/updaters/dependency-updater.js +472 -0
  71. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  72. package/dist/developer/validators/cargo.d.ts +14 -0
  73. package/dist/developer/validators/cargo.d.ts.map +1 -0
  74. package/dist/developer/validators/cargo.js +132 -0
  75. package/dist/developer/validators/cargo.js.map +1 -0
  76. package/dist/developer/validators/gem.d.ts +14 -0
  77. package/dist/developer/validators/gem.d.ts.map +1 -0
  78. package/dist/developer/validators/gem.js +85 -0
  79. package/dist/developer/validators/gem.js.map +1 -0
  80. package/dist/developer/validators/go.d.ts +14 -0
  81. package/dist/developer/validators/go.d.ts.map +1 -0
  82. package/dist/developer/validators/go.js +138 -0
  83. package/dist/developer/validators/go.js.map +1 -0
  84. package/dist/developer/validators/maven.d.ts +14 -0
  85. package/dist/developer/validators/maven.d.ts.map +1 -0
  86. package/dist/developer/validators/maven.js +99 -0
  87. package/dist/developer/validators/maven.js.map +1 -0
  88. package/dist/developer/validators/npm.d.ts +14 -0
  89. package/dist/developer/validators/npm.d.ts.map +1 -0
  90. package/dist/developer/validators/npm.js +96 -0
  91. package/dist/developer/validators/npm.js.map +1 -0
  92. package/dist/developer/validators/nuget.d.ts +15 -0
  93. package/dist/developer/validators/nuget.d.ts.map +1 -0
  94. package/dist/developer/validators/nuget.js +107 -0
  95. package/dist/developer/validators/nuget.js.map +1 -0
  96. package/dist/developer/validators/pypi.d.ts +14 -0
  97. package/dist/developer/validators/pypi.d.ts.map +1 -0
  98. package/dist/developer/validators/pypi.js +118 -0
  99. package/dist/developer/validators/pypi.js.map +1 -0
  100. package/dist/developer/validators/registry-manager.d.ts +37 -0
  101. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  102. package/dist/developer/validators/registry-manager.js +89 -0
  103. package/dist/developer/validators/registry-manager.js.map +1 -0
  104. package/dist/developer/validators/version-checker.d.ts +145 -0
  105. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  106. package/dist/developer/validators/version-checker.js +529 -0
  107. package/dist/developer/validators/version-checker.js.map +1 -0
  108. package/dist/server/index.js.map +1 -1
  109. package/dist/server/middleware/auth.d.ts +7 -9
  110. package/dist/server/middleware/auth.d.ts.map +1 -1
  111. package/dist/server/middleware/auth.js.map +1 -1
  112. package/dist/tools/check-versions.d.ts +100 -0
  113. package/dist/tools/check-versions.d.ts.map +1 -0
  114. package/dist/tools/check-versions.js +328 -0
  115. package/dist/tools/check-versions.js.map +1 -0
  116. package/dist/tools/detect-code-smell.d.ts +9 -0
  117. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  118. package/dist/tools/detect-code-smell.js +231 -0
  119. package/dist/tools/detect-code-smell.js.map +1 -0
  120. package/dist/tools/index.d.ts +471 -0
  121. package/dist/tools/index.d.ts.map +1 -1
  122. package/dist/tools/index.js +178 -0
  123. package/dist/tools/index.js.map +1 -1
  124. package/dist/tools/journey.js +1 -1
  125. package/dist/tools/journey.js.map +1 -1
  126. package/dist/tools/pre-review-code.d.ts +71 -0
  127. package/dist/tools/pre-review-code.d.ts.map +1 -0
  128. package/dist/tools/pre-review-code.js +159 -0
  129. package/dist/tools/pre-review-code.js.map +1 -0
  130. package/dist/tools/preserve-context.d.ts +27 -0
  131. package/dist/tools/preserve-context.d.ts.map +1 -0
  132. package/dist/tools/preserve-context.js +98 -0
  133. package/dist/tools/preserve-context.js.map +1 -0
  134. package/dist/tools/protect-files.d.ts +224 -0
  135. package/dist/tools/protect-files.d.ts.map +1 -0
  136. package/dist/tools/protect-files.js +286 -0
  137. package/dist/tools/protect-files.js.map +1 -0
  138. package/dist/tools/scan-security.d.ts +38 -0
  139. package/dist/tools/scan-security.d.ts.map +1 -0
  140. package/dist/tools/scan-security.js +237 -0
  141. package/dist/tools/scan-security.js.map +1 -0
  142. package/dist/tools/validate_packages.d.ts +8 -0
  143. package/dist/tools/validate_packages.d.ts.map +1 -0
  144. package/dist/tools/validate_packages.js +159 -0
  145. package/dist/tools/validate_packages.js.map +1 -0
  146. package/dist/types/auth.d.ts +18 -18
  147. package/dist/types/auth.d.ts.map +1 -1
  148. package/dist/types/auth.js +91 -36
  149. package/dist/types/auth.js.map +1 -1
  150. package/dist/types/context.d.ts +46 -0
  151. package/dist/types/context.d.ts.map +1 -0
  152. package/dist/types/context.js +17 -0
  153. package/dist/types/context.js.map +1 -0
  154. package/dist/types/file-protection.d.ts +50 -0
  155. package/dist/types/file-protection.d.ts.map +1 -0
  156. package/dist/types/file-protection.js +9 -0
  157. package/dist/types/file-protection.js.map +1 -0
  158. package/dist/utils/errorHandler.d.ts.map +1 -1
  159. package/dist/utils/errorHandler.js +2 -1
  160. package/dist/utils/errorHandler.js.map +1 -1
  161. package/package.json +23 -2
  162. package/dist/db/migrate.d.ts +0 -4
  163. package/dist/db/migrate.d.ts.map +0 -1
  164. package/dist/db/migrate.js +0 -34
  165. package/dist/db/migrate.js.map +0 -1
  166. package/dist/db/migrations/schema.d.ts +0 -1074
  167. package/dist/db/migrations/schema.d.ts.map +0 -1
  168. package/dist/db/migrations/schema.js +0 -160
  169. package/dist/db/migrations/schema.js.map +0 -1
  170. package/dist/db/schema.d.ts +0 -1576
  171. package/dist/db/schema.d.ts.map +0 -1
  172. package/dist/db/schema.js +0 -204
  173. package/dist/db/schema.js.map +0 -1
  174. package/dist/db/seed.d.ts +0 -4
  175. package/dist/db/seed.d.ts.map +0 -1
  176. package/dist/db/seed.js +0 -57
  177. package/dist/db/seed.js.map +0 -1
  178. package/dist/db/seedOAuth.d.ts +0 -4
  179. package/dist/db/seedOAuth.d.ts.map +0 -1
  180. package/dist/db/seedOAuth.js +0 -76
  181. package/dist/db/seedOAuth.js.map +0 -1
  182. package/dist/governance/config.d.ts +0 -66
  183. package/dist/governance/config.d.ts.map +0 -1
  184. package/dist/governance/config.js +0 -238
  185. package/dist/governance/config.js.map +0 -1
  186. package/dist/governance/detectors/hallucination.d.ts +0 -61
  187. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  188. package/dist/governance/detectors/hallucination.js +0 -338
  189. package/dist/governance/detectors/hallucination.js.map +0 -1
  190. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  191. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  192. package/dist/governance/detectors/inconsistency.js +0 -548
  193. package/dist/governance/detectors/inconsistency.js.map +0 -1
  194. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  195. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  196. package/dist/governance/detectors/toneDrift.js +0 -421
  197. package/dist/governance/detectors/toneDrift.js.map +0 -1
  198. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  199. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  200. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  201. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  202. package/dist/governance/evaluationEngine.d.ts +0 -112
  203. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  204. package/dist/governance/evaluationEngine.js +0 -265
  205. package/dist/governance/evaluationEngine.js.map +0 -1
  206. package/dist/governance/intervention.d.ts +0 -81
  207. package/dist/governance/intervention.d.ts.map +0 -1
  208. package/dist/governance/intervention.js +0 -405
  209. package/dist/governance/intervention.js.map +0 -1
  210. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  211. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  212. package/dist/server/oauth/anomalyDetection.js +0 -405
  213. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  214. package/dist/server/oauth/authServer.d.ts +0 -61
  215. package/dist/server/oauth/authServer.d.ts.map +0 -1
  216. package/dist/server/oauth/authServer.js +0 -283
  217. package/dist/server/oauth/authServer.js.map +0 -1
  218. package/dist/server/oauth/dpop.d.ts +0 -135
  219. package/dist/server/oauth/dpop.d.ts.map +0 -1
  220. package/dist/server/oauth/dpop.js +0 -338
  221. package/dist/server/oauth/dpop.js.map +0 -1
  222. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  223. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  224. package/dist/server/oauth/gdpr/consent.js +0 -388
  225. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  226. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  227. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  228. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  229. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  230. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  231. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  232. package/dist/server/oauth/gdpr/index.js +0 -273
  233. package/dist/server/oauth/gdpr/index.js.map +0 -1
  234. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  235. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  236. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  237. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  238. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  239. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  240. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  241. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  242. package/dist/server/oauth/pkce.d.ts +0 -61
  243. package/dist/server/oauth/pkce.d.ts.map +0 -1
  244. package/dist/server/oauth/pkce.js +0 -157
  245. package/dist/server/oauth/pkce.js.map +0 -1
  246. package/dist/server/oauth/providers/base.d.ts +0 -147
  247. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  248. package/dist/server/oauth/providers/base.js +0 -312
  249. package/dist/server/oauth/providers/base.js.map +0 -1
  250. package/dist/server/oauth/providers/github.d.ts +0 -55
  251. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  252. package/dist/server/oauth/providers/github.js +0 -225
  253. package/dist/server/oauth/providers/github.js.map +0 -1
  254. package/dist/server/oauth/providers/google.d.ts +0 -49
  255. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  256. package/dist/server/oauth/providers/google.js +0 -153
  257. package/dist/server/oauth/providers/google.js.map +0 -1
  258. package/dist/server/oauth/providers/index.d.ts +0 -9
  259. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  260. package/dist/server/oauth/providers/index.js +0 -24
  261. package/dist/server/oauth/providers/index.js.map +0 -1
  262. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  263. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  264. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  265. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  266. package/dist/server/oauth/security.d.ts +0 -101
  267. package/dist/server/oauth/security.d.ts.map +0 -1
  268. package/dist/server/oauth/security.js +0 -268
  269. package/dist/server/oauth/security.js.map +0 -1
  270. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  271. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  272. package/dist/server/oauth/tokenEncryption.js +0 -218
  273. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  274. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  275. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  276. package/dist/tools/sendMessage-complex-backup.js +0 -545
  277. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  278. package/dist/tools/sendMessage-revised.d.ts +0 -11
  279. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  280. package/dist/tools/sendMessage-revised.js +0 -429
  281. package/dist/tools/sendMessage-revised.js.map +0 -1
  282. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  283. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  284. package/dist/tools/sendMessage-truly-simple.js +0 -299
  285. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../../src/developer/managers/context-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQ/C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;AACvF,MAAM,yBAAyB,GAAG,MAAM,CAAC,CAAC,0BAA0B;AACpE,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,+BAA+B;AAW9D,MAAM,OAAO,cAAc;IACjB,KAAK,CAAe;IACpB,aAAa,GAAG,KAAK,CAAC;IAE9B;QACE,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE;gBACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,wCAAwC;YACxC,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;gBAC1D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,QAA6B,EAC7B,OAAe;QAEf,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAiB;gBAC1B,EAAE,EAAE,MAAM,EAAE;gBACZ,QAAQ;gBACR,OAAO;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,WAAW,EAAE,CAAC;gBACd,cAAc,EAAE,IAAI;aACrB,CAAC;YAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,MAAM,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,EAAE,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YAE1E,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,mCAAmC,QAAQ,YAAY;gBAChE,IAAI,EAAE,CAAC,KAAK,CAAC;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,QAA8B,EAC9B,UAAmB;QAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAEjC,iCAAiC;YACjC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YAC3D,CAAC;YAED,oCAAoC;YACpC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;gBACtC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,kDAAkD;YAClD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;gBACvB,KAAK,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,mBAAmB,QAAQ,CAAC,CAAC,CAAC,iBAAiB,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GACtE,UAAU,CAAC,CAAC,CAAC,cAAc,UAAU,GAAG,CAAC,CAAC,CAAC,EAC7C,EAAE;oBACF,IAAI,EAAE,IAAI;iBACX,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;YAE3D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,aAAa,OAAO,CAAC,MAAM,kBAAkB;gBACtD,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,kBAA2B,KAAK;QAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAEpC,IAAI,OAA2B,CAAC;YAChC,IAAI,QAAQ,CAAC,4BAA4B,GAAG,EAAE,EAAE,CAAC;gBAC/C,OAAO,GAAG,qBAAqB,QAAQ,CAAC,4BAA4B,CAAC,OAAO,CAC1E,CAAC,CACF,gEAAgE,CAAC;YACpE,CAAC;iBAAM,IAAI,QAAQ,CAAC,4BAA4B,GAAG,EAAE,EAAE,CAAC;gBACtD,OAAO,GAAG,qBAAqB,QAAQ,CAAC,4BAA4B,CAAC,OAAO,CAC1E,CAAC,CACF,wCAAwC,CAAC;YAC5C,CAAC;YAED,MAAM,QAAQ,GAA4B;gBACxC,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,0BAA0B,QAAQ,CAAC,aAAa,UAAU;gBACnE,OAAO;aACR,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;YAC3B,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,MAAM,iBAAiB,GAAwC;YAC7D,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,CAAC;YACZ,oBAAoB,EAAE,CAAC;YACvB,kBAAkB,EAAE,CAAC;SACtB,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,UAAU,GAAG,mBAAmB,CAAC;QACzD,MAAM,YAAY,GAAG,CAAC,eAAe,GAAG,yBAAyB,CAAC,GAAG,GAAG,CAAC;QAEzE,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;YACxC,mBAAmB,EAAE,iBAAiB;YACtC,kBAAkB,EAAE,UAAU;YAC9B,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxD,4BAA4B,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;YAEnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC5C,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,MAAM,CAAC,IAAI,CAAC,cAAc,YAAY,+BAA+B,OAAO,OAAO,CAAC,CAAC;YAErF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,WAAW,YAAY,uBAAuB,OAAO,OAAO;aACtE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE,MAAM,EAAE;oBACZ,QAAQ,EAAE,kBAAkB;oBAC5B,OAAO,EAAE,2FAA2F;oBACpG,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,WAAW,EAAE,CAAC;oBACd,cAAc,EAAE,IAAI;iBACrB;gBACD;oBACE,EAAE,EAAE,MAAM,EAAE;oBACZ,QAAQ,EAAE,cAAc;oBACxB,OAAO,EACL,2IAA2I;oBAC7I,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,WAAW,EAAE,CAAC;oBACd,cAAc,EAAE,IAAI;iBACrB;gBACD;oBACE,EAAE,EAAE,MAAM,EAAE;oBACZ,QAAQ,EAAE,cAAc;oBACxB,OAAO,EACL,gJAAgJ;oBAClJ,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,WAAW,EAAE,CAAC;oBACd,cAAc,EAAE,IAAI;iBACrB;aACF;YACD,QAAQ,EAAE;gBACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,IAAI;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,QAAQ,GAA0B,IAAI,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QAChC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Complexity Calculator - Metrics for code quality analysis
3
+ * Measures cyclomatic complexity, cognitive complexity, and code metrics
4
+ */
5
+ export interface ComplexityMetrics {
6
+ cyclomaticComplexity: number;
7
+ cognitiveComplexity: number;
8
+ linesOfCode: number;
9
+ nestingDepth: number;
10
+ functionCount: number;
11
+ maxFunctionLength: number;
12
+ averageFunctionLength: number;
13
+ score: number;
14
+ severity: 'low' | 'medium' | 'high';
15
+ }
16
+ export declare class ComplexityCalculator {
17
+ /**
18
+ * Calculate all complexity metrics for given code
19
+ */
20
+ calculateMetrics(code: string, language: 'javascript' | 'typescript' | 'python'): ComplexityMetrics;
21
+ /**
22
+ * Calculate cyclomatic complexity (decision points in code)
23
+ * Counts: if, else if, for, while, do, case, catch, ?:, ||, &&
24
+ */
25
+ private calculateCyclomaticComplexity;
26
+ /**
27
+ * Calculate cognitive complexity (mental burden of understanding code)
28
+ * Similar to cyclomatic but weighs nested structures higher
29
+ */
30
+ private calculateCognitiveComplexity;
31
+ /**
32
+ * Calculate maximum nesting depth in code
33
+ */
34
+ private calculateMaxNestingDepth;
35
+ /**
36
+ * Count logical lines of code (excluding comments and blank lines)
37
+ */
38
+ private countLinesOfCode;
39
+ /**
40
+ * Extract function definitions from code
41
+ */
42
+ private extractFunctions;
43
+ /**
44
+ * Calculate overall complexity score (0-100, higher is worse)
45
+ */
46
+ private calculateScore;
47
+ /**
48
+ * Determine severity level based on score
49
+ */
50
+ private getSeverity;
51
+ }
52
+ //# sourceMappingURL=complexity-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-calculator.d.ts","sourceRoot":"","sources":["../../../src/developer/metrics/complexity-calculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED,qBAAa,oBAAoB;IAC/B;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,iBAAiB;IAoCnG;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAiDrC;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IA4CpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+DxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Complexity Calculator - Metrics for code quality analysis
3
+ * Measures cyclomatic complexity, cognitive complexity, and code metrics
4
+ */
5
+ export class ComplexityCalculator {
6
+ /**
7
+ * Calculate all complexity metrics for given code
8
+ */
9
+ calculateMetrics(code, language) {
10
+ const lines = code.split('\n');
11
+ const linesOfCode = this.countLinesOfCode(lines);
12
+ const cyclomaticComplexity = this.calculateCyclomaticComplexity(code, language);
13
+ const cognitiveComplexity = this.calculateCognitiveComplexity(code, language);
14
+ const nestingDepth = this.calculateMaxNestingDepth(code);
15
+ const functions = this.extractFunctions(code, language);
16
+ const functionCount = functions.length;
17
+ const functionLengths = functions.map(f => f.length);
18
+ const maxFunctionLength = functionLengths.length > 0 ? Math.max(...functionLengths) : 0;
19
+ const averageFunctionLength = functionLengths.length > 0
20
+ ? Math.round(functionLengths.reduce((a, b) => a + b, 0) / functionLengths.length)
21
+ : 0;
22
+ // Calculate overall score (0-100, higher is worse)
23
+ const score = this.calculateScore(cyclomaticComplexity, cognitiveComplexity, nestingDepth, maxFunctionLength, linesOfCode);
24
+ return {
25
+ cyclomaticComplexity,
26
+ cognitiveComplexity,
27
+ linesOfCode,
28
+ nestingDepth,
29
+ functionCount,
30
+ maxFunctionLength,
31
+ averageFunctionLength,
32
+ score,
33
+ severity: this.getSeverity(score)
34
+ };
35
+ }
36
+ /**
37
+ * Calculate cyclomatic complexity (decision points in code)
38
+ * Counts: if, else if, for, while, do, case, catch, ?:, ||, &&
39
+ */
40
+ calculateCyclomaticComplexity(code, language) {
41
+ let complexity = 1; // Base complexity
42
+ // Count decision points
43
+ const decisionPatterns = [
44
+ /\bif\s*\(/gm,
45
+ /\belse\s+if\s*\(/gm,
46
+ /\belse\b/gm,
47
+ /\bfor\s*\(/gm,
48
+ /\bwhile\s*\(/gm,
49
+ /\bdo\b/gm,
50
+ /\bcase\b/gm,
51
+ /\bcatch\s*\(/gm,
52
+ /\?(?!:)/gm, // Ternary operator (not part of ::)
53
+ /\|\|/gm,
54
+ /&&/gm
55
+ ];
56
+ for (const pattern of decisionPatterns) {
57
+ const matches = code.match(pattern);
58
+ if (matches) {
59
+ complexity += matches.length;
60
+ }
61
+ }
62
+ // For Python, also count try/except
63
+ if (language === 'python') {
64
+ const pyPatterns = [
65
+ /\bif\s*:/gm,
66
+ /\belif\s*:/gm,
67
+ /\belse\s*:/gm,
68
+ /\bfor\s+\w+\s+in\b/gm,
69
+ /\bwhile\s*:/gm,
70
+ /\btry\s*:/gm,
71
+ /\bexcept\s*:/gm,
72
+ /\bexcept\s+\w+\s*:/gm
73
+ ];
74
+ for (const pattern of pyPatterns) {
75
+ const matches = code.match(pattern);
76
+ if (matches) {
77
+ complexity += matches.length;
78
+ }
79
+ }
80
+ }
81
+ return Math.max(1, complexity);
82
+ }
83
+ /**
84
+ * Calculate cognitive complexity (mental burden of understanding code)
85
+ * Similar to cyclomatic but weighs nested structures higher
86
+ */
87
+ calculateCognitiveComplexity(code, _language) {
88
+ let complexity = 0;
89
+ const lines = code.split('\n');
90
+ let currentNestingLevel = 0;
91
+ for (const line of lines) {
92
+ const trimmed = line.trim();
93
+ // Skip comments and empty lines
94
+ if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed === '') {
95
+ continue;
96
+ }
97
+ // Track nesting level
98
+ const openBraces = (line.match(/\{/g) || []).length;
99
+ const closeBraces = (line.match(/\}/g) || []).length;
100
+ const nestingDelta = openBraces - closeBraces;
101
+ currentNestingLevel = Math.max(0, currentNestingLevel + nestingDelta);
102
+ // Weight by nesting level
103
+ const baseWeightPatterns = [
104
+ { regex: /\bif\s*\(/, weight: 1 },
105
+ { regex: /\belse\s+if\s*\(/, weight: 1 },
106
+ { regex: /\bfor\s*\(/, weight: 1 },
107
+ { regex: /\bwhile\s*\(/, weight: 1 },
108
+ { regex: /\btry\s*\{/, weight: 1 },
109
+ { regex: /\bcatch\s*\(/, weight: 1 },
110
+ { regex: /\?(?!:)/, weight: 0.5 }, // Ternary lower weight
111
+ ];
112
+ for (const { regex, weight } of baseWeightPatterns) {
113
+ const matches = trimmed.match(regex);
114
+ if (matches) {
115
+ // Nested decisions cost more
116
+ const nestingMultiplier = 1 + (currentNestingLevel * 0.1);
117
+ complexity += matches.length * weight * nestingMultiplier;
118
+ }
119
+ }
120
+ }
121
+ return Math.round(complexity);
122
+ }
123
+ /**
124
+ * Calculate maximum nesting depth in code
125
+ */
126
+ calculateMaxNestingDepth(code) {
127
+ let maxDepth = 0;
128
+ let currentDepth = 0;
129
+ for (const char of code) {
130
+ if (char === '{' || char === '[' || char === '(') {
131
+ currentDepth++;
132
+ maxDepth = Math.max(maxDepth, currentDepth);
133
+ }
134
+ else if (char === '}' || char === ']' || char === ')') {
135
+ currentDepth = Math.max(0, currentDepth - 1);
136
+ }
137
+ }
138
+ return maxDepth;
139
+ }
140
+ /**
141
+ * Count logical lines of code (excluding comments and blank lines)
142
+ */
143
+ countLinesOfCode(lines) {
144
+ let count = 0;
145
+ for (const line of lines) {
146
+ const trimmed = line.trim();
147
+ // Skip empty lines and comments
148
+ if (trimmed === '' || trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('*')) {
149
+ continue;
150
+ }
151
+ count++;
152
+ }
153
+ return count;
154
+ }
155
+ /**
156
+ * Extract function definitions from code
157
+ */
158
+ extractFunctions(code, language) {
159
+ const functions = [];
160
+ if (language === 'python') {
161
+ // Python: def function_name(...)
162
+ const pyFuncRegex = /def\s+(\w+)\s*\([^)]*\):/g;
163
+ let match;
164
+ while ((match = pyFuncRegex.exec(code)) !== null) {
165
+ const funcName = match[1] || 'anonymous';
166
+ const startPos = match.index + match[0].length;
167
+ // Find the function body (indented code after def)
168
+ const restOfCode = code.substring(startPos);
169
+ const lines = restOfCode.split('\n');
170
+ let funcLength = 0;
171
+ const baseIndent = lines[0] ? lines[0].search(/\S/) : 0;
172
+ for (let i = 1; i < lines.length; i++) {
173
+ const line = lines[i];
174
+ if (!line)
175
+ continue;
176
+ const trimmed = line.trim();
177
+ // Stop when we hit a line with same or less indentation (and not empty)
178
+ if (trimmed && line.search(/\S/) <= baseIndent && baseIndent >= 0) {
179
+ break;
180
+ }
181
+ funcLength++;
182
+ }
183
+ functions.push({ name: funcName, length: funcLength });
184
+ }
185
+ }
186
+ else {
187
+ // JavaScript/TypeScript: function name() {} or const name = () => {}
188
+ const jsFuncRegex = /(?:function\s+(\w+)|const\s+(\w+)\s*=\s*(?:async\s*)?\(|(?:async\s+)?(\w+)\s*\([^)]*\)\s*\{)/g;
189
+ let match;
190
+ while ((match = jsFuncRegex.exec(code)) !== null) {
191
+ const funcName = match[1] || match[2] || match[3] || 'anonymous';
192
+ const startPos = match.index + match[0].length;
193
+ // Count lines until closing brace at same level
194
+ const restOfCode = code.substring(startPos);
195
+ let braceCount = 1;
196
+ let funcLength = 1;
197
+ for (const char of restOfCode) {
198
+ if (char === '{')
199
+ braceCount++;
200
+ else if (char === '}') {
201
+ braceCount--;
202
+ if (braceCount === 0)
203
+ break;
204
+ }
205
+ if (char === '\n')
206
+ funcLength++;
207
+ }
208
+ functions.push({ name: funcName, length: funcLength });
209
+ }
210
+ }
211
+ return functions;
212
+ }
213
+ /**
214
+ * Calculate overall complexity score (0-100, higher is worse)
215
+ */
216
+ calculateScore(cyclomaticComplexity, cognitiveComplexity, nestingDepth, maxFunctionLength, _linesOfCode) {
217
+ let score = 0;
218
+ // Cyclomatic complexity (0-40 points)
219
+ // 1-5: 0 pts, 6-10: 10 pts, 11-15: 20 pts, 15+: 40 pts
220
+ if (cyclomaticComplexity <= 5)
221
+ score += 0;
222
+ else if (cyclomaticComplexity <= 10)
223
+ score += 10;
224
+ else if (cyclomaticComplexity <= 15)
225
+ score += 20;
226
+ else
227
+ score += 40;
228
+ // Cognitive complexity (0-30 points)
229
+ score += Math.min(30, Math.round(cognitiveComplexity * 2));
230
+ // Nesting depth (0-20 points)
231
+ // 1-3: 0 pts, 4-5: 5 pts, 6-7: 10 pts, 8+: 20 pts
232
+ if (nestingDepth <= 3)
233
+ score += 0;
234
+ else if (nestingDepth <= 5)
235
+ score += 5;
236
+ else if (nestingDepth <= 7)
237
+ score += 10;
238
+ else
239
+ score += 20;
240
+ // Function length (0-10 points)
241
+ // <50: 0 pts, 50-100: 5 pts, 100+: 10 pts
242
+ if (maxFunctionLength >= 100)
243
+ score += 10;
244
+ else if (maxFunctionLength >= 50)
245
+ score += 5;
246
+ return Math.min(100, score);
247
+ }
248
+ /**
249
+ * Determine severity level based on score
250
+ */
251
+ getSeverity(score) {
252
+ if (score <= 30)
253
+ return 'low';
254
+ if (score <= 60)
255
+ return 'medium';
256
+ return 'high';
257
+ }
258
+ }
259
+ //# sourceMappingURL=complexity-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-calculator.js","sourceRoot":"","sources":["../../../src/developer/metrics/complexity-calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Review Summary Generator
3
+ * Generates executive summaries, categorized problem lists, and review complexity estimates
4
+ */
5
+ import { CodeIssue, ScanResult } from '../scanners/review-assistant.js';
6
+ export interface IssueCategoryGroup {
7
+ category: string;
8
+ severity: 'low' | 'medium' | 'high';
9
+ count: number;
10
+ issues: CodeIssue[];
11
+ fixTime: number;
12
+ }
13
+ export interface ReviewSummary {
14
+ executiveSummary: string;
15
+ categoryGroups: IssueCategoryGroup[];
16
+ complexityScore: number;
17
+ estimatedReviewTime: number;
18
+ riskLevel: 'low' | 'medium' | 'high';
19
+ actionItems: string[];
20
+ fixableSuggestions: Array<{
21
+ line: number;
22
+ current: string;
23
+ suggested: string;
24
+ }>;
25
+ metrics: {
26
+ totalIssues: number;
27
+ criticalCount: number;
28
+ warningCount: number;
29
+ infoCount: number;
30
+ codeQualityScore: number;
31
+ };
32
+ }
33
+ export declare class ReviewSummaryGenerator {
34
+ private scanResult;
35
+ private codeLines;
36
+ constructor(scanResult: ScanResult, codeLines?: number);
37
+ generate(): ReviewSummary;
38
+ private groupIssuesByCategory;
39
+ private estimateCategoryFixTime;
40
+ private calculateComplexityScore;
41
+ private estimateReviewTime;
42
+ private determineRiskLevel;
43
+ private generateActionItems;
44
+ private compileSuggestions;
45
+ private calculateMetrics;
46
+ private generateExecutiveSummary;
47
+ }
48
+ export declare function formatReviewSummaryAsMarkdown(summary: ReviewSummary): string;
49
+ //# sourceMappingURL=review-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-summary.d.ts","sourceRoot":"","sources":["../../../src/developer/reports/review-summary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAS;gBAEd,UAAU,EAAE,UAAU,EAAE,SAAS,GAAE,MAAU;IAKzD,QAAQ,IAAI,aAAa;IA2BzB,OAAO,CAAC,qBAAqB;IA+C7B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,wBAAwB;IA8BhC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,wBAAwB;CA+BjC;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAqD5E"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Review Summary Generator
3
+ * Generates executive summaries, categorized problem lists, and review complexity estimates
4
+ */
5
+ export class ReviewSummaryGenerator {
6
+ scanResult;
7
+ codeLines;
8
+ constructor(scanResult, codeLines = 0) {
9
+ this.scanResult = scanResult;
10
+ this.codeLines = codeLines;
11
+ }
12
+ generate() {
13
+ const categoryGroups = this.groupIssuesByCategory();
14
+ const complexityScore = this.calculateComplexityScore();
15
+ const estimatedReviewTime = this.estimateReviewTime(categoryGroups);
16
+ const riskLevel = this.determineRiskLevel();
17
+ const actionItems = this.generateActionItems(categoryGroups);
18
+ const fixableSuggestions = this.compileSuggestions();
19
+ const metrics = this.calculateMetrics();
20
+ const executiveSummary = this.generateExecutiveSummary(complexityScore, riskLevel, metrics);
21
+ return {
22
+ executiveSummary,
23
+ categoryGroups,
24
+ complexityScore,
25
+ estimatedReviewTime,
26
+ riskLevel,
27
+ actionItems,
28
+ fixableSuggestions,
29
+ metrics
30
+ };
31
+ }
32
+ groupIssuesByCategory() {
33
+ const groups = {};
34
+ const typeToCategory = {
35
+ 'console_log': { category: 'Debug Statements', severity: 'low' },
36
+ 'commented_code': { category: 'Code Cleanup', severity: 'low' },
37
+ 'todo': { category: 'Incomplete Work', severity: 'medium' },
38
+ 'fixme': { category: 'Urgent Fixes', severity: 'high' },
39
+ 'missing_error_handling': { category: 'Error Handling', severity: 'high' },
40
+ 'hardcoded_value': { category: 'Configuration', severity: 'high' },
41
+ 'missing_types': { category: 'Type Safety', severity: 'medium' },
42
+ 'unreachable_code': { category: 'Dead Code', severity: 'medium' },
43
+ 'nested_complexity': { category: 'Code Complexity', severity: 'medium' }
44
+ };
45
+ this.scanResult.issues.forEach(issue => {
46
+ const categoryInfo = typeToCategory[issue.type] || {
47
+ category: issue.type,
48
+ severity: issue.severity
49
+ };
50
+ const key = categoryInfo.category;
51
+ if (!groups[key]) {
52
+ groups[key] = {
53
+ category: categoryInfo.category,
54
+ severity: categoryInfo.severity,
55
+ count: 0,
56
+ issues: [],
57
+ fixTime: this.estimateCategoryFixTime(categoryInfo.category)
58
+ };
59
+ }
60
+ groups[key].count++;
61
+ groups[key].issues.push(issue);
62
+ });
63
+ // Sort by severity (high > medium > low), then by count
64
+ return Object.values(groups).sort((a, b) => {
65
+ const severityOrder = { high: 0, medium: 1, low: 2 };
66
+ if (severityOrder[a.severity] !== severityOrder[b.severity]) {
67
+ return severityOrder[a.severity] - severityOrder[b.severity];
68
+ }
69
+ return b.count - a.count;
70
+ });
71
+ }
72
+ estimateCategoryFixTime(category) {
73
+ const timeMap = {
74
+ 'Debug Statements': 1,
75
+ 'Code Cleanup': 2,
76
+ 'Incomplete Work': 15,
77
+ 'Urgent Fixes': 20,
78
+ 'Error Handling': 10,
79
+ 'Configuration': 5,
80
+ 'Type Safety': 3,
81
+ 'Dead Code': 2,
82
+ 'Code Complexity': 15
83
+ };
84
+ return timeMap[category] || 5;
85
+ }
86
+ calculateComplexityScore() {
87
+ let score = 0;
88
+ // Base score from issue count
89
+ const issueCount = this.scanResult.totalIssues;
90
+ if (issueCount === 0)
91
+ score = 95;
92
+ else if (issueCount <= 3)
93
+ score = 80;
94
+ else if (issueCount <= 10)
95
+ score = 60;
96
+ else if (issueCount <= 20)
97
+ score = 40;
98
+ else
99
+ score = 20;
100
+ // Adjust for severity mix
101
+ const { high, medium, low } = this.scanResult.issuesBySeverity;
102
+ const highImpact = (high || 0) * 15;
103
+ const mediumImpact = (medium || 0) * 8;
104
+ const lowImpact = (low || 0) * 2;
105
+ score = Math.max(0, score - (highImpact + mediumImpact + lowImpact) / 10);
106
+ // Adjust for critical issue types
107
+ const criticalTypes = ['hardcoded_value', 'missing_error_handling', 'fixme'];
108
+ const criticalCount = this.scanResult.issues.filter(i => criticalTypes.includes(i.type)).length;
109
+ score = Math.max(0, score - criticalCount * 5);
110
+ return Math.min(100, Math.max(0, Math.round(score)));
111
+ }
112
+ estimateReviewTime(groups) {
113
+ let baseTime = 10; // 10 minutes base review time
114
+ // Add time for each issue group
115
+ const groupTime = groups.reduce((total, group) => {
116
+ return total + group.fixTime;
117
+ }, 0);
118
+ // Additional time based on code size
119
+ const sizeAdjustment = Math.ceil(this.codeLines / 100) * 2;
120
+ return baseTime + groupTime + sizeAdjustment;
121
+ }
122
+ determineRiskLevel() {
123
+ const { high, medium } = this.scanResult.issuesBySeverity;
124
+ if ((high || 0) > 0)
125
+ return 'high';
126
+ if ((medium || 0) > 3)
127
+ return 'high';
128
+ if ((medium || 0) > 0)
129
+ return 'medium';
130
+ return 'low';
131
+ }
132
+ generateActionItems(groups) {
133
+ const items = [];
134
+ groups.forEach((group, _index) => {
135
+ const priority = group.severity === 'high' ? 'MUST' : group.severity === 'medium' ? 'SHOULD' : 'CONSIDER';
136
+ items.push(`${priority} fix ${group.count} ${group.category.toLowerCase()} issue(s)`);
137
+ // Add specific guidance for critical categories
138
+ if (group.category === 'Urgent Fixes') {
139
+ items.push(` → Required before merge: ${group.issues.map(i => `Line ${i.line}`).join(', ')}`);
140
+ }
141
+ if (group.category === 'Configuration') {
142
+ items.push(` → Replace hardcoded values with environment variables`);
143
+ }
144
+ if (group.category === 'Error Handling') {
145
+ items.push(` → Add proper error handlers to prevent runtime failures`);
146
+ }
147
+ });
148
+ if (items.length === 0) {
149
+ items.push('✓ No action items - code is clean');
150
+ }
151
+ return items;
152
+ }
153
+ compileSuggestions() {
154
+ const suggestions = [];
155
+ this.scanResult.issues.forEach(issue => {
156
+ if (issue.suggestion) {
157
+ suggestions.push({
158
+ line: issue.line,
159
+ current: issue.code,
160
+ suggested: issue.suggestion
161
+ });
162
+ }
163
+ });
164
+ return suggestions.slice(0, 10); // Limit to top 10 suggestions
165
+ }
166
+ calculateMetrics() {
167
+ const { high, medium, low } = this.scanResult.issuesBySeverity;
168
+ const total = this.scanResult.totalIssues;
169
+ // Code quality score: 100 - (issues with weighted penalty)
170
+ const qualityPenalty = ((high || 0) * 10) + ((medium || 0) * 5) + ((low || 0) * 1);
171
+ const codeQualityScore = Math.max(0, 100 - qualityPenalty);
172
+ return {
173
+ totalIssues: total,
174
+ criticalCount: high || 0,
175
+ warningCount: medium || 0,
176
+ infoCount: low || 0,
177
+ codeQualityScore
178
+ };
179
+ }
180
+ generateExecutiveSummary(_complexityScore, riskLevel, metrics) {
181
+ if (metrics.totalIssues === 0) {
182
+ return `Perfect! No issues detected. Code quality score: ${metrics.codeQualityScore}/100. Ready for review.`;
183
+ }
184
+ const riskEmoji = {
185
+ low: '✓',
186
+ medium: '⚠',
187
+ high: '❌'
188
+ };
189
+ const parts = [
190
+ `${riskEmoji[riskLevel]} Risk Level: ${riskLevel.toUpperCase()}`,
191
+ `Code Quality: ${metrics.codeQualityScore}/100`,
192
+ `Issues Found: ${metrics.totalIssues} (${metrics.criticalCount} critical, ${metrics.warningCount} warnings, ${metrics.infoCount} info)`
193
+ ];
194
+ if (metrics.criticalCount > 0) {
195
+ parts.push(`Action Required: ${metrics.criticalCount} critical issue(s) must be fixed before merge`);
196
+ }
197
+ if (metrics.warningCount > 0) {
198
+ parts.push(`Review Needed: ${metrics.warningCount} warning(s) should be addressed`);
199
+ }
200
+ return parts.join(' | ');
201
+ }
202
+ }
203
+ export function formatReviewSummaryAsMarkdown(summary) {
204
+ let markdown = `# Code Review Summary\n\n`;
205
+ markdown += `## Executive Summary\n${summary.executiveSummary}\n\n`;
206
+ markdown += `## Metrics\n`;
207
+ markdown += `- **Code Quality Score**: ${summary.metrics.codeQualityScore}/100\n`;
208
+ markdown += `- **Complexity Score**: ${summary.complexityScore}/100\n`;
209
+ markdown += `- **Risk Level**: ${summary.riskLevel.toUpperCase()}\n`;
210
+ markdown += `- **Estimated Review Time**: ${summary.estimatedReviewTime} minutes\n`;
211
+ markdown += `- **Total Issues**: ${summary.metrics.totalIssues}\n`;
212
+ markdown += ` - Critical: ${summary.metrics.criticalCount}\n`;
213
+ markdown += ` - Warnings: ${summary.metrics.warningCount}\n`;
214
+ markdown += ` - Info: ${summary.metrics.infoCount}\n\n`;
215
+ if (summary.categoryGroups.length > 0) {
216
+ markdown += `## Issues by Category\n`;
217
+ summary.categoryGroups.forEach(group => {
218
+ markdown += `### ${group.category} (${group.count})\n`;
219
+ markdown += `**Severity**: ${group.severity} | **Est. Fix Time**: ${group.fixTime}min\n\n`;
220
+ group.issues.slice(0, 3).forEach(issue => {
221
+ markdown += `- **Line ${issue.line}**: ${issue.message}\n`;
222
+ if (issue.suggestion) {
223
+ markdown += ` - Suggestion: ${issue.suggestion}\n`;
224
+ }
225
+ });
226
+ if (group.issues.length > 3) {
227
+ markdown += `- ... and ${group.issues.length - 3} more\n`;
228
+ }
229
+ markdown += '\n';
230
+ });
231
+ }
232
+ if (summary.actionItems.length > 0) {
233
+ markdown += `## Action Items\n`;
234
+ summary.actionItems.forEach(item => {
235
+ markdown += `- ${item}\n`;
236
+ });
237
+ markdown += '\n';
238
+ }
239
+ if (summary.fixableSuggestions.length > 0) {
240
+ markdown += `## Suggested Fixes\n`;
241
+ summary.fixableSuggestions.forEach(fix => {
242
+ markdown += `### Line ${fix.line}\n`;
243
+ markdown += `\`\`\`\nCurrent: ${fix.current}\n\`\`\`\n`;
244
+ markdown += `**Suggestion**: ${fix.suggested}\n\n`;
245
+ });
246
+ }
247
+ return markdown;
248
+ }
249
+ //# sourceMappingURL=review-summary.js.map