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
package/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ 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.8.1](https://github.com/DGouron/review-flow/compare/reviewflow-v3.8.0...reviewflow-v3.8.1) (2026-03-16)
9
+
10
+
11
+ ### Fixed
12
+
13
+ * **docs:** escape angle bracket placeholders in spec files ([e82ff68](https://github.com/DGouron/review-flow/commit/e82ff688a5ce9e556d01a94369ac14b4598bfa2c))
14
+
15
+ ## [3.8.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.7.0...reviewflow-v3.8.0) (2026-03-16)
16
+
17
+
18
+ ### Added
19
+
20
+ * developer & team insights with AI analysis ([ca9b6ae](https://github.com/DGouron/review-flow/commit/ca9b6aef1b6191b1cd32e135138c12ad0112f57f))
21
+
22
+
23
+ ### Fixed
24
+
25
+ * self-update mechanism, stats cap, auto-review fixes and docs ([2c69c6d](https://github.com/DGouron/review-flow/commit/2c69c6daac18c82ebd7913cbb063f2754f10783a))
26
+
8
27
  ## [3.7.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.6.0...reviewflow-v3.7.0) (2026-03-15)
9
28
 
10
29
 
package/README.md CHANGED
@@ -92,9 +92,32 @@ A WebSocket-powered dashboard shows live review progress:
92
92
  - Phase and agent-level progress bars
93
93
  - Running / queued / completed review counts
94
94
  - Review history with duration, scores, and error details
95
+ - **Team tab** with developer cards, insights, and AI analysis
96
+ - **Stats section** with canvas charts, score trends, and animated counters
95
97
  - Log stream for debugging
96
98
  - Auto-reconnection with exponential backoff
97
99
 
100
+ ### Developer & Team Insights
101
+
102
+ The dashboard computes performance insights from your review history — no configuration needed.
103
+
104
+ **Per-developer analysis** across 4 categories:
105
+
106
+ | Category | What it measures |
107
+ |----------|-----------------|
108
+ | Quality | Average score, blocking issues ratio |
109
+ | Responsiveness | Review turnaround time vs team average |
110
+ | Code Volume | Additions/deletions per review |
111
+ | Iteration | First-pass quality rate (reviews without blocking issues) |
112
+
113
+ Each developer gets a **level** (beginner → expert), a **trend** (improving / stable / declining), identified **strengths and weaknesses**, and a title based on their strongest category (Architect, Firefighter, Workhorse, Sentinel, or Balanced).
114
+
115
+ **Team-level analysis** shows top performer, most improved developer, and actionable tips.
116
+
117
+ **AI-powered narrative** (optional): click "Generate AI Insights" to have Claude produce a written analysis with per-developer and team recommendations.
118
+
119
+ Insights are computed from the first 5 reviews onward and persist across sessions.
120
+
98
121
  ### Follow-Up Reviews
99
122
 
100
123
  When a developer pushes fixes after a review, Claude automatically:
@@ -210,6 +233,11 @@ For detailed setup, see the **[Quick Start Guide](https://dgouron.github.io/revi
210
233
  | `/webhooks/github` | POST | GitHub webhook receiver |
211
234
  | `/api/reviews` | GET | List reviews |
212
235
  | `/api/reviews/cancel/:jobId` | POST | Cancel a running review |
236
+ | `/api/insights?path=` | GET | Developer & team insights |
237
+ | `/api/insights/generate` | POST | Generate AI-powered insights via Claude |
238
+ | `/api/stats/recalculate` | POST | Recalculate stats with optional diff backfill |
239
+ | `/api/version/check` | GET | Check for updates |
240
+ | `/api/version/update` | POST | Trigger self-update |
213
241
  | `/ws` | WS | Real-time progress updates |
214
242
 
215
243
  ---
@@ -0,0 +1,6 @@
1
+ import type { z } from 'zod';
2
+ import type { aiDeveloperInsightSchema, aiTeamInsightSchema, aiInsightsResultSchema } from '../../entities/insight/aiInsight.schema.js';
3
+ export type AiDeveloperInsight = z.infer<typeof aiDeveloperInsightSchema>;
4
+ export type AiTeamInsight = z.infer<typeof aiTeamInsightSchema>;
5
+ export type AiInsightsResult = z.infer<typeof aiInsightsResultSchema>;
6
+ //# sourceMappingURL=aiInsight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiInsight.d.ts","sourceRoot":"","sources":["../../../src/entities/insight/aiInsight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=aiInsight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiInsight.js","sourceRoot":"","sources":["../../../src/entities/insight/aiInsight.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+ export declare const aiDeveloperInsightSchema: z.ZodObject<{
3
+ developerName: z.ZodString;
4
+ title: z.ZodString;
5
+ titleExplanation: z.ZodString;
6
+ strengths: z.ZodArray<z.ZodString>;
7
+ weaknesses: z.ZodArray<z.ZodString>;
8
+ recommendations: z.ZodArray<z.ZodString>;
9
+ summary: z.ZodString;
10
+ }, z.core.$strip>;
11
+ export declare const aiTeamInsightSchema: z.ZodObject<{
12
+ summary: z.ZodString;
13
+ strengths: z.ZodArray<z.ZodString>;
14
+ weaknesses: z.ZodArray<z.ZodString>;
15
+ recommendations: z.ZodArray<z.ZodString>;
16
+ dynamics: z.ZodString;
17
+ }, z.core.$strip>;
18
+ export declare const aiInsightsRawResponseSchema: z.ZodObject<{
19
+ developers: z.ZodArray<z.ZodObject<{
20
+ developerName: z.ZodString;
21
+ title: z.ZodString;
22
+ titleExplanation: z.ZodString;
23
+ strengths: z.ZodArray<z.ZodString>;
24
+ weaknesses: z.ZodArray<z.ZodString>;
25
+ recommendations: z.ZodArray<z.ZodString>;
26
+ summary: z.ZodString;
27
+ }, z.core.$strip>>;
28
+ team: z.ZodObject<{
29
+ summary: z.ZodString;
30
+ strengths: z.ZodArray<z.ZodString>;
31
+ weaknesses: z.ZodArray<z.ZodString>;
32
+ recommendations: z.ZodArray<z.ZodString>;
33
+ dynamics: z.ZodString;
34
+ }, z.core.$strip>;
35
+ }, z.core.$strip>;
36
+ export declare const aiInsightsResultSchema: z.ZodObject<{
37
+ developers: z.ZodArray<z.ZodObject<{
38
+ developerName: z.ZodString;
39
+ title: z.ZodString;
40
+ titleExplanation: z.ZodString;
41
+ strengths: z.ZodArray<z.ZodString>;
42
+ weaknesses: z.ZodArray<z.ZodString>;
43
+ recommendations: z.ZodArray<z.ZodString>;
44
+ summary: z.ZodString;
45
+ }, z.core.$strip>>;
46
+ team: z.ZodObject<{
47
+ summary: z.ZodString;
48
+ strengths: z.ZodArray<z.ZodString>;
49
+ weaknesses: z.ZodArray<z.ZodString>;
50
+ recommendations: z.ZodArray<z.ZodString>;
51
+ dynamics: z.ZodString;
52
+ }, z.core.$strip>;
53
+ generatedAt: z.ZodString;
54
+ }, z.core.$strip>;
55
+ //# sourceMappingURL=aiInsight.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiInsight.schema.d.ts","sourceRoot":"","sources":["../../../src/entities/insight/aiInsight.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;;;;iBAQnC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;iBAM9B,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;iBAGtC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;iBAEjC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export const aiDeveloperInsightSchema = z.object({
3
+ developerName: z.string().min(1),
4
+ title: z.string().min(1),
5
+ titleExplanation: z.string().min(1),
6
+ strengths: z.array(z.string()),
7
+ weaknesses: z.array(z.string()),
8
+ recommendations: z.array(z.string()),
9
+ summary: z.string().min(1),
10
+ });
11
+ export const aiTeamInsightSchema = z.object({
12
+ summary: z.string().min(1),
13
+ strengths: z.array(z.string()),
14
+ weaknesses: z.array(z.string()),
15
+ recommendations: z.array(z.string()),
16
+ dynamics: z.string().min(1),
17
+ });
18
+ export const aiInsightsRawResponseSchema = z.object({
19
+ developers: z.array(aiDeveloperInsightSchema),
20
+ team: aiTeamInsightSchema,
21
+ });
22
+ export const aiInsightsResultSchema = aiInsightsRawResponseSchema.extend({
23
+ generatedAt: z.string().min(1),
24
+ });
25
+ //# sourceMappingURL=aiInsight.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiInsight.schema.js","sourceRoot":"","sources":["../../../src/entities/insight/aiInsight.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAC7C,IAAI,EAAE,mBAAmB;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC,MAAM,CAAC;IACvE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { z } from 'zod';
2
+ import type { developerInsightSchema, categoryLevelSchema, categoryLevelsSchema, developerMetricsSchema, insightDescriptionSchema } from '../../entities/insight/developerInsight.schema.js';
3
+ export type CategoryLevel = z.infer<typeof categoryLevelSchema>;
4
+ export type CategoryLevels = z.infer<typeof categoryLevelsSchema>;
5
+ export type DeveloperMetrics = z.infer<typeof developerMetricsSchema>;
6
+ export type InsightDescription = z.infer<typeof insightDescriptionSchema>;
7
+ export type DeveloperInsight = z.infer<typeof developerInsightSchema>;
8
+ //# sourceMappingURL=developerInsight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerInsight.d.ts","sourceRoot":"","sources":["../../../src/entities/insight/developerInsight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,+CAA+C,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,221 @@
1
+ import type { DeveloperInsight } from '../../entities/insight/developerInsight.js';
2
+ export declare const developerInsightGuard: {
3
+ parse(input: unknown): {
4
+ developerName: string;
5
+ title: "architect" | "firefighter" | "workhorse" | "sentinel" | "polyvalent" | "risingStar";
6
+ overallLevel: number;
7
+ categoryLevels: {
8
+ quality: {
9
+ level: number;
10
+ trend: "stable" | "improving" | "declining";
11
+ };
12
+ responsiveness: {
13
+ level: number;
14
+ trend: "stable" | "improving" | "declining";
15
+ };
16
+ codeVolume: {
17
+ level: number;
18
+ trend: "stable" | "improving" | "declining";
19
+ };
20
+ iteration: {
21
+ level: number;
22
+ trend: "stable" | "improving" | "declining";
23
+ };
24
+ };
25
+ strengths: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
26
+ weaknesses: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
27
+ topPriority: "quality" | "responsiveness" | "codeVolume" | "iteration" | null;
28
+ reviewCount: number;
29
+ metrics: {
30
+ averageScore: number;
31
+ averageBlocking: number;
32
+ averageWarnings: number;
33
+ averageDuration: number;
34
+ totalFollowups: number | null;
35
+ averageAdditions: number;
36
+ averageDeletions: number;
37
+ firstReviewQualityRate: number;
38
+ };
39
+ insightDescriptions: {
40
+ category: "quality" | "responsiveness" | "codeVolume" | "iteration";
41
+ type: "strength" | "weakness";
42
+ descriptionKey: string;
43
+ params: Record<string, string | number> | null;
44
+ }[];
45
+ };
46
+ safeParse(input: unknown): import("zod").ZodSafeParseResult<{
47
+ developerName: string;
48
+ title: "architect" | "firefighter" | "workhorse" | "sentinel" | "polyvalent" | "risingStar";
49
+ overallLevel: number;
50
+ categoryLevels: {
51
+ quality: {
52
+ level: number;
53
+ trend: "stable" | "improving" | "declining";
54
+ };
55
+ responsiveness: {
56
+ level: number;
57
+ trend: "stable" | "improving" | "declining";
58
+ };
59
+ codeVolume: {
60
+ level: number;
61
+ trend: "stable" | "improving" | "declining";
62
+ };
63
+ iteration: {
64
+ level: number;
65
+ trend: "stable" | "improving" | "declining";
66
+ };
67
+ };
68
+ strengths: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
69
+ weaknesses: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
70
+ topPriority: "quality" | "responsiveness" | "codeVolume" | "iteration" | null;
71
+ reviewCount: number;
72
+ metrics: {
73
+ averageScore: number;
74
+ averageBlocking: number;
75
+ averageWarnings: number;
76
+ averageDuration: number;
77
+ totalFollowups: number | null;
78
+ averageAdditions: number;
79
+ averageDeletions: number;
80
+ firstReviewQualityRate: number;
81
+ };
82
+ insightDescriptions: {
83
+ category: "quality" | "responsiveness" | "codeVolume" | "iteration";
84
+ type: "strength" | "weakness";
85
+ descriptionKey: string;
86
+ params: Record<string, string | number> | null;
87
+ }[];
88
+ }>;
89
+ isValid(input: unknown): input is {
90
+ developerName: string;
91
+ title: "architect" | "firefighter" | "workhorse" | "sentinel" | "polyvalent" | "risingStar";
92
+ overallLevel: number;
93
+ categoryLevels: {
94
+ quality: {
95
+ level: number;
96
+ trend: "stable" | "improving" | "declining";
97
+ };
98
+ responsiveness: {
99
+ level: number;
100
+ trend: "stable" | "improving" | "declining";
101
+ };
102
+ codeVolume: {
103
+ level: number;
104
+ trend: "stable" | "improving" | "declining";
105
+ };
106
+ iteration: {
107
+ level: number;
108
+ trend: "stable" | "improving" | "declining";
109
+ };
110
+ };
111
+ strengths: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
112
+ weaknesses: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
113
+ topPriority: "quality" | "responsiveness" | "codeVolume" | "iteration" | null;
114
+ reviewCount: number;
115
+ metrics: {
116
+ averageScore: number;
117
+ averageBlocking: number;
118
+ averageWarnings: number;
119
+ averageDuration: number;
120
+ totalFollowups: number | null;
121
+ averageAdditions: number;
122
+ averageDeletions: number;
123
+ firstReviewQualityRate: number;
124
+ };
125
+ insightDescriptions: {
126
+ category: "quality" | "responsiveness" | "codeVolume" | "iteration";
127
+ type: "strength" | "weakness";
128
+ descriptionKey: string;
129
+ params: Record<string, string | number> | null;
130
+ }[];
131
+ };
132
+ parseCollection(input: unknown): {
133
+ developerName: string;
134
+ title: "architect" | "firefighter" | "workhorse" | "sentinel" | "polyvalent" | "risingStar";
135
+ overallLevel: number;
136
+ categoryLevels: {
137
+ quality: {
138
+ level: number;
139
+ trend: "stable" | "improving" | "declining";
140
+ };
141
+ responsiveness: {
142
+ level: number;
143
+ trend: "stable" | "improving" | "declining";
144
+ };
145
+ codeVolume: {
146
+ level: number;
147
+ trend: "stable" | "improving" | "declining";
148
+ };
149
+ iteration: {
150
+ level: number;
151
+ trend: "stable" | "improving" | "declining";
152
+ };
153
+ };
154
+ strengths: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
155
+ weaknesses: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
156
+ topPriority: "quality" | "responsiveness" | "codeVolume" | "iteration" | null;
157
+ reviewCount: number;
158
+ metrics: {
159
+ averageScore: number;
160
+ averageBlocking: number;
161
+ averageWarnings: number;
162
+ averageDuration: number;
163
+ totalFollowups: number | null;
164
+ averageAdditions: number;
165
+ averageDeletions: number;
166
+ firstReviewQualityRate: number;
167
+ };
168
+ insightDescriptions: {
169
+ category: "quality" | "responsiveness" | "codeVolume" | "iteration";
170
+ type: "strength" | "weakness";
171
+ descriptionKey: string;
172
+ params: Record<string, string | number> | null;
173
+ }[];
174
+ }[];
175
+ };
176
+ export declare function parseDeveloperInsight(data: unknown): DeveloperInsight;
177
+ export declare function safeParseDeveloperInsight(data: unknown): import("zod").ZodSafeParseResult<{
178
+ developerName: string;
179
+ title: "architect" | "firefighter" | "workhorse" | "sentinel" | "polyvalent" | "risingStar";
180
+ overallLevel: number;
181
+ categoryLevels: {
182
+ quality: {
183
+ level: number;
184
+ trend: "stable" | "improving" | "declining";
185
+ };
186
+ responsiveness: {
187
+ level: number;
188
+ trend: "stable" | "improving" | "declining";
189
+ };
190
+ codeVolume: {
191
+ level: number;
192
+ trend: "stable" | "improving" | "declining";
193
+ };
194
+ iteration: {
195
+ level: number;
196
+ trend: "stable" | "improving" | "declining";
197
+ };
198
+ };
199
+ strengths: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
200
+ weaknesses: ("quality" | "responsiveness" | "codeVolume" | "iteration")[];
201
+ topPriority: "quality" | "responsiveness" | "codeVolume" | "iteration" | null;
202
+ reviewCount: number;
203
+ metrics: {
204
+ averageScore: number;
205
+ averageBlocking: number;
206
+ averageWarnings: number;
207
+ averageDuration: number;
208
+ totalFollowups: number | null;
209
+ averageAdditions: number;
210
+ averageDeletions: number;
211
+ firstReviewQualityRate: number;
212
+ };
213
+ insightDescriptions: {
214
+ category: "quality" | "responsiveness" | "codeVolume" | "iteration";
215
+ type: "strength" | "weakness";
216
+ descriptionKey: string;
217
+ params: Record<string, string | number> | null;
218
+ }[];
219
+ }>;
220
+ export declare function isValidDeveloperInsight(data: unknown): data is DeveloperInsight;
221
+ //# sourceMappingURL=developerInsight.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerInsight.guard.d.ts","sourceRoot":"","sources":["../../../src/entities/insight/developerInsight.guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAsC,CAAC;AAEzE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAErE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEtD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,gBAAgB,CAE/E"}
@@ -0,0 +1,13 @@
1
+ import { createGuard } from '../../shared/foundation/guard.base.js';
2
+ import { developerInsightSchema } from '../../entities/insight/developerInsight.schema.js';
3
+ export const developerInsightGuard = createGuard(developerInsightSchema);
4
+ export function parseDeveloperInsight(data) {
5
+ return developerInsightGuard.parse(data);
6
+ }
7
+ export function safeParseDeveloperInsight(data) {
8
+ return developerInsightGuard.safeParse(data);
9
+ }
10
+ export function isValidDeveloperInsight(data) {
11
+ return developerInsightGuard.isValid(data);
12
+ }
13
+ //# sourceMappingURL=developerInsight.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerInsight.guard.js","sourceRoot":"","sources":["../../../src/entities/insight/developerInsight.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAGvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAEzE,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,OAAO,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=developerInsight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerInsight.js","sourceRoot":"","sources":["../../../src/entities/insight/developerInsight.ts"],"names":[],"mappings":""}
@@ -0,0 +1,157 @@
1
+ import { z } from 'zod';
2
+ export declare const categoryLevelSchema: z.ZodObject<{
3
+ level: z.ZodNumber;
4
+ trend: z.ZodEnum<{
5
+ stable: "stable";
6
+ improving: "improving";
7
+ declining: "declining";
8
+ }>;
9
+ }, z.core.$strip>;
10
+ export declare const categoryLevelsSchema: z.ZodObject<{
11
+ quality: z.ZodObject<{
12
+ level: z.ZodNumber;
13
+ trend: z.ZodEnum<{
14
+ stable: "stable";
15
+ improving: "improving";
16
+ declining: "declining";
17
+ }>;
18
+ }, z.core.$strip>;
19
+ responsiveness: z.ZodObject<{
20
+ level: z.ZodNumber;
21
+ trend: z.ZodEnum<{
22
+ stable: "stable";
23
+ improving: "improving";
24
+ declining: "declining";
25
+ }>;
26
+ }, z.core.$strip>;
27
+ codeVolume: z.ZodObject<{
28
+ level: z.ZodNumber;
29
+ trend: z.ZodEnum<{
30
+ stable: "stable";
31
+ improving: "improving";
32
+ declining: "declining";
33
+ }>;
34
+ }, z.core.$strip>;
35
+ iteration: z.ZodObject<{
36
+ level: z.ZodNumber;
37
+ trend: z.ZodEnum<{
38
+ stable: "stable";
39
+ improving: "improving";
40
+ declining: "declining";
41
+ }>;
42
+ }, z.core.$strip>;
43
+ }, z.core.$strip>;
44
+ export declare const developerMetricsSchema: z.ZodObject<{
45
+ averageScore: z.ZodNumber;
46
+ averageBlocking: z.ZodNumber;
47
+ averageWarnings: z.ZodNumber;
48
+ averageDuration: z.ZodNumber;
49
+ totalFollowups: z.ZodNullable<z.ZodNumber>;
50
+ averageAdditions: z.ZodNumber;
51
+ averageDeletions: z.ZodNumber;
52
+ firstReviewQualityRate: z.ZodNumber;
53
+ }, z.core.$strip>;
54
+ export declare const insightDescriptionSchema: z.ZodObject<{
55
+ category: z.ZodEnum<{
56
+ quality: "quality";
57
+ responsiveness: "responsiveness";
58
+ codeVolume: "codeVolume";
59
+ iteration: "iteration";
60
+ }>;
61
+ type: z.ZodEnum<{
62
+ strength: "strength";
63
+ weakness: "weakness";
64
+ }>;
65
+ descriptionKey: z.ZodString;
66
+ params: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
67
+ }, z.core.$strip>;
68
+ export declare const developerInsightSchema: z.ZodObject<{
69
+ developerName: z.ZodString;
70
+ title: z.ZodEnum<{
71
+ architect: "architect";
72
+ firefighter: "firefighter";
73
+ workhorse: "workhorse";
74
+ sentinel: "sentinel";
75
+ polyvalent: "polyvalent";
76
+ risingStar: "risingStar";
77
+ }>;
78
+ overallLevel: z.ZodNumber;
79
+ categoryLevels: z.ZodObject<{
80
+ quality: z.ZodObject<{
81
+ level: z.ZodNumber;
82
+ trend: z.ZodEnum<{
83
+ stable: "stable";
84
+ improving: "improving";
85
+ declining: "declining";
86
+ }>;
87
+ }, z.core.$strip>;
88
+ responsiveness: z.ZodObject<{
89
+ level: z.ZodNumber;
90
+ trend: z.ZodEnum<{
91
+ stable: "stable";
92
+ improving: "improving";
93
+ declining: "declining";
94
+ }>;
95
+ }, z.core.$strip>;
96
+ codeVolume: z.ZodObject<{
97
+ level: z.ZodNumber;
98
+ trend: z.ZodEnum<{
99
+ stable: "stable";
100
+ improving: "improving";
101
+ declining: "declining";
102
+ }>;
103
+ }, z.core.$strip>;
104
+ iteration: z.ZodObject<{
105
+ level: z.ZodNumber;
106
+ trend: z.ZodEnum<{
107
+ stable: "stable";
108
+ improving: "improving";
109
+ declining: "declining";
110
+ }>;
111
+ }, z.core.$strip>;
112
+ }, z.core.$strip>;
113
+ strengths: z.ZodArray<z.ZodEnum<{
114
+ quality: "quality";
115
+ responsiveness: "responsiveness";
116
+ codeVolume: "codeVolume";
117
+ iteration: "iteration";
118
+ }>>;
119
+ weaknesses: z.ZodArray<z.ZodEnum<{
120
+ quality: "quality";
121
+ responsiveness: "responsiveness";
122
+ codeVolume: "codeVolume";
123
+ iteration: "iteration";
124
+ }>>;
125
+ topPriority: z.ZodNullable<z.ZodEnum<{
126
+ quality: "quality";
127
+ responsiveness: "responsiveness";
128
+ codeVolume: "codeVolume";
129
+ iteration: "iteration";
130
+ }>>;
131
+ reviewCount: z.ZodNumber;
132
+ metrics: z.ZodObject<{
133
+ averageScore: z.ZodNumber;
134
+ averageBlocking: z.ZodNumber;
135
+ averageWarnings: z.ZodNumber;
136
+ averageDuration: z.ZodNumber;
137
+ totalFollowups: z.ZodNullable<z.ZodNumber>;
138
+ averageAdditions: z.ZodNumber;
139
+ averageDeletions: z.ZodNumber;
140
+ firstReviewQualityRate: z.ZodNumber;
141
+ }, z.core.$strip>;
142
+ insightDescriptions: z.ZodArray<z.ZodObject<{
143
+ category: z.ZodEnum<{
144
+ quality: "quality";
145
+ responsiveness: "responsiveness";
146
+ codeVolume: "codeVolume";
147
+ iteration: "iteration";
148
+ }>;
149
+ type: z.ZodEnum<{
150
+ strength: "strength";
151
+ weakness: "weakness";
152
+ }>;
153
+ descriptionKey: z.ZodString;
154
+ params: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
155
+ }, z.core.$strip>>;
156
+ }, z.core.$strip>;
157
+ //# sourceMappingURL=developerInsight.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerInsight.schema.d.ts","sourceRoot":"","sources":["../../../src/entities/insight/developerInsight.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,mBAAmB;;;;;;;iBAG9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;iBASjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;iBAKnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWjC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+ import { insightCategorySchema } from '../../entities/insight/insightCategory.js';
3
+ import { insightTrendSchema } from '../../entities/insight/insightTrend.js';
4
+ import { developerTitleSchema } from '../../entities/insight/developerTitle.js';
5
+ export const categoryLevelSchema = z.object({
6
+ level: z.number().int().min(1).max(10),
7
+ trend: insightTrendSchema,
8
+ });
9
+ export const categoryLevelsSchema = z.object({
10
+ quality: categoryLevelSchema,
11
+ responsiveness: categoryLevelSchema,
12
+ codeVolume: categoryLevelSchema,
13
+ iteration: categoryLevelSchema,
14
+ });
15
+ export const developerMetricsSchema = z.object({
16
+ averageScore: z.number(),
17
+ averageBlocking: z.number(),
18
+ averageWarnings: z.number(),
19
+ averageDuration: z.number(),
20
+ totalFollowups: z.number().nullable(),
21
+ averageAdditions: z.number(),
22
+ averageDeletions: z.number(),
23
+ firstReviewQualityRate: z.number(),
24
+ });
25
+ export const insightDescriptionSchema = z.object({
26
+ category: insightCategorySchema,
27
+ type: z.enum(['strength', 'weakness']),
28
+ descriptionKey: z.string(),
29
+ params: z.record(z.string(), z.union([z.string(), z.number()])).nullable(),
30
+ });
31
+ export const developerInsightSchema = z.object({
32
+ developerName: z.string().min(1),
33
+ title: developerTitleSchema,
34
+ overallLevel: z.number().int().min(1).max(10),
35
+ categoryLevels: categoryLevelsSchema,
36
+ strengths: z.array(insightCategorySchema),
37
+ weaknesses: z.array(insightCategorySchema),
38
+ topPriority: insightCategorySchema.nullable(),
39
+ reviewCount: z.number().int().min(0),
40
+ metrics: developerMetricsSchema,
41
+ insightDescriptions: z.array(insightDescriptionSchema),
42
+ });
43
+ //# sourceMappingURL=developerInsight.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerInsight.schema.js","sourceRoot":"","sources":["../../../src/entities/insight/developerInsight.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,kBAAkB;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,mBAAmB;IAC5B,cAAc,EAAE,mBAAmB;IACnC,UAAU,EAAE,mBAAmB;IAC/B,SAAS,EAAE,mBAAmB;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,qBAAqB;IAC/B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,oBAAoB;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7C,cAAc,EAAE,oBAAoB;IACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;IAC1C,WAAW,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,EAAE,sBAAsB;IAC/B,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;CACvD,CAAC,CAAC"}