tutanus 0.12.2 → 0.12.4

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 (309) hide show
  1. package/README.md +7 -7
  2. package/dist/analysts/converters/converter-base.js.map +1 -1
  3. package/dist/analysts/converters/engines/converter-gha-to-gitlab.js.map +1 -1
  4. package/dist/analysts/converters/index.js.map +1 -1
  5. package/dist/analysts/corrections/map-reversion.js +2 -2
  6. package/dist/analysts/corrections/map-reversion.js.map +1 -1
  7. package/dist/analysts/corrections/pruning.js +3 -3
  8. package/dist/analysts/corrections/pruning.js.map +1 -1
  9. package/dist/analysts/detectors/detector-recommendation-architecture.js +2 -2
  10. package/dist/analysts/detectors/detector-recommendation-architecture.js.map +1 -1
  11. package/dist/analysts/github-actions/detectors/org-verified.js.map +1 -1
  12. package/dist/analysts/github-actions/reports/generator-report-github-actions.js +4 -4
  13. package/dist/analysts/github-actions/reports/generator-report-github-actions.js.map +1 -1
  14. package/dist/analysts/js-ts/detectors/detector-context-smart.js +10 -10
  15. package/dist/analysts/js-ts/detectors/detector-context-smart.js.map +1 -1
  16. package/dist/analysts/js-ts/detectors/detector-types-unsafe.js +3 -3
  17. package/dist/analysts/js-ts/detectors/detector-types-unsafe.js.map +1 -1
  18. package/dist/analysts/plugins/detector-documentation.js.map +1 -1
  19. package/dist/analysts/plugins/index.js.map +1 -1
  20. package/dist/analysts/scorers/scorer.js +67 -67
  21. package/dist/analysts/scorers/scorer.js.map +1 -1
  22. package/dist/app/github/app/repo-downloader.d.ts +2 -0
  23. package/dist/app/github/app/repo-downloader.d.ts.map +1 -1
  24. package/dist/app/github/app/repo-downloader.js +2 -2
  25. package/dist/app/github/app/repo-downloader.js.map +1 -1
  26. package/dist/app/github/jobs/auto-fix-job.d.ts.map +1 -1
  27. package/dist/app/github/jobs/auto-fix-job.js +19 -3
  28. package/dist/app/github/jobs/auto-fix-job.js.map +1 -1
  29. package/dist/app/github/push-analysis/push-analysis-service.d.ts.map +1 -1
  30. package/dist/app/github/push-analysis/push-analysis-service.js +19 -7
  31. package/dist/app/github/push-analysis/push-analysis-service.js.map +1 -1
  32. package/dist/app/github/push-analysis/push-report.js +2 -2
  33. package/dist/app/github/push-analysis/push-report.js.map +1 -1
  34. package/dist/bin/index.d.ts.map +1 -1
  35. package/dist/bin/index.js +5 -0
  36. package/dist/bin/index.js.map +1 -1
  37. package/dist/cli/commands/command-azure.js +1 -1
  38. package/dist/cli/commands/command-azure.js.map +1 -1
  39. package/dist/cli/commands/command-circleci.js +1 -1
  40. package/dist/cli/commands/command-circleci.js.map +1 -1
  41. package/dist/cli/commands/command-convert.js.map +1 -1
  42. package/dist/cli/commands/command-github-actions.js +1 -1
  43. package/dist/cli/commands/command-github-actions.js.map +1 -1
  44. package/dist/cli/commands/command-gitlab-ci.js +1 -1
  45. package/dist/cli/commands/command-gitlab-ci.js.map +1 -1
  46. package/dist/cli/commands/command-jenkins.js +1 -1
  47. package/dist/cli/commands/command-jenkins.js.map +1 -1
  48. package/dist/cli/diagnostic/exporters/compliance-exporter.js +2 -2
  49. package/dist/cli/diagnostic/exporters/compliance-exporter.js.map +1 -1
  50. package/dist/cli/diagnostic/exporters/markdown-exporter.js +7 -7
  51. package/dist/cli/diagnostic/exporters/markdown-exporter.js.map +1 -1
  52. package/dist/cli/diagnostic/handlers/archetype-handler.js.map +1 -1
  53. package/dist/cli/diagnostic/handlers/guardian-handler.js.map +1 -1
  54. package/dist/cli/diagnostic/processing-diagnostic.d.ts.map +1 -1
  55. package/dist/cli/diagnostic/processing-diagnostic.js +2 -3
  56. package/dist/cli/diagnostic/processing-diagnostic.js.map +1 -1
  57. package/dist/core/config/auto/fix-config.js.map +1 -1
  58. package/dist/core/execution/executor.js +4 -4
  59. package/dist/core/execution/executor.js.map +1 -1
  60. package/dist/core/execution/inquisitor.js +6 -6
  61. package/dist/core/execution/inquisitor.js.map +1 -1
  62. package/dist/core/execution/scanner.js.map +1 -1
  63. package/dist/core/messages/en/analysts/archetypes-extra-messages.d.ts +2 -2
  64. package/dist/core/messages/en/analysts/archetypes-extra-messages.js +2 -2
  65. package/dist/core/messages/en/analysts/archetypes-extra-messages.js.map +1 -1
  66. package/dist/core/messages/en/analysts/detector-clean-arch-messages.d.ts +4 -4
  67. package/dist/core/messages/en/analysts/detector-clean-arch-messages.js +4 -4
  68. package/dist/core/messages/en/analysts/detector-clean-arch-messages.js.map +1 -1
  69. package/dist/core/messages/en/analysts/detector-js-ts-messages.d.ts +2 -2
  70. package/dist/core/messages/en/analysts/detector-js-ts-messages.js +2 -2
  71. package/dist/core/messages/en/analysts/detector-js-ts-messages.js.map +1 -1
  72. package/dist/core/messages/en/analysts/map-reversion-extra-messages.d.ts +6 -6
  73. package/dist/core/messages/en/analysts/map-reversion-extra-messages.js +6 -6
  74. package/dist/core/messages/en/analysts/map-reversion-extra-messages.js.map +1 -1
  75. package/dist/core/messages/en/analysts/report-github-actions-messages.d.ts +2 -2
  76. package/dist/core/messages/en/analysts/report-github-actions-messages.js +2 -2
  77. package/dist/core/messages/en/analysts/report-github-actions-messages.js.map +1 -1
  78. package/dist/core/messages/en/analysts/scorer-messages.d.ts +45 -45
  79. package/dist/core/messages/en/analysts/scorer-messages.js +49 -49
  80. package/dist/core/messages/en/analysts/scorer-messages.js.map +1 -1
  81. package/dist/core/messages/en/cli/cli-command-convert-messages.d.ts +1 -1
  82. package/dist/core/messages/en/cli/cli-command-convert-messages.js +1 -1
  83. package/dist/core/messages/en/cli/cli-command-convert-messages.js.map +1 -1
  84. package/dist/core/messages/en/cli/cli-command-format-messages.d.ts +1 -1
  85. package/dist/core/messages/en/cli/cli-command-format-messages.js +1 -1
  86. package/dist/core/messages/en/cli/cli-command-format-messages.js.map +1 -1
  87. package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts +1 -1
  88. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js +4 -4
  89. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js.map +1 -1
  90. package/dist/core/messages/en/cli/cli-command-update-messages.d.ts +2 -2
  91. package/dist/core/messages/en/cli/cli-command-update-messages.js +2 -2
  92. package/dist/core/messages/en/cli/cli-command-update-messages.js.map +1 -1
  93. package/dist/core/messages/en/cli/cli-flags-validator-messages.d.ts +3 -3
  94. package/dist/core/messages/en/cli/cli-flags-validator-messages.js +3 -3
  95. package/dist/core/messages/en/cli/cli-flags-validator-messages.js.map +1 -1
  96. package/dist/core/messages/en/core/correcoes-messages.js +2 -2
  97. package/dist/core/messages/en/core/correcoes-messages.js.map +1 -1
  98. package/dist/core/messages/en/core/inquisitor-extra-messages.d.ts +2 -2
  99. package/dist/core/messages/en/core/inquisitor-extra-messages.js +2 -2
  100. package/dist/core/messages/en/core/inquisitor-extra-messages.js.map +1 -1
  101. package/dist/core/messages/en/core/parser-extra-messages.d.ts +3 -3
  102. package/dist/core/messages/en/core/parser-extra-messages.js +3 -3
  103. package/dist/core/messages/en/core/parser-extra-messages.js.map +1 -1
  104. package/dist/core/messages/en/guardian/guardian-messages.d.ts +2 -2
  105. package/dist/core/messages/en/guardian/guardian-messages.js +2 -2
  106. package/dist/core/messages/en/guardian/guardian-messages.js.map +1 -1
  107. package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts +2 -2
  108. package/dist/core/messages/en/guardian/watcher-hidden-messages.js +2 -2
  109. package/dist/core/messages/en/guardian/watcher-hidden-messages.js.map +1 -1
  110. package/dist/core/messages/en/log/log-helper.js.map +1 -1
  111. package/dist/core/messages/en/reports/report-async-patterns-messages.d.ts +3 -3
  112. package/dist/core/messages/en/reports/report-async-patterns-messages.js +3 -3
  113. package/dist/core/messages/en/reports/report-async-patterns-messages.js.map +1 -1
  114. package/dist/core/messages/en/shared/plugin-core-messages.d.ts +2 -2
  115. package/dist/core/messages/en/shared/plugin-core-messages.js +2 -2
  116. package/dist/core/messages/en/shared/plugin-core-messages.js.map +1 -1
  117. package/dist/core/messages/en/shared/plugin-registry-messages.d.ts +4 -4
  118. package/dist/core/messages/en/shared/plugin-registry-messages.js +4 -4
  119. package/dist/core/messages/en/shared/plugin-registry-messages.js.map +1 -1
  120. package/dist/core/messages/ja/analysts/archetypes-extra-messages.d.ts +2 -2
  121. package/dist/core/messages/ja/analysts/archetypes-extra-messages.js +2 -2
  122. package/dist/core/messages/ja/analysts/archetypes-extra-messages.js.map +1 -1
  123. package/dist/core/messages/ja/analysts/detector-clean-arch-messages.d.ts +4 -4
  124. package/dist/core/messages/ja/analysts/detector-clean-arch-messages.js +4 -4
  125. package/dist/core/messages/ja/analysts/detector-clean-arch-messages.js.map +1 -1
  126. package/dist/core/messages/ja/analysts/detector-js-ts-messages.d.ts +2 -2
  127. package/dist/core/messages/ja/analysts/detector-js-ts-messages.js +2 -2
  128. package/dist/core/messages/ja/analysts/detector-js-ts-messages.js.map +1 -1
  129. package/dist/core/messages/ja/analysts/map-reversion-extra-messages.d.ts +6 -6
  130. package/dist/core/messages/ja/analysts/map-reversion-extra-messages.js +6 -6
  131. package/dist/core/messages/ja/analysts/map-reversion-extra-messages.js.map +1 -1
  132. package/dist/core/messages/ja/analysts/report-github-actions-messages.d.ts +2 -2
  133. package/dist/core/messages/ja/analysts/report-github-actions-messages.js +2 -2
  134. package/dist/core/messages/ja/analysts/report-github-actions-messages.js.map +1 -1
  135. package/dist/core/messages/ja/analysts/scorer-messages.d.ts +45 -45
  136. package/dist/core/messages/ja/analysts/scorer-messages.js +49 -49
  137. package/dist/core/messages/ja/analysts/scorer-messages.js.map +1 -1
  138. package/dist/core/messages/ja/cli/cli-command-analysts-messages.d.ts +2 -2
  139. package/dist/core/messages/ja/cli/cli-command-analysts-messages.js +2 -2
  140. package/dist/core/messages/ja/cli/cli-command-analysts-messages.js.map +1 -1
  141. package/dist/core/messages/ja/cli/cli-command-convert-messages.d.ts +1 -1
  142. package/dist/core/messages/ja/cli/cli-command-convert-messages.js +1 -1
  143. package/dist/core/messages/ja/cli/cli-command-convert-messages.js.map +1 -1
  144. package/dist/core/messages/ja/cli/cli-command-format-messages.d.ts +1 -1
  145. package/dist/core/messages/ja/cli/cli-command-format-messages.js +1 -1
  146. package/dist/core/messages/ja/cli/cli-command-format-messages.js.map +1 -1
  147. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts +1 -1
  148. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js +4 -4
  149. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js.map +1 -1
  150. package/dist/core/messages/ja/cli/cli-command-update-messages.d.ts +2 -2
  151. package/dist/core/messages/ja/cli/cli-command-update-messages.js +2 -2
  152. package/dist/core/messages/ja/cli/cli-command-update-messages.js.map +1 -1
  153. package/dist/core/messages/ja/cli/cli-flags-validator-messages.d.ts +3 -3
  154. package/dist/core/messages/ja/cli/cli-flags-validator-messages.js +3 -3
  155. package/dist/core/messages/ja/cli/cli-flags-validator-messages.js.map +1 -1
  156. package/dist/core/messages/ja/core/correcoes-messages.js +2 -2
  157. package/dist/core/messages/ja/core/correcoes-messages.js.map +1 -1
  158. package/dist/core/messages/ja/core/inquisitor-extra-messages.d.ts +2 -2
  159. package/dist/core/messages/ja/core/inquisitor-extra-messages.js +2 -2
  160. package/dist/core/messages/ja/core/inquisitor-extra-messages.js.map +1 -1
  161. package/dist/core/messages/ja/core/parser-extra-messages.d.ts +3 -3
  162. package/dist/core/messages/ja/core/parser-extra-messages.js +3 -3
  163. package/dist/core/messages/ja/core/parser-extra-messages.js.map +1 -1
  164. package/dist/core/messages/ja/guardian/guardian-messages.d.ts +2 -2
  165. package/dist/core/messages/ja/guardian/guardian-messages.js +2 -2
  166. package/dist/core/messages/ja/guardian/guardian-messages.js.map +1 -1
  167. package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts +2 -2
  168. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js +2 -2
  169. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js.map +1 -1
  170. package/dist/core/messages/ja/log/log-helper.js.map +1 -1
  171. package/dist/core/messages/ja/reports/report-async-patterns-messages.d.ts +3 -3
  172. package/dist/core/messages/ja/reports/report-async-patterns-messages.js +3 -3
  173. package/dist/core/messages/ja/reports/report-async-patterns-messages.js.map +1 -1
  174. package/dist/core/messages/ja/shared/plugin-core-messages.d.ts +2 -2
  175. package/dist/core/messages/ja/shared/plugin-core-messages.js +2 -2
  176. package/dist/core/messages/ja/shared/plugin-core-messages.js.map +1 -1
  177. package/dist/core/messages/ja/shared/plugin-registry-messages.d.ts +4 -4
  178. package/dist/core/messages/ja/shared/plugin-registry-messages.js +4 -4
  179. package/dist/core/messages/ja/shared/plugin-registry-messages.js.map +1 -1
  180. package/dist/core/messages/pt/analysts/archetypes-extra-messages.d.ts +2 -2
  181. package/dist/core/messages/pt/analysts/archetypes-extra-messages.js +2 -2
  182. package/dist/core/messages/pt/analysts/archetypes-extra-messages.js.map +1 -1
  183. package/dist/core/messages/pt/analysts/detector-clean-arch-messages.d.ts +4 -4
  184. package/dist/core/messages/pt/analysts/detector-clean-arch-messages.js +4 -4
  185. package/dist/core/messages/pt/analysts/detector-clean-arch-messages.js.map +1 -1
  186. package/dist/core/messages/pt/analysts/detector-js-ts-messages.d.ts +2 -2
  187. package/dist/core/messages/pt/analysts/detector-js-ts-messages.js +2 -2
  188. package/dist/core/messages/pt/analysts/detector-js-ts-messages.js.map +1 -1
  189. package/dist/core/messages/pt/analysts/map-reversion-extra-messages.d.ts +6 -6
  190. package/dist/core/messages/pt/analysts/map-reversion-extra-messages.js +6 -6
  191. package/dist/core/messages/pt/analysts/map-reversion-extra-messages.js.map +1 -1
  192. package/dist/core/messages/pt/analysts/report-github-actions-messages.d.ts +2 -2
  193. package/dist/core/messages/pt/analysts/report-github-actions-messages.js +2 -2
  194. package/dist/core/messages/pt/analysts/report-github-actions-messages.js.map +1 -1
  195. package/dist/core/messages/pt/analysts/scorer-messages.d.ts +45 -45
  196. package/dist/core/messages/pt/analysts/scorer-messages.js +49 -49
  197. package/dist/core/messages/pt/analysts/scorer-messages.js.map +1 -1
  198. package/dist/core/messages/pt/cli/cli-command-convert-messages.d.ts +1 -1
  199. package/dist/core/messages/pt/cli/cli-command-convert-messages.js +1 -1
  200. package/dist/core/messages/pt/cli/cli-command-convert-messages.js.map +1 -1
  201. package/dist/core/messages/pt/cli/cli-command-format-messages.d.ts +1 -1
  202. package/dist/core/messages/pt/cli/cli-command-format-messages.js +1 -1
  203. package/dist/core/messages/pt/cli/cli-command-format-messages.js.map +1 -1
  204. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts +1 -1
  205. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js +4 -4
  206. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js.map +1 -1
  207. package/dist/core/messages/pt/cli/cli-command-update-messages.d.ts +2 -2
  208. package/dist/core/messages/pt/cli/cli-command-update-messages.js +2 -2
  209. package/dist/core/messages/pt/cli/cli-command-update-messages.js.map +1 -1
  210. package/dist/core/messages/pt/cli/cli-flags-validator-messages.d.ts +3 -3
  211. package/dist/core/messages/pt/cli/cli-flags-validator-messages.js +3 -3
  212. package/dist/core/messages/pt/cli/cli-flags-validator-messages.js.map +1 -1
  213. package/dist/core/messages/pt/core/correcoes-messages.js +2 -2
  214. package/dist/core/messages/pt/core/correcoes-messages.js.map +1 -1
  215. package/dist/core/messages/pt/core/inquisitor-extra-messages.d.ts +2 -2
  216. package/dist/core/messages/pt/core/inquisitor-extra-messages.js +2 -2
  217. package/dist/core/messages/pt/core/inquisitor-extra-messages.js.map +1 -1
  218. package/dist/core/messages/pt/core/parser-extra-messages.d.ts +3 -3
  219. package/dist/core/messages/pt/core/parser-extra-messages.js +3 -3
  220. package/dist/core/messages/pt/core/parser-extra-messages.js.map +1 -1
  221. package/dist/core/messages/pt/guardian/guardian-messages.d.ts +2 -2
  222. package/dist/core/messages/pt/guardian/guardian-messages.js +2 -2
  223. package/dist/core/messages/pt/guardian/guardian-messages.js.map +1 -1
  224. package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts +2 -2
  225. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js +2 -2
  226. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js.map +1 -1
  227. package/dist/core/messages/pt/log/log-helper.js.map +1 -1
  228. package/dist/core/messages/pt/reports/report-async-patterns-messages.d.ts +3 -3
  229. package/dist/core/messages/pt/reports/report-async-patterns-messages.js +3 -3
  230. package/dist/core/messages/pt/reports/report-async-patterns-messages.js.map +1 -1
  231. package/dist/core/messages/pt/shared/plugin-core-messages.d.ts +2 -2
  232. package/dist/core/messages/pt/shared/plugin-core-messages.js +2 -2
  233. package/dist/core/messages/pt/shared/plugin-core-messages.js.map +1 -1
  234. package/dist/core/messages/pt/shared/plugin-registry-messages.d.ts +4 -4
  235. package/dist/core/messages/pt/shared/plugin-registry-messages.js +4 -4
  236. package/dist/core/messages/pt/shared/plugin-registry-messages.js.map +1 -1
  237. package/dist/core/messages/zh/analysts/archetypes-extra-messages.d.ts +2 -2
  238. package/dist/core/messages/zh/analysts/archetypes-extra-messages.js +2 -2
  239. package/dist/core/messages/zh/analysts/archetypes-extra-messages.js.map +1 -1
  240. package/dist/core/messages/zh/analysts/detector-clean-arch-messages.d.ts +4 -4
  241. package/dist/core/messages/zh/analysts/detector-clean-arch-messages.js +4 -4
  242. package/dist/core/messages/zh/analysts/detector-clean-arch-messages.js.map +1 -1
  243. package/dist/core/messages/zh/analysts/detector-js-ts-messages.d.ts +2 -2
  244. package/dist/core/messages/zh/analysts/detector-js-ts-messages.js +2 -2
  245. package/dist/core/messages/zh/analysts/detector-js-ts-messages.js.map +1 -1
  246. package/dist/core/messages/zh/analysts/map-reversion-extra-messages.d.ts +6 -6
  247. package/dist/core/messages/zh/analysts/map-reversion-extra-messages.js +6 -6
  248. package/dist/core/messages/zh/analysts/map-reversion-extra-messages.js.map +1 -1
  249. package/dist/core/messages/zh/analysts/report-github-actions-messages.d.ts +2 -2
  250. package/dist/core/messages/zh/analysts/report-github-actions-messages.js +2 -2
  251. package/dist/core/messages/zh/analysts/report-github-actions-messages.js.map +1 -1
  252. package/dist/core/messages/zh/analysts/scorer-messages.d.ts +45 -45
  253. package/dist/core/messages/zh/analysts/scorer-messages.js +49 -49
  254. package/dist/core/messages/zh/analysts/scorer-messages.js.map +1 -1
  255. package/dist/core/messages/zh/cli/cli-command-analysts-messages.d.ts +2 -2
  256. package/dist/core/messages/zh/cli/cli-command-analysts-messages.js +2 -2
  257. package/dist/core/messages/zh/cli/cli-command-analysts-messages.js.map +1 -1
  258. package/dist/core/messages/zh/cli/cli-command-convert-messages.d.ts +1 -1
  259. package/dist/core/messages/zh/cli/cli-command-convert-messages.js +1 -1
  260. package/dist/core/messages/zh/cli/cli-command-convert-messages.js.map +1 -1
  261. package/dist/core/messages/zh/cli/cli-command-format-messages.d.ts +1 -1
  262. package/dist/core/messages/zh/cli/cli-command-format-messages.js +1 -1
  263. package/dist/core/messages/zh/cli/cli-command-format-messages.js.map +1 -1
  264. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts +1 -1
  265. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js +4 -4
  266. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js.map +1 -1
  267. package/dist/core/messages/zh/cli/cli-command-update-messages.d.ts +2 -2
  268. package/dist/core/messages/zh/cli/cli-command-update-messages.js +2 -2
  269. package/dist/core/messages/zh/cli/cli-command-update-messages.js.map +1 -1
  270. package/dist/core/messages/zh/cli/cli-flags-validator-messages.d.ts +3 -3
  271. package/dist/core/messages/zh/cli/cli-flags-validator-messages.js +3 -3
  272. package/dist/core/messages/zh/cli/cli-flags-validator-messages.js.map +1 -1
  273. package/dist/core/messages/zh/core/correcoes-messages.js +2 -2
  274. package/dist/core/messages/zh/core/correcoes-messages.js.map +1 -1
  275. package/dist/core/messages/zh/core/inquisitor-extra-messages.d.ts +2 -2
  276. package/dist/core/messages/zh/core/inquisitor-extra-messages.js +2 -2
  277. package/dist/core/messages/zh/core/inquisitor-extra-messages.js.map +1 -1
  278. package/dist/core/messages/zh/core/parser-extra-messages.d.ts +3 -3
  279. package/dist/core/messages/zh/core/parser-extra-messages.js +3 -3
  280. package/dist/core/messages/zh/core/parser-extra-messages.js.map +1 -1
  281. package/dist/core/messages/zh/guardian/guardian-messages.d.ts +2 -2
  282. package/dist/core/messages/zh/guardian/guardian-messages.js +2 -2
  283. package/dist/core/messages/zh/guardian/guardian-messages.js.map +1 -1
  284. package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts +2 -2
  285. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js +2 -2
  286. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js.map +1 -1
  287. package/dist/core/messages/zh/log/log-helper.js.map +1 -1
  288. package/dist/core/messages/zh/reports/report-async-patterns-messages.d.ts +3 -3
  289. package/dist/core/messages/zh/reports/report-async-patterns-messages.js +3 -3
  290. package/dist/core/messages/zh/reports/report-async-patterns-messages.js.map +1 -1
  291. package/dist/core/messages/zh/shared/plugin-core-messages.d.ts +2 -2
  292. package/dist/core/messages/zh/shared/plugin-core-messages.js +2 -2
  293. package/dist/core/messages/zh/shared/plugin-core-messages.js.map +1 -1
  294. package/dist/core/messages/zh/shared/plugin-registry-messages.d.ts +4 -4
  295. package/dist/core/messages/zh/shared/plugin-registry-messages.js +4 -4
  296. package/dist/core/messages/zh/shared/plugin-registry-messages.js.map +1 -1
  297. package/dist/core/parsing/utils.d.ts +3 -3
  298. package/dist/core/workers/worker-pool.js +1 -1
  299. package/dist/core/workers/worker-pool.js.map +1 -1
  300. package/dist/guardian/baseline.js.map +1 -1
  301. package/dist/guardian/constants.js.map +1 -1
  302. package/dist/guardian/diff.js.map +1 -1
  303. package/dist/reports/analise-async-patterns.js +1 -1
  304. package/dist/reports/analise-async-patterns.js.map +1 -1
  305. package/dist/reports/filter-smart.js.map +1 -1
  306. package/dist/reports/report-caretaker-health.js +1 -1
  307. package/dist/reports/report-caretaker-health.js.map +1 -1
  308. package/dist/shared/plugins/init.js.map +1 -1
  309. package/package.json +7 -7
@@ -61,7 +61,7 @@ export function comandoGitlabCI() {
61
61
  if (ocorrencias.length > 0) {
62
62
  console.log('');
63
63
  ocorrencias.forEach(ocorrencia => {
64
- const prefix = ocorrencia.nivel === 'erro' ? '🔴' : ocorrencia.nivel === 'aviso' ? '🟡' : '🔵';
64
+ const prefix = ocorrencia.nivel === 'erro' ? '[RED]' : ocorrencia.nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';
65
65
  log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));
66
66
  if (ocorrencia.sugestao)
67
67
  log.info(msgs.sugestao(ocorrencia.sugestao));
@@ -1 +1 @@
1
- {"version":3,"file":"command-gitlab-ci.js","sourceRoot":"","sources":["../../../src/cli/commands/command-gitlab-ci.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de GitLab CI\n *\n * tutanus gitlab-ci scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaGitLabCI } from '@analysts/gitlab-ci';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport type { ContextoExecucao, Ocorrencia, TecnicaAplicarResultado } from '@';\n\nconst log = messages.log;\nconst msgs = messages.CliComandoGitlabCiMensagens;\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\nexport function comandoGitlabCI(): Command {\n const cmd = new Command('gitlab-ci').alias('gl').description(msgs.descricaoCmd);\n cmd.command('scan').alias('s').description(msgs.descricaoScan).option('-p, --path <caminho>', msgs.optPath, '.').option('-j, --json', 'Saída em JSON').action(async (opts: {\n path?: string;\n json?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const gitlabFile = path.join(repoPath, '.gitlab-ci.yml');\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(gitlabFile, 'utf-8');\n } catch {\n log.erro(msgs.arquivoNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n const spinner = opts.json ? {\n text: '',\n start() {\n return this;\n },\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n stop() {\n return this;\n }\n } : ora({\n text: msgs.analisando,\n spinner: 'dots'\n }).start();\n try {\n const relPath = '.gitlab-ci.yml';\n const result = await analistaGitLabCI.aplicar(conteudo, relPath, null, undefined, {\n arquivos: [{\n relPath,\n content: conteudo\n }]\n } as ContextoExecucao);\n const ocorrencias = normalizarOcorrencias(result);\n if (opts.json) {\n console.log(JSON.stringify(ocorrencias, null, 2));\n } else {\n spinner.succeed(msgs.analiseConcluida(ocorrencias.length));\n if (ocorrencias.length > 0) {\n console.log('');\n ocorrencias.forEach(ocorrencia => {\n const prefix = ocorrencia.nivel === 'erro' ? '🔴' : ocorrencia.nivel === 'aviso' ? '🟡' : '🔵';\n log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));\n if (ocorrencia.sugestao) log.info(msgs.sugestao(ocorrencia.sugestao));\n });\n } else {\n log.sucesso(msgs.boasPraticas);\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n spinner.fail(msgs.erroAnalise(msg));\n sair(ExitCode.Failure);\n }\n });\n return cmd;\n}"]}
1
+ {"version":3,"file":"command-gitlab-ci.js","sourceRoot":"","sources":["../../../src/cli/commands/command-gitlab-ci.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de GitLab CI\n *\n * tutanus gitlab-ci scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaGitLabCI } from '@analysts/gitlab-ci';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport type { ContextoExecucao, Ocorrencia, TecnicaAplicarResultado } from '@';\n\nconst log = messages.log;\nconst msgs = messages.CliComandoGitlabCiMensagens;\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\nexport function comandoGitlabCI(): Command {\n const cmd = new Command('gitlab-ci').alias('gl').description(msgs.descricaoCmd);\n cmd.command('scan').alias('s').description(msgs.descricaoScan).option('-p, --path <caminho>', msgs.optPath, '.').option('-j, --json', 'Saída em JSON').action(async (opts: {\n path?: string;\n json?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const gitlabFile = path.join(repoPath, '.gitlab-ci.yml');\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(gitlabFile, 'utf-8');\n } catch {\n log.erro(msgs.arquivoNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n const spinner = opts.json ? {\n text: '',\n start() {\n return this;\n },\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n stop() {\n return this;\n }\n } : ora({\n text: msgs.analisando,\n spinner: 'dots'\n }).start();\n try {\n const relPath = '.gitlab-ci.yml';\n const result = await analistaGitLabCI.aplicar(conteudo, relPath, null, undefined, {\n arquivos: [{\n relPath,\n content: conteudo\n }]\n } as ContextoExecucao);\n const ocorrencias = normalizarOcorrencias(result);\n if (opts.json) {\n console.log(JSON.stringify(ocorrencias, null, 2));\n } else {\n spinner.succeed(msgs.analiseConcluida(ocorrencias.length));\n if (ocorrencias.length > 0) {\n console.log('');\n ocorrencias.forEach(ocorrencia => {\n const prefix = ocorrencia.nivel === 'erro' ? '[RED]' : ocorrencia.nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';\n log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));\n if (ocorrencia.sugestao) log.info(msgs.sugestao(ocorrencia.sugestao));\n });\n } else {\n log.sucesso(msgs.boasPraticas);\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n spinner.fail(msgs.erroAnalise(msg));\n sair(ExitCode.Failure);\n }\n });\n return cmd;\n}"]}
@@ -56,7 +56,7 @@ export function comandoJenkins() {
56
56
  if (ocorrencias.length > 0) {
57
57
  console.log('');
58
58
  ocorrencias.forEach((ocorrencia) => {
59
- const prefix = ocorrencia.nivel === 'erro' ? '🔴' : ocorrencia.nivel === 'aviso' ? '🟡' : '🔵';
59
+ const prefix = ocorrencia.nivel === 'erro' ? '[RED]' : ocorrencia.nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';
60
60
  log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));
61
61
  if (ocorrencia.sugestao)
62
62
  log.info(msgs.sugestao(ocorrencia.sugestao));
@@ -1 +1 @@
1
- {"version":3,"file":"command-jenkins.js","sourceRoot":"","sources":["../../../src/cli/commands/command-jenkins.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de Jenkinsfiles\n *\n * tutanus jenkins scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaJenkins } from '@analysts/jenkins';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport type { Ocorrencia, TecnicaAplicarResultado } from '@';\n\nconst log = messages.log;\nconst msgs = messages.CliComandoJenkinsMensagens;\ninterface SpinnerInstance {\n succeed(text?: string): SpinnerInstance;\n fail(text?: string): SpinnerInstance;\n stop(): void;\n start(text?: string): SpinnerInstance;\n}\nfunction criarSpinnerVazio(): SpinnerInstance {\n return {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n stop() {},\n start() {\n return this;\n }\n };\n}\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\nexport function comandoJenkins(): Command {\n const cmd = new Command('jenkins').alias('jk').description(msgs.descricaoCmd);\n cmd.command('scan').alias('s').description(msgs.descricaoScan).option('-p, --path <caminho>', msgs.optPath, '.').option('-j, --json', 'Saída em JSON').action(async (opts: {\n path?: string;\n json?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const jenkinsFile = path.join(repoPath, 'Jenkinsfile');\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(jenkinsFile, 'utf-8');\n } catch {\n log.erro(msgs.arquivoNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n const spinner: SpinnerInstance = opts.json ? criarSpinnerVazio() : ora({\n text: msgs.analisando,\n spinner: 'dots'\n }).start() as unknown as SpinnerInstance;\n try {\n const relPath = 'Jenkinsfile';\n const result = await analistaJenkins.aplicar(conteudo, relPath, null);\n const ocorrencias = normalizarOcorrencias(result);\n if (opts.json) {\n console.log(JSON.stringify(ocorrencias, null, 2));\n } else {\n spinner.succeed(msgs.analiseConcluida(ocorrencias.length));\n if (ocorrencias.length > 0) {\n console.log('');\n ocorrencias.forEach((ocorrencia: Ocorrencia) => {\n const prefix = ocorrencia.nivel === 'erro' ? '🔴' : ocorrencia.nivel === 'aviso' ? '🟡' : '🔵';\n log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));\n if (ocorrencia.sugestao) log.info(msgs.sugestao(ocorrencia.sugestao));\n });\n } else {\n log.sucesso(msgs.boasPraticas);\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n spinner.fail(msgs.erroAnalise(msg));\n sair(ExitCode.Failure);\n }\n });\n return cmd;\n}"]}
1
+ {"version":3,"file":"command-jenkins.js","sourceRoot":"","sources":["../../../src/cli/commands/command-jenkins.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de Jenkinsfiles\n *\n * tutanus jenkins scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaJenkins } from '@analysts/jenkins';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport type { Ocorrencia, TecnicaAplicarResultado } from '@';\n\nconst log = messages.log;\nconst msgs = messages.CliComandoJenkinsMensagens;\ninterface SpinnerInstance {\n succeed(text?: string): SpinnerInstance;\n fail(text?: string): SpinnerInstance;\n stop(): void;\n start(text?: string): SpinnerInstance;\n}\nfunction criarSpinnerVazio(): SpinnerInstance {\n return {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n stop() {},\n start() {\n return this;\n }\n };\n}\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\nexport function comandoJenkins(): Command {\n const cmd = new Command('jenkins').alias('jk').description(msgs.descricaoCmd);\n cmd.command('scan').alias('s').description(msgs.descricaoScan).option('-p, --path <caminho>', msgs.optPath, '.').option('-j, --json', 'Saída em JSON').action(async (opts: {\n path?: string;\n json?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const jenkinsFile = path.join(repoPath, 'Jenkinsfile');\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(jenkinsFile, 'utf-8');\n } catch {\n log.erro(msgs.arquivoNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n const spinner: SpinnerInstance = opts.json ? criarSpinnerVazio() : ora({\n text: msgs.analisando,\n spinner: 'dots'\n }).start() as unknown as SpinnerInstance;\n try {\n const relPath = 'Jenkinsfile';\n const result = await analistaJenkins.aplicar(conteudo, relPath, null);\n const ocorrencias = normalizarOcorrencias(result);\n if (opts.json) {\n console.log(JSON.stringify(ocorrencias, null, 2));\n } else {\n spinner.succeed(msgs.analiseConcluida(ocorrencias.length));\n if (ocorrencias.length > 0) {\n console.log('');\n ocorrencias.forEach((ocorrencia: Ocorrencia) => {\n const prefix = ocorrencia.nivel === 'erro' ? '[RED]' : ocorrencia.nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';\n log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));\n if (ocorrencia.sugestao) log.info(msgs.sugestao(ocorrencia.sugestao));\n });\n } else {\n log.sucesso(msgs.boasPraticas);\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n spinner.fail(msgs.erroAnalise(msg));\n sair(ExitCode.Failure);\n }\n });\n return cmd;\n}"]}
@@ -31,8 +31,8 @@ export function exportarComplianceMarkdown(relatorio) {
31
31
  secoes.push('| Controle | Status | Risco | Evidências |');
32
32
  secoes.push('|---|---|---|---|');
33
33
  for (const controle of secao.controles) {
34
- const status = controle.conformidade === 'conforme' ? '' : controle.conformidade === 'parcial' ? '⚠️' : '';
35
- const risco = controle.risco === 'critico' ? '🔥' : controle.risco === 'alto' ? '🔴' : controle.risco === 'medio' ? '🟡' : '🟢';
34
+ const status = controle.conformidade === 'conforme' ? '[OK]' : controle.conformidade === 'parcial' ? '[WARN]' : '[FAIL]';
35
+ const risco = controle.risco === 'critico' ? '[FIRE]' : controle.risco === 'alto' ? '[RED]' : controle.risco === 'medio' ? '[YELLOW]' : '[GREEN]';
36
36
  const evidencias = controle.evidencias.length > 0 ? `${controle.evidencias.length}` : '0';
37
37
  secoes.push(`| **${controle.id}** ${controle.nome} | ${status} ${controle.conformidade} | ${risco} ${controle.risco} | ${evidencias} |`);
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compliance-exporter.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/exporters/compliance-exporter.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport type { RelatorioCompliance } from '@';\n\nexport function exportarComplianceJson(relatorio: RelatorioCompliance): string {\n return JSON.stringify(relatorio, null, 2);\n}\n\nexport function exportarComplianceMarkdown(relatorio: RelatorioCompliance): string {\n const secoes: string[] = [];\n\n secoes.push(`# Relatório de Compliance: ${relatorio.metadata.framework.toUpperCase()}\\n`);\n secoes.push(`**Projeto**: ${relatorio.metadata.nomeProjeto}`);\n secoes.push(`**Framework**: ${relatorio.metadata.versaoFramework}`);\n secoes.push(`**Data**: ${new Date(relatorio.metadata.timestamp).toLocaleString('pt-BR')}`);\n const MS_POR_SEGUNDO = 1000;\n secoes.push(`**Duração**: ${(relatorio.metadata.duracaoAnalise / MS_POR_SEGUNDO).toFixed(1)}s\\n`);\n\n secoes.push('## Resumo\\n');\n secoes.push('| Métrica | Valor |');\n secoes.push('|---|---|');\n secoes.push(`| Pontuação Geral | ${relatorio.resumo.pontuacaoGeral}% |`);\n secoes.push(`| Total de Controles | ${relatorio.resumo.totalControles} |`);\n secoes.push(`| Conformes | ${relatorio.resumo.controlesConformes} |`);\n secoes.push(`| Parciais | ${relatorio.resumo.controlesParciais} |`);\n secoes.push(`| Não Conformes | ${relatorio.resumo.controlesNaoConformes} |`);\n secoes.push(`| Riscos Críticos | ${relatorio.resumo.riscosCriticos} |`);\n secoes.push(`| Riscos Altos | ${relatorio.resumo.riscosAltos} |`);\n secoes.push(`| Conformidade Geral | ${relatorio.resumo.conformidadeGeral} |\\n`);\n\n secoes.push(`## Recomendações\\n`);\n for (const rec of relatorio.recomendacoes) {\n secoes.push(`- ${rec}`);\n }\n secoes.push('');\n\n for (const secao of relatorio.secoes) {\n secoes.push(`## ${secao.nome}\\n`);\n secoes.push(`**Pontuação**: ${secao.pontuacao}% (${secao.controlesConformes}/${secao.totalControles})\\n`);\n secoes.push('| Controle | Status | Risco | Evidências |');\n secoes.push('|---|---|---|---|');\n for (const controle of secao.controles) {\n const status = controle.conformidade === 'conforme' ? '' : controle.conformidade === 'parcial' ? '⚠️' : '';\n const risco = controle.risco === 'critico' ? '🔥' : controle.risco === 'alto' ? '🔴' : controle.risco === 'medio' ? '🟡' : '🟢';\n const evidencias = controle.evidencias.length > 0 ? `${controle.evidencias.length}` : '0';\n secoes.push(`| **${controle.id}** ${controle.nome} | ${status} ${controle.conformidade} | ${risco} ${controle.risco} | ${evidencias} |`);\n }\n secoes.push('');\n }\n\n if (relatorio.riscosIdentificados.length > 0) {\n secoes.push('## Riscos Identificados\\n');\n secoes.push('| ID | Descrição | Severidade | Ação Recomendada |');\n secoes.push('|---|---|---|---|');\n for (const risco of relatorio.riscosIdentificados) {\n secoes.push(`| ${risco.id} | ${risco.descricao} | ${risco.severidade} | ${risco.acaoRecomendada} |`);\n }\n secoes.push('');\n }\n\n secoes.push(`---\\n*Relatório gerado por Tutanus em ${new Date().toLocaleString('pt-BR')}*`);\n\n return secoes.join('\\n');\n}\n"]}
1
+ {"version":3,"file":"compliance-exporter.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/exporters/compliance-exporter.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport type { RelatorioCompliance } from '@';\n\nexport function exportarComplianceJson(relatorio: RelatorioCompliance): string {\n return JSON.stringify(relatorio, null, 2);\n}\n\nexport function exportarComplianceMarkdown(relatorio: RelatorioCompliance): string {\n const secoes: string[] = [];\n\n secoes.push(`# Relatório de Compliance: ${relatorio.metadata.framework.toUpperCase()}\\n`);\n secoes.push(`**Projeto**: ${relatorio.metadata.nomeProjeto}`);\n secoes.push(`**Framework**: ${relatorio.metadata.versaoFramework}`);\n secoes.push(`**Data**: ${new Date(relatorio.metadata.timestamp).toLocaleString('pt-BR')}`);\n const MS_POR_SEGUNDO = 1000;\n secoes.push(`**Duração**: ${(relatorio.metadata.duracaoAnalise / MS_POR_SEGUNDO).toFixed(1)}s\\n`);\n\n secoes.push('## Resumo\\n');\n secoes.push('| Métrica | Valor |');\n secoes.push('|---|---|');\n secoes.push(`| Pontuação Geral | ${relatorio.resumo.pontuacaoGeral}% |`);\n secoes.push(`| Total de Controles | ${relatorio.resumo.totalControles} |`);\n secoes.push(`| Conformes | ${relatorio.resumo.controlesConformes} |`);\n secoes.push(`| Parciais | ${relatorio.resumo.controlesParciais} |`);\n secoes.push(`| Não Conformes | ${relatorio.resumo.controlesNaoConformes} |`);\n secoes.push(`| Riscos Críticos | ${relatorio.resumo.riscosCriticos} |`);\n secoes.push(`| Riscos Altos | ${relatorio.resumo.riscosAltos} |`);\n secoes.push(`| Conformidade Geral | ${relatorio.resumo.conformidadeGeral} |\\n`);\n\n secoes.push(`## Recomendações\\n`);\n for (const rec of relatorio.recomendacoes) {\n secoes.push(`- ${rec}`);\n }\n secoes.push('');\n\n for (const secao of relatorio.secoes) {\n secoes.push(`## ${secao.nome}\\n`);\n secoes.push(`**Pontuação**: ${secao.pontuacao}% (${secao.controlesConformes}/${secao.totalControles})\\n`);\n secoes.push('| Controle | Status | Risco | Evidências |');\n secoes.push('|---|---|---|---|');\n for (const controle of secao.controles) {\n const status = controle.conformidade === 'conforme' ? '[OK]' : controle.conformidade === 'parcial' ? '[WARN]' : '[FAIL]';\n const risco = controle.risco === 'critico' ? '[FIRE]' : controle.risco === 'alto' ? '[RED]' : controle.risco === 'medio' ? '[YELLOW]' : '[GREEN]';\n const evidencias = controle.evidencias.length > 0 ? `${controle.evidencias.length}` : '0';\n secoes.push(`| **${controle.id}** ${controle.nome} | ${status} ${controle.conformidade} | ${risco} ${controle.risco} | ${evidencias} |`);\n }\n secoes.push('');\n }\n\n if (relatorio.riscosIdentificados.length > 0) {\n secoes.push('## Riscos Identificados\\n');\n secoes.push('| ID | Descrição | Severidade | Ação Recomendada |');\n secoes.push('|---|---|---|---|');\n for (const risco of relatorio.riscosIdentificados) {\n secoes.push(`| ${risco.id} | ${risco.descricao} | ${risco.severidade} | ${risco.acaoRecomendada} |`);\n }\n secoes.push('');\n }\n\n secoes.push(`---\\n*Relatório gerado por Tutanus em ${new Date().toLocaleString('pt-BR')}*`);\n\n return secoes.join('\\n');\n}\n"]}
@@ -57,10 +57,10 @@ function gerarIndice(opts, dados) {
57
57
  itens.push('- [[GRAFICO] Estatísticas](#-estatísticas)');
58
58
  }
59
59
  if (opts.includeGuardian && dados.guardian?.executado) {
60
- itens.push('- [🛡️ Guardian](#️-guardian)');
60
+ itens.push('- [[SHIELD] Guardian](#-guardian)');
61
61
  }
62
62
  if (opts.includeArquetipos && dados.arquetipos?.executado) {
63
- itens.push('- [🏗️ Arquetipos](#️-arquetipos)');
63
+ itens.push('- [[BUILD] Arquetipos](#-arquetipos)');
64
64
  }
65
65
  if (opts.includeAutoFix && dados.autoFix?.executado) {
66
66
  itens.push('- [[CHAVE-INGLESA] Auto-fix](#-auto-fix)');
@@ -89,7 +89,7 @@ function gerarSecaoStats(stats, linguagens) {
89
89
  md += '|---|---|\n';
90
90
  md += `| [ERRO] Erro | ${stats.porNivel.erro} |\n`;
91
91
  md += `| [AVISO] Aviso | ${stats.porNivel.aviso} |\n`;
92
- md += `| i️ Info | ${stats.porNivel.info} |\n`;
92
+ md += `| [INFO] Info | ${stats.porNivel.info} |\n`;
93
93
  if (Object.keys(stats.porCategoria).length > 0) {
94
94
  md += '\n### Por Categoria\n\n';
95
95
  md += '| Categoria | Quantidade |\n';
@@ -111,7 +111,7 @@ function gerarSecaoStats(stats, linguagens) {
111
111
  return md;
112
112
  }
113
113
  function gerarSecaoGuardian(guardian) {
114
- let md = '## 🛡️ Guardian\n\n';
114
+ let md = '## [SHIELD] Guardian\n\n';
115
115
  md += `**Status**: ${guardian.status ?? 'desconhecido'}\n`;
116
116
  md += `**Problemas**: ${guardian.temProblemas ? '[ERRO] Detectados' : '[OK] Nenhum'}\n\n`;
117
117
  if (guardian.resultado?.detalhes && guardian.resultado.detalhes.length > 0) {
@@ -128,7 +128,7 @@ function gerarSecaoGuardian(guardian) {
128
128
  return md;
129
129
  }
130
130
  function gerarSecaoArquetipos(arquetipos) {
131
- let md = '## 🏗️ Arquetipos\n\n';
131
+ let md = '## [BUILD] Arquetipos\n\n';
132
132
  if (arquetipos.principal) {
133
133
  md += `**Arquétipo Principal**: ${arquetipos.principal.tipo}\n`;
134
134
  md += `**Confiança**: ${(arquetipos.principal.confianca * 100).toFixed(1)}%\n\n`;
@@ -213,7 +213,7 @@ function gerarOcorrenciasPorArquivo(ocorrencias) {
213
213
  }
214
214
  let md = '';
215
215
  for (const [arquivo, lista] of porArquivo) {
216
- md += `### 📄 ${arquivo}\n\n`;
216
+ md += `### [FILE] ${arquivo}\n\n`;
217
217
  for (const ocorrencia of lista) {
218
218
  const nivel = getNivelIcon(ocorrencia.nivel || 'info');
219
219
  const linha = ocorrencia.linha ? `:${ocorrencia.linha}` : '';
@@ -240,7 +240,7 @@ function getNivelIcon(nivel) {
240
240
  case 'aviso':
241
241
  return '[AVISO]';
242
242
  case 'info':
243
- return 'i️';
243
+ return '[INFO]';
244
244
  default:
245
245
  return '•';
246
246
  }
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-exporter.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/exporters/markdown-exporter.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: 2025 Tutanus Contributors\n\n/**\n * @module cli/diagnostico/exporters/markdown-exporter\n * @description Exportador Markdown com formatação rica e tabelas\n * @see docs/REFACTOR-CLI-DIAGNOSTICAR.md - Sprint 2\n */\n\nimport type { DadosRelatorioMarkdown, MarkdownExportOptions, Ocorrencia } from '@';\n\nimport type { ArquetipoResult } from '../handlers/archetype-handler.js';\nimport type { AutoFixResult } from '../handlers/auto-fix-handler.js';\nimport type { GuardianResult } from '../handlers/guardian-handler.js';\n\n// Re-export para compatibilidade\nexport type { DadosRelatorioMarkdown, MarkdownExportOptions };\n\n// ─── Função Principal ─────────────────────────────────────────\n\n/**\n * Gera relatório Markdown formatado\n */\nexport function gerarRelatorioMarkdown(dados: DadosRelatorioMarkdown, options: Partial<MarkdownExportOptions> = {}): string {\n const opts: MarkdownExportOptions = {\n includeToc: options.includeToc ?? true,\n includeStats: options.includeStats ?? true,\n includeGuardian: options.includeGuardian ?? true,\n includeArquetipos: options.includeArquetipos ?? true,\n includeAutoFix: options.includeAutoFix ?? true,\n includeOcorrencias: options.includeOcorrencias ?? true,\n agruparPorArquivo: options.agruparPorArquivo ?? false,\n maxOcorrencias: options.maxOcorrencias,\n titulo: options.titulo ?? 'Relatório de Diagnóstico',\n subtitulo: options.subtitulo\n };\n const secoes: string[] = [];\n\n // Cabeçalho\n secoes.push(gerarCabecalho(opts.titulo ?? 'Relatório de Diagnóstico', opts.subtitulo, dados.metadata));\n\n // Índice\n if (opts.includeToc) {\n secoes.push(gerarIndice(opts, dados));\n }\n\n // Estatísticas\n if (opts.includeStats && dados.stats) {\n secoes.push(gerarSecaoStats(dados.stats, dados.linguagens));\n }\n\n // Guardian\n if (opts.includeGuardian && dados.guardian?.executado) {\n secoes.push(gerarSecaoGuardian(dados.guardian));\n }\n\n // Arquetipos\n if (opts.includeArquetipos && dados.arquetipos?.executado) {\n secoes.push(gerarSecaoArquetipos(dados.arquetipos));\n }\n\n // Auto-fix\n if (opts.includeAutoFix && dados.autoFix?.executado) {\n secoes.push(gerarSecaoAutoFix(dados.autoFix));\n }\n\n // Ocorrências\n if (opts.includeOcorrencias && dados.ocorrencias && dados.ocorrencias.length > 0) {\n secoes.push(gerarSecaoOcorrencias(dados.ocorrencias, opts));\n }\n\n // Sugestões\n if (dados.sugestoes && dados.sugestoes.length > 0) {\n secoes.push(gerarSecaoSugestoes(dados.sugestoes));\n }\n\n // Rodapé\n secoes.push(gerarRodape());\n return secoes.join('\\n\\n---\\n\\n');\n}\n\n// ─── Seções do Relatório ──────────────────────────────────────\n\nfunction gerarCabecalho(titulo: string, subtitulo?: string, metadata?: DadosRelatorioMarkdown['metadata']): string {\n let md = `# ${titulo}\\n\\n`;\n if (subtitulo) {\n md += `> ${subtitulo}\\n\\n`;\n }\n if (metadata) {\n md += `**Data**: ${new Date(metadata.timestamp).toLocaleString('pt-BR')}\\n`;\n md += `**Modo**: ${metadata.modo}\\n`;\n if (metadata.flags.length > 0) {\n md += `**Flags**: \\`${metadata.flags.join('`, `')}\\`\\n`;\n }\n }\n return md;\n}\nfunction gerarIndice(opts: MarkdownExportOptions, dados: DadosRelatorioMarkdown): string {\n const itens: string[] = [];\n if (opts.includeStats && dados.stats) {\n itens.push('- [[GRAFICO] Estatísticas](#-estatísticas)');\n }\n if (opts.includeGuardian && dados.guardian?.executado) {\n itens.push('- [🛡️ Guardian](#️-guardian)');\n }\n if (opts.includeArquetipos && dados.arquetipos?.executado) {\n itens.push('- [🏗️ Arquetipos](#️-arquetipos)');\n }\n if (opts.includeAutoFix && dados.autoFix?.executado) {\n itens.push('- [[CHAVE-INGLESA] Auto-fix](#-auto-fix)');\n }\n if (opts.includeOcorrencias && dados.ocorrencias && dados.ocorrencias.length > 0) {\n itens.push('- [[BUSCA] Ocorrências](#-ocorrências)');\n }\n if (dados.sugestoes && dados.sugestoes.length > 0) {\n itens.push('- [[IDEIA] Sugestões](#-sugestões)');\n }\n return `## Índice\\n\\n${itens.join('\\n')}`;\n}\nfunction gerarSecaoStats(stats: NonNullable<DadosRelatorioMarkdown['stats']>, linguagens?: DadosRelatorioMarkdown['linguagens']): string {\n let md = '## [GRAFICO] Estatísticas\\n\\n';\n\n // Tabela principal\n md += '| Métrica | Valor |\\n';\n md += '|---|---|\\n';\n md += `| Arquivos analisados | ${stats.arquivosAnalisados} |\\n`;\n md += `| Arquivos com problemas | ${stats.arquivosComProblemas} |\\n`;\n md += `| Total de ocorrências | ${stats.totalOcorrencias} |\\n`;\n if (stats.tempoExecucao) {\n const tempoSeg = (stats.tempoExecucao / 1000).toFixed(2);\n md += `| Tempo de execução | ${tempoSeg}s |\\n`;\n }\n\n // Breakdown por nível\n md += '\\n### Por Nível\\n\\n';\n md += '| Nível | Quantidade |\\n';\n md += '|---|---|\\n';\n md += `| [ERRO] Erro | ${stats.porNivel.erro} |\\n`;\n md += `| [AVISO] Aviso | ${stats.porNivel.aviso} |\\n`;\n md += `| i️ Info | ${stats.porNivel.info} |\\n`;\n\n // Breakdown por categoria\n if (Object.keys(stats.porCategoria).length > 0) {\n md += '\\n### Por Categoria\\n\\n';\n md += '| Categoria | Quantidade |\\n';\n md += '|---|---|\\n';\n const categorias = Object.entries(stats.porCategoria).sort((arquivo, base) => base[1] - arquivo[1]).slice(0, 10); // Top 10\n\n for (const [categoria, count] of categorias) {\n md += `| ${categoria} | ${count} |\\n`;\n }\n }\n\n // Linguagens\n if (linguagens && Object.keys(linguagens.extensoes).length > 0) {\n md += '\\n### Linguagens Detectadas\\n\\n';\n md += '| Extensão | Arquivos |\\n';\n md += '|---|---|\\n';\n const extensoes = Object.entries(linguagens.extensoes).sort((arquivo, base) => base[1] - arquivo[1]).slice(0, 10); // Top 10\n\n for (const [ext, count] of extensoes) {\n md += `| .${ext} | ${count} |\\n`;\n }\n }\n return md;\n}\nfunction gerarSecaoGuardian(guardian: GuardianResult): string {\n let md = '## 🛡️ Guardian\\n\\n';\n md += `**Status**: ${guardian.status ?? 'desconhecido'}\\n`;\n md += `**Problemas**: ${guardian.temProblemas ? '[ERRO] Detectados' : '[OK] Nenhum'}\\n\\n`;\n if (guardian.resultado?.detalhes && guardian.resultado.detalhes.length > 0) {\n md += `### Detalhes\\n\\n`;\n for (const detalhe of guardian.resultado.detalhes) {\n md += `- ${detalhe}\\n`;\n }\n md += '\\n';\n }\n if (guardian.drift && guardian.drift > 0) {\n md += `### Drift Detectado\\n\\n`;\n md += `- Mudanças: ${guardian.drift}\\n`;\n }\n return md;\n}\nfunction gerarSecaoArquetipos(arquetipos: ArquetipoResult): string {\n let md = '## 🏗️ Arquetipos\\n\\n';\n if (arquetipos.principal) {\n md += `**Arquétipo Principal**: ${arquetipos.principal.tipo}\\n`;\n md += `**Confiança**: ${(arquetipos.principal.confianca * 100).toFixed(1)}%\\n\\n`;\n }\n if (arquetipos.arquetipos && arquetipos.arquetipos.length > 1) {\n md += '### Outros Candidatos\\n\\n';\n md += '| Arquétipo | Confiança | Características |\\n';\n md += '|---|---|---|\\n';\n for (const arq of arquetipos.arquetipos.slice(1, 6)) {\n const caracteristicas = arq.caracteristicas?.slice(0, 3).join(', ') ?? '';\n md += `| ${arq.tipo} | ${(arq.confianca * 100).toFixed(1)}% | ${caracteristicas} |\\n`;\n }\n }\n if (arquetipos.salvo) {\n md += '\\n[OK] Arquétipo salvo em `tutanus.repo.arquetipo.json`\\n';\n }\n return md;\n}\nfunction gerarSecaoAutoFix(autoFix: AutoFixResult): string {\n let md = '## [CHAVE-INGLESA] Auto-fix\\n\\n';\n md += `**Modo**: ${autoFix.mode}\\n`;\n md += `**Dry-run**: ${autoFix.dryRun ? 'Sim' : 'Não'}\\n\\n`;\n md += '### Estatísticas\\n\\n';\n md += '| Métrica | Valor |\\n';\n md += '|---|---|\\n';\n md += `| Arquivos analisados | ${autoFix.stats.arquivosAnalisados} |\\n`;\n md += `| Arquivos modificados | ${autoFix.stats.arquivosModificados} |\\n`;\n md += `| Correções aplicadas | ${autoFix.stats.correcoesAplicadas} |\\n`;\n md += `| Correções sugeridas | ${autoFix.stats.correcoesSugeridas} |\\n`;\n md += `| Correções puladas | ${autoFix.stats.correcoesPuladas} |\\n`;\n if (autoFix.correcoesPorTipo && Object.keys(autoFix.correcoesPorTipo).length > 0) {\n md += '\\n### Por Tipo\\n\\n';\n md += '| Tipo | Quantidade |\\n';\n md += '|---|---|\\n';\n for (const [tipo, count] of Object.entries(autoFix.correcoesPorTipo)) {\n md += `| ${tipo} | ${count} |\\n`;\n }\n }\n return md;\n}\nfunction gerarSecaoOcorrencias(ocorrencias: Ocorrencia[], opts: MarkdownExportOptions): string {\n let md = '## [BUSCA] Ocorrências\\n\\n';\n\n // Limitar se necessário\n let lista = ocorrencias;\n if (opts.maxOcorrencias && lista.length > opts.maxOcorrencias) {\n lista = lista.slice(0, opts.maxOcorrencias);\n md += `> Mostrando ${opts.maxOcorrencias} de ${ocorrencias.length} ocorrências\\n\\n`;\n }\n if (opts.agruparPorArquivo) {\n md += gerarOcorrenciasPorArquivo(lista);\n } else {\n md += gerarTabelaOcorrencias(lista);\n }\n return md;\n}\nfunction gerarTabelaOcorrencias(ocorrencias: Ocorrencia[]): string {\n let md = '| Arquivo | Linha | Nível | Tipo | Mensagem |\\n';\n md += '|---|---|---|---|---|\\n';\n for (const ocorrencia of ocorrencias) {\n const arquivo = ocorrencia.relPath || 'desconhecido';\n const linha = ocorrencia.linha ?? '-';\n const nivel = getNivelIcon(ocorrencia.nivel || 'info');\n const tipo = ocorrencia.tipo || 'outros';\n const rawMensagem = ocorrencia.mensagem;\n const mensagemEscapada = rawMensagem.replace(/\\\\/g, '\\\\\\\\').replace(/\\|/g, '\\\\|');\n const mensagem = mensagemEscapada.slice(0, 80);\n md += `| ${arquivo} | ${linha} | ${nivel} | ${tipo} | ${mensagem} |\\n`;\n }\n return md;\n}\nfunction gerarOcorrenciasPorArquivo(ocorrencias: Ocorrencia[]): string {\n const porArquivo = new Map<string, Ocorrencia[]>();\n for (const ocorrencia of ocorrencias) {\n const arquivo = ocorrencia.relPath || 'desconhecido';\n if (!porArquivo.has(arquivo)) {\n porArquivo.set(arquivo, []);\n }\n const listaArquivo = porArquivo.get(arquivo);\n if (listaArquivo) {\n listaArquivo.push(ocorrencia);\n }\n }\n let md = '';\n for (const [arquivo, lista] of porArquivo) {\n md += `### 📄 ${arquivo}\\n\\n`;\n for (const ocorrencia of lista) {\n const nivel = getNivelIcon(ocorrencia.nivel || 'info');\n const linha = ocorrencia.linha ? `:${ocorrencia.linha}` : '';\n md += `- ${nivel} **${ocorrencia.tipo}**${linha}: ${ocorrencia.mensagem}\\n`;\n }\n md += '\\n';\n }\n return md;\n}\nfunction gerarSecaoSugestoes(sugestoes: string[]): string {\n let md = '## [IDEIA] Sugestões\\n\\n';\n for (const sugestao of sugestoes) {\n md += `- ${sugestao}\\n`;\n }\n return md;\n}\nfunction gerarRodape(): string {\n return `---\\n\\n*Gerado por Tutanus v0.2.0 em ${new Date().toLocaleString('pt-BR')}*`;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────\n\nfunction getNivelIcon(nivel: string): string {\n switch (nivel) {\n case 'erro':\n return '[ERRO]';\n case 'aviso':\n return '[AVISO]';\n case 'info':\n return 'i️';\n default:\n return '•';\n }\n}\n\n/**\n * Escapa caracteres especiais do Markdown\n */\nexport function escaparMarkdown(texto: string): string {\n return texto.replace(/\\\\/g, '\\\\\\\\').replace(/\\*/g, '\\\\*').replace(/_/g, '\\\\_').replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)').replace(/`/g, '\\\\`');\n}\n"]}
1
+ {"version":3,"file":"markdown-exporter.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/exporters/markdown-exporter.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: 2025 Tutanus Contributors\n\n/**\n * @module cli/diagnostico/exporters/markdown-exporter\n * @description Exportador Markdown com formatação rica e tabelas\n * @see docs/REFACTOR-CLI-DIAGNOSTICAR.md - Sprint 2\n */\n\nimport type { DadosRelatorioMarkdown, MarkdownExportOptions, Ocorrencia } from '@';\n\nimport type { ArquetipoResult } from '../handlers/archetype-handler.js';\nimport type { AutoFixResult } from '../handlers/auto-fix-handler.js';\nimport type { GuardianResult } from '../handlers/guardian-handler.js';\n\n// Re-export para compatibilidade\nexport type { DadosRelatorioMarkdown, MarkdownExportOptions };\n\n// ─── Função Principal ─────────────────────────────────────────\n\n/**\n * Gera relatório Markdown formatado\n */\nexport function gerarRelatorioMarkdown(dados: DadosRelatorioMarkdown, options: Partial<MarkdownExportOptions> = {}): string {\n const opts: MarkdownExportOptions = {\n includeToc: options.includeToc ?? true,\n includeStats: options.includeStats ?? true,\n includeGuardian: options.includeGuardian ?? true,\n includeArquetipos: options.includeArquetipos ?? true,\n includeAutoFix: options.includeAutoFix ?? true,\n includeOcorrencias: options.includeOcorrencias ?? true,\n agruparPorArquivo: options.agruparPorArquivo ?? false,\n maxOcorrencias: options.maxOcorrencias,\n titulo: options.titulo ?? 'Relatório de Diagnóstico',\n subtitulo: options.subtitulo\n };\n const secoes: string[] = [];\n\n // Cabeçalho\n secoes.push(gerarCabecalho(opts.titulo ?? 'Relatório de Diagnóstico', opts.subtitulo, dados.metadata));\n\n // Índice\n if (opts.includeToc) {\n secoes.push(gerarIndice(opts, dados));\n }\n\n // Estatísticas\n if (opts.includeStats && dados.stats) {\n secoes.push(gerarSecaoStats(dados.stats, dados.linguagens));\n }\n\n // Guardian\n if (opts.includeGuardian && dados.guardian?.executado) {\n secoes.push(gerarSecaoGuardian(dados.guardian));\n }\n\n // Arquetipos\n if (opts.includeArquetipos && dados.arquetipos?.executado) {\n secoes.push(gerarSecaoArquetipos(dados.arquetipos));\n }\n\n // Auto-fix\n if (opts.includeAutoFix && dados.autoFix?.executado) {\n secoes.push(gerarSecaoAutoFix(dados.autoFix));\n }\n\n // Ocorrências\n if (opts.includeOcorrencias && dados.ocorrencias && dados.ocorrencias.length > 0) {\n secoes.push(gerarSecaoOcorrencias(dados.ocorrencias, opts));\n }\n\n // Sugestões\n if (dados.sugestoes && dados.sugestoes.length > 0) {\n secoes.push(gerarSecaoSugestoes(dados.sugestoes));\n }\n\n // Rodapé\n secoes.push(gerarRodape());\n return secoes.join('\\n\\n---\\n\\n');\n}\n\n// ─── Seções do Relatório ──────────────────────────────────────\n\nfunction gerarCabecalho(titulo: string, subtitulo?: string, metadata?: DadosRelatorioMarkdown['metadata']): string {\n let md = `# ${titulo}\\n\\n`;\n if (subtitulo) {\n md += `> ${subtitulo}\\n\\n`;\n }\n if (metadata) {\n md += `**Data**: ${new Date(metadata.timestamp).toLocaleString('pt-BR')}\\n`;\n md += `**Modo**: ${metadata.modo}\\n`;\n if (metadata.flags.length > 0) {\n md += `**Flags**: \\`${metadata.flags.join('`, `')}\\`\\n`;\n }\n }\n return md;\n}\nfunction gerarIndice(opts: MarkdownExportOptions, dados: DadosRelatorioMarkdown): string {\n const itens: string[] = [];\n if (opts.includeStats && dados.stats) {\n itens.push('- [[GRAFICO] Estatísticas](#-estatísticas)');\n }\n if (opts.includeGuardian && dados.guardian?.executado) {\n itens.push('- [[SHIELD] Guardian](#-guardian)');\n }\n if (opts.includeArquetipos && dados.arquetipos?.executado) {\n itens.push('- [[BUILD] Arquetipos](#-arquetipos)');\n }\n if (opts.includeAutoFix && dados.autoFix?.executado) {\n itens.push('- [[CHAVE-INGLESA] Auto-fix](#-auto-fix)');\n }\n if (opts.includeOcorrencias && dados.ocorrencias && dados.ocorrencias.length > 0) {\n itens.push('- [[BUSCA] Ocorrências](#-ocorrências)');\n }\n if (dados.sugestoes && dados.sugestoes.length > 0) {\n itens.push('- [[IDEIA] Sugestões](#-sugestões)');\n }\n return `## Índice\\n\\n${itens.join('\\n')}`;\n}\nfunction gerarSecaoStats(stats: NonNullable<DadosRelatorioMarkdown['stats']>, linguagens?: DadosRelatorioMarkdown['linguagens']): string {\n let md = '## [GRAFICO] Estatísticas\\n\\n';\n\n // Tabela principal\n md += '| Métrica | Valor |\\n';\n md += '|---|---|\\n';\n md += `| Arquivos analisados | ${stats.arquivosAnalisados} |\\n`;\n md += `| Arquivos com problemas | ${stats.arquivosComProblemas} |\\n`;\n md += `| Total de ocorrências | ${stats.totalOcorrencias} |\\n`;\n if (stats.tempoExecucao) {\n const tempoSeg = (stats.tempoExecucao / 1000).toFixed(2);\n md += `| Tempo de execução | ${tempoSeg}s |\\n`;\n }\n\n // Breakdown por nível\n md += '\\n### Por Nível\\n\\n';\n md += '| Nível | Quantidade |\\n';\n md += '|---|---|\\n';\n md += `| [ERRO] Erro | ${stats.porNivel.erro} |\\n`;\n md += `| [AVISO] Aviso | ${stats.porNivel.aviso} |\\n`;\n md += `| [INFO] Info | ${stats.porNivel.info} |\\n`;\n\n // Breakdown por categoria\n if (Object.keys(stats.porCategoria).length > 0) {\n md += '\\n### Por Categoria\\n\\n';\n md += '| Categoria | Quantidade |\\n';\n md += '|---|---|\\n';\n const categorias = Object.entries(stats.porCategoria).sort((arquivo, base) => base[1] - arquivo[1]).slice(0, 10); // Top 10\n\n for (const [categoria, count] of categorias) {\n md += `| ${categoria} | ${count} |\\n`;\n }\n }\n\n // Linguagens\n if (linguagens && Object.keys(linguagens.extensoes).length > 0) {\n md += '\\n### Linguagens Detectadas\\n\\n';\n md += '| Extensão | Arquivos |\\n';\n md += '|---|---|\\n';\n const extensoes = Object.entries(linguagens.extensoes).sort((arquivo, base) => base[1] - arquivo[1]).slice(0, 10); // Top 10\n\n for (const [ext, count] of extensoes) {\n md += `| .${ext} | ${count} |\\n`;\n }\n }\n return md;\n}\nfunction gerarSecaoGuardian(guardian: GuardianResult): string {\n let md = '## [SHIELD] Guardian\\n\\n';\n md += `**Status**: ${guardian.status ?? 'desconhecido'}\\n`;\n md += `**Problemas**: ${guardian.temProblemas ? '[ERRO] Detectados' : '[OK] Nenhum'}\\n\\n`;\n if (guardian.resultado?.detalhes && guardian.resultado.detalhes.length > 0) {\n md += `### Detalhes\\n\\n`;\n for (const detalhe of guardian.resultado.detalhes) {\n md += `- ${detalhe}\\n`;\n }\n md += '\\n';\n }\n if (guardian.drift && guardian.drift > 0) {\n md += `### Drift Detectado\\n\\n`;\n md += `- Mudanças: ${guardian.drift}\\n`;\n }\n return md;\n}\nfunction gerarSecaoArquetipos(arquetipos: ArquetipoResult): string {\n let md = '## [BUILD] Arquetipos\\n\\n';\n if (arquetipos.principal) {\n md += `**Arquétipo Principal**: ${arquetipos.principal.tipo}\\n`;\n md += `**Confiança**: ${(arquetipos.principal.confianca * 100).toFixed(1)}%\\n\\n`;\n }\n if (arquetipos.arquetipos && arquetipos.arquetipos.length > 1) {\n md += '### Outros Candidatos\\n\\n';\n md += '| Arquétipo | Confiança | Características |\\n';\n md += '|---|---|---|\\n';\n for (const arq of arquetipos.arquetipos.slice(1, 6)) {\n const caracteristicas = arq.caracteristicas?.slice(0, 3).join(', ') ?? '';\n md += `| ${arq.tipo} | ${(arq.confianca * 100).toFixed(1)}% | ${caracteristicas} |\\n`;\n }\n }\n if (arquetipos.salvo) {\n md += '\\n[OK] Arquétipo salvo em `tutanus.repo.arquetipo.json`\\n';\n }\n return md;\n}\nfunction gerarSecaoAutoFix(autoFix: AutoFixResult): string {\n let md = '## [CHAVE-INGLESA] Auto-fix\\n\\n';\n md += `**Modo**: ${autoFix.mode}\\n`;\n md += `**Dry-run**: ${autoFix.dryRun ? 'Sim' : 'Não'}\\n\\n`;\n md += '### Estatísticas\\n\\n';\n md += '| Métrica | Valor |\\n';\n md += '|---|---|\\n';\n md += `| Arquivos analisados | ${autoFix.stats.arquivosAnalisados} |\\n`;\n md += `| Arquivos modificados | ${autoFix.stats.arquivosModificados} |\\n`;\n md += `| Correções aplicadas | ${autoFix.stats.correcoesAplicadas} |\\n`;\n md += `| Correções sugeridas | ${autoFix.stats.correcoesSugeridas} |\\n`;\n md += `| Correções puladas | ${autoFix.stats.correcoesPuladas} |\\n`;\n if (autoFix.correcoesPorTipo && Object.keys(autoFix.correcoesPorTipo).length > 0) {\n md += '\\n### Por Tipo\\n\\n';\n md += '| Tipo | Quantidade |\\n';\n md += '|---|---|\\n';\n for (const [tipo, count] of Object.entries(autoFix.correcoesPorTipo)) {\n md += `| ${tipo} | ${count} |\\n`;\n }\n }\n return md;\n}\nfunction gerarSecaoOcorrencias(ocorrencias: Ocorrencia[], opts: MarkdownExportOptions): string {\n let md = '## [BUSCA] Ocorrências\\n\\n';\n\n // Limitar se necessário\n let lista = ocorrencias;\n if (opts.maxOcorrencias && lista.length > opts.maxOcorrencias) {\n lista = lista.slice(0, opts.maxOcorrencias);\n md += `> Mostrando ${opts.maxOcorrencias} de ${ocorrencias.length} ocorrências\\n\\n`;\n }\n if (opts.agruparPorArquivo) {\n md += gerarOcorrenciasPorArquivo(lista);\n } else {\n md += gerarTabelaOcorrencias(lista);\n }\n return md;\n}\nfunction gerarTabelaOcorrencias(ocorrencias: Ocorrencia[]): string {\n let md = '| Arquivo | Linha | Nível | Tipo | Mensagem |\\n';\n md += '|---|---|---|---|---|\\n';\n for (const ocorrencia of ocorrencias) {\n const arquivo = ocorrencia.relPath || 'desconhecido';\n const linha = ocorrencia.linha ?? '-';\n const nivel = getNivelIcon(ocorrencia.nivel || 'info');\n const tipo = ocorrencia.tipo || 'outros';\n const rawMensagem = ocorrencia.mensagem;\n const mensagemEscapada = rawMensagem.replace(/\\\\/g, '\\\\\\\\').replace(/\\|/g, '\\\\|');\n const mensagem = mensagemEscapada.slice(0, 80);\n md += `| ${arquivo} | ${linha} | ${nivel} | ${tipo} | ${mensagem} |\\n`;\n }\n return md;\n}\nfunction gerarOcorrenciasPorArquivo(ocorrencias: Ocorrencia[]): string {\n const porArquivo = new Map<string, Ocorrencia[]>();\n for (const ocorrencia of ocorrencias) {\n const arquivo = ocorrencia.relPath || 'desconhecido';\n if (!porArquivo.has(arquivo)) {\n porArquivo.set(arquivo, []);\n }\n const listaArquivo = porArquivo.get(arquivo);\n if (listaArquivo) {\n listaArquivo.push(ocorrencia);\n }\n }\n let md = '';\n for (const [arquivo, lista] of porArquivo) {\n md += `### [FILE] ${arquivo}\\n\\n`;\n for (const ocorrencia of lista) {\n const nivel = getNivelIcon(ocorrencia.nivel || 'info');\n const linha = ocorrencia.linha ? `:${ocorrencia.linha}` : '';\n md += `- ${nivel} **${ocorrencia.tipo}**${linha}: ${ocorrencia.mensagem}\\n`;\n }\n md += '\\n';\n }\n return md;\n}\nfunction gerarSecaoSugestoes(sugestoes: string[]): string {\n let md = '## [IDEIA] Sugestões\\n\\n';\n for (const sugestao of sugestoes) {\n md += `- ${sugestao}\\n`;\n }\n return md;\n}\nfunction gerarRodape(): string {\n return `---\\n\\n*Gerado por Tutanus v0.2.0 em ${new Date().toLocaleString('pt-BR')}*`;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────\n\nfunction getNivelIcon(nivel: string): string {\n switch (nivel) {\n case 'erro':\n return '[ERRO]';\n case 'aviso':\n return '[AVISO]';\n case 'info':\n return '[INFO]';\n default:\n return '•';\n }\n}\n\n/**\n * Escapa caracteres especiais do Markdown\n */\nexport function escaparMarkdown(texto: string): string {\n return texto.replace(/\\\\/g, '\\\\\\\\').replace(/\\*/g, '\\\\*').replace(/_/g, '\\\\_').replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)').replace(/`/g, '\\\\`');\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"archetype-handler.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/handlers/archetype-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * 🏗️ Arquetipo Handler\n *\n * Gerencia detecção e análise de estrutura do projeto\n * - Detecta arquetipos com timeout\n * - Identifica padrões de projeto\n * - Salva arquetipos personalizados\n * - Formata resultados\n */\n\nimport { detectarArquetipos } from '@analysts/architects';\nimport { config } from '@core/config';\nimport { messages } from '@core/messages';\n\nimport type { ArquetipoOptions, ArquetipoResult, FileEntryWithAst } from '@';\n\nconst log = messages.log;\n\n// Re-export para compatibilidade\nexport type { ArquetipoOptions, ArquetipoResult };\n\n/**\n * Timeout padrão para detecção (em ms)\n */\nconst PADRAO_TEMPO_LIMITE_MS = process.env.VITEST ? 1000 : 30000;\n\n/**\n * Executa detecção de arquetipos com timeout\n */\nexport async function executarDeteccaoArquetipos(entries: FileEntryWithAst[], baseDir: string, options: ArquetipoOptions): Promise<ArquetipoResult> {\n // Se desabilitado, retorna resultado vazio\n if (!options.enabled) {\n return {\n executado: false\n };\n }\n try {\n // Log de início (se não silencioso)\n if (!options.silent) {\n log.info(messages.MENSAGENS_ARQUETIPOS.detectando);\n }\n\n // Preparar contexto\n const ctx = {\n arquivos: entries,\n baseDir\n };\n\n // Executar detecção com timeout\n const timeoutMs = options.timeout || PADRAO_TEMPO_LIMITE_MS;\n const resultado = await executarComTimeout(detectarArquetipos(ctx, baseDir), timeoutMs);\n\n // Se timeout ou erro, retorna resultado parcial\n if (!resultado) {\n if (!options.silent) {\n log.aviso(messages.CliArquetipoHandlerMensagens.timeoutDeteccao);\n }\n return {\n executado: true,\n erro: 'timeout'\n };\n }\n\n // Processar resultado\n const arquetipos = resultado.candidatos || [];\n const principal = arquetipos.length > 0 ? arquetipos[0] : undefined; // Log de resultado (se não silencioso)\n if (!options.silent && principal) {\n log.info(messages.MENSAGENS_ARQUETIPOS.identificado(principal.nome, principal.confidence));\n if (arquetipos.length > 1) {\n log.info(messages.MENSAGENS_ARQUETIPOS.multiplos(arquetipos.length));\n }\n }\n\n // Salvar se solicitado\n let salvo = false;\n if (options.salvar && resultado) {\n salvo = await salvarArquetipo(resultado, baseDir, options.silent);\n }\n return {\n executado: true,\n arquetipos: arquetipos.map(arquivo => ({\n tipo: arquivo.nome,\n confianca: arquivo.confidence,\n caracteristicas: arquivo.matchedRequired || []\n })),\n principal: principal ? {\n tipo: principal.nome,\n confianca: principal.confidence\n } : undefined,\n salvo\n };\n } catch (erro) {\n const mensagem = erro instanceof Error ? erro.message : String(erro);\n if (!options.silent) {\n log.aviso(messages.CliArquetipoHandlerMensagens.erroDeteccao(mensagem));\n }\n\n // Em DEV_MODE, log mais detalhado\n if (config.DEV_MODE) {\n console.error(messages.CliArquetipoHandlerMensagens.devErroPrefixo, erro);\n }\n return {\n executado: true,\n erro: mensagem\n };\n }\n}\n\n/**\n * Executa função com timeout\n */\nasync function executarComTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T | undefined> {\n try {\n const timeoutPromise = new Promise<undefined>(resolve => setTimeout(() => resolve(undefined), timeoutMs));\n return await Promise.race([promise, timeoutPromise]);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Salva arquetipo personalizado\n */\nasync function salvarArquetipo(resultado: Awaited<ReturnType<typeof detectarArquetipos>>, baseDir: string, silent?: boolean): Promise<boolean> {\n try {\n if (!silent) {\n log.info(messages.MENSAGENS_ARQUETIPOS.salvando);\n }\n\n // Importação dinâmica para evitar dependências circulares\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n\n // Preparar dados do arquetipo\n const arquetipo = {\n timestamp: new Date().toISOString(),\n projeto: path.basename(baseDir),\n arquetipos: resultado.candidatos,\n baseline: resultado.baseline,\n drift: resultado.drift\n };\n\n // Salvar em arquivo\n const outputCaminho = path.join(baseDir, 'tutanus.repo.arquetipo.json');\n await fs.writeFile(outputCaminho, JSON.stringify(arquetipo, null, 2), 'utf-8');\n if (!silent) {\n log.sucesso(messages.MENSAGENS_ARQUETIPOS.salvo(outputCaminho));\n }\n return true;\n } catch (erro) {\n const mensagem = erro instanceof Error ? erro.message : String(erro);\n if (!silent) {\n log.aviso(messages.CliArquetipoHandlerMensagens.falhaSalvar(mensagem));\n }\n return false;\n }\n}\n\n/**\n * Formata resultado de arquetipos para JSON\n */\nexport function formatarArquetiposParaJson(result: ArquetipoResult): Record<string, unknown> {\n if (!result.executado) {\n return {\n executado: false\n };\n }\n if (result.erro) {\n return {\n executado: true,\n erro: result.erro\n };\n }\n return {\n executado: true,\n arquetipos: result.arquetipos || [],\n principal: result.principal || null,\n salvo: result.salvo || false\n };\n}\n\n/**\n * Gera sugestões baseadas no arquetipo detectado\n */\nexport function gerarSugestoesArquetipo(result: ArquetipoResult): string[] {\n const sugestoes: string[] = [];\n if (!result.executado || !result.principal) {\n return sugestoes;\n }\n const {\n tipo,\n confianca\n } = result.principal;\n\n // Sugestões baseadas no tipo de projeto\n switch (tipo.toLowerCase()) {\n case 'monorepo':\n sugestoes.push('[IDEIA] Monorepo detectado: considere usar filtros por workspace');\n sugestoes.push('[IDEIA] Use --include packages/* para analisar workspaces específicos');\n break;\n case 'biblioteca':\n case 'library':\n sugestoes.push('[IDEIA] Biblioteca detectada: foque em exports públicos e documentação');\n sugestoes.push('[IDEIA] Use --guardian para verificar API pública');\n break;\n case 'cli':\n case 'cli-tool':\n sugestoes.push('[IDEIA] CLI detectado: priorize testes de comandos e flags');\n break;\n case 'api':\n case 'api-rest':\n case 'api-server':\n sugestoes.push('[IDEIA] API detectada: foque em endpoints e contratos');\n sugestoes.push('[IDEIA] Considere testes de integração para rotas');\n break;\n case 'frontend':\n case 'web-app':\n sugestoes.push('[IDEIA] Frontend detectado: priorize componentes e state management');\n break;\n }\n\n // Sugestão baseada em confiança\n if (confianca < 70) {\n sugestoes.push('[AVISO] Confiança baixa na detecção: estrutura pode ser híbrida');\n sugestoes.push('[IDEIA] Use --criar-arquetipo --salvar-arquetipo para personalizar');\n }\n return sugestoes;\n}"]}
1
+ {"version":3,"file":"archetype-handler.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/handlers/archetype-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUILD] Arquetipo Handler\n *\n * Gerencia detecção e análise de estrutura do projeto\n * - Detecta arquetipos com timeout\n * - Identifica padrões de projeto\n * - Salva arquetipos personalizados\n * - Formata resultados\n */\n\nimport { detectarArquetipos } from '@analysts/architects';\nimport { config } from '@core/config';\nimport { messages } from '@core/messages';\n\nimport type { ArquetipoOptions, ArquetipoResult, FileEntryWithAst } from '@';\n\nconst log = messages.log;\n\n// Re-export para compatibilidade\nexport type { ArquetipoOptions, ArquetipoResult };\n\n/**\n * Timeout padrão para detecção (em ms)\n */\nconst PADRAO_TEMPO_LIMITE_MS = process.env.VITEST ? 1000 : 30000;\n\n/**\n * Executa detecção de arquetipos com timeout\n */\nexport async function executarDeteccaoArquetipos(entries: FileEntryWithAst[], baseDir: string, options: ArquetipoOptions): Promise<ArquetipoResult> {\n // Se desabilitado, retorna resultado vazio\n if (!options.enabled) {\n return {\n executado: false\n };\n }\n try {\n // Log de início (se não silencioso)\n if (!options.silent) {\n log.info(messages.MENSAGENS_ARQUETIPOS.detectando);\n }\n\n // Preparar contexto\n const ctx = {\n arquivos: entries,\n baseDir\n };\n\n // Executar detecção com timeout\n const timeoutMs = options.timeout || PADRAO_TEMPO_LIMITE_MS;\n const resultado = await executarComTimeout(detectarArquetipos(ctx, baseDir), timeoutMs);\n\n // Se timeout ou erro, retorna resultado parcial\n if (!resultado) {\n if (!options.silent) {\n log.aviso(messages.CliArquetipoHandlerMensagens.timeoutDeteccao);\n }\n return {\n executado: true,\n erro: 'timeout'\n };\n }\n\n // Processar resultado\n const arquetipos = resultado.candidatos || [];\n const principal = arquetipos.length > 0 ? arquetipos[0] : undefined; // Log de resultado (se não silencioso)\n if (!options.silent && principal) {\n log.info(messages.MENSAGENS_ARQUETIPOS.identificado(principal.nome, principal.confidence));\n if (arquetipos.length > 1) {\n log.info(messages.MENSAGENS_ARQUETIPOS.multiplos(arquetipos.length));\n }\n }\n\n // Salvar se solicitado\n let salvo = false;\n if (options.salvar && resultado) {\n salvo = await salvarArquetipo(resultado, baseDir, options.silent);\n }\n return {\n executado: true,\n arquetipos: arquetipos.map(arquivo => ({\n tipo: arquivo.nome,\n confianca: arquivo.confidence,\n caracteristicas: arquivo.matchedRequired || []\n })),\n principal: principal ? {\n tipo: principal.nome,\n confianca: principal.confidence\n } : undefined,\n salvo\n };\n } catch (erro) {\n const mensagem = erro instanceof Error ? erro.message : String(erro);\n if (!options.silent) {\n log.aviso(messages.CliArquetipoHandlerMensagens.erroDeteccao(mensagem));\n }\n\n // Em DEV_MODE, log mais detalhado\n if (config.DEV_MODE) {\n console.error(messages.CliArquetipoHandlerMensagens.devErroPrefixo, erro);\n }\n return {\n executado: true,\n erro: mensagem\n };\n }\n}\n\n/**\n * Executa função com timeout\n */\nasync function executarComTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T | undefined> {\n try {\n const timeoutPromise = new Promise<undefined>(resolve => setTimeout(() => resolve(undefined), timeoutMs));\n return await Promise.race([promise, timeoutPromise]);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Salva arquetipo personalizado\n */\nasync function salvarArquetipo(resultado: Awaited<ReturnType<typeof detectarArquetipos>>, baseDir: string, silent?: boolean): Promise<boolean> {\n try {\n if (!silent) {\n log.info(messages.MENSAGENS_ARQUETIPOS.salvando);\n }\n\n // Importação dinâmica para evitar dependências circulares\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n\n // Preparar dados do arquetipo\n const arquetipo = {\n timestamp: new Date().toISOString(),\n projeto: path.basename(baseDir),\n arquetipos: resultado.candidatos,\n baseline: resultado.baseline,\n drift: resultado.drift\n };\n\n // Salvar em arquivo\n const outputCaminho = path.join(baseDir, 'tutanus.repo.arquetipo.json');\n await fs.writeFile(outputCaminho, JSON.stringify(arquetipo, null, 2), 'utf-8');\n if (!silent) {\n log.sucesso(messages.MENSAGENS_ARQUETIPOS.salvo(outputCaminho));\n }\n return true;\n } catch (erro) {\n const mensagem = erro instanceof Error ? erro.message : String(erro);\n if (!silent) {\n log.aviso(messages.CliArquetipoHandlerMensagens.falhaSalvar(mensagem));\n }\n return false;\n }\n}\n\n/**\n * Formata resultado de arquetipos para JSON\n */\nexport function formatarArquetiposParaJson(result: ArquetipoResult): Record<string, unknown> {\n if (!result.executado) {\n return {\n executado: false\n };\n }\n if (result.erro) {\n return {\n executado: true,\n erro: result.erro\n };\n }\n return {\n executado: true,\n arquetipos: result.arquetipos || [],\n principal: result.principal || null,\n salvo: result.salvo || false\n };\n}\n\n/**\n * Gera sugestões baseadas no arquetipo detectado\n */\nexport function gerarSugestoesArquetipo(result: ArquetipoResult): string[] {\n const sugestoes: string[] = [];\n if (!result.executado || !result.principal) {\n return sugestoes;\n }\n const {\n tipo,\n confianca\n } = result.principal;\n\n // Sugestões baseadas no tipo de projeto\n switch (tipo.toLowerCase()) {\n case 'monorepo':\n sugestoes.push('[IDEIA] Monorepo detectado: considere usar filtros por workspace');\n sugestoes.push('[IDEIA] Use --include packages/* para analisar workspaces específicos');\n break;\n case 'biblioteca':\n case 'library':\n sugestoes.push('[IDEIA] Biblioteca detectada: foque em exports públicos e documentação');\n sugestoes.push('[IDEIA] Use --guardian para verificar API pública');\n break;\n case 'cli':\n case 'cli-tool':\n sugestoes.push('[IDEIA] CLI detectado: priorize testes de comandos e flags');\n break;\n case 'api':\n case 'api-rest':\n case 'api-server':\n sugestoes.push('[IDEIA] API detectada: foque em endpoints e contratos');\n sugestoes.push('[IDEIA] Considere testes de integração para rotas');\n break;\n case 'frontend':\n case 'web-app':\n sugestoes.push('[IDEIA] Frontend detectado: priorize componentes e state management');\n break;\n }\n\n // Sugestão baseada em confiança\n if (confianca < 70) {\n sugestoes.push('[AVISO] Confiança baixa na detecção: estrutura pode ser híbrida');\n sugestoes.push('[IDEIA] Use --criar-arquetipo --salvar-arquetipo para personalizar');\n }\n return sugestoes;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"guardian-handler.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/handlers/guardian-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * 🛡️ Guardian Handler\n *\n * Gerencia verificação de integridade do Guardian\n * - Executa scan de integridade\n * - Gerencia baseline\n * - Detecta drift\n * - Formata resultados\n */\n\nimport { messages } from '@core/messages';\nimport { scanSystemIntegrity } from '@guardian';\n\nimport type {\n FileEntry,\n GuardianOptions,\n GuardianResultadoProcessamento,\n} from '@';\nimport { IntegridadeStatus } from '@';\n\n// Re-export para compatibilidade (usando alias para nome antigo)\nexport type { GuardianOptions };\nexport type GuardianResult = GuardianResultadoProcessamento;\n\n/**\n * Executa verificação Guardian\n */\nexport async function executarGuardian(\n entries: FileEntry[],\n options: GuardianOptions,\n): Promise<GuardianResult> {\n // Se desabilitado, retorna resultado vazio\n if (!options.enabled) {\n return {\n executado: false,\n temProblemas: false,\n };\n }\n\n try {\n // Log de início (se não silencioso)\n if (!options.silent) {\n messages.logGuardian.info(messages.MENSAGENS_GUARDIAN.iniciando);\n\n if (options.fullScan) {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.fullScan}`);\n } else {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.baseline}`);\n }\n\n if (options.saveBaseline) {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.saveBaseline}`);\n }\n }\n\n // Executar scan\n const resultado = await scanSystemIntegrity(entries, {\n suppressLogs: options.silent,\n }); // Processar resultado\n const status = resultado.status || IntegridadeStatus.Ok;\n const drift = resultado.detalhes?.length || 0;\n const temProblemas = status === IntegridadeStatus.AlteracoesDetectadas;\n\n // Log de resultado (se não silencioso)\n if (!options.silent) {\n switch (status) {\n case IntegridadeStatus.Ok:\n messages.logGuardian.info(messages.MENSAGENS_GUARDIAN.status.verde);\n break;\n case IntegridadeStatus.AlteracoesDetectadas:\n messages.logGuardian.aviso(messages.MENSAGENS_GUARDIAN.status.amarelo);\n break;\n case IntegridadeStatus.Criado:\n case IntegridadeStatus.Aceito:\n messages.logGuardian.info(messages.MENSAGENS_GUARDIAN.status.verde);\n break;\n }\n\n if (drift > 0) {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.drift(drift)}`);\n }\n }\n\n return {\n executado: true,\n resultado,\n status,\n drift,\n temProblemas,\n };\n } catch (erro) {\n const mensagem = erro instanceof Error ? erro.message : String(erro);\n\n if (!options.silent) {\n messages.logGuardian.aviso(`Erro no Guardian: ${mensagem}`);\n }\n\n return {\n executado: true,\n temProblemas: true,\n };\n }\n}\n\n/**\n * Formata resultado Guardian para JSON\n */\nexport function formatarGuardianParaJson(\n result: GuardianResult,\n): Record<string, unknown> {\n if (!result.executado) {\n return {\n executado: false,\n status: 'nao-verificado',\n };\n }\n\n return {\n executado: true,\n status: result.status || 'desconhecido',\n drift: result.drift || 0,\n temProblemas: result.temProblemas,\n detalhes: result.resultado\n ? {\n status: result.resultado.status,\n detalhes: result.resultado.detalhes,\n baselineModificado: result.resultado.baselineModificado,\n }\n : undefined,\n };\n}\n\n/**\n * Determina exit code baseado no status Guardian\n */\nexport function getExitCodeGuardian(result: GuardianResult): number {\n if (!result.executado || !result.status) {\n return 0; // Não executado ou sem status = OK\n }\n\n switch (result.status) {\n case IntegridadeStatus.Ok:\n case IntegridadeStatus.Criado:\n case IntegridadeStatus.Aceito:\n return 0;\n case IntegridadeStatus.AlteracoesDetectadas:\n return 1;\n default:\n return 0;\n }\n}\n"]}
1
+ {"version":3,"file":"guardian-handler.js","sourceRoot":"","sources":["../../../../src/cli/diagnostic/handlers/guardian-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [SHIELD] Guardian Handler\n *\n * Gerencia verificação de integridade do Guardian\n * - Executa scan de integridade\n * - Gerencia baseline\n * - Detecta drift\n * - Formata resultados\n */\n\nimport { messages } from '@core/messages';\nimport { scanSystemIntegrity } from '@guardian';\n\nimport type {\n FileEntry,\n GuardianOptions,\n GuardianResultadoProcessamento,\n} from '@';\nimport { IntegridadeStatus } from '@';\n\n// Re-export para compatibilidade (usando alias para nome antigo)\nexport type { GuardianOptions };\nexport type GuardianResult = GuardianResultadoProcessamento;\n\n/**\n * Executa verificação Guardian\n */\nexport async function executarGuardian(\n entries: FileEntry[],\n options: GuardianOptions,\n): Promise<GuardianResult> {\n // Se desabilitado, retorna resultado vazio\n if (!options.enabled) {\n return {\n executado: false,\n temProblemas: false,\n };\n }\n\n try {\n // Log de início (se não silencioso)\n if (!options.silent) {\n messages.logGuardian.info(messages.MENSAGENS_GUARDIAN.iniciando);\n\n if (options.fullScan) {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.fullScan}`);\n } else {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.baseline}`);\n }\n\n if (options.saveBaseline) {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.saveBaseline}`);\n }\n }\n\n // Executar scan\n const resultado = await scanSystemIntegrity(entries, {\n suppressLogs: options.silent,\n }); // Processar resultado\n const status = resultado.status || IntegridadeStatus.Ok;\n const drift = resultado.detalhes?.length || 0;\n const temProblemas = status === IntegridadeStatus.AlteracoesDetectadas;\n\n // Log de resultado (se não silencioso)\n if (!options.silent) {\n switch (status) {\n case IntegridadeStatus.Ok:\n messages.logGuardian.info(messages.MENSAGENS_GUARDIAN.status.verde);\n break;\n case IntegridadeStatus.AlteracoesDetectadas:\n messages.logGuardian.aviso(messages.MENSAGENS_GUARDIAN.status.amarelo);\n break;\n case IntegridadeStatus.Criado:\n case IntegridadeStatus.Aceito:\n messages.logGuardian.info(messages.MENSAGENS_GUARDIAN.status.verde);\n break;\n }\n\n if (drift > 0) {\n messages.logGuardian.info(` ${messages.MENSAGENS_GUARDIAN.drift(drift)}`);\n }\n }\n\n return {\n executado: true,\n resultado,\n status,\n drift,\n temProblemas,\n };\n } catch (erro) {\n const mensagem = erro instanceof Error ? erro.message : String(erro);\n\n if (!options.silent) {\n messages.logGuardian.aviso(`Erro no Guardian: ${mensagem}`);\n }\n\n return {\n executado: true,\n temProblemas: true,\n };\n }\n}\n\n/**\n * Formata resultado Guardian para JSON\n */\nexport function formatarGuardianParaJson(\n result: GuardianResult,\n): Record<string, unknown> {\n if (!result.executado) {\n return {\n executado: false,\n status: 'nao-verificado',\n };\n }\n\n return {\n executado: true,\n status: result.status || 'desconhecido',\n drift: result.drift || 0,\n temProblemas: result.temProblemas,\n detalhes: result.resultado\n ? {\n status: result.resultado.status,\n detalhes: result.resultado.detalhes,\n baselineModificado: result.resultado.baselineModificado,\n }\n : undefined,\n };\n}\n\n/**\n * Determina exit code baseado no status Guardian\n */\nexport function getExitCodeGuardian(result: GuardianResult): number {\n if (!result.executado || !result.status) {\n return 0; // Não executado ou sem status = OK\n }\n\n switch (result.status) {\n case IntegridadeStatus.Ok:\n case IntegridadeStatus.Criado:\n case IntegridadeStatus.Aceito:\n return 0;\n case IntegridadeStatus.AlteracoesDetectadas:\n return 1;\n default:\n return 0;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"processing-diagnostic.d.ts","sourceRoot":"","sources":["../../../src/cli/diagnostic/processing-diagnostic.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwM,KAAK,8BAA8B,EAA+C,KAAK,iCAAiC,EAA6B,MAAM,GAAG,CAAC;AA0C9W,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAmSxE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAyF3H;AAw3CD,YAAY,EAAE,iCAAiC,EAAE,MAAM,GAAG,CAAC"}
1
+ {"version":3,"file":"processing-diagnostic.d.ts","sourceRoot":"","sources":["../../../src/cli/diagnostic/processing-diagnostic.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwM,KAAK,8BAA8B,EAA+C,KAAK,iCAAiC,EAA6B,MAAM,GAAG,CAAC;AA0C9W,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAmSxE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAyF3H;AAu3CD,YAAY,EAAE,iCAAiC,EAAE,MAAM,GAAG,CAAC"}
@@ -502,7 +502,6 @@ async function processarDiagnosticoInterno(opts) {
502
502
  catch (erro) {
503
503
  throw erro;
504
504
  }
505
- throw new Error(messages.ExcecoesMensagens.exit1);
506
505
  }
507
506
  }
508
507
  else {
@@ -662,7 +661,7 @@ async function processarDiagnosticoInterno(opts) {
662
661
  const tipo = String(item.tipo || '');
663
662
  if (tipo.startsWith('tipo-inseguro')) {
664
663
  item.nivel = 'aviso';
665
- item.mensagem = `${item.mensagem} | 🤝 Conciliação: inferência e tipagem explícita em conflito; revisar caso`;
664
+ item.mensagem = `${item.mensagem} | Conciliação: inferência e tipagem explícita em conflito; revisar caso`;
666
665
  }
667
666
  }
668
667
  }
@@ -795,7 +794,7 @@ async function processarDiagnosticoInterno(opts) {
795
794
  });
796
795
  log.info(messages.CliProcessamentoDiagnosticoMensagens.porSeveridadeTitulo);
797
796
  Array.from(nivelOcorrencias.entries()).sort((arquivo, base) => base[1] - arquivo[1]).forEach(([nivel, count]) => {
798
- const emoji = nivel === 'erro' ? '🔴' : nivel === 'aviso' ? '🟡' : '🔵';
797
+ const emoji = nivel === 'erro' ? '[RED]' : nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';
799
798
  log.info(messages.CliProcessamentoDiagnosticoMensagens.porSeveridadeLinha(emoji, nivel, count));
800
799
  });
801
800
  try {