reviewflow 3.7.0 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +28 -0
  3. package/dist/entities/insight/aiInsight.d.ts +6 -0
  4. package/dist/entities/insight/aiInsight.d.ts.map +1 -0
  5. package/dist/entities/insight/aiInsight.js +2 -0
  6. package/dist/entities/insight/aiInsight.js.map +1 -0
  7. package/dist/entities/insight/aiInsight.schema.d.ts +55 -0
  8. package/dist/entities/insight/aiInsight.schema.d.ts.map +1 -0
  9. package/dist/entities/insight/aiInsight.schema.js +25 -0
  10. package/dist/entities/insight/aiInsight.schema.js.map +1 -0
  11. package/dist/entities/insight/developerInsight.d.ts +8 -0
  12. package/dist/entities/insight/developerInsight.d.ts.map +1 -0
  13. package/dist/entities/insight/developerInsight.guard.d.ts +221 -0
  14. package/dist/entities/insight/developerInsight.guard.d.ts.map +1 -0
  15. package/dist/entities/insight/developerInsight.guard.js +13 -0
  16. package/dist/entities/insight/developerInsight.guard.js.map +1 -0
  17. package/dist/entities/insight/developerInsight.js +2 -0
  18. package/dist/entities/insight/developerInsight.js.map +1 -0
  19. package/dist/entities/insight/developerInsight.schema.d.ts +157 -0
  20. package/dist/entities/insight/developerInsight.schema.d.ts.map +1 -0
  21. package/dist/entities/insight/developerInsight.schema.js +43 -0
  22. package/dist/entities/insight/developerInsight.schema.js.map +1 -0
  23. package/dist/entities/insight/developerTitle.d.ts +12 -0
  24. package/dist/entities/insight/developerTitle.d.ts.map +1 -0
  25. package/dist/entities/insight/developerTitle.js +11 -0
  26. package/dist/entities/insight/developerTitle.js.map +1 -0
  27. package/dist/entities/insight/insightCategory.d.ts +10 -0
  28. package/dist/entities/insight/insightCategory.d.ts.map +1 -0
  29. package/dist/entities/insight/insightCategory.js +4 -0
  30. package/dist/entities/insight/insightCategory.js.map +1 -0
  31. package/dist/entities/insight/insightTrend.d.ts +9 -0
  32. package/dist/entities/insight/insightTrend.d.ts.map +1 -0
  33. package/dist/entities/insight/insightTrend.js +4 -0
  34. package/dist/entities/insight/insightTrend.js.map +1 -0
  35. package/dist/entities/insight/insights.gateway.d.ts +6 -0
  36. package/dist/entities/insight/insights.gateway.d.ts.map +1 -0
  37. package/dist/entities/insight/insights.gateway.js +2 -0
  38. package/dist/entities/insight/insights.gateway.js.map +1 -0
  39. package/dist/entities/insight/persistedInsightsData.d.ts +5 -0
  40. package/dist/entities/insight/persistedInsightsData.d.ts.map +1 -0
  41. package/dist/entities/insight/persistedInsightsData.guard.d.ts +271 -0
  42. package/dist/entities/insight/persistedInsightsData.guard.d.ts.map +1 -0
  43. package/dist/entities/insight/persistedInsightsData.guard.js +13 -0
  44. package/dist/entities/insight/persistedInsightsData.guard.js.map +1 -0
  45. package/dist/entities/insight/persistedInsightsData.js +2 -0
  46. package/dist/entities/insight/persistedInsightsData.js.map +1 -0
  47. package/dist/entities/insight/persistedInsightsData.schema.d.ts +84 -0
  48. package/dist/entities/insight/persistedInsightsData.schema.d.ts.map +1 -0
  49. package/dist/entities/insight/persistedInsightsData.schema.js +40 -0
  50. package/dist/entities/insight/persistedInsightsData.schema.js.map +1 -0
  51. package/dist/entities/insight/teamInsight.d.ts +5 -0
  52. package/dist/entities/insight/teamInsight.d.ts.map +1 -0
  53. package/dist/entities/insight/teamInsight.guard.d.ts +71 -0
  54. package/dist/entities/insight/teamInsight.guard.d.ts.map +1 -0
  55. package/dist/entities/insight/teamInsight.guard.js +13 -0
  56. package/dist/entities/insight/teamInsight.guard.js.map +1 -0
  57. package/dist/entities/insight/teamInsight.js +2 -0
  58. package/dist/entities/insight/teamInsight.js.map +1 -0
  59. package/dist/entities/insight/teamInsight.schema.d.ts +31 -0
  60. package/dist/entities/insight/teamInsight.schema.d.ts.map +1 -0
  61. package/dist/entities/insight/teamInsight.schema.js +17 -0
  62. package/dist/entities/insight/teamInsight.schema.js.map +1 -0
  63. package/dist/entities/packageVersion/packageVersion.d.ts +3 -0
  64. package/dist/entities/packageVersion/packageVersion.d.ts.map +1 -1
  65. package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts +2 -1
  66. package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts.map +1 -1
  67. package/dist/entities/review/reviewFile.gateway.d.ts +18 -0
  68. package/dist/entities/review/reviewFile.gateway.d.ts.map +1 -0
  69. package/dist/entities/review/reviewFile.gateway.js +2 -0
  70. package/dist/entities/review/reviewFile.gateway.js.map +1 -0
  71. package/dist/entities/stats/projectStats.d.ts +3 -0
  72. package/dist/entities/stats/projectStats.d.ts.map +1 -1
  73. package/dist/entities/tracking/reviewRequestTracking.gateway.d.ts +19 -0
  74. package/dist/entities/tracking/reviewRequestTracking.gateway.d.ts.map +1 -0
  75. package/dist/entities/tracking/reviewRequestTracking.gateway.js +2 -0
  76. package/dist/entities/tracking/reviewRequestTracking.gateway.js.map +1 -0
  77. package/dist/frameworks/claude/claudeInsightsInvoker.d.ts +3 -0
  78. package/dist/frameworks/claude/claudeInsightsInvoker.d.ts.map +1 -0
  79. package/dist/frameworks/claude/claudeInsightsInvoker.js +58 -0
  80. package/dist/frameworks/claude/claudeInsightsInvoker.js.map +1 -0
  81. package/dist/interface-adapters/controllers/http/insights.routes.d.ts +20 -0
  82. package/dist/interface-adapters/controllers/http/insights.routes.d.ts.map +1 -0
  83. package/dist/interface-adapters/controllers/http/insights.routes.js +73 -0
  84. package/dist/interface-adapters/controllers/http/insights.routes.js.map +1 -0
  85. package/dist/interface-adapters/controllers/http/settings.routes.d.ts.map +1 -1
  86. package/dist/interface-adapters/controllers/http/settings.routes.js +3 -0
  87. package/dist/interface-adapters/controllers/http/settings.routes.js.map +1 -1
  88. package/dist/interface-adapters/controllers/http/version.routes.d.ts +1 -0
  89. package/dist/interface-adapters/controllers/http/version.routes.d.ts.map +1 -1
  90. package/dist/interface-adapters/controllers/http/version.routes.js +4 -1
  91. package/dist/interface-adapters/controllers/http/version.routes.js.map +1 -1
  92. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.d.ts +7 -0
  93. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.d.ts.map +1 -0
  94. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.js +33 -0
  95. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.js.map +1 -0
  96. package/dist/interface-adapters/gateways/reviewFile.gateway.d.ts +1 -17
  97. package/dist/interface-adapters/gateways/reviewFile.gateway.d.ts.map +1 -1
  98. package/dist/interface-adapters/gateways/reviewRequestTracking.gateway.d.ts +1 -18
  99. package/dist/interface-adapters/gateways/reviewRequestTracking.gateway.d.ts.map +1 -1
  100. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts +3 -2
  101. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts.map +1 -1
  102. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js +29 -15
  103. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js.map +1 -1
  104. package/dist/interface-adapters/presenters/insights.presenter.d.ts +41 -0
  105. package/dist/interface-adapters/presenters/insights.presenter.d.ts.map +1 -0
  106. package/dist/interface-adapters/presenters/insights.presenter.js +36 -0
  107. package/dist/interface-adapters/presenters/insights.presenter.js.map +1 -0
  108. package/dist/interface-adapters/views/dashboard/index.html +242 -2
  109. package/dist/interface-adapters/views/dashboard/modules/developerSheet.d.ts +14 -0
  110. package/dist/interface-adapters/views/dashboard/modules/developerSheet.d.ts.map +1 -0
  111. package/dist/interface-adapters/views/dashboard/modules/developerSheet.js +359 -0
  112. package/dist/interface-adapters/views/dashboard/modules/developerSheet.js.map +1 -0
  113. package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts.map +1 -1
  114. package/dist/interface-adapters/views/dashboard/modules/i18n.js +201 -1
  115. package/dist/interface-adapters/views/dashboard/modules/i18n.js.map +1 -1
  116. package/dist/interface-adapters/views/dashboard/modules/insightsReport.d.ts +7 -0
  117. package/dist/interface-adapters/views/dashboard/modules/insightsReport.d.ts.map +1 -0
  118. package/dist/interface-adapters/views/dashboard/modules/insightsReport.js +509 -0
  119. package/dist/interface-adapters/views/dashboard/modules/insightsReport.js.map +1 -0
  120. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.d.ts +40 -0
  121. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.d.ts.map +1 -0
  122. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.js +106 -0
  123. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.js.map +1 -0
  124. package/dist/interface-adapters/views/dashboard/modules/teamTab.d.ts +13 -0
  125. package/dist/interface-adapters/views/dashboard/modules/teamTab.d.ts.map +1 -0
  126. package/dist/interface-adapters/views/dashboard/modules/teamTab.js +296 -0
  127. package/dist/interface-adapters/views/dashboard/modules/teamTab.js.map +1 -0
  128. package/dist/interface-adapters/views/dashboard/styles.css +967 -0
  129. package/dist/main/dependencies.d.ts +2 -0
  130. package/dist/main/dependencies.d.ts.map +1 -1
  131. package/dist/main/dependencies.js +2 -0
  132. package/dist/main/dependencies.js.map +1 -1
  133. package/dist/main/routes.d.ts.map +1 -1
  134. package/dist/main/routes.js +13 -0
  135. package/dist/main/routes.js.map +1 -1
  136. package/dist/services/statsService.d.ts.map +1 -1
  137. package/dist/services/statsService.js +46 -27
  138. package/dist/services/statsService.js.map +1 -1
  139. package/dist/tests/factories/developerInsight.factory.d.ts +6 -0
  140. package/dist/tests/factories/developerInsight.factory.d.ts.map +1 -0
  141. package/dist/tests/factories/developerInsight.factory.js +61 -0
  142. package/dist/tests/factories/developerInsight.factory.js.map +1 -0
  143. package/dist/tests/factories/persistedInsightsData.factory.d.ts +11 -0
  144. package/dist/tests/factories/persistedInsightsData.factory.d.ts.map +1 -0
  145. package/dist/tests/factories/persistedInsightsData.factory.js +41 -0
  146. package/dist/tests/factories/persistedInsightsData.factory.js.map +1 -0
  147. package/dist/tests/factories/teamInsight.factory.d.ts +6 -0
  148. package/dist/tests/factories/teamInsight.factory.d.ts.map +1 -0
  149. package/dist/tests/factories/teamInsight.factory.js +35 -0
  150. package/dist/tests/factories/teamInsight.factory.js.map +1 -0
  151. package/dist/tests/stubs/insights.stub.d.ts +9 -0
  152. package/dist/tests/stubs/insights.stub.d.ts.map +1 -0
  153. package/dist/tests/stubs/insights.stub.js +13 -0
  154. package/dist/tests/stubs/insights.stub.js.map +1 -0
  155. package/dist/tests/stubs/reviewFile.stub.d.ts +1 -1
  156. package/dist/tests/stubs/reviewFile.stub.d.ts.map +1 -1
  157. package/dist/tests/stubs/reviewRequestTracking.stub.d.ts +1 -1
  158. package/dist/tests/stubs/reviewRequestTracking.stub.d.ts.map +1 -1
  159. package/dist/tests/stubs/selfUpdate.stub.d.ts +4 -2
  160. package/dist/tests/stubs/selfUpdate.stub.d.ts.map +1 -1
  161. package/dist/tests/stubs/selfUpdate.stub.js +6 -4
  162. package/dist/tests/stubs/selfUpdate.stub.js.map +1 -1
  163. package/dist/tests/units/entities/insight/aiInsight.schema.test.d.ts +2 -0
  164. package/dist/tests/units/entities/insight/aiInsight.schema.test.d.ts.map +1 -0
  165. package/dist/tests/units/entities/insight/aiInsight.schema.test.js +123 -0
  166. package/dist/tests/units/entities/insight/aiInsight.schema.test.js.map +1 -0
  167. package/dist/tests/units/entities/insight/developerInsight.schema.test.d.ts +2 -0
  168. package/dist/tests/units/entities/insight/developerInsight.schema.test.d.ts.map +1 -0
  169. package/dist/tests/units/entities/insight/developerInsight.schema.test.js +140 -0
  170. package/dist/tests/units/entities/insight/developerInsight.schema.test.js.map +1 -0
  171. package/dist/tests/units/entities/insight/developerTitle.test.d.ts +2 -0
  172. package/dist/tests/units/entities/insight/developerTitle.test.d.ts.map +1 -0
  173. package/dist/tests/units/entities/insight/developerTitle.test.js +23 -0
  174. package/dist/tests/units/entities/insight/developerTitle.test.js.map +1 -0
  175. package/dist/tests/units/entities/insight/insightCategory.test.d.ts +2 -0
  176. package/dist/tests/units/entities/insight/insightCategory.test.d.ts.map +1 -0
  177. package/dist/tests/units/entities/insight/insightCategory.test.js +16 -0
  178. package/dist/tests/units/entities/insight/insightCategory.test.js.map +1 -0
  179. package/dist/tests/units/entities/insight/insightTrend.test.d.ts +2 -0
  180. package/dist/tests/units/entities/insight/insightTrend.test.d.ts.map +1 -0
  181. package/dist/tests/units/entities/insight/insightTrend.test.js +16 -0
  182. package/dist/tests/units/entities/insight/insightTrend.test.js.map +1 -0
  183. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.d.ts +2 -0
  184. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.d.ts.map +1 -0
  185. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.js +160 -0
  186. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.js.map +1 -0
  187. package/dist/tests/units/entities/insight/teamInsight.schema.test.d.ts +2 -0
  188. package/dist/tests/units/entities/insight/teamInsight.schema.test.d.ts.map +1 -0
  189. package/dist/tests/units/entities/insight/teamInsight.schema.test.js +57 -0
  190. package/dist/tests/units/entities/insight/teamInsight.schema.test.js.map +1 -0
  191. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.d.ts +2 -0
  192. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.d.ts.map +1 -0
  193. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js +390 -0
  194. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js.map +1 -0
  195. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.d.ts +2 -0
  196. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.d.ts.map +1 -0
  197. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js +25 -0
  198. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js.map +1 -0
  199. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js +25 -0
  200. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js.map +1 -1
  201. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.d.ts +2 -0
  202. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.d.ts.map +1 -0
  203. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.js +117 -0
  204. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.js.map +1 -0
  205. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js +84 -16
  206. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js.map +1 -1
  207. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.d.ts +2 -0
  208. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.d.ts.map +1 -0
  209. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.js +194 -0
  210. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.js.map +1 -0
  211. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.d.ts +2 -0
  212. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.d.ts.map +1 -0
  213. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.js +224 -0
  214. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.js.map +1 -0
  215. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js +29 -0
  216. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js.map +1 -1
  217. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.d.ts +2 -0
  218. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.d.ts.map +1 -0
  219. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.js +326 -0
  220. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.js.map +1 -0
  221. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.d.ts +2 -0
  222. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.d.ts.map +1 -0
  223. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.js +336 -0
  224. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.js.map +1 -0
  225. package/dist/tests/units/services/statsService.addReview.test.d.ts +2 -0
  226. package/dist/tests/units/services/statsService.addReview.test.d.ts.map +1 -0
  227. package/dist/tests/units/services/statsService.addReview.test.js +103 -0
  228. package/dist/tests/units/services/statsService.addReview.test.js.map +1 -0
  229. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.d.ts +2 -0
  230. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.d.ts.map +1 -0
  231. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js +172 -0
  232. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js.map +1 -0
  233. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.d.ts +2 -0
  234. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.d.ts.map +1 -0
  235. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js +449 -0
  236. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js.map +1 -0
  237. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.d.ts +2 -0
  238. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.d.ts.map +1 -0
  239. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js +326 -0
  240. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js.map +1 -0
  241. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.d.ts +2 -0
  242. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.d.ts.map +1 -0
  243. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.js +172 -0
  244. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.js.map +1 -0
  245. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts +2 -0
  246. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts.map +1 -0
  247. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js +253 -0
  248. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js.map +1 -0
  249. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.d.ts +2 -0
  250. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.d.ts.map +1 -0
  251. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js +160 -0
  252. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js.map +1 -0
  253. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.d.ts +2 -0
  254. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.d.ts.map +1 -0
  255. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js +125 -0
  256. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js.map +1 -0
  257. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js +5 -0
  258. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js.map +1 -1
  259. package/dist/usecases/insights/buildAiInsightsPrompt.d.ts +12 -0
  260. package/dist/usecases/insights/buildAiInsightsPrompt.d.ts.map +1 -0
  261. package/dist/usecases/insights/buildAiInsightsPrompt.js +220 -0
  262. package/dist/usecases/insights/buildAiInsightsPrompt.js.map +1 -0
  263. package/dist/usecases/insights/computeDeveloperInsights.usecase.d.ts +4 -0
  264. package/dist/usecases/insights/computeDeveloperInsights.usecase.d.ts.map +1 -0
  265. package/dist/usecases/insights/computeDeveloperInsights.usecase.js +226 -0
  266. package/dist/usecases/insights/computeDeveloperInsights.usecase.js.map +1 -0
  267. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.d.ts +12 -0
  268. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.d.ts.map +1 -0
  269. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.js +340 -0
  270. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.js.map +1 -0
  271. package/dist/usecases/insights/computeTeamInsights.usecase.d.ts +4 -0
  272. package/dist/usecases/insights/computeTeamInsights.usecase.d.ts.map +1 -0
  273. package/dist/usecases/insights/computeTeamInsights.usecase.js +111 -0
  274. package/dist/usecases/insights/computeTeamInsights.usecase.js.map +1 -0
  275. package/dist/usecases/insights/generateAiInsights.usecase.d.ts +27 -0
  276. package/dist/usecases/insights/generateAiInsights.usecase.d.ts.map +1 -0
  277. package/dist/usecases/insights/generateAiInsights.usecase.js +65 -0
  278. package/dist/usecases/insights/generateAiInsights.usecase.js.map +1 -0
  279. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.d.ts +18 -0
  280. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.d.ts.map +1 -0
  281. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.js +56 -0
  282. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.js.map +1 -0
  283. package/dist/usecases/insights/insightLevelComputation.service.d.ts +41 -0
  284. package/dist/usecases/insights/insightLevelComputation.service.d.ts.map +1 -0
  285. package/dist/usecases/insights/insightLevelComputation.service.js +313 -0
  286. package/dist/usecases/insights/insightLevelComputation.service.js.map +1 -0
  287. package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts.map +1 -1
  288. package/dist/usecases/version/triggerSelfUpdate.usecase.js +3 -0
  289. package/dist/usecases/version/triggerSelfUpdate.usecase.js.map +1 -1
  290. package/package.json +1 -1
@@ -0,0 +1,220 @@
1
+ const REVIEW_EXCERPTS_LIMIT = 5;
2
+ const EXCERPT_CHAR_LIMIT = 1500;
3
+ function groupReviewsByDeveloper(reviews) {
4
+ const grouped = new Map();
5
+ for (const review of reviews) {
6
+ if (!review.assignedBy)
7
+ continue;
8
+ const existing = grouped.get(review.assignedBy);
9
+ if (existing) {
10
+ existing.push(review);
11
+ }
12
+ else {
13
+ grouped.set(review.assignedBy, [review]);
14
+ }
15
+ }
16
+ return grouped;
17
+ }
18
+ function groupTrackedMrsByDeveloper(trackedMrs) {
19
+ const grouped = new Map();
20
+ for (const trackedMr of trackedMrs) {
21
+ const username = trackedMr.assignment.username;
22
+ const existing = grouped.get(username);
23
+ if (existing) {
24
+ existing.push(trackedMr);
25
+ }
26
+ else {
27
+ grouped.set(username, [trackedMr]);
28
+ }
29
+ }
30
+ return grouped;
31
+ }
32
+ function computeAverageScore(reviews) {
33
+ const scored = reviews.filter((review) => review.score !== null);
34
+ if (scored.length === 0)
35
+ return 'N/A';
36
+ const average = scored.reduce((sum, review) => sum + (review.score ?? 0), 0) / scored.length;
37
+ return average.toFixed(1);
38
+ }
39
+ function computeAverageBlocking(reviews) {
40
+ if (reviews.length === 0)
41
+ return '0';
42
+ const average = reviews.reduce((sum, review) => sum + review.blocking, 0) / reviews.length;
43
+ return average.toFixed(1);
44
+ }
45
+ function computeAverageWarnings(reviews) {
46
+ if (reviews.length === 0)
47
+ return '0';
48
+ const average = reviews.reduce((sum, review) => sum + review.warnings, 0) / reviews.length;
49
+ return average.toFixed(1);
50
+ }
51
+ function formatDuration(milliseconds) {
52
+ const minutes = Math.round(milliseconds / 60000);
53
+ if (minutes < 60)
54
+ return `${minutes}min`;
55
+ const hours = Math.floor(minutes / 60);
56
+ const remainingMinutes = minutes % 60;
57
+ return `${hours}h ${remainingMinutes}min`;
58
+ }
59
+ function computeFirstPassQualityRate(reviews) {
60
+ const scored = reviews.filter((review) => review.score !== null);
61
+ if (scored.length === 0)
62
+ return 'N/A';
63
+ const highQuality = scored.filter((review) => (review.score ?? 0) >= 7);
64
+ const rate = (highQuality.length / scored.length) * 100;
65
+ return `${rate.toFixed(0)}%`;
66
+ }
67
+ function extractReviewExcerpt(content) {
68
+ const sections = [];
69
+ // Extract executive summary table
70
+ const summaryMatch = content.match(/## Synth[èe]se Ex[ée]cutive[\s\S]*?(?=\n## )/);
71
+ if (summaryMatch) {
72
+ sections.push(summaryMatch[0].trim());
73
+ }
74
+ // Extract score line
75
+ const scoreMatch = content.match(/\*\*Score Global\s*:.*?\*\*/);
76
+ if (scoreMatch) {
77
+ sections.push(scoreMatch[0]);
78
+ }
79
+ // Extract blocking corrections titles only
80
+ const blockingSection = content.match(/## Corrections? (?:Importantes?|Bloquantes?)[\s\S]*?(?=\n## )/g);
81
+ if (blockingSection) {
82
+ for (const section of blockingSection) {
83
+ const titles = section.match(/^### \d+\..+$/gm);
84
+ if (titles) {
85
+ sections.push('Corrections: ' + titles.join(', '));
86
+ }
87
+ }
88
+ }
89
+ // Extract positive observations titles
90
+ const positiveSection = content.match(/## Constats? Positifs?[\s\S]*?(?=\n## |$)/);
91
+ if (positiveSection) {
92
+ const titles = positiveSection[0].match(/^### \d+\..+$/gm);
93
+ if (titles) {
94
+ sections.push('Points positifs: ' + titles.join(', '));
95
+ }
96
+ }
97
+ const excerpt = sections.join('\n');
98
+ return excerpt.substring(0, EXCERPT_CHAR_LIMIT);
99
+ }
100
+ function buildDeveloperSection(developer, reviewContents) {
101
+ const { name, reviews, trackedMrs } = developer;
102
+ const sortedReviews = [...reviews].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
103
+ const averageScore = computeAverageScore(reviews);
104
+ const averageBlocking = computeAverageBlocking(reviews);
105
+ const averageWarnings = computeAverageWarnings(reviews);
106
+ const averageDuration = reviews.length > 0
107
+ ? formatDuration(reviews.reduce((sum, review) => sum + review.duration, 0) / reviews.length)
108
+ : 'N/A';
109
+ const firstPassRate = computeFirstPassQualityRate(reviews);
110
+ const totalAdditions = reviews.reduce((sum, review) => sum + (review.diffStats?.additions ?? 0), 0);
111
+ const totalDeletions = reviews.reduce((sum, review) => sum + (review.diffStats?.deletions ?? 0), 0);
112
+ let section = `### Developer: ${name} (${reviews.length} reviews)\n`;
113
+ section += `- Average score: ${averageScore}/10\n`;
114
+ section += `- Average blocking issues: ${averageBlocking}/review\n`;
115
+ section += `- Average warnings: ${averageWarnings}/review\n`;
116
+ section += `- Average review duration: ${averageDuration}\n`;
117
+ section += `- First-pass quality rate: ${firstPassRate} (reviews scoring >= 7 on first try)\n`;
118
+ section += `- Total additions: ${totalAdditions}, deletions: ${totalDeletions}\n`;
119
+ const reviewExcerpts = [];
120
+ for (let index = 0; index < Math.min(sortedReviews.length, REVIEW_EXCERPTS_LIMIT); index++) {
121
+ const review = sortedReviews[index];
122
+ const mrKey = String(review.mrNumber);
123
+ const content = reviewContents.get(mrKey);
124
+ if (content) {
125
+ const excerpt = extractReviewExcerpt(content);
126
+ if (excerpt.length > 0) {
127
+ reviewExcerpts.push(`--- MR ${review.mrNumber} (score: ${review.score ?? 'N/A'}) ---\n${excerpt}`);
128
+ }
129
+ }
130
+ }
131
+ if (reviewExcerpts.length > 0) {
132
+ section += `\nRecent review excerpts:\n${reviewExcerpts.join('\n\n')}\n`;
133
+ }
134
+ if (trackedMrs.length > 0) {
135
+ const totalMrReviews = trackedMrs.reduce((sum, mr) => sum + mr.totalReviews, 0);
136
+ const totalFollowups = trackedMrs.reduce((sum, mr) => sum + mr.totalFollowups, 0);
137
+ const approvedFirst = trackedMrs.filter((mr) => mr.totalReviews <= 1 && mr.state === 'approved').length;
138
+ section += `\n### MR Lifecycle for ${name}:\n`;
139
+ section += `- Total MRs: ${trackedMrs.length}\n`;
140
+ section += `- Total reviews across MRs: ${totalMrReviews}\n`;
141
+ section += `- Total followups: ${totalFollowups}\n`;
142
+ section += `- MRs approved on first review: ${approvedFirst}\n`;
143
+ }
144
+ return section;
145
+ }
146
+ function buildTeamSection(reviews, developerCount) {
147
+ const averageScore = computeAverageScore(reviews);
148
+ const averageBlocking = computeAverageBlocking(reviews);
149
+ let section = '### Team Statistics:\n';
150
+ section += `- Team average score: ${averageScore}/10\n`;
151
+ section += `- Team average blocking: ${averageBlocking}/review\n`;
152
+ section += `- Total reviews: ${reviews.length}\n`;
153
+ section += `- Developers: ${developerCount}\n`;
154
+ return section;
155
+ }
156
+ export function buildAiInsightsPrompt(input) {
157
+ const { reviews, reviewContents, trackedMrs, language } = input;
158
+ const reviewsByDeveloper = groupReviewsByDeveloper(reviews);
159
+ const trackedMrsByDeveloper = groupTrackedMrsByDeveloper(trackedMrs);
160
+ const developerSections = [];
161
+ for (const [name, developerReviews] of reviewsByDeveloper) {
162
+ const developerTrackedMrs = trackedMrsByDeveloper.get(name) ?? [];
163
+ const section = buildDeveloperSection({ name, reviews: developerReviews, trackedMrs: developerTrackedMrs }, reviewContents);
164
+ developerSections.push(section);
165
+ }
166
+ const teamSection = buildTeamSection(reviews, reviewsByDeveloper.size);
167
+ const developerNames = Array.from(reviewsByDeveloper.keys());
168
+ const prompt = `You are a senior engineering manager analyzing code review data for a development team.
169
+ Analyze this data and produce structured insights.
170
+
171
+ ## Data
172
+
173
+ ${developerSections.join('\n\n')}
174
+
175
+ ${teamSection}
176
+
177
+ ## MANDATORY OUTPUT FORMAT
178
+
179
+ You MUST return a valid JSON object matching this EXACT schema. Every field is REQUIRED and non-empty.
180
+
181
+ \`\`\`json
182
+ {
183
+ "developers": [
184
+ ${developerNames.map(name => `{
185
+ "developerName": "${name}",
186
+ "title": "<string: creative title in ${language === 'fr' ? 'French' : 'English'}, e.g. 'Le Chirurgien du Code'>",
187
+ "titleExplanation": "<string: one sentence why this title fits, with data reference>",
188
+ "strengths": ["<string: concrete strength with numbers>", "<at least 1 item>"],
189
+ "weaknesses": ["<string: concrete weakness with numbers>", "<at least 1 item>"],
190
+ "recommendations": ["<string: actionable recommendation>", "<at least 1 item>"],
191
+ "summary": "<string: 2-3 sentences profiling coding style and quality>"
192
+ }`).join(',\n ')}
193
+ ],
194
+ "team": {
195
+ "summary": "<string: 2-3 sentences about team dynamics>",
196
+ "strengths": ["<string: team strength>", "<at least 1 item>"],
197
+ "weaknesses": ["<string: team weakness>", "<at least 1 item>"],
198
+ "recommendations": ["<string: team recommendation>", "<at least 1 item>"],
199
+ "dynamics": "<string: analysis of team balance, complementary skills, knowledge gaps>"
200
+ }
201
+ }
202
+ \`\`\`
203
+
204
+ ## RULES (violations = invalid output)
205
+
206
+ 1. Language: ALL text in ${language === 'fr' ? 'French' : 'English'}
207
+ 2. Every developer listed above MUST appear in "developers" array with EXACT username
208
+ 3. "strengths", "weaknesses", "recommendations" arrays must each have AT LEAST 1 item
209
+ 4. Reference specific data points: scores, percentages, blocking counts, durations
210
+ 5. Be direct and honest -- do not sugarcoat weaknesses
211
+ 6. Titles must be creative and unique per developer (no two developers share the same title)
212
+ 7. Recommendations must be actionable (NOT "improve quality" but "review architecture before implementation to reduce the 1.3 blocking issues/review")
213
+ 8. "summary" must mention the developer's average score and key characteristic
214
+
215
+ ## OUTPUT
216
+
217
+ Return ONLY the JSON object. No markdown fences. No explanation before or after. No trailing text.`;
218
+ return prompt;
219
+ }
220
+ //# sourceMappingURL=buildAiInsightsPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAiInsightsPrompt.js","sourceRoot":"","sources":["../../../src/usecases/insights/buildAiInsightsPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ReviewStats } from '../../entities/stats/projectStats.js';
2
+ import type { DeveloperInsight } from '../../entities/insight/developerInsight.js';
3
+ export declare function computeDeveloperInsights(reviews: ReviewStats[]): DeveloperInsight[];
4
+ //# sourceMappingURL=computeDeveloperInsights.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeDeveloperInsights.usecase.d.ts","sourceRoot":"","sources":["../../../src/usecases/insights/computeDeveloperInsights.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAsC,MAAM,wCAAwC,CAAC;AAoBnH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAyBnF"}
@@ -0,0 +1,226 @@
1
+ import { MINIMUM_REVIEWS_THRESHOLD, ABSOLUTE_BENCHMARKS, computeTeamMetrics, computeDeveloperMetrics, computeCategoryLevels, identifyStrengths, identifyWeaknesses, identifyTopPriority, computeTitle, computeOverallLevel, average, } from '../../usecases/insights/insightLevelComputation.service.js';
2
+ const QUALITY_SCORE_THRESHOLD = 7;
3
+ export function computeDeveloperInsights(reviews) {
4
+ const reviewsByDeveloper = groupReviewsByDeveloper(reviews);
5
+ const eligibleDevelopers = filterEligibleDevelopers(reviewsByDeveloper);
6
+ if (eligibleDevelopers.size === 0) {
7
+ return [];
8
+ }
9
+ const isSingleDeveloper = eligibleDevelopers.size === 1;
10
+ const teamMetrics = isSingleDeveloper
11
+ ? ABSOLUTE_BENCHMARKS
12
+ : computeTeamMetrics(eligibleDevelopers);
13
+ const insights = [];
14
+ for (const [developerName, developerReviews] of eligibleDevelopers) {
15
+ const insight = computeInsightForDeveloper(developerName, developerReviews, teamMetrics);
16
+ insights.push(insight);
17
+ }
18
+ return insights;
19
+ }
20
+ function groupReviewsByDeveloper(reviews) {
21
+ const grouped = new Map();
22
+ for (const review of reviews) {
23
+ if (!review.assignedBy)
24
+ continue;
25
+ const existing = grouped.get(review.assignedBy);
26
+ if (existing) {
27
+ existing.push(review);
28
+ }
29
+ else {
30
+ grouped.set(review.assignedBy, [review]);
31
+ }
32
+ }
33
+ return grouped;
34
+ }
35
+ function filterEligibleDevelopers(reviewsByDeveloper) {
36
+ const eligible = new Map();
37
+ for (const [name, reviews] of reviewsByDeveloper) {
38
+ if (reviews.length >= MINIMUM_REVIEWS_THRESHOLD) {
39
+ eligible.set(name, reviews);
40
+ }
41
+ }
42
+ return eligible;
43
+ }
44
+ function computeFirstReviewQualityRate(reviews) {
45
+ const reviewsWithScore = reviews.filter((review) => review.score !== null);
46
+ if (reviewsWithScore.length === 0)
47
+ return 0;
48
+ const qualityReviews = reviewsWithScore.filter((review) => (review.score ?? 0) >= QUALITY_SCORE_THRESHOLD && review.blocking === 0);
49
+ return qualityReviews.length / reviewsWithScore.length;
50
+ }
51
+ function computeAverageAdditions(reviews) {
52
+ const withDiffStats = reviews.filter((review) => review.diffStats !== null && review.diffStats !== undefined);
53
+ if (withDiffStats.length === 0)
54
+ return 0;
55
+ return average(withDiffStats.map((review) => review.diffStats?.additions ?? 0));
56
+ }
57
+ function computeAverageDeletions(reviews) {
58
+ const withDiffStats = reviews.filter((review) => review.diffStats !== null && review.diffStats !== undefined);
59
+ if (withDiffStats.length === 0)
60
+ return 0;
61
+ return average(withDiffStats.map((review) => review.diffStats?.deletions ?? 0));
62
+ }
63
+ function computePercentDifference(value, teamAverage) {
64
+ if (teamAverage === 0)
65
+ return 0;
66
+ return Math.round(((value - teamAverage) / teamAverage) * 100);
67
+ }
68
+ function generateInsightDescriptions(serviceMetrics, teamMetrics, strengths, weaknesses, reviews, categoryLevels) {
69
+ const descriptions = [];
70
+ for (const category of strengths) {
71
+ const isTrendBased = categoryLevels[category].level < 7 && categoryLevels[category].trend === 'improving';
72
+ const description = isTrendBased
73
+ ? generateTrendStrengthDescription(category, categoryLevels[category].trend)
74
+ : generateStrengthDescription(category, serviceMetrics, teamMetrics, reviews);
75
+ if (description !== null) {
76
+ descriptions.push(description);
77
+ }
78
+ }
79
+ for (const category of weaknesses) {
80
+ const description = generateWeaknessDescription(category, serviceMetrics, teamMetrics, reviews);
81
+ if (description !== null) {
82
+ descriptions.push(description);
83
+ }
84
+ }
85
+ return descriptions;
86
+ }
87
+ function generateTrendStrengthDescription(category, _trend) {
88
+ return {
89
+ category,
90
+ type: 'strength',
91
+ descriptionKey: `insight.${category}.improving`,
92
+ params: {},
93
+ };
94
+ }
95
+ function generateStrengthDescription(category, metrics, teamMetrics, reviews) {
96
+ switch (category) {
97
+ case 'quality': {
98
+ const percent = computePercentDifference(metrics.averageScore, teamMetrics.averageScore);
99
+ return {
100
+ category: 'quality',
101
+ type: 'strength',
102
+ descriptionKey: 'insight.quality.highScore',
103
+ params: {
104
+ score: Math.round(metrics.averageScore * 10) / 10,
105
+ teamAverage: Math.round(teamMetrics.averageScore * 10) / 10,
106
+ percent: Math.abs(percent),
107
+ },
108
+ };
109
+ }
110
+ case 'responsiveness': {
111
+ const percent = computePercentDifference(teamMetrics.averageDuration, metrics.averageDuration);
112
+ return {
113
+ category: 'responsiveness',
114
+ type: 'strength',
115
+ descriptionKey: 'insight.responsiveness.fast',
116
+ params: {
117
+ duration: formatDuration(metrics.averageDuration),
118
+ teamAverage: formatDuration(teamMetrics.averageDuration),
119
+ percent: Math.abs(percent),
120
+ },
121
+ };
122
+ }
123
+ case 'codeVolume':
124
+ return {
125
+ category: 'codeVolume',
126
+ type: 'strength',
127
+ descriptionKey: 'insight.codeVolume.high',
128
+ params: { lines: Math.round(metrics.averageCodeVolume) },
129
+ };
130
+ case 'iteration': {
131
+ const qualityRate = computeFirstReviewQualityRate(reviews);
132
+ return {
133
+ category: 'iteration',
134
+ type: 'strength',
135
+ descriptionKey: 'insight.iteration.good',
136
+ params: { rate: Math.round(qualityRate * 100) },
137
+ };
138
+ }
139
+ }
140
+ }
141
+ function generateWeaknessDescription(category, metrics, teamMetrics, reviews) {
142
+ switch (category) {
143
+ case 'quality': {
144
+ const percent = computePercentDifference(metrics.averageBlocking, teamMetrics.averageBlocking);
145
+ return {
146
+ category: 'quality',
147
+ type: 'weakness',
148
+ descriptionKey: 'insight.quality.highBlocking',
149
+ params: {
150
+ blocking: Math.round(metrics.averageBlocking * 10) / 10,
151
+ teamAverage: Math.round(teamMetrics.averageBlocking * 10) / 10,
152
+ percent: Math.abs(percent),
153
+ },
154
+ };
155
+ }
156
+ case 'responsiveness': {
157
+ const percent = computePercentDifference(metrics.averageDuration, teamMetrics.averageDuration);
158
+ return {
159
+ category: 'responsiveness',
160
+ type: 'weakness',
161
+ descriptionKey: 'insight.responsiveness.slow',
162
+ params: {
163
+ duration: formatDuration(metrics.averageDuration),
164
+ teamAverage: formatDuration(teamMetrics.averageDuration),
165
+ percent: Math.abs(percent),
166
+ },
167
+ };
168
+ }
169
+ case 'codeVolume':
170
+ return {
171
+ category: 'codeVolume',
172
+ type: 'weakness',
173
+ descriptionKey: 'insight.codeVolume.low',
174
+ params: { lines: Math.round(metrics.averageCodeVolume) },
175
+ };
176
+ case 'iteration': {
177
+ const qualityRate = computeFirstReviewQualityRate(reviews);
178
+ return {
179
+ category: 'iteration',
180
+ type: 'weakness',
181
+ descriptionKey: 'insight.iteration.poor',
182
+ params: { rate: Math.round((1 - qualityRate) * 100) },
183
+ };
184
+ }
185
+ }
186
+ }
187
+ function formatDuration(milliseconds) {
188
+ const totalSeconds = Math.round(milliseconds / 1000);
189
+ const minutes = Math.floor(totalSeconds / 60);
190
+ const seconds = totalSeconds % 60;
191
+ if (minutes === 0)
192
+ return `${seconds}s`;
193
+ return `${minutes}m${seconds > 0 ? `${seconds}s` : ''}`;
194
+ }
195
+ function computeInsightForDeveloper(developerName, reviews, teamMetrics) {
196
+ const serviceMetrics = computeDeveloperMetrics(reviews);
197
+ const categoryLevels = computeCategoryLevels(reviews, serviceMetrics, teamMetrics);
198
+ const strengths = identifyStrengths(categoryLevels);
199
+ const weaknesses = identifyWeaknesses(categoryLevels);
200
+ const topPriority = identifyTopPriority(categoryLevels);
201
+ const title = computeTitle(categoryLevels);
202
+ const overallLevel = computeOverallLevel(categoryLevels);
203
+ const insightDescriptions = generateInsightDescriptions(serviceMetrics, teamMetrics, strengths, weaknesses, reviews, categoryLevels);
204
+ return {
205
+ developerName,
206
+ title,
207
+ overallLevel,
208
+ categoryLevels,
209
+ strengths,
210
+ weaknesses,
211
+ topPriority,
212
+ reviewCount: reviews.length,
213
+ metrics: {
214
+ averageScore: serviceMetrics.averageScore,
215
+ averageBlocking: serviceMetrics.averageBlocking,
216
+ averageWarnings: serviceMetrics.averageWarnings,
217
+ averageDuration: serviceMetrics.averageDuration,
218
+ totalFollowups: null,
219
+ averageAdditions: computeAverageAdditions(reviews),
220
+ averageDeletions: computeAverageDeletions(reviews),
221
+ firstReviewQualityRate: computeFirstReviewQualityRate(reviews),
222
+ },
223
+ insightDescriptions,
224
+ };
225
+ }
226
+ //# sourceMappingURL=computeDeveloperInsights.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeDeveloperInsights.usecase.js","sourceRoot":"","sources":["../../../src/usecases/insights/computeDeveloperInsights.usecase.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,OAAO,GACR,MAAM,wDAAwD,CAAC;AAGhE,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC,MAAM,UAAU,wBAAwB,CAAC,OAAsB;IAC7D,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAExE,IAAI,kBAAkB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,KAAK,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,iBAAiB;QACnC,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,KAAK,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,0BAA0B,CACxC,aAAa,EACb,gBAAgB,EAChB,WAAW,CACZ,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,SAAS;QAEjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAC/B,kBAA8C;IAE9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAElD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,MAAM,IAAI,yBAAyB,EAAE,CAAC;YAChD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAsB;IAC3D,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAC3E,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAC5C,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,uBAAuB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CACpF,CAAC;IACF,OAAO,cAAc,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACzD,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CACxE,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CACxE,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa,EAAE,WAAmB;IAClE,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,2BAA2B,CAClC,cAAuC,EACvC,WAAwB,EACxB,SAA4B,EAC5B,UAA6B,EAC7B,OAAsB,EACtB,cAA8B;IAE9B,MAAM,YAAY,GAAyB,EAAE,CAAC;IAE9C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;QAC1G,MAAM,WAAW,GAAG,YAAY;YAC9B,CAAC,CAAC,gCAAgC,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;YAC5E,CAAC,CAAC,2BAA2B,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAChF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,2BAA2B,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAChG,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,gCAAgC,CACvC,QAAyB,EACzB,MAAoB;IAEpB,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,WAAW,QAAQ,YAAY;QAC/C,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,QAAyB,EACzB,OAAgC,EAChC,WAAwB,EACxB,OAAsB;IAEtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;YACzF,OAAO;gBACL,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,2BAA2B;gBAC3C,MAAM,EAAE;oBACN,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;oBACjD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;oBAC3D,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;iBAC3B;aACF,CAAC;QACJ,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,wBAAwB,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;YAC/F,OAAO;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,6BAA6B;gBAC7C,MAAM,EAAE;oBACN,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC;oBACjD,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,eAAe,CAAC;oBACxD,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;iBAC3B;aACF,CAAC;QACJ,CAAC;QACD,KAAK,YAAY;YACf,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,yBAAyB;gBACzC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;aACzD,CAAC;QACJ,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO;gBACL,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,wBAAwB;gBACxC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,QAAyB,EACzB,OAAgC,EAChC,WAAwB,EACxB,OAAsB;IAEtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YAC/F,OAAO;gBACL,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,8BAA8B;gBAC9C,MAAM,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE;oBACvD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE;oBAC9D,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;iBAC3B;aACF,CAAC;QACJ,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YAC/F,OAAO;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,6BAA6B;gBAC7C,MAAM,EAAE;oBACN,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC;oBACjD,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,eAAe,CAAC;oBACxD,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;iBAC3B;aACF,CAAC;QACJ,CAAC;QACD,KAAK,YAAY;YACf,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,wBAAwB;gBACxC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;aACzD,CAAC;QACJ,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO;gBACL,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,wBAAwB;gBACxC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,EAAE;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,YAAoB;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACxC,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,0BAA0B,CACjC,aAAqB,EACrB,OAAsB,EACtB,WAAwB;IAExB,MAAM,cAAc,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,mBAAmB,GAAG,2BAA2B,CACrD,cAAc,EACd,WAAW,EACX,SAAS,EACT,UAAU,EACV,OAAO,EACP,cAAc,CACf,CAAC;IAEF,OAAO;QACL,aAAa;QACb,KAAK;QACL,YAAY;QACZ,cAAc;QACd,SAAS;QACT,UAAU;QACV,WAAW;QACX,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,OAAO,EAAE;YACP,YAAY,EAAE,cAAc,CAAC,YAAY;YACzC,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,uBAAuB,CAAC,OAAO,CAAC;YAClD,gBAAgB,EAAE,uBAAuB,CAAC,OAAO,CAAC;YAClD,sBAAsB,EAAE,6BAA6B,CAAC,OAAO,CAAC;SAC/D;QACD,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ReviewStats } from '../../entities/stats/projectStats.js';
2
+ import type { DeveloperInsight } from '../../entities/insight/developerInsight.js';
3
+ import type { TeamInsight } from '../../entities/insight/teamInsight.js';
4
+ import type { PersistedInsightsData } from '../../entities/insight/persistedInsightsData.js';
5
+ interface InsightsWithPersistenceResult {
6
+ developerInsights: DeveloperInsight[];
7
+ teamInsight: TeamInsight;
8
+ persistedData: PersistedInsightsData;
9
+ }
10
+ export declare function computeInsightsWithPersistence(reviews: ReviewStats[], persistedData: PersistedInsightsData | null): InsightsWithPersistenceResult;
11
+ export {};
12
+ //# sourceMappingURL=computeInsightsWithPersistence.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeInsightsWithPersistence.usecase.d.ts","sourceRoot":"","sources":["../../../src/usecases/insights/computeInsightsWithPersistence.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAsC,MAAM,wCAAwC,CAAC;AACnH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGrE,OAAO,KAAK,EAAE,qBAAqB,EAA6B,MAAM,6CAA6C,CAAC;AAiBpH,UAAU,6BAA6B;IACrC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,WAAW,EAAE,EACtB,aAAa,EAAE,qBAAqB,GAAG,IAAI,GAC1C,6BAA6B,CAiC/B"}