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
@@ -1 +1 @@
1
- {"version":3,"file":"push-report.js","sourceRoot":"","sources":["../../../../src/app/github/push-analysis/push-report.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { getMessages } from '@core/messages';\n\nimport type { AnalysisReportContext, FullAnalysisResult } from '../../../types/github/app.js';\n\nexport type { AnalysisReportContext };\n\n/** @deprecated use AnalysisReportContext */\nexport type PushReportContext = AnalysisReportContext;\n\nconst MAX_LISTADAS = 200;\nconst MAX_DETALHE_COMENTARIO = 12000;\n\nfunction rotuloScore(score: number): string {\n return getMessages().GithubPushReportMensagens.scoreLabel(score);\n}\n\nexport function gerarTituloPrRelatorio(branch: string, score: number, baseRef?: string): string {\n const estado = rotuloScore(score);\n const sufixo = baseRef ? `${branch} → ${baseRef}` : branch;\n return `${getMessages().GithubPushReportMensagens.rotuloScoreNome} (${estado}) — ${sufixo}`;\n}\n\nexport function gerarRelatorioMarkdown(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalArquivos' | 'totalOcorrencias' | 'duracaoMs' | 'ocorrencias' | 'resumoPorSeveridade' | 'resumoPorTipo'\n >,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const sev = resultado.resumoPorSeveridade;\n const origemLabel = ctx.origem === 'pull_request' || ctx.baseRef\n ? `PR → \\`${ctx.baseRef}\\` … \\`${ctx.branch}\\``\n : `branch \\`${ctx.branch}\\``;\n\n let md = `# Diagnóstico Tutanus\n\n**Repositório:** \\`${ctx.owner}/${ctx.repo}\\` \n**Escopo:** ${origemLabel} \n**Score geral:** ${resultado.scoreGeral}/100 (${rotuloScore(resultado.scoreGeral)}) \n**Commit:** \\`${shaCurto}\\` \n**Mensagem:** ${ctx.commitMessage.replace(/\\n/g, ' ')} \n**Arquivos no projeto:** ${resultado.totalArquivos} \n**Ocorrências:** ${resultado.totalOcorrencias} \n**Duração:** ${(resultado.duracaoMs / 1000).toFixed(1)} s\n`;\n\n if (ctx.escopoIncremental && ctx.arquivosAlterados && ctx.arquivosAlterados.length > 0) {\n md += `\\n## Arquivos no escopo (${ctx.arquivosAlterados.length})\\n\\n`;\n md += ctx.arquivosAlterados.slice(0, 40).map(f => `- \\`${f}\\``).join('\\n');\n if (ctx.arquivosAlterados.length > 40) {\n md += getMessages().GithubPushReportMensagens.maisArquivos(ctx.arquivosAlterados.length - 40);\n }\n md += '\\n';\n }\n\n md += `\\n## Resumo por severidade\\n\\n| Nível | Quantidade |\\n|-------|------------|\\n`;\n for (const [nivel, qtd] of Object.entries(sev).sort()) {\n md += `| ${nivel} | ${qtd} |\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n md += `\\n## Resumo por tipo\\n\\n| Tipo | Quantidade |\\n|------|------------|\\n`;\n for (const [tipo, qtd] of Object.entries(resultado.resumoPorTipo).sort((a, b) => b[1] - a[1]).slice(0, 15)) {\n md += `| ${tipo} | ${qtd} |\\n`;\n }\n }\n\n md += `\\n## Ocorrências\\n\\n`;\n if (resultado.ocorrencias.length === 0) {\n md += getMessages().GithubPushReportMensagens.nenhumaOcorrencia;\n } else {\n for (const o of resultado.ocorrencias.slice(0, MAX_LISTADAS)) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? ` — _${o.sugestao}_` : '';\n md += `- **${(o.nivel || 'info').toUpperCase()}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > MAX_LISTADAS) {\n md += getMessages().GithubPushReportMensagens.maisOcorrencias(resultado.ocorrencias.length - MAX_LISTADAS);\n }\n }\n\n md += `\\n---\\n\\n_Relatório gerado pelo [Tutanus](https://github.com/anomalyco/tutanus) via GitHub App._\\n`;\n return md;\n}\n\n/** @deprecated use gerarRelatorioMarkdown */\nexport const gerarRelatorioPushMarkdown = gerarRelatorioMarkdown;\n\nfunction rotuloSeveridade(nivel: string): string {\n const map: Record<string, string> = {\n erro: 'ERRO',\n aviso: 'AVISO',\n info: 'INFO',\n sugestao: 'SUGESTAO'\n };\n return map[nivel.toLowerCase()] ?? 'INFO';\n}\n\nfunction explicarSeveridade(nivel: string): string {\n return getMessages().GithubPushReportMensagens.explicarSeveridade(nivel);\n}\n\nfunction agruparOcorrenciasPorArquivo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ relPath: string; count: number; erros: number; avisos: number }> {\n const map = new Map<string, { count: number; erros: number; avisos: number }>();\n for (const o of ocorrencias) {\n const entry = map.get(o.relPath) ?? { count: 0, erros: 0, avisos: 0 };\n entry.count++;\n if (o.nivel === 'erro') entry.erros++;\n if (o.nivel === 'aviso') entry.avisos++;\n map.set(o.relPath, entry);\n }\n return Array.from(map.entries())\n .map(([relPath, data]) => ({ relPath, ...data }))\n .sort((a, b) => b.count - a.count);\n}\n\nfunction extrairSugestoes(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> {\n return ocorrencias\n .filter((o): o is typeof o & { sugestao: string } => !!o.sugestao)\n .slice(0, 20)\n .map(o => ({\n mensagem: o.mensagem,\n relPath: o.relPath,\n linha: o.linha,\n sugestao: o.sugestao,\n nivel: o.nivel\n }));\n}\n\nfunction agruparSugestoesPorTipo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ tipo: string; count: number; sugestoes: Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> }> {\n const sugestoes = extrairSugestoes(ocorrencias);\n const map = new Map<string, Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }>>();\n for (const s of sugestoes) {\n const tipo = s.nivel || 'info';\n const arr = map.get(tipo) ?? [];\n arr.push(s);\n map.set(tipo, arr);\n }\n return Array.from(map.entries())\n .map(([tipo, sugestoes]) => ({ tipo, count: sugestoes.length, sugestoes }))\n .sort((a, b) => b.count - a.count);\n}\n\nexport function gerarCorpoPrRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n let body = `## Diagnóstico Tutanus — ${rotulo}\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n const msgs = getMessages().GithubPushReportMensagens;\n if (resultado.scoreGeral >= 80) {\n body += msgs.qualidadeOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += msgs.qualidadeAtencao;\n } else {\n body += msgs.qualidadeCritico;\n }\n\n body += `### Resumo da análise\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Arquivos no projeto | **${resultado.totalArquivos}** |\n| Tempo de análise | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n body += `### Principais problemas encontrados\\n\\n`;\n\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n if (infos > 0) {\n body += `#### Informações / Sugestões (${infos})\\n\\n${explicarSeveridade('info')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const primeirosProblemas = resultado.ocorrencias.slice(0, 10);\n body += `#### Exemplos\\n\\n`;\n for (const o of primeirosProblemas) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 10) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 10} ocorrência(s). Veja o relatório completo abaixo.*\\n`;\n }\n body += `\\n`;\n }\n\n const arquivosAgrupados = agruparOcorrenciasPorArquivo(resultado.ocorrencias);\n if (arquivosAgrupados.length > 0) {\n const topArquivos = arquivosAgrupados.slice(0, 5);\n body += `#### Arquivos com mais ocorrências\\n\\n`;\n body += `| Arquivo | Total | Erros | Avisos |\\n`;\n body += `|---------|-------|-------|--------|\\n`;\n for (const f of topArquivos) {\n body += `| \\`${f.relPath}\\` | ${f.count} | ${f.erros} | ${f.avisos} |\\n`;\n }\n body += `\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n const topTipos = Object.entries(resultado.resumoPorTipo)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 8);\n body += `#### Tipos de ocorrência mais frequentes\\n\\n`;\n for (const [tipo, qtd] of topTipos) {\n body += `- **${tipo}**: ${qtd} ocorrência(s)\\n`;\n }\n body += `\\n`;\n }\n\n const sugestoesAgrupadas = agruparSugestoesPorTipo(resultado.ocorrencias);\n if (sugestoesAgrupadas.length > 0) {\n const totalSugestoes = sugestoesAgrupadas.reduce((s, g) => s + g.count, 0);\n body += `#### Sugestões (${totalSugestoes})\\n\\n`;\n body += `O Tutanus identificou as seguintes sugestões de melhoria:\\n\\n`;\n for (const grupo of sugestoesAgrupadas) {\n body += `<details>\\n<summary><strong>${rotuloSeveridade(grupo.tipo)}</strong> — ${grupo.count} sugestão(ões)</summary>\\n\\n`;\n for (const s of grupo.sugestoes) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > 💡 ${s.sugestao}\\n\\n`;\n }\n body += `</details>\\n\\n`;\n }\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nO código analisado não apresentou ocorrências.\\n\\n`;\n }\n\n body += `### Ações recomendadas\\n\\n`;\n body += `1. Revise os erros — são os que têm maior impacto na qualidade e segurança\\n`;\n body += `2. Analise os avisos — podem indicar bugs latentes ou dívida técnica\\n`;\n body += `3. Considere as sugestões — melhoram manutenibilidade e performance\\n`;\n body += `4. Consulte os comentários inline — cada ocorrência tem uma sugestão prática\\n\\n`;\n\n const alvo = ctx.baseRef ? `\\`${ctx.baseRef}\\`` : 'produção';\n body += `### Sobre esta análise\\n\\n`;\n body += `Esta análise foi executada automaticamente pelo **GitHub App Tutanus** no servidor do app. `;\n body += `Não depende de workflows ou configurações no seu repositório. `;\n body += `Cada novo push em \\`${ctx.branch}\\` atualiza este diagnóstico. O PR propõe a fusão em ${alvo}.\\n\\n`;\n\n const relatorioCompleto = gerarRelatorioMarkdown(resultado as FullAnalysisResult, ctx);\n let detalhe = relatorioCompleto;\n if (detalhe.length > 60000) {\n detalhe = `${detalhe.slice(0, 60000)}\\n\\n_… relatório truncado devido ao tamanho._`;\n }\n body += `<details>\\n<summary><strong>Relatório detalhado (completo)</strong></summary>\\n\\n${detalhe}\\n\\n</details>\\n\\n`;\n\n body += `---\\n\\n<sub>PR automático · [Tutanus](https://github.com/anomalyco/tutanus) — análise em ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\nexport function gerarCorpoPrAnalise(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n let body = `## Análise do PR — \\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n if (resultado.scoreGeral >= 80) {\n body += getMessages().GithubPushReportMensagens.prQualityOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += getMessages().GithubPushReportMensagens.prQualityAtencao;\n } else {\n body += getMessages().GithubPushReportMensagens.prQualityCritico;\n }\n\n body += `### Resumo\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Duração | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const exemplos = resultado.ocorrencias.slice(0, 5);\n body += `#### Exemplos\\n\\n`;\n for (const o of exemplos) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 5) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 5} ocorrência(s). Veja os comentários inline.*\\n`;\n }\n body += `\\n`;\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nEste PR não apresentou ocorrências.\\n\\n`;\n }\n\n body += `---\\n\\n`;\n body += `<sub>Análise via [Tutanus](https://github.com/anomalyco/tutanus) — ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\n/** @deprecated use gerarCorpoPrRelatorio */\nexport const gerarCorpoPrPush = gerarCorpoPrRelatorio;\n\nexport function gerarComentarioAtualizacaoRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'resumoPorSeveridade' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const estado = rotuloScore(resultado.scoreGeral);\n const sugestoes = extrairSugestoes(resultado.ocorrencias || []);\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n\n let body = `## Diagnóstico atualizado — \\`${shaCurto}\\`\n\nNovo commit recebido em ${rotulo} (\\`${shaCurto}\\`). O relatório foi atualizado com os dados mais recentes.\n\n| Métrica | Valor |\n|---------|-------|\n| Score | **${resultado.scoreGeral}/100** (${estado}) |\n| Ocorrências | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n\n`;\n\n if (sugestoes.length > 0) {\n body += `### Sugestões disponíveis (${sugestoes.length})\\n\\n`;\n for (const s of sugestoes.slice(0, 10)) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > 💡 ${s.sugestao}\\n\\n`;\n }\n if (sugestoes.length > 10) {\n body += `*… e mais ${sugestoes.length - 10} sugestão(ões).*\\n\\n`;\n }\n }\n\n body += `> A descrição deste PR contém o diagnóstico completo atualizado. Revise as sugestões acima.`;\n return body;\n}\n\n/** @deprecated */\nexport const gerarComentarioAtualizacaoPush = gerarComentarioAtualizacaoRelatorio;\n\nexport function gerarComentarioPrAnalise(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade'\n >,\n ctx: AnalysisReportContext,\n relatorioCompleto: string\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s) neste PR`\n : 'repositório completo';\n\n let detalhe = relatorioCompleto;\n if (detalhe.length > MAX_DETALHE_COMENTARIO) {\n detalhe = `${detalhe.slice(0, MAX_DETALHE_COMENTARIO)}\\n\\n_… relatório truncado. Consulte os comentários inline._`;\n }\n\n return `## Diagnóstico Tutanus\n\nAnálise do PR${ctx.prNumber ? ` #${ctx.prNumber}` : ''} (\\`${ctx.baseRef}\\` ← \\`${ctx.branch}\\`, \\`${shaCurto}\\`).\n\n**Estado:** ${estado} · **Score:** ${resultado.scoreGeral}/100 · **Escopo:** ${escopo}\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências | ${resultado.totalOcorrencias} |\n| Erros | ${erros} |\n| Avisos | ${avisos} |\n| Arquivos no projeto | ${resultado.totalArquivos} |\n| Duração | ${(resultado.duracaoMs / 1000).toFixed(1)} s |\n\nComentários inline foram adicionados nos principais achados.\n\n<details>\n<summary><strong>Relatório completo (markdown)</strong></summary>\n\n${detalhe}\n\n</details>\n\n---\n\n<sub>Análise via GitHub App · [Tutanus](https://github.com/anomalyco/tutanus)</sub>`;\n}\n\nexport function gerarResumoReviewPr(totalOcorrencias: number, comentariosInline: number): string {\n return `## Revisão Tutanus\n\nForam publicados **${comentariosInline}** comentário(s) inline (${totalOcorrencias} ocorrência(s) no escopo).\n\nRevise as sugestões nos arquivos alterados.`;\n}\n"]}
1
+ {"version":3,"file":"push-report.js","sourceRoot":"","sources":["../../../../src/app/github/push-analysis/push-report.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { getMessages } from '@core/messages';\n\nimport type { AnalysisReportContext, FullAnalysisResult } from '../../../types/github/app.js';\n\nexport type { AnalysisReportContext };\n\n/** @deprecated use AnalysisReportContext */\nexport type PushReportContext = AnalysisReportContext;\n\nconst MAX_LISTADAS = 200;\nconst MAX_DETALHE_COMENTARIO = 12000;\n\nfunction rotuloScore(score: number): string {\n return getMessages().GithubPushReportMensagens.scoreLabel(score);\n}\n\nexport function gerarTituloPrRelatorio(branch: string, score: number, baseRef?: string): string {\n const estado = rotuloScore(score);\n const sufixo = baseRef ? `${branch} → ${baseRef}` : branch;\n return `${getMessages().GithubPushReportMensagens.rotuloScoreNome} (${estado}) — ${sufixo}`;\n}\n\nexport function gerarRelatorioMarkdown(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalArquivos' | 'totalOcorrencias' | 'duracaoMs' | 'ocorrencias' | 'resumoPorSeveridade' | 'resumoPorTipo'\n >,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const sev = resultado.resumoPorSeveridade;\n const origemLabel = ctx.origem === 'pull_request' || ctx.baseRef\n ? `PR → \\`${ctx.baseRef}\\` … \\`${ctx.branch}\\``\n : `branch \\`${ctx.branch}\\``;\n\n let md = `# Diagnóstico Tutanus\n\n**Repositório:** \\`${ctx.owner}/${ctx.repo}\\` \n**Escopo:** ${origemLabel} \n**Score geral:** ${resultado.scoreGeral}/100 (${rotuloScore(resultado.scoreGeral)}) \n**Commit:** \\`${shaCurto}\\` \n**Mensagem:** ${ctx.commitMessage.replace(/\\n/g, ' ')} \n**Arquivos no projeto:** ${resultado.totalArquivos} \n**Ocorrências:** ${resultado.totalOcorrencias} \n**Duração:** ${(resultado.duracaoMs / 1000).toFixed(1)} s\n`;\n\n if (ctx.escopoIncremental && ctx.arquivosAlterados && ctx.arquivosAlterados.length > 0) {\n md += `\\n## Arquivos no escopo (${ctx.arquivosAlterados.length})\\n\\n`;\n md += ctx.arquivosAlterados.slice(0, 40).map(f => `- \\`${f}\\``).join('\\n');\n if (ctx.arquivosAlterados.length > 40) {\n md += getMessages().GithubPushReportMensagens.maisArquivos(ctx.arquivosAlterados.length - 40);\n }\n md += '\\n';\n }\n\n md += `\\n## Resumo por severidade\\n\\n| Nível | Quantidade |\\n|-------|------------|\\n`;\n for (const [nivel, qtd] of Object.entries(sev).sort()) {\n md += `| ${nivel} | ${qtd} |\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n md += `\\n## Resumo por tipo\\n\\n| Tipo | Quantidade |\\n|------|------------|\\n`;\n for (const [tipo, qtd] of Object.entries(resultado.resumoPorTipo).sort((a, b) => b[1] - a[1]).slice(0, 15)) {\n md += `| ${tipo} | ${qtd} |\\n`;\n }\n }\n\n md += `\\n## Ocorrências\\n\\n`;\n if (resultado.ocorrencias.length === 0) {\n md += getMessages().GithubPushReportMensagens.nenhumaOcorrencia;\n } else {\n for (const o of resultado.ocorrencias.slice(0, MAX_LISTADAS)) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? ` — _${o.sugestao}_` : '';\n md += `- **${(o.nivel || 'info').toUpperCase()}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > MAX_LISTADAS) {\n md += getMessages().GithubPushReportMensagens.maisOcorrencias(resultado.ocorrencias.length - MAX_LISTADAS);\n }\n }\n\n md += `\\n---\\n\\n_Relatório gerado pelo [Tutanus](https://github.com/anomalyco/tutanus) via GitHub App._\\n`;\n return md;\n}\n\n/** @deprecated use gerarRelatorioMarkdown */\nexport const gerarRelatorioPushMarkdown = gerarRelatorioMarkdown;\n\nfunction rotuloSeveridade(nivel: string): string {\n const map: Record<string, string> = {\n erro: 'ERRO',\n aviso: 'AVISO',\n info: 'INFO',\n sugestao: 'SUGESTAO'\n };\n return map[nivel.toLowerCase()] ?? 'INFO';\n}\n\nfunction explicarSeveridade(nivel: string): string {\n return getMessages().GithubPushReportMensagens.explicarSeveridade(nivel);\n}\n\nfunction agruparOcorrenciasPorArquivo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ relPath: string; count: number; erros: number; avisos: number }> {\n const map = new Map<string, { count: number; erros: number; avisos: number }>();\n for (const o of ocorrencias) {\n const entry = map.get(o.relPath) ?? { count: 0, erros: 0, avisos: 0 };\n entry.count++;\n if (o.nivel === 'erro') entry.erros++;\n if (o.nivel === 'aviso') entry.avisos++;\n map.set(o.relPath, entry);\n }\n return Array.from(map.entries())\n .map(([relPath, data]) => ({ relPath, ...data }))\n .sort((a, b) => b.count - a.count);\n}\n\nfunction extrairSugestoes(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> {\n return ocorrencias\n .filter((o): o is typeof o & { sugestao: string } => !!o.sugestao)\n .slice(0, 20)\n .map(o => ({\n mensagem: o.mensagem,\n relPath: o.relPath,\n linha: o.linha,\n sugestao: o.sugestao,\n nivel: o.nivel\n }));\n}\n\nfunction agruparSugestoesPorTipo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ tipo: string; count: number; sugestoes: Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> }> {\n const sugestoes = extrairSugestoes(ocorrencias);\n const map = new Map<string, Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }>>();\n for (const s of sugestoes) {\n const tipo = s.nivel || 'info';\n const arr = map.get(tipo) ?? [];\n arr.push(s);\n map.set(tipo, arr);\n }\n return Array.from(map.entries())\n .map(([tipo, sugestoes]) => ({ tipo, count: sugestoes.length, sugestoes }))\n .sort((a, b) => b.count - a.count);\n}\n\nexport function gerarCorpoPrRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n let body = `## Diagnóstico Tutanus — ${rotulo}\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n const msgs = getMessages().GithubPushReportMensagens;\n if (resultado.scoreGeral >= 80) {\n body += msgs.qualidadeOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += msgs.qualidadeAtencao;\n } else {\n body += msgs.qualidadeCritico;\n }\n\n body += `### Resumo da análise\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Arquivos no projeto | **${resultado.totalArquivos}** |\n| Tempo de análise | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n body += `### Principais problemas encontrados\\n\\n`;\n\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n if (infos > 0) {\n body += `#### Informações / Sugestões (${infos})\\n\\n${explicarSeveridade('info')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const primeirosProblemas = resultado.ocorrencias.slice(0, 10);\n body += `#### Exemplos\\n\\n`;\n for (const o of primeirosProblemas) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 10) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 10} ocorrência(s). Veja o relatório completo abaixo.*\\n`;\n }\n body += `\\n`;\n }\n\n const arquivosAgrupados = agruparOcorrenciasPorArquivo(resultado.ocorrencias);\n if (arquivosAgrupados.length > 0) {\n const topArquivos = arquivosAgrupados.slice(0, 5);\n body += `#### Arquivos com mais ocorrências\\n\\n`;\n body += `| Arquivo | Total | Erros | Avisos |\\n`;\n body += `|---------|-------|-------|--------|\\n`;\n for (const f of topArquivos) {\n body += `| \\`${f.relPath}\\` | ${f.count} | ${f.erros} | ${f.avisos} |\\n`;\n }\n body += `\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n const topTipos = Object.entries(resultado.resumoPorTipo)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 8);\n body += `#### Tipos de ocorrência mais frequentes\\n\\n`;\n for (const [tipo, qtd] of topTipos) {\n body += `- **${tipo}**: ${qtd} ocorrência(s)\\n`;\n }\n body += `\\n`;\n }\n\n const sugestoesAgrupadas = agruparSugestoesPorTipo(resultado.ocorrencias);\n if (sugestoesAgrupadas.length > 0) {\n const totalSugestoes = sugestoesAgrupadas.reduce((s, g) => s + g.count, 0);\n body += `#### Sugestões (${totalSugestoes})\\n\\n`;\n body += `O Tutanus identificou as seguintes sugestões de melhoria:\\n\\n`;\n for (const grupo of sugestoesAgrupadas) {\n body += `<details>\\n<summary><strong>${rotuloSeveridade(grupo.tipo)}</strong> — ${grupo.count} sugestão(ões)</summary>\\n\\n`;\n for (const s of grupo.sugestoes) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > [IDEA] ${s.sugestao}\\n\\n`;\n }\n body += `</details>\\n\\n`;\n }\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nO código analisado não apresentou ocorrências.\\n\\n`;\n }\n\n body += `### Ações recomendadas\\n\\n`;\n body += `1. Revise os erros — são os que têm maior impacto na qualidade e segurança\\n`;\n body += `2. Analise os avisos — podem indicar bugs latentes ou dívida técnica\\n`;\n body += `3. Considere as sugestões — melhoram manutenibilidade e performance\\n`;\n body += `4. Consulte os comentários inline — cada ocorrência tem uma sugestão prática\\n\\n`;\n\n const alvo = ctx.baseRef ? `\\`${ctx.baseRef}\\`` : 'produção';\n body += `### Sobre esta análise\\n\\n`;\n body += `Esta análise foi executada automaticamente pelo **GitHub App Tutanus** no servidor do app. `;\n body += `Não depende de workflows ou configurações no seu repositório. `;\n body += `Cada novo push em \\`${ctx.branch}\\` atualiza este diagnóstico. O PR propõe a fusão em ${alvo}.\\n\\n`;\n\n const relatorioCompleto = gerarRelatorioMarkdown(resultado as FullAnalysisResult, ctx);\n let detalhe = relatorioCompleto;\n if (detalhe.length > 60000) {\n detalhe = `${detalhe.slice(0, 60000)}\\n\\n_… relatório truncado devido ao tamanho._`;\n }\n body += `<details>\\n<summary><strong>Relatório detalhado (completo)</strong></summary>\\n\\n${detalhe}\\n\\n</details>\\n\\n`;\n\n body += `---\\n\\n<sub>PR automático · [Tutanus](https://github.com/anomalyco/tutanus) — análise em ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\nexport function gerarCorpoPrAnalise(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n let body = `## Análise do PR — \\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n if (resultado.scoreGeral >= 80) {\n body += getMessages().GithubPushReportMensagens.prQualityOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += getMessages().GithubPushReportMensagens.prQualityAtencao;\n } else {\n body += getMessages().GithubPushReportMensagens.prQualityCritico;\n }\n\n body += `### Resumo\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Duração | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const exemplos = resultado.ocorrencias.slice(0, 5);\n body += `#### Exemplos\\n\\n`;\n for (const o of exemplos) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 5) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 5} ocorrência(s). Veja os comentários inline.*\\n`;\n }\n body += `\\n`;\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nEste PR não apresentou ocorrências.\\n\\n`;\n }\n\n body += `---\\n\\n`;\n body += `<sub>Análise via [Tutanus](https://github.com/anomalyco/tutanus) — ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\n/** @deprecated use gerarCorpoPrRelatorio */\nexport const gerarCorpoPrPush = gerarCorpoPrRelatorio;\n\nexport function gerarComentarioAtualizacaoRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'resumoPorSeveridade' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const estado = rotuloScore(resultado.scoreGeral);\n const sugestoes = extrairSugestoes(resultado.ocorrencias || []);\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n\n let body = `## Diagnóstico atualizado — \\`${shaCurto}\\`\n\nNovo commit recebido em ${rotulo} (\\`${shaCurto}\\`). O relatório foi atualizado com os dados mais recentes.\n\n| Métrica | Valor |\n|---------|-------|\n| Score | **${resultado.scoreGeral}/100** (${estado}) |\n| Ocorrências | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n\n`;\n\n if (sugestoes.length > 0) {\n body += `### Sugestões disponíveis (${sugestoes.length})\\n\\n`;\n for (const s of sugestoes.slice(0, 10)) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > [IDEA] ${s.sugestao}\\n\\n`;\n }\n if (sugestoes.length > 10) {\n body += `*… e mais ${sugestoes.length - 10} sugestão(ões).*\\n\\n`;\n }\n }\n\n body += `> A descrição deste PR contém o diagnóstico completo atualizado. Revise as sugestões acima.`;\n return body;\n}\n\n/** @deprecated */\nexport const gerarComentarioAtualizacaoPush = gerarComentarioAtualizacaoRelatorio;\n\nexport function gerarComentarioPrAnalise(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade'\n >,\n ctx: AnalysisReportContext,\n relatorioCompleto: string\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s) neste PR`\n : 'repositório completo';\n\n let detalhe = relatorioCompleto;\n if (detalhe.length > MAX_DETALHE_COMENTARIO) {\n detalhe = `${detalhe.slice(0, MAX_DETALHE_COMENTARIO)}\\n\\n_… relatório truncado. Consulte os comentários inline._`;\n }\n\n return `## Diagnóstico Tutanus\n\nAnálise do PR${ctx.prNumber ? ` #${ctx.prNumber}` : ''} (\\`${ctx.baseRef}\\` ← \\`${ctx.branch}\\`, \\`${shaCurto}\\`).\n\n**Estado:** ${estado} · **Score:** ${resultado.scoreGeral}/100 · **Escopo:** ${escopo}\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências | ${resultado.totalOcorrencias} |\n| Erros | ${erros} |\n| Avisos | ${avisos} |\n| Arquivos no projeto | ${resultado.totalArquivos} |\n| Duração | ${(resultado.duracaoMs / 1000).toFixed(1)} s |\n\nComentários inline foram adicionados nos principais achados.\n\n<details>\n<summary><strong>Relatório completo (markdown)</strong></summary>\n\n${detalhe}\n\n</details>\n\n---\n\n<sub>Análise via GitHub App · [Tutanus](https://github.com/anomalyco/tutanus)</sub>`;\n}\n\nexport function gerarResumoReviewPr(totalOcorrencias: number, comentariosInline: number): string {\n return `## Revisão Tutanus\n\nForam publicados **${comentariosInline}** comentário(s) inline (${totalOcorrencias} ocorrência(s) no escopo).\n\nRevise as sugestões nos arquivos alterados.`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AA2IA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAqF7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AA2IA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA0F7C"}
package/dist/bin/index.js CHANGED
@@ -184,6 +184,11 @@ export async function mainCli() {
184
184
  }
185
185
  program.exitOverride((err) => {
186
186
  const code = err?.code || '';
187
+ const isSaidaNormal = code === 'commander.help' || code === 'commander.helpDisplayed' || code === 'commander.version';
188
+ if (isSaidaNormal) {
189
+ sair(ExitCode.Ok);
190
+ return;
191
+ }
187
192
  const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';
188
193
  if (isUsoInvalido) {
189
194
  console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-permissivo-object tipo-inseguro-unknown\n// Justificativa: Object.keys é chamada de API, não tipo. unknown em catch handlers é intencional.\nimport { realpathSync } from 'node:fs';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { registrarComandos } from '@cli';\nimport { comandoPerf } from '@cli/commands';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarConfigParcial, chalk, config, inicializarConfigDinamica } from '@core/config';\nimport { getMessages, ICONES_NIVEL } from '@core/messages';\nimport type { ConversationMemory } from '@shared';\nimport { getDefaultMemory } from '@shared';\nimport { lerArquivoTexto } from '@shared/persistence';\nimport type { CommanderError } from 'commander';\nimport { Command } from 'commander';\n\nimport type { ErrorLike } from '@';\nimport { extrairMensagemErro } from '@';\n\nconst {\n log,\n CliBinMensagens\n} = getMessages();\n\n// caminho do módulo (usado para localizar arquivos de configuração)\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction hasStack(err: unknown): err is { stack: string } {\n return typeof err === 'object' && err !== null && 'stack' in err;\n}\n\nfunction logErroStack(err: unknown): void {\n if (hasStack(err)) {\n console.error(err.stack);\n }\n}\n\n/**\n * Registra o loader ESM customizado para suporte a aliases em tempo de execução\n */\nasync function registrarLoader(): Promise<void> {\n try {\n const distRaiz = resolvePath(__dirname, '..');\n const loaderCaminho = resolvePath(distRaiz, 'node.loader.js');\n const loaderUrl = pathToFileURL(loaderCaminho).toString();\n\n // Tenta registrar o loader via API experimental da v20+\n const {\n register\n } = await import('node:module');\n if (typeof register === 'function') {\n register(loaderUrl, pathToFileURL('./'));\n }\n } catch (err) {\n // Falha silenciosa: o loader pode não estar disponível ou ser desnecessário se aliases estiverem resolvidos\n log.debug(`Aviso: Não foi possível registrar o loader de aliases: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n// Ler versão dinamicamente do package.json\nasync function getVersion(): Promise<string> {\n try {\n const packageCaminho = join(__dirname, '..', '..', 'package.json');\n const raw = await lerArquivoTexto(packageCaminho);\n if (!raw) return '0.0.0';\n const pkg: Record<string, unknown> = JSON.parse(raw);\n return typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n } catch (err) {\n log.debug(`Erro ao obter versão em getVersion: ${err instanceof Error ? err.message : String(err)}`);\n return '0.0.0';\n }\n}\n\n// Configuração principal do CLI\nconst program = new Command();\n\n// Função para aplicar flags globais\nasync function aplicarFlagsGlobais(opts: unknown) {\n if (typeof opts !== 'object' || opts === null) {\n return;\n }\n const flags = opts as Record<string, unknown>;\n try {\n const {\n sanitizarFlags\n } = await import('@shared/validation');\n sanitizarFlags(flags);\n } catch (erro) {\n const mensagemErro = erro instanceof Error ? erro.message : String(erro);\n console.error(chalk.red(CliBinMensagens.flagsInvalidas.replace('{erro}', mensagemErro)));\n sair(ExitCode.InvalidUsage);\n }\n config.REPORT_SILENCE_LOGS = Boolean(flags.silence);\n config.REPORT_EXPORT_ENABLED = Boolean(flags.export);\n config.REPORT_EXPORT_FULL = Boolean(flags.exportFull);\n const debugAtivo = Boolean(flags.debug) || process.env.TUTANUS_DEBUG === 'true';\n config.DEV_MODE = debugAtivo;\n config.SCAN_ONLY = Boolean(flags.scanOnly);\n config.VERBOSE = flags.silence ? false : Boolean(flags.verbose);\n const overrides: Record<string, unknown> = {};\n if (typeof flags.logEstruturado === 'boolean') overrides.LOG_ESTRUTURADO = flags.logEstruturado;\n if (typeof flags.incremental === 'boolean') overrides.ANALISE_INCREMENTAL_ENABLED = flags.incremental;\n if (typeof flags.metricas === 'boolean') overrides.ANALISE_METRICAS_ENABLED = flags.metricas;\n if (Object.keys(overrides).length) aplicarConfigParcial(overrides);\n}\n\nasync function carregarConfigProducao(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') return;\n try {\n const safeCfgCaminho = join(__dirname, '..', '..', 'tutanus.config.safe.json');\n const raw = await lerArquivoTexto(safeCfgCaminho);\n if (!raw) return;\n const safeCfg: Record<string, unknown> = JSON.parse(raw);\n const prod = safeCfg?.productionDefaults;\n if (prod && typeof prod === 'object') {\n for (const [chave, valor] of Object.entries(prod)) {\n if (process.env[chave] === undefined) process.env[chave] = String(valor);\n }\n }\n } catch (err) {\n log.debug(`Aviso: Configurações de produção não carregadas: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nfunction __tutanus_unhandledRejectionHandler(err: ErrorLike) {\n const MARCADOR = CliBinMensagens.unhandledRejection;\n const mensagem = extrairMensagemErro(err);\n console.error(MARCADOR, mensagem);\n if (!process.env.VITEST) {\n logErroStack(err);\n process.exit(1);\n }\n}\n\n// Execução do CLI\nexport async function mainCli(): Promise<void> {\n // 1. Tentar registrar loader para aliases dinâmicos\n await registrarLoader();\n\n // 2. Handlers de erro globais\n process.on('unhandledRejection', __tutanus_unhandledRejectionHandler);\n process.on('uncaughtException', (err: ErrorLike) => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(CliBinMensagens.excecaoNaoCapturada.replace('{mensagem}', mensagem)));\n logErroStack(err);\n if (!process.env.VITEST) sair(ExitCode.Critical);\n });\n\n // 3. Inicialização de ambiente e memória\n let memoria: ConversationMemory | undefined;\n try {\n memoria = await getDefaultMemory();\n } catch (err) {\n log.debug(`Erro ao carregar memória: ${err instanceof Error ? err.message : String(err)}`);\n }\n try {\n await carregarConfigProducao();\n const versionNumber = await getVersion();\n program.version(versionNumber);\n await inicializarConfigDinamica();\n } catch (err) {\n log.debug(`Erro na inicialização dinâmica: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Inicializa formatadores built-in\n try {\n const { inicializarFormattersBuiltin } = await import('@core/formatters');\n inicializarFormattersBuiltin();\n } catch (err) {\n log.debug(`Erro ao inicializar formatadores: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 4. Registro de Comandos\n registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));\n program.addCommand(comandoPerf());\n\n // 5. Flags de histórico\n const argv = process.argv.slice(2);\n if (argv.includes('--historico')) {\n if (memoria) {\n const resumo = memoria.getSummary();\n console.log(chalk.cyan(CliBinMensagens.resumoConversa.titulo));\n console.log(CliBinMensagens.resumoConversa.total.replace('{total}', String(resumo.totalMessages)));\n console.log(CliBinMensagens.resumoConversa.usuario.replace('{total}', String(resumo.userMessages)));\n console.log(CliBinMensagens.resumoConversa.tutanus.replace('{total}', String(resumo.assistantMessages)));\n if (resumo.firstMessage) console.log(CliBinMensagens.resumoConversa.primeira.replace('{mensagem}', resumo.firstMessage));\n if (resumo.lastMessage) console.log(CliBinMensagens.resumoConversa.ultima.replace('{mensagem}', resumo.lastMessage));\n console.log('');\n } else {\n console.log(chalk.yellow(CliBinMensagens.historicoIndisponivel));\n }\n return;\n }\n if (argv.includes('--limpar-historico')) {\n if (memoria) await memoria.clear();\n console.log(chalk.green(CliBinMensagens.historicoLimpo));\n return;\n }\n try {\n await memoria?.addMessage({\n role: 'user',\n content: `Execução CLI: ${argv.join(' ') || '(sem argumentos)'}`,\n timestamp: new Date().toISOString()\n });\n } catch (err) {\n log.debug(`Erro ao registrar histórico: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 6. Execução final\n program.exitOverride((err: CommanderError) => {\n const code = err?.code || '';\n const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';\n if (isUsoInvalido) {\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));\n sair(ExitCode.InvalidUsage);\n return;\n }\n throw err;\n });\n await program.parseAsync(process.argv);\n}\n\n// Inicialização automática se executado diretamente\nconst resolvedArgv1 = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : '';\nconst isMain = import.meta.url === resolvedArgv1 || process.argv[1] && (process.argv[1].endsWith('/bin/index.js') || process.argv[1].endsWith('/bin/index.ts'));\nif (isMain) {\n mainCli().catch(err => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${mensagem}`));\n logErroStack(err);\n if (!process.env.VITEST) process.exit(1);\n });\n}"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-permissivo-object tipo-inseguro-unknown\n// Justificativa: Object.keys é chamada de API, não tipo. unknown em catch handlers é intencional.\nimport { realpathSync } from 'node:fs';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { registrarComandos } from '@cli';\nimport { comandoPerf } from '@cli/commands';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarConfigParcial, chalk, config, inicializarConfigDinamica } from '@core/config';\nimport { getMessages, ICONES_NIVEL } from '@core/messages';\nimport type { ConversationMemory } from '@shared';\nimport { getDefaultMemory } from '@shared';\nimport { lerArquivoTexto } from '@shared/persistence';\nimport type { CommanderError } from 'commander';\nimport { Command } from 'commander';\n\nimport type { ErrorLike } from '@';\nimport { extrairMensagemErro } from '@';\n\nconst {\n log,\n CliBinMensagens\n} = getMessages();\n\n// caminho do módulo (usado para localizar arquivos de configuração)\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction hasStack(err: unknown): err is { stack: string } {\n return typeof err === 'object' && err !== null && 'stack' in err;\n}\n\nfunction logErroStack(err: unknown): void {\n if (hasStack(err)) {\n console.error(err.stack);\n }\n}\n\n/**\n * Registra o loader ESM customizado para suporte a aliases em tempo de execução\n */\nasync function registrarLoader(): Promise<void> {\n try {\n const distRaiz = resolvePath(__dirname, '..');\n const loaderCaminho = resolvePath(distRaiz, 'node.loader.js');\n const loaderUrl = pathToFileURL(loaderCaminho).toString();\n\n // Tenta registrar o loader via API experimental da v20+\n const {\n register\n } = await import('node:module');\n if (typeof register === 'function') {\n register(loaderUrl, pathToFileURL('./'));\n }\n } catch (err) {\n // Falha silenciosa: o loader pode não estar disponível ou ser desnecessário se aliases estiverem resolvidos\n log.debug(`Aviso: Não foi possível registrar o loader de aliases: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n// Ler versão dinamicamente do package.json\nasync function getVersion(): Promise<string> {\n try {\n const packageCaminho = join(__dirname, '..', '..', 'package.json');\n const raw = await lerArquivoTexto(packageCaminho);\n if (!raw) return '0.0.0';\n const pkg: Record<string, unknown> = JSON.parse(raw);\n return typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n } catch (err) {\n log.debug(`Erro ao obter versão em getVersion: ${err instanceof Error ? err.message : String(err)}`);\n return '0.0.0';\n }\n}\n\n// Configuração principal do CLI\nconst program = new Command();\n\n// Função para aplicar flags globais\nasync function aplicarFlagsGlobais(opts: unknown) {\n if (typeof opts !== 'object' || opts === null) {\n return;\n }\n const flags = opts as Record<string, unknown>;\n try {\n const {\n sanitizarFlags\n } = await import('@shared/validation');\n sanitizarFlags(flags);\n } catch (erro) {\n const mensagemErro = erro instanceof Error ? erro.message : String(erro);\n console.error(chalk.red(CliBinMensagens.flagsInvalidas.replace('{erro}', mensagemErro)));\n sair(ExitCode.InvalidUsage);\n }\n config.REPORT_SILENCE_LOGS = Boolean(flags.silence);\n config.REPORT_EXPORT_ENABLED = Boolean(flags.export);\n config.REPORT_EXPORT_FULL = Boolean(flags.exportFull);\n const debugAtivo = Boolean(flags.debug) || process.env.TUTANUS_DEBUG === 'true';\n config.DEV_MODE = debugAtivo;\n config.SCAN_ONLY = Boolean(flags.scanOnly);\n config.VERBOSE = flags.silence ? false : Boolean(flags.verbose);\n const overrides: Record<string, unknown> = {};\n if (typeof flags.logEstruturado === 'boolean') overrides.LOG_ESTRUTURADO = flags.logEstruturado;\n if (typeof flags.incremental === 'boolean') overrides.ANALISE_INCREMENTAL_ENABLED = flags.incremental;\n if (typeof flags.metricas === 'boolean') overrides.ANALISE_METRICAS_ENABLED = flags.metricas;\n if (Object.keys(overrides).length) aplicarConfigParcial(overrides);\n}\n\nasync function carregarConfigProducao(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') return;\n try {\n const safeCfgCaminho = join(__dirname, '..', '..', 'tutanus.config.safe.json');\n const raw = await lerArquivoTexto(safeCfgCaminho);\n if (!raw) return;\n const safeCfg: Record<string, unknown> = JSON.parse(raw);\n const prod = safeCfg?.productionDefaults;\n if (prod && typeof prod === 'object') {\n for (const [chave, valor] of Object.entries(prod)) {\n if (process.env[chave] === undefined) process.env[chave] = String(valor);\n }\n }\n } catch (err) {\n log.debug(`Aviso: Configurações de produção não carregadas: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nfunction __tutanus_unhandledRejectionHandler(err: ErrorLike) {\n const MARCADOR = CliBinMensagens.unhandledRejection;\n const mensagem = extrairMensagemErro(err);\n console.error(MARCADOR, mensagem);\n if (!process.env.VITEST) {\n logErroStack(err);\n process.exit(1);\n }\n}\n\n// Execução do CLI\nexport async function mainCli(): Promise<void> {\n // 1. Tentar registrar loader para aliases dinâmicos\n await registrarLoader();\n\n // 2. Handlers de erro globais\n process.on('unhandledRejection', __tutanus_unhandledRejectionHandler);\n process.on('uncaughtException', (err: ErrorLike) => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(CliBinMensagens.excecaoNaoCapturada.replace('{mensagem}', mensagem)));\n logErroStack(err);\n if (!process.env.VITEST) sair(ExitCode.Critical);\n });\n\n // 3. Inicialização de ambiente e memória\n let memoria: ConversationMemory | undefined;\n try {\n memoria = await getDefaultMemory();\n } catch (err) {\n log.debug(`Erro ao carregar memória: ${err instanceof Error ? err.message : String(err)}`);\n }\n try {\n await carregarConfigProducao();\n const versionNumber = await getVersion();\n program.version(versionNumber);\n await inicializarConfigDinamica();\n } catch (err) {\n log.debug(`Erro na inicialização dinâmica: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Inicializa formatadores built-in\n try {\n const { inicializarFormattersBuiltin } = await import('@core/formatters');\n inicializarFormattersBuiltin();\n } catch (err) {\n log.debug(`Erro ao inicializar formatadores: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 4. Registro de Comandos\n registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));\n program.addCommand(comandoPerf());\n\n // 5. Flags de histórico\n const argv = process.argv.slice(2);\n if (argv.includes('--historico')) {\n if (memoria) {\n const resumo = memoria.getSummary();\n console.log(chalk.cyan(CliBinMensagens.resumoConversa.titulo));\n console.log(CliBinMensagens.resumoConversa.total.replace('{total}', String(resumo.totalMessages)));\n console.log(CliBinMensagens.resumoConversa.usuario.replace('{total}', String(resumo.userMessages)));\n console.log(CliBinMensagens.resumoConversa.tutanus.replace('{total}', String(resumo.assistantMessages)));\n if (resumo.firstMessage) console.log(CliBinMensagens.resumoConversa.primeira.replace('{mensagem}', resumo.firstMessage));\n if (resumo.lastMessage) console.log(CliBinMensagens.resumoConversa.ultima.replace('{mensagem}', resumo.lastMessage));\n console.log('');\n } else {\n console.log(chalk.yellow(CliBinMensagens.historicoIndisponivel));\n }\n return;\n }\n if (argv.includes('--limpar-historico')) {\n if (memoria) await memoria.clear();\n console.log(chalk.green(CliBinMensagens.historicoLimpo));\n return;\n }\n try {\n await memoria?.addMessage({\n role: 'user',\n content: `Execução CLI: ${argv.join(' ') || '(sem argumentos)'}`,\n timestamp: new Date().toISOString()\n });\n } catch (err) {\n log.debug(`Erro ao registrar histórico: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 6. Execução final\n program.exitOverride((err: CommanderError) => {\n const code = err?.code || '';\n const isSaidaNormal = code === 'commander.help' || code === 'commander.helpDisplayed' || code === 'commander.version';\n if (isSaidaNormal) {\n sair(ExitCode.Ok);\n return;\n }\n const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';\n if (isUsoInvalido) {\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));\n sair(ExitCode.InvalidUsage);\n return;\n }\n throw err;\n });\n await program.parseAsync(process.argv);\n}\n\n// Inicialização automática se executado diretamente\nconst resolvedArgv1 = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : '';\nconst isMain = import.meta.url === resolvedArgv1 || process.argv[1] && (process.argv[1].endsWith('/bin/index.js') || process.argv[1].endsWith('/bin/index.ts'));\nif (isMain) {\n mainCli().catch(err => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${mensagem}`));\n logErroStack(err);\n if (!process.env.VITEST) process.exit(1);\n });\n}"]}
@@ -65,7 +65,7 @@ export function comandoAzure() {
65
65
  if (ocorrencias.length > 0) {
66
66
  console.log('');
67
67
  ocorrencias.forEach((ocorrencia) => {
68
- const prefix = ocorrencia.nivel === 'erro' ? '🔴' : ocorrencia.nivel === 'aviso' ? '🟡' : '🔵';
68
+ const prefix = ocorrencia.nivel === 'erro' ? '[RED]' : ocorrencia.nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';
69
69
  log.info(msgs.ocorrencia(prefix, ocorrencia.tipo ?? '', ocorrencia.linha ?? 0, ocorrencia.mensagem ?? ''));
70
70
  if (ocorrencia.sugestao)
71
71
  log.info(msgs.sugestao(ocorrencia.sugestao));
@@ -1 +1 @@
1
- {"version":3,"file":"command-azure.js","sourceRoot":"","sources":["../../../src/cli/commands/command-azure.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,wBAAwB,CAAC;AAO/C,SAAS,iBAAiB;IACxB,OAAO;QACL,OAAO;YACL,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAI,CAAC;QACT,KAAK;YACH,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AACD,SAAS,qBAAqB,CAAC,MAA+B;IAC5D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5E,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAGpK,EAAE,EAAE;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;QACnF,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACnD,SAAS,GAAG,aAAa,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC;gBACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAClD,SAAS,GAAG,YAAY,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACrE,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC,KAAK,EAAgC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACxF,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,WAAW,CAAC,OAAO,CAAC,CAAC,UAAsB,EAAE,EAAE;wBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC/F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;wBAC3G,IAAI,UAAU,CAAC,QAAQ;4BAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACxE,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de Azure Pipelines\n *\n * tutanus azure scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaAzurePipelines } from '@analysts/azure-pipelines';\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.CliComandoAzureMensagens;\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 comandoAzure(): Command {\n const cmd = new Command('azure').alias('az').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 azureFileRoot = path.join(repoPath, 'azure-pipelines.yml');\n const azureFileAlt = path.join(repoPath, 'azure-pipelines', 'azure-pipelines.yml');\n let azureFile: string | null = null;\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(azureFileRoot, 'utf-8');\n azureFile = azureFileRoot;\n } catch {\n try {\n conteudo = fs.readFileSync(azureFileAlt, 'utf-8');\n azureFile = azureFileAlt;\n } catch {\n log.erro(msgs.arquivoNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\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 = path.relative(repoPath, azureFile);\n const result = await analistaAzurePipelines.aplicar(conteudo, relPath, null, undefined);\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-azure.js","sourceRoot":"","sources":["../../../src/cli/commands/command-azure.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de Azure Pipelines\n *\n * tutanus azure scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaAzurePipelines } from '@analysts/azure-pipelines';\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.CliComandoAzureMensagens;\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 comandoAzure(): Command {\n const cmd = new Command('azure').alias('az').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 azureFileRoot = path.join(repoPath, 'azure-pipelines.yml');\n const azureFileAlt = path.join(repoPath, 'azure-pipelines', 'azure-pipelines.yml');\n let azureFile: string | null = null;\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(azureFileRoot, 'utf-8');\n azureFile = azureFileRoot;\n } catch {\n try {\n conteudo = fs.readFileSync(azureFileAlt, 'utf-8');\n azureFile = azureFileAlt;\n } catch {\n log.erro(msgs.arquivoNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\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 = path.relative(repoPath, azureFile);\n const result = await analistaAzurePipelines.aplicar(conteudo, relPath, null, undefined);\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}"]}
@@ -61,7 +61,7 @@ export function comandoCircleCI() {
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-circleci.js","sourceRoot":"","sources":["../../../src/cli/commands/command-circleci.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de CircleCI\n *\n * tutanus circleci scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaCircleCI } from '@analysts/circleci';\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.CliComandoCircleciMensagens;\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\nexport function comandoCircleCI(): Command {\n const cmd = new Command('circleci').alias('cc').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 circleFile = path.join(repoPath, '.circleci', 'config.yml');\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(circleFile, '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 = '.circleci/config.yml';\n const result = await analistaCircleCI.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-circleci.js","sourceRoot":"","sources":["../../../src/cli/commands/command-circleci.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,2BAA2B,CAAC;AAClD,SAAS,qBAAqB,CAAC,MAA+B;IAC5D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/E,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAGpK,EAAE,EAAE;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAClE,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,EAAE;YACR,KAAK;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO;gBACL,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,sBAAsB,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;gBAChF,QAAQ,EAAE,CAAC;wBACT,OAAO;wBACP,OAAO,EAAE,QAAQ;qBAClB,CAAC;aACiB,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;wBAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAC5G,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;wBAC3G,IAAI,UAAU,CAAC,QAAQ;4BAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACxE,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [BUSCA] Comando para análise de CircleCI\n *\n * tutanus circleci scan [opções]\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaCircleCI } from '@analysts/circleci';\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.CliComandoCircleciMensagens;\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\nexport function comandoCircleCI(): Command {\n const cmd = new Command('circleci').alias('cc').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 circleFile = path.join(repoPath, '.circleci', 'config.yml');\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(circleFile, '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 = '.circleci/config.yml';\n const result = await analistaCircleCI.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}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"command-convert.js","sourceRoot":"","sources":["../../../src/cli/commands/command-convert.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * 🔄 Comando CLI para Conversão de Templates CI/CD\n *\n * Uso: tutanus convert --from github-actions --to gitlab-ci -f .github/workflows/main.yml\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { obterConversor } from '@analysts/converters';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nconst log = messages.log;\nconst msgs = messages.CliComandoConverterMensagens;\nexport function comandoConverter(): Command {\n const cmd = new Command('convert').alias('conv').description(msgs.descricao).requiredOption('-f, --file <arquivo>', 'Arquivo de origem para conversão').requiredOption('--from <plataforma>', 'Plataforma de origem (ex: github-actions)').requiredOption('--to <plataforma>', 'Plataforma de destino (ex: gitlab-ci)').option('-o, --output <arquivo>', 'Arquivo de saída (opcional)').action(async (opts: {\n file: string;\n from: string;\n to: string;\n output?: string;\n }) => {\n const inputPath = path.resolve(opts.file);\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(inputPath, 'utf-8');\n } catch {\n log.erro(msgs.arquivoNaoEncontrado(opts.file));\n sair(ExitCode.Failure);\n return;\n }\n const conversor = obterConversor(opts.from, opts.to);\n if (!conversor) {\n log.erro(msgs.nenhumConversor(opts.from, opts.to));\n log.info(msgs.conversoresDisponiveis);\n sair(ExitCode.Failure);\n return;\n }\n const spinner = ora({\n text: msgs.convertendo(opts.from, opts.to),\n spinner: 'dots'\n }).start();\n try {\n const resultado = await conversor.converter(conteudo);\n if (!resultado.sucesso) {\n spinner.fail(msgs.falhaConversao);\n resultado.erros.forEach(erro => log.erro(erro));\n sair(ExitCode.Failure);\n return;\n }\n spinner.succeed(msgs.conversaoConcluida);\n if (resultado.avisos.length > 0) {\n console.log(`\\n${msgs.avisosConversao}`);\n resultado.avisos.forEach(arquivo => console.log(msgs.avisoItem(arquivo)));\n }\n if (opts.output) {\n const outputPath = path.resolve(opts.output);\n fs.writeFileSync(outputPath, resultado.conteudo);\n log.sucesso(msgs.resultadoSalvo.replace('{output}', opts.output));\n } else {\n console.log(`\\n--- ${msgs.resultadoDraft} ---\\n`);\n console.log(resultado.conteudo);\n console.log('---\\n');\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n spinner.fail(msgs.erroFatal(msg));\n sair(ExitCode.Failure);\n }\n });\n return cmd;\n}"]}
1
+ {"version":3,"file":"command-convert.js","sourceRoot":"","sources":["../../../src/cli/commands/command-convert.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [REFRESH] Comando CLI para Conversão de Templates CI/CD\n *\n * Uso: tutanus convert --from github-actions --to gitlab-ci -f .github/workflows/main.yml\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { obterConversor } from '@analysts/converters';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nconst log = messages.log;\nconst msgs = messages.CliComandoConverterMensagens;\nexport function comandoConverter(): Command {\n const cmd = new Command('convert').alias('conv').description(msgs.descricao).requiredOption('-f, --file <arquivo>', 'Arquivo de origem para conversão').requiredOption('--from <plataforma>', 'Plataforma de origem (ex: github-actions)').requiredOption('--to <plataforma>', 'Plataforma de destino (ex: gitlab-ci)').option('-o, --output <arquivo>', 'Arquivo de saída (opcional)').action(async (opts: {\n file: string;\n from: string;\n to: string;\n output?: string;\n }) => {\n const inputPath = path.resolve(opts.file);\n let conteudo: string;\n try {\n conteudo = fs.readFileSync(inputPath, 'utf-8');\n } catch {\n log.erro(msgs.arquivoNaoEncontrado(opts.file));\n sair(ExitCode.Failure);\n return;\n }\n const conversor = obterConversor(opts.from, opts.to);\n if (!conversor) {\n log.erro(msgs.nenhumConversor(opts.from, opts.to));\n log.info(msgs.conversoresDisponiveis);\n sair(ExitCode.Failure);\n return;\n }\n const spinner = ora({\n text: msgs.convertendo(opts.from, opts.to),\n spinner: 'dots'\n }).start();\n try {\n const resultado = await conversor.converter(conteudo);\n if (!resultado.sucesso) {\n spinner.fail(msgs.falhaConversao);\n resultado.erros.forEach(erro => log.erro(erro));\n sair(ExitCode.Failure);\n return;\n }\n spinner.succeed(msgs.conversaoConcluida);\n if (resultado.avisos.length > 0) {\n console.log(`\\n${msgs.avisosConversao}`);\n resultado.avisos.forEach(arquivo => console.log(msgs.avisoItem(arquivo)));\n }\n if (opts.output) {\n const outputPath = path.resolve(opts.output);\n fs.writeFileSync(outputPath, resultado.conteudo);\n log.sucesso(msgs.resultadoSalvo.replace('{output}', opts.output));\n } else {\n console.log(`\\n--- ${msgs.resultadoDraft} ---\\n`);\n console.log(resultado.conteudo);\n console.log('---\\n');\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n spinner.fail(msgs.erroFatal(msg));\n sair(ExitCode.Failure);\n }\n });\n return cmd;\n}"]}
@@ -189,7 +189,7 @@ export function comandoGithubActions() {
189
189
  log.info(CliComandoGithubActionsMensagens.ocorrenciasTitulo);
190
190
  for (const ocorrencia of todasOcorrencias.slice(0, 20)) {
191
191
  const nivel = ocorrencia.nivel || 'info';
192
- const nivelIcon = nivel === 'erro' ? '🔴' : nivel === 'aviso' ? '🟡' : '🔵';
192
+ const nivelIcon = nivel === 'erro' ? '[RED]' : nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';
193
193
  log.info(CliComandoGithubActionsMensagens.ocorrenciaItem(nivelIcon, ocorrencia.relPath, ocorrencia.linha ?? 0, ocorrencia.mensagem));
194
194
  }
195
195
  if (todasOcorrencias.length > 20) {
@@ -1 +1 @@
1
- {"version":3,"file":"command-github-actions.js","sourceRoot":"","sources":["../../../src/cli/commands/command-github-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport 'dotenv/config';\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaGithubActions, analistaGithubActionsGlobal, autofixEngine, gerarRelatorio, obterDetectoresGithubActions, pontuarWorkflow, prepararDadosRelatorio } from '@analysts/github-actions';\nimport { iniciarServidorApp } from '@app/github';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarCorrecoes, salvarArquivoCorrigido } from '@core/execution';\nimport { CliComandoGithubActionsMensagens, messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport type { ContextoExecucao, FormatoRelatorio, Ocorrencia, TecnicaAplicarResultado } from '@';\n\nconst SCORE_MAX = 100;\nconst SCORE_MIN = 0;\nconst PENALTY_PER_OCCURRENCE = 5;\nconst DEFAULT_GATE_THRESHOLD = 70;\nconst log = messages.log;\n\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\n\nfunction lerDiretorioWorkflows(workflowDir: string): string[] {\n try {\n return fs.readdirSync(workflowDir).filter(arquivo => arquivo.endsWith('.yml') || arquivo.endsWith('.yaml'));\n } catch {\n return [];\n }\n}\n\nfunction lerArquivoWorkflow(wfPath: string): string | null {\n try {\n return fs.readFileSync(wfPath, 'utf-8');\n } catch {\n return null;\n }\n}\n\nfunction montarContextoExecucao(workflowDir: string, workflowFiles: string[]): ContextoExecucao {\n return {\n baseDir: workflowDir,\n arquivos: workflowFiles.map(wf => ({\n relPath: `.github/workflows/${wf}`,\n content: fs.readFileSync(path.join(workflowDir, wf), 'utf-8'),\n ast: null,\n fullCaminho: `.github/workflows/${wf}`\n }))\n };\n}\n\nfunction criarContextArquivo(wf: string, conteudo: string, workflowDir: string): ContextoExecucao {\n const relPath = `.github/workflows/${wf}`;\n return {\n baseDir: workflowDir,\n arquivos: [{\n relPath,\n content: conteudo,\n ast: null,\n fullCaminho: relPath\n }]\n };\n}\n\nasync function processarWorkflows(\n workflowDir: string,\n workflowFiles: string[]\n): Promise<{\n todasOcorrencias: Ocorrencia[];\n workflowsInfo: Array<{ nome: string; score: number; ocorrencias: number }>;\n tempoAnalise: number;\n}> {\n const startTime = Date.now();\n const todasOcorrencias: Ocorrencia[] = [];\n const workflowsInfo: Array<{ nome: string; score: number; ocorrencias: number }> = [];\n\n for (const wf of workflowFiles) {\n const wfPath = path.join(workflowDir, wf);\n const conteudo = fs.readFileSync(wfPath, 'utf-8');\n const relPath = `.github/workflows/${wf}`;\n const context = criarContextArquivo(wf, conteudo, workflowDir);\n const result = await analistaGithubActions.aplicar(conteudo, relPath, null, undefined, context);\n const ocorrencias = normalizarOcorrencias(result);\n const scoreResult = pontuarWorkflow(conteudo, relPath);\n workflowsInfo.push({ nome: wf, score: scoreResult.percentage, ocorrencias: ocorrencias.length });\n todasOcorrencias.push(...ocorrencias);\n }\n\n const contextGlobal = montarContextoExecucao(workflowDir, workflowFiles);\n const resultGlobal = await analistaGithubActionsGlobal.aplicar('', '', null, undefined, contextGlobal);\n todasOcorrencias.push(...normalizarOcorrencias(resultGlobal));\n\n const tempoAnalise = Date.now() - startTime;\n return { todasOcorrencias, workflowsInfo, tempoAnalise };\n}\n\nfunction calcularScoreGeral(workflowsInfo: Array<{ score: number }>): number {\n return workflowsInfo.length > 0\n ? Math.round(workflowsInfo.reduce((sum, item) => sum + item.score, 0) / workflowsInfo.length)\n : 100;\n}\n\nexport function comandoGithubActions(): Command {\n const cmd = new Command('github-actions').alias('gha').description(CliComandoGithubActionsMensagens.descricaoCmd);\n\n cmd.command('scan').alias('s').description(CliComandoGithubActionsMensagens.descricaoScan)\n .option('-p, --path <caminho>', CliComandoGithubActionsMensagens.optPath, '.')\n .option('-w, --workflow <arquivo>', CliComandoGithubActionsMensagens.optWorkflow)\n .option('-j, --json', 'Saída em JSON')\n .option('--compact', 'Saída compacta')\n .option('--fix', CliComandoGithubActionsMensagens.optFix)\n .option('--dry-run', CliComandoGithubActionsMensagens.optDryRun)\n .action(async (opts: {\n path?: string;\n workflow?: string;\n json?: boolean;\n compact?: boolean;\n fix?: boolean;\n dryRun?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const workflowDir = path.join(repoPath, '.github', 'workflows');\n const workflowFilesContent = lerDiretorioWorkflows(workflowDir);\n\n if (workflowFilesContent.length === 0) {\n log.erro(CliComandoGithubActionsMensagens.workflowDirNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n\n let workflowFiles: string[];\n if (opts.workflow) {\n const wfPath = path.join(workflowDir, opts.workflow);\n if (lerArquivoWorkflow(wfPath) === null) {\n log.erro(CliComandoGithubActionsMensagens.workflowNaoEncontrado(opts.workflow));\n sair(ExitCode.Failure);\n return;\n }\n workflowFiles = [opts.workflow];\n } else {\n workflowFiles = workflowFilesContent;\n }\n\n if (workflowFiles.length === 0) {\n log.info(CliComandoGithubActionsMensagens.nenhumWorkflowEncontrado);\n return;\n }\n\n const spinner = opts.json ? {\n text: '',\n start: () => spinner,\n succeed: () => spinner,\n fail: () => spinner\n } : ora({ text: 'Analisando workflows...', spinner: 'dots' }).start();\n\n try {\n const startTime = Date.now();\n const todasOcorrencias: Ocorrencia[] = [];\n const workflowsInfo: Array<{ nome: string; score: number; ocorrencias: number }> = [];\n\n for (const wf of workflowFiles) {\n const wfPath = path.join(workflowDir, wf);\n const conteudo = fs.readFileSync(wfPath, 'utf-8');\n const relPath = `.github/workflows/${wf}`;\n const context = criarContextArquivo(wf, conteudo, workflowDir);\n const result = await analistaGithubActions.aplicar(conteudo, relPath, null, undefined, context);\n const ocorrencias = normalizarOcorrencias(result);\n\n if (opts.fix) {\n const ocorrenciasComFix = ocorrencias.filter(ocorrencia => !!ocorrencia.correcao);\n let conteudoAtualizado = conteudo;\n if (ocorrenciasComFix.length > 0) {\n conteudoAtualizado = aplicarCorrecoes(conteudo, ocorrenciasComFix);\n }\n const detectores = obterDetectoresGithubActions();\n const fixers = autofixEngine.extrairFixers(detectores);\n if (fixers.length > 0) {\n conteudoAtualizado = autofixEngine.aplicarFixes(conteudoAtualizado, fixers);\n }\n if (conteudoAtualizado !== conteudo) {\n if (opts.dryRun) {\n log.info(CliComandoGithubActionsMensagens.dryRunAlteracoes(wf));\n log.info(conteudoAtualizado);\n } else {\n salvarArquivoCorrigido(wfPath, conteudoAtualizado);\n log.sucesso(CliComandoGithubActionsMensagens.correcoesAplicadas(wf));\n }\n }\n }\n\n const score = Math.max(SCORE_MIN, SCORE_MAX - ocorrencias.length * PENALTY_PER_OCCURRENCE);\n workflowsInfo.push({ nome: wf, score, ocorrencias: ocorrencias.length });\n todasOcorrencias.push(...ocorrencias);\n }\n\n const contextGlobal = montarContextoExecucao(workflowDir, workflowFiles);\n const resultGlobal = await analistaGithubActionsGlobal.aplicar('', '', null, undefined, contextGlobal);\n todasOcorrencias.push(...normalizarOcorrencias(resultGlobal));\n\n const tempoAnalise = Date.now() - startTime;\n const scoreGeral = calcularScoreGeral(workflowsInfo);\n\n spinner.succeed(CliComandoGithubActionsMensagens.analiseConcluida(workflowFiles.length, todasOcorrencias.length));\n\n if (opts.json) {\n const dados = prepararDadosRelatorio(todasOcorrencias, path.basename(repoPath), tempoAnalise, workflowsInfo);\n console.log(JSON.stringify(dados, null, 2));\n return;\n }\n if (opts.compact) {\n log.info(CliComandoGithubActionsMensagens.scoreCompacto(scoreGeral, workflowFiles.length, todasOcorrencias.length));\n return;\n }\n\n log.info(CliComandoGithubActionsMensagens.scoreGeral(scoreGeral));\n log.info(CliComandoGithubActionsMensagens.workflowsAnalisados(workflowFiles.length));\n log.info(CliComandoGithubActionsMensagens.totalOcorrencias(todasOcorrencias.length));\n log.info(CliComandoGithubActionsMensagens.tempoAnalise(tempoAnalise));\n log.info(CliComandoGithubActionsMensagens.workflowsTitulo);\n for (const wf of workflowsInfo) {\n const icon = wf.score >= 80 ? '[OK]' : wf.score >= 50 ? '[AVISO]' : '[ERRO]';\n log.info(CliComandoGithubActionsMensagens.workflowItem(icon, wf.nome, wf.score, wf.ocorrencias));\n }\n if (todasOcorrencias.length > 0) {\n log.info(CliComandoGithubActionsMensagens.ocorrenciasTitulo);\n for (const ocorrencia of todasOcorrencias.slice(0, 20)) {\n const nivel = ocorrencia.nivel || 'info';\n const nivelIcon = nivel === 'erro' ? '🔴' : nivel === 'aviso' ? '🟡' : '🔵';\n log.info(CliComandoGithubActionsMensagens.ocorrenciaItem(nivelIcon, ocorrencia.relPath, ocorrencia.linha ?? 0, ocorrencia.mensagem));\n }\n if (todasOcorrencias.length > 20) {\n log.info(CliComandoGithubActionsMensagens.maisOcorrencias(todasOcorrencias.length - 20));\n }\n }\n } catch (err) {\n spinner.fail(CliComandoGithubActionsMensagens.erroAnalise);\n log.erro(err instanceof Error ? err.message : String(err));\n sair(ExitCode.Failure);\n }\n });\n\n cmd.command('report').alias('r').description(CliComandoGithubActionsMensagens.descricaoReport)\n .option('-p, --path <caminho>', CliComandoGithubActionsMensagens.optPath, '.')\n .option('-f, --format <formato>', 'Formato do relatório (json, markdown, html, csv)', 'markdown')\n .option('-o, --output <arquivo>', 'Arquivo de saída')\n .option('--titulo <titulo>', 'Título do relatório')\n .option('--no-detalhes', CliComandoGithubActionsMensagens.optNoDetalhes)\n .action(async (opts: {\n path?: string;\n format?: string;\n output?: string;\n titulo?: string;\n detalhes?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const workflowDir = path.join(repoPath, '.github', 'workflows');\n const workflowFiles = lerDiretorioWorkflows(workflowDir);\n\n if (workflowFiles.length === 0) {\n log.erro(CliComandoGithubActionsMensagens.workflowDirNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n\n const formato = opts.format as FormatoRelatorio;\n if (!['json', 'markdown', 'html', 'csv'].includes(formato)) {\n log.erro(CliComandoGithubActionsMensagens.formatoInvalido(formato));\n sair(ExitCode.Failure);\n return;\n }\n\n const spinner = ora({ text: 'Gerando relatório...', spinner: 'dots' }).start();\n\n try {\n const { todasOcorrencias, workflowsInfo, tempoAnalise } = await processarWorkflows(workflowDir, workflowFiles);\n const output = opts.output || `github-actions-report.${formato === 'markdown' ? 'md' : formato}`;\n const dados = prepararDadosRelatorio(todasOcorrencias, path.basename(repoPath), tempoAnalise, workflowsInfo);\n await gerarRelatorio(dados, {\n formato,\n output,\n titulo: opts.titulo,\n incluirDetalhes: opts.detalhes !== false\n });\n spinner.succeed(CliComandoGithubActionsMensagens.relatorioGerado(output));\n log.info(CliComandoGithubActionsMensagens.formatoRelatorio(formato));\n log.info(CliComandoGithubActionsMensagens.scoreReport(dados.scoreGeral));\n log.info(CliComandoGithubActionsMensagens.ocorrenciasReport(todasOcorrencias.length));\n } catch (err) {\n spinner.fail(CliComandoGithubActionsMensagens.erroGerarRelatorio);\n log.erro(err instanceof Error ? err.message : String(err));\n sair(ExitCode.Failure);\n }\n });\n\n cmd.command('gate').alias('g').description(CliComandoGithubActionsMensagens.descricaoGate)\n .option('-p, --path <caminho>', CliComandoGithubActionsMensagens.optPath, '.')\n .option('-t, --threshold <numero>', 'Score mínimo aceitável (0-100)', DEFAULT_GATE_THRESHOLD.toString())\n .option('-w, --workflow <arquivo>', 'Verificar workflow específico')\n .option('-j, --json', 'Saída em JSON para consumo externo')\n .option('--fail-on <nivel>', 'Nível mínimo para falhar (erro, aviso, info)', 'erro')\n .action(async (opts: {\n path?: string;\n threshold?: string;\n workflow?: string;\n json?: boolean;\n failOn?: string;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const workflowDir = path.join(repoPath, '.github', 'workflows');\n const threshold = parseInt(opts.threshold || DEFAULT_GATE_THRESHOLD.toString(), 10);\n const workflowFilesContent = lerDiretorioWorkflows(workflowDir);\n\n if (workflowFilesContent.length === 0) {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error: CliComandoGithubActionsMensagens.workflowDirNaoEncontrado }));\n } else {\n log.erro(CliComandoGithubActionsMensagens.workflowDirNaoEncontrado);\n }\n sair(ExitCode.Failure);\n return;\n }\n\n let workflowFiles: string[];\n if (opts.workflow) {\n const wfPath = path.join(workflowDir, opts.workflow);\n if (lerArquivoWorkflow(wfPath) === null) {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error: CliComandoGithubActionsMensagens.workflowNaoEncontrado(opts.workflow) }));\n } else {\n log.erro(CliComandoGithubActionsMensagens.workflowNaoEncontrado(opts.workflow));\n }\n sair(ExitCode.Failure);\n return;\n }\n workflowFiles = [opts.workflow];\n } else {\n workflowFiles = workflowFilesContent;\n }\n\n if (workflowFiles.length === 0) {\n if (opts.json) {\n console.log(JSON.stringify({ success: true, score: SCORE_MAX, message: CliComandoGithubActionsMensagens.nenhumWorkflowEncontrado }));\n } else {\n log.info(CliComandoGithubActionsMensagens.nenhumWorkflowEncontrado);\n }\n return;\n }\n\n try {\n const { todasOcorrencias, workflowsInfo, tempoAnalise: _tempoAnalise } = await processarWorkflows(workflowDir, workflowFiles);\n const scoreGeral = calcularScoreGeral(workflowsInfo);\n const erros = todasOcorrencias.filter(ocorrencia => ocorrencia.nivel === 'erro').length;\n const avisos = todasOcorrencias.filter(ocorrencia => ocorrencia.nivel === 'aviso').length;\n\n let passou = true;\n const motivosFalha: string[] = [];\n\n if (scoreGeral < threshold) {\n passou = false;\n motivosFalha.push(`Score ${scoreGeral} abaixo do threshold ${threshold}`);\n }\n if (opts.failOn === 'erro' && erros > 0) {\n passou = false;\n motivosFalha.push(`${erros} erro(s) crítico(s) encontrado(s)`);\n }\n if (opts.failOn === 'aviso' && erros + avisos > 0) {\n passou = false;\n motivosFalha.push(`${erros + avisos} erro(s)/aviso(s) encontrado(s)`);\n }\n\n const resultado = {\n success: passou,\n score: scoreGeral,\n threshold,\n workflows: workflowsInfo,\n ocorrencias: {\n total: todasOcorrencias.length,\n erros,\n avisos,\n info: todasOcorrencias.filter(ocorrencia => ocorrencia.nivel === 'info').length\n },\n motivosFalha: passou ? [] : motivosFalha\n };\n\n if (opts.json) {\n console.log(JSON.stringify(resultado, null, 2));\n } else if (passou) {\n log.sucesso(CliComandoGithubActionsMensagens.gatePassou(scoreGeral, threshold));\n } else {\n log.erro(CliComandoGithubActionsMensagens.gateFalhou(scoreGeral, threshold));\n for (const motivo of motivosFalha) {\n log.erro(CliComandoGithubActionsMensagens.gateFalhaMotivo(motivo));\n }\n }\n\n if (!passou) sair(ExitCode.Failure);\n } catch (err) {\n log.erro(err instanceof Error ? err.message : String(err));\n sair(ExitCode.Failure);\n }\n });\n\n cmd.command('app').description(CliComandoGithubActionsMensagens.descricaoApp)\n .option('-p, --port <number>', 'Porta do servidor', process.env.TUTANUS_API_PORT || process.env.PORT || '3000')\n .action(async (opts: { port: string }) => {\n const appId = process.env.GITHUB_APP_ID;\n const privateKey = process.env.GITHUB_PRIVATE_KEY;\n const webhookSecret = process.env.GITHUB_WEBHOOK_SECRET;\n if (!appId || !privateKey || !webhookSecret) {\n log.erro(CliComandoGithubActionsMensagens.appSetupRequired);\n log.erro(' - GITHUB_APP_ID');\n log.erro(' - GITHUB_PRIVATE_KEY');\n log.erro(' - GITHUB_WEBHOOK_SECRET');\n log.info(CliComandoGithubActionsMensagens.appDicaEnv);\n sair(ExitCode.Failure);\n return;\n }\n try {\n await iniciarServidorApp({\n appId,\n privateKey: privateKey.replace(/\\\\n/g, '\\n'),\n webhookSecret,\n port: parseInt(opts.port, 10),\n });\n } catch (err) {\n log.erro(CliComandoGithubActionsMensagens.erroIniciarServidor(err instanceof Error ? err.message : String(err)));\n sair(ExitCode.Failure);\n }\n });\n\n return cmd;\n}\n"]}
1
+ {"version":3,"file":"command-github-actions.js","sourceRoot":"","sources":["../../../src/cli/commands/command-github-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport 'dotenv/config';\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { analistaGithubActions, analistaGithubActionsGlobal, autofixEngine, gerarRelatorio, obterDetectoresGithubActions, pontuarWorkflow, prepararDadosRelatorio } from '@analysts/github-actions';\nimport { iniciarServidorApp } from '@app/github';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarCorrecoes, salvarArquivoCorrigido } from '@core/execution';\nimport { CliComandoGithubActionsMensagens, messages } from '@core/messages';\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport type { ContextoExecucao, FormatoRelatorio, Ocorrencia, TecnicaAplicarResultado } from '@';\n\nconst SCORE_MAX = 100;\nconst SCORE_MIN = 0;\nconst PENALTY_PER_OCCURRENCE = 5;\nconst DEFAULT_GATE_THRESHOLD = 70;\nconst log = messages.log;\n\nfunction normalizarOcorrencias(result: TecnicaAplicarResultado): Ocorrencia[] {\n if (!result) return [];\n return Array.isArray(result) ? result : [result];\n}\n\nfunction lerDiretorioWorkflows(workflowDir: string): string[] {\n try {\n return fs.readdirSync(workflowDir).filter(arquivo => arquivo.endsWith('.yml') || arquivo.endsWith('.yaml'));\n } catch {\n return [];\n }\n}\n\nfunction lerArquivoWorkflow(wfPath: string): string | null {\n try {\n return fs.readFileSync(wfPath, 'utf-8');\n } catch {\n return null;\n }\n}\n\nfunction montarContextoExecucao(workflowDir: string, workflowFiles: string[]): ContextoExecucao {\n return {\n baseDir: workflowDir,\n arquivos: workflowFiles.map(wf => ({\n relPath: `.github/workflows/${wf}`,\n content: fs.readFileSync(path.join(workflowDir, wf), 'utf-8'),\n ast: null,\n fullCaminho: `.github/workflows/${wf}`\n }))\n };\n}\n\nfunction criarContextArquivo(wf: string, conteudo: string, workflowDir: string): ContextoExecucao {\n const relPath = `.github/workflows/${wf}`;\n return {\n baseDir: workflowDir,\n arquivos: [{\n relPath,\n content: conteudo,\n ast: null,\n fullCaminho: relPath\n }]\n };\n}\n\nasync function processarWorkflows(\n workflowDir: string,\n workflowFiles: string[]\n): Promise<{\n todasOcorrencias: Ocorrencia[];\n workflowsInfo: Array<{ nome: string; score: number; ocorrencias: number }>;\n tempoAnalise: number;\n}> {\n const startTime = Date.now();\n const todasOcorrencias: Ocorrencia[] = [];\n const workflowsInfo: Array<{ nome: string; score: number; ocorrencias: number }> = [];\n\n for (const wf of workflowFiles) {\n const wfPath = path.join(workflowDir, wf);\n const conteudo = fs.readFileSync(wfPath, 'utf-8');\n const relPath = `.github/workflows/${wf}`;\n const context = criarContextArquivo(wf, conteudo, workflowDir);\n const result = await analistaGithubActions.aplicar(conteudo, relPath, null, undefined, context);\n const ocorrencias = normalizarOcorrencias(result);\n const scoreResult = pontuarWorkflow(conteudo, relPath);\n workflowsInfo.push({ nome: wf, score: scoreResult.percentage, ocorrencias: ocorrencias.length });\n todasOcorrencias.push(...ocorrencias);\n }\n\n const contextGlobal = montarContextoExecucao(workflowDir, workflowFiles);\n const resultGlobal = await analistaGithubActionsGlobal.aplicar('', '', null, undefined, contextGlobal);\n todasOcorrencias.push(...normalizarOcorrencias(resultGlobal));\n\n const tempoAnalise = Date.now() - startTime;\n return { todasOcorrencias, workflowsInfo, tempoAnalise };\n}\n\nfunction calcularScoreGeral(workflowsInfo: Array<{ score: number }>): number {\n return workflowsInfo.length > 0\n ? Math.round(workflowsInfo.reduce((sum, item) => sum + item.score, 0) / workflowsInfo.length)\n : 100;\n}\n\nexport function comandoGithubActions(): Command {\n const cmd = new Command('github-actions').alias('gha').description(CliComandoGithubActionsMensagens.descricaoCmd);\n\n cmd.command('scan').alias('s').description(CliComandoGithubActionsMensagens.descricaoScan)\n .option('-p, --path <caminho>', CliComandoGithubActionsMensagens.optPath, '.')\n .option('-w, --workflow <arquivo>', CliComandoGithubActionsMensagens.optWorkflow)\n .option('-j, --json', 'Saída em JSON')\n .option('--compact', 'Saída compacta')\n .option('--fix', CliComandoGithubActionsMensagens.optFix)\n .option('--dry-run', CliComandoGithubActionsMensagens.optDryRun)\n .action(async (opts: {\n path?: string;\n workflow?: string;\n json?: boolean;\n compact?: boolean;\n fix?: boolean;\n dryRun?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const workflowDir = path.join(repoPath, '.github', 'workflows');\n const workflowFilesContent = lerDiretorioWorkflows(workflowDir);\n\n if (workflowFilesContent.length === 0) {\n log.erro(CliComandoGithubActionsMensagens.workflowDirNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n\n let workflowFiles: string[];\n if (opts.workflow) {\n const wfPath = path.join(workflowDir, opts.workflow);\n if (lerArquivoWorkflow(wfPath) === null) {\n log.erro(CliComandoGithubActionsMensagens.workflowNaoEncontrado(opts.workflow));\n sair(ExitCode.Failure);\n return;\n }\n workflowFiles = [opts.workflow];\n } else {\n workflowFiles = workflowFilesContent;\n }\n\n if (workflowFiles.length === 0) {\n log.info(CliComandoGithubActionsMensagens.nenhumWorkflowEncontrado);\n return;\n }\n\n const spinner = opts.json ? {\n text: '',\n start: () => spinner,\n succeed: () => spinner,\n fail: () => spinner\n } : ora({ text: 'Analisando workflows...', spinner: 'dots' }).start();\n\n try {\n const startTime = Date.now();\n const todasOcorrencias: Ocorrencia[] = [];\n const workflowsInfo: Array<{ nome: string; score: number; ocorrencias: number }> = [];\n\n for (const wf of workflowFiles) {\n const wfPath = path.join(workflowDir, wf);\n const conteudo = fs.readFileSync(wfPath, 'utf-8');\n const relPath = `.github/workflows/${wf}`;\n const context = criarContextArquivo(wf, conteudo, workflowDir);\n const result = await analistaGithubActions.aplicar(conteudo, relPath, null, undefined, context);\n const ocorrencias = normalizarOcorrencias(result);\n\n if (opts.fix) {\n const ocorrenciasComFix = ocorrencias.filter(ocorrencia => !!ocorrencia.correcao);\n let conteudoAtualizado = conteudo;\n if (ocorrenciasComFix.length > 0) {\n conteudoAtualizado = aplicarCorrecoes(conteudo, ocorrenciasComFix);\n }\n const detectores = obterDetectoresGithubActions();\n const fixers = autofixEngine.extrairFixers(detectores);\n if (fixers.length > 0) {\n conteudoAtualizado = autofixEngine.aplicarFixes(conteudoAtualizado, fixers);\n }\n if (conteudoAtualizado !== conteudo) {\n if (opts.dryRun) {\n log.info(CliComandoGithubActionsMensagens.dryRunAlteracoes(wf));\n log.info(conteudoAtualizado);\n } else {\n salvarArquivoCorrigido(wfPath, conteudoAtualizado);\n log.sucesso(CliComandoGithubActionsMensagens.correcoesAplicadas(wf));\n }\n }\n }\n\n const score = Math.max(SCORE_MIN, SCORE_MAX - ocorrencias.length * PENALTY_PER_OCCURRENCE);\n workflowsInfo.push({ nome: wf, score, ocorrencias: ocorrencias.length });\n todasOcorrencias.push(...ocorrencias);\n }\n\n const contextGlobal = montarContextoExecucao(workflowDir, workflowFiles);\n const resultGlobal = await analistaGithubActionsGlobal.aplicar('', '', null, undefined, contextGlobal);\n todasOcorrencias.push(...normalizarOcorrencias(resultGlobal));\n\n const tempoAnalise = Date.now() - startTime;\n const scoreGeral = calcularScoreGeral(workflowsInfo);\n\n spinner.succeed(CliComandoGithubActionsMensagens.analiseConcluida(workflowFiles.length, todasOcorrencias.length));\n\n if (opts.json) {\n const dados = prepararDadosRelatorio(todasOcorrencias, path.basename(repoPath), tempoAnalise, workflowsInfo);\n console.log(JSON.stringify(dados, null, 2));\n return;\n }\n if (opts.compact) {\n log.info(CliComandoGithubActionsMensagens.scoreCompacto(scoreGeral, workflowFiles.length, todasOcorrencias.length));\n return;\n }\n\n log.info(CliComandoGithubActionsMensagens.scoreGeral(scoreGeral));\n log.info(CliComandoGithubActionsMensagens.workflowsAnalisados(workflowFiles.length));\n log.info(CliComandoGithubActionsMensagens.totalOcorrencias(todasOcorrencias.length));\n log.info(CliComandoGithubActionsMensagens.tempoAnalise(tempoAnalise));\n log.info(CliComandoGithubActionsMensagens.workflowsTitulo);\n for (const wf of workflowsInfo) {\n const icon = wf.score >= 80 ? '[OK]' : wf.score >= 50 ? '[AVISO]' : '[ERRO]';\n log.info(CliComandoGithubActionsMensagens.workflowItem(icon, wf.nome, wf.score, wf.ocorrencias));\n }\n if (todasOcorrencias.length > 0) {\n log.info(CliComandoGithubActionsMensagens.ocorrenciasTitulo);\n for (const ocorrencia of todasOcorrencias.slice(0, 20)) {\n const nivel = ocorrencia.nivel || 'info';\n const nivelIcon = nivel === 'erro' ? '[RED]' : nivel === 'aviso' ? '[YELLOW]' : '[BLUE]';\n log.info(CliComandoGithubActionsMensagens.ocorrenciaItem(nivelIcon, ocorrencia.relPath, ocorrencia.linha ?? 0, ocorrencia.mensagem));\n }\n if (todasOcorrencias.length > 20) {\n log.info(CliComandoGithubActionsMensagens.maisOcorrencias(todasOcorrencias.length - 20));\n }\n }\n } catch (err) {\n spinner.fail(CliComandoGithubActionsMensagens.erroAnalise);\n log.erro(err instanceof Error ? err.message : String(err));\n sair(ExitCode.Failure);\n }\n });\n\n cmd.command('report').alias('r').description(CliComandoGithubActionsMensagens.descricaoReport)\n .option('-p, --path <caminho>', CliComandoGithubActionsMensagens.optPath, '.')\n .option('-f, --format <formato>', 'Formato do relatório (json, markdown, html, csv)', 'markdown')\n .option('-o, --output <arquivo>', 'Arquivo de saída')\n .option('--titulo <titulo>', 'Título do relatório')\n .option('--no-detalhes', CliComandoGithubActionsMensagens.optNoDetalhes)\n .action(async (opts: {\n path?: string;\n format?: string;\n output?: string;\n titulo?: string;\n detalhes?: boolean;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const workflowDir = path.join(repoPath, '.github', 'workflows');\n const workflowFiles = lerDiretorioWorkflows(workflowDir);\n\n if (workflowFiles.length === 0) {\n log.erro(CliComandoGithubActionsMensagens.workflowDirNaoEncontrado);\n sair(ExitCode.Failure);\n return;\n }\n\n const formato = opts.format as FormatoRelatorio;\n if (!['json', 'markdown', 'html', 'csv'].includes(formato)) {\n log.erro(CliComandoGithubActionsMensagens.formatoInvalido(formato));\n sair(ExitCode.Failure);\n return;\n }\n\n const spinner = ora({ text: 'Gerando relatório...', spinner: 'dots' }).start();\n\n try {\n const { todasOcorrencias, workflowsInfo, tempoAnalise } = await processarWorkflows(workflowDir, workflowFiles);\n const output = opts.output || `github-actions-report.${formato === 'markdown' ? 'md' : formato}`;\n const dados = prepararDadosRelatorio(todasOcorrencias, path.basename(repoPath), tempoAnalise, workflowsInfo);\n await gerarRelatorio(dados, {\n formato,\n output,\n titulo: opts.titulo,\n incluirDetalhes: opts.detalhes !== false\n });\n spinner.succeed(CliComandoGithubActionsMensagens.relatorioGerado(output));\n log.info(CliComandoGithubActionsMensagens.formatoRelatorio(formato));\n log.info(CliComandoGithubActionsMensagens.scoreReport(dados.scoreGeral));\n log.info(CliComandoGithubActionsMensagens.ocorrenciasReport(todasOcorrencias.length));\n } catch (err) {\n spinner.fail(CliComandoGithubActionsMensagens.erroGerarRelatorio);\n log.erro(err instanceof Error ? err.message : String(err));\n sair(ExitCode.Failure);\n }\n });\n\n cmd.command('gate').alias('g').description(CliComandoGithubActionsMensagens.descricaoGate)\n .option('-p, --path <caminho>', CliComandoGithubActionsMensagens.optPath, '.')\n .option('-t, --threshold <numero>', 'Score mínimo aceitável (0-100)', DEFAULT_GATE_THRESHOLD.toString())\n .option('-w, --workflow <arquivo>', 'Verificar workflow específico')\n .option('-j, --json', 'Saída em JSON para consumo externo')\n .option('--fail-on <nivel>', 'Nível mínimo para falhar (erro, aviso, info)', 'erro')\n .action(async (opts: {\n path?: string;\n threshold?: string;\n workflow?: string;\n json?: boolean;\n failOn?: string;\n }) => {\n const repoPath = path.resolve(opts.path || '.');\n const workflowDir = path.join(repoPath, '.github', 'workflows');\n const threshold = parseInt(opts.threshold || DEFAULT_GATE_THRESHOLD.toString(), 10);\n const workflowFilesContent = lerDiretorioWorkflows(workflowDir);\n\n if (workflowFilesContent.length === 0) {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error: CliComandoGithubActionsMensagens.workflowDirNaoEncontrado }));\n } else {\n log.erro(CliComandoGithubActionsMensagens.workflowDirNaoEncontrado);\n }\n sair(ExitCode.Failure);\n return;\n }\n\n let workflowFiles: string[];\n if (opts.workflow) {\n const wfPath = path.join(workflowDir, opts.workflow);\n if (lerArquivoWorkflow(wfPath) === null) {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error: CliComandoGithubActionsMensagens.workflowNaoEncontrado(opts.workflow) }));\n } else {\n log.erro(CliComandoGithubActionsMensagens.workflowNaoEncontrado(opts.workflow));\n }\n sair(ExitCode.Failure);\n return;\n }\n workflowFiles = [opts.workflow];\n } else {\n workflowFiles = workflowFilesContent;\n }\n\n if (workflowFiles.length === 0) {\n if (opts.json) {\n console.log(JSON.stringify({ success: true, score: SCORE_MAX, message: CliComandoGithubActionsMensagens.nenhumWorkflowEncontrado }));\n } else {\n log.info(CliComandoGithubActionsMensagens.nenhumWorkflowEncontrado);\n }\n return;\n }\n\n try {\n const { todasOcorrencias, workflowsInfo, tempoAnalise: _tempoAnalise } = await processarWorkflows(workflowDir, workflowFiles);\n const scoreGeral = calcularScoreGeral(workflowsInfo);\n const erros = todasOcorrencias.filter(ocorrencia => ocorrencia.nivel === 'erro').length;\n const avisos = todasOcorrencias.filter(ocorrencia => ocorrencia.nivel === 'aviso').length;\n\n let passou = true;\n const motivosFalha: string[] = [];\n\n if (scoreGeral < threshold) {\n passou = false;\n motivosFalha.push(`Score ${scoreGeral} abaixo do threshold ${threshold}`);\n }\n if (opts.failOn === 'erro' && erros > 0) {\n passou = false;\n motivosFalha.push(`${erros} erro(s) crítico(s) encontrado(s)`);\n }\n if (opts.failOn === 'aviso' && erros + avisos > 0) {\n passou = false;\n motivosFalha.push(`${erros + avisos} erro(s)/aviso(s) encontrado(s)`);\n }\n\n const resultado = {\n success: passou,\n score: scoreGeral,\n threshold,\n workflows: workflowsInfo,\n ocorrencias: {\n total: todasOcorrencias.length,\n erros,\n avisos,\n info: todasOcorrencias.filter(ocorrencia => ocorrencia.nivel === 'info').length\n },\n motivosFalha: passou ? [] : motivosFalha\n };\n\n if (opts.json) {\n console.log(JSON.stringify(resultado, null, 2));\n } else if (passou) {\n log.sucesso(CliComandoGithubActionsMensagens.gatePassou(scoreGeral, threshold));\n } else {\n log.erro(CliComandoGithubActionsMensagens.gateFalhou(scoreGeral, threshold));\n for (const motivo of motivosFalha) {\n log.erro(CliComandoGithubActionsMensagens.gateFalhaMotivo(motivo));\n }\n }\n\n if (!passou) sair(ExitCode.Failure);\n } catch (err) {\n log.erro(err instanceof Error ? err.message : String(err));\n sair(ExitCode.Failure);\n }\n });\n\n cmd.command('app').description(CliComandoGithubActionsMensagens.descricaoApp)\n .option('-p, --port <number>', 'Porta do servidor', process.env.TUTANUS_API_PORT || process.env.PORT || '3000')\n .action(async (opts: { port: string }) => {\n const appId = process.env.GITHUB_APP_ID;\n const privateKey = process.env.GITHUB_PRIVATE_KEY;\n const webhookSecret = process.env.GITHUB_WEBHOOK_SECRET;\n if (!appId || !privateKey || !webhookSecret) {\n log.erro(CliComandoGithubActionsMensagens.appSetupRequired);\n log.erro(' - GITHUB_APP_ID');\n log.erro(' - GITHUB_PRIVATE_KEY');\n log.erro(' - GITHUB_WEBHOOK_SECRET');\n log.info(CliComandoGithubActionsMensagens.appDicaEnv);\n sair(ExitCode.Failure);\n return;\n }\n try {\n await iniciarServidorApp({\n appId,\n privateKey: privateKey.replace(/\\\\n/g, '\\n'),\n webhookSecret,\n port: parseInt(opts.port, 10),\n });\n } catch (err) {\n log.erro(CliComandoGithubActionsMensagens.erroIniciarServidor(err instanceof Error ? err.message : String(err)));\n sair(ExitCode.Failure);\n }\n });\n\n return cmd;\n}\n"]}