reviewflow 3.6.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/config/projectConfig.d.ts +2 -0
  3. package/dist/config/projectConfig.d.ts.map +1 -1
  4. package/dist/config/projectConfig.js +17 -0
  5. package/dist/config/projectConfig.js.map +1 -1
  6. package/dist/entities/backfill/backfillProgress.d.ts +7 -0
  7. package/dist/entities/backfill/backfillProgress.d.ts.map +1 -0
  8. package/dist/entities/backfill/backfillProgress.js +2 -0
  9. package/dist/entities/backfill/backfillProgress.js.map +1 -0
  10. package/dist/entities/cleanup/retentionPolicy.valueObject.d.ts +8 -0
  11. package/dist/entities/cleanup/retentionPolicy.valueObject.d.ts.map +1 -0
  12. package/dist/entities/cleanup/retentionPolicy.valueObject.js +21 -0
  13. package/dist/entities/cleanup/retentionPolicy.valueObject.js.map +1 -0
  14. package/dist/entities/diffStats/diffStats.d.ts +6 -0
  15. package/dist/entities/diffStats/diffStats.d.ts.map +1 -0
  16. package/dist/entities/diffStats/diffStats.js +2 -0
  17. package/dist/entities/diffStats/diffStats.js.map +1 -0
  18. package/dist/entities/diffStats/diffStatsFetch.gateway.d.ts +5 -0
  19. package/dist/entities/diffStats/diffStatsFetch.gateway.d.ts.map +1 -0
  20. package/dist/entities/diffStats/diffStatsFetch.gateway.js +2 -0
  21. package/dist/entities/diffStats/diffStatsFetch.gateway.js.map +1 -0
  22. package/dist/entities/packageVersion/packageVersion.d.ts +18 -0
  23. package/dist/entities/packageVersion/packageVersion.d.ts.map +1 -0
  24. package/dist/entities/packageVersion/packageVersion.gateway.d.ts +4 -0
  25. package/dist/entities/packageVersion/packageVersion.gateway.d.ts.map +1 -0
  26. package/dist/entities/packageVersion/packageVersion.gateway.js +2 -0
  27. package/dist/entities/packageVersion/packageVersion.gateway.js.map +1 -0
  28. package/dist/entities/packageVersion/packageVersion.guard.d.ts +7 -0
  29. package/dist/entities/packageVersion/packageVersion.guard.d.ts.map +1 -0
  30. package/dist/entities/packageVersion/packageVersion.guard.js +13 -0
  31. package/dist/entities/packageVersion/packageVersion.guard.js.map +1 -0
  32. package/dist/entities/packageVersion/packageVersion.js +2 -0
  33. package/dist/entities/packageVersion/packageVersion.js.map +1 -0
  34. package/dist/entities/packageVersion/packageVersion.schema.d.ts +12 -0
  35. package/dist/entities/packageVersion/packageVersion.schema.d.ts.map +1 -0
  36. package/dist/entities/packageVersion/packageVersion.schema.js +11 -0
  37. package/dist/entities/packageVersion/packageVersion.schema.js.map +1 -0
  38. package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts +8 -0
  39. package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts.map +1 -0
  40. package/dist/entities/packageVersion/selfUpdateCommand.gateway.js +2 -0
  41. package/dist/entities/packageVersion/selfUpdateCommand.gateway.js.map +1 -0
  42. package/dist/entities/packageVersion/versionCache.gateway.d.ts +7 -0
  43. package/dist/entities/packageVersion/versionCache.gateway.d.ts.map +1 -0
  44. package/dist/entities/packageVersion/versionCache.gateway.js +2 -0
  45. package/dist/entities/packageVersion/versionCache.gateway.js.map +1 -0
  46. package/dist/entities/stats/projectStats.d.ts +36 -0
  47. package/dist/entities/stats/projectStats.d.ts.map +1 -0
  48. package/dist/entities/stats/projectStats.js +2 -0
  49. package/dist/entities/stats/projectStats.js.map +1 -0
  50. package/dist/entities/stats/recalculateBody.guard.d.ts +11 -0
  51. package/dist/entities/stats/recalculateBody.guard.d.ts.map +1 -0
  52. package/dist/entities/stats/recalculateBody.guard.js +9 -0
  53. package/dist/entities/stats/recalculateBody.guard.js.map +1 -0
  54. package/dist/entities/stats/stats.gateway.d.ts +7 -0
  55. package/dist/entities/stats/stats.gateway.d.ts.map +1 -0
  56. package/dist/entities/stats/stats.gateway.js +2 -0
  57. package/dist/entities/stats/stats.gateway.js.map +1 -0
  58. package/dist/entities/tracking/reviewEvent.d.ts +2 -0
  59. package/dist/entities/tracking/reviewEvent.d.ts.map +1 -1
  60. package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
  61. package/dist/frameworks/claude/claudeInvoker.js +15 -1
  62. package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
  63. package/dist/frameworks/scheduler/cleanupScheduler.d.ts +16 -0
  64. package/dist/frameworks/scheduler/cleanupScheduler.d.ts.map +1 -0
  65. package/dist/frameworks/scheduler/cleanupScheduler.js +35 -0
  66. package/dist/frameworks/scheduler/cleanupScheduler.js.map +1 -0
  67. package/dist/interface-adapters/controllers/http/cleanup.routes.d.ts +16 -0
  68. package/dist/interface-adapters/controllers/http/cleanup.routes.d.ts.map +1 -0
  69. package/dist/interface-adapters/controllers/http/cleanup.routes.js +44 -0
  70. package/dist/interface-adapters/controllers/http/cleanup.routes.js.map +1 -0
  71. package/dist/interface-adapters/controllers/http/health.routes.d.ts +3 -1
  72. package/dist/interface-adapters/controllers/http/health.routes.d.ts.map +1 -1
  73. package/dist/interface-adapters/controllers/http/health.routes.js +5 -1
  74. package/dist/interface-adapters/controllers/http/health.routes.js.map +1 -1
  75. package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
  76. package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +13 -2
  77. package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
  78. package/dist/interface-adapters/controllers/http/stats.routes.d.ts +20 -6
  79. package/dist/interface-adapters/controllers/http/stats.routes.d.ts.map +1 -1
  80. package/dist/interface-adapters/controllers/http/stats.routes.js +35 -2
  81. package/dist/interface-adapters/controllers/http/stats.routes.js.map +1 -1
  82. package/dist/interface-adapters/controllers/http/version.routes.d.ts +18 -0
  83. package/dist/interface-adapters/controllers/http/version.routes.d.ts.map +1 -0
  84. package/dist/interface-adapters/controllers/http/version.routes.js +18 -0
  85. package/dist/interface-adapters/controllers/http/version.routes.js.map +1 -0
  86. package/dist/interface-adapters/controllers/webhook/github.controller.d.ts +2 -0
  87. package/dist/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  88. package/dist/interface-adapters/controllers/webhook/github.controller.js +9 -3
  89. package/dist/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  90. package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts +2 -0
  91. package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
  92. package/dist/interface-adapters/controllers/webhook/gitlab.controller.js +17 -5
  93. package/dist/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  94. package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.d.ts +10 -0
  95. package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.d.ts.map +1 -0
  96. package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.js +26 -0
  97. package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.js.map +1 -0
  98. package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.d.ts +10 -0
  99. package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.d.ts.map +1 -0
  100. package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js +28 -0
  101. package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js.map +1 -0
  102. package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.d.ts +7 -0
  103. package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.d.ts.map +1 -0
  104. package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.js +47 -0
  105. package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.js.map +1 -0
  106. package/dist/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts +2 -2
  107. package/dist/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts.map +1 -1
  108. package/dist/interface-adapters/gateways/packageVersion.npm.gateway.d.ts +7 -0
  109. package/dist/interface-adapters/gateways/packageVersion.npm.gateway.d.ts.map +1 -0
  110. package/dist/interface-adapters/gateways/packageVersion.npm.gateway.js +25 -0
  111. package/dist/interface-adapters/gateways/packageVersion.npm.gateway.js.map +1 -0
  112. package/dist/interface-adapters/gateways/reviewLogFile.gateway.d.ts +12 -0
  113. package/dist/interface-adapters/gateways/reviewLogFile.gateway.d.ts.map +1 -0
  114. package/dist/interface-adapters/gateways/reviewLogFile.gateway.js +2 -0
  115. package/dist/interface-adapters/gateways/reviewLogFile.gateway.js.map +1 -0
  116. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts +19 -0
  117. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts.map +1 -0
  118. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js +44 -0
  119. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js.map +1 -0
  120. package/dist/interface-adapters/gateways/stats.gateway.d.ts +1 -6
  121. package/dist/interface-adapters/gateways/stats.gateway.d.ts.map +1 -1
  122. package/dist/interface-adapters/gateways/versionCache.memory.gateway.d.ts +12 -0
  123. package/dist/interface-adapters/gateways/versionCache.memory.gateway.d.ts.map +1 -0
  124. package/dist/interface-adapters/gateways/versionCache.memory.gateway.js +22 -0
  125. package/dist/interface-adapters/gateways/versionCache.memory.gateway.js.map +1 -0
  126. package/dist/interface-adapters/views/dashboard/index.html +359 -40
  127. package/dist/interface-adapters/views/dashboard/modules/cleanup.d.ts +10 -0
  128. package/dist/interface-adapters/views/dashboard/modules/cleanup.d.ts.map +1 -0
  129. package/dist/interface-adapters/views/dashboard/modules/cleanup.js +45 -0
  130. package/dist/interface-adapters/views/dashboard/modules/cleanup.js.map +1 -0
  131. package/dist/interface-adapters/views/dashboard/modules/collapsibleList.d.ts +13 -0
  132. package/dist/interface-adapters/views/dashboard/modules/collapsibleList.d.ts.map +1 -0
  133. package/dist/interface-adapters/views/dashboard/modules/collapsibleList.js +71 -0
  134. package/dist/interface-adapters/views/dashboard/modules/collapsibleList.js.map +1 -0
  135. package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts.map +1 -1
  136. package/dist/interface-adapters/views/dashboard/modules/i18n.js +96 -0
  137. package/dist/interface-adapters/views/dashboard/modules/i18n.js.map +1 -1
  138. package/dist/interface-adapters/views/dashboard/modules/mrSheet.d.ts +25 -0
  139. package/dist/interface-adapters/views/dashboard/modules/mrSheet.d.ts.map +1 -0
  140. package/dist/interface-adapters/views/dashboard/modules/mrSheet.js +414 -0
  141. package/dist/interface-adapters/views/dashboard/modules/mrSheet.js.map +1 -0
  142. package/dist/interface-adapters/views/dashboard/modules/statsCharts.d.ts +35 -0
  143. package/dist/interface-adapters/views/dashboard/modules/statsCharts.d.ts.map +1 -0
  144. package/dist/interface-adapters/views/dashboard/modules/statsCharts.js +476 -0
  145. package/dist/interface-adapters/views/dashboard/modules/statsCharts.js.map +1 -0
  146. package/dist/interface-adapters/views/dashboard/modules/versionUpdate.d.ts +16 -0
  147. package/dist/interface-adapters/views/dashboard/modules/versionUpdate.d.ts.map +1 -0
  148. package/dist/interface-adapters/views/dashboard/modules/versionUpdate.js +54 -0
  149. package/dist/interface-adapters/views/dashboard/modules/versionUpdate.js.map +1 -0
  150. package/dist/interface-adapters/views/dashboard/styles.css +939 -0
  151. package/dist/main/dependencies.d.ts +2 -0
  152. package/dist/main/dependencies.d.ts.map +1 -1
  153. package/dist/main/dependencies.js +2 -0
  154. package/dist/main/dependencies.js.map +1 -1
  155. package/dist/main/routes.d.ts.map +1 -1
  156. package/dist/main/routes.js +55 -2
  157. package/dist/main/routes.js.map +1 -1
  158. package/dist/main/server.d.ts.map +1 -1
  159. package/dist/main/server.js +8 -0
  160. package/dist/main/server.js.map +1 -1
  161. package/dist/main/websocket.d.ts +2 -0
  162. package/dist/main/websocket.d.ts.map +1 -1
  163. package/dist/main/websocket.js +13 -0
  164. package/dist/main/websocket.js.map +1 -1
  165. package/dist/services/statsService.d.ts +8 -32
  166. package/dist/services/statsService.d.ts.map +1 -1
  167. package/dist/services/statsService.js +27 -22
  168. package/dist/services/statsService.js.map +1 -1
  169. package/dist/shared/foundation/commandExecutor.d.ts +2 -0
  170. package/dist/shared/foundation/commandExecutor.d.ts.map +1 -0
  171. package/dist/shared/foundation/commandExecutor.js +2 -0
  172. package/dist/shared/foundation/commandExecutor.js.map +1 -0
  173. package/dist/tests/factories/diffStats.factory.d.ts +5 -0
  174. package/dist/tests/factories/diffStats.factory.d.ts.map +1 -0
  175. package/dist/tests/factories/diffStats.factory.js +11 -0
  176. package/dist/tests/factories/diffStats.factory.js.map +1 -0
  177. package/dist/tests/factories/packageVersion.factory.d.ts +7 -0
  178. package/dist/tests/factories/packageVersion.factory.d.ts.map +1 -0
  179. package/dist/tests/factories/packageVersion.factory.js +18 -0
  180. package/dist/tests/factories/packageVersion.factory.js.map +1 -0
  181. package/dist/tests/factories/projectStats.factory.d.ts +3 -1
  182. package/dist/tests/factories/projectStats.factory.d.ts.map +1 -1
  183. package/dist/tests/factories/projectStats.factory.js +17 -3
  184. package/dist/tests/factories/projectStats.factory.js.map +1 -1
  185. package/dist/tests/stubs/diffStatsFetch.stub.d.ts +11 -0
  186. package/dist/tests/stubs/diffStatsFetch.stub.d.ts.map +1 -0
  187. package/dist/tests/stubs/diffStatsFetch.stub.js +19 -0
  188. package/dist/tests/stubs/diffStatsFetch.stub.js.map +1 -0
  189. package/dist/tests/stubs/packageVersion.stub.d.ts +7 -0
  190. package/dist/tests/stubs/packageVersion.stub.d.ts.map +1 -0
  191. package/dist/tests/stubs/packageVersion.stub.js +10 -0
  192. package/dist/tests/stubs/packageVersion.stub.js.map +1 -0
  193. package/dist/tests/stubs/reviewLogFile.stub.d.ts +15 -0
  194. package/dist/tests/stubs/reviewLogFile.stub.d.ts.map +1 -0
  195. package/dist/tests/stubs/reviewLogFile.stub.js +35 -0
  196. package/dist/tests/stubs/reviewLogFile.stub.js.map +1 -0
  197. package/dist/tests/stubs/selfUpdate.stub.d.ts +12 -0
  198. package/dist/tests/stubs/selfUpdate.stub.d.ts.map +1 -0
  199. package/dist/tests/stubs/selfUpdate.stub.js +18 -0
  200. package/dist/tests/stubs/selfUpdate.stub.js.map +1 -0
  201. package/dist/tests/stubs/stats.stub.d.ts +2 -2
  202. package/dist/tests/stubs/stats.stub.d.ts.map +1 -1
  203. package/dist/tests/stubs/versionCache.stub.d.ts +11 -0
  204. package/dist/tests/stubs/versionCache.stub.d.ts.map +1 -0
  205. package/dist/tests/stubs/versionCache.stub.js +18 -0
  206. package/dist/tests/stubs/versionCache.stub.js.map +1 -0
  207. package/dist/tests/units/config/projectConfig.test.js +60 -1
  208. package/dist/tests/units/config/projectConfig.test.js.map +1 -1
  209. package/dist/tests/units/entities/backfill/backfillProgress.test.d.ts +2 -0
  210. package/dist/tests/units/entities/backfill/backfillProgress.test.d.ts.map +1 -0
  211. package/dist/tests/units/entities/backfill/backfillProgress.test.js +40 -0
  212. package/dist/tests/units/entities/backfill/backfillProgress.test.js.map +1 -0
  213. package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.d.ts +2 -0
  214. package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.d.ts.map +1 -0
  215. package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.js +47 -0
  216. package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.js.map +1 -0
  217. package/dist/tests/units/entities/diffStats/diffStats.test.d.ts +2 -0
  218. package/dist/tests/units/entities/diffStats/diffStats.test.d.ts.map +1 -0
  219. package/dist/tests/units/entities/diffStats/diffStats.test.js +27 -0
  220. package/dist/tests/units/entities/diffStats/diffStats.test.js.map +1 -0
  221. package/dist/tests/units/entities/packageVersion/packageVersion.test.d.ts +2 -0
  222. package/dist/tests/units/entities/packageVersion/packageVersion.test.d.ts.map +1 -0
  223. package/dist/tests/units/entities/packageVersion/packageVersion.test.js +154 -0
  224. package/dist/tests/units/entities/packageVersion/packageVersion.test.js.map +1 -0
  225. package/dist/tests/units/factories/packageVersion.factory.test.d.ts +2 -0
  226. package/dist/tests/units/factories/packageVersion.factory.test.d.ts.map +1 -0
  227. package/dist/tests/units/factories/packageVersion.factory.test.js +37 -0
  228. package/dist/tests/units/factories/packageVersion.factory.test.js.map +1 -0
  229. package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.d.ts +2 -0
  230. package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.d.ts.map +1 -0
  231. package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.js +74 -0
  232. package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.js.map +1 -0
  233. package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.d.ts +2 -0
  234. package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.d.ts.map +1 -0
  235. package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.js +62 -0
  236. package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.js.map +1 -0
  237. package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.d.ts +2 -0
  238. package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.d.ts.map +1 -0
  239. package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js +96 -0
  240. package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js.map +1 -0
  241. package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts +2 -0
  242. package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts.map +1 -0
  243. package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js +82 -0
  244. package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js.map +1 -0
  245. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.d.ts +2 -0
  246. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.d.ts.map +1 -0
  247. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js +83 -0
  248. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js.map +1 -0
  249. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +3 -0
  250. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  251. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
  252. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  253. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.d.ts +2 -0
  254. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.d.ts.map +1 -0
  255. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.js +63 -0
  256. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.js.map +1 -0
  257. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.d.ts +2 -0
  258. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.d.ts.map +1 -0
  259. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.js +94 -0
  260. package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.js.map +1 -0
  261. package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.d.ts +2 -0
  262. package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.d.ts.map +1 -0
  263. package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.js +42 -0
  264. package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.js.map +1 -0
  265. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.d.ts +2 -0
  266. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.d.ts.map +1 -0
  267. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.js +65 -0
  268. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.js.map +1 -0
  269. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.d.ts +2 -0
  270. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.d.ts.map +1 -0
  271. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.js +63 -0
  272. package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.js.map +1 -0
  273. package/dist/tests/units/interface-adapters/gateways/reviewRequestTracking.gateway.test.js +2 -0
  274. package/dist/tests/units/interface-adapters/gateways/reviewRequestTracking.gateway.test.js.map +1 -1
  275. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.d.ts +2 -0
  276. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.d.ts.map +1 -0
  277. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js +33 -0
  278. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js.map +1 -0
  279. package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.d.ts +2 -0
  280. package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.d.ts.map +1 -0
  281. package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.js +38 -0
  282. package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.js.map +1 -0
  283. package/dist/tests/units/services/statsService.diffStats.test.d.ts +2 -0
  284. package/dist/tests/units/services/statsService.diffStats.test.d.ts.map +1 -0
  285. package/dist/tests/units/services/statsService.diffStats.test.js +61 -0
  286. package/dist/tests/units/services/statsService.diffStats.test.js.map +1 -0
  287. package/dist/tests/units/stubs/packageVersion.stub.test.d.ts +2 -0
  288. package/dist/tests/units/stubs/packageVersion.stub.test.d.ts.map +1 -0
  289. package/dist/tests/units/stubs/packageVersion.stub.test.js +20 -0
  290. package/dist/tests/units/stubs/packageVersion.stub.test.js.map +1 -0
  291. package/dist/tests/units/stubs/selfUpdate.stub.test.d.ts +2 -0
  292. package/dist/tests/units/stubs/selfUpdate.stub.test.d.ts.map +1 -0
  293. package/dist/tests/units/stubs/selfUpdate.stub.test.js +30 -0
  294. package/dist/tests/units/stubs/selfUpdate.stub.test.js.map +1 -0
  295. package/dist/tests/units/stubs/versionCache.stub.test.d.ts +2 -0
  296. package/dist/tests/units/stubs/versionCache.stub.test.d.ts.map +1 -0
  297. package/dist/tests/units/stubs/versionCache.stub.test.js +34 -0
  298. package/dist/tests/units/stubs/versionCache.stub.test.js.map +1 -0
  299. package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.d.ts +2 -0
  300. package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.d.ts.map +1 -0
  301. package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.js +83 -0
  302. package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.js.map +1 -0
  303. package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.d.ts +2 -0
  304. package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.d.ts.map +1 -0
  305. package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.js +186 -0
  306. package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.js.map +1 -0
  307. package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.d.ts +2 -0
  308. package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.d.ts.map +1 -0
  309. package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.js +130 -0
  310. package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.js.map +1 -0
  311. package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.d.ts +2 -0
  312. package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.d.ts.map +1 -0
  313. package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.js +138 -0
  314. package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.js.map +1 -0
  315. package/dist/tests/units/usecases/tracking/recordReviewCompletion.usecase.test.js +31 -2
  316. package/dist/tests/units/usecases/tracking/recordReviewCompletion.usecase.test.js.map +1 -1
  317. package/dist/tests/units/usecases/version/checkVersion.usecase.test.d.ts +2 -0
  318. package/dist/tests/units/usecases/version/checkVersion.usecase.test.d.ts.map +1 -0
  319. package/dist/tests/units/usecases/version/checkVersion.usecase.test.js +63 -0
  320. package/dist/tests/units/usecases/version/checkVersion.usecase.test.js.map +1 -0
  321. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.d.ts +2 -0
  322. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.d.ts.map +1 -0
  323. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js +21 -0
  324. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js.map +1 -0
  325. package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.d.ts +13 -0
  326. package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.d.ts.map +1 -0
  327. package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.js +41 -0
  328. package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.js.map +1 -0
  329. package/dist/usecases/stats/backfillDiffStats.usecase.d.ts +18 -0
  330. package/dist/usecases/stats/backfillDiffStats.usecase.d.ts.map +1 -0
  331. package/dist/usecases/stats/backfillDiffStats.usecase.js +43 -0
  332. package/dist/usecases/stats/backfillDiffStats.usecase.js.map +1 -0
  333. package/dist/usecases/stats/recalculateProjectStats.usecase.d.ts +7 -0
  334. package/dist/usecases/stats/recalculateProjectStats.usecase.d.ts.map +1 -0
  335. package/dist/usecases/stats/recalculateProjectStats.usecase.js +47 -0
  336. package/dist/usecases/stats/recalculateProjectStats.usecase.js.map +1 -0
  337. package/dist/usecases/stats/recalculateWithBackfill.usecase.d.ts +22 -0
  338. package/dist/usecases/stats/recalculateWithBackfill.usecase.d.ts.map +1 -0
  339. package/dist/usecases/stats/recalculateWithBackfill.usecase.js +33 -0
  340. package/dist/usecases/stats/recalculateWithBackfill.usecase.js.map +1 -0
  341. package/dist/usecases/tracking/recordReviewCompletion.usecase.d.ts +2 -0
  342. package/dist/usecases/tracking/recordReviewCompletion.usecase.d.ts.map +1 -1
  343. package/dist/usecases/tracking/recordReviewCompletion.usecase.js +1 -0
  344. package/dist/usecases/tracking/recordReviewCompletion.usecase.js.map +1 -1
  345. package/dist/usecases/version/checkVersion.usecase.d.ts +13 -0
  346. package/dist/usecases/version/checkVersion.usecase.d.ts.map +1 -0
  347. package/dist/usecases/version/checkVersion.usecase.js +20 -0
  348. package/dist/usecases/version/checkVersion.usecase.js.map +1 -0
  349. package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts +7 -0
  350. package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts.map +1 -0
  351. package/dist/usecases/version/triggerSelfUpdate.usecase.js +9 -0
  352. package/dist/usecases/version/triggerSelfUpdate.usecase.js.map +1 -0
  353. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.7.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.6.0...reviewflow-v3.7.0) (2026-03-15)
9
+
10
+
11
+ ### Added
12
+
13
+ * capture git diff stats per review (commits, additions, deletions) ([111b77f](https://github.com/DGouron/review-flow/commit/111b77f921a97df1ab9ffeea9cf6fee638cd4246))
14
+ * capture git diff stats per review (commits, additions, deletions) ([fd4d753](https://github.com/DGouron/review-flow/commit/fd4d753a715aa25c73c8baa4c7c9824a0d793f22)), closes [#47](https://github.com/DGouron/review-flow/issues/47)
15
+ * **cleanup:** add review file retention policy with scheduled cleanup ([c2baea8](https://github.com/DGouron/review-flow/commit/c2baea8856bb0be72b46a99d68f724bf7b230215))
16
+ * **cleanup:** review file retention policy with scheduled cleanup ([56f4e6c](https://github.com/DGouron/review-flow/commit/56f4e6c32c9f54b8e7f673177a5e67cadfc05a10))
17
+ * **dashboard:** add version update checker with self-update capability ([715d8ae](https://github.com/DGouron/review-flow/commit/715d8aed7ff39cb1f86edf0a8e33814c2fa728fc))
18
+ * **dashboard:** canvas charts and animated counters in stats section ([abcf1af](https://github.com/DGouron/review-flow/commit/abcf1af3d6b07533aed1f0db1f834edecb44b426))
19
+ * **dashboard:** collapsible lists for long MR lanes ([eba2441](https://github.com/DGouron/review-flow/commit/eba2441ba0f5768c44fd76979fe62641d439517a))
20
+ * **dashboard:** diff stats in MR sheet + score trend per developer ([9235e0c](https://github.com/DGouron/review-flow/commit/9235e0c88392c2521edb0b2015387024843f925a))
21
+ * **dashboard:** logs open in side sheet instead of inline section ([7737782](https://github.com/DGouron/review-flow/commit/773778259561f3d5b1108316b8d68d2acc06344e))
22
+ * **dashboard:** logs sheet takes full height with sticky clear button ([632e2f2](https://github.com/DGouron/review-flow/commit/632e2f20f1ecb9f6377d77dd80ce5c91dd98b851))
23
+ * **dashboard:** MR detail side sheet with canvas graphs ([bbb6065](https://github.com/DGouron/review-flow/commit/bbb6065945eda10a7092d9c304e764d88fa2a372))
24
+ * **dashboard:** sticky action footer in MR sheet with approve button ([48041fe](https://github.com/DGouron/review-flow/commit/48041fe5bec7c43a43433a276c8147b9b6f96c4d))
25
+ * **dashboard:** version update checker with self-update ([37f7ee4](https://github.com/DGouron/review-flow/commit/37f7ee48fff96adc69a64a9c44998a01681eca79))
26
+ * stats recalculate button with diff stats backfill ([fa04c7c](https://github.com/DGouron/review-flow/commit/fa04c7c7f7be15c6a2ba416c9cc991bd5c45248a))
27
+ * stats recalculate button with diff stats backfill ([7df16cf](https://github.com/DGouron/review-flow/commit/7df16cf8a360d814713c4c3f2281dc410f880b2f))
28
+
29
+
30
+ ### Fixed
31
+
32
+ * address auto-review findings (null over undefined, port→gateway naming) ([c81937a](https://github.com/DGouron/review-flow/commit/c81937a5b9f64225077cc981d5b5c56c0f73ffb1))
33
+ * address PR [#124](https://github.com/DGouron/review-flow/issues/124) review — architecture and code quality ([2b9b577](https://github.com/DGouron/review-flow/commit/2b9b5775361bd521a62ef86e692f6e29357c2c4f))
34
+ * **dashboard:** auto-populate project selector from server config ([3c68e22](https://github.com/DGouron/review-flow/commit/3c68e22321660578b0805e74a61f5553b9e75dca))
35
+
8
36
  ## [3.6.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.5.0...reviewflow-v3.6.0) (2026-03-14)
9
37
 
10
38
 
@@ -11,6 +11,7 @@ export interface ProjectConfig {
11
11
  reviewSkill: string;
12
12
  reviewFollowupSkill: string;
13
13
  language: Language;
14
+ retentionDays: number;
14
15
  agents?: AgentDefinition[];
15
16
  followupAgents?: AgentDefinition[];
16
17
  }
@@ -32,5 +33,6 @@ export declare function getProjectLanguage(localPath: string): Language;
32
33
  /**
33
34
  * Get followup agents from project config or undefined for defaults
34
35
  */
36
+ export declare function getProjectRetentionDays(localPath: string): number;
35
37
  export declare function getFollowupAgents(localPath: string): AgentDefinition[] | undefined;
36
38
  //# sourceMappingURL=projectConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projectConfig.d.ts","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;CACpC;AA0BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CA8C9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS,CAOjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAO9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS,CAOlF"}
1
+ {"version":3,"file":"projectConfig.d.ts","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;CACpC;AAmCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CA+C9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS,CAOjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAO9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS,CAOlF"}
@@ -3,6 +3,13 @@ import { join } from 'node:path';
3
3
  /**
4
4
  * Validate agents array structure
5
5
  */
6
+ const DEFAULT_RETENTION_DAYS = 14;
7
+ function parseRetentionDays(value) {
8
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 1) {
9
+ return value;
10
+ }
11
+ return DEFAULT_RETENTION_DAYS;
12
+ }
6
13
  function validateAgents(agents) {
7
14
  if (!Array.isArray(agents)) {
8
15
  return false;
@@ -59,6 +66,7 @@ export function loadProjectConfig(localPath) {
59
66
  reviewSkill: String(parsed.reviewSkill),
60
67
  reviewFollowupSkill: String(parsed.reviewFollowupSkill),
61
68
  language: parsed.language === 'fr' ? 'fr' : 'en',
69
+ retentionDays: parseRetentionDays(parsed.retentionDays),
62
70
  agents: parsed.agents,
63
71
  followupAgents: parsed.followupAgents,
64
72
  };
@@ -90,6 +98,15 @@ export function getProjectLanguage(localPath) {
90
98
  /**
91
99
  * Get followup agents from project config or undefined for defaults
92
100
  */
101
+ export function getProjectRetentionDays(localPath) {
102
+ try {
103
+ const config = loadProjectConfig(localPath);
104
+ return config?.retentionDays ?? DEFAULT_RETENTION_DAYS;
105
+ }
106
+ catch {
107
+ return DEFAULT_RETENTION_DAYS;
108
+ }
109
+ }
93
110
  export function getFollowupAgents(localPath) {
94
111
  try {
95
112
  const config = loadProjectConfig(localPath);
@@ -1 +1 @@
1
- {"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type BackfillProgress = {
2
+ total: number;
3
+ completed: number;
4
+ failed: number;
5
+ status: 'idle' | 'running' | 'completed';
6
+ };
7
+ //# sourceMappingURL=backfillProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfillProgress.d.ts","sourceRoot":"","sources":["../../../src/entities/backfill/backfillProgress.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;CAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backfillProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfillProgress.js","sourceRoot":"","sources":["../../../src/entities/backfill/backfillProgress.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export declare class RetentionPolicy {
2
+ private readonly retentionDays;
3
+ private constructor();
4
+ static create(days?: number): RetentionPolicy;
5
+ get days(): number;
6
+ isExpired(fileDate: Date, now?: Date): boolean;
7
+ }
8
+ //# sourceMappingURL=retentionPolicy.valueObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retentionPolicy.valueObject.d.ts","sourceRoot":"","sources":["../../../src/entities/cleanup/retentionPolicy.valueObject.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IACN,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAlD,OAAO;IAEP,MAAM,CAAC,MAAM,CAAC,IAAI,SAAK,GAAG,eAAe;IAOzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO;CAI3D"}
@@ -0,0 +1,21 @@
1
+ const MILLISECONDS_PER_DAY = 86_400_000;
2
+ export class RetentionPolicy {
3
+ retentionDays;
4
+ constructor(retentionDays) {
5
+ this.retentionDays = retentionDays;
6
+ }
7
+ static create(days = 14) {
8
+ if (!Number.isInteger(days) || days < 1) {
9
+ throw new Error('Retention days must be a positive integer (minimum 1)');
10
+ }
11
+ return new RetentionPolicy(days);
12
+ }
13
+ get days() {
14
+ return this.retentionDays;
15
+ }
16
+ isExpired(fileDate, now = new Date()) {
17
+ const cutoff = new Date(now.getTime() - this.retentionDays * MILLISECONDS_PER_DAY);
18
+ return fileDate.getTime() < cutoff.getTime();
19
+ }
20
+ }
21
+ //# sourceMappingURL=retentionPolicy.valueObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retentionPolicy.valueObject.js","sourceRoot":"","sources":["../../../src/entities/cleanup/retentionPolicy.valueObject.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAExC,MAAM,OAAO,eAAe;IACW;IAArC,YAAqC,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;IAAG,CAAC;IAE9D,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,SAAS,CAAC,QAAc,EAAE,MAAY,IAAI,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,CAAC;QACnF,OAAO,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export type DiffStats = {
2
+ commitsCount: number;
3
+ additions: number;
4
+ deletions: number;
5
+ };
6
+ //# sourceMappingURL=diffStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffStats.d.ts","sourceRoot":"","sources":["../../../src/entities/diffStats/diffStats.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diffStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffStats.js","sourceRoot":"","sources":["../../../src/entities/diffStats/diffStats.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { DiffStats } from '../../entities/diffStats/diffStats.js';
2
+ export interface DiffStatsFetchGateway {
3
+ fetchDiffStats(projectPath: string, mergeRequestNumber: number): DiffStats | null;
4
+ }
5
+ //# sourceMappingURL=diffStatsFetch.gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffStatsFetch.gateway.d.ts","sourceRoot":"","sources":["../../../src/entities/diffStats/diffStatsFetch.gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CACnF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diffStatsFetch.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffStatsFetch.gateway.js","sourceRoot":"","sources":["../../../src/entities/diffStats/diffStatsFetch.gateway.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ export type VersionCheckResult = {
2
+ currentVersion: string;
3
+ latestVersion: string | null;
4
+ updateAvailable: boolean;
5
+ checkedAt: string;
6
+ };
7
+ export type SelfUpdateResult = {
8
+ status: 'started';
9
+ } | {
10
+ status: 'updated';
11
+ previousVersion: string;
12
+ newVersion: string;
13
+ } | {
14
+ status: 'failed';
15
+ error: string;
16
+ };
17
+ export type UpdateStatus = 'idle' | 'checking' | 'updating' | 'restarting' | 'failed';
18
+ //# sourceMappingURL=packageVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,OAAO,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ export interface PackageVersionGateway {
2
+ fetchLatestVersion(): Promise<string | null>;
3
+ }
4
+ //# sourceMappingURL=packageVersion.gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.gateway.d.ts","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.gateway.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=packageVersion.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.gateway.js","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.gateway.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { type NpmRegistryResponse } from '../../entities/packageVersion/packageVersion.schema.js';
2
+ export declare function parseNpmRegistryResponse(data: unknown): NpmRegistryResponse;
3
+ export declare function safeParseNpmRegistryResponse(data: unknown): import("zod").ZodSafeParseResult<{
4
+ version: string;
5
+ }>;
6
+ export declare function isValidNpmRegistryResponse(data: unknown): data is NpmRegistryResponse;
7
+ //# sourceMappingURL=packageVersion.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.guard.d.ts","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.guard.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AAIxH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,CAE3E;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO;;GAEzD;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAErF"}
@@ -0,0 +1,13 @@
1
+ import { createGuard } from '../../shared/foundation/guard.base.js';
2
+ import { npmRegistryResponseSchema } from '../../entities/packageVersion/packageVersion.schema.js';
3
+ const npmRegistryResponseGuard = createGuard(npmRegistryResponseSchema);
4
+ export function parseNpmRegistryResponse(data) {
5
+ return npmRegistryResponseGuard.parse(data);
6
+ }
7
+ export function safeParseNpmRegistryResponse(data) {
8
+ return npmRegistryResponseGuard.safeParse(data);
9
+ }
10
+ export function isValidNpmRegistryResponse(data) {
11
+ return npmRegistryResponseGuard.isValid(data);
12
+ }
13
+ //# sourceMappingURL=packageVersion.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.guard.js","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAA4B,MAAM,oDAAoD,CAAA;AAExH,MAAM,wBAAwB,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAA;AAEvE,MAAM,UAAU,wBAAwB,CAAC,IAAa;IACpD,OAAO,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAa;IACxD,OAAO,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACtD,OAAO,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=packageVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ export declare const npmRegistryResponseSchema: z.ZodObject<{
3
+ version: z.ZodString;
4
+ }, z.core.$strip>;
5
+ export type NpmRegistryResponse = z.infer<typeof npmRegistryResponseSchema>;
6
+ export declare const versionCheckResultSchema: z.ZodObject<{
7
+ currentVersion: z.ZodString;
8
+ latestVersion: z.ZodNullable<z.ZodString>;
9
+ updateAvailable: z.ZodBoolean;
10
+ checkedAt: z.ZodString;
11
+ }, z.core.$strip>;
12
+ //# sourceMappingURL=packageVersion.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.schema.d.ts","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,yBAAyB;;iBAEpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,wBAAwB;;;;;iBAKnC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ export const npmRegistryResponseSchema = z.object({
3
+ version: z.string(),
4
+ });
5
+ export const versionCheckResultSchema = z.object({
6
+ currentVersion: z.string(),
7
+ latestVersion: z.string().nullable(),
8
+ updateAvailable: z.boolean(),
9
+ checkedAt: z.string(),
10
+ });
11
+ //# sourceMappingURL=packageVersion.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageVersion.schema.js","sourceRoot":"","sources":["../../../src/entities/packageVersion/packageVersion.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ export interface SelfUpdateCommandPort {
2
+ runGlobalUpdate(): Promise<{
3
+ success: boolean;
4
+ error: string | null;
5
+ }>;
6
+ restartDaemon(): Promise<void>;
7
+ }
8
+ //# sourceMappingURL=selfUpdateCommand.gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selfUpdateCommand.gateway.d.ts","sourceRoot":"","sources":["../../../src/entities/packageVersion/selfUpdateCommand.gateway.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,eAAe,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;IACtE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=selfUpdateCommand.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selfUpdateCommand.gateway.js","sourceRoot":"","sources":["../../../src/entities/packageVersion/selfUpdateCommand.gateway.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { VersionCheckResult } from '../../entities/packageVersion/packageVersion.js';
2
+ export interface VersionCachePort {
3
+ get(): VersionCheckResult | null;
4
+ set(result: VersionCheckResult): void;
5
+ isExpired(): boolean;
6
+ }
7
+ //# sourceMappingURL=versionCache.gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionCache.gateway.d.ts","sourceRoot":"","sources":["../../../src/entities/packageVersion/versionCache.gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAErF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,IAAI,kBAAkB,GAAG,IAAI,CAAA;IAChC,GAAG,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACrC,SAAS,IAAI,OAAO,CAAA;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=versionCache.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionCache.gateway.js","sourceRoot":"","sources":["../../../src/entities/packageVersion/versionCache.gateway.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { DiffStats } from '../../entities/diffStats/diffStats.js';
2
+ /**
3
+ * Statistics for a single code review, including score, issue counts,
4
+ * and optional diff-level metrics (additions/deletions).
5
+ */
6
+ export interface ReviewStats {
7
+ id: string;
8
+ timestamp: string;
9
+ mrNumber: number;
10
+ duration: number;
11
+ score: number | null;
12
+ blocking: number;
13
+ warnings: number;
14
+ suggestions?: number;
15
+ assignedBy?: string;
16
+ diffStats?: DiffStats | null;
17
+ }
18
+ /**
19
+ * Aggregated statistics for all reviews in a project, including
20
+ * totals, averages, trends data, and diff-level aggregates.
21
+ */
22
+ export interface ProjectStats {
23
+ totalReviews: number;
24
+ totalDuration: number;
25
+ averageScore: number | null;
26
+ averageDuration: number;
27
+ totalBlocking: number;
28
+ totalWarnings: number;
29
+ reviews: ReviewStats[];
30
+ lastUpdated: string;
31
+ totalAdditions: number;
32
+ totalDeletions: number;
33
+ averageAdditions: number | null;
34
+ averageDeletions: number | null;
35
+ }
36
+ //# sourceMappingURL=projectStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectStats.d.ts","sourceRoot":"","sources":["../../../src/entities/stats/projectStats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=projectStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectStats.js","sourceRoot":"","sources":["../../../src/entities/stats/projectStats.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ export declare const recalculateBodySchema: z.ZodObject<{
3
+ path: z.ZodOptional<z.ZodString>;
4
+ backfill: z.ZodOptional<z.ZodBoolean>;
5
+ }, z.core.$strip>;
6
+ export type RecalculateBody = z.infer<typeof recalculateBodySchema>;
7
+ export declare const safeParseRecalculateBody: (input: unknown) => z.ZodSafeParseResult<{
8
+ path?: string | undefined;
9
+ backfill?: boolean | undefined;
10
+ }>;
11
+ //# sourceMappingURL=recalculateBody.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recalculateBody.guard.d.ts","sourceRoot":"","sources":["../../../src/entities/stats/recalculateBody.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,eAAO,MAAM,wBAAwB;;;EAAiC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ import { createGuard } from '../../shared/foundation/guard.base.js';
3
+ export const recalculateBodySchema = z.object({
4
+ path: z.string().optional(),
5
+ backfill: z.boolean().optional(),
6
+ });
7
+ const recalculateBodyGuard = createGuard(recalculateBodySchema);
8
+ export const safeParseRecalculateBody = recalculateBodyGuard.safeParse;
9
+ //# sourceMappingURL=recalculateBody.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recalculateBody.guard.js","sourceRoot":"","sources":["../../../src/entities/stats/recalculateBody.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIH,MAAM,oBAAoB,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProjectStats } from '../../entities/stats/projectStats.js';
2
+ export interface StatsGateway {
3
+ loadProjectStats(projectPath: string): ProjectStats | null;
4
+ saveProjectStats(projectPath: string, stats: ProjectStats): void;
5
+ statsFileExists(projectPath: string): boolean;
6
+ }
7
+ //# sourceMappingURL=stats.gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.gateway.d.ts","sourceRoot":"","sources":["../../../src/entities/stats/stats.gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IAC3D,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACjE,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stats.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.gateway.js","sourceRoot":"","sources":["../../../src/entities/stats/stats.gateway.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import type { DiffStats } from '../../entities/diffStats/diffStats.js';
1
2
  export interface ReviewEvent {
2
3
  type: 'review' | 'followup';
3
4
  timestamp: string;
@@ -8,5 +9,6 @@ export interface ReviewEvent {
8
9
  suggestions: number;
9
10
  threadsClosed: number;
10
11
  threadsOpened: number;
12
+ diffStats: DiffStats | null;
11
13
  }
12
14
  //# sourceMappingURL=reviewEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reviewEvent.d.ts","sourceRoot":"","sources":["../../../src/entities/tracking/reviewEvent.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"reviewEvent.d.ts","sourceRoot":"","sources":["../../../src/entities/tracking/reviewEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"claudeInvoker.d.ts","sourceRoot":"","sources":["../../../src/frameworks/claude/claudeInvoker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAc1F,wBAAgB,oBAAoB,IAAI,MAAM,CAa7C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAuBpD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAU3C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASrD;AAOD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;AA+GzF;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAoU3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,IAAI,CAiBN"}
1
+ {"version":3,"file":"claudeInvoker.d.ts","sourceRoot":"","sources":["../../../src/frameworks/claude/claudeInvoker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAmB1F,wBAAgB,oBAAoB,IAAI,MAAM,CAa7C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAuBpD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAU3C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASrD;AAOD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;AA+GzF;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA8U3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,IAAI,CAiBN"}
@@ -9,6 +9,10 @@ import { getProjectAgents, getFollowupAgents } from '../../config/projectConfig.
9
9
  import { addReviewStats } from '../../services/statsService.js';
10
10
  import { FileSystemReviewRequestTrackingGateway } from '../../interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.js';
11
11
  import { ProjectStatsCalculator } from '../../interface-adapters/presenters/projectStats.calculator.js';
12
+ import { GitLabDiffStatsFetchGateway } from '../../interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js';
13
+ import { GitHubDiffStatsFetchGateway } from '../../interface-adapters/gateways/diffStatsFetch.github.gateway.js';
14
+ import { defaultGitLabExecutor } from '../../interface-adapters/gateways/threadFetch.gitlab.gateway.js';
15
+ import { defaultGitHubExecutor } from '../../interface-adapters/gateways/threadFetch.github.gateway.js';
12
16
  import { resolveClaudePath } from '../../shared/services/claudePathResolver.js';
13
17
  import { getJobContextFilePath } from '../../shared/services/mcpJobContext.js';
14
18
  import { buildLanguageDirective } from '../../frameworks/claude/languageDirective.js';
@@ -452,7 +456,17 @@ export async function invokeClaudeReview(job, logger, onProgress, signal) {
452
456
  const trackingGateway = new FileSystemReviewRequestTrackingGateway(new ProjectStatsCalculator());
453
457
  const mrDetails = trackingGateway.getById(job.localPath, mrId);
454
458
  const assignedBy = mrDetails?.assignment?.username;
455
- const reviewStats = addReviewStats(job.localPath, job.mrNumber, durationMs, stdout, assignedBy);
459
+ let diffStats = null;
460
+ try {
461
+ const diffStatsFetchGateway = job.platform === 'github'
462
+ ? new GitHubDiffStatsFetchGateway(defaultGitHubExecutor)
463
+ : new GitLabDiffStatsFetchGateway(defaultGitLabExecutor);
464
+ diffStats = diffStatsFetchGateway.fetchDiffStats(job.projectPath, job.mrNumber);
465
+ }
466
+ catch {
467
+ logger.warn({ jobId: job.id }, 'Failed to fetch diff stats, continuing without');
468
+ }
469
+ const reviewStats = addReviewStats(job.localPath, job.mrNumber, durationMs, stdout, assignedBy, diffStats);
456
470
  logger.info({ reviewStats }, 'Stats de review enregistrées');
457
471
  }
458
472
  catch (statsError) {