reviewflow 3.6.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/dist/config/projectConfig.d.ts +2 -0
- package/dist/config/projectConfig.d.ts.map +1 -1
- package/dist/config/projectConfig.js +17 -0
- package/dist/config/projectConfig.js.map +1 -1
- package/dist/entities/backfill/backfillProgress.d.ts +7 -0
- package/dist/entities/backfill/backfillProgress.d.ts.map +1 -0
- package/dist/entities/backfill/backfillProgress.js +2 -0
- package/dist/entities/backfill/backfillProgress.js.map +1 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.d.ts +8 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.d.ts.map +1 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.js +21 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.js.map +1 -0
- package/dist/entities/diffStats/diffStats.d.ts +6 -0
- package/dist/entities/diffStats/diffStats.d.ts.map +1 -0
- package/dist/entities/diffStats/diffStats.js +2 -0
- package/dist/entities/diffStats/diffStats.js.map +1 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.d.ts +5 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.d.ts.map +1 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.js +2 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.js.map +1 -0
- package/dist/entities/insight/aiInsight.d.ts +6 -0
- package/dist/entities/insight/aiInsight.d.ts.map +1 -0
- package/dist/entities/insight/aiInsight.js +2 -0
- package/dist/entities/insight/aiInsight.js.map +1 -0
- package/dist/entities/insight/aiInsight.schema.d.ts +55 -0
- package/dist/entities/insight/aiInsight.schema.d.ts.map +1 -0
- package/dist/entities/insight/aiInsight.schema.js +25 -0
- package/dist/entities/insight/aiInsight.schema.js.map +1 -0
- package/dist/entities/insight/developerInsight.d.ts +8 -0
- package/dist/entities/insight/developerInsight.d.ts.map +1 -0
- package/dist/entities/insight/developerInsight.guard.d.ts +221 -0
- package/dist/entities/insight/developerInsight.guard.d.ts.map +1 -0
- package/dist/entities/insight/developerInsight.guard.js +13 -0
- package/dist/entities/insight/developerInsight.guard.js.map +1 -0
- package/dist/entities/insight/developerInsight.js +2 -0
- package/dist/entities/insight/developerInsight.js.map +1 -0
- package/dist/entities/insight/developerInsight.schema.d.ts +157 -0
- package/dist/entities/insight/developerInsight.schema.d.ts.map +1 -0
- package/dist/entities/insight/developerInsight.schema.js +43 -0
- package/dist/entities/insight/developerInsight.schema.js.map +1 -0
- package/dist/entities/insight/developerTitle.d.ts +12 -0
- package/dist/entities/insight/developerTitle.d.ts.map +1 -0
- package/dist/entities/insight/developerTitle.js +11 -0
- package/dist/entities/insight/developerTitle.js.map +1 -0
- package/dist/entities/insight/insightCategory.d.ts +10 -0
- package/dist/entities/insight/insightCategory.d.ts.map +1 -0
- package/dist/entities/insight/insightCategory.js +4 -0
- package/dist/entities/insight/insightCategory.js.map +1 -0
- package/dist/entities/insight/insightTrend.d.ts +9 -0
- package/dist/entities/insight/insightTrend.d.ts.map +1 -0
- package/dist/entities/insight/insightTrend.js +4 -0
- package/dist/entities/insight/insightTrend.js.map +1 -0
- package/dist/entities/insight/insights.gateway.d.ts +6 -0
- package/dist/entities/insight/insights.gateway.d.ts.map +1 -0
- package/dist/entities/insight/insights.gateway.js +2 -0
- package/dist/entities/insight/insights.gateway.js.map +1 -0
- package/dist/entities/insight/persistedInsightsData.d.ts +5 -0
- package/dist/entities/insight/persistedInsightsData.d.ts.map +1 -0
- package/dist/entities/insight/persistedInsightsData.guard.d.ts +271 -0
- package/dist/entities/insight/persistedInsightsData.guard.d.ts.map +1 -0
- package/dist/entities/insight/persistedInsightsData.guard.js +13 -0
- package/dist/entities/insight/persistedInsightsData.guard.js.map +1 -0
- package/dist/entities/insight/persistedInsightsData.js +2 -0
- package/dist/entities/insight/persistedInsightsData.js.map +1 -0
- package/dist/entities/insight/persistedInsightsData.schema.d.ts +84 -0
- package/dist/entities/insight/persistedInsightsData.schema.d.ts.map +1 -0
- package/dist/entities/insight/persistedInsightsData.schema.js +40 -0
- package/dist/entities/insight/persistedInsightsData.schema.js.map +1 -0
- package/dist/entities/insight/teamInsight.d.ts +5 -0
- package/dist/entities/insight/teamInsight.d.ts.map +1 -0
- package/dist/entities/insight/teamInsight.guard.d.ts +71 -0
- package/dist/entities/insight/teamInsight.guard.d.ts.map +1 -0
- package/dist/entities/insight/teamInsight.guard.js +13 -0
- package/dist/entities/insight/teamInsight.guard.js.map +1 -0
- package/dist/entities/insight/teamInsight.js +2 -0
- package/dist/entities/insight/teamInsight.js.map +1 -0
- package/dist/entities/insight/teamInsight.schema.d.ts +31 -0
- package/dist/entities/insight/teamInsight.schema.d.ts.map +1 -0
- package/dist/entities/insight/teamInsight.schema.js +17 -0
- package/dist/entities/insight/teamInsight.schema.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.d.ts +21 -0
- package/dist/entities/packageVersion/packageVersion.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.gateway.d.ts +4 -0
- package/dist/entities/packageVersion/packageVersion.gateway.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.gateway.js +2 -0
- package/dist/entities/packageVersion/packageVersion.gateway.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.guard.d.ts +7 -0
- package/dist/entities/packageVersion/packageVersion.guard.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.guard.js +13 -0
- package/dist/entities/packageVersion/packageVersion.guard.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.js +2 -0
- package/dist/entities/packageVersion/packageVersion.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.schema.d.ts +12 -0
- package/dist/entities/packageVersion/packageVersion.schema.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.schema.js +11 -0
- package/dist/entities/packageVersion/packageVersion.schema.js.map +1 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts +9 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts.map +1 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.js +2 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.js.map +1 -0
- package/dist/entities/packageVersion/versionCache.gateway.d.ts +7 -0
- package/dist/entities/packageVersion/versionCache.gateway.d.ts.map +1 -0
- package/dist/entities/packageVersion/versionCache.gateway.js +2 -0
- package/dist/entities/packageVersion/versionCache.gateway.js.map +1 -0
- package/dist/entities/review/reviewFile.gateway.d.ts +18 -0
- package/dist/entities/review/reviewFile.gateway.d.ts.map +1 -0
- package/dist/entities/review/reviewFile.gateway.js +2 -0
- package/dist/entities/review/reviewFile.gateway.js.map +1 -0
- package/dist/entities/stats/projectStats.d.ts +39 -0
- package/dist/entities/stats/projectStats.d.ts.map +1 -0
- package/dist/entities/stats/projectStats.js +2 -0
- package/dist/entities/stats/projectStats.js.map +1 -0
- package/dist/entities/stats/recalculateBody.guard.d.ts +11 -0
- package/dist/entities/stats/recalculateBody.guard.d.ts.map +1 -0
- package/dist/entities/stats/recalculateBody.guard.js +9 -0
- package/dist/entities/stats/recalculateBody.guard.js.map +1 -0
- package/dist/entities/stats/stats.gateway.d.ts +7 -0
- package/dist/entities/stats/stats.gateway.d.ts.map +1 -0
- package/dist/entities/stats/stats.gateway.js +2 -0
- package/dist/entities/stats/stats.gateway.js.map +1 -0
- package/dist/entities/tracking/reviewEvent.d.ts +2 -0
- package/dist/entities/tracking/reviewEvent.d.ts.map +1 -1
- package/dist/entities/tracking/reviewRequestTracking.gateway.d.ts +19 -0
- package/dist/entities/tracking/reviewRequestTracking.gateway.d.ts.map +1 -0
- package/dist/entities/tracking/reviewRequestTracking.gateway.js +2 -0
- package/dist/entities/tracking/reviewRequestTracking.gateway.js.map +1 -0
- package/dist/frameworks/claude/claudeInsightsInvoker.d.ts +3 -0
- package/dist/frameworks/claude/claudeInsightsInvoker.d.ts.map +1 -0
- package/dist/frameworks/claude/claudeInsightsInvoker.js +58 -0
- package/dist/frameworks/claude/claudeInsightsInvoker.js.map +1 -0
- package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
- package/dist/frameworks/claude/claudeInvoker.js +15 -1
- package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
- package/dist/frameworks/scheduler/cleanupScheduler.d.ts +16 -0
- package/dist/frameworks/scheduler/cleanupScheduler.d.ts.map +1 -0
- package/dist/frameworks/scheduler/cleanupScheduler.js +35 -0
- package/dist/frameworks/scheduler/cleanupScheduler.js.map +1 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.d.ts +16 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.d.ts.map +1 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.js +44 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.js.map +1 -0
- package/dist/interface-adapters/controllers/http/health.routes.d.ts +3 -1
- package/dist/interface-adapters/controllers/http/health.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/health.routes.js +5 -1
- package/dist/interface-adapters/controllers/http/health.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/insights.routes.d.ts +20 -0
- package/dist/interface-adapters/controllers/http/insights.routes.d.ts.map +1 -0
- package/dist/interface-adapters/controllers/http/insights.routes.js +73 -0
- package/dist/interface-adapters/controllers/http/insights.routes.js.map +1 -0
- package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +13 -2
- package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/settings.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/settings.routes.js +3 -0
- package/dist/interface-adapters/controllers/http/settings.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/stats.routes.d.ts +20 -6
- package/dist/interface-adapters/controllers/http/stats.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/stats.routes.js +35 -2
- package/dist/interface-adapters/controllers/http/stats.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/version.routes.d.ts +19 -0
- package/dist/interface-adapters/controllers/http/version.routes.d.ts.map +1 -0
- package/dist/interface-adapters/controllers/http/version.routes.js +21 -0
- package/dist/interface-adapters/controllers/http/version.routes.js.map +1 -0
- package/dist/interface-adapters/controllers/webhook/github.controller.d.ts +2 -0
- package/dist/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/webhook/github.controller.js +9 -3
- package/dist/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts +2 -0
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.js +17 -5
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.d.ts +10 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.js +26 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.d.ts +10 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js +28 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.d.ts +7 -0
- package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.js +33 -0
- package/dist/interface-adapters/gateways/fileSystem/insights.fileSystem.js.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.d.ts +7 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.js +47 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts +2 -2
- package/dist/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts.map +1 -1
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.d.ts +7 -0
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.js +25 -0
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/reviewFile.gateway.d.ts +1 -17
- package/dist/interface-adapters/gateways/reviewFile.gateway.d.ts.map +1 -1
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.d.ts +12 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.js +2 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/reviewRequestTracking.gateway.d.ts +1 -18
- package/dist/interface-adapters/gateways/reviewRequestTracking.gateway.d.ts.map +1 -1
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts +20 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js +58 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/stats.gateway.d.ts +1 -6
- package/dist/interface-adapters/gateways/stats.gateway.d.ts.map +1 -1
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.d.ts +12 -0
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.js +22 -0
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.js.map +1 -0
- package/dist/interface-adapters/presenters/insights.presenter.d.ts +41 -0
- package/dist/interface-adapters/presenters/insights.presenter.d.ts.map +1 -0
- package/dist/interface-adapters/presenters/insights.presenter.js +36 -0
- package/dist/interface-adapters/presenters/insights.presenter.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/index.html +599 -40
- package/dist/interface-adapters/views/dashboard/modules/cleanup.d.ts +10 -0
- package/dist/interface-adapters/views/dashboard/modules/cleanup.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/cleanup.js +45 -0
- package/dist/interface-adapters/views/dashboard/modules/cleanup.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.d.ts +13 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.js +71 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/developerSheet.d.ts +14 -0
- package/dist/interface-adapters/views/dashboard/modules/developerSheet.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/developerSheet.js +359 -0
- package/dist/interface-adapters/views/dashboard/modules/developerSheet.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/interface-adapters/views/dashboard/modules/i18n.js +296 -0
- package/dist/interface-adapters/views/dashboard/modules/i18n.js.map +1 -1
- package/dist/interface-adapters/views/dashboard/modules/insightsReport.d.ts +7 -0
- package/dist/interface-adapters/views/dashboard/modules/insightsReport.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/insightsReport.js +509 -0
- package/dist/interface-adapters/views/dashboard/modules/insightsReport.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.d.ts +25 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.js +414 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.d.ts +40 -0
- package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.js +106 -0
- package/dist/interface-adapters/views/dashboard/modules/sharedViewHelpers.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.d.ts +35 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.js +476 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/teamTab.d.ts +13 -0
- package/dist/interface-adapters/views/dashboard/modules/teamTab.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/teamTab.js +296 -0
- package/dist/interface-adapters/views/dashboard/modules/teamTab.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.d.ts +16 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.js +54 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/styles.css +1906 -0
- package/dist/main/dependencies.d.ts +4 -0
- package/dist/main/dependencies.d.ts.map +1 -1
- package/dist/main/dependencies.js +4 -0
- package/dist/main/dependencies.js.map +1 -1
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +68 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/main/server.d.ts.map +1 -1
- package/dist/main/server.js +8 -0
- package/dist/main/server.js.map +1 -1
- package/dist/main/websocket.d.ts +2 -0
- package/dist/main/websocket.d.ts.map +1 -1
- package/dist/main/websocket.js +13 -0
- package/dist/main/websocket.js.map +1 -1
- package/dist/services/statsService.d.ts +8 -32
- package/dist/services/statsService.d.ts.map +1 -1
- package/dist/services/statsService.js +60 -36
- package/dist/services/statsService.js.map +1 -1
- package/dist/shared/foundation/commandExecutor.d.ts +2 -0
- package/dist/shared/foundation/commandExecutor.d.ts.map +1 -0
- package/dist/shared/foundation/commandExecutor.js +2 -0
- package/dist/shared/foundation/commandExecutor.js.map +1 -0
- package/dist/tests/factories/developerInsight.factory.d.ts +6 -0
- package/dist/tests/factories/developerInsight.factory.d.ts.map +1 -0
- package/dist/tests/factories/developerInsight.factory.js +61 -0
- package/dist/tests/factories/developerInsight.factory.js.map +1 -0
- package/dist/tests/factories/diffStats.factory.d.ts +5 -0
- package/dist/tests/factories/diffStats.factory.d.ts.map +1 -0
- package/dist/tests/factories/diffStats.factory.js +11 -0
- package/dist/tests/factories/diffStats.factory.js.map +1 -0
- package/dist/tests/factories/packageVersion.factory.d.ts +7 -0
- package/dist/tests/factories/packageVersion.factory.d.ts.map +1 -0
- package/dist/tests/factories/packageVersion.factory.js +18 -0
- package/dist/tests/factories/packageVersion.factory.js.map +1 -0
- package/dist/tests/factories/persistedInsightsData.factory.d.ts +11 -0
- package/dist/tests/factories/persistedInsightsData.factory.d.ts.map +1 -0
- package/dist/tests/factories/persistedInsightsData.factory.js +41 -0
- package/dist/tests/factories/persistedInsightsData.factory.js.map +1 -0
- package/dist/tests/factories/projectStats.factory.d.ts +3 -1
- package/dist/tests/factories/projectStats.factory.d.ts.map +1 -1
- package/dist/tests/factories/projectStats.factory.js +17 -3
- package/dist/tests/factories/projectStats.factory.js.map +1 -1
- package/dist/tests/factories/teamInsight.factory.d.ts +6 -0
- package/dist/tests/factories/teamInsight.factory.d.ts.map +1 -0
- package/dist/tests/factories/teamInsight.factory.js +35 -0
- package/dist/tests/factories/teamInsight.factory.js.map +1 -0
- package/dist/tests/stubs/diffStatsFetch.stub.d.ts +11 -0
- package/dist/tests/stubs/diffStatsFetch.stub.d.ts.map +1 -0
- package/dist/tests/stubs/diffStatsFetch.stub.js +19 -0
- package/dist/tests/stubs/diffStatsFetch.stub.js.map +1 -0
- package/dist/tests/stubs/insights.stub.d.ts +9 -0
- package/dist/tests/stubs/insights.stub.d.ts.map +1 -0
- package/dist/tests/stubs/insights.stub.js +13 -0
- package/dist/tests/stubs/insights.stub.js.map +1 -0
- package/dist/tests/stubs/packageVersion.stub.d.ts +7 -0
- package/dist/tests/stubs/packageVersion.stub.d.ts.map +1 -0
- package/dist/tests/stubs/packageVersion.stub.js +10 -0
- package/dist/tests/stubs/packageVersion.stub.js.map +1 -0
- package/dist/tests/stubs/reviewFile.stub.d.ts +1 -1
- package/dist/tests/stubs/reviewFile.stub.d.ts.map +1 -1
- package/dist/tests/stubs/reviewLogFile.stub.d.ts +15 -0
- package/dist/tests/stubs/reviewLogFile.stub.d.ts.map +1 -0
- package/dist/tests/stubs/reviewLogFile.stub.js +35 -0
- package/dist/tests/stubs/reviewLogFile.stub.js.map +1 -0
- package/dist/tests/stubs/reviewRequestTracking.stub.d.ts +1 -1
- package/dist/tests/stubs/reviewRequestTracking.stub.d.ts.map +1 -1
- package/dist/tests/stubs/selfUpdate.stub.d.ts +14 -0
- package/dist/tests/stubs/selfUpdate.stub.d.ts.map +1 -0
- package/dist/tests/stubs/selfUpdate.stub.js +20 -0
- package/dist/tests/stubs/selfUpdate.stub.js.map +1 -0
- package/dist/tests/stubs/stats.stub.d.ts +2 -2
- package/dist/tests/stubs/stats.stub.d.ts.map +1 -1
- package/dist/tests/stubs/versionCache.stub.d.ts +11 -0
- package/dist/tests/stubs/versionCache.stub.d.ts.map +1 -0
- package/dist/tests/stubs/versionCache.stub.js +18 -0
- package/dist/tests/stubs/versionCache.stub.js.map +1 -0
- package/dist/tests/units/config/projectConfig.test.js +60 -1
- package/dist/tests/units/config/projectConfig.test.js.map +1 -1
- package/dist/tests/units/entities/backfill/backfillProgress.test.d.ts +2 -0
- package/dist/tests/units/entities/backfill/backfillProgress.test.d.ts.map +1 -0
- package/dist/tests/units/entities/backfill/backfillProgress.test.js +40 -0
- package/dist/tests/units/entities/backfill/backfillProgress.test.js.map +1 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.d.ts +2 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.d.ts.map +1 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.js +47 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.js.map +1 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.d.ts +2 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.d.ts.map +1 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.js +27 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.js.map +1 -0
- package/dist/tests/units/entities/insight/aiInsight.schema.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/aiInsight.schema.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/aiInsight.schema.test.js +123 -0
- package/dist/tests/units/entities/insight/aiInsight.schema.test.js.map +1 -0
- package/dist/tests/units/entities/insight/developerInsight.schema.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/developerInsight.schema.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/developerInsight.schema.test.js +140 -0
- package/dist/tests/units/entities/insight/developerInsight.schema.test.js.map +1 -0
- package/dist/tests/units/entities/insight/developerTitle.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/developerTitle.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/developerTitle.test.js +23 -0
- package/dist/tests/units/entities/insight/developerTitle.test.js.map +1 -0
- package/dist/tests/units/entities/insight/insightCategory.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/insightCategory.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/insightCategory.test.js +16 -0
- package/dist/tests/units/entities/insight/insightCategory.test.js.map +1 -0
- package/dist/tests/units/entities/insight/insightTrend.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/insightTrend.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/insightTrend.test.js +16 -0
- package/dist/tests/units/entities/insight/insightTrend.test.js.map +1 -0
- package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.js +160 -0
- package/dist/tests/units/entities/insight/persistedInsightsData.schema.test.js.map +1 -0
- package/dist/tests/units/entities/insight/teamInsight.schema.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/teamInsight.schema.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/teamInsight.schema.test.js +57 -0
- package/dist/tests/units/entities/insight/teamInsight.schema.test.js.map +1 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.d.ts +2 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.d.ts.map +1 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.js +154 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.js.map +1 -0
- package/dist/tests/units/factories/packageVersion.factory.test.d.ts +2 -0
- package/dist/tests/units/factories/packageVersion.factory.test.d.ts.map +1 -0
- package/dist/tests/units/factories/packageVersion.factory.test.js +37 -0
- package/dist/tests/units/factories/packageVersion.factory.test.js.map +1 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.d.ts +2 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.d.ts.map +1 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.js +74 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.js +62 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js +96 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js +390 -0
- package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js +25 -0
- package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js +82 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js +108 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +3 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.js +63 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.js +94 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.js +117 -0
- package/dist/tests/units/interface-adapters/gateways/insights.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.js +42 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.js +65 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.js +63 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewRequestTracking.gateway.test.js +2 -0
- package/dist/tests/units/interface-adapters/gateways/reviewRequestTracking.gateway.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js +101 -0
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.js +38 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.js +194 -0
- package/dist/tests/units/interface-adapters/presenters/insights.presenter.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.js +224 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/developerSheet.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js +29 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.js +326 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/insightsReport.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.js +336 -0
- package/dist/tests/units/interface-adapters/views/dashboard/modules/teamTab.test.js.map +1 -0
- package/dist/tests/units/services/statsService.addReview.test.d.ts +2 -0
- package/dist/tests/units/services/statsService.addReview.test.d.ts.map +1 -0
- package/dist/tests/units/services/statsService.addReview.test.js +103 -0
- package/dist/tests/units/services/statsService.addReview.test.js.map +1 -0
- package/dist/tests/units/services/statsService.diffStats.test.d.ts +2 -0
- package/dist/tests/units/services/statsService.diffStats.test.d.ts.map +1 -0
- package/dist/tests/units/services/statsService.diffStats.test.js +61 -0
- package/dist/tests/units/services/statsService.diffStats.test.js.map +1 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.d.ts +2 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.d.ts.map +1 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.js +20 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.js.map +1 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.d.ts +2 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.d.ts.map +1 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.js +30 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.js.map +1 -0
- package/dist/tests/units/stubs/versionCache.stub.test.d.ts +2 -0
- package/dist/tests/units/stubs/versionCache.stub.test.d.ts.map +1 -0
- package/dist/tests/units/stubs/versionCache.stub.test.js +34 -0
- package/dist/tests/units/stubs/versionCache.stub.test.js.map +1 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.js +83 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js +172 -0
- package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js +449 -0
- package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js +326 -0
- package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.js +172 -0
- package/dist/tests/units/usecases/insights/computeTeamInsights.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js +253 -0
- package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js +160 -0
- package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.d.ts +2 -0
- package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js +125 -0
- package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.js +186 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.js +130 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.js +138 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/tracking/recordReviewCompletion.usecase.test.js +31 -2
- package/dist/tests/units/usecases/tracking/recordReviewCompletion.usecase.test.js.map +1 -1
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.js +63 -0
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js +26 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js.map +1 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.d.ts +13 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.d.ts.map +1 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.js +41 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.js.map +1 -0
- package/dist/usecases/insights/buildAiInsightsPrompt.d.ts +12 -0
- package/dist/usecases/insights/buildAiInsightsPrompt.d.ts.map +1 -0
- package/dist/usecases/insights/buildAiInsightsPrompt.js +220 -0
- package/dist/usecases/insights/buildAiInsightsPrompt.js.map +1 -0
- package/dist/usecases/insights/computeDeveloperInsights.usecase.d.ts +4 -0
- package/dist/usecases/insights/computeDeveloperInsights.usecase.d.ts.map +1 -0
- package/dist/usecases/insights/computeDeveloperInsights.usecase.js +226 -0
- package/dist/usecases/insights/computeDeveloperInsights.usecase.js.map +1 -0
- package/dist/usecases/insights/computeInsightsWithPersistence.usecase.d.ts +12 -0
- package/dist/usecases/insights/computeInsightsWithPersistence.usecase.d.ts.map +1 -0
- package/dist/usecases/insights/computeInsightsWithPersistence.usecase.js +340 -0
- package/dist/usecases/insights/computeInsightsWithPersistence.usecase.js.map +1 -0
- package/dist/usecases/insights/computeTeamInsights.usecase.d.ts +4 -0
- package/dist/usecases/insights/computeTeamInsights.usecase.d.ts.map +1 -0
- package/dist/usecases/insights/computeTeamInsights.usecase.js +111 -0
- package/dist/usecases/insights/computeTeamInsights.usecase.js.map +1 -0
- package/dist/usecases/insights/generateAiInsights.usecase.d.ts +27 -0
- package/dist/usecases/insights/generateAiInsights.usecase.d.ts.map +1 -0
- package/dist/usecases/insights/generateAiInsights.usecase.js +65 -0
- package/dist/usecases/insights/generateAiInsights.usecase.js.map +1 -0
- package/dist/usecases/insights/getInsightsWithAiStatus.usecase.d.ts +18 -0
- package/dist/usecases/insights/getInsightsWithAiStatus.usecase.d.ts.map +1 -0
- package/dist/usecases/insights/getInsightsWithAiStatus.usecase.js +56 -0
- package/dist/usecases/insights/getInsightsWithAiStatus.usecase.js.map +1 -0
- package/dist/usecases/insights/insightLevelComputation.service.d.ts +41 -0
- package/dist/usecases/insights/insightLevelComputation.service.d.ts.map +1 -0
- package/dist/usecases/insights/insightLevelComputation.service.js +313 -0
- package/dist/usecases/insights/insightLevelComputation.service.js.map +1 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.d.ts +18 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.d.ts.map +1 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.js +43 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.js.map +1 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.d.ts +7 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.d.ts.map +1 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.js +47 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.js.map +1 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.d.ts +22 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.d.ts.map +1 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.js +33 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.js.map +1 -0
- package/dist/usecases/tracking/recordReviewCompletion.usecase.d.ts +2 -0
- package/dist/usecases/tracking/recordReviewCompletion.usecase.d.ts.map +1 -1
- package/dist/usecases/tracking/recordReviewCompletion.usecase.js +1 -0
- package/dist/usecases/tracking/recordReviewCompletion.usecase.js.map +1 -1
- package/dist/usecases/version/checkVersion.usecase.d.ts +13 -0
- package/dist/usecases/version/checkVersion.usecase.d.ts.map +1 -0
- package/dist/usecases/version/checkVersion.usecase.js +20 -0
- package/dist/usecases/version/checkVersion.usecase.js.map +1 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts +7 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts.map +1 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.js +12 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.js.map +1 -0
- package/package.json +1 -1
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
<div class="logo"><i data-lucide="bot"></i></div>
|
|
14
14
|
<h1>Reviewflow</h1>
|
|
15
15
|
<div class="header-actions">
|
|
16
|
+
<div class="version-update-wrapper">
|
|
17
|
+
<div id="version-update-area" class="version-update-area"></div>
|
|
18
|
+
<div id="version-manual-update-container"></div>
|
|
19
|
+
</div>
|
|
16
20
|
<button id="check-claude-btn" class="btn btn-primary" onclick="checkClaudeStatus()">
|
|
17
21
|
<i data-lucide="search"></i> <span id="i18n-check-claude"></span>
|
|
18
22
|
</button>
|
|
@@ -145,12 +149,27 @@
|
|
|
145
149
|
<div class="section-header clickable" onclick="toggleStats()" role="button" tabindex="0" onkeydown="activateOnKeydown(event)">
|
|
146
150
|
<i data-lucide="bar-chart-3"></i> <span id="i18n-section-stats"></span>
|
|
147
151
|
<span id="stats-toggle" class="toggle-icon collapsed"><i data-lucide="chevron-down"></i></span>
|
|
152
|
+
<button id="recalculate-btn" class="btn btn-sm btn-secondary" onclick="event.stopPropagation(); recalculateStats()" style="margin-left: auto; font-size: 0.75rem; padding: 2px 8px;">
|
|
153
|
+
<i data-lucide="refresh-cw" style="width: 12px; height: 12px;"></i>
|
|
154
|
+
<span id="recalculate-label"></span>
|
|
155
|
+
</button>
|
|
156
|
+
<span id="backfill-progress" class="badge-count hidden" style="margin-left: 4px;"></span>
|
|
148
157
|
</div>
|
|
149
158
|
<div id="project-stats" class="section-content stats-grid hidden">
|
|
150
159
|
<div class="empty-state" id="i18n-empty-stats"></div>
|
|
151
160
|
</div>
|
|
152
161
|
</div>
|
|
153
162
|
|
|
163
|
+
<div id="team-section" class="section hidden">
|
|
164
|
+
<div class="section-header clickable" onclick="toggleTeamSection()" role="button" tabindex="0" onkeydown="activateOnKeydown(event)">
|
|
165
|
+
<i data-lucide="users"></i> <span id="i18n-section-team"></span>
|
|
166
|
+
<span id="team-toggle" class="toggle-icon collapsed"><i data-lucide="chevron-down"></i></span>
|
|
167
|
+
</div>
|
|
168
|
+
<div id="team-tab-content" class="section-content hidden">
|
|
169
|
+
<div class="empty-state" id="i18n-empty-team"></div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
154
173
|
<div class="section" id="active-reviews-section">
|
|
155
174
|
<div class="section-header">
|
|
156
175
|
<i data-lucide="file-search"></i> <span id="i18n-section-active-reviews"></span>
|
|
@@ -206,6 +225,13 @@
|
|
|
206
225
|
</div>
|
|
207
226
|
</div>
|
|
208
227
|
|
|
228
|
+
<div class="section" id="cleanup-section">
|
|
229
|
+
<div class="section-header">
|
|
230
|
+
<i data-lucide="trash-2"></i> <span>Nettoyage</span>
|
|
231
|
+
</div>
|
|
232
|
+
<div class="section-content" id="cleanup-content"></div>
|
|
233
|
+
</div>
|
|
234
|
+
|
|
209
235
|
<div class="refresh-info">
|
|
210
236
|
<span id="connection-mode"></span> • <span id="i18n-connection-fallback"></span>
|
|
211
237
|
<span class="refresh-separator"> • </span>
|
|
@@ -226,6 +252,16 @@
|
|
|
226
252
|
|
|
227
253
|
<div id="toast-container" class="toast-container"></div>
|
|
228
254
|
|
|
255
|
+
<div id="mr-sheet-overlay" class="sheet-overlay" onclick="closeMrSheet()"></div>
|
|
256
|
+
<div id="mr-sheet" class="sheet-panel">
|
|
257
|
+
<div id="mr-sheet-content" class="sheet-content"></div>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
<div id="dev-sheet-overlay" class="sheet-overlay" onclick="closeDevSheet()"></div>
|
|
261
|
+
<div id="dev-sheet" class="sheet-panel">
|
|
262
|
+
<div id="dev-sheet-content" class="sheet-content"></div>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
229
265
|
<script type="module">
|
|
230
266
|
import { t, setLanguage, getLanguage } from './modules/i18n.js';
|
|
231
267
|
import { formatTime, formatDuration, formatPhase, formatLogTime } from './modules/formatting.js';
|
|
@@ -240,6 +276,14 @@
|
|
|
240
276
|
import { rankPendingFixForNowLane } from './modules/priority.js';
|
|
241
277
|
import { getQualityProgress, getQualityTrend } from './modules/quality.js';
|
|
242
278
|
import { createSessionMetricsState, trackSessionAction, updatePriorityItemTracking, getSessionMetricsSnapshot } from './modules/sessionMetrics.js';
|
|
279
|
+
import { renderCleanupSection, handleCleanupClick } from './modules/cleanup.js';
|
|
280
|
+
import { renderVersionUpdateArea, setVersionCheckState } from './modules/versionUpdate.js';
|
|
281
|
+
import { renderCollapsibleList, toggleCollapsibleList } from './modules/collapsibleList.js';
|
|
282
|
+
import { renderMrSheetContent, drawScoreTimeline, drawIssuesBreakdown } from './modules/mrSheet.js';
|
|
283
|
+
import { drawScoreTrendChart, drawReviewActivityChart, drawScoreDistributionChart, animateCounter } from './modules/statsCharts.js';
|
|
284
|
+
import { renderTeamTab, fetchAndRenderTeamTab } from './modules/teamTab.js';
|
|
285
|
+
import { renderDeveloperSheetContent, drawRadarChart } from './modules/developerSheet.js';
|
|
286
|
+
import { buildInsightsReport } from './modules/insightsReport.js';
|
|
243
287
|
|
|
244
288
|
const API_URL = window.location.origin;
|
|
245
289
|
const WS_URL = `ws://${window.location.host}/ws`;
|
|
@@ -250,9 +294,14 @@
|
|
|
250
294
|
let logsVisible = false;
|
|
251
295
|
|
|
252
296
|
let currentData = { activeReviews: [], recentReviews: [], logs: [], reviewFiles: [], pendingFix: [], pendingApproval: [] };
|
|
297
|
+
const mrDataStore = new Map();
|
|
253
298
|
let loadedReviews = {};
|
|
254
299
|
let statsCollapsed = true;
|
|
300
|
+
let currentStatsReviews = [];
|
|
301
|
+
let currentDevFilter = 'all';
|
|
255
302
|
let focusStripCompact = false;
|
|
303
|
+
let teamCollapsed = true;
|
|
304
|
+
let currentInsightsData = null;
|
|
256
305
|
const loadingState = { status: 0, reviewFiles: 0, stats: 0, mrTracking: 0 };
|
|
257
306
|
let hasLoadedStatusOnce = false;
|
|
258
307
|
const secondarySections = ['active-followups-section', 'pending-approval-section', 'completed-reviews-section'];
|
|
@@ -702,21 +751,13 @@
|
|
|
702
751
|
}
|
|
703
752
|
|
|
704
753
|
function updateLogs() {
|
|
705
|
-
const
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
} else {
|
|
713
|
-
errorBadge.classList.add('hidden');
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
if (currentData.logs.length === 0) {
|
|
717
|
-
logsEl.innerHTML = `<div class="empty-state">${t('empty.logs')}</div>`;
|
|
718
|
-
} else {
|
|
719
|
-
logsEl.innerHTML = currentData.logs.slice().reverse().map(renderLog).join('');
|
|
754
|
+
const sheetLogsEl = document.querySelector('.sheet-logs-content');
|
|
755
|
+
if (sheetLogsEl && logsVisible) {
|
|
756
|
+
if (currentData.logs.length === 0) {
|
|
757
|
+
sheetLogsEl.innerHTML = `<div class="empty-state">${t('empty.logs')}</div>`;
|
|
758
|
+
} else {
|
|
759
|
+
sheetLogsEl.innerHTML = currentData.logs.slice().reverse().map(renderLog).join('');
|
|
760
|
+
}
|
|
720
761
|
}
|
|
721
762
|
}
|
|
722
763
|
|
|
@@ -829,19 +870,23 @@
|
|
|
829
870
|
|
|
830
871
|
if (data.summary) {
|
|
831
872
|
const s = data.summary;
|
|
873
|
+
const reviews = data.stats?.reviews || [];
|
|
832
874
|
const trendIcon = (trend) => trend === 'up'
|
|
833
875
|
? '<span class="stat-trend up"><i data-lucide="trending-up"></i></span>'
|
|
834
876
|
: trend === 'down'
|
|
835
877
|
? '<span class="stat-trend down"><i data-lucide="trending-down"></i></span>'
|
|
836
878
|
: '<span class="stat-trend flat"><i data-lucide="minus"></i></span>';
|
|
837
879
|
|
|
880
|
+
const numericScore = parseFloat(s.averageScore);
|
|
881
|
+
const isScoreNumeric = !isNaN(numericScore);
|
|
882
|
+
|
|
838
883
|
statsEl.innerHTML = `
|
|
839
884
|
<div class="stat-card metric-reviews">
|
|
840
|
-
<div class="stat-value"><span class="stat-main"
|
|
885
|
+
<div class="stat-value"><span class="stat-main" data-target="${s.totalReviews}">0</span></div>
|
|
841
886
|
<div class="stat-label"><i data-lucide="file-search"></i> ${t('stats.reviews')}</div>
|
|
842
887
|
</div>
|
|
843
888
|
<div class="stat-card metric-score">
|
|
844
|
-
<div class="stat-value"><span class="stat-main">${s.averageScore}</span
|
|
889
|
+
<div class="stat-value"><span class="stat-main" ${isScoreNumeric ? `data-target="${numericScore}" data-suffix="/10"` : ''}>${isScoreNumeric ? '0' : s.averageScore}</span>${!isScoreNumeric ? '<span class="stat-denominator">/10</span>' : ''}${trendIcon(s.trend.score)}</div>
|
|
845
890
|
<div class="stat-label"><i data-lucide="star"></i> ${t('stats.averageScore')}</div>
|
|
846
891
|
</div>
|
|
847
892
|
<div class="stat-card metric-time">
|
|
@@ -853,15 +898,57 @@
|
|
|
853
898
|
<div class="stat-label"><i data-lucide="clock"></i> ${t('stats.averageTime')}</div>
|
|
854
899
|
</div>
|
|
855
900
|
<div class="stat-card warning metric-blocking">
|
|
856
|
-
<div class="stat-value"><span class="stat-main"
|
|
901
|
+
<div class="stat-value"><span class="stat-main" data-target="${s.totalBlocking}">0</span>${trendIcon(s.trend.blocking)}</div>
|
|
857
902
|
<div class="stat-label"><i data-lucide="octagon-alert"></i> ${t('stats.blocking')}</div>
|
|
858
903
|
</div>
|
|
859
904
|
<div class="stat-card metric-warnings">
|
|
860
|
-
<div class="stat-value"><span class="stat-main"
|
|
905
|
+
<div class="stat-value"><span class="stat-main" data-target="${s.totalWarnings}">0</span></div>
|
|
861
906
|
<div class="stat-label"><i data-lucide="alert-triangle"></i> ${t('stats.warnings')}</div>
|
|
862
907
|
</div>
|
|
908
|
+
<div class="stats-charts-row">
|
|
909
|
+
<div class="stats-chart-card">
|
|
910
|
+
<div class="stats-chart-title"><i data-lucide="trending-up"></i> ${t('stats.scoreTrend')}</div>
|
|
911
|
+
<div class="dev-filter" id="dev-filter-container">
|
|
912
|
+
<button class="dev-filter-btn ${currentDevFilter === 'all' ? 'active' : ''}" data-dev="all" onclick="filterScoreTrend('all')">${t('stats.allDevs')}</button>
|
|
913
|
+
${[...new Set(reviews.map(r => r.assignedBy).filter(Boolean))].map(dev =>
|
|
914
|
+
'<button class="dev-filter-btn ' + (currentDevFilter === dev ? 'active' : '') + '" data-dev="' + dev + '" onclick="filterScoreTrend(\'' + dev + '\')">' + dev + '</button>'
|
|
915
|
+
).join('')}
|
|
916
|
+
</div>
|
|
917
|
+
<canvas id="stats-score-trend" class="stats-canvas"></canvas>
|
|
918
|
+
</div>
|
|
919
|
+
<div class="stats-chart-card">
|
|
920
|
+
<div class="stats-chart-title"><i data-lucide="bar-chart-3"></i> ${t('stats.reviewActivity')}</div>
|
|
921
|
+
<canvas id="stats-activity" class="stats-canvas"></canvas>
|
|
922
|
+
</div>
|
|
923
|
+
</div>
|
|
924
|
+
<div class="stats-charts-row">
|
|
925
|
+
<div class="stats-chart-card full-width">
|
|
926
|
+
<div class="stats-chart-title"><i data-lucide="pie-chart"></i> ${t('stats.scoreDistribution')}</div>
|
|
927
|
+
<canvas id="stats-distribution" class="stats-canvas-wide"></canvas>
|
|
928
|
+
</div>
|
|
929
|
+
</div>
|
|
863
930
|
`;
|
|
864
931
|
refreshIcons();
|
|
932
|
+
|
|
933
|
+
statsEl.querySelectorAll('.stat-main[data-target]').forEach(element => {
|
|
934
|
+
const target = parseFloat(element.dataset.target);
|
|
935
|
+
if (!isNaN(target)) {
|
|
936
|
+
animateCounter(element, target, 800, element.dataset.suffix || '');
|
|
937
|
+
}
|
|
938
|
+
});
|
|
939
|
+
|
|
940
|
+
currentStatsReviews = reviews;
|
|
941
|
+
|
|
942
|
+
requestAnimationFrame(() => {
|
|
943
|
+
if (reviews.length) {
|
|
944
|
+
const trendReviews = currentDevFilter === 'all'
|
|
945
|
+
? reviews
|
|
946
|
+
: reviews.filter(r => r.assignedBy === currentDevFilter);
|
|
947
|
+
drawScoreTrendChart('stats-score-trend', trendReviews);
|
|
948
|
+
drawReviewActivityChart('stats-activity', reviews);
|
|
949
|
+
drawScoreDistributionChart('stats-distribution', reviews);
|
|
950
|
+
}
|
|
951
|
+
});
|
|
865
952
|
} else {
|
|
866
953
|
statsEl.innerHTML = `<div class="empty-state">${t('empty.statsNoData')}</div>`;
|
|
867
954
|
}
|
|
@@ -885,7 +972,10 @@
|
|
|
885
972
|
}
|
|
886
973
|
|
|
887
974
|
completedSection?.classList.remove('hidden');
|
|
888
|
-
recentEl.innerHTML =
|
|
975
|
+
recentEl.innerHTML = renderCollapsibleList(
|
|
976
|
+
currentData.reviewFiles.map(renderReviewFile),
|
|
977
|
+
'completed-reviews', t
|
|
978
|
+
);
|
|
889
979
|
applySectionExpansion('completed-reviews-section');
|
|
890
980
|
refreshIcons();
|
|
891
981
|
}
|
|
@@ -1044,19 +1134,58 @@
|
|
|
1044
1134
|
}
|
|
1045
1135
|
|
|
1046
1136
|
function toggleLogs() {
|
|
1047
|
-
|
|
1048
|
-
const
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
fetchLogs();
|
|
1055
|
-
} else {
|
|
1056
|
-
logsSection.classList.add('hidden');
|
|
1057
|
-
btn.innerHTML = `<i data-lucide="scroll-text"></i> ${t('header.logs')}`;
|
|
1137
|
+
const sheetPanel = document.getElementById('mr-sheet');
|
|
1138
|
+
const isOpen = sheetPanel.classList.contains('open') && logsVisible;
|
|
1139
|
+
|
|
1140
|
+
if (isOpen) {
|
|
1141
|
+
closeMrSheet();
|
|
1142
|
+
logsVisible = false;
|
|
1143
|
+
return;
|
|
1058
1144
|
}
|
|
1059
|
-
|
|
1145
|
+
|
|
1146
|
+
logsVisible = true;
|
|
1147
|
+
const openLogsSheet = () => {
|
|
1148
|
+
const contentEl = document.getElementById('mr-sheet-content');
|
|
1149
|
+
contentEl.innerHTML = renderLogsSheetContent();
|
|
1150
|
+
document.getElementById('mr-sheet-overlay').classList.add('open');
|
|
1151
|
+
sheetPanel.classList.add('open');
|
|
1152
|
+
document.body.style.overflow = 'hidden';
|
|
1153
|
+
refreshIcons();
|
|
1154
|
+
};
|
|
1155
|
+
fetchLogs().then(openLogsSheet).catch(openLogsSheet);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
function renderLogsSheetContent() {
|
|
1159
|
+
const errorCount = currentData.logs.filter(l => l.level === 'error' || l.level === 'warn').length;
|
|
1160
|
+
const errorBadge = errorCount > 0
|
|
1161
|
+
? ` <span class="section-header badge-count">${t('logs.errorCount', { count: errorCount })}</span>`
|
|
1162
|
+
: '';
|
|
1163
|
+
|
|
1164
|
+
const logsHtml = currentData.logs.length === 0
|
|
1165
|
+
? `<div class="empty-state">${t('empty.logs')}</div>`
|
|
1166
|
+
: currentData.logs.slice().reverse().map(renderLog).join('');
|
|
1167
|
+
|
|
1168
|
+
return `
|
|
1169
|
+
<button class="sheet-close" onclick="closeMrSheet()"><i data-lucide="x"></i></button>
|
|
1170
|
+
<div class="sheet-mr-header">
|
|
1171
|
+
<div>
|
|
1172
|
+
<div class="sheet-mr-title"><i data-lucide="scroll-text"></i> ${t('section.logs')}${errorBadge}</div>
|
|
1173
|
+
</div>
|
|
1174
|
+
</div>
|
|
1175
|
+
<div class="sheet-logs-body">
|
|
1176
|
+
<div class="sheet-logs-content section-content logs">${logsHtml}</div>
|
|
1177
|
+
</div>
|
|
1178
|
+
<div class="sheet-logs-footer">
|
|
1179
|
+
<button class="btn btn-secondary sheet-clear-btn" onclick="clearLogs()">
|
|
1180
|
+
<i data-lucide="trash-2"></i> ${t('logs.clear')}
|
|
1181
|
+
</button>
|
|
1182
|
+
</div>
|
|
1183
|
+
`;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
function clearLogs() {
|
|
1187
|
+
currentData.logs = [];
|
|
1188
|
+
updateLogs();
|
|
1060
1189
|
}
|
|
1061
1190
|
|
|
1062
1191
|
function toggleStats() {
|
|
@@ -1073,6 +1202,214 @@
|
|
|
1073
1202
|
}
|
|
1074
1203
|
}
|
|
1075
1204
|
|
|
1205
|
+
function toggleTeamSection() {
|
|
1206
|
+
teamCollapsed = !teamCollapsed;
|
|
1207
|
+
const content = document.getElementById('team-tab-content');
|
|
1208
|
+
const toggle = document.getElementById('team-toggle');
|
|
1209
|
+
|
|
1210
|
+
if (teamCollapsed) {
|
|
1211
|
+
content.classList.add('hidden');
|
|
1212
|
+
toggle.classList.add('collapsed');
|
|
1213
|
+
} else {
|
|
1214
|
+
content.classList.remove('hidden');
|
|
1215
|
+
toggle.classList.remove('collapsed');
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
let teamAnalysisCollapsed = false;
|
|
1220
|
+
|
|
1221
|
+
function toggleTeamAnalysis() {
|
|
1222
|
+
teamAnalysisCollapsed = !teamAnalysisCollapsed;
|
|
1223
|
+
const body = document.getElementById('team-analysis-body');
|
|
1224
|
+
const toggle = document.getElementById('team-analysis-toggle');
|
|
1225
|
+
if (body) {
|
|
1226
|
+
body.classList.toggle('hidden', teamAnalysisCollapsed);
|
|
1227
|
+
}
|
|
1228
|
+
if (toggle) {
|
|
1229
|
+
toggle.classList.toggle('collapsed', teamAnalysisCollapsed);
|
|
1230
|
+
}
|
|
1231
|
+
refreshIcons();
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
let aiGenerationInProgress = false;
|
|
1235
|
+
|
|
1236
|
+
async function fetchTeamInsights() {
|
|
1237
|
+
if (!currentProjectPath) return;
|
|
1238
|
+
if (aiGenerationInProgress) return;
|
|
1239
|
+
const container = document.getElementById('team-tab-content');
|
|
1240
|
+
if (!container) return;
|
|
1241
|
+
|
|
1242
|
+
container.innerHTML = `<div class="empty-state team-loading">${icon('loader-circle', 'spinning')} ${t('team.loading')}</div>`;
|
|
1243
|
+
refreshIcons();
|
|
1244
|
+
|
|
1245
|
+
try {
|
|
1246
|
+
const response = await fetch(`${API_URL}/api/insights?path=${encodeURIComponent(currentProjectPath)}`);
|
|
1247
|
+
const data = await response.json();
|
|
1248
|
+
currentInsightsData = data;
|
|
1249
|
+
|
|
1250
|
+
container.innerHTML = renderTeamTab(data, t);
|
|
1251
|
+
refreshIcons();
|
|
1252
|
+
|
|
1253
|
+
setTimeout(() => {
|
|
1254
|
+
container.querySelectorAll('.stat-bar-fill[data-target-width]').forEach((bar) => {
|
|
1255
|
+
bar.style.width = bar.dataset.targetWidth;
|
|
1256
|
+
});
|
|
1257
|
+
}, 50);
|
|
1258
|
+
} catch (error) {
|
|
1259
|
+
console.error('Error fetching team insights:', error);
|
|
1260
|
+
container.innerHTML = `<div class="empty-state">${t('team.noData')}</div>`;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
async function generateAiInsights() {
|
|
1265
|
+
if (!currentProjectPath || aiGenerationInProgress) return;
|
|
1266
|
+
aiGenerationInProgress = true;
|
|
1267
|
+
const button = document.querySelector('.ai-generate-btn');
|
|
1268
|
+
if (button) {
|
|
1269
|
+
button.disabled = true;
|
|
1270
|
+
button.classList.add('loading');
|
|
1271
|
+
button.innerHTML = `${icon('loader-circle', 'spinning')} ${t('ai.generating')}`;
|
|
1272
|
+
refreshIcons();
|
|
1273
|
+
}
|
|
1274
|
+
try {
|
|
1275
|
+
const response = await fetch(`${API_URL}/api/insights/generate`, {
|
|
1276
|
+
method: 'POST',
|
|
1277
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1278
|
+
body: JSON.stringify({ path: currentProjectPath, language: getLanguage() }),
|
|
1279
|
+
});
|
|
1280
|
+
if (!response.ok) {
|
|
1281
|
+
const errorData = await response.json().catch(() => ({}));
|
|
1282
|
+
throw new Error(errorData.error || t('ai.error'));
|
|
1283
|
+
}
|
|
1284
|
+
aiGenerationInProgress = false;
|
|
1285
|
+
await fetchTeamInsights();
|
|
1286
|
+
} catch (error) {
|
|
1287
|
+
aiGenerationInProgress = false;
|
|
1288
|
+
console.error('Error generating AI insights:', error);
|
|
1289
|
+
showToast(error.message || t('ai.error'), 'error');
|
|
1290
|
+
if (button) {
|
|
1291
|
+
button.disabled = false;
|
|
1292
|
+
button.classList.remove('loading');
|
|
1293
|
+
button.innerHTML = `${icon('sparkles')} ${t('ai.generate')}`;
|
|
1294
|
+
refreshIcons();
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
function openDevSheet(encodedName) {
|
|
1300
|
+
const developerName = decodeURIComponent(encodedName);
|
|
1301
|
+
if (!currentInsightsData || !currentInsightsData.developers) return;
|
|
1302
|
+
const developer = currentInsightsData.developers.find(
|
|
1303
|
+
(dev) => dev.developerName === developerName
|
|
1304
|
+
);
|
|
1305
|
+
if (!developer) return;
|
|
1306
|
+
|
|
1307
|
+
const aiDevelopers = currentInsightsData.aiInsights?.developers || [];
|
|
1308
|
+
const aiDeveloper = aiDevelopers.find(
|
|
1309
|
+
(aiDev) => aiDev.developerName === developerName
|
|
1310
|
+
) || null;
|
|
1311
|
+
|
|
1312
|
+
const contentEl = document.getElementById('dev-sheet-content');
|
|
1313
|
+
contentEl.innerHTML = renderDeveloperSheetContent(developer, t, aiDeveloper);
|
|
1314
|
+
|
|
1315
|
+
document.getElementById('dev-sheet-overlay').classList.add('open');
|
|
1316
|
+
document.getElementById('dev-sheet').classList.add('open');
|
|
1317
|
+
document.body.style.overflow = 'hidden';
|
|
1318
|
+
|
|
1319
|
+
refreshIcons();
|
|
1320
|
+
|
|
1321
|
+
requestAnimationFrame(() => {
|
|
1322
|
+
drawRadarChart('dev-radar-canvas', developer.categoryLevels, t);
|
|
1323
|
+
const developerReviews = currentStatsReviews.filter(
|
|
1324
|
+
(review) => review.assignedBy === developerName
|
|
1325
|
+
);
|
|
1326
|
+
drawScoreTrendChart('dev-score-trend-canvas', developerReviews);
|
|
1327
|
+
contentEl.querySelectorAll('.stat-bar-fill[data-target-width]').forEach((bar) => {
|
|
1328
|
+
setTimeout(() => { bar.style.width = bar.dataset.targetWidth; }, 50);
|
|
1329
|
+
});
|
|
1330
|
+
});
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
function closeDevSheet() {
|
|
1334
|
+
document.getElementById('dev-sheet-overlay').classList.remove('open');
|
|
1335
|
+
document.getElementById('dev-sheet').classList.remove('open');
|
|
1336
|
+
document.body.style.overflow = '';
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
function exportInsightsPdf() {
|
|
1340
|
+
if (!currentInsightsData || currentInsightsData.isEmpty) return;
|
|
1341
|
+
|
|
1342
|
+
const reportHtml = buildInsightsReport(currentInsightsData, t);
|
|
1343
|
+
|
|
1344
|
+
const iframe = document.createElement('iframe');
|
|
1345
|
+
iframe.style.position = 'fixed';
|
|
1346
|
+
iframe.style.right = '0';
|
|
1347
|
+
iframe.style.bottom = '0';
|
|
1348
|
+
iframe.style.width = '0';
|
|
1349
|
+
iframe.style.height = '0';
|
|
1350
|
+
iframe.style.border = 'none';
|
|
1351
|
+
document.body.appendChild(iframe);
|
|
1352
|
+
|
|
1353
|
+
const document_ = iframe.contentDocument || iframe.contentWindow.document;
|
|
1354
|
+
document_.open();
|
|
1355
|
+
document_.write(reportHtml);
|
|
1356
|
+
document_.close();
|
|
1357
|
+
|
|
1358
|
+
iframe.contentWindow.addEventListener('afterprint', () => {
|
|
1359
|
+
if (iframe.parentNode) document.body.removeChild(iframe);
|
|
1360
|
+
});
|
|
1361
|
+
|
|
1362
|
+
setTimeout(() => {
|
|
1363
|
+
iframe.contentWindow.print();
|
|
1364
|
+
setTimeout(() => {
|
|
1365
|
+
if (iframe.parentNode) document.body.removeChild(iframe);
|
|
1366
|
+
}, 60000);
|
|
1367
|
+
}, 250);
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
async function recalculateStats() {
|
|
1371
|
+
if (!currentProjectPath) return;
|
|
1372
|
+
const button = document.getElementById('recalculate-btn');
|
|
1373
|
+
const progressBadge = document.getElementById('backfill-progress');
|
|
1374
|
+
if (button) button.disabled = true;
|
|
1375
|
+
|
|
1376
|
+
try {
|
|
1377
|
+
const response = await fetch(`${API_URL}/api/stats/recalculate`, {
|
|
1378
|
+
method: 'POST',
|
|
1379
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1380
|
+
body: JSON.stringify({ path: currentProjectPath, backfill: true }),
|
|
1381
|
+
});
|
|
1382
|
+
|
|
1383
|
+
if (!response.ok) {
|
|
1384
|
+
throw new Error('Recalculation failed');
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
if (progressBadge) {
|
|
1388
|
+
progressBadge.textContent = '...';
|
|
1389
|
+
progressBadge.classList.remove('hidden');
|
|
1390
|
+
}
|
|
1391
|
+
} catch (error) {
|
|
1392
|
+
console.error('Error recalculating stats:', error);
|
|
1393
|
+
if (button) button.disabled = false;
|
|
1394
|
+
if (progressBadge) progressBadge.classList.add('hidden');
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
window.recalculateStats = recalculateStats;
|
|
1398
|
+
|
|
1399
|
+
function filterScoreTrend(selectedDev) {
|
|
1400
|
+
currentDevFilter = selectedDev;
|
|
1401
|
+
document.querySelectorAll('.dev-filter-btn').forEach(btn => {
|
|
1402
|
+
btn.classList.toggle('active', btn.dataset.dev === selectedDev);
|
|
1403
|
+
});
|
|
1404
|
+
|
|
1405
|
+
const filtered = selectedDev === 'all'
|
|
1406
|
+
? currentStatsReviews
|
|
1407
|
+
: currentStatsReviews.filter(r => r.assignedBy === selectedDev);
|
|
1408
|
+
|
|
1409
|
+
drawScoreTrendChart('stats-score-trend', filtered);
|
|
1410
|
+
}
|
|
1411
|
+
window.filterScoreTrend = filterScoreTrend;
|
|
1412
|
+
|
|
1076
1413
|
function renderMrItem(mr, type) {
|
|
1077
1414
|
const mrPrefix = mr.platform === 'github' ? '#' : '!';
|
|
1078
1415
|
const encodedMrId = encodeURIComponent(String(mr.id ?? ''));
|
|
@@ -1112,7 +1449,7 @@
|
|
|
1112
1449
|
|
|
1113
1450
|
return `
|
|
1114
1451
|
<div class="mr-item-accordion" data-mr-id="${mr.id}">
|
|
1115
|
-
<div class="mr-item-header" onclick="
|
|
1452
|
+
<div class="mr-item-header" onclick="openMrSheet('${encodedMrId}')" role="button" tabindex="0" onkeydown="activateOnKeydown(event)">
|
|
1116
1453
|
<div class="review-status ${type === 'pending-fix' ? 'running' : (type === 'pending-approval' && mr.totalWarnings > 0) ? 'warnings' : 'completed'}"></div>
|
|
1117
1454
|
<div class="mr-info">
|
|
1118
1455
|
<div class="mr-title">
|
|
@@ -1259,10 +1596,16 @@
|
|
|
1259
1596
|
? renderNowLane(queueLanesModel.nowLaneItem)
|
|
1260
1597
|
: `<div class="empty-state">${t('queueLane.emptyNow')}</div>`;
|
|
1261
1598
|
const needsFixContent = queueLanesModel.needsFixItems.length > 0
|
|
1262
|
-
?
|
|
1599
|
+
? renderCollapsibleList(
|
|
1600
|
+
queueLanesModel.needsFixItems.map((mergeRequest) => renderMrItem(mergeRequest, 'pending-fix')),
|
|
1601
|
+
'needs-fix', t
|
|
1602
|
+
)
|
|
1263
1603
|
: `<div class="empty-state">${t('queueLane.emptyNeedsFix')}</div>`;
|
|
1264
1604
|
const readyToApproveContent = queueLanesModel.readyToApproveItems.length > 0
|
|
1265
|
-
?
|
|
1605
|
+
? renderCollapsibleList(
|
|
1606
|
+
queueLanesModel.readyToApproveItems.map((mergeRequest) => renderMrItem(mergeRequest, 'pending-approval')),
|
|
1607
|
+
'ready-to-approve', t
|
|
1608
|
+
)
|
|
1266
1609
|
: `<div class="empty-state">${t('queueLane.emptyReadyToApprove')}</div>`;
|
|
1267
1610
|
|
|
1268
1611
|
return `
|
|
@@ -1323,6 +1666,11 @@
|
|
|
1323
1666
|
pendingFixSection.classList.remove('hidden');
|
|
1324
1667
|
const rankedPendingFix = rankPendingFixForNowLane(currentData.pendingFix);
|
|
1325
1668
|
const queueLanesModel = buildQueueLanesModel(rankedPendingFix, currentData.pendingApproval);
|
|
1669
|
+
|
|
1670
|
+
mrDataStore.clear();
|
|
1671
|
+
if (queueLanesModel.nowLaneItem) mrDataStore.set(queueLanesModel.nowLaneItem.id, { ...queueLanesModel.nowLaneItem, _sheetType: 'pending-fix' });
|
|
1672
|
+
queueLanesModel.needsFixItems.forEach(mr => mrDataStore.set(mr.id, { ...mr, _sheetType: 'pending-fix' }));
|
|
1673
|
+
queueLanesModel.readyToApproveItems.forEach(mr => mrDataStore.set(mr.id, { ...mr, _sheetType: 'pending-approval' }));
|
|
1326
1674
|
sessionMetrics = updatePriorityItemTracking(sessionMetrics, {
|
|
1327
1675
|
nowLaneItemId: queueLanesModel.nowLaneItem?.id ?? null,
|
|
1328
1676
|
pendingFixIds: rankedPendingFix.map((mergeRequest) => String(mergeRequest.id)),
|
|
@@ -1529,6 +1877,26 @@
|
|
|
1529
1877
|
case 'log':
|
|
1530
1878
|
handleLogMessage(message.log);
|
|
1531
1879
|
break;
|
|
1880
|
+
case 'backfill-progress': {
|
|
1881
|
+
const progressBadge = document.getElementById('backfill-progress');
|
|
1882
|
+
if (progressBadge) {
|
|
1883
|
+
progressBadge.textContent = t('stats.backfillProgress', { completed: message.data.completed, total: message.data.total });
|
|
1884
|
+
progressBadge.classList.remove('hidden');
|
|
1885
|
+
}
|
|
1886
|
+
break;
|
|
1887
|
+
}
|
|
1888
|
+
case 'backfill-complete': {
|
|
1889
|
+
const completeBadge = document.getElementById('backfill-progress');
|
|
1890
|
+
const recalcButton = document.getElementById('recalculate-btn');
|
|
1891
|
+
if (completeBadge) {
|
|
1892
|
+
completeBadge.textContent = t('stats.backfillComplete');
|
|
1893
|
+
setTimeout(() => completeBadge.classList.add('hidden'), 3000);
|
|
1894
|
+
}
|
|
1895
|
+
if (recalcButton) recalcButton.disabled = false;
|
|
1896
|
+
fetchProjectStats();
|
|
1897
|
+
fetchTeamInsights();
|
|
1898
|
+
break;
|
|
1899
|
+
}
|
|
1532
1900
|
case 'pong':
|
|
1533
1901
|
break;
|
|
1534
1902
|
}
|
|
@@ -1569,6 +1937,14 @@
|
|
|
1569
1937
|
currentData.activeReviews = data.jobs?.active || [];
|
|
1570
1938
|
currentData.recentReviews = data.jobs?.recent || [];
|
|
1571
1939
|
dispatchReviewNotifications(currentData.activeReviews, currentData.recentReviews);
|
|
1940
|
+
const versionUpdateArea = document.getElementById('version-update-area');
|
|
1941
|
+
if (versionUpdateArea) {
|
|
1942
|
+
versionUpdateArea.innerHTML = renderVersionUpdateArea(
|
|
1943
|
+
{ currentVersion: data.version || '?', updateAvailable: data.updateAvailable || false, latestVersion: data.latestVersion || null },
|
|
1944
|
+
t
|
|
1945
|
+
);
|
|
1946
|
+
if (typeof lucide !== 'undefined') lucide.createIcons();
|
|
1947
|
+
}
|
|
1572
1948
|
if (!wsConnected) updateConnectionStatus('online', 'connection.onlinePolling');
|
|
1573
1949
|
updateUI();
|
|
1574
1950
|
} catch (error) {
|
|
@@ -1762,8 +2138,10 @@
|
|
|
1762
2138
|
fetchReviewFiles();
|
|
1763
2139
|
fetchProjectStats();
|
|
1764
2140
|
fetchMrTracking();
|
|
2141
|
+
fetchTeamInsights();
|
|
1765
2142
|
|
|
1766
2143
|
document.getElementById('stats-section').classList.remove('hidden');
|
|
2144
|
+
document.getElementById('team-section').classList.remove('hidden');
|
|
1767
2145
|
|
|
1768
2146
|
const platformIcon = activePlatform === 'gitlab' ? '<i data-lucide="gitlab"></i> GitLab' : '<i data-lucide="github"></i> GitHub';
|
|
1769
2147
|
info.innerHTML = `
|
|
@@ -1811,16 +2189,41 @@
|
|
|
1811
2189
|
}
|
|
1812
2190
|
}
|
|
1813
2191
|
|
|
1814
|
-
function
|
|
2192
|
+
async function syncServerRepositories() {
|
|
2193
|
+
try {
|
|
2194
|
+
const response = await fetch(`${API_URL}/api/repositories`);
|
|
2195
|
+
const data = await response.json();
|
|
2196
|
+
if (!data.repositories) return;
|
|
2197
|
+
|
|
2198
|
+
const stored = getStoredProjects();
|
|
2199
|
+
for (const repository of data.repositories) {
|
|
2200
|
+
if (repository.enabled && !stored.includes(repository.localPath)) {
|
|
2201
|
+
stored.push(repository.localPath);
|
|
2202
|
+
}
|
|
2203
|
+
}
|
|
2204
|
+
saveProjects(stored);
|
|
2205
|
+
updateProjectSelect();
|
|
2206
|
+
} catch {
|
|
2207
|
+
// Server unreachable — use localStorage only
|
|
2208
|
+
}
|
|
2209
|
+
}
|
|
2210
|
+
|
|
2211
|
+
async function initProjectLoader() {
|
|
2212
|
+
await syncServerRepositories();
|
|
1815
2213
|
updateProjectSelect();
|
|
1816
2214
|
const lastProject = localStorage.getItem(STORAGE_KEY_CURRENT);
|
|
1817
2215
|
if (lastProject) {
|
|
1818
2216
|
loadProjectConfigFromPath(lastProject);
|
|
1819
2217
|
} else {
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
2218
|
+
const storedProjects = getStoredProjects();
|
|
2219
|
+
if (storedProjects.length > 0) {
|
|
2220
|
+
loadProjectConfigFromPath(storedProjects[0]);
|
|
2221
|
+
} else {
|
|
2222
|
+
document.getElementById('recent-reviews').innerHTML =
|
|
2223
|
+
`<div class="empty-state">${t('empty.reviewsNoProject')}</div>`;
|
|
2224
|
+
document.getElementById('project-stats').innerHTML =
|
|
2225
|
+
`<div class="empty-state">${t('empty.statsNoProject')}</div>`;
|
|
2226
|
+
}
|
|
1824
2227
|
}
|
|
1825
2228
|
}
|
|
1826
2229
|
|
|
@@ -1996,6 +2399,12 @@
|
|
|
1996
2399
|
const sectionStats = document.getElementById('i18n-section-stats');
|
|
1997
2400
|
if (sectionStats) sectionStats.textContent = t('section.stats');
|
|
1998
2401
|
|
|
2402
|
+
const recalculateLabel = document.getElementById('recalculate-label');
|
|
2403
|
+
if (recalculateLabel) recalculateLabel.textContent = t('stats.recalculate');
|
|
2404
|
+
|
|
2405
|
+
const sectionTeam = document.getElementById('i18n-section-team');
|
|
2406
|
+
if (sectionTeam) sectionTeam.textContent = t('team.title');
|
|
2407
|
+
|
|
1999
2408
|
const sectionActiveReviews = document.getElementById('i18n-section-active-reviews');
|
|
2000
2409
|
if (sectionActiveReviews) sectionActiveReviews.textContent = t('section.activeReviews');
|
|
2001
2410
|
|
|
@@ -2030,6 +2439,9 @@
|
|
|
2030
2439
|
const emptyPendingApproval = document.getElementById('i18n-empty-pending-approval');
|
|
2031
2440
|
if (emptyPendingApproval) emptyPendingApproval.textContent = t('empty.pendingApproval');
|
|
2032
2441
|
|
|
2442
|
+
const emptyTeam = document.getElementById('i18n-empty-team');
|
|
2443
|
+
if (emptyTeam) emptyTeam.textContent = t('team.noData');
|
|
2444
|
+
|
|
2033
2445
|
const emptyLoading = document.getElementById('i18n-empty-loading');
|
|
2034
2446
|
if (emptyLoading) emptyLoading.textContent = t('status.loading');
|
|
2035
2447
|
|
|
@@ -2055,7 +2467,137 @@
|
|
|
2055
2467
|
updateProjectSelect();
|
|
2056
2468
|
}
|
|
2057
2469
|
|
|
2470
|
+
async function checkForUpdates() {
|
|
2471
|
+
setVersionCheckState('checking', t);
|
|
2472
|
+
try {
|
|
2473
|
+
const response = await fetch(`${API_URL}/api/version/check`);
|
|
2474
|
+
const data = await response.json();
|
|
2475
|
+
const versionUpdateArea = document.getElementById('version-update-area');
|
|
2476
|
+
if (versionUpdateArea) {
|
|
2477
|
+
versionUpdateArea.innerHTML = renderVersionUpdateArea(
|
|
2478
|
+
{ currentVersion: data.currentVersion || '?', updateAvailable: data.updateAvailable || false, latestVersion: data.latestVersion || null },
|
|
2479
|
+
t
|
|
2480
|
+
);
|
|
2481
|
+
if (typeof lucide !== 'undefined') lucide.createIcons();
|
|
2482
|
+
}
|
|
2483
|
+
if (!data.updateAvailable) {
|
|
2484
|
+
showToast(t('version.upToDate'), 'success');
|
|
2485
|
+
}
|
|
2486
|
+
} catch (error) {
|
|
2487
|
+
console.error('Error checking for updates:', error);
|
|
2488
|
+
showToast(t('version.updateFailed'), 'error');
|
|
2489
|
+
} finally {
|
|
2490
|
+
setVersionCheckState('idle', t);
|
|
2491
|
+
}
|
|
2492
|
+
}
|
|
2493
|
+
|
|
2494
|
+
async function triggerVersionUpdate() {
|
|
2495
|
+
setVersionCheckState('updating', t);
|
|
2496
|
+
try {
|
|
2497
|
+
const response = await fetch(`${API_URL}/api/version/update`, { method: 'POST' });
|
|
2498
|
+
const data = await response.json();
|
|
2499
|
+
if (data.status === 'started') {
|
|
2500
|
+
setVersionCheckState('restarting', t);
|
|
2501
|
+
showToast(t('version.restarting'), 'info');
|
|
2502
|
+
setTimeout(() => {
|
|
2503
|
+
const checkInterval = setInterval(async () => {
|
|
2504
|
+
try {
|
|
2505
|
+
const healthResponse = await fetch(`${API_URL}/health`);
|
|
2506
|
+
if (healthResponse.ok) {
|
|
2507
|
+
clearInterval(checkInterval);
|
|
2508
|
+
window.location.reload();
|
|
2509
|
+
}
|
|
2510
|
+
} catch {
|
|
2511
|
+
// Server still restarting, keep polling
|
|
2512
|
+
}
|
|
2513
|
+
}, 2000);
|
|
2514
|
+
setTimeout(() => clearInterval(checkInterval), 60000);
|
|
2515
|
+
}, 3000);
|
|
2516
|
+
} else if (data.status === 'permission-denied') {
|
|
2517
|
+
setVersionCheckState('idle', t);
|
|
2518
|
+
showManualUpdateCommand(data.command);
|
|
2519
|
+
} else {
|
|
2520
|
+
showToast(data.error || t('version.updateFailed'), 'error');
|
|
2521
|
+
setVersionCheckState('idle', t);
|
|
2522
|
+
}
|
|
2523
|
+
} catch (error) {
|
|
2524
|
+
console.error('Error triggering update:', error);
|
|
2525
|
+
showToast(t('version.updateFailed'), 'error');
|
|
2526
|
+
setVersionCheckState('idle', t);
|
|
2527
|
+
}
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2530
|
+
function showManualUpdateCommand(command) {
|
|
2531
|
+
const container = document.getElementById('version-manual-update-container');
|
|
2532
|
+
if (!container) return;
|
|
2533
|
+
|
|
2534
|
+
if (container.children.length > 0) {
|
|
2535
|
+
container.innerHTML = '';
|
|
2536
|
+
return;
|
|
2537
|
+
}
|
|
2538
|
+
|
|
2539
|
+
container.innerHTML = `
|
|
2540
|
+
<div class="version-manual-dropdown">
|
|
2541
|
+
<p>${t('version.permissionDenied')}</p>
|
|
2542
|
+
<div class="version-command-row">
|
|
2543
|
+
<code>${command}</code>
|
|
2544
|
+
<button class="btn btn-icon btn-copy" title="${t('version.copyCommand')}" onclick="copyUpdateCommand('${command}')">
|
|
2545
|
+
<i data-lucide="copy"></i>
|
|
2546
|
+
</button>
|
|
2547
|
+
</div>
|
|
2548
|
+
</div>
|
|
2549
|
+
`;
|
|
2550
|
+
refreshIcons();
|
|
2551
|
+
}
|
|
2552
|
+
|
|
2553
|
+
function copyUpdateCommand(command) {
|
|
2554
|
+
navigator.clipboard.writeText(command).then(() => {
|
|
2555
|
+
showToast(t('version.commandCopied'), 'success');
|
|
2556
|
+
});
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2559
|
+
function openMrSheet(encodedMrId) {
|
|
2560
|
+
const mrId = safeDecodeURIComponent(encodedMrId);
|
|
2561
|
+
const mr = mrDataStore.get(mrId);
|
|
2562
|
+
if (!mr) return;
|
|
2563
|
+
|
|
2564
|
+
const contentEl = document.getElementById('mr-sheet-content');
|
|
2565
|
+
contentEl.innerHTML = renderMrSheetContent(mr, t, mr._sheetType);
|
|
2566
|
+
|
|
2567
|
+
document.getElementById('mr-sheet-overlay').classList.add('open');
|
|
2568
|
+
document.getElementById('mr-sheet').classList.add('open');
|
|
2569
|
+
document.body.style.overflow = 'hidden';
|
|
2570
|
+
|
|
2571
|
+
refreshIcons();
|
|
2572
|
+
|
|
2573
|
+
requestAnimationFrame(() => {
|
|
2574
|
+
if (mr.reviews?.length) {
|
|
2575
|
+
drawScoreTimeline('sheet-score-canvas', mr.reviews);
|
|
2576
|
+
}
|
|
2577
|
+
const totalResolved = (mr.openThreads ?? 0) === 0 ? 1 : 0;
|
|
2578
|
+
drawIssuesBreakdown('sheet-issues-canvas', mr.totalBlocking || 0, mr.totalWarnings || 0, totalResolved);
|
|
2579
|
+
});
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
function closeMrSheet() {
|
|
2583
|
+
document.getElementById('mr-sheet-overlay').classList.remove('open');
|
|
2584
|
+
document.getElementById('mr-sheet').classList.remove('open');
|
|
2585
|
+
document.body.style.overflow = '';
|
|
2586
|
+
logsVisible = false;
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
document.addEventListener('keydown', (e) => {
|
|
2590
|
+
if (e.key === 'Escape') {
|
|
2591
|
+
closeMrSheet();
|
|
2592
|
+
closeDevSheet();
|
|
2593
|
+
}
|
|
2594
|
+
});
|
|
2595
|
+
|
|
2058
2596
|
// Expose functions to HTML onclick handlers
|
|
2597
|
+
window.checkForUpdates = checkForUpdates;
|
|
2598
|
+
window.triggerVersionUpdate = triggerVersionUpdate;
|
|
2599
|
+
window.copyUpdateCommand = copyUpdateCommand;
|
|
2600
|
+
window.toggleCollapsibleList = toggleCollapsibleList;
|
|
2059
2601
|
window.checkClaudeStatus = checkClaudeStatus;
|
|
2060
2602
|
window.toggleLogs = toggleLogs;
|
|
2061
2603
|
window.toggleStats = toggleStats;
|
|
@@ -2079,6 +2621,22 @@
|
|
|
2079
2621
|
window.toggleSection = toggleSection;
|
|
2080
2622
|
window.onUsefulLinkAction = onUsefulLinkAction;
|
|
2081
2623
|
window.activateOnKeydown = activateOnKeydown;
|
|
2624
|
+
window.handleCleanupClick = handleCleanupClick;
|
|
2625
|
+
window.openMrSheet = openMrSheet;
|
|
2626
|
+
window.closeMrSheet = closeMrSheet;
|
|
2627
|
+
window.openDevSheet = openDevSheet;
|
|
2628
|
+
window.closeDevSheet = closeDevSheet;
|
|
2629
|
+
window.generateAiInsights = generateAiInsights;
|
|
2630
|
+
window.exportInsightsPdf = exportInsightsPdf;
|
|
2631
|
+
window.toggleTeamAnalysis = toggleTeamAnalysis;
|
|
2632
|
+
window.toggleTeamSection = toggleTeamSection;
|
|
2633
|
+
window.clearLogs = clearLogs;
|
|
2634
|
+
|
|
2635
|
+
// Init cleanup section
|
|
2636
|
+
const cleanupContent = document.getElementById('cleanup-content');
|
|
2637
|
+
if (cleanupContent) {
|
|
2638
|
+
cleanupContent.innerHTML = renderCleanupSection(14);
|
|
2639
|
+
}
|
|
2082
2640
|
|
|
2083
2641
|
// Init
|
|
2084
2642
|
if (typeof Notification !== 'undefined' && Notification.permission === 'default') {
|
|
@@ -2102,6 +2660,7 @@
|
|
|
2102
2660
|
fetchReviewFiles();
|
|
2103
2661
|
fetchProjectStats();
|
|
2104
2662
|
fetchMrTracking();
|
|
2663
|
+
fetchTeamInsights();
|
|
2105
2664
|
}, 30000);
|
|
2106
2665
|
|
|
2107
2666
|
setInterval(() => {
|