reviewflow 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/entities/insight/aiInsight.d.ts +6 -0
  3. package/dist/entities/insight/aiInsight.d.ts.map +1 -0
  4. package/dist/entities/insight/aiInsight.js +2 -0
  5. package/dist/entities/insight/aiInsight.js.map +1 -0
  6. package/dist/entities/insight/aiInsight.schema.d.ts +55 -0
  7. package/dist/entities/insight/aiInsight.schema.d.ts.map +1 -0
  8. package/dist/entities/insight/aiInsight.schema.js +25 -0
  9. package/dist/entities/insight/aiInsight.schema.js.map +1 -0
  10. package/dist/entities/insight/developerInsight.d.ts +8 -0
  11. package/dist/entities/insight/developerInsight.d.ts.map +1 -0
  12. package/dist/entities/insight/developerInsight.guard.d.ts +221 -0
  13. package/dist/entities/insight/developerInsight.guard.d.ts.map +1 -0
  14. package/dist/entities/insight/developerInsight.guard.js +13 -0
  15. package/dist/entities/insight/developerInsight.guard.js.map +1 -0
  16. package/dist/entities/insight/developerInsight.js +2 -0
  17. package/dist/entities/insight/developerInsight.js.map +1 -0
  18. package/dist/entities/insight/developerInsight.schema.d.ts +157 -0
  19. package/dist/entities/insight/developerInsight.schema.d.ts.map +1 -0
  20. package/dist/entities/insight/developerInsight.schema.js +43 -0
  21. package/dist/entities/insight/developerInsight.schema.js.map +1 -0
  22. package/dist/entities/insight/developerTitle.d.ts +12 -0
  23. package/dist/entities/insight/developerTitle.d.ts.map +1 -0
  24. package/dist/entities/insight/developerTitle.js +11 -0
  25. package/dist/entities/insight/developerTitle.js.map +1 -0
  26. package/dist/entities/insight/insightCategory.d.ts +10 -0
  27. package/dist/entities/insight/insightCategory.d.ts.map +1 -0
  28. package/dist/entities/insight/insightCategory.js +4 -0
  29. package/dist/entities/insight/insightCategory.js.map +1 -0
  30. package/dist/entities/insight/insightTrend.d.ts +9 -0
  31. package/dist/entities/insight/insightTrend.d.ts.map +1 -0
  32. package/dist/entities/insight/insightTrend.js +4 -0
  33. package/dist/entities/insight/insightTrend.js.map +1 -0
  34. package/dist/entities/insight/insights.gateway.d.ts +6 -0
  35. package/dist/entities/insight/insights.gateway.d.ts.map +1 -0
  36. package/dist/entities/insight/insights.gateway.js +2 -0
  37. package/dist/entities/insight/insights.gateway.js.map +1 -0
  38. package/dist/entities/insight/persistedInsightsData.d.ts +5 -0
  39. package/dist/entities/insight/persistedInsightsData.d.ts.map +1 -0
  40. package/dist/entities/insight/persistedInsightsData.guard.d.ts +271 -0
  41. package/dist/entities/insight/persistedInsightsData.guard.d.ts.map +1 -0
  42. package/dist/entities/insight/persistedInsightsData.guard.js +13 -0
  43. package/dist/entities/insight/persistedInsightsData.guard.js.map +1 -0
  44. package/dist/entities/insight/persistedInsightsData.js +2 -0
  45. package/dist/entities/insight/persistedInsightsData.js.map +1 -0
  46. package/dist/entities/insight/persistedInsightsData.schema.d.ts +84 -0
  47. package/dist/entities/insight/persistedInsightsData.schema.d.ts.map +1 -0
  48. package/dist/entities/insight/persistedInsightsData.schema.js +40 -0
  49. package/dist/entities/insight/persistedInsightsData.schema.js.map +1 -0
  50. package/dist/entities/insight/teamInsight.d.ts +5 -0
  51. package/dist/entities/insight/teamInsight.d.ts.map +1 -0
  52. package/dist/entities/insight/teamInsight.guard.d.ts +71 -0
  53. package/dist/entities/insight/teamInsight.guard.d.ts.map +1 -0
  54. package/dist/entities/insight/teamInsight.guard.js +13 -0
  55. package/dist/entities/insight/teamInsight.guard.js.map +1 -0
  56. package/dist/entities/insight/teamInsight.js +2 -0
  57. package/dist/entities/insight/teamInsight.js.map +1 -0
  58. package/dist/entities/insight/teamInsight.schema.d.ts +31 -0
  59. package/dist/entities/insight/teamInsight.schema.d.ts.map +1 -0
  60. package/dist/entities/insight/teamInsight.schema.js +17 -0
  61. package/dist/entities/insight/teamInsight.schema.js.map +1 -0
  62. package/dist/entities/packageVersion/packageVersion.d.ts +3 -0
  63. package/dist/entities/packageVersion/packageVersion.d.ts.map +1 -1
  64. package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts +2 -1
  65. package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts.map +1 -1
  66. package/dist/entities/review/reviewFile.gateway.d.ts +18 -0
  67. package/dist/entities/review/reviewFile.gateway.d.ts.map +1 -0
  68. package/dist/entities/review/reviewFile.gateway.js +2 -0
  69. package/dist/entities/review/reviewFile.gateway.js.map +1 -0
  70. package/dist/entities/stats/projectStats.d.ts +3 -0
  71. package/dist/entities/stats/projectStats.d.ts.map +1 -1
  72. package/dist/entities/tracking/reviewRequestTracking.gateway.d.ts +19 -0
  73. package/dist/entities/tracking/reviewRequestTracking.gateway.d.ts.map +1 -0
  74. package/dist/entities/tracking/reviewRequestTracking.gateway.js +2 -0
  75. package/dist/entities/tracking/reviewRequestTracking.gateway.js.map +1 -0
  76. package/dist/frameworks/claude/claudeInsightsInvoker.d.ts +3 -0
  77. package/dist/frameworks/claude/claudeInsightsInvoker.d.ts.map +1 -0
  78. package/dist/frameworks/claude/claudeInsightsInvoker.js +58 -0
  79. package/dist/frameworks/claude/claudeInsightsInvoker.js.map +1 -0
  80. package/dist/interface-adapters/controllers/http/insights.routes.d.ts +20 -0
  81. package/dist/interface-adapters/controllers/http/insights.routes.d.ts.map +1 -0
  82. package/dist/interface-adapters/controllers/http/insights.routes.js +73 -0
  83. package/dist/interface-adapters/controllers/http/insights.routes.js.map +1 -0
  84. package/dist/interface-adapters/controllers/http/settings.routes.d.ts.map +1 -1
  85. package/dist/interface-adapters/controllers/http/settings.routes.js +3 -0
  86. package/dist/interface-adapters/controllers/http/settings.routes.js.map +1 -1
  87. package/dist/interface-adapters/controllers/http/version.routes.d.ts +1 -0
  88. package/dist/interface-adapters/controllers/http/version.routes.d.ts.map +1 -1
  89. package/dist/interface-adapters/controllers/http/version.routes.js +4 -1
  90. package/dist/interface-adapters/controllers/http/version.routes.js.map +1 -1
  91. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.d.ts +7 -0
  92. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.d.ts.map +1 -0
  93. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.js +33 -0
  94. package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.js.map +1 -0
  95. package/dist/interface-adapters/gateways/reviewFile.gateway.d.ts +1 -17
  96. package/dist/interface-adapters/gateways/reviewFile.gateway.d.ts.map +1 -1
  97. package/dist/interface-adapters/gateways/reviewRequestTracking.gateway.d.ts +1 -18
  98. package/dist/interface-adapters/gateways/reviewRequestTracking.gateway.d.ts.map +1 -1
  99. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts +3 -2
  100. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts.map +1 -1
  101. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js +29 -15
  102. package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js.map +1 -1
  103. package/dist/interface-adapters/presenters/insights.presenter.d.ts +41 -0
  104. package/dist/interface-adapters/presenters/insights.presenter.d.ts.map +1 -0
  105. package/dist/interface-adapters/presenters/insights.presenter.js +36 -0
  106. package/dist/interface-adapters/presenters/insights.presenter.js.map +1 -0
  107. package/dist/interface-adapters/views/dashboard/index.html +242 -2
  108. package/dist/interface-adapters/views/dashboard/modules/developerSheet.d.ts +14 -0
  109. package/dist/interface-adapters/views/dashboard/modules/developerSheet.d.ts.map +1 -0
  110. package/dist/interface-adapters/views/dashboard/modules/developerSheet.js +359 -0
  111. package/dist/interface-adapters/views/dashboard/modules/developerSheet.js.map +1 -0
  112. package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts.map +1 -1
  113. package/dist/interface-adapters/views/dashboard/modules/i18n.js +201 -1
  114. package/dist/interface-adapters/views/dashboard/modules/i18n.js.map +1 -1
  115. package/dist/interface-adapters/views/dashboard/modules/insightsReport.d.ts +7 -0
  116. package/dist/interface-adapters/views/dashboard/modules/insightsReport.d.ts.map +1 -0
  117. package/dist/interface-adapters/views/dashboard/modules/insightsReport.js +509 -0
  118. package/dist/interface-adapters/views/dashboard/modules/insightsReport.js.map +1 -0
  119. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.d.ts +40 -0
  120. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.d.ts.map +1 -0
  121. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.js +106 -0
  122. package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.js.map +1 -0
  123. package/dist/interface-adapters/views/dashboard/modules/teamTab.d.ts +13 -0
  124. package/dist/interface-adapters/views/dashboard/modules/teamTab.d.ts.map +1 -0
  125. package/dist/interface-adapters/views/dashboard/modules/teamTab.js +296 -0
  126. package/dist/interface-adapters/views/dashboard/modules/teamTab.js.map +1 -0
  127. package/dist/interface-adapters/views/dashboard/styles.css +967 -0
  128. package/dist/main/dependencies.d.ts +2 -0
  129. package/dist/main/dependencies.d.ts.map +1 -1
  130. package/dist/main/dependencies.js +2 -0
  131. package/dist/main/dependencies.js.map +1 -1
  132. package/dist/main/routes.d.ts.map +1 -1
  133. package/dist/main/routes.js +13 -0
  134. package/dist/main/routes.js.map +1 -1
  135. package/dist/services/statsService.d.ts.map +1 -1
  136. package/dist/services/statsService.js +46 -27
  137. package/dist/services/statsService.js.map +1 -1
  138. package/dist/tests/factories/developerInsight.factory.d.ts +6 -0
  139. package/dist/tests/factories/developerInsight.factory.d.ts.map +1 -0
  140. package/dist/tests/factories/developerInsight.factory.js +61 -0
  141. package/dist/tests/factories/developerInsight.factory.js.map +1 -0
  142. package/dist/tests/factories/persistedInsightsData.factory.d.ts +11 -0
  143. package/dist/tests/factories/persistedInsightsData.factory.d.ts.map +1 -0
  144. package/dist/tests/factories/persistedInsightsData.factory.js +41 -0
  145. package/dist/tests/factories/persistedInsightsData.factory.js.map +1 -0
  146. package/dist/tests/factories/teamInsight.factory.d.ts +6 -0
  147. package/dist/tests/factories/teamInsight.factory.d.ts.map +1 -0
  148. package/dist/tests/factories/teamInsight.factory.js +35 -0
  149. package/dist/tests/factories/teamInsight.factory.js.map +1 -0
  150. package/dist/tests/stubs/insights.stub.d.ts +9 -0
  151. package/dist/tests/stubs/insights.stub.d.ts.map +1 -0
  152. package/dist/tests/stubs/insights.stub.js +13 -0
  153. package/dist/tests/stubs/insights.stub.js.map +1 -0
  154. package/dist/tests/stubs/reviewFile.stub.d.ts +1 -1
  155. package/dist/tests/stubs/reviewFile.stub.d.ts.map +1 -1
  156. package/dist/tests/stubs/reviewRequestTracking.stub.d.ts +1 -1
  157. package/dist/tests/stubs/reviewRequestTracking.stub.d.ts.map +1 -1
  158. package/dist/tests/stubs/selfUpdate.stub.d.ts +4 -2
  159. package/dist/tests/stubs/selfUpdate.stub.d.ts.map +1 -1
  160. package/dist/tests/stubs/selfUpdate.stub.js +6 -4
  161. package/dist/tests/stubs/selfUpdate.stub.js.map +1 -1
  162. package/dist/tests/units/entities/insight/aiInsight.schema.test.d.ts +2 -0
  163. package/dist/tests/units/entities/insight/aiInsight.schema.test.d.ts.map +1 -0
  164. package/dist/tests/units/entities/insight/aiInsight.schema.test.js +123 -0
  165. package/dist/tests/units/entities/insight/aiInsight.schema.test.js.map +1 -0
  166. package/dist/tests/units/entities/insight/developerInsight.schema.test.d.ts +2 -0
  167. package/dist/tests/units/entities/insight/developerInsight.schema.test.d.ts.map +1 -0
  168. package/dist/tests/units/entities/insight/developerInsight.schema.test.js +140 -0
  169. package/dist/tests/units/entities/insight/developerInsight.schema.test.js.map +1 -0
  170. package/dist/tests/units/entities/insight/developerTitle.test.d.ts +2 -0
  171. package/dist/tests/units/entities/insight/developerTitle.test.d.ts.map +1 -0
  172. package/dist/tests/units/entities/insight/developerTitle.test.js +23 -0
  173. package/dist/tests/units/entities/insight/developerTitle.test.js.map +1 -0
  174. package/dist/tests/units/entities/insight/insightCategory.test.d.ts +2 -0
  175. package/dist/tests/units/entities/insight/insightCategory.test.d.ts.map +1 -0
  176. package/dist/tests/units/entities/insight/insightCategory.test.js +16 -0
  177. package/dist/tests/units/entities/insight/insightCategory.test.js.map +1 -0
  178. package/dist/tests/units/entities/insight/insightTrend.test.d.ts +2 -0
  179. package/dist/tests/units/entities/insight/insightTrend.test.d.ts.map +1 -0
  180. package/dist/tests/units/entities/insight/insightTrend.test.js +16 -0
  181. package/dist/tests/units/entities/insight/insightTrend.test.js.map +1 -0
  182. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.d.ts +2 -0
  183. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.d.ts.map +1 -0
  184. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.js +160 -0
  185. package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.js.map +1 -0
  186. package/dist/tests/units/entities/insight/teamInsight.schema.test.d.ts +2 -0
  187. package/dist/tests/units/entities/insight/teamInsight.schema.test.d.ts.map +1 -0
  188. package/dist/tests/units/entities/insight/teamInsight.schema.test.js +57 -0
  189. package/dist/tests/units/entities/insight/teamInsight.schema.test.js.map +1 -0
  190. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.d.ts +2 -0
  191. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.d.ts.map +1 -0
  192. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js +390 -0
  193. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js.map +1 -0
  194. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.d.ts +2 -0
  195. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.d.ts.map +1 -0
  196. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js +25 -0
  197. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js.map +1 -0
  198. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js +25 -0
  199. package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js.map +1 -1
  200. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.d.ts +2 -0
  201. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.d.ts.map +1 -0
  202. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.js +117 -0
  203. package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.js.map +1 -0
  204. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js +84 -16
  205. package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js.map +1 -1
  206. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.d.ts +2 -0
  207. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.d.ts.map +1 -0
  208. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.js +194 -0
  209. package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.js.map +1 -0
  210. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.d.ts +2 -0
  211. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.d.ts.map +1 -0
  212. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.js +224 -0
  213. package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.js.map +1 -0
  214. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js +29 -0
  215. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js.map +1 -1
  216. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.d.ts +2 -0
  217. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.d.ts.map +1 -0
  218. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.js +326 -0
  219. package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.js.map +1 -0
  220. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.d.ts +2 -0
  221. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.d.ts.map +1 -0
  222. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.js +336 -0
  223. package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.js.map +1 -0
  224. package/dist/tests/units/services/statsService.addReview.test.d.ts +2 -0
  225. package/dist/tests/units/services/statsService.addReview.test.d.ts.map +1 -0
  226. package/dist/tests/units/services/statsService.addReview.test.js +103 -0
  227. package/dist/tests/units/services/statsService.addReview.test.js.map +1 -0
  228. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.d.ts +2 -0
  229. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.d.ts.map +1 -0
  230. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js +172 -0
  231. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js.map +1 -0
  232. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.d.ts +2 -0
  233. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.d.ts.map +1 -0
  234. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js +449 -0
  235. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js.map +1 -0
  236. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.d.ts +2 -0
  237. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.d.ts.map +1 -0
  238. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js +326 -0
  239. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js.map +1 -0
  240. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.d.ts +2 -0
  241. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.d.ts.map +1 -0
  242. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.js +172 -0
  243. package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.js.map +1 -0
  244. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts +2 -0
  245. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts.map +1 -0
  246. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js +253 -0
  247. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js.map +1 -0
  248. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.d.ts +2 -0
  249. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.d.ts.map +1 -0
  250. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js +160 -0
  251. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js.map +1 -0
  252. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.d.ts +2 -0
  253. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.d.ts.map +1 -0
  254. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js +125 -0
  255. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js.map +1 -0
  256. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js +5 -0
  257. package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js.map +1 -1
  258. package/dist/usecases/insights/buildAiInsightsPrompt.d.ts +12 -0
  259. package/dist/usecases/insights/buildAiInsightsPrompt.d.ts.map +1 -0
  260. package/dist/usecases/insights/buildAiInsightsPrompt.js +220 -0
  261. package/dist/usecases/insights/buildAiInsightsPrompt.js.map +1 -0
  262. package/dist/usecases/insights/computeDeveloperInsights.usecase.d.ts +4 -0
  263. package/dist/usecases/insights/computeDeveloperInsights.usecase.d.ts.map +1 -0
  264. package/dist/usecases/insights/computeDeveloperInsights.usecase.js +226 -0
  265. package/dist/usecases/insights/computeDeveloperInsights.usecase.js.map +1 -0
  266. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.d.ts +12 -0
  267. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.d.ts.map +1 -0
  268. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.js +340 -0
  269. package/dist/usecases/insights/computeInsightsWithPersistence.usecase.js.map +1 -0
  270. package/dist/usecases/insights/computeTeamInsights.usecase.d.ts +4 -0
  271. package/dist/usecases/insights/computeTeamInsights.usecase.d.ts.map +1 -0
  272. package/dist/usecases/insights/computeTeamInsights.usecase.js +111 -0
  273. package/dist/usecases/insights/computeTeamInsights.usecase.js.map +1 -0
  274. package/dist/usecases/insights/generateAiInsights.usecase.d.ts +27 -0
  275. package/dist/usecases/insights/generateAiInsights.usecase.d.ts.map +1 -0
  276. package/dist/usecases/insights/generateAiInsights.usecase.js +65 -0
  277. package/dist/usecases/insights/generateAiInsights.usecase.js.map +1 -0
  278. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.d.ts +18 -0
  279. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.d.ts.map +1 -0
  280. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.js +56 -0
  281. package/dist/usecases/insights/getInsightsWithAiStatus.usecase.js.map +1 -0
  282. package/dist/usecases/insights/insightLevelComputation.service.d.ts +41 -0
  283. package/dist/usecases/insights/insightLevelComputation.service.d.ts.map +1 -0
  284. package/dist/usecases/insights/insightLevelComputation.service.js +313 -0
  285. package/dist/usecases/insights/insightLevelComputation.service.js.map +1 -0
  286. package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts.map +1 -1
  287. package/dist/usecases/version/triggerSelfUpdate.usecase.js +3 -0
  288. package/dist/usecases/version/triggerSelfUpdate.usecase.js.map +1 -1
  289. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"selfUpdate.cli.gateway.js","sourceRoot":"","sources":["../../../src/interface-adapters/gateways/selfUpdate.cli.gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAEhE,MAAM,oBAAoB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAQhD,SAAS,yBAAyB;IAChC,OAAO;QACL,aAAa,EAAE,oBAAoB;QACnC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACvD,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,OAAO,oBAAoB;IACd,YAAY,CAA2B;IAExD,YAAY,YAAwC;QAClD,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,yBAAyB,EAAE,CAAA;IACjE,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;YAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;QAEjD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;YACD,aAAa,CAAC,aAAa,CAAC,CAAA;QAC9B,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,EAAE,IAAI,CAAA;QACjC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"selfUpdate.cli.gateway.js","sourceRoot":"","sources":["../../../src/interface-adapters/gateways/selfUpdate.cli.gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { Presenter } from '../../shared/foundation/presenter.base.js';
2
+ import type { DeveloperInsight, CategoryLevels, DeveloperMetrics, InsightDescription } from '../../entities/insight/developerInsight.js';
3
+ import type { TeamInsight, AverageLevels } from '../../entities/insight/teamInsight.js';
4
+ import type { DeveloperTitle } from '../../entities/insight/developerTitle.js';
5
+ import type { InsightCategory } from '../../entities/insight/insightCategory.js';
6
+ export interface DeveloperInsightViewModel {
7
+ developerName: string;
8
+ title: DeveloperTitle;
9
+ overallLevel: number;
10
+ categoryLevels: CategoryLevels;
11
+ strengths: InsightCategory[];
12
+ weaknesses: InsightCategory[];
13
+ topPriority: InsightCategory | null;
14
+ reviewCount: number;
15
+ metrics: DeveloperMetrics;
16
+ insightDescriptions: InsightDescription[];
17
+ }
18
+ export interface TeamInsightViewModel {
19
+ developerCount: number;
20
+ totalReviewCount: number;
21
+ averageLevels: AverageLevels;
22
+ strengths: InsightCategory[];
23
+ weaknesses: InsightCategory[];
24
+ tips: string[];
25
+ }
26
+ export interface InsightsViewModel {
27
+ isEmpty: boolean;
28
+ developers: DeveloperInsightViewModel[];
29
+ team: TeamInsightViewModel;
30
+ }
31
+ interface InsightsPresenterInput {
32
+ developerInsights: DeveloperInsight[];
33
+ teamInsight: TeamInsight;
34
+ }
35
+ export declare class InsightsPresenter implements Presenter<InsightsPresenterInput, InsightsViewModel> {
36
+ present(data: InsightsPresenterInput): InsightsViewModel;
37
+ private presentDeveloper;
38
+ private presentTeam;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=insights.presenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights.presenter.d.ts","sourceRoot":"","sources":["../../../src/interface-adapters/presenters/insights.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AACrI,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,UAAU,sBAAsB;IAC9B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,iBAAkB,YAAW,SAAS,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;IAC5F,OAAO,CAAC,IAAI,EAAE,sBAAsB,GAAG,iBAAiB;IAcxD,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,WAAW;CAUpB"}
@@ -0,0 +1,36 @@
1
+ export class InsightsPresenter {
2
+ present(data) {
3
+ const { developerInsights, teamInsight } = data;
4
+ const sortedDevelopers = [...developerInsights].sort((a, b) => b.overallLevel - a.overallLevel);
5
+ return {
6
+ isEmpty: developerInsights.length === 0,
7
+ developers: sortedDevelopers.map((insight) => this.presentDeveloper(insight)),
8
+ team: this.presentTeam(teamInsight),
9
+ };
10
+ }
11
+ presentDeveloper(insight) {
12
+ return {
13
+ developerName: insight.developerName,
14
+ title: insight.title,
15
+ overallLevel: insight.overallLevel,
16
+ categoryLevels: insight.categoryLevels,
17
+ strengths: insight.strengths,
18
+ weaknesses: insight.weaknesses,
19
+ topPriority: insight.topPriority,
20
+ reviewCount: insight.reviewCount,
21
+ metrics: insight.metrics,
22
+ insightDescriptions: insight.insightDescriptions,
23
+ };
24
+ }
25
+ presentTeam(teamInsight) {
26
+ return {
27
+ developerCount: teamInsight.developerCount,
28
+ totalReviewCount: teamInsight.totalReviewCount,
29
+ averageLevels: teamInsight.averageLevels,
30
+ strengths: teamInsight.strengths,
31
+ weaknesses: teamInsight.weaknesses,
32
+ tips: teamInsight.tips,
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=insights.presenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights.presenter.js","sourceRoot":"","sources":["../../../src/interface-adapters/presenters/insights.presenter.ts"],"names":[],"mappings":"AAuCA,MAAM,OAAO,iBAAiB;IAC5B,OAAO,CAAC,IAA4B;QAClC,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAEhD,MAAM,gBAAgB,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAC1C,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,iBAAiB,CAAC,MAAM,KAAK,CAAC;YACvC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC7E,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;SACpC,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,OAAyB;QAChD,OAAO;YACL,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;SACjD,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,WAAwB;QAC1C,OAAO;YACL,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,IAAI,EAAE,WAAW,CAAC,IAAI;SACvB,CAAC;IACJ,CAAC;CACF"}
@@ -13,7 +13,10 @@
13
13
  <div class="logo"><i data-lucide="bot"></i></div>
14
14
  <h1>Reviewflow</h1>
15
15
  <div class="header-actions">
16
- <div id="version-update-area" class="version-update-area"></div>
16
+ <div class="version-update-wrapper">
17
+ <div id="version-update-area" class="version-update-area"></div>
18
+ <div id="version-manual-update-container"></div>
19
+ </div>
17
20
  <button id="check-claude-btn" class="btn btn-primary" onclick="checkClaudeStatus()">
18
21
  <i data-lucide="search"></i> <span id="i18n-check-claude"></span>
19
22
  </button>
@@ -157,6 +160,16 @@
157
160
  </div>
158
161
  </div>
159
162
 
163
+ <div id="team-section" class="section hidden">
164
+ <div class="section-header clickable" onclick="toggleTeamSection()" role="button" tabindex="0" onkeydown="activateOnKeydown(event)">
165
+ <i data-lucide="users"></i> <span id="i18n-section-team"></span>
166
+ <span id="team-toggle" class="toggle-icon collapsed"><i data-lucide="chevron-down"></i></span>
167
+ </div>
168
+ <div id="team-tab-content" class="section-content hidden">
169
+ <div class="empty-state" id="i18n-empty-team"></div>
170
+ </div>
171
+ </div>
172
+
160
173
  <div class="section" id="active-reviews-section">
161
174
  <div class="section-header">
162
175
  <i data-lucide="file-search"></i> <span id="i18n-section-active-reviews"></span>
@@ -244,6 +257,11 @@
244
257
  <div id="mr-sheet-content" class="sheet-content"></div>
245
258
  </div>
246
259
 
260
+ <div id="dev-sheet-overlay" class="sheet-overlay" onclick="closeDevSheet()"></div>
261
+ <div id="dev-sheet" class="sheet-panel">
262
+ <div id="dev-sheet-content" class="sheet-content"></div>
263
+ </div>
264
+
247
265
  <script type="module">
248
266
  import { t, setLanguage, getLanguage } from './modules/i18n.js';
249
267
  import { formatTime, formatDuration, formatPhase, formatLogTime } from './modules/formatting.js';
@@ -263,6 +281,9 @@
263
281
  import { renderCollapsibleList, toggleCollapsibleList } from './modules/collapsibleList.js';
264
282
  import { renderMrSheetContent, drawScoreTimeline, drawIssuesBreakdown } from './modules/mrSheet.js';
265
283
  import { drawScoreTrendChart, drawReviewActivityChart, drawScoreDistributionChart, animateCounter } from './modules/statsCharts.js';
284
+ import { renderTeamTab, fetchAndRenderTeamTab } from './modules/teamTab.js';
285
+ import { renderDeveloperSheetContent, drawRadarChart } from './modules/developerSheet.js';
286
+ import { buildInsightsReport } from './modules/insightsReport.js';
266
287
 
267
288
  const API_URL = window.location.origin;
268
289
  const WS_URL = `ws://${window.location.host}/ws`;
@@ -279,6 +300,8 @@
279
300
  let currentStatsReviews = [];
280
301
  let currentDevFilter = 'all';
281
302
  let focusStripCompact = false;
303
+ let teamCollapsed = true;
304
+ let currentInsightsData = null;
282
305
  const loadingState = { status: 0, reviewFiles: 0, stats: 0, mrTracking: 0 };
283
306
  let hasLoadedStatusOnce = false;
284
307
  const secondarySections = ['active-followups-section', 'pending-approval-section', 'completed-reviews-section'];
@@ -1179,6 +1202,171 @@
1179
1202
  }
1180
1203
  }
1181
1204
 
1205
+ function toggleTeamSection() {
1206
+ teamCollapsed = !teamCollapsed;
1207
+ const content = document.getElementById('team-tab-content');
1208
+ const toggle = document.getElementById('team-toggle');
1209
+
1210
+ if (teamCollapsed) {
1211
+ content.classList.add('hidden');
1212
+ toggle.classList.add('collapsed');
1213
+ } else {
1214
+ content.classList.remove('hidden');
1215
+ toggle.classList.remove('collapsed');
1216
+ }
1217
+ }
1218
+
1219
+ let teamAnalysisCollapsed = false;
1220
+
1221
+ function toggleTeamAnalysis() {
1222
+ teamAnalysisCollapsed = !teamAnalysisCollapsed;
1223
+ const body = document.getElementById('team-analysis-body');
1224
+ const toggle = document.getElementById('team-analysis-toggle');
1225
+ if (body) {
1226
+ body.classList.toggle('hidden', teamAnalysisCollapsed);
1227
+ }
1228
+ if (toggle) {
1229
+ toggle.classList.toggle('collapsed', teamAnalysisCollapsed);
1230
+ }
1231
+ refreshIcons();
1232
+ }
1233
+
1234
+ let aiGenerationInProgress = false;
1235
+
1236
+ async function fetchTeamInsights() {
1237
+ if (!currentProjectPath) return;
1238
+ if (aiGenerationInProgress) return;
1239
+ const container = document.getElementById('team-tab-content');
1240
+ if (!container) return;
1241
+
1242
+ container.innerHTML = `<div class="empty-state team-loading">${icon('loader-circle', 'spinning')} ${t('team.loading')}</div>`;
1243
+ refreshIcons();
1244
+
1245
+ try {
1246
+ const response = await fetch(`${API_URL}/api/insights?path=${encodeURIComponent(currentProjectPath)}`);
1247
+ const data = await response.json();
1248
+ currentInsightsData = data;
1249
+
1250
+ container.innerHTML = renderTeamTab(data, t);
1251
+ refreshIcons();
1252
+
1253
+ setTimeout(() => {
1254
+ container.querySelectorAll('.stat-bar-fill[data-target-width]').forEach((bar) => {
1255
+ bar.style.width = bar.dataset.targetWidth;
1256
+ });
1257
+ }, 50);
1258
+ } catch (error) {
1259
+ console.error('Error fetching team insights:', error);
1260
+ container.innerHTML = `<div class="empty-state">${t('team.noData')}</div>`;
1261
+ }
1262
+ }
1263
+
1264
+ async function generateAiInsights() {
1265
+ if (!currentProjectPath || aiGenerationInProgress) return;
1266
+ aiGenerationInProgress = true;
1267
+ const button = document.querySelector('.ai-generate-btn');
1268
+ if (button) {
1269
+ button.disabled = true;
1270
+ button.classList.add('loading');
1271
+ button.innerHTML = `${icon('loader-circle', 'spinning')} ${t('ai.generating')}`;
1272
+ refreshIcons();
1273
+ }
1274
+ try {
1275
+ const response = await fetch(`${API_URL}/api/insights/generate`, {
1276
+ method: 'POST',
1277
+ headers: { 'Content-Type': 'application/json' },
1278
+ body: JSON.stringify({ path: currentProjectPath, language: getLanguage() }),
1279
+ });
1280
+ if (!response.ok) {
1281
+ const errorData = await response.json().catch(() => ({}));
1282
+ throw new Error(errorData.error || t('ai.error'));
1283
+ }
1284
+ aiGenerationInProgress = false;
1285
+ await fetchTeamInsights();
1286
+ } catch (error) {
1287
+ aiGenerationInProgress = false;
1288
+ console.error('Error generating AI insights:', error);
1289
+ showToast(error.message || t('ai.error'), 'error');
1290
+ if (button) {
1291
+ button.disabled = false;
1292
+ button.classList.remove('loading');
1293
+ button.innerHTML = `${icon('sparkles')} ${t('ai.generate')}`;
1294
+ refreshIcons();
1295
+ }
1296
+ }
1297
+ }
1298
+
1299
+ function openDevSheet(encodedName) {
1300
+ const developerName = decodeURIComponent(encodedName);
1301
+ if (!currentInsightsData || !currentInsightsData.developers) return;
1302
+ const developer = currentInsightsData.developers.find(
1303
+ (dev) => dev.developerName === developerName
1304
+ );
1305
+ if (!developer) return;
1306
+
1307
+ const aiDevelopers = currentInsightsData.aiInsights?.developers || [];
1308
+ const aiDeveloper = aiDevelopers.find(
1309
+ (aiDev) => aiDev.developerName === developerName
1310
+ ) || null;
1311
+
1312
+ const contentEl = document.getElementById('dev-sheet-content');
1313
+ contentEl.innerHTML = renderDeveloperSheetContent(developer, t, aiDeveloper);
1314
+
1315
+ document.getElementById('dev-sheet-overlay').classList.add('open');
1316
+ document.getElementById('dev-sheet').classList.add('open');
1317
+ document.body.style.overflow = 'hidden';
1318
+
1319
+ refreshIcons();
1320
+
1321
+ requestAnimationFrame(() => {
1322
+ drawRadarChart('dev-radar-canvas', developer.categoryLevels, t);
1323
+ const developerReviews = currentStatsReviews.filter(
1324
+ (review) => review.assignedBy === developerName
1325
+ );
1326
+ drawScoreTrendChart('dev-score-trend-canvas', developerReviews);
1327
+ contentEl.querySelectorAll('.stat-bar-fill[data-target-width]').forEach((bar) => {
1328
+ setTimeout(() => { bar.style.width = bar.dataset.targetWidth; }, 50);
1329
+ });
1330
+ });
1331
+ }
1332
+
1333
+ function closeDevSheet() {
1334
+ document.getElementById('dev-sheet-overlay').classList.remove('open');
1335
+ document.getElementById('dev-sheet').classList.remove('open');
1336
+ document.body.style.overflow = '';
1337
+ }
1338
+
1339
+ function exportInsightsPdf() {
1340
+ if (!currentInsightsData || currentInsightsData.isEmpty) return;
1341
+
1342
+ const reportHtml = buildInsightsReport(currentInsightsData, t);
1343
+
1344
+ const iframe = document.createElement('iframe');
1345
+ iframe.style.position = 'fixed';
1346
+ iframe.style.right = '0';
1347
+ iframe.style.bottom = '0';
1348
+ iframe.style.width = '0';
1349
+ iframe.style.height = '0';
1350
+ iframe.style.border = 'none';
1351
+ document.body.appendChild(iframe);
1352
+
1353
+ const document_ = iframe.contentDocument || iframe.contentWindow.document;
1354
+ document_.open();
1355
+ document_.write(reportHtml);
1356
+ document_.close();
1357
+
1358
+ iframe.contentWindow.addEventListener('afterprint', () => {
1359
+ if (iframe.parentNode) document.body.removeChild(iframe);
1360
+ });
1361
+
1362
+ setTimeout(() => {
1363
+ iframe.contentWindow.print();
1364
+ setTimeout(() => {
1365
+ if (iframe.parentNode) document.body.removeChild(iframe);
1366
+ }, 60000);
1367
+ }, 250);
1368
+ }
1369
+
1182
1370
  async function recalculateStats() {
1183
1371
  if (!currentProjectPath) return;
1184
1372
  const button = document.getElementById('recalculate-btn');
@@ -1706,6 +1894,7 @@
1706
1894
  }
1707
1895
  if (recalcButton) recalcButton.disabled = false;
1708
1896
  fetchProjectStats();
1897
+ fetchTeamInsights();
1709
1898
  break;
1710
1899
  }
1711
1900
  case 'pong':
@@ -1949,8 +2138,10 @@
1949
2138
  fetchReviewFiles();
1950
2139
  fetchProjectStats();
1951
2140
  fetchMrTracking();
2141
+ fetchTeamInsights();
1952
2142
 
1953
2143
  document.getElementById('stats-section').classList.remove('hidden');
2144
+ document.getElementById('team-section').classList.remove('hidden');
1954
2145
 
1955
2146
  const platformIcon = activePlatform === 'gitlab' ? '<i data-lucide="gitlab"></i> GitLab' : '<i data-lucide="github"></i> GitHub';
1956
2147
  info.innerHTML = `
@@ -2211,6 +2402,9 @@
2211
2402
  const recalculateLabel = document.getElementById('recalculate-label');
2212
2403
  if (recalculateLabel) recalculateLabel.textContent = t('stats.recalculate');
2213
2404
 
2405
+ const sectionTeam = document.getElementById('i18n-section-team');
2406
+ if (sectionTeam) sectionTeam.textContent = t('team.title');
2407
+
2214
2408
  const sectionActiveReviews = document.getElementById('i18n-section-active-reviews');
2215
2409
  if (sectionActiveReviews) sectionActiveReviews.textContent = t('section.activeReviews');
2216
2410
 
@@ -2245,6 +2439,9 @@
2245
2439
  const emptyPendingApproval = document.getElementById('i18n-empty-pending-approval');
2246
2440
  if (emptyPendingApproval) emptyPendingApproval.textContent = t('empty.pendingApproval');
2247
2441
 
2442
+ const emptyTeam = document.getElementById('i18n-empty-team');
2443
+ if (emptyTeam) emptyTeam.textContent = t('team.noData');
2444
+
2248
2445
  const emptyLoading = document.getElementById('i18n-empty-loading');
2249
2446
  if (emptyLoading) emptyLoading.textContent = t('status.loading');
2250
2447
 
@@ -2316,6 +2513,9 @@
2316
2513
  }, 2000);
2317
2514
  setTimeout(() => clearInterval(checkInterval), 60000);
2318
2515
  }, 3000);
2516
+ } else if (data.status === 'permission-denied') {
2517
+ setVersionCheckState('idle', t);
2518
+ showManualUpdateCommand(data.command);
2319
2519
  } else {
2320
2520
  showToast(data.error || t('version.updateFailed'), 'error');
2321
2521
  setVersionCheckState('idle', t);
@@ -2327,6 +2527,35 @@
2327
2527
  }
2328
2528
  }
2329
2529
 
2530
+ function showManualUpdateCommand(command) {
2531
+ const container = document.getElementById('version-manual-update-container');
2532
+ if (!container) return;
2533
+
2534
+ if (container.children.length > 0) {
2535
+ container.innerHTML = '';
2536
+ return;
2537
+ }
2538
+
2539
+ container.innerHTML = `
2540
+ <div class="version-manual-dropdown">
2541
+ <p>${t('version.permissionDenied')}</p>
2542
+ <div class="version-command-row">
2543
+ <code>${command}</code>
2544
+ <button class="btn btn-icon btn-copy" title="${t('version.copyCommand')}" onclick="copyUpdateCommand('${command}')">
2545
+ <i data-lucide="copy"></i>
2546
+ </button>
2547
+ </div>
2548
+ </div>
2549
+ `;
2550
+ refreshIcons();
2551
+ }
2552
+
2553
+ function copyUpdateCommand(command) {
2554
+ navigator.clipboard.writeText(command).then(() => {
2555
+ showToast(t('version.commandCopied'), 'success');
2556
+ });
2557
+ }
2558
+
2330
2559
  function openMrSheet(encodedMrId) {
2331
2560
  const mrId = safeDecodeURIComponent(encodedMrId);
2332
2561
  const mr = mrDataStore.get(mrId);
@@ -2358,12 +2587,16 @@
2358
2587
  }
2359
2588
 
2360
2589
  document.addEventListener('keydown', (e) => {
2361
- if (e.key === 'Escape') closeMrSheet();
2590
+ if (e.key === 'Escape') {
2591
+ closeMrSheet();
2592
+ closeDevSheet();
2593
+ }
2362
2594
  });
2363
2595
 
2364
2596
  // Expose functions to HTML onclick handlers
2365
2597
  window.checkForUpdates = checkForUpdates;
2366
2598
  window.triggerVersionUpdate = triggerVersionUpdate;
2599
+ window.copyUpdateCommand = copyUpdateCommand;
2367
2600
  window.toggleCollapsibleList = toggleCollapsibleList;
2368
2601
  window.checkClaudeStatus = checkClaudeStatus;
2369
2602
  window.toggleLogs = toggleLogs;
@@ -2391,6 +2624,12 @@
2391
2624
  window.handleCleanupClick = handleCleanupClick;
2392
2625
  window.openMrSheet = openMrSheet;
2393
2626
  window.closeMrSheet = closeMrSheet;
2627
+ window.openDevSheet = openDevSheet;
2628
+ window.closeDevSheet = closeDevSheet;
2629
+ window.generateAiInsights = generateAiInsights;
2630
+ window.exportInsightsPdf = exportInsightsPdf;
2631
+ window.toggleTeamAnalysis = toggleTeamAnalysis;
2632
+ window.toggleTeamSection = toggleTeamSection;
2394
2633
  window.clearLogs = clearLogs;
2395
2634
 
2396
2635
  // Init cleanup section
@@ -2421,6 +2660,7 @@
2421
2660
  fetchReviewFiles();
2422
2661
  fetchProjectStats();
2423
2662
  fetchMrTracking();
2663
+ fetchTeamInsights();
2424
2664
  }, 30000);
2425
2665
 
2426
2666
  setInterval(() => {
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @param {object} developer
3
+ * @param {(key: string, params?: Record<string, string|number>) => string} translate
4
+ * @param {object|null} [aiDeveloper]
5
+ * @returns {string}
6
+ */
7
+ export function renderDeveloperSheetContent(developer: object, translate: (key: string, params?: Record<string, string | number>) => string, aiDeveloper?: object | null): string;
8
+ /**
9
+ * @param {string} canvasId
10
+ * @param {object} categoryLevels
11
+ * @param {(key: string, params?: Record<string, string|number>) => string} translate
12
+ */
13
+ export function drawRadarChart(canvasId: string, categoryLevels: object, translate: (key: string, params?: Record<string, string | number>) => string): void;
14
+ //# sourceMappingURL=developerSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerSheet.d.ts","sourceRoot":"","sources":["../../../../../src/interface-adapters/views/dashboard/modules/developerSheet.js"],"names":[],"mappings":"AAsJA;;;;;GAKG;AACH,uDALW,MAAM,aACN,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAC,MAAM,CAAC,KAAK,MAAM,gBAC/D,MAAM,GAAC,IAAI,GACT,MAAM,CA+FlB;AAED;;;;GAIG;AACH,yCAJW,MAAM,kBACN,MAAM,aACN,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAC,MAAM,CAAC,KAAK,MAAM,QAwGzE"}