reviewflow 3.37.1 → 3.39.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 (270) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/dashboard/index.html +45 -1
  3. package/dist/dashboard/modules/i18n.d.ts.map +1 -1
  4. package/dist/dashboard/modules/i18n.js +30 -0
  5. package/dist/dashboard/modules/i18n.js.map +1 -1
  6. package/dist/dashboard/modules/keyInsights.d.ts +19 -0
  7. package/dist/dashboard/modules/keyInsights.d.ts.map +1 -0
  8. package/dist/dashboard/modules/keyInsights.js +68 -0
  9. package/dist/dashboard/modules/keyInsights.js.map +1 -0
  10. package/dist/dashboard/modules/statsCharts.d.ts +26 -0
  11. package/dist/dashboard/modules/statsCharts.d.ts.map +1 -1
  12. package/dist/dashboard/modules/statsCharts.js +184 -0
  13. package/dist/dashboard/modules/statsCharts.js.map +1 -1
  14. package/dist/dashboard/styles.css +54 -0
  15. package/dist/frameworks/claude/claudeInvoker.d.ts +2 -0
  16. package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
  17. package/dist/frameworks/claude/claudeInvoker.js +12 -2
  18. package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
  19. package/dist/main/dependencies.d.ts +1 -1
  20. package/dist/main/dependencies.d.ts.map +1 -1
  21. package/dist/main/dependencies.js.map +1 -1
  22. package/dist/main/routes.js +2 -2
  23. package/dist/main/routes.js.map +1 -1
  24. package/dist/mcp/mcpServerStdio.d.ts +190 -0
  25. package/dist/mcp/mcpServerStdio.d.ts.map +1 -1
  26. package/dist/mcp/mcpServerStdio.js +23 -1
  27. package/dist/mcp/mcpServerStdio.js.map +1 -1
  28. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.guard.d.ts +1 -1
  29. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.d.ts +2 -2
  30. package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.d.ts +1 -0
  31. package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.d.ts.map +1 -1
  32. package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.js +2 -1
  33. package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.js.map +1 -1
  34. package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.d.ts +16 -0
  35. package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.d.ts.map +1 -0
  36. package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.js +40 -0
  37. package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.js.map +1 -0
  38. package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.d.ts +7 -3
  39. package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.d.ts.map +1 -1
  40. package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js +7 -4
  41. package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js.map +1 -1
  42. package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.d.ts.map +1 -1
  43. package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.js +8 -1
  44. package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.js.map +1 -1
  45. package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts +1 -1
  46. package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts.map +1 -1
  47. package/dist/modules/ember-chat/services/emberSystemPrompt.js +15 -2
  48. package/dist/modules/ember-chat/services/emberSystemPrompt.js.map +1 -1
  49. package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.d.ts.map +1 -1
  50. package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js +1 -1
  51. package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js.map +1 -1
  52. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +1 -1
  53. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  54. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +1 -1
  55. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  56. package/dist/modules/setup-wizard/entities/setupState/setupState.guard.d.ts +1 -1
  57. package/dist/modules/setup-wizard/entities/setupState/setupState.schema.d.ts +1 -1
  58. package/dist/modules/setup-wizard/entities/stepId/stepId.schema.d.ts +1 -1
  59. package/dist/modules/setup-wizard/entities/wizardStreamEvent/wizardStreamEvent.guard.d.ts +4 -4
  60. package/dist/modules/setup-wizard/entities/wizardStreamEvent/wizardStreamEvent.schema.d.ts +8 -8
  61. package/dist/modules/statistics-insights/entities/insight/developerInsight.guard.d.ts +8 -8
  62. package/dist/modules/statistics-insights/entities/insight/developerInsight.schema.d.ts +9 -9
  63. package/dist/modules/statistics-insights/entities/insight/insightTrend.d.ts +1 -1
  64. package/dist/modules/statistics-insights/entities/stats/bugCategory.d.ts +10 -0
  65. package/dist/modules/statistics-insights/entities/stats/bugCategory.d.ts.map +1 -0
  66. package/dist/modules/statistics-insights/entities/stats/bugCategory.js +31 -0
  67. package/dist/modules/statistics-insights/entities/stats/bugCategory.js.map +1 -0
  68. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.d.ts +20 -0
  69. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.d.ts.map +1 -0
  70. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.js +27 -0
  71. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.js.map +1 -0
  72. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.d.ts +10 -0
  73. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.d.ts.map +1 -0
  74. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.js +11 -0
  75. package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.js.map +1 -0
  76. package/dist/modules/statistics-insights/entities/stats/keyInsights.d.ts +21 -0
  77. package/dist/modules/statistics-insights/entities/stats/keyInsights.d.ts.map +1 -0
  78. package/dist/modules/statistics-insights/entities/stats/keyInsights.js +101 -0
  79. package/dist/modules/statistics-insights/entities/stats/keyInsights.js.map +1 -0
  80. package/dist/modules/statistics-insights/entities/stats/monthlyVolume.d.ts +20 -0
  81. package/dist/modules/statistics-insights/entities/stats/monthlyVolume.d.ts.map +1 -0
  82. package/dist/modules/statistics-insights/entities/stats/monthlyVolume.js +36 -0
  83. package/dist/modules/statistics-insights/entities/stats/monthlyVolume.js.map +1 -0
  84. package/dist/modules/statistics-insights/entities/stats/projectStats.d.ts +10 -30
  85. package/dist/modules/statistics-insights/entities/stats/projectStats.d.ts.map +1 -1
  86. package/dist/modules/statistics-insights/entities/stats/projectStats.guard.d.ts +97 -0
  87. package/dist/modules/statistics-insights/entities/stats/projectStats.guard.d.ts.map +1 -0
  88. package/dist/modules/statistics-insights/entities/stats/projectStats.guard.js +6 -0
  89. package/dist/modules/statistics-insights/entities/stats/projectStats.guard.js.map +1 -0
  90. package/dist/modules/statistics-insights/entities/stats/projectStats.js +21 -1
  91. package/dist/modules/statistics-insights/entities/stats/projectStats.js.map +1 -1
  92. package/dist/modules/statistics-insights/entities/stats/projectStats.schema.d.ts +74 -0
  93. package/dist/modules/statistics-insights/entities/stats/projectStats.schema.d.ts.map +1 -0
  94. package/dist/modules/statistics-insights/entities/stats/projectStats.schema.js +39 -0
  95. package/dist/modules/statistics-insights/entities/stats/projectStats.schema.js.map +1 -0
  96. package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.d.ts +7 -0
  97. package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.d.ts.map +1 -0
  98. package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.js +13 -0
  99. package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.js.map +1 -0
  100. package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.d.ts +29 -0
  101. package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.d.ts.map +1 -0
  102. package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.js +103 -0
  103. package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.js.map +1 -0
  104. package/dist/modules/statistics-insights/interface-adapters/controllers/http/stats.routes.d.ts.map +1 -1
  105. package/dist/modules/statistics-insights/interface-adapters/controllers/http/stats.routes.js +20 -5
  106. package/dist/modules/statistics-insights/interface-adapters/controllers/http/stats.routes.js.map +1 -1
  107. package/dist/modules/statistics-insights/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts.map +1 -1
  108. package/dist/modules/statistics-insights/interface-adapters/gateways/fileSystem/stats.fileSystem.js +15 -4
  109. package/dist/modules/statistics-insights/interface-adapters/gateways/fileSystem/stats.fileSystem.js.map +1 -1
  110. package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.d.ts +19 -0
  111. package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.d.ts.map +1 -0
  112. package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.js +24 -0
  113. package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.js.map +1 -0
  114. package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.d.ts +16 -0
  115. package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.d.ts.map +1 -0
  116. package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.js +21 -0
  117. package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.js.map +1 -0
  118. package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.d.ts +14 -0
  119. package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.d.ts.map +1 -0
  120. package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.js +16 -0
  121. package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.js.map +1 -0
  122. package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.d.ts +25 -0
  123. package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.d.ts.map +1 -0
  124. package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.js +52 -0
  125. package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.js.map +1 -0
  126. package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.d.ts +19 -0
  127. package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.d.ts.map +1 -0
  128. package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.js +85 -0
  129. package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.js.map +1 -0
  130. package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.d.ts +12 -0
  131. package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.d.ts.map +1 -0
  132. package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.js +10 -0
  133. package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.js.map +1 -0
  134. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
  135. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +1 -1
  136. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
  137. package/dist/tests/acceptance/190-ember-live-answers-subscription.acceptance.test.js +1 -1
  138. package/dist/tests/acceptance/190-ember-live-answers-subscription.acceptance.test.js.map +1 -1
  139. package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.d.ts +2 -0
  140. package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.d.ts.map +1 -0
  141. package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.js +100 -0
  142. package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.js.map +1 -0
  143. package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.d.ts +15 -0
  144. package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.d.ts.map +1 -0
  145. package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.js +183 -0
  146. package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.js.map +1 -0
  147. package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.d.ts +15 -0
  148. package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.d.ts.map +1 -0
  149. package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.js +115 -0
  150. package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.js.map +1 -0
  151. package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.d.ts +15 -0
  152. package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.d.ts.map +1 -0
  153. package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.js +136 -0
  154. package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.js.map +1 -0
  155. package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.js +21 -1
  156. package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.js.map +1 -1
  157. package/dist/tests/acceptance/80-split-stats-service.acceptance.test.d.ts +20 -0
  158. package/dist/tests/acceptance/80-split-stats-service.acceptance.test.d.ts.map +1 -0
  159. package/dist/tests/acceptance/80-split-stats-service.acceptance.test.js +254 -0
  160. package/dist/tests/acceptance/80-split-stats-service.acceptance.test.js.map +1 -0
  161. package/dist/tests/factories/persistedInsightsData.factory.d.ts +1 -1
  162. package/dist/tests/factories/persistedInsightsData.factory.d.ts.map +1 -1
  163. package/dist/tests/stubs/emberMemory.stub.d.ts.map +1 -1
  164. package/dist/tests/stubs/emberMemory.stub.js +8 -1
  165. package/dist/tests/stubs/emberMemory.stub.js.map +1 -1
  166. package/dist/tests/units/dashboard/modules/i18n.test.js +13 -0
  167. package/dist/tests/units/dashboard/modules/i18n.test.js.map +1 -1
  168. package/dist/tests/units/dashboard/modules/keyInsights.test.d.ts +2 -0
  169. package/dist/tests/units/dashboard/modules/keyInsights.test.d.ts.map +1 -0
  170. package/dist/tests/units/dashboard/modules/keyInsights.test.js +40 -0
  171. package/dist/tests/units/dashboard/modules/keyInsights.test.js.map +1 -0
  172. package/dist/tests/units/dashboard/modules/statsCharts.test.js +160 -1
  173. package/dist/tests/units/dashboard/modules/statsCharts.test.js.map +1 -1
  174. package/dist/tests/units/entities/stats/projectStats.schema.test.d.ts +2 -0
  175. package/dist/tests/units/entities/stats/projectStats.schema.test.d.ts.map +1 -0
  176. package/dist/tests/units/entities/stats/projectStats.schema.test.js +50 -0
  177. package/dist/tests/units/entities/stats/projectStats.schema.test.js.map +1 -0
  178. package/dist/tests/units/entities/stats/reviewDuration.format.test.d.ts +2 -0
  179. package/dist/tests/units/entities/stats/reviewDuration.format.test.d.ts.map +1 -0
  180. package/dist/tests/units/entities/stats/reviewDuration.format.test.js +14 -0
  181. package/dist/tests/units/entities/stats/reviewDuration.format.test.js.map +1 -0
  182. package/dist/tests/units/entities/stats/reviewOutput.parser.test.d.ts +2 -0
  183. package/dist/tests/units/entities/stats/reviewOutput.parser.test.d.ts.map +1 -0
  184. package/dist/tests/units/entities/stats/reviewOutput.parser.test.js +136 -0
  185. package/dist/tests/units/entities/stats/reviewOutput.parser.test.js.map +1 -0
  186. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js +101 -0
  187. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js.map +1 -1
  188. package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.d.ts +2 -0
  189. package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.d.ts.map +1 -0
  190. package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.js +99 -0
  191. package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.js.map +1 -0
  192. package/dist/tests/units/mcp/mcpServerStdioTools.test.d.ts +2 -0
  193. package/dist/tests/units/mcp/mcpServerStdioTools.test.d.ts.map +1 -0
  194. package/dist/tests/units/mcp/mcpServerStdioTools.test.js +21 -0
  195. package/dist/tests/units/mcp/mcpServerStdioTools.test.js.map +1 -0
  196. package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.d.ts +2 -0
  197. package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.d.ts.map +1 -0
  198. package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.js +79 -0
  199. package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.js.map +1 -0
  200. package/dist/tests/units/modules/ember-chat/entities/emberMemory.guard.test.js +22 -1
  201. package/dist/tests/units/modules/ember-chat/entities/emberMemory.guard.test.js.map +1 -1
  202. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js +20 -2
  203. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map +1 -1
  204. package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js +33 -0
  205. package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js.map +1 -1
  206. package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js +25 -14
  207. package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js.map +1 -1
  208. package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.d.ts +2 -0
  209. package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.d.ts.map +1 -0
  210. package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.js +24 -0
  211. package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.js.map +1 -0
  212. package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.d.ts +2 -0
  213. package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.d.ts.map +1 -0
  214. package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.js +35 -0
  215. package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.js.map +1 -0
  216. package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.d.ts +2 -0
  217. package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.d.ts.map +1 -0
  218. package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.js +93 -0
  219. package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.js.map +1 -0
  220. package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.d.ts +2 -0
  221. package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.d.ts.map +1 -0
  222. package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.js +156 -0
  223. package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.js.map +1 -0
  224. package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.d.ts +2 -0
  225. package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.d.ts.map +1 -0
  226. package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.js +43 -0
  227. package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.js.map +1 -0
  228. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js +13 -0
  229. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js.map +1 -1
  230. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.d.ts +2 -0
  231. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.d.ts.map +1 -0
  232. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.js +49 -0
  233. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.js.map +1 -0
  234. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.d.ts +2 -0
  235. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.d.ts.map +1 -0
  236. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.js +71 -0
  237. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.js.map +1 -0
  238. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.d.ts +2 -0
  239. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.d.ts.map +1 -0
  240. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.js +59 -0
  241. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.js.map +1 -0
  242. package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.d.ts +2 -0
  243. package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.d.ts.map +1 -0
  244. package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.js +251 -0
  245. package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.js.map +1 -0
  246. package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.d.ts +2 -0
  247. package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.d.ts.map +1 -0
  248. package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.js +18 -0
  249. package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.js.map +1 -0
  250. package/package.json +1 -1
  251. package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.d.ts +0 -2
  252. package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.d.ts.map +0 -1
  253. package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.js +0 -2
  254. package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.js.map +0 -1
  255. package/dist/modules/statistics-insights/services/statsService.d.ts +0 -57
  256. package/dist/modules/statistics-insights/services/statsService.d.ts.map +0 -1
  257. package/dist/modules/statistics-insights/services/statsService.js +0 -282
  258. package/dist/modules/statistics-insights/services/statsService.js.map +0 -1
  259. package/dist/tests/units/services/statsService.addReview.test.d.ts +0 -2
  260. package/dist/tests/units/services/statsService.addReview.test.d.ts.map +0 -1
  261. package/dist/tests/units/services/statsService.addReview.test.js +0 -103
  262. package/dist/tests/units/services/statsService.addReview.test.js.map +0 -1
  263. package/dist/tests/units/services/statsService.branches.test.d.ts +0 -2
  264. package/dist/tests/units/services/statsService.branches.test.d.ts.map +0 -1
  265. package/dist/tests/units/services/statsService.branches.test.js +0 -266
  266. package/dist/tests/units/services/statsService.branches.test.js.map +0 -1
  267. package/dist/tests/units/services/statsService.summary.test.d.ts +0 -2
  268. package/dist/tests/units/services/statsService.summary.test.d.ts.map +0 -1
  269. package/dist/tests/units/services/statsService.summary.test.js +0 -43
  270. package/dist/tests/units/services/statsService.summary.test.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,40 @@ 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.39.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.38.0...reviewflow-v3.39.0) (2026-06-20)
9
+
10
+
11
+ ### Added
12
+
13
+ * **analytics:** emit spec-203 bug categories from review skills ([37f8d8b](https://github.com/DGouron/review-flow/commit/37f8d8ba288c3131719e4fec795d501f25f2790d))
14
+ * **analytics:** emit spec-203 bug categories from review skills ([1c8c9fd](https://github.com/DGouron/review-flow/commit/1c8c9fdf5f7480ea349698b07f09cb7f7b7493dc))
15
+ * **analytics:** implement spec-203 bugs found by category ([b78cee4](https://github.com/DGouron/review-flow/commit/b78cee493da2a1de7015adfd913aca80f1c7a903))
16
+ * **analytics:** implement spec-203 bugs found by category ([8eb783b](https://github.com/DGouron/review-flow/commit/8eb783b57bf3e9558a94fa8c8197d419a202ccc4))
17
+ * **analytics:** implement spec-204 analytics overview header ([ae0d2c5](https://github.com/DGouron/review-flow/commit/ae0d2c5f5dcb46687300acc782a9fbe55532e32d))
18
+ * **analytics:** implement spec-204 analytics overview header ([48864da](https://github.com/DGouron/review-flow/commit/48864da6f158cccc488fdb69eaf4706602f3c36d))
19
+ * **analytics:** implement spec-205 key insight cards ([29b1917](https://github.com/DGouron/review-flow/commit/29b19176b7c816d0af328983513c389d831f241f))
20
+ * **analytics:** implement spec-205 key insight cards ([54b1ea0](https://github.com/DGouron/review-flow/commit/54b1ea07cf6c70058ca3e9e33f105bcf50dc6dc7))
21
+
22
+
23
+ ### Fixed
24
+
25
+ * **dashboard:** style key insight cards (spec-205) ([b2055f5](https://github.com/DGouron/review-flow/commit/b2055f55d00fa5a5a650290cecdbd5e20e8e9f83))
26
+ * **dashboard:** style key insight cards (spec-205) ([a6670b2](https://github.com/DGouron/review-flow/commit/a6670b2b534407ea11848f8237f3bf8c3c92d2ba))
27
+
28
+
29
+ ### Changed
30
+
31
+ * **stats:** split statsService god object into layers (spec-80) ([7e2b73d](https://github.com/DGouron/review-flow/commit/7e2b73d70ddd9067d3582ac8f9f6105bcec5edea))
32
+ * **stats:** split statsService god object into layers (spec-80) ([07ec13d](https://github.com/DGouron/review-flow/commit/07ec13daab22bffadf40bee91a132ab566f07a7e))
33
+
34
+ ## [3.38.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.37.1...reviewflow-v3.38.0) (2026-06-18)
35
+
36
+
37
+ ### Added
38
+
39
+ * **ember-chat:** implement spec-193 record recurring insight ([7e409b3](https://github.com/DGouron/review-flow/commit/7e409b3729311d797b140f4c0f393760e663d55c))
40
+ * **ember-chat:** implement spec-193 record recurring insight ([94192d8](https://github.com/DGouron/review-flow/commit/94192d8746761e20d6a17c2e9ca97eb0b5a91bbc))
41
+
8
42
  ## [3.37.1](https://github.com/DGouron/review-flow/compare/reviewflow-v3.37.0...reviewflow-v3.37.1) (2026-06-17)
9
43
 
10
44
 
@@ -423,7 +423,8 @@
423
423
  import { renderVersionUpdateArea, setVersionCheckState } from './modules/versionUpdate.js';
424
424
  import { renderCollapsibleList, toggleCollapsibleList } from './modules/collapsibleList.js';
425
425
  import { renderMrSheetContent, drawScoreTimeline, drawIssuesBreakdown } from './modules/mrSheet.js';
426
- import { drawScoreTrendChart, drawReviewActivityChart, drawScoreDistributionChart, animateCounter } from './modules/statsCharts.js';
426
+ import { drawScoreTrendChart, drawReviewActivityChart, drawScoreDistributionChart, drawBugsByCategoryChart, drawReviewsPerMonthChart, animateCounter } from './modules/statsCharts.js';
427
+ import { renderKeyInsightsHtml } from './modules/keyInsights.js';
427
428
  import { renderTeamTab, fetchAndRenderTeamTab } from './modules/teamTab.js';
428
429
  import { renderDeveloperSheetContent, drawRadarChart } from './modules/developerSheet.js';
429
430
  import { buildInsightsReport } from './modules/insightsReport.js';
@@ -1097,8 +1098,38 @@
1097
1098
 
1098
1099
  const numericScore = parseFloat(s.averageScore);
1099
1100
  const isScoreNumeric = !isNaN(numericScore);
1101
+ const header = data.analyticsHeader;
1102
+
1103
+ const analyticsHeaderMarkup = header && header.isEmpty
1104
+ ? `<div class="empty-state">${header.emptyMessage || t('stats.noReviews')}</div>`
1105
+ : header
1106
+ ? `
1107
+ <div class="stats-kpi-row">
1108
+ <div class="stat-card metric-reviews">
1109
+ <div class="stat-value"><span class="stat-main" data-target="${header.prsReviewed.value}">0</span></div>
1110
+ <div class="stat-label"><i data-lucide="git-pull-request"></i> ${t(header.prsReviewed.labelKey)}</div>
1111
+ </div>
1112
+ <div class="stat-card warning metric-blocking">
1113
+ <div class="stat-value"><span class="stat-main" data-target="${header.bugsCaught.value}">0</span></div>
1114
+ <div class="stat-label"><i data-lucide="bug"></i> ${t(header.bugsCaught.labelKey)}</div>
1115
+ </div>
1116
+ <div class="stat-card metric-average-time">
1117
+ <div class="stat-value"><span class="stat-main">${header.averageReviewTime.value}</span></div>
1118
+ <div class="stat-label"><i data-lucide="clock"></i> ${t(header.averageReviewTime.labelKey)}</div>
1119
+ </div>
1120
+ </div>
1121
+ <div class="stats-charts-row">
1122
+ <div class="stats-chart-card full-width">
1123
+ <div class="stats-chart-title"><i data-lucide="calendar"></i> ${t('stats.reviewsPerMonth')}</div>
1124
+ <canvas id="stats-reviews-per-month" class="stats-canvas-wide"></canvas>
1125
+ </div>
1126
+ </div>`
1127
+ : '';
1128
+
1129
+ const keyInsightsMarkup = data.keyInsights ? renderKeyInsightsHtml(data.keyInsights) : '';
1100
1130
 
1101
1131
  statsEl.innerHTML = `
1132
+ ${analyticsHeaderMarkup}
1102
1133
  <div class="stat-card metric-reviews">
1103
1134
  <div class="stat-value"><span class="stat-main" data-target="${s.totalReviews}">0</span></div>
1104
1135
  <div class="stat-label"><i data-lucide="file-search"></i> ${t('stats.reviews')}</div>
@@ -1145,6 +1176,13 @@
1145
1176
  <canvas id="stats-distribution" class="stats-canvas-wide"></canvas>
1146
1177
  </div>
1147
1178
  </div>
1179
+ <div class="stats-charts-row">
1180
+ <div class="stats-chart-card full-width">
1181
+ <div class="stats-chart-title"><i data-lucide="bug"></i> ${t('stats.bugsByCategory')}</div>
1182
+ <canvas id="stats-bugs-category" class="stats-canvas-wide"></canvas>
1183
+ </div>
1184
+ </div>
1185
+ ${keyInsightsMarkup}
1148
1186
  `;
1149
1187
  refreshIcons();
1150
1188
 
@@ -1166,6 +1204,12 @@
1166
1204
  drawReviewActivityChart('stats-activity', reviews);
1167
1205
  drawScoreDistributionChart('stats-distribution', reviews);
1168
1206
  }
1207
+ if (data.bugsByCategory) {
1208
+ drawBugsByCategoryChart('stats-bugs-category', data.bugsByCategory);
1209
+ }
1210
+ if (data.analyticsHeader && !data.analyticsHeader.isEmpty) {
1211
+ drawReviewsPerMonthChart('stats-reviews-per-month', data.analyticsHeader.reviewsPerMonth);
1212
+ }
1169
1213
  });
1170
1214
  } else {
1171
1215
  statsEl.innerHTML = `<div class="empty-state">${t('empty.statsNoData')}</div>`;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"AA64BA,6BAA6B;AAC7B,+BADc,IAAI,GAAG,IAAI,CAGxB;AAED,oCAAoC;AACpC,sCADY,IAAI,GAAG,IAAI,QAGtB;AAED;;;;GAIG;AACH,uBAJW,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC7B,MAAM,CAUlB"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"AA26BA,6BAA6B;AAC7B,+BADc,IAAI,GAAG,IAAI,CAGxB;AAED,oCAAoC;AACpC,sCADY,IAAI,GAAG,IAAI,QAGtB;AAED;;;;GAIG;AACH,uBAJW,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC7B,MAAM,CAUlB"}
@@ -214,6 +214,21 @@ const translations = {
214
214
  'stats.reviewActivity': 'Review Activity',
215
215
  'stats.scoreDistribution': 'Score Distribution',
216
216
  'stats.noChartData': 'Not enough data',
217
+ 'stats.bugsByCategory': 'Bugs Found by Category',
218
+ 'stats.noCategoryData': 'No category data available',
219
+ 'stats.kpi.prsReviewed': 'PRs Reviewed',
220
+ 'stats.kpi.bugsCaught': 'Bugs Caught',
221
+ 'stats.kpi.averageReviewTime': 'Average Review Time',
222
+ 'stats.reviewsPerMonth': 'Reviews per Month',
223
+ 'stats.keyInsights': 'Key Insights',
224
+ 'stats.noKeyInsights': 'Aucun insight disponible pour le moment',
225
+ 'stats.noReviews': 'Aucune review enregistrée',
226
+ 'stats.category.security': 'Security',
227
+ 'stats.category.logic': 'Logic',
228
+ 'stats.category.performance': 'Performance',
229
+ 'stats.category.typeSafety': 'Type Safety',
230
+ 'stats.category.style': 'Style',
231
+ 'stats.category.dependencies': 'Dependencies',
217
232
  'error.recalculateStats': 'Recalculation error',
218
233
 
219
234
  // Review types
@@ -663,6 +678,21 @@ const translations = {
663
678
  'stats.reviewActivity': 'Activité des reviews',
664
679
  'stats.scoreDistribution': 'Distribution des scores',
665
680
  'stats.noChartData': 'Pas assez de données',
681
+ 'stats.bugsByCategory': 'Bugs trouvés par catégorie',
682
+ 'stats.noCategoryData': 'Aucune donnée de catégorie disponible',
683
+ 'stats.kpi.prsReviewed': 'PR examinées',
684
+ 'stats.kpi.bugsCaught': 'Bugs détectés',
685
+ 'stats.kpi.averageReviewTime': 'Durée moyenne de review',
686
+ 'stats.reviewsPerMonth': 'Reviews par mois',
687
+ 'stats.keyInsights': 'Insights clés',
688
+ 'stats.noKeyInsights': 'Aucun insight disponible pour le moment',
689
+ 'stats.noReviews': 'Aucune review enregistrée',
690
+ 'stats.category.security': 'Sécurité',
691
+ 'stats.category.logic': 'Logique',
692
+ 'stats.category.performance': 'Performance',
693
+ 'stats.category.typeSafety': 'Typage',
694
+ 'stats.category.style': 'Style',
695
+ 'stats.category.dependencies': 'Dépendances',
666
696
  'error.recalculateStats': 'Erreur de recalcul',
667
697
 
668
698
  // Review types
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Renders the key insights panel from a server-provided view-model. Tolerates a
3
+ * missing or malformed payload by falling back to the French empty state — the
4
+ * server is a boundary, so this guards against partial fetches or stale deploys.
5
+ *
6
+ * @param {unknown} viewModel
7
+ * @returns {string}
8
+ */
9
+ export function renderKeyInsightsHtml(viewModel: unknown): string;
10
+ export type KeyInsightCard = {
11
+ title: string;
12
+ body: string;
13
+ };
14
+ export type KeyInsightsViewModel = {
15
+ cards: KeyInsightCard[];
16
+ isEmpty: boolean;
17
+ emptyMessage: string;
18
+ };
19
+ //# sourceMappingURL=keyInsights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyInsights.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/keyInsights.js"],"names":[],"mappings":"AAuCA;;;;;;;GAOG;AACH,iDAHW,OAAO,GACL,MAAM,CAsBlB;;WApDa,MAAM;UACN,MAAM;;;WAKN,cAAc,EAAE;aAChB,OAAO;kBACP,MAAM"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Dashboard module — key insight cards humble object (SPEC-205).
3
+ * Pure functions, no global state, no DOM access, no fetch. All gating,
4
+ * ranking and text generation live server-side in the deriver / presenter;
5
+ * this module only renders the provided view-model as HTML.
6
+ *
7
+ * Visual DNA: "Agentic OS" — see project_agentic_os_design_dna.md.
8
+ */
9
+
10
+ import { escapeHtml } from './html.js';
11
+
12
+ const EMPTY_MESSAGE = 'Aucun insight disponible pour le moment';
13
+
14
+ /**
15
+ * @typedef {Object} KeyInsightCard
16
+ * @property {string} title
17
+ * @property {string} body
18
+ */
19
+
20
+ /**
21
+ * @typedef {Object} KeyInsightsViewModel
22
+ * @property {KeyInsightCard[]} cards
23
+ * @property {boolean} isEmpty
24
+ * @property {string} emptyMessage
25
+ */
26
+
27
+ /**
28
+ * @param {KeyInsightCard} card
29
+ * @returns {string}
30
+ */
31
+ function renderCard(card) {
32
+ return `
33
+ <div class="key-insight-card">
34
+ <div class="key-insight-card-title">${escapeHtml(card.title)}</div>
35
+ <div class="key-insight-card-body">${escapeHtml(card.body)}</div>
36
+ </div>
37
+ `.trim();
38
+ }
39
+
40
+ /**
41
+ * Renders the key insights panel from a server-provided view-model. Tolerates a
42
+ * missing or malformed payload by falling back to the French empty state — the
43
+ * server is a boundary, so this guards against partial fetches or stale deploys.
44
+ *
45
+ * @param {unknown} viewModel
46
+ * @returns {string}
47
+ */
48
+ export function renderKeyInsightsHtml(viewModel) {
49
+ const source =
50
+ viewModel && typeof viewModel === 'object'
51
+ ? /** @type {Record<string, unknown>} */ (viewModel)
52
+ : {};
53
+ const cards = Array.isArray(source.cards) ? source.cards : [];
54
+ const emptyMessage =
55
+ typeof source.emptyMessage === 'string' ? source.emptyMessage : EMPTY_MESSAGE;
56
+
57
+ const body =
58
+ cards.length === 0
59
+ ? `<div class="key-insights-empty">${escapeHtml(emptyMessage)}</div>`
60
+ : cards.map((card) => renderCard(/** @type {KeyInsightCard} */ (card))).join('');
61
+
62
+ return `
63
+ <section class="key-insights-panel" data-section="key-insights">
64
+ <div class="key-insights-title">// KEY INSIGHTS</div>
65
+ ${body}
66
+ </section>
67
+ `.trim();
68
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyInsights.js","sourceRoot":"","sources":["../../../src/dashboard/modules/keyInsights.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAEhE;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAI;IACtB,OAAO;;4CAEmC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;2CACvB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;GAE7D,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAS;IAC7C,MAAM,MAAM,GACV,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QACxC,CAAC,CAAC,sCAAsC,CAAC,CAAC,SAAS,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,YAAY,GAChB,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IAEhF,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,mCAAmC,UAAU,CAAC,YAAY,CAAC,QAAQ;QACrE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAErF,OAAO;;;QAGD,IAAI;;GAET,CAAC,IAAI,EAAE,CAAC;AACX,CAAC"}
@@ -8,6 +8,17 @@ export function drawScoreTrendChart(canvasId: string, reviews: Array<{
8
8
  score: number | null;
9
9
  type?: string;
10
10
  }>): void;
11
+ /**
12
+ * Draw a line chart showing the number of reviews per month across the
13
+ * trailing twelve months. The points are already computed and zero-filled
14
+ * by the presenter, so this renders them as-is.
15
+ * @param {string} canvasId
16
+ * @param {Array<{ month: string, count: number }>} monthlyVolume
17
+ */
18
+ export function drawReviewsPerMonthChart(canvasId: string, monthlyVolume: Array<{
19
+ month: string;
20
+ count: number;
21
+ }>): void;
11
22
  /**
12
23
  * Draw a bar chart showing number of reviews per week
13
24
  * @param {string} canvasId
@@ -24,6 +35,21 @@ export function drawReviewActivityChart(canvasId: string, reviews: Array<{
24
35
  export function drawScoreDistributionChart(canvasId: string, reviews: Array<{
25
36
  score: number | null;
26
37
  }>): void;
38
+ /**
39
+ * Draw a vertical bar chart showing the project-wide bug count per category.
40
+ * The view model bars are already sorted from highest to lowest count.
41
+ * @param {string} canvasId
42
+ * @param {{ isEmpty: boolean, emptyMessage: string, bars: Array<{ categoryKey: string, label: string, count: number }> }} bugsByCategory
43
+ */
44
+ export function drawBugsByCategoryChart(canvasId: string, bugsByCategory: {
45
+ isEmpty: boolean;
46
+ emptyMessage: string;
47
+ bars: Array<{
48
+ categoryKey: string;
49
+ label: string;
50
+ count: number;
51
+ }>;
52
+ }): void;
27
53
  /**
28
54
  * Animate a counter from 0 to targetValue
29
55
  * @param {HTMLElement} element
@@ -1 +1 @@
1
- {"version":3,"file":"statsCharts.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/statsCharts.js"],"names":[],"mappings":"AAsGA;;;;GAIG;AACH,8CAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,QAwIvE;AAmBD;;;;GAIG;AACH,kDAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC,QA+FpC;AAED;;;;GAIG;AACH,qDAHW,MAAM,WACN,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC,QAwErC;AAED;;;;;;GAMG;AACH,wCALW,WAAW,eACX,MAAM,YACN,MAAM,WACN,MAAM,QAmChB"}
1
+ {"version":3,"file":"statsCharts.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/statsCharts.js"],"names":[],"mappings":"AAsGA;;;;GAIG;AACH,8CAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,QAwIvE;AAED;;;;;;GAMG;AACH,mDAHW,MAAM,iBACN,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,QAyFjD;AAmBD;;;;GAIG;AACH,kDAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC,QA+FpC;AAED;;;;GAIG;AACH,qDAHW,MAAM,WACN,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC,QAwErC;AAED;;;;;GAKG;AACH,kDAHW,MAAM,kBACN;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,QAkFxH;AAED;;;;;;GAMG;AACH,wCALW,WAAW,eACX,MAAM,YACN,MAAM,WACN,MAAM,QAmChB"}
@@ -241,6 +241,102 @@ export function drawScoreTrendChart(canvasId, reviews) {
241
241
  }
242
242
  }
243
243
 
244
+ /**
245
+ * Draw a line chart showing the number of reviews per month across the
246
+ * trailing twelve months. The points are already computed and zero-filled
247
+ * by the presenter, so this renders them as-is.
248
+ * @param {string} canvasId
249
+ * @param {Array<{ month: string, count: number }>} monthlyVolume
250
+ */
251
+ export function drawReviewsPerMonthChart(canvasId, monthlyVolume) {
252
+ const setup = getCanvasContext(canvasId);
253
+ if (!setup) return;
254
+ const { ctx, cssWidth } = setup;
255
+ const cssHeight = 180;
256
+ setupHiDpiCanvas(ctx, cssWidth, cssHeight);
257
+
258
+ const series = monthlyVolume || [];
259
+ const hasReviews = series.some((point) => point.count > 0);
260
+
261
+ if (!hasReviews) {
262
+ drawNoDataMessage(ctx, t('stats.noChartData'), cssWidth, cssHeight);
263
+ return;
264
+ }
265
+
266
+ const padding = { top: 20, right: 20, bottom: 30, left: 35 };
267
+ const chartWidth = cssWidth - padding.left - padding.right;
268
+ const chartHeight = cssHeight - padding.top - padding.bottom;
269
+
270
+ const maxCount = Math.max(...series.map((point) => point.count));
271
+ const yScale = maxCount > 0 ? chartHeight / (maxCount * 1.15) : 1;
272
+
273
+ ctx.font = '10px system-ui, -apple-system, sans-serif';
274
+ ctx.textAlign = 'right';
275
+ ctx.fillStyle = COLORS.textMuted;
276
+ const yTicks = Math.min(maxCount, 5);
277
+ for (let tick = 0; tick <= yTicks; tick++) {
278
+ const value = Math.round((maxCount / yTicks) * tick);
279
+ const y = padding.top + chartHeight - value * yScale;
280
+ ctx.beginPath();
281
+ ctx.strokeStyle = COLORS.gridLine;
282
+ ctx.lineWidth = 0.5;
283
+ ctx.moveTo(padding.left, y);
284
+ ctx.lineTo(cssWidth - padding.right, y);
285
+ ctx.stroke();
286
+ ctx.fillText(String(value), padding.left - 6, y + 3);
287
+ }
288
+
289
+ const points = series.map((point, index) => {
290
+ const x =
291
+ series.length === 1
292
+ ? padding.left + chartWidth / 2
293
+ : padding.left + (index / (series.length - 1)) * chartWidth;
294
+ const y = padding.top + chartHeight - point.count * yScale;
295
+ return { x, y, point };
296
+ });
297
+
298
+ if (points.length >= 2) {
299
+ const gradient = ctx.createLinearGradient(0, padding.top, 0, cssHeight - padding.bottom);
300
+ gradient.addColorStop(0, 'rgba(122, 216, 255, 0.12)');
301
+ gradient.addColorStop(1, 'rgba(122, 216, 255, 0)');
302
+
303
+ ctx.beginPath();
304
+ ctx.moveTo(points[0].x, cssHeight - padding.bottom);
305
+ drawSmoothPath(ctx, points);
306
+ ctx.lineTo(points[points.length - 1].x, cssHeight - padding.bottom);
307
+ ctx.closePath();
308
+ ctx.fillStyle = gradient;
309
+ ctx.fill();
310
+
311
+ ctx.beginPath();
312
+ drawSmoothPath(ctx, points);
313
+ ctx.strokeStyle = COLORS.focus;
314
+ ctx.lineWidth = 2;
315
+ ctx.lineJoin = 'round';
316
+ ctx.lineCap = 'round';
317
+ ctx.stroke();
318
+ }
319
+
320
+ for (const entry of points) {
321
+ ctx.beginPath();
322
+ ctx.arc(entry.x, entry.y, 3.5, 0, Math.PI * 2);
323
+ ctx.fillStyle = COLORS.reviewPoint;
324
+ ctx.fill();
325
+ ctx.strokeStyle = COLORS.textPrimary;
326
+ ctx.lineWidth = 1.2;
327
+ ctx.stroke();
328
+ }
329
+
330
+ ctx.fillStyle = COLORS.textMuted;
331
+ ctx.font = '9px system-ui, -apple-system, sans-serif';
332
+ ctx.textAlign = 'center';
333
+ ctx.textBaseline = 'top';
334
+ for (const entry of points) {
335
+ const label = entry.point.month.split('-')[1];
336
+ ctx.fillText(label, entry.x, cssHeight - padding.bottom + 6);
337
+ }
338
+ }
339
+
244
340
  /**
245
341
  * Get ISO week number from a date
246
342
  * @param {Date} date
@@ -435,6 +531,94 @@ export function drawScoreDistributionChart(canvasId, reviews) {
435
531
  }
436
532
  }
437
533
 
534
+ /**
535
+ * Draw a vertical bar chart showing the project-wide bug count per category.
536
+ * The view model bars are already sorted from highest to lowest count.
537
+ * @param {string} canvasId
538
+ * @param {{ isEmpty: boolean, emptyMessage: string, bars: Array<{ categoryKey: string, label: string, count: number }> }} bugsByCategory
539
+ */
540
+ export function drawBugsByCategoryChart(canvasId, bugsByCategory) {
541
+ const setup = getCanvasContext(canvasId);
542
+ if (!setup) return;
543
+ const { ctx, cssWidth } = setup;
544
+ const cssHeight = 180;
545
+ setupHiDpiCanvas(ctx, cssWidth, cssHeight);
546
+
547
+ if (!bugsByCategory || bugsByCategory.isEmpty) {
548
+ const message = bugsByCategory?.emptyMessage || t('stats.noCategoryData');
549
+ drawNoDataMessage(ctx, message, cssWidth, cssHeight);
550
+ return;
551
+ }
552
+
553
+ const bars = bugsByCategory.bars;
554
+ const padding = { top: 20, right: 20, bottom: 44, left: 35 };
555
+ const chartWidth = cssWidth - padding.left - padding.right;
556
+ const chartHeight = cssHeight - padding.top - padding.bottom;
557
+
558
+ const maxCount = Math.max(...bars.map((bar) => bar.count));
559
+ const yScale = maxCount > 0 ? chartHeight / (maxCount * 1.15) : 1;
560
+
561
+ ctx.font = '10px system-ui, -apple-system, sans-serif';
562
+ ctx.textAlign = 'right';
563
+ ctx.fillStyle = COLORS.textMuted;
564
+ const yTicks = Math.min(maxCount, 5);
565
+ for (let tick = 0; tick <= yTicks; tick++) {
566
+ const value = Math.round((maxCount / yTicks) * tick);
567
+ const y = padding.top + chartHeight - value * yScale;
568
+ ctx.beginPath();
569
+ ctx.strokeStyle = COLORS.gridLine;
570
+ ctx.lineWidth = 0.5;
571
+ ctx.moveTo(padding.left, y);
572
+ ctx.lineTo(cssWidth - padding.right, y);
573
+ ctx.stroke();
574
+ ctx.fillText(String(value), padding.left - 6, y + 3);
575
+ }
576
+
577
+ const barGap = 8;
578
+ const totalBarWidth = chartWidth / bars.length;
579
+ const barWidth = Math.max(8, totalBarWidth - barGap);
580
+ const cornerRadius = Math.min(4, barWidth / 3);
581
+
582
+ for (let index = 0; index < bars.length; index++) {
583
+ const bar = bars[index];
584
+ const barHeight = bar.count * yScale;
585
+ const x = padding.left + index * totalBarWidth + (totalBarWidth - barWidth) / 2;
586
+ const y = padding.top + chartHeight - barHeight;
587
+
588
+ const gradient = ctx.createLinearGradient(x, y, x, padding.top + chartHeight);
589
+ gradient.addColorStop(0, COLORS.focus);
590
+ gradient.addColorStop(1, 'rgba(122, 216, 255, 0.3)');
591
+
592
+ ctx.beginPath();
593
+ ctx.moveTo(x, padding.top + chartHeight);
594
+ ctx.lineTo(x, y + cornerRadius);
595
+ ctx.arcTo(x, y, x + cornerRadius, y, cornerRadius);
596
+ ctx.arcTo(x + barWidth, y, x + barWidth, y + cornerRadius, cornerRadius);
597
+ ctx.lineTo(x + barWidth, padding.top + chartHeight);
598
+ ctx.closePath();
599
+ ctx.fillStyle = gradient;
600
+ ctx.fill();
601
+
602
+ if (bar.count > 0 && barHeight > 16) {
603
+ ctx.fillStyle = COLORS.textPrimary;
604
+ ctx.font = '10px system-ui, -apple-system, sans-serif';
605
+ ctx.textAlign = 'center';
606
+ ctx.textBaseline = 'bottom';
607
+ ctx.fillText(String(bar.count), x + barWidth / 2, y - 3);
608
+ }
609
+
610
+ ctx.fillStyle = COLORS.textMuted;
611
+ ctx.font = '9px system-ui, -apple-system, sans-serif';
612
+ ctx.textAlign = 'center';
613
+ ctx.textBaseline = 'top';
614
+ ctx.fillText(
615
+ t('stats.category.' + bar.categoryKey),
616
+ x + barWidth / 2,
617
+ cssHeight - padding.bottom + 6,
618
+ );
619
+ }
620
+ }
621
+
438
622
  /**
439
623
  * Animate a counter from 0 to targetValue
440
624
  * @param {HTMLElement} element