@oalacea/daemon 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +268 -58
  2. package/bin/Dockerfile +158 -16
  3. package/dist/cli/cli.d.ts.map +1 -1
  4. package/dist/cli/cli.js +22 -2
  5. package/dist/cli/cli.js.map +1 -1
  6. package/dist/cli/commands/command.types.d.ts +216 -0
  7. package/dist/cli/commands/command.types.d.ts.map +1 -0
  8. package/dist/cli/commands/command.types.js +64 -0
  9. package/dist/cli/commands/command.types.js.map +1 -0
  10. package/dist/cli/commands/history.command.d.ts +91 -0
  11. package/dist/cli/commands/history.command.d.ts.map +1 -0
  12. package/dist/cli/commands/history.command.js +336 -0
  13. package/dist/cli/commands/history.command.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +14 -3
  15. package/dist/cli/commands/index.d.ts.map +1 -1
  16. package/dist/cli/commands/index.js +7 -0
  17. package/dist/cli/commands/index.js.map +1 -1
  18. package/dist/cli/commands/init.command.d.ts +12 -14
  19. package/dist/cli/commands/init.command.d.ts.map +1 -1
  20. package/dist/cli/commands/init.command.js +278 -144
  21. package/dist/cli/commands/init.command.js.map +1 -1
  22. package/dist/cli/commands/optimize.command.d.ts +110 -0
  23. package/dist/cli/commands/optimize.command.d.ts.map +1 -0
  24. package/dist/cli/commands/optimize.command.js +497 -0
  25. package/dist/cli/commands/optimize.command.js.map +1 -0
  26. package/dist/cli/commands/report.command.d.ts +110 -0
  27. package/dist/cli/commands/report.command.d.ts.map +1 -0
  28. package/dist/cli/commands/report.command.js +532 -0
  29. package/dist/cli/commands/report.command.js.map +1 -0
  30. package/dist/cli/commands/review.command.d.ts +110 -0
  31. package/dist/cli/commands/review.command.d.ts.map +1 -0
  32. package/dist/cli/commands/review.command.js +520 -0
  33. package/dist/cli/commands/review.command.js.map +1 -0
  34. package/dist/cli/commands/score.command.d.ts +47 -0
  35. package/dist/cli/commands/score.command.d.ts.map +1 -0
  36. package/dist/cli/commands/score.command.js +261 -0
  37. package/dist/cli/commands/score.command.js.map +1 -0
  38. package/dist/cli/utils/index.d.ts +10 -0
  39. package/dist/cli/utils/index.d.ts.map +1 -0
  40. package/dist/cli/utils/index.js +10 -0
  41. package/dist/cli/utils/index.js.map +1 -0
  42. package/dist/cli/utils/output.d.ts +192 -0
  43. package/dist/cli/utils/output.d.ts.map +1 -0
  44. package/dist/cli/utils/output.js +411 -0
  45. package/dist/cli/utils/output.js.map +1 -0
  46. package/dist/cli/utils/progress.d.ts +204 -0
  47. package/dist/cli/utils/progress.d.ts.map +1 -0
  48. package/dist/cli/utils/progress.js +396 -0
  49. package/dist/cli/utils/progress.js.map +1 -0
  50. package/dist/core/types/index.d.ts +1 -0
  51. package/dist/core/types/index.d.ts.map +1 -1
  52. package/dist/core/types/project.types.d.ts +3 -3
  53. package/dist/core/types/project.types.d.ts.map +1 -1
  54. package/dist/core/types/scoring.types.d.ts +301 -0
  55. package/dist/core/types/scoring.types.d.ts.map +1 -0
  56. package/dist/core/types/scoring.types.js +8 -0
  57. package/dist/core/types/scoring.types.js.map +1 -0
  58. package/dist/services/detection/framework-detector.d.ts.map +1 -1
  59. package/dist/services/detection/framework-detector.js +74 -5
  60. package/dist/services/detection/framework-detector.js.map +1 -1
  61. package/dist/services/index.d.ts +12 -0
  62. package/dist/services/index.d.ts.map +1 -1
  63. package/dist/services/index.js +14 -0
  64. package/dist/services/index.js.map +1 -1
  65. package/dist/services/optimization/detectors/bug-detector.d.ts +82 -0
  66. package/dist/services/optimization/detectors/bug-detector.d.ts.map +1 -0
  67. package/dist/services/optimization/detectors/bug-detector.js +443 -0
  68. package/dist/services/optimization/detectors/bug-detector.js.map +1 -0
  69. package/dist/services/optimization/detectors/code-smell-detector.d.ts +108 -0
  70. package/dist/services/optimization/detectors/code-smell-detector.d.ts.map +1 -0
  71. package/dist/services/optimization/detectors/code-smell-detector.js +569 -0
  72. package/dist/services/optimization/detectors/code-smell-detector.js.map +1 -0
  73. package/dist/services/optimization/detectors/index.d.ts +7 -0
  74. package/dist/services/optimization/detectors/index.d.ts.map +1 -0
  75. package/dist/services/optimization/detectors/index.js +7 -0
  76. package/dist/services/optimization/detectors/index.js.map +1 -0
  77. package/dist/services/optimization/detectors/perf-detector.d.ts +80 -0
  78. package/dist/services/optimization/detectors/perf-detector.d.ts.map +1 -0
  79. package/dist/services/optimization/detectors/perf-detector.js +451 -0
  80. package/dist/services/optimization/detectors/perf-detector.js.map +1 -0
  81. package/dist/services/optimization/index.d.ts +61 -0
  82. package/dist/services/optimization/index.d.ts.map +1 -0
  83. package/dist/services/optimization/index.js +69 -0
  84. package/dist/services/optimization/index.js.map +1 -0
  85. package/dist/services/optimization/optimization.service.d.ts +65 -0
  86. package/dist/services/optimization/optimization.service.d.ts.map +1 -0
  87. package/dist/services/optimization/optimization.service.js +511 -0
  88. package/dist/services/optimization/optimization.service.js.map +1 -0
  89. package/dist/services/optimization/optimization.types.d.ts +343 -0
  90. package/dist/services/optimization/optimization.types.d.ts.map +1 -0
  91. package/dist/services/optimization/optimization.types.js +8 -0
  92. package/dist/services/optimization/optimization.types.js.map +1 -0
  93. package/dist/services/optimization/optimizers/code-optimizer.d.ts +87 -0
  94. package/dist/services/optimization/optimizers/code-optimizer.d.ts.map +1 -0
  95. package/dist/services/optimization/optimizers/code-optimizer.js +436 -0
  96. package/dist/services/optimization/optimizers/code-optimizer.js.map +1 -0
  97. package/dist/services/optimization/optimizers/index.d.ts +7 -0
  98. package/dist/services/optimization/optimizers/index.d.ts.map +1 -0
  99. package/dist/services/optimization/optimizers/index.js +7 -0
  100. package/dist/services/optimization/optimizers/index.js.map +1 -0
  101. package/dist/services/optimization/optimizers/perf-optimizer.d.ts +64 -0
  102. package/dist/services/optimization/optimizers/perf-optimizer.d.ts.map +1 -0
  103. package/dist/services/optimization/optimizers/perf-optimizer.js +330 -0
  104. package/dist/services/optimization/optimizers/perf-optimizer.js.map +1 -0
  105. package/dist/services/optimization/optimizers/refact-optimizer.d.ts +82 -0
  106. package/dist/services/optimization/optimizers/refact-optimizer.d.ts.map +1 -0
  107. package/dist/services/optimization/optimizers/refact-optimizer.js +354 -0
  108. package/dist/services/optimization/optimizers/refact-optimizer.js.map +1 -0
  109. package/dist/services/optimization/patterns/anti-patterns.d.ts +31 -0
  110. package/dist/services/optimization/patterns/anti-patterns.d.ts.map +1 -0
  111. package/dist/services/optimization/patterns/anti-patterns.js +501 -0
  112. package/dist/services/optimization/patterns/anti-patterns.js.map +1 -0
  113. package/dist/services/optimization/patterns/index.d.ts +5 -0
  114. package/dist/services/optimization/patterns/index.d.ts.map +1 -0
  115. package/dist/services/optimization/patterns/index.js +5 -0
  116. package/dist/services/optimization/patterns/index.js.map +1 -0
  117. package/dist/services/reporting/export/chart.exporter.d.ts +59 -0
  118. package/dist/services/reporting/export/chart.exporter.d.ts.map +1 -0
  119. package/dist/services/reporting/export/chart.exporter.js +350 -0
  120. package/dist/services/reporting/export/chart.exporter.js.map +1 -0
  121. package/dist/services/reporting/export/index.d.ts +9 -0
  122. package/dist/services/reporting/export/index.d.ts.map +1 -0
  123. package/dist/services/reporting/export/index.js +10 -0
  124. package/dist/services/reporting/export/index.js.map +1 -0
  125. package/dist/services/reporting/export/pdf.exporter.d.ts +133 -0
  126. package/dist/services/reporting/export/pdf.exporter.d.ts.map +1 -0
  127. package/dist/services/reporting/export/pdf.exporter.js +270 -0
  128. package/dist/services/reporting/export/pdf.exporter.js.map +1 -0
  129. package/dist/services/reporting/history.service.d.ts +93 -0
  130. package/dist/services/reporting/history.service.d.ts.map +1 -0
  131. package/dist/services/reporting/history.service.js +285 -0
  132. package/dist/services/reporting/history.service.js.map +1 -0
  133. package/dist/services/reporting/index.d.ts +15 -0
  134. package/dist/services/reporting/index.d.ts.map +1 -0
  135. package/dist/services/reporting/index.js +16 -0
  136. package/dist/services/reporting/index.js.map +1 -0
  137. package/dist/services/reporting/report.service.d.ts +102 -0
  138. package/dist/services/reporting/report.service.d.ts.map +1 -0
  139. package/dist/services/reporting/report.service.js +240 -0
  140. package/dist/services/reporting/report.service.js.map +1 -0
  141. package/dist/services/reporting/reporting.types.d.ts +329 -0
  142. package/dist/services/reporting/reporting.types.d.ts.map +1 -0
  143. package/dist/services/reporting/reporting.types.js +8 -0
  144. package/dist/services/reporting/reporting.types.js.map +1 -0
  145. package/dist/services/reporting/templates/html.template.d.ts +81 -0
  146. package/dist/services/reporting/templates/html.template.d.ts.map +1 -0
  147. package/dist/services/reporting/templates/html.template.js +741 -0
  148. package/dist/services/reporting/templates/html.template.js.map +1 -0
  149. package/dist/services/reporting/templates/json.template.d.ts +85 -0
  150. package/dist/services/reporting/templates/json.template.d.ts.map +1 -0
  151. package/dist/services/reporting/templates/json.template.js +308 -0
  152. package/dist/services/reporting/templates/json.template.js.map +1 -0
  153. package/dist/services/reporting/templates/markdown.template.d.ts +69 -0
  154. package/dist/services/reporting/templates/markdown.template.d.ts.map +1 -0
  155. package/dist/services/reporting/templates/markdown.template.js +311 -0
  156. package/dist/services/reporting/templates/markdown.template.js.map +1 -0
  157. package/dist/services/reporting/trend-analyzer.d.ts +73 -0
  158. package/dist/services/reporting/trend-analyzer.d.ts.map +1 -0
  159. package/dist/services/reporting/trend-analyzer.js +291 -0
  160. package/dist/services/reporting/trend-analyzer.js.map +1 -0
  161. package/dist/services/review/analyzers/dependency-analyzer.d.ts +87 -0
  162. package/dist/services/review/analyzers/dependency-analyzer.d.ts.map +1 -0
  163. package/dist/services/review/analyzers/dependency-analyzer.js +458 -0
  164. package/dist/services/review/analyzers/dependency-analyzer.js.map +1 -0
  165. package/dist/services/review/analyzers/index.d.ts +13 -0
  166. package/dist/services/review/analyzers/index.d.ts.map +1 -0
  167. package/dist/services/review/analyzers/index.js +13 -0
  168. package/dist/services/review/analyzers/index.js.map +1 -0
  169. package/dist/services/review/analyzers/nestjs-analyzer.d.ts +210 -0
  170. package/dist/services/review/analyzers/nestjs-analyzer.d.ts.map +1 -0
  171. package/dist/services/review/analyzers/nestjs-analyzer.js +571 -0
  172. package/dist/services/review/analyzers/nestjs-analyzer.js.map +1 -0
  173. package/dist/services/review/analyzers/performance-analyzer.d.ts +91 -0
  174. package/dist/services/review/analyzers/performance-analyzer.d.ts.map +1 -0
  175. package/dist/services/review/analyzers/performance-analyzer.js +589 -0
  176. package/dist/services/review/analyzers/performance-analyzer.js.map +1 -0
  177. package/dist/services/review/analyzers/security-analyzer.d.ts +96 -0
  178. package/dist/services/review/analyzers/security-analyzer.d.ts.map +1 -0
  179. package/dist/services/review/analyzers/security-analyzer.js +512 -0
  180. package/dist/services/review/analyzers/security-analyzer.js.map +1 -0
  181. package/dist/services/review/analyzers/static-analyzer.d.ts +90 -0
  182. package/dist/services/review/analyzers/static-analyzer.d.ts.map +1 -0
  183. package/dist/services/review/analyzers/static-analyzer.js +423 -0
  184. package/dist/services/review/analyzers/static-analyzer.js.map +1 -0
  185. package/dist/services/review/fixers/auto-fixer.d.ts +94 -0
  186. package/dist/services/review/fixers/auto-fixer.d.ts.map +1 -0
  187. package/dist/services/review/fixers/auto-fixer.js +404 -0
  188. package/dist/services/review/fixers/auto-fixer.js.map +1 -0
  189. package/dist/services/review/fixers/index.d.ts +11 -0
  190. package/dist/services/review/fixers/index.d.ts.map +1 -0
  191. package/dist/services/review/fixers/index.js +11 -0
  192. package/dist/services/review/fixers/index.js.map +1 -0
  193. package/dist/services/review/fixers/refactor-suggester.d.ts +100 -0
  194. package/dist/services/review/fixers/refactor-suggester.d.ts.map +1 -0
  195. package/dist/services/review/fixers/refactor-suggester.js +555 -0
  196. package/dist/services/review/fixers/refactor-suggester.js.map +1 -0
  197. package/dist/services/review/fixers/test-generator.d.ts +99 -0
  198. package/dist/services/review/fixers/test-generator.d.ts.map +1 -0
  199. package/dist/services/review/fixers/test-generator.js +458 -0
  200. package/dist/services/review/fixers/test-generator.js.map +1 -0
  201. package/dist/services/review/index.d.ts +14 -0
  202. package/dist/services/review/index.d.ts.map +1 -0
  203. package/dist/services/review/index.js +14 -0
  204. package/dist/services/review/index.js.map +1 -0
  205. package/dist/services/review/reporters/fix-reporter.d.ts +67 -0
  206. package/dist/services/review/reporters/fix-reporter.d.ts.map +1 -0
  207. package/dist/services/review/reporters/fix-reporter.js +437 -0
  208. package/dist/services/review/reporters/fix-reporter.js.map +1 -0
  209. package/dist/services/review/reporters/index.d.ts +10 -0
  210. package/dist/services/review/reporters/index.d.ts.map +1 -0
  211. package/dist/services/review/reporters/index.js +10 -0
  212. package/dist/services/review/reporters/index.js.map +1 -0
  213. package/dist/services/review/reporters/score-reporter.d.ts +84 -0
  214. package/dist/services/review/reporters/score-reporter.d.ts.map +1 -0
  215. package/dist/services/review/reporters/score-reporter.js +560 -0
  216. package/dist/services/review/reporters/score-reporter.js.map +1 -0
  217. package/dist/services/review/review.service.d.ts +129 -0
  218. package/dist/services/review/review.service.d.ts.map +1 -0
  219. package/dist/services/review/review.service.js +396 -0
  220. package/dist/services/review/review.service.js.map +1 -0
  221. package/dist/services/review/review.types.d.ts +443 -0
  222. package/dist/services/review/review.types.d.ts.map +1 -0
  223. package/dist/services/review/review.types.js +11 -0
  224. package/dist/services/review/review.types.js.map +1 -0
  225. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts +53 -0
  226. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts.map +1 -0
  227. package/dist/services/scoring/dimensions/accessibility.analyzer.js +260 -0
  228. package/dist/services/scoring/dimensions/accessibility.analyzer.js.map +1 -0
  229. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts +138 -0
  230. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts.map +1 -0
  231. package/dist/services/scoring/dimensions/backend-logic.analyzer.js +713 -0
  232. package/dist/services/scoring/dimensions/backend-logic.analyzer.js.map +1 -0
  233. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts +142 -0
  234. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts.map +1 -0
  235. package/dist/services/scoring/dimensions/business-logic.analyzer.js +747 -0
  236. package/dist/services/scoring/dimensions/business-logic.analyzer.js.map +1 -0
  237. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts +142 -0
  238. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts.map +1 -0
  239. package/dist/services/scoring/dimensions/code-quality.analyzer.js +685 -0
  240. package/dist/services/scoring/dimensions/code-quality.analyzer.js.map +1 -0
  241. package/dist/services/scoring/dimensions/index.d.ts +18 -0
  242. package/dist/services/scoring/dimensions/index.d.ts.map +1 -0
  243. package/dist/services/scoring/dimensions/index.js +27 -0
  244. package/dist/services/scoring/dimensions/index.js.map +1 -0
  245. package/dist/services/scoring/dimensions/performance.analyzer.d.ts +125 -0
  246. package/dist/services/scoring/dimensions/performance.analyzer.d.ts.map +1 -0
  247. package/dist/services/scoring/dimensions/performance.analyzer.js +615 -0
  248. package/dist/services/scoring/dimensions/performance.analyzer.js.map +1 -0
  249. package/dist/services/scoring/dimensions/security.analyzer.d.ts +53 -0
  250. package/dist/services/scoring/dimensions/security.analyzer.d.ts.map +1 -0
  251. package/dist/services/scoring/dimensions/security.analyzer.js +327 -0
  252. package/dist/services/scoring/dimensions/security.analyzer.js.map +1 -0
  253. package/dist/services/scoring/dimensions/seo.analyzer.d.ts +77 -0
  254. package/dist/services/scoring/dimensions/seo.analyzer.d.ts.map +1 -0
  255. package/dist/services/scoring/dimensions/seo.analyzer.js +502 -0
  256. package/dist/services/scoring/dimensions/seo.analyzer.js.map +1 -0
  257. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts +106 -0
  258. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts.map +1 -0
  259. package/dist/services/scoring/dimensions/test-coverage.analyzer.js +496 -0
  260. package/dist/services/scoring/dimensions/test-coverage.analyzer.js.map +1 -0
  261. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts +126 -0
  262. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts.map +1 -0
  263. package/dist/services/scoring/dimensions/ui-ux.analyzer.js +665 -0
  264. package/dist/services/scoring/dimensions/ui-ux.analyzer.js.map +1 -0
  265. package/dist/services/scoring/index.d.ts +10 -0
  266. package/dist/services/scoring/index.d.ts.map +1 -0
  267. package/dist/services/scoring/index.js +10 -0
  268. package/dist/services/scoring/index.js.map +1 -0
  269. package/dist/services/scoring/scoring-service.d.ts +222 -0
  270. package/dist/services/scoring/scoring-service.d.ts.map +1 -0
  271. package/dist/services/scoring/scoring-service.js +636 -0
  272. package/dist/services/scoring/scoring-service.js.map +1 -0
  273. package/package.json +11 -3
  274. package/templates/README.md +183 -0
  275. package/templates/nestjs/controller.spec.ts +203 -0
  276. package/templates/nestjs/e2e/api.e2e-spec.ts +451 -0
  277. package/templates/nestjs/e2e/auth.e2e-spec.ts +533 -0
  278. package/templates/nestjs/fixtures/test-module.ts +311 -0
  279. package/templates/nestjs/guard.spec.ts +314 -0
  280. package/templates/nestjs/interceptor.spec.ts +458 -0
  281. package/templates/nestjs/module.spec.ts +173 -0
  282. package/templates/nestjs/pipe.spec.ts +474 -0
  283. package/templates/nestjs/service.spec.ts +296 -0
  284. package/templates/rust/Cargo.toml +72 -0
  285. package/templates/rust/actix-controller.test.rs +114 -0
  286. package/templates/rust/axum-handler.test.rs +117 -0
  287. package/templates/rust/integration.test.rs +63 -0
  288. package/templates/rust/rocket-route.test.rs +106 -0
  289. package/templates/rust/unit.test.rs +38 -0
@@ -0,0 +1,560 @@
1
+ /**
2
+ * Score Reporter
3
+ *
4
+ * Génération de rapports de score:
5
+ * - Calcul du score de qualité du projet
6
+ * - Comparaison avec le scan précédent
7
+ * - Mise en évidence des améliorations
8
+ * - Export en plusieurs formats (JSON, HTML, Markdown)
9
+ *
10
+ * @module services/review/reporters/score-reporter
11
+ */
12
+ import { writeFile, mkdir, readFile } from 'node:fs/promises';
13
+ import { join, dirname } from 'node:path';
14
+ import { existsSync } from 'node:fs';
15
+ import { createHash } from 'node:crypto';
16
+ import { createLogger } from '../../../shared/utils/logger.js';
17
+ /**
18
+ * Poids des catégories pour le score global
19
+ */
20
+ const CATEGORY_WEIGHTS = {
21
+ static: 0.25,
22
+ security: 0.30,
23
+ dependency: 0.15,
24
+ performance: 0.15,
25
+ testing: 0.10,
26
+ codeQuality: 0.05,
27
+ };
28
+ /**
29
+ * Score maximum par catégorie
30
+ */
31
+ const MAX_SCORE = 100;
32
+ /**
33
+ * Reporter de score
34
+ */
35
+ export class ScoreReporter {
36
+ logger;
37
+ previousScores = new Map();
38
+ constructor() {
39
+ this.logger = createLogger('ScoreReporter');
40
+ }
41
+ /**
42
+ * Génère un rapport de score à partir d'un résultat de review
43
+ *
44
+ * @param result - Résultat de la review
45
+ * @param options - Options de génération
46
+ */
47
+ async generateReport(result, options) {
48
+ this.logger.info(`Generating ${options.format} score report`);
49
+ // Charger le score précédent pour comparaison
50
+ if (options.showDelta) {
51
+ await this.loadPreviousScore(result.projectPath);
52
+ }
53
+ switch (options.format) {
54
+ case 'json':
55
+ await this.generateJsonReport(result, options);
56
+ break;
57
+ case 'html':
58
+ await this.generateHtmlReport(result, options);
59
+ break;
60
+ case 'markdown':
61
+ await this.generateMarkdownReport(result, options);
62
+ break;
63
+ case 'console':
64
+ this.generateConsoleReport(result, options);
65
+ break;
66
+ }
67
+ // Sauvegarder le score pour la prochaine fois
68
+ await this.saveScore(result);
69
+ }
70
+ /**
71
+ * Génère un rapport JSON
72
+ */
73
+ async generateJsonReport(result, options) {
74
+ const outputPath = options.outputPath ?? join(result.projectPath, 'review-score.json');
75
+ const report = {
76
+ projectPath: result.projectPath,
77
+ timestamp: result.timestamp,
78
+ duration: result.duration,
79
+ score: result.score,
80
+ summary: result.summary,
81
+ issues: result.issues,
82
+ fixes: result.fixes,
83
+ suggestions: options.includeSuggestions ? result.suggestions : [],
84
+ coverage: result.coverage,
85
+ dependencies: result.dependencies,
86
+ performance: result.performance,
87
+ };
88
+ await this.ensureDirectoryExists(outputPath);
89
+ await writeFile(outputPath, JSON.stringify(report, null, 2), 'utf-8');
90
+ this.logger.info(`JSON report saved to: ${outputPath}`);
91
+ }
92
+ /**
93
+ * Génère un rapport HTML
94
+ */
95
+ async generateHtmlReport(result, options) {
96
+ const outputPath = options.outputPath ?? join(result.projectPath, 'review-score.html');
97
+ const html = this.generateHtmlContent(result, options);
98
+ await this.ensureDirectoryExists(outputPath);
99
+ await writeFile(outputPath, html, 'utf-8');
100
+ this.logger.info(`HTML report saved to: ${outputPath}`);
101
+ }
102
+ /**
103
+ * Génère un rapport Markdown
104
+ */
105
+ async generateMarkdownReport(result, options) {
106
+ const outputPath = options.outputPath ?? join(result.projectPath, 'REVIEW-SCORE.md');
107
+ const markdown = this.generateMarkdownContent(result, options);
108
+ await this.ensureDirectoryExists(outputPath);
109
+ await writeFile(outputPath, markdown, 'utf-8');
110
+ this.logger.info(`Markdown report saved to: ${outputPath}`);
111
+ }
112
+ /**
113
+ * Génère un rapport console
114
+ */
115
+ generateConsoleReport(result, options) {
116
+ const { score, summary, issues } = result;
117
+ const delta = score.delta ?? 0;
118
+ const deltaStr = delta > 0 ? ` (+${delta})` : delta < 0 ? ` (${delta})` : '';
119
+ console.log('\n╔════════════════════════════════════════════════════════════╗');
120
+ console.log('║ CODE REVIEW & QUALITY REPORT ║');
121
+ console.log('╚════════════════════════════════════════════════════════════╝\n');
122
+ console.log(`Project: ${result.projectPath}`);
123
+ console.log(`Date: ${result.timestamp.toISOString()}`);
124
+ console.log(`Duration: ${result.duration}ms\n`);
125
+ // Score global
126
+ const scoreColor = score.overall >= 80 ? '🟢' : score.overall >= 60 ? '🟡' : '🔴';
127
+ console.log(`${scoreColor} Overall Score: ${score.overall}/100${deltaStr}\n`);
128
+ // Scores par catégorie
129
+ console.log('Category Scores:');
130
+ console.log('─────────────────────────────────────────────────────────────');
131
+ this.printCategoryScore('Static Analysis', score.categories.static);
132
+ this.printCategoryScore('Security', score.categories.security);
133
+ this.printCategoryScore('Dependencies', score.categories.dependency);
134
+ this.printCategoryScore('Performance', score.categories.performance);
135
+ this.printCategoryScore('Testing', score.categories.testing);
136
+ this.printCategoryScore('Code Quality', score.categories.codeQuality);
137
+ console.log('─────────────────────────────────────────────────────────────\n');
138
+ // Résumé
139
+ console.log(`Total Issues: ${summary.totalIssues}`);
140
+ console.log(`Fixable: ${summary.fixableIssues} | Fixed: ${summary.fixedIssues}`);
141
+ console.log(`Suggestions: ${summary.suggestions}\n`);
142
+ // Issues par sévérité
143
+ console.log('Issues by Severity:');
144
+ console.log(` 🔴 Critical: ${score.issueCounts.critical}`);
145
+ console.log(` 🟠 High: ${score.issueCounts.high}`);
146
+ console.log(` 🟡 Medium: ${score.issueCounts.medium}`);
147
+ console.log(` 🟢 Low: ${score.issueCounts.low}`);
148
+ console.log(` ℹ️ Info: ${score.issueCounts.info}\n`);
149
+ // Top issues si verbose
150
+ if (options.verbosity === 'detailed') {
151
+ const topIssues = issues.slice(0, 10);
152
+ console.log('Top Issues:');
153
+ console.log('─────────────────────────────────────────────────────────────');
154
+ for (const issue of topIssues) {
155
+ const icon = this.getSeverityIcon(issue.severity);
156
+ const file = issue.location.file.replace(result.projectPath, '');
157
+ console.log(`${icon} [${issue.severity.toUpperCase()}] ${file}:${issue.location.line}`);
158
+ console.log(` ${issue.description}`);
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Affiche le score d'une catégorie
164
+ */
165
+ printCategoryScore(name, score) {
166
+ const bar = '█'.repeat(Math.round(score / 10));
167
+ const empty = '░'.repeat(10 - Math.round(score / 10));
168
+ const color = score >= 80 ? '\x1b[32m' : score >= 60 ? '\x1b[33m' : '\x1b[31m';
169
+ const reset = '\x1b[0m';
170
+ console.log(` ${name.padEnd(20)} ${color}${bar}${empty}${reset} ${score}/100`);
171
+ }
172
+ /**
173
+ * Génère le contenu HTML du rapport
174
+ */
175
+ generateHtmlContent(result, options) {
176
+ const { score, issues } = result;
177
+ // Grader le score
178
+ const grade = score.overall >= 90 ? 'A' : score.overall >= 80 ? 'B' : score.overall >= 70 ? 'C' : score.overall >= 60 ? 'D' : 'F';
179
+ const gradeColor = grade === 'A' ? '#10b981' : grade === 'B' ? '#3b82f6' : grade === 'C' ? '#f59e0b' : grade === 'D' ? '#f97316' : '#ef4444';
180
+ return `<!DOCTYPE html>
181
+ <html lang="en">
182
+ <head>
183
+ <meta charset="UTF-8">
184
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
185
+ <title>Code Review Report - ${result.projectPath}</title>
186
+ <style>
187
+ * { margin: 0; padding: 0; box-sizing: border-box; }
188
+ body {
189
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
190
+ background: #0f172a;
191
+ color: #e2e8f0;
192
+ line-height: 1.6;
193
+ }
194
+ .container { max-width: 1200px; margin: 0 auto; padding: 2rem; }
195
+ .header {
196
+ text-align: center;
197
+ padding: 2rem;
198
+ background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
199
+ border-radius: 1rem;
200
+ margin-bottom: 2rem;
201
+ }
202
+ .score-circle {
203
+ width: 150px;
204
+ height: 150px;
205
+ border-radius: 50%;
206
+ background: ${gradeColor};
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: center;
210
+ margin: 1rem auto;
211
+ font-size: 3rem;
212
+ font-weight: bold;
213
+ box-shadow: 0 0 30px ${gradeColor}40;
214
+ }
215
+ .grade {
216
+ position: absolute;
217
+ font-size: 1.5rem;
218
+ background: rgba(0,0,0,0.3);
219
+ padding: 0.5rem 1rem;
220
+ border-radius: 1rem;
221
+ }
222
+ .categories {
223
+ display: grid;
224
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
225
+ gap: 1rem;
226
+ margin-bottom: 2rem;
227
+ }
228
+ .category {
229
+ background: #1e293b;
230
+ padding: 1.5rem;
231
+ border-radius: 0.75rem;
232
+ }
233
+ .category-name { font-size: 0.875rem; color: #94a3b8; margin-bottom: 0.5rem; }
234
+ .progress-bar {
235
+ height: 8px;
236
+ background: #334155;
237
+ border-radius: 4px;
238
+ overflow: hidden;
239
+ margin-top: 0.5rem;
240
+ }
241
+ .progress-fill {
242
+ height: 100%;
243
+ background: linear-gradient(90deg, #3b82f6, #8b5cf6);
244
+ transition: width 0.3s;
245
+ }
246
+ .issues {
247
+ background: #1e293b;
248
+ border-radius: 0.75rem;
249
+ padding: 1.5rem;
250
+ margin-bottom: 2rem;
251
+ }
252
+ .issue-item {
253
+ padding: 1rem;
254
+ background: #0f172a;
255
+ border-radius: 0.5rem;
256
+ margin-bottom: 0.5rem;
257
+ border-left: 3px solid;
258
+ }
259
+ .issue-critical { border-color: #ef4444; }
260
+ .issue-high { border-color: #f97316; }
261
+ .issue-medium { border-color: #f59e0b; }
262
+ .issue-low { border-color: #22c55e; }
263
+ .severity-badge {
264
+ display: inline-block;
265
+ padding: 0.25rem 0.5rem;
266
+ border-radius: 0.25rem;
267
+ font-size: 0.75rem;
268
+ margin-right: 0.5rem;
269
+ }
270
+ .sev-critical { background: #ef444420; color: #ef4444; }
271
+ .sev-high { background: #f9731620; color: #f97316; }
272
+ .sev-medium { background: #f59e0b20; color: #f59e0b; }
273
+ .sev-low { background: #22c55e20; color: #22c55e; }
274
+ .stats {
275
+ display: grid;
276
+ grid-template-columns: repeat(4, 1fr);
277
+ gap: 1rem;
278
+ margin-bottom: 2rem;
279
+ }
280
+ .stat-card {
281
+ background: #1e293b;
282
+ padding: 1.5rem;
283
+ border-radius: 0.75rem;
284
+ text-align: center;
285
+ }
286
+ .stat-value { font-size: 2rem; font-weight: bold; }
287
+ .stat-label { font-size: 0.875rem; color: #94a3b8; }
288
+ </style>
289
+ </head>
290
+ <body>
291
+ <div class="container">
292
+ <div class="header">
293
+ <h1>Code Review Report</h1>
294
+ <p style="opacity: 0.8">${result.projectPath}</p>
295
+ <p style="opacity: 0.6; font-size: 0.875rem">${result.timestamp.toLocaleString()}</p>
296
+ <div style="position: relative; display: inline-block;">
297
+ <div class="score-circle">${score.overall}</div>
298
+ <div class="grade">${grade}</div>
299
+ </div>
300
+ <p style="margin-top: 1rem;">Overall Quality Score</p>
301
+ </div>
302
+
303
+ <div class="stats">
304
+ <div class="stat-card">
305
+ <div class="stat-value">${result.summary.totalIssues}</div>
306
+ <div class="stat-label">Total Issues</div>
307
+ </div>
308
+ <div class="stat-card">
309
+ <div class="stat-value">${result.summary.fixableIssues}</div>
310
+ <div class="stat-label">Fixable Issues</div>
311
+ </div>
312
+ <div class="stat-card">
313
+ <div class="stat-value">${result.summary.fixedIssues}</div>
314
+ <div class="stat-label">Issues Fixed</div>
315
+ </div>
316
+ <div class="stat-card">
317
+ <div class="stat-value">${(result.duration / 1000).toFixed(1)}s</div>
318
+ <div class="stat-label">Analysis Time</div>
319
+ </div>
320
+ </div>
321
+
322
+ <div class="categories">
323
+ ${this.renderCategory('Static Analysis', score.categories.static)}
324
+ ${this.renderCategory('Security', score.categories.security)}
325
+ ${this.renderCategory('Dependencies', score.categories.dependency)}
326
+ ${this.renderCategory('Performance', score.categories.performance)}
327
+ ${this.renderCategory('Testing', score.categories.testing)}
328
+ ${this.renderCategory('Code Quality', score.categories.codeQuality)}
329
+ </div>
330
+
331
+ ${options.verbosity !== 'summary' ? `
332
+ <div class="issues">
333
+ <h2 style="margin-bottom: 1rem;">Issues by Severity</h2>
334
+ <div style="display: flex; gap: 1rem; margin-bottom: 1rem;">
335
+ <span class="severity-badge sev-critical">🔴 Critical: ${score.issueCounts.critical}</span>
336
+ <span class="severity-badge sev-high">🟠 High: ${score.issueCounts.high}</span>
337
+ <span class="severity-badge sev-medium">🟡 Medium: ${score.issueCounts.medium}</span>
338
+ <span class="severity-badge sev-low">🟢 Low: ${score.issueCounts.low}</span>
339
+ </div>
340
+ ${issues.slice(0, 50).map(issue => `
341
+ <div class="issue-item issue-${issue.severity}">
342
+ <span class="severity-badge sev-${issue.severity}">${issue.severity.toUpperCase()}</span>
343
+ <strong>${issue.description}</strong>
344
+ <p style="color: #94a3b8; font-size: 0.875rem; margin-top: 0.25rem;">
345
+ ${issue.location.file.replace(result.projectPath, '')}:${issue.location.line}
346
+ </p>
347
+ </div>
348
+ `).join('')}
349
+ </div>
350
+ ` : ''}
351
+ </div>
352
+ </body>
353
+ </html>`;
354
+ }
355
+ /**
356
+ * Rendu d'une catégorie pour HTML
357
+ */
358
+ renderCategory(name, score) {
359
+ const color = score >= 80 ? '#10b981' : score >= 60 ? '#3b82f6' : score >= 40 ? '#f59e0b' : '#ef4444';
360
+ return `
361
+ <div class="category">
362
+ <div class="category-name">${name}</div>
363
+ <div style="font-size: 1.5rem; font-weight: bold;">${score}/100</div>
364
+ <div class="progress-bar">
365
+ <div class="progress-fill" style="width: ${score}%; background: ${color};"></div>
366
+ </div>
367
+ </div>`;
368
+ }
369
+ /**
370
+ * Génère le contenu Markdown du rapport
371
+ */
372
+ generateMarkdownContent(result, options) {
373
+ const { score, issues } = result;
374
+ const grade = score.overall >= 90 ? 'A' : score.overall >= 80 ? 'B' : score.overall >= 70 ? 'C' : score.overall >= 60 ? 'D' : 'F';
375
+ let md = `# Code Review Report
376
+
377
+ **Project:** ${result.projectPath}
378
+ **Date:** ${result.timestamp.toLocaleString()}
379
+ **Duration:** ${(result.duration / 1000).toFixed(1)}s
380
+
381
+ ---
382
+
383
+ ## Overall Score: ${score.overall}/100 (Grade: ${grade})
384
+
385
+ `;
386
+ // Scores par catégorie
387
+ md += `### Category Scores\n\n`;
388
+ md += `| Category | Score |\n`;
389
+ md += `|----------|-------|\n`;
390
+ md += `| Static Analysis | ${score.categories.static}/100 |\n`;
391
+ md += `| Security | ${score.categories.security}/100 |\n`;
392
+ md += `| Dependencies | ${score.categories.dependency}/100 |\n`;
393
+ md += `| Performance | ${score.categories.performance}/100 |\n`;
394
+ md += `| Testing | ${score.categories.testing}/100 |\n`;
395
+ md += `| Code Quality | ${score.categories.codeQuality}/100 |\n\n`;
396
+ // Résumé
397
+ md += `## Summary\n\n`;
398
+ md += `- **Total Issues:** ${result.summary.totalIssues}\n`;
399
+ md += `- **Fixable Issues:** ${result.summary.fixableIssues}\n`;
400
+ md += `- **Issues Fixed:** ${result.summary.fixedIssues}\n`;
401
+ md += `- **Suggestions:** ${result.summary.suggestions}\n\n`;
402
+ // Issues par sévérité
403
+ md += `### Issues by Severity\n\n`;
404
+ md += `- 🔴 **Critical:** ${score.issueCounts.critical}\n`;
405
+ md += `- 🟠 **High:** ${score.issueCounts.high}\n`;
406
+ md += `- 🟡 **Medium:** ${score.issueCounts.medium}\n`;
407
+ md += `- 🟢 **Low:** ${score.issueCounts.low}\n`;
408
+ md += `- ℹ️ **Info:** ${score.issueCounts.info}\n\n`;
409
+ // Top issues
410
+ if (options.verbosity === 'detailed' && issues.length > 0) {
411
+ md += `## Top Issues\n\n`;
412
+ for (const issue of issues.slice(0, 20)) {
413
+ const icon = this.getSeverityIcon(issue.severity);
414
+ md += `### ${icon} ${issue.description}\n\n`;
415
+ md += `**Location:** \`${issue.location.file.replace(result.projectPath, '')}:${issue.location.line}\`\n`;
416
+ md += `**Severity:** ${issue.severity.toUpperCase()}\n`;
417
+ if (issue.fixable) {
418
+ md += `**Fixable:** Yes (Effort: ${issue.effort}/10)\n`;
419
+ }
420
+ md += `\n`;
421
+ }
422
+ }
423
+ md += `\n---\n*Generated by Daemon v0.7.0*`;
424
+ return md;
425
+ }
426
+ /**
427
+ * Retourne l'icône pour une sévérité
428
+ */
429
+ getSeverityIcon(severity) {
430
+ switch (severity) {
431
+ case 'critical':
432
+ return '🔴';
433
+ case 'high':
434
+ return '🟠';
435
+ case 'medium':
436
+ return '🟡';
437
+ case 'low':
438
+ return '🟢';
439
+ default:
440
+ return 'ℹ️';
441
+ }
442
+ }
443
+ /**
444
+ * Calcule le score du projet à partir des issues
445
+ */
446
+ calculateScore(issues, previousScore) {
447
+ // Calculer les scores par catégorie
448
+ const categories = {
449
+ static: this.calculateCategoryScore(issues, 'static'),
450
+ security: this.calculateCategoryScore(issues, 'security'),
451
+ dependency: this.calculateCategoryScore(issues, 'dependency'),
452
+ performance: this.calculateCategoryScore(issues, 'performance'),
453
+ testing: this.calculateCategoryScore(issues, 'testing'),
454
+ codeQuality: this.calculateCategoryScore(issues, 'code-quality'),
455
+ documentation: this.calculateCategoryScore(issues, 'documentation'),
456
+ };
457
+ // Score pondéré
458
+ const overall = Math.round(categories.static * CATEGORY_WEIGHTS.static +
459
+ categories.security * CATEGORY_WEIGHTS.security +
460
+ categories.dependency * CATEGORY_WEIGHTS.dependency +
461
+ categories.performance * CATEGORY_WEIGHTS.performance +
462
+ categories.testing * CATEGORY_WEIGHTS.testing +
463
+ categories.codeQuality * CATEGORY_WEIGHTS.codeQuality);
464
+ // Compter les issues par sévérité
465
+ const issueCounts = {
466
+ critical: issues.filter((i) => i.severity === 'critical').length,
467
+ high: issues.filter((i) => i.severity === 'high').length,
468
+ medium: issues.filter((i) => i.severity === 'medium').length,
469
+ low: issues.filter((i) => i.severity === 'low').length,
470
+ info: issues.filter((i) => i.severity === 'info').length,
471
+ };
472
+ // Delta avec le score précédent
473
+ const delta = previousScore ? overall - previousScore.overall : undefined;
474
+ return {
475
+ overall,
476
+ categories,
477
+ delta,
478
+ issueCounts,
479
+ };
480
+ }
481
+ /**
482
+ * Calcule le score pour une catégorie spécifique
483
+ */
484
+ calculateCategoryScore(issues, category) {
485
+ const categoryIssues = issues.filter((i) => i.category === category);
486
+ if (categoryIssues.length === 0) {
487
+ return 100; // Pas d'issues = score parfait
488
+ }
489
+ // Calculer les pénalités par sévérité
490
+ const penalties = {
491
+ critical: 25,
492
+ high: 15,
493
+ medium: 8,
494
+ low: 3,
495
+ info: 1,
496
+ };
497
+ let totalPenalty = 0;
498
+ for (const issue of categoryIssues) {
499
+ totalPenalty += penalties[issue.severity] ?? 0;
500
+ }
501
+ return Math.max(0, MAX_SCORE - totalPenalty);
502
+ }
503
+ /**
504
+ * Sauvegarde le score pour comparaison future
505
+ */
506
+ async saveScore(result) {
507
+ const cachePath = join(result.projectPath, '.daemon', 'review-cache.json');
508
+ await this.ensureDirectoryExists(cachePath);
509
+ let cache = {};
510
+ try {
511
+ if (existsSync(cachePath)) {
512
+ const content = await readFile(cachePath, 'utf-8');
513
+ cache = JSON.parse(content);
514
+ }
515
+ }
516
+ catch {
517
+ // Cache invalide, créer nouveau
518
+ }
519
+ // Créer un hash du contenu pour détecter les changements
520
+ const contentHash = createHash('sha256')
521
+ .update(JSON.stringify(result.issues.map((i) => ({ id: i.id, description: i.description }))))
522
+ .digest('hex');
523
+ cache[result.projectPath] = {
524
+ score: result.score,
525
+ timestamp: result.timestamp,
526
+ hash: contentHash,
527
+ };
528
+ await writeFile(cachePath, JSON.stringify(cache, null, 2), 'utf-8');
529
+ }
530
+ /**
531
+ * Charge le score précédent pour comparaison
532
+ */
533
+ async loadPreviousScore(projectPath) {
534
+ const cachePath = join(projectPath, '.daemon', 'review-cache.json');
535
+ try {
536
+ const content = await readFile(cachePath, 'utf-8');
537
+ const cache = JSON.parse(content);
538
+ const previous = cache[projectPath];
539
+ if (previous) {
540
+ this.previousScores.set(projectPath, previous);
541
+ }
542
+ }
543
+ catch {
544
+ // Pas de cache précédent
545
+ }
546
+ }
547
+ /**
548
+ * S'assure que le répertoire existe
549
+ */
550
+ async ensureDirectoryExists(filePath) {
551
+ const dir = dirname(filePath);
552
+ try {
553
+ await mkdir(dir, { recursive: true });
554
+ }
555
+ catch {
556
+ // Peut exister déjà
557
+ }
558
+ }
559
+ }
560
+ //# sourceMappingURL=score-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-reporter.js","sourceRoot":"","sources":["../../../../src/services/review/reporters/score-reporter.ts"],"names":[],"mappings":"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"}