reviewflow 3.34.0 → 3.36.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 (218) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/dashboard/index.html +63 -2
  3. package/dist/dashboard/modules/i18n.d.ts.map +1 -1
  4. package/dist/dashboard/modules/i18n.js +10 -0
  5. package/dist/dashboard/modules/i18n.js.map +1 -1
  6. package/dist/dashboard/setup.html +17 -1
  7. package/dist/dashboard/styles.css +75 -0
  8. package/dist/frameworks/settings/runtimeSettings.d.ts +7 -0
  9. package/dist/frameworks/settings/runtimeSettings.d.ts.map +1 -1
  10. package/dist/frameworks/settings/runtimeSettings.js +14 -0
  11. package/dist/frameworks/settings/runtimeSettings.js.map +1 -1
  12. package/dist/main/routes.d.ts.map +1 -1
  13. package/dist/main/routes.js +63 -30
  14. package/dist/main/routes.js.map +1 -1
  15. package/dist/modules/cli-configuration/interface-adapters/controllers/http/settings.routes.d.ts.map +1 -1
  16. package/dist/modules/cli-configuration/interface-adapters/controllers/http/settings.routes.js +19 -1
  17. package/dist/modules/cli-configuration/interface-adapters/controllers/http/settings.routes.js.map +1 -1
  18. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts +4 -0
  19. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  20. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +54 -46
  21. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  22. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.d.ts.map +1 -1
  23. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.js +4 -1
  24. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.js.map +1 -1
  25. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.d.ts.map +1 -1
  26. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.js +4 -1
  27. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.js.map +1 -1
  28. package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.d.ts.map +1 -1
  29. package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js +3 -0
  30. package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js.map +1 -1
  31. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts +1 -0
  32. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts.map +1 -1
  33. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js +10 -3
  34. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js.map +1 -1
  35. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts.map +1 -1
  36. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js +5 -1
  37. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js.map +1 -1
  38. package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.d.ts.map +1 -1
  39. package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js +6 -4
  40. package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js.map +1 -1
  41. package/dist/modules/review-execution/services/contextActionsExecutor.d.ts.map +1 -1
  42. package/dist/modules/review-execution/services/contextActionsExecutor.js +23 -1
  43. package/dist/modules/review-execution/services/contextActionsExecutor.js.map +1 -1
  44. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts +4 -0
  45. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts.map +1 -1
  46. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js +6 -1
  47. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js.map +1 -1
  48. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts +3 -2
  49. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts.map +1 -1
  50. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js +2 -1
  51. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js.map +1 -1
  52. package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.d.ts.map +1 -1
  53. package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.js +9 -0
  54. package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.js.map +1 -1
  55. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.d.ts +14 -1
  56. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.d.ts.map +1 -1
  57. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.js +50 -6
  58. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.js.map +1 -1
  59. package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.d.ts +7 -0
  60. package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.d.ts.map +1 -0
  61. package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.js +3 -0
  62. package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.js.map +1 -0
  63. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
  64. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +14 -6
  65. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
  66. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js +4 -3
  67. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js.map +1 -1
  68. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.d.ts +2 -0
  69. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.d.ts.map +1 -0
  70. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.js +173 -0
  71. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.js.map +1 -0
  72. package/dist/tests/factories/pendingReviewRequest.factory.d.ts +1 -0
  73. package/dist/tests/factories/pendingReviewRequest.factory.d.ts.map +1 -1
  74. package/dist/tests/factories/pendingReviewRequest.factory.js +22 -0
  75. package/dist/tests/factories/pendingReviewRequest.factory.js.map +1 -1
  76. package/dist/tests/stubs/claudeSession.stub.d.ts +8 -0
  77. package/dist/tests/stubs/claudeSession.stub.d.ts.map +1 -1
  78. package/dist/tests/stubs/claudeSession.stub.js +24 -2
  79. package/dist/tests/stubs/claudeSession.stub.js.map +1 -1
  80. package/dist/tests/units/entities/insight/teamInsight.guard.test.d.ts +2 -0
  81. package/dist/tests/units/entities/insight/teamInsight.guard.test.d.ts.map +1 -0
  82. package/dist/tests/units/entities/insight/teamInsight.guard.test.js +45 -0
  83. package/dist/tests/units/entities/insight/teamInsight.guard.test.js.map +1 -0
  84. package/dist/tests/units/frameworks/settings/runtimeSettings.test.js +48 -3
  85. package/dist/tests/units/frameworks/settings/runtimeSettings.test.js.map +1 -1
  86. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js +36 -1
  87. package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js.map +1 -1
  88. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.d.ts +2 -0
  89. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.d.ts.map +1 -0
  90. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js +208 -0
  91. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js.map +1 -0
  92. package/dist/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.js +92 -0
  93. package/dist/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.js.map +1 -1
  94. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +303 -0
  95. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  96. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +360 -2
  97. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  98. package/dist/tests/units/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.test.js +10 -3
  99. package/dist/tests/units/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.test.js.map +1 -1
  100. package/dist/tests/units/modules/claude-invocation/usecases/awaitSessionCompletion.usecase.test.js +66 -0
  101. package/dist/tests/units/modules/claude-invocation/usecases/awaitSessionCompletion.usecase.test.js.map +1 -1
  102. package/dist/tests/units/modules/claude-invocation/usecases/cleanupClaudeSession.usecase.test.js +62 -0
  103. package/dist/tests/units/modules/claude-invocation/usecases/cleanupClaudeSession.usecase.test.js.map +1 -1
  104. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.d.ts +2 -0
  105. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.d.ts.map +1 -0
  106. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.js +182 -0
  107. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.js.map +1 -0
  108. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +225 -0
  109. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -1
  110. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.d.ts +2 -0
  111. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.d.ts.map +1 -0
  112. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js +171 -0
  113. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map +1 -0
  114. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.d.ts +2 -0
  115. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.d.ts.map +1 -0
  116. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.js +70 -0
  117. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.js.map +1 -0
  118. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.d.ts +2 -0
  119. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.d.ts.map +1 -0
  120. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.js +51 -0
  121. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.js.map +1 -0
  122. package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js +4 -0
  123. package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js.map +1 -1
  124. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.d.ts +2 -0
  125. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.d.ts.map +1 -0
  126. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.js +39 -0
  127. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.js.map +1 -0
  128. package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js +15 -2
  129. package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js.map +1 -1
  130. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.d.ts +2 -0
  131. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.d.ts.map +1 -0
  132. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.js +34 -0
  133. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.js.map +1 -0
  134. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js +21 -2
  135. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js.map +1 -1
  136. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.d.ts +2 -0
  137. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.d.ts.map +1 -0
  138. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.js +210 -0
  139. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.js.map +1 -0
  140. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.d.ts +2 -0
  141. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.d.ts.map +1 -0
  142. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.js +103 -0
  143. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.js.map +1 -0
  144. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js +25 -0
  145. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js.map +1 -1
  146. package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js +34 -7
  147. package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js.map +1 -1
  148. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.d.ts +2 -0
  149. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.d.ts.map +1 -0
  150. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.js +98 -0
  151. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.js.map +1 -0
  152. package/dist/tests/units/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.test.js +12 -0
  153. package/dist/tests/units/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.test.js.map +1 -1
  154. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.d.ts +2 -0
  155. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.d.ts.map +1 -0
  156. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.js +51 -0
  157. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.js.map +1 -0
  158. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.d.ts +2 -0
  159. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.d.ts.map +1 -0
  160. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js +70 -0
  161. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js.map +1 -0
  162. package/dist/tests/units/modules/setup-wizard/usecases/streamSetupRun.usecase.test.js +60 -1
  163. package/dist/tests/units/modules/setup-wizard/usecases/streamSetupRun.usecase.test.js.map +1 -1
  164. package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.d.ts +2 -0
  165. package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.d.ts.map +1 -0
  166. package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.js +14 -0
  167. package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.js.map +1 -0
  168. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.d.ts +2 -0
  169. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.d.ts.map +1 -0
  170. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.js +49 -0
  171. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.js.map +1 -0
  172. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.d.ts +2 -0
  173. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.d.ts.map +1 -0
  174. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.js +29 -0
  175. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.js.map +1 -0
  176. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.d.ts +2 -0
  177. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.d.ts.map +1 -0
  178. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.js +63 -0
  179. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.js.map +1 -0
  180. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.d.ts +2 -0
  181. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.d.ts.map +1 -0
  182. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js +73 -0
  183. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js.map +1 -0
  184. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +99 -0
  185. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -1
  186. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js +60 -2
  187. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js.map +1 -1
  188. package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.test.js +499 -18
  189. package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.test.js.map +1 -1
  190. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.d.ts +2 -0
  191. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.d.ts.map +1 -0
  192. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.js +273 -0
  193. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.js.map +1 -0
  194. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js +47 -1
  195. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js.map +1 -1
  196. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js +98 -0
  197. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js.map +1 -1
  198. package/dist/tests/units/services/contextActionsExecutor.test.js +67 -0
  199. package/dist/tests/units/services/contextActionsExecutor.test.js.map +1 -1
  200. package/dist/tests/units/services/statsService.branches.test.d.ts +2 -0
  201. package/dist/tests/units/services/statsService.branches.test.d.ts.map +1 -0
  202. package/dist/tests/units/services/statsService.branches.test.js +266 -0
  203. package/dist/tests/units/services/statsService.branches.test.js.map +1 -0
  204. package/dist/tests/units/shared/services/logFileReader.test.d.ts +2 -0
  205. package/dist/tests/units/shared/services/logFileReader.test.d.ts.map +1 -0
  206. package/dist/tests/units/shared/services/logFileReader.test.js +70 -0
  207. package/dist/tests/units/shared/services/logFileReader.test.js.map +1 -0
  208. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js +206 -0
  209. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js.map +1 -1
  210. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js +40 -0
  211. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js.map +1 -1
  212. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js +204 -0
  213. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js.map +1 -1
  214. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js +57 -0
  215. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js.map +1 -1
  216. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js +391 -1
  217. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js.map +1 -1
  218. package/package.json +4 -1
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
2
  import { mkdtempSync, rmSync, writeFileSync, readFileSync, existsSync, readdirSync } from 'node:fs';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
- import { configureSettingsPath, configureSettingsLogger, loadSettingsFromDisk, getDefaultLanguage, setDefaultLanguage, getModel, setModel, getSettings, __resetForTestsOnly, } from '../../../../frameworks/settings/runtimeSettings.js';
5
+ import { configureSettingsPath, configureSettingsLogger, loadSettingsFromDisk, getDefaultLanguage, setDefaultLanguage, getModel, setModel, getTriggerMode, setTriggerMode, getSettings, __resetForTestsOnly, } from '../../../../frameworks/settings/runtimeSettings.js';
6
6
  describe('runtimeSettings', () => {
7
7
  describe('in-memory API (no path configured)', () => {
8
8
  beforeEach(() => {
@@ -44,7 +44,12 @@ describe('runtimeSettings', () => {
44
44
  await loadSettingsFromDisk();
45
45
  expect(existsSync(settingsPath)).toBe(true);
46
46
  const written = JSON.parse(readFileSync(settingsPath, 'utf-8'));
47
- expect(written).toEqual({ language: 'en', model: 'opus', worktreeStaleThresholdHours: 24 });
47
+ expect(written).toEqual({
48
+ language: 'en',
49
+ model: 'opus',
50
+ worktreeStaleThresholdHours: 24,
51
+ triggerMode: null,
52
+ });
48
53
  });
49
54
  it('falls back to defaults silently when file is malformed JSON', async () => {
50
55
  writeFileSync(settingsPath, '{ this is not valid json');
@@ -96,7 +101,47 @@ describe('runtimeSettings', () => {
96
101
  await loadSettingsFromDisk();
97
102
  await Promise.all([setModel('sonnet'), setDefaultLanguage('fr')]);
98
103
  const written = JSON.parse(readFileSync(settingsPath, 'utf-8'));
99
- expect(written).toEqual({ language: 'fr', model: 'sonnet', worktreeStaleThresholdHours: 24 });
104
+ expect(written).toEqual({
105
+ language: 'fr',
106
+ model: 'sonnet',
107
+ worktreeStaleThresholdHours: 24,
108
+ triggerMode: null,
109
+ });
110
+ });
111
+ });
112
+ describe('triggerMode', () => {
113
+ it('defaults to null when no settings file exists', async () => {
114
+ await loadSettingsFromDisk();
115
+ expect(getTriggerMode()).toBeNull();
116
+ });
117
+ it('restores triggerMode from an existing file', async () => {
118
+ writeFileSync(settingsPath, JSON.stringify({ language: 'en', model: 'opus', triggerMode: 'semi-auto' }));
119
+ await loadSettingsFromDisk();
120
+ expect(getTriggerMode()).toBe('semi-auto');
121
+ });
122
+ it('falls back to null when the persisted trigger mode is unknown', async () => {
123
+ writeFileSync(settingsPath, JSON.stringify({ language: 'en', model: 'opus', triggerMode: 'manual' }));
124
+ await loadSettingsFromDisk();
125
+ expect(getTriggerMode()).toBeNull();
126
+ });
127
+ it('persists triggerMode to disk after setTriggerMode', async () => {
128
+ await loadSettingsFromDisk();
129
+ await setTriggerMode('semi-auto');
130
+ const written = JSON.parse(readFileSync(settingsPath, 'utf-8'));
131
+ expect(written.triggerMode).toBe('semi-auto');
132
+ expect(getTriggerMode()).toBe('semi-auto');
133
+ });
134
+ it('survives a simulated process restart', async () => {
135
+ await loadSettingsFromDisk();
136
+ await setTriggerMode('semi-auto');
137
+ __resetForTestsOnly();
138
+ configureSettingsPath(settingsPath);
139
+ await loadSettingsFromDisk();
140
+ expect(getTriggerMode()).toBe('semi-auto');
141
+ });
142
+ it('throws when setTriggerMode receives an unknown trigger mode', async () => {
143
+ await loadSettingsFromDisk();
144
+ await expect(setTriggerMode('manual')).rejects.toThrow(/Invalid trigger mode/);
100
145
  });
101
146
  });
102
147
  describe('validation', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeSettings.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/settings/runtimeSettings.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeSettings.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/settings/runtimeSettings.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,cAAc,EACd,WAAW,EACX,mBAAmB,GAEpB,MAAM,0CAA0C,CAAC;AAGlD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,mBAAmB,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,IAAI,SAAiB,CAAC;QACtB,IAAI,YAAoB,CAAC;QAEzB,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;YAChE,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAChD,mBAAmB,EAAE,CAAC;YACtB,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACb,mBAAmB,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;YACpC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;gBAC9D,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAEjF,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;oBACtB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,MAAM;oBACb,2BAA2B,EAAE,EAAE;oBAC/B,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC3E,aAAa,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;gBAExD,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACxE,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAE/E,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAEhF,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEzB,mBAAmB,EAAE,CAAC;gBACtB,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACpC,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;gBACvF,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAElE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;oBACtB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,QAAQ;oBACf,2BAA2B,EAAE,EAAE;oBAC/B,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;YAC3B,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;gBAC7D,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC1D,aAAa,CACX,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAC5E,CAAC;gBAEF,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC7E,aAAa,CACX,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CACzE,CAAC;gBAEF,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;gBACjE,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;gBAElC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9C,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;gBAElC,mBAAmB,EAAE,CAAC;gBACtB,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACpC,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC3E,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,MAAM,CAAC,cAAc,CAAC,QAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAChG,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;gBAC9D,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;YAC3C,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,0CAA0C,CAC3C,CAAC;gBACF,MAAM,CAAC,8BAA8B,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,aAAa,CACX,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,EAAE,CAAC,CACnF,CAAC;gBAEF,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,0CAA0C,CAC3C,CAAC;gBAEF,MAAM,CAAC,8BAA8B,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;gBACvF,aAAa,CACX,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,EAAE,CAAC,CAClF,CAAC;gBAEF,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,0CAA0C,CAC3C,CAAC;gBAEF,MAAM,CAAC,8BAA8B,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;gBACzF,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,0CAA0C,CAC3C,CAAC;gBAEF,MAAM,8BAA8B,CAAC,EAAE,CAAC,CAAC;gBAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;gBAC5F,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,0CAA0C,CAC3C,CAAC;gBAEF,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;gBAC3F,MAAM,MAAM,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC/F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;gBACjF,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,uBAAuB,CAAC,EAAE,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC/E,aAAa,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;gBAEhD,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;gBAChE,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,uBAAuB,CAAC,EAAE,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC/E,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAE/E,MAAM,oBAAoB,EAAE,CAAC;gBAE7B,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, beforeEach } from 'vitest';
2
2
  import Fastify from 'fastify';
3
3
  import { settingsRoutes } from '../../../../../modules/cli-configuration/interface-adapters/controllers/http/settings.routes.js';
4
- import { setModel } from '../../../../../frameworks/settings/runtimeSettings.js';
4
+ import { setModel, setTriggerMode } from '../../../../../frameworks/settings/runtimeSettings.js';
5
5
  describe('settings routes', () => {
6
6
  let application;
7
7
  beforeEach(async () => {
@@ -21,5 +21,40 @@ describe('settings routes', () => {
21
21
  expect(body.model).toBe('sonnet');
22
22
  });
23
23
  });
24
+ describe('GET /api/settings/triggerMode', () => {
25
+ it('should return the current trigger mode', async () => {
26
+ await setTriggerMode('semi-auto');
27
+ const response = await application.inject({
28
+ method: 'GET',
29
+ url: '/api/settings/triggerMode',
30
+ });
31
+ const body = JSON.parse(response.body);
32
+ expect(response.statusCode).toBe(200);
33
+ expect(body.triggerMode).toBe('semi-auto');
34
+ });
35
+ });
36
+ describe('POST /api/settings/triggerMode', () => {
37
+ it('should persist a valid trigger mode', async () => {
38
+ const response = await application.inject({
39
+ method: 'POST',
40
+ url: '/api/settings/triggerMode',
41
+ payload: { triggerMode: 'full-auto' },
42
+ });
43
+ const body = JSON.parse(response.body);
44
+ expect(response.statusCode).toBe(200);
45
+ expect(body.success).toBe(true);
46
+ expect(body.triggerMode).toBe('full-auto');
47
+ });
48
+ it('should reject an unknown trigger mode with 400', async () => {
49
+ const response = await application.inject({
50
+ method: 'POST',
51
+ url: '/api/settings/triggerMode',
52
+ payload: { triggerMode: 'manual' },
53
+ });
54
+ const body = JSON.parse(response.body);
55
+ expect(response.statusCode).toBe(400);
56
+ expect(body.success).toBe(false);
57
+ });
58
+ });
24
59
  });
25
60
  //# sourceMappingURL=settings.routes.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/settings.routes.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,oFAAoF,CAAA;AACnH,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAA;AAEnE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,WAA4B,CAAA;IAEhC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,WAAW,GAAG,OAAO,EAAE,CAAA;QACvB,MAAM,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;QAC1C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAExB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;gBACxC,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,qBAAqB;aAC3B,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"settings.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/settings.routes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stats.routes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.routes.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/stats.routes.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,208 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import Fastify from 'fastify';
3
+ import { statsRoutes } from '../../../../../modules/statistics-insights/interface-adapters/controllers/http/stats.routes.js';
4
+ import { InMemoryStatsGateway } from '../../../../../tests/stubs/stats.stub.js';
5
+ import { ProjectStatsFactory, ReviewStatsFactory } from '../../../../../tests/factories/projectStats.factory.js';
6
+ describe('stats routes', () => {
7
+ let app;
8
+ let statsGateway;
9
+ let repositories;
10
+ const register = async (extra = {}) => {
11
+ await app.register(statsRoutes, {
12
+ statsGateway,
13
+ getRepositories: () => repositories,
14
+ ...extra,
15
+ });
16
+ await app.ready();
17
+ };
18
+ beforeEach(() => {
19
+ app = Fastify();
20
+ statsGateway = new InMemoryStatsGateway();
21
+ repositories = [];
22
+ });
23
+ describe('GET /api/stats with explicit path', () => {
24
+ it('should reject a relative path', async () => {
25
+ await register();
26
+ const response = await app.inject({
27
+ method: 'GET',
28
+ url: '/api/stats?path=relative/path',
29
+ });
30
+ expect(response.statusCode).toBe(200);
31
+ expect(response.json()).toEqual({ error: 'Invalid path' });
32
+ });
33
+ it('should reject a path containing directory traversal', async () => {
34
+ await register();
35
+ const response = await app.inject({
36
+ method: 'GET',
37
+ url: '/api/stats?path=/etc/../passwd',
38
+ });
39
+ expect(response.statusCode).toBe(200);
40
+ expect(response.json()).toEqual({ error: 'Invalid path' });
41
+ });
42
+ it('should return null stats and summary when project has no stats', async () => {
43
+ await register();
44
+ const response = await app.inject({
45
+ method: 'GET',
46
+ url: '/api/stats?path=/unknown/project',
47
+ });
48
+ expect(response.statusCode).toBe(200);
49
+ expect(response.json()).toEqual({ stats: null, summary: null });
50
+ });
51
+ it('should return stats and summary when project has stats', async () => {
52
+ const reviews = [
53
+ ReviewStatsFactory.create({ id: 'r1', mrNumber: 1, score: 8 }),
54
+ ];
55
+ statsGateway.saveProjectStats('/known/project', ProjectStatsFactory.withReviews(reviews));
56
+ await register();
57
+ const response = await app.inject({
58
+ method: 'GET',
59
+ url: '/api/stats?path=/known/project',
60
+ });
61
+ expect(response.statusCode).toBe(200);
62
+ const body = response.json();
63
+ expect(body.stats).not.toBeNull();
64
+ expect(body.stats.totalReviews).toBe(1);
65
+ expect(body.summary).not.toBeNull();
66
+ });
67
+ it('should treat a whitespace-only path as no path and list projects', async () => {
68
+ await register();
69
+ const response = await app.inject({
70
+ method: 'GET',
71
+ url: '/api/stats?path=%20%20',
72
+ });
73
+ expect(response.statusCode).toBe(200);
74
+ expect(response.json()).toEqual({ projects: [] });
75
+ });
76
+ });
77
+ describe('GET /api/stats listing all repositories', () => {
78
+ it('should skip disabled repositories', async () => {
79
+ repositories = [
80
+ { localPath: '/disabled/project', name: 'Disabled', enabled: false },
81
+ ];
82
+ statsGateway.saveProjectStats('/disabled/project', ProjectStatsFactory.withReviews([]));
83
+ await register();
84
+ const response = await app.inject({ method: 'GET', url: '/api/stats' });
85
+ expect(response.statusCode).toBe(200);
86
+ expect(response.json()).toEqual({ projects: [] });
87
+ });
88
+ it('should skip enabled repositories without stats', async () => {
89
+ repositories = [
90
+ { localPath: '/enabled/no-stats', name: 'NoStats', enabled: true },
91
+ ];
92
+ await register();
93
+ const response = await app.inject({ method: 'GET', url: '/api/stats' });
94
+ expect(response.statusCode).toBe(200);
95
+ expect(response.json()).toEqual({ projects: [] });
96
+ });
97
+ it('should include enabled repositories with stats', async () => {
98
+ repositories = [
99
+ { localPath: '/enabled/with-stats', name: 'WithStats', enabled: true },
100
+ ];
101
+ const reviews = [ReviewStatsFactory.create({ id: 'r1', mrNumber: 1, score: 7 })];
102
+ statsGateway.saveProjectStats('/enabled/with-stats', ProjectStatsFactory.withReviews(reviews));
103
+ await register();
104
+ const response = await app.inject({ method: 'GET', url: '/api/stats' });
105
+ expect(response.statusCode).toBe(200);
106
+ const body = response.json();
107
+ expect(body.projects).toHaveLength(1);
108
+ expect(body.projects[0].project).toBe('WithStats');
109
+ expect(body.projects[0].path).toBe('/enabled/with-stats');
110
+ expect(body.projects[0].summary).toBeDefined();
111
+ });
112
+ });
113
+ describe('POST /api/stats/recalculate', () => {
114
+ it('should return 400 when body is missing the path', async () => {
115
+ await register();
116
+ const response = await app.inject({
117
+ method: 'POST',
118
+ url: '/api/stats/recalculate',
119
+ payload: {},
120
+ });
121
+ expect(response.statusCode).toBe(400);
122
+ expect(response.json()).toEqual({ error: 'Chemin du projet requis' });
123
+ });
124
+ it('should return 400 when the body fails validation', async () => {
125
+ await register();
126
+ const response = await app.inject({
127
+ method: 'POST',
128
+ url: '/api/stats/recalculate',
129
+ payload: { path: 123 },
130
+ });
131
+ expect(response.statusCode).toBe(400);
132
+ expect(response.json()).toEqual({ error: 'Chemin du projet requis' });
133
+ });
134
+ it('should return 400 when the path is only whitespace', async () => {
135
+ await register();
136
+ const response = await app.inject({
137
+ method: 'POST',
138
+ url: '/api/stats/recalculate',
139
+ payload: { path: ' ' },
140
+ });
141
+ expect(response.statusCode).toBe(400);
142
+ });
143
+ it('should return 404 when the project is not in the configuration', async () => {
144
+ repositories = [];
145
+ await register();
146
+ const response = await app.inject({
147
+ method: 'POST',
148
+ url: '/api/stats/recalculate',
149
+ payload: { path: '/missing/project' },
150
+ });
151
+ expect(response.statusCode).toBe(404);
152
+ expect(response.json()).toEqual({ error: 'Projet non trouvé dans la configuration' });
153
+ });
154
+ it('should return 404 when the matching repository is disabled', async () => {
155
+ repositories = [
156
+ { localPath: '/disabled/project', name: 'Disabled', enabled: false },
157
+ ];
158
+ await register();
159
+ const response = await app.inject({
160
+ method: 'POST',
161
+ url: '/api/stats/recalculate',
162
+ payload: { path: '/disabled/project' },
163
+ });
164
+ expect(response.statusCode).toBe(404);
165
+ });
166
+ it('should start recalculation for an enabled repository without optional dependencies', async () => {
167
+ repositories = [
168
+ { localPath: '/enabled/project', name: 'Enabled', enabled: true },
169
+ ];
170
+ statsGateway.saveProjectStats('/enabled/project', ProjectStatsFactory.withReviews([]));
171
+ await register();
172
+ const response = await app.inject({
173
+ method: 'POST',
174
+ url: '/api/stats/recalculate',
175
+ payload: { path: '/enabled/project' },
176
+ });
177
+ expect(response.statusCode).toBe(200);
178
+ expect(response.json()).toEqual({ status: 'started' });
179
+ });
180
+ it('should start recalculation and forward progress through broadcast and logger', async () => {
181
+ repositories = [
182
+ { localPath: '/enabled/project', name: 'Enabled', enabled: true, platform: 'github' },
183
+ ];
184
+ statsGateway.saveProjectStats('/enabled/project', ProjectStatsFactory.withReviews([]));
185
+ const progressEvents = [];
186
+ const warnings = [];
187
+ const errors = [];
188
+ await register({
189
+ broadcastBackfillProgress: (progress) => {
190
+ progressEvents.push(progress);
191
+ },
192
+ logger: {
193
+ warn: (message) => warnings.push(message),
194
+ info: (_message) => { },
195
+ error: (message) => errors.push(message),
196
+ },
197
+ });
198
+ const response = await app.inject({
199
+ method: 'POST',
200
+ url: '/api/stats/recalculate',
201
+ payload: { path: '/enabled/project', backfill: false },
202
+ });
203
+ expect(response.statusCode).toBe(200);
204
+ expect(response.json()).toEqual({ status: 'started' });
205
+ });
206
+ });
207
+ });
208
+ //# sourceMappingURL=stats.routes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/stats.routes.test.ts"],"names":[],"mappings":"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"}
@@ -80,5 +80,97 @@ describe("addAction handler", () => {
80
80
  expect(result.isError).toBe(true);
81
81
  expect(result.content[0].text).toContain("threadId required");
82
82
  });
83
+ it("should add THREAD_RESOLVE action with an optional message", () => {
84
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
85
+ const result = handler({
86
+ jobId,
87
+ type: "THREAD_RESOLVE",
88
+ threadId: "t1",
89
+ message: "Resolved by automation",
90
+ });
91
+ expect(result.isError).toBeUndefined();
92
+ const content = JSON.parse(result.content[0].text);
93
+ expect(content.success).toBe(true);
94
+ expect(content.actionType).toBe("THREAD_RESOLVE");
95
+ });
96
+ it("should add THREAD_REPLY action successfully", () => {
97
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
98
+ const result = handler({
99
+ jobId,
100
+ type: "THREAD_REPLY",
101
+ threadId: "t1",
102
+ message: "Thanks for the feedback.",
103
+ });
104
+ expect(result.isError).toBeUndefined();
105
+ const content = JSON.parse(result.content[0].text);
106
+ expect(content.success).toBe(true);
107
+ expect(content.actionType).toBe("THREAD_REPLY");
108
+ });
109
+ it("should return error when THREAD_REPLY missing threadId", () => {
110
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
111
+ const result = handler({ jobId, type: "THREAD_REPLY", message: "reply" });
112
+ expect(result.isError).toBe(true);
113
+ expect(result.content[0].text).toContain("threadId required");
114
+ });
115
+ it("should return error when THREAD_REPLY missing message", () => {
116
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
117
+ const result = handler({ jobId, type: "THREAD_REPLY", threadId: "t1" });
118
+ expect(result.isError).toBe(true);
119
+ expect(result.content[0].text).toContain("message required");
120
+ });
121
+ it("should return error when POST_COMMENT missing body", () => {
122
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
123
+ const result = handler({ jobId, type: "POST_COMMENT" });
124
+ expect(result.isError).toBe(true);
125
+ expect(result.content[0].text).toContain("body required");
126
+ });
127
+ it("should return error when POST_INLINE_COMMENT has a non-string filePath", () => {
128
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
129
+ const result = handler({
130
+ jobId,
131
+ type: "POST_INLINE_COMMENT",
132
+ line: 42,
133
+ body: "Extract this logic.",
134
+ });
135
+ expect(result.isError).toBe(true);
136
+ expect(result.content[0].text).toContain("filePath required");
137
+ });
138
+ it("should return error when POST_INLINE_COMMENT has a non-number line", () => {
139
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
140
+ const result = handler({
141
+ jobId,
142
+ type: "POST_INLINE_COMMENT",
143
+ filePath: "src/app.ts",
144
+ line: "42",
145
+ body: "Extract this logic.",
146
+ });
147
+ expect(result.isError).toBe(true);
148
+ expect(result.content[0].text).toContain("line must be > 0");
149
+ });
150
+ it("should return error when the job context is not found", () => {
151
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
152
+ const result = handler({
153
+ jobId: "gitlab:unknown/path:999",
154
+ type: "POST_COMMENT",
155
+ body: "Great job!",
156
+ });
157
+ expect(result.isError).toBe(true);
158
+ expect(result.content[0].text).toContain("Job context not found");
159
+ });
160
+ it("should return error when appending to the review context fails", () => {
161
+ const orphanJobId = "gitlab:orphan/path:7";
162
+ jobContextGateway.register(orphanJobId, {
163
+ localPath: tempDir,
164
+ mergeRequestId: "gitlab-orphan-path-7",
165
+ });
166
+ const handler = createAddActionHandler({ jobContextGateway, reviewContextGateway });
167
+ const result = handler({
168
+ jobId: orphanJobId,
169
+ type: "POST_COMMENT",
170
+ body: "Great job!",
171
+ });
172
+ expect(result.isError).toBe(true);
173
+ expect(result.content[0].text).toContain("Failed to append action to review context");
174
+ });
83
175
  });
84
176
  //# sourceMappingURL=addAction.handler.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"addAction.handler.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"addAction.handler.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.ts"],"names":[],"mappings":"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"}