tutanus 0.12.3 → 0.12.5

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 (726) hide show
  1. package/README.md +6 -6
  2. package/dist/analysts/azure-pipelines/corrections/correction-azure.d.ts.map +1 -1
  3. package/dist/analysts/azure-pipelines/corrections/correction-azure.js +2 -1
  4. package/dist/analysts/azure-pipelines/corrections/correction-azure.js.map +1 -1
  5. package/dist/analysts/circleci/corrections/correction-circleci.d.ts.map +1 -1
  6. package/dist/analysts/circleci/corrections/correction-circleci.js +2 -1
  7. package/dist/analysts/circleci/corrections/correction-circleci.js.map +1 -1
  8. package/dist/analysts/converters/converter-base.js.map +1 -1
  9. package/dist/analysts/converters/engines/converter-gha-to-gitlab.js.map +1 -1
  10. package/dist/analysts/converters/index.js.map +1 -1
  11. package/dist/analysts/corrections/analyst-quick-fixes.d.ts.map +1 -1
  12. package/dist/analysts/corrections/analyst-quick-fixes.js +1 -0
  13. package/dist/analysts/corrections/analyst-quick-fixes.js.map +1 -1
  14. package/dist/analysts/corrections/analyst-scoring.d.ts.map +1 -1
  15. package/dist/analysts/corrections/analyst-scoring.js +1 -0
  16. package/dist/analysts/corrections/analyst-scoring.js.map +1 -1
  17. package/dist/analysts/corrections/map-reversion.js +2 -2
  18. package/dist/analysts/corrections/map-reversion.js.map +1 -1
  19. package/dist/analysts/corrections/pruning.js +3 -3
  20. package/dist/analysts/corrections/pruning.js.map +1 -1
  21. package/dist/analysts/css/corrections/correction-css.d.ts.map +1 -1
  22. package/dist/analysts/css/corrections/correction-css.js +2 -1
  23. package/dist/analysts/css/corrections/correction-css.js.map +1 -1
  24. package/dist/analysts/css/detectors/detector-css-best-practices.d.ts.map +1 -1
  25. package/dist/analysts/css/detectors/detector-css-best-practices.js +11 -10
  26. package/dist/analysts/css/detectors/detector-css-best-practices.js.map +1 -1
  27. package/dist/analysts/detectors/detector-recommendation-architecture.js +2 -2
  28. package/dist/analysts/detectors/detector-recommendation-architecture.js.map +1 -1
  29. package/dist/analysts/github-actions/analysts/analyst-github-actions.d.ts.map +1 -1
  30. package/dist/analysts/github-actions/analysts/analyst-github-actions.js +10 -9
  31. package/dist/analysts/github-actions/analysts/analyst-github-actions.js.map +1 -1
  32. package/dist/analysts/github-actions/corrections/autofix-engine.d.ts.map +1 -1
  33. package/dist/analysts/github-actions/corrections/autofix-engine.js +3 -1
  34. package/dist/analysts/github-actions/corrections/autofix-engine.js.map +1 -1
  35. package/dist/analysts/github-actions/corrections/correction-workflow.d.ts.map +1 -1
  36. package/dist/analysts/github-actions/corrections/correction-workflow.js +2 -1
  37. package/dist/analysts/github-actions/corrections/correction-workflow.js.map +1 -1
  38. package/dist/analysts/github-actions/detectors/detector-dependencies-vulnerable.d.ts.map +1 -1
  39. package/dist/analysts/github-actions/detectors/detector-dependencies-vulnerable.js +8 -7
  40. package/dist/analysts/github-actions/detectors/detector-dependencies-vulnerable.js.map +1 -1
  41. package/dist/analysts/github-actions/detectors/detector-workflow-accessibility.d.ts.map +1 -1
  42. package/dist/analysts/github-actions/detectors/detector-workflow-accessibility.js +5 -4
  43. package/dist/analysts/github-actions/detectors/detector-workflow-accessibility.js.map +1 -1
  44. package/dist/analysts/github-actions/detectors/detector-workflow-security.d.ts.map +1 -1
  45. package/dist/analysts/github-actions/detectors/detector-workflow-security.js +21 -20
  46. package/dist/analysts/github-actions/detectors/detector-workflow-security.js.map +1 -1
  47. package/dist/analysts/github-actions/detectors/detector-workflow-trigger-unsafe.d.ts.map +1 -1
  48. package/dist/analysts/github-actions/detectors/detector-workflow-trigger-unsafe.js +9 -8
  49. package/dist/analysts/github-actions/detectors/detector-workflow-trigger-unsafe.js.map +1 -1
  50. package/dist/analysts/github-actions/detectors/org-verified.js.map +1 -1
  51. package/dist/analysts/github-actions/reports/generator-report-github-actions.js +4 -4
  52. package/dist/analysts/github-actions/reports/generator-report-github-actions.js.map +1 -1
  53. package/dist/analysts/gitlab-ci/analysts/analyst-gitlab-ci.d.ts.map +1 -1
  54. package/dist/analysts/gitlab-ci/analysts/analyst-gitlab-ci.js +2 -1
  55. package/dist/analysts/gitlab-ci/analysts/analyst-gitlab-ci.js.map +1 -1
  56. package/dist/analysts/gitlab-ci/corrections/correction-gitlab-ci.d.ts.map +1 -1
  57. package/dist/analysts/gitlab-ci/corrections/correction-gitlab-ci.js +2 -1
  58. package/dist/analysts/gitlab-ci/corrections/correction-gitlab-ci.js.map +1 -1
  59. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-performance.d.ts.map +1 -1
  60. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-performance.js +4 -3
  61. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-performance.js.map +1 -1
  62. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-security.d.ts.map +1 -1
  63. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-security.js +4 -3
  64. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-security.js.map +1 -1
  65. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-structure.d.ts.map +1 -1
  66. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-structure.js +3 -2
  67. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-structure.js.map +1 -1
  68. package/dist/analysts/go/detectors/detector-conventions.js +4 -4
  69. package/dist/analysts/go/detectors/detector-conventions.js.map +1 -1
  70. package/dist/analysts/go/detectors/detector-errors-un-handled.js +1 -1
  71. package/dist/analysts/go/detectors/detector-errors-un-handled.js.map +1 -1
  72. package/dist/analysts/go/detectors/detector-vulnerabilities.js +3 -3
  73. package/dist/analysts/go/detectors/detector-vulnerabilities.js.map +1 -1
  74. package/dist/analysts/html/corrections/correction-html.d.ts.map +1 -1
  75. package/dist/analysts/html/corrections/correction-html.js +2 -1
  76. package/dist/analysts/html/corrections/correction-html.js.map +1 -1
  77. package/dist/analysts/jenkins/corrections/correction-jenkins.d.ts.map +1 -1
  78. package/dist/analysts/jenkins/corrections/correction-jenkins.js +2 -1
  79. package/dist/analysts/jenkins/corrections/correction-jenkins.js.map +1 -1
  80. package/dist/analysts/js-ts/analysts/analyst-todo-comments.d.ts.map +1 -1
  81. package/dist/analysts/js-ts/analysts/analyst-todo-comments.js +2 -1
  82. package/dist/analysts/js-ts/analysts/analyst-todo-comments.js.map +1 -1
  83. package/dist/analysts/js-ts/detectors/detector-anti-patterns-async.d.ts.map +1 -1
  84. package/dist/analysts/js-ts/detectors/detector-anti-patterns-async.js +3 -2
  85. package/dist/analysts/js-ts/detectors/detector-anti-patterns-async.js.map +1 -1
  86. package/dist/analysts/js-ts/detectors/detector-context-smart.js +10 -10
  87. package/dist/analysts/js-ts/detectors/detector-context-smart.js.map +1 -1
  88. package/dist/analysts/js-ts/detectors/detector-leaks-memory.d.ts.map +1 -1
  89. package/dist/analysts/js-ts/detectors/detector-leaks-memory.js +4 -3
  90. package/dist/analysts/js-ts/detectors/detector-leaks-memory.js.map +1 -1
  91. package/dist/analysts/js-ts/detectors/detector-types-unsafe.d.ts.map +1 -1
  92. package/dist/analysts/js-ts/detectors/detector-types-unsafe.js +35 -34
  93. package/dist/analysts/js-ts/detectors/detector-types-unsafe.js.map +1 -1
  94. package/dist/analysts/plugins/detector-documentation.js.map +1 -1
  95. package/dist/analysts/plugins/index.js.map +1 -1
  96. package/dist/analysts/python/corrections/correction-python.d.ts.map +1 -1
  97. package/dist/analysts/python/corrections/correction-python.js +2 -1
  98. package/dist/analysts/python/corrections/correction-python.js.map +1 -1
  99. package/dist/analysts/react/corrections/correction-react.d.ts.map +1 -1
  100. package/dist/analysts/react/corrections/correction-react.js +2 -1
  101. package/dist/analysts/react/corrections/correction-react.js.map +1 -1
  102. package/dist/analysts/rust/detectors/detector-conventions.js +4 -4
  103. package/dist/analysts/rust/detectors/detector-conventions.js.map +1 -1
  104. package/dist/analysts/rust/detectors/detector-errors-potential.js +4 -4
  105. package/dist/analysts/rust/detectors/detector-errors-potential.js.map +1 -1
  106. package/dist/analysts/rust/detectors/detector-unsafe.js +2 -2
  107. package/dist/analysts/rust/detectors/detector-unsafe.js.map +1 -1
  108. package/dist/analysts/scorers/scorer.js +67 -67
  109. package/dist/analysts/scorers/scorer.js.map +1 -1
  110. package/dist/analysts/shell/analysts/analyst-shell.d.ts.map +1 -1
  111. package/dist/analysts/shell/analysts/analyst-shell.js +17 -16
  112. package/dist/analysts/shell/analysts/analyst-shell.js.map +1 -1
  113. package/dist/analysts/shell/corrections/correction-shell.d.ts.map +1 -1
  114. package/dist/analysts/shell/corrections/correction-shell.js +2 -1
  115. package/dist/analysts/shell/corrections/correction-shell.js.map +1 -1
  116. package/dist/analysts/sql/corrections/correction-sql.d.ts.map +1 -1
  117. package/dist/analysts/sql/corrections/correction-sql.js +2 -1
  118. package/dist/analysts/sql/corrections/correction-sql.js.map +1 -1
  119. package/dist/analysts/svg/corrections/correction-svg.d.ts.map +1 -1
  120. package/dist/analysts/svg/corrections/correction-svg.js +2 -1
  121. package/dist/analysts/svg/corrections/correction-svg.js.map +1 -1
  122. package/dist/analysts/tailwind/corrections/correction-tailwind.d.ts.map +1 -1
  123. package/dist/analysts/tailwind/corrections/correction-tailwind.js +2 -1
  124. package/dist/analysts/tailwind/corrections/correction-tailwind.js.map +1 -1
  125. package/dist/analysts/xml/corrections/correction-xml.d.ts.map +1 -1
  126. package/dist/analysts/xml/corrections/correction-xml.js +2 -1
  127. package/dist/analysts/xml/corrections/correction-xml.js.map +1 -1
  128. package/dist/app/github/app/repo-downloader.d.ts +2 -0
  129. package/dist/app/github/app/repo-downloader.d.ts.map +1 -1
  130. package/dist/app/github/app/repo-downloader.js +2 -2
  131. package/dist/app/github/app/repo-downloader.js.map +1 -1
  132. package/dist/app/github/app/webhook-handler.js +3 -3
  133. package/dist/app/github/app/webhook-handler.js.map +1 -1
  134. package/dist/app/github/jobs/auto-fix-job.d.ts.map +1 -1
  135. package/dist/app/github/jobs/auto-fix-job.js +19 -3
  136. package/dist/app/github/jobs/auto-fix-job.js.map +1 -1
  137. package/dist/app/github/push-analysis/pr-analysis-service.d.ts.map +1 -1
  138. package/dist/app/github/push-analysis/pr-analysis-service.js +2 -1
  139. package/dist/app/github/push-analysis/pr-analysis-service.js.map +1 -1
  140. package/dist/app/github/push-analysis/push-analysis-service.d.ts.map +1 -1
  141. package/dist/app/github/push-analysis/push-analysis-service.js +21 -8
  142. package/dist/app/github/push-analysis/push-analysis-service.js.map +1 -1
  143. package/dist/app/github/push-analysis/push-report.js +2 -2
  144. package/dist/app/github/push-analysis/push-report.js.map +1 -1
  145. package/dist/cli/commands/command-azure.js +1 -1
  146. package/dist/cli/commands/command-azure.js.map +1 -1
  147. package/dist/cli/commands/command-circleci.js +1 -1
  148. package/dist/cli/commands/command-circleci.js.map +1 -1
  149. package/dist/cli/commands/command-convert.js.map +1 -1
  150. package/dist/cli/commands/command-github-actions.js +1 -1
  151. package/dist/cli/commands/command-github-actions.js.map +1 -1
  152. package/dist/cli/commands/command-gitlab-ci.js +1 -1
  153. package/dist/cli/commands/command-gitlab-ci.js.map +1 -1
  154. package/dist/cli/commands/command-jenkins.js +1 -1
  155. package/dist/cli/commands/command-jenkins.js.map +1 -1
  156. package/dist/cli/commands/command-licenses.js +4 -4
  157. package/dist/cli/commands/command-licenses.js.map +1 -1
  158. package/dist/cli/commands/command-server.d.ts.map +1 -1
  159. package/dist/cli/commands/command-server.js +11 -7
  160. package/dist/cli/commands/command-server.js.map +1 -1
  161. package/dist/cli/diagnostic/exporters/compliance-exporter.js +2 -2
  162. package/dist/cli/diagnostic/exporters/compliance-exporter.js.map +1 -1
  163. package/dist/cli/diagnostic/exporters/markdown-exporter.js +7 -7
  164. package/dist/cli/diagnostic/exporters/markdown-exporter.js.map +1 -1
  165. package/dist/cli/diagnostic/handlers/archetype-handler.js.map +1 -1
  166. package/dist/cli/diagnostic/handlers/guardian-handler.js.map +1 -1
  167. package/dist/cli/diagnostic/processing-diagnostic.js +1 -1
  168. package/dist/cli/diagnostic/processing-diagnostic.js.map +1 -1
  169. package/dist/core/config/auto/fix-config.js.map +1 -1
  170. package/dist/core/config/auto/validation.d.ts.map +1 -1
  171. package/dist/core/config/auto/validation.js +1 -1
  172. package/dist/core/config/auto/validation.js.map +1 -1
  173. package/dist/core/config/excludes-padrao.d.ts.map +1 -1
  174. package/dist/core/config/excludes-padrao.js +3 -1
  175. package/dist/core/config/excludes-padrao.js.map +1 -1
  176. package/dist/core/execution/executor.d.ts.map +1 -1
  177. package/dist/core/execution/executor.js +40 -41
  178. package/dist/core/execution/executor.js.map +1 -1
  179. package/dist/core/execution/inquisitor.d.ts.map +1 -1
  180. package/dist/core/execution/inquisitor.js +21 -20
  181. package/dist/core/execution/inquisitor.js.map +1 -1
  182. package/dist/core/execution/scanner.js.map +1 -1
  183. package/dist/core/messages/en/analysts/analyst-github-actions-messages.d.ts +45 -0
  184. package/dist/core/messages/en/analysts/analyst-github-actions-messages.d.ts.map +1 -1
  185. package/dist/core/messages/en/analysts/analyst-github-actions-messages.js +45 -0
  186. package/dist/core/messages/en/analysts/analyst-github-actions-messages.js.map +1 -1
  187. package/dist/core/messages/en/analysts/analyst-gitlab-ci-messages.d.ts +12 -0
  188. package/dist/core/messages/en/analysts/analyst-gitlab-ci-messages.d.ts.map +1 -0
  189. package/dist/core/messages/en/analysts/analyst-gitlab-ci-messages.js +12 -0
  190. package/dist/core/messages/en/analysts/analyst-gitlab-ci-messages.js.map +1 -0
  191. package/dist/core/messages/en/analysts/analyst-shell-messages.d.ts +19 -0
  192. package/dist/core/messages/en/analysts/analyst-shell-messages.d.ts.map +1 -0
  193. package/dist/core/messages/en/analysts/analyst-shell-messages.js +19 -0
  194. package/dist/core/messages/en/analysts/analyst-shell-messages.js.map +1 -0
  195. package/dist/core/messages/en/analysts/analyst-todo-comments-messages.d.ts +1 -0
  196. package/dist/core/messages/en/analysts/analyst-todo-comments-messages.d.ts.map +1 -1
  197. package/dist/core/messages/en/analysts/analyst-todo-comments-messages.js +2 -1
  198. package/dist/core/messages/en/analysts/analyst-todo-comments-messages.js.map +1 -1
  199. package/dist/core/messages/en/analysts/archetypes-extra-messages.d.ts +2 -2
  200. package/dist/core/messages/en/analysts/archetypes-extra-messages.js +2 -2
  201. package/dist/core/messages/en/analysts/archetypes-extra-messages.js.map +1 -1
  202. package/dist/core/messages/en/analysts/detector-clean-arch-messages.d.ts +4 -4
  203. package/dist/core/messages/en/analysts/detector-clean-arch-messages.js +4 -4
  204. package/dist/core/messages/en/analysts/detector-clean-arch-messages.js.map +1 -1
  205. package/dist/core/messages/en/analysts/detector-css-messages.d.ts +13 -0
  206. package/dist/core/messages/en/analysts/detector-css-messages.d.ts.map +1 -0
  207. package/dist/core/messages/en/analysts/detector-css-messages.js +13 -0
  208. package/dist/core/messages/en/analysts/detector-css-messages.js.map +1 -0
  209. package/dist/core/messages/en/analysts/detector-js-ts-messages.d.ts +2 -2
  210. package/dist/core/messages/en/analysts/detector-js-ts-messages.js +2 -2
  211. package/dist/core/messages/en/analysts/detector-js-ts-messages.js.map +1 -1
  212. package/dist/core/messages/en/analysts/index.d.ts +3 -0
  213. package/dist/core/messages/en/analysts/index.d.ts.map +1 -1
  214. package/dist/core/messages/en/analysts/index.js +3 -0
  215. package/dist/core/messages/en/analysts/index.js.map +1 -1
  216. package/dist/core/messages/en/analysts/map-reversion-extra-messages.d.ts +6 -6
  217. package/dist/core/messages/en/analysts/map-reversion-extra-messages.js +6 -6
  218. package/dist/core/messages/en/analysts/map-reversion-extra-messages.js.map +1 -1
  219. package/dist/core/messages/en/analysts/report-github-actions-messages.d.ts +2 -2
  220. package/dist/core/messages/en/analysts/report-github-actions-messages.js +2 -2
  221. package/dist/core/messages/en/analysts/report-github-actions-messages.js.map +1 -1
  222. package/dist/core/messages/en/analysts/scorer-messages.d.ts +45 -45
  223. package/dist/core/messages/en/analysts/scorer-messages.js +49 -49
  224. package/dist/core/messages/en/analysts/scorer-messages.js.map +1 -1
  225. package/dist/core/messages/en/api/api-server-messages.d.ts +1 -0
  226. package/dist/core/messages/en/api/api-server-messages.d.ts.map +1 -1
  227. package/dist/core/messages/en/api/api-server-messages.js +1 -0
  228. package/dist/core/messages/en/api/api-server-messages.js.map +1 -1
  229. package/dist/core/messages/en/cli/cli-command-convert-messages.d.ts +1 -1
  230. package/dist/core/messages/en/cli/cli-command-convert-messages.js +1 -1
  231. package/dist/core/messages/en/cli/cli-command-convert-messages.js.map +1 -1
  232. package/dist/core/messages/en/cli/cli-command-format-messages.d.ts +1 -1
  233. package/dist/core/messages/en/cli/cli-command-format-messages.js +1 -1
  234. package/dist/core/messages/en/cli/cli-command-format-messages.js.map +1 -1
  235. package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts +1 -1
  236. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js +4 -4
  237. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js.map +1 -1
  238. package/dist/core/messages/en/cli/cli-command-server-messages.d.ts +4 -0
  239. package/dist/core/messages/en/cli/cli-command-server-messages.d.ts.map +1 -1
  240. package/dist/core/messages/en/cli/cli-command-server-messages.js +4 -0
  241. package/dist/core/messages/en/cli/cli-command-server-messages.js.map +1 -1
  242. package/dist/core/messages/en/cli/cli-command-update-messages.d.ts +2 -2
  243. package/dist/core/messages/en/cli/cli-command-update-messages.js +2 -2
  244. package/dist/core/messages/en/cli/cli-command-update-messages.js.map +1 -1
  245. package/dist/core/messages/en/cli/cli-flags-validator-messages.d.ts +3 -3
  246. package/dist/core/messages/en/cli/cli-flags-validator-messages.js +3 -3
  247. package/dist/core/messages/en/cli/cli-flags-validator-messages.js.map +1 -1
  248. package/dist/core/messages/en/core/correcoes-messages.js +2 -2
  249. package/dist/core/messages/en/core/correcoes-messages.js.map +1 -1
  250. package/dist/core/messages/en/core/excecoes-messages.d.ts +1 -0
  251. package/dist/core/messages/en/core/excecoes-messages.d.ts.map +1 -1
  252. package/dist/core/messages/en/core/excecoes-messages.js +1 -0
  253. package/dist/core/messages/en/core/excecoes-messages.js.map +1 -1
  254. package/dist/core/messages/en/core/executor-extra-messages.d.ts +3 -0
  255. package/dist/core/messages/en/core/executor-extra-messages.d.ts.map +1 -1
  256. package/dist/core/messages/en/core/executor-extra-messages.js +3 -0
  257. package/dist/core/messages/en/core/executor-extra-messages.js.map +1 -1
  258. package/dist/core/messages/en/core/inquisitor-extra-messages.d.ts +2 -2
  259. package/dist/core/messages/en/core/inquisitor-extra-messages.js +2 -2
  260. package/dist/core/messages/en/core/inquisitor-extra-messages.js.map +1 -1
  261. package/dist/core/messages/en/core/parser-extra-messages.d.ts +3 -3
  262. package/dist/core/messages/en/core/parser-extra-messages.js +3 -3
  263. package/dist/core/messages/en/core/parser-extra-messages.js.map +1 -1
  264. package/dist/core/messages/en/core/plugin-messages.d.ts +18 -0
  265. package/dist/core/messages/en/core/plugin-messages.d.ts.map +1 -1
  266. package/dist/core/messages/en/core/plugin-messages.js +20 -2
  267. package/dist/core/messages/en/core/plugin-messages.js.map +1 -1
  268. package/dist/core/messages/en/github/github-webhook-messages.d.ts +2 -0
  269. package/dist/core/messages/en/github/github-webhook-messages.d.ts.map +1 -1
  270. package/dist/core/messages/en/github/github-webhook-messages.js +2 -0
  271. package/dist/core/messages/en/github/github-webhook-messages.js.map +1 -1
  272. package/dist/core/messages/en/guardian/guardian-messages.d.ts +4 -2
  273. package/dist/core/messages/en/guardian/guardian-messages.d.ts.map +1 -1
  274. package/dist/core/messages/en/guardian/guardian-messages.js +4 -2
  275. package/dist/core/messages/en/guardian/guardian-messages.js.map +1 -1
  276. package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts +2 -2
  277. package/dist/core/messages/en/guardian/watcher-hidden-messages.js +2 -2
  278. package/dist/core/messages/en/guardian/watcher-hidden-messages.js.map +1 -1
  279. package/dist/core/messages/en/log/log-helper.js.map +1 -1
  280. package/dist/core/messages/en/reports/report-async-patterns-messages.d.ts +3 -3
  281. package/dist/core/messages/en/reports/report-async-patterns-messages.js +3 -3
  282. package/dist/core/messages/en/reports/report-async-patterns-messages.js.map +1 -1
  283. package/dist/core/messages/en/reports/report-messages.d.ts +13 -0
  284. package/dist/core/messages/en/reports/report-messages.d.ts.map +1 -1
  285. package/dist/core/messages/en/reports/report-messages.js +14 -1
  286. package/dist/core/messages/en/reports/report-messages.js.map +1 -1
  287. package/dist/core/messages/en/shared/plugin-core-messages.d.ts +2 -2
  288. package/dist/core/messages/en/shared/plugin-core-messages.js +2 -2
  289. package/dist/core/messages/en/shared/plugin-core-messages.js.map +1 -1
  290. package/dist/core/messages/en/shared/plugin-registry-messages.d.ts +4 -4
  291. package/dist/core/messages/en/shared/plugin-registry-messages.js +4 -4
  292. package/dist/core/messages/en/shared/plugin-registry-messages.js.map +1 -1
  293. package/dist/core/messages/en/shared/shared-common-messages.d.ts +2 -0
  294. package/dist/core/messages/en/shared/shared-common-messages.d.ts.map +1 -1
  295. package/dist/core/messages/en/shared/shared-common-messages.js +2 -0
  296. package/dist/core/messages/en/shared/shared-common-messages.js.map +1 -1
  297. package/dist/core/messages/ja/analysts/analyst-github-actions-messages.d.ts +45 -0
  298. package/dist/core/messages/ja/analysts/analyst-github-actions-messages.d.ts.map +1 -1
  299. package/dist/core/messages/ja/analysts/analyst-github-actions-messages.js +45 -0
  300. package/dist/core/messages/ja/analysts/analyst-github-actions-messages.js.map +1 -1
  301. package/dist/core/messages/ja/analysts/analyst-gitlab-ci-messages.d.ts +12 -0
  302. package/dist/core/messages/ja/analysts/analyst-gitlab-ci-messages.d.ts.map +1 -0
  303. package/dist/core/messages/ja/analysts/analyst-gitlab-ci-messages.js +12 -0
  304. package/dist/core/messages/ja/analysts/analyst-gitlab-ci-messages.js.map +1 -0
  305. package/dist/core/messages/ja/analysts/analyst-shell-messages.d.ts +19 -0
  306. package/dist/core/messages/ja/analysts/analyst-shell-messages.d.ts.map +1 -0
  307. package/dist/core/messages/ja/analysts/analyst-shell-messages.js +19 -0
  308. package/dist/core/messages/ja/analysts/analyst-shell-messages.js.map +1 -0
  309. package/dist/core/messages/ja/analysts/analyst-todo-comments-messages.d.ts +1 -0
  310. package/dist/core/messages/ja/analysts/analyst-todo-comments-messages.d.ts.map +1 -1
  311. package/dist/core/messages/ja/analysts/analyst-todo-comments-messages.js +2 -1
  312. package/dist/core/messages/ja/analysts/analyst-todo-comments-messages.js.map +1 -1
  313. package/dist/core/messages/ja/analysts/archetypes-extra-messages.d.ts +2 -2
  314. package/dist/core/messages/ja/analysts/archetypes-extra-messages.js +2 -2
  315. package/dist/core/messages/ja/analysts/archetypes-extra-messages.js.map +1 -1
  316. package/dist/core/messages/ja/analysts/detector-clean-arch-messages.d.ts +4 -4
  317. package/dist/core/messages/ja/analysts/detector-clean-arch-messages.js +4 -4
  318. package/dist/core/messages/ja/analysts/detector-clean-arch-messages.js.map +1 -1
  319. package/dist/core/messages/ja/analysts/detector-css-messages.d.ts +13 -0
  320. package/dist/core/messages/ja/analysts/detector-css-messages.d.ts.map +1 -0
  321. package/dist/core/messages/ja/analysts/detector-css-messages.js +13 -0
  322. package/dist/core/messages/ja/analysts/detector-css-messages.js.map +1 -0
  323. package/dist/core/messages/ja/analysts/detector-js-ts-messages.d.ts +2 -2
  324. package/dist/core/messages/ja/analysts/detector-js-ts-messages.js +2 -2
  325. package/dist/core/messages/ja/analysts/detector-js-ts-messages.js.map +1 -1
  326. package/dist/core/messages/ja/analysts/index.d.ts +3 -0
  327. package/dist/core/messages/ja/analysts/index.d.ts.map +1 -1
  328. package/dist/core/messages/ja/analysts/index.js +3 -0
  329. package/dist/core/messages/ja/analysts/index.js.map +1 -1
  330. package/dist/core/messages/ja/analysts/map-reversion-extra-messages.d.ts +6 -6
  331. package/dist/core/messages/ja/analysts/map-reversion-extra-messages.js +6 -6
  332. package/dist/core/messages/ja/analysts/map-reversion-extra-messages.js.map +1 -1
  333. package/dist/core/messages/ja/analysts/report-github-actions-messages.d.ts +2 -2
  334. package/dist/core/messages/ja/analysts/report-github-actions-messages.js +2 -2
  335. package/dist/core/messages/ja/analysts/report-github-actions-messages.js.map +1 -1
  336. package/dist/core/messages/ja/analysts/scorer-messages.d.ts +45 -45
  337. package/dist/core/messages/ja/analysts/scorer-messages.js +49 -49
  338. package/dist/core/messages/ja/analysts/scorer-messages.js.map +1 -1
  339. package/dist/core/messages/ja/api/api-server-messages.d.ts +1 -0
  340. package/dist/core/messages/ja/api/api-server-messages.d.ts.map +1 -1
  341. package/dist/core/messages/ja/api/api-server-messages.js +1 -0
  342. package/dist/core/messages/ja/api/api-server-messages.js.map +1 -1
  343. package/dist/core/messages/ja/cli/cli-command-analysts-messages.d.ts +2 -2
  344. package/dist/core/messages/ja/cli/cli-command-analysts-messages.js +2 -2
  345. package/dist/core/messages/ja/cli/cli-command-analysts-messages.js.map +1 -1
  346. package/dist/core/messages/ja/cli/cli-command-convert-messages.d.ts +1 -1
  347. package/dist/core/messages/ja/cli/cli-command-convert-messages.js +1 -1
  348. package/dist/core/messages/ja/cli/cli-command-convert-messages.js.map +1 -1
  349. package/dist/core/messages/ja/cli/cli-command-format-messages.d.ts +1 -1
  350. package/dist/core/messages/ja/cli/cli-command-format-messages.js +1 -1
  351. package/dist/core/messages/ja/cli/cli-command-format-messages.js.map +1 -1
  352. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts +1 -1
  353. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js +4 -4
  354. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js.map +1 -1
  355. package/dist/core/messages/ja/cli/cli-command-server-messages.d.ts +4 -0
  356. package/dist/core/messages/ja/cli/cli-command-server-messages.d.ts.map +1 -1
  357. package/dist/core/messages/ja/cli/cli-command-server-messages.js +4 -0
  358. package/dist/core/messages/ja/cli/cli-command-server-messages.js.map +1 -1
  359. package/dist/core/messages/ja/cli/cli-command-update-messages.d.ts +2 -2
  360. package/dist/core/messages/ja/cli/cli-command-update-messages.js +2 -2
  361. package/dist/core/messages/ja/cli/cli-command-update-messages.js.map +1 -1
  362. package/dist/core/messages/ja/cli/cli-flags-validator-messages.d.ts +3 -3
  363. package/dist/core/messages/ja/cli/cli-flags-validator-messages.js +3 -3
  364. package/dist/core/messages/ja/cli/cli-flags-validator-messages.js.map +1 -1
  365. package/dist/core/messages/ja/core/correcoes-messages.js +2 -2
  366. package/dist/core/messages/ja/core/correcoes-messages.js.map +1 -1
  367. package/dist/core/messages/ja/core/excecoes-messages.d.ts +1 -0
  368. package/dist/core/messages/ja/core/excecoes-messages.d.ts.map +1 -1
  369. package/dist/core/messages/ja/core/excecoes-messages.js +1 -0
  370. package/dist/core/messages/ja/core/excecoes-messages.js.map +1 -1
  371. package/dist/core/messages/ja/core/executor-extra-messages.d.ts +3 -0
  372. package/dist/core/messages/ja/core/executor-extra-messages.d.ts.map +1 -1
  373. package/dist/core/messages/ja/core/executor-extra-messages.js +3 -0
  374. package/dist/core/messages/ja/core/executor-extra-messages.js.map +1 -1
  375. package/dist/core/messages/ja/core/inquisitor-extra-messages.d.ts +2 -2
  376. package/dist/core/messages/ja/core/inquisitor-extra-messages.js +2 -2
  377. package/dist/core/messages/ja/core/inquisitor-extra-messages.js.map +1 -1
  378. package/dist/core/messages/ja/core/parser-extra-messages.d.ts +3 -3
  379. package/dist/core/messages/ja/core/parser-extra-messages.js +3 -3
  380. package/dist/core/messages/ja/core/parser-extra-messages.js.map +1 -1
  381. package/dist/core/messages/ja/core/plugin-messages.d.ts +18 -0
  382. package/dist/core/messages/ja/core/plugin-messages.d.ts.map +1 -1
  383. package/dist/core/messages/ja/core/plugin-messages.js +20 -2
  384. package/dist/core/messages/ja/core/plugin-messages.js.map +1 -1
  385. package/dist/core/messages/ja/github/github-webhook-messages.d.ts +2 -0
  386. package/dist/core/messages/ja/github/github-webhook-messages.d.ts.map +1 -1
  387. package/dist/core/messages/ja/github/github-webhook-messages.js +2 -0
  388. package/dist/core/messages/ja/github/github-webhook-messages.js.map +1 -1
  389. package/dist/core/messages/ja/guardian/guardian-messages.d.ts +4 -2
  390. package/dist/core/messages/ja/guardian/guardian-messages.d.ts.map +1 -1
  391. package/dist/core/messages/ja/guardian/guardian-messages.js +4 -2
  392. package/dist/core/messages/ja/guardian/guardian-messages.js.map +1 -1
  393. package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts +2 -2
  394. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js +2 -2
  395. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js.map +1 -1
  396. package/dist/core/messages/ja/log/log-helper.js.map +1 -1
  397. package/dist/core/messages/ja/reports/report-async-patterns-messages.d.ts +3 -3
  398. package/dist/core/messages/ja/reports/report-async-patterns-messages.js +3 -3
  399. package/dist/core/messages/ja/reports/report-async-patterns-messages.js.map +1 -1
  400. package/dist/core/messages/ja/reports/report-messages.d.ts +13 -0
  401. package/dist/core/messages/ja/reports/report-messages.d.ts.map +1 -1
  402. package/dist/core/messages/ja/reports/report-messages.js +14 -1
  403. package/dist/core/messages/ja/reports/report-messages.js.map +1 -1
  404. package/dist/core/messages/ja/shared/plugin-core-messages.d.ts +2 -2
  405. package/dist/core/messages/ja/shared/plugin-core-messages.js +2 -2
  406. package/dist/core/messages/ja/shared/plugin-core-messages.js.map +1 -1
  407. package/dist/core/messages/ja/shared/plugin-registry-messages.d.ts +4 -4
  408. package/dist/core/messages/ja/shared/plugin-registry-messages.js +4 -4
  409. package/dist/core/messages/ja/shared/plugin-registry-messages.js.map +1 -1
  410. package/dist/core/messages/ja/shared/shared-common-messages.d.ts +2 -0
  411. package/dist/core/messages/ja/shared/shared-common-messages.d.ts.map +1 -1
  412. package/dist/core/messages/ja/shared/shared-common-messages.js +2 -0
  413. package/dist/core/messages/ja/shared/shared-common-messages.js.map +1 -1
  414. package/dist/core/messages/pt/analysts/analyst-github-actions-messages.d.ts +45 -0
  415. package/dist/core/messages/pt/analysts/analyst-github-actions-messages.d.ts.map +1 -1
  416. package/dist/core/messages/pt/analysts/analyst-github-actions-messages.js +45 -0
  417. package/dist/core/messages/pt/analysts/analyst-github-actions-messages.js.map +1 -1
  418. package/dist/core/messages/pt/analysts/analyst-gitlab-ci-messages.d.ts +12 -0
  419. package/dist/core/messages/pt/analysts/analyst-gitlab-ci-messages.d.ts.map +1 -0
  420. package/dist/core/messages/pt/analysts/analyst-gitlab-ci-messages.js +12 -0
  421. package/dist/core/messages/pt/analysts/analyst-gitlab-ci-messages.js.map +1 -0
  422. package/dist/core/messages/pt/analysts/analyst-shell-messages.d.ts +19 -0
  423. package/dist/core/messages/pt/analysts/analyst-shell-messages.d.ts.map +1 -0
  424. package/dist/core/messages/pt/analysts/analyst-shell-messages.js +19 -0
  425. package/dist/core/messages/pt/analysts/analyst-shell-messages.js.map +1 -0
  426. package/dist/core/messages/pt/analysts/analyst-todo-comments-messages.d.ts +1 -0
  427. package/dist/core/messages/pt/analysts/analyst-todo-comments-messages.d.ts.map +1 -1
  428. package/dist/core/messages/pt/analysts/analyst-todo-comments-messages.js +2 -1
  429. package/dist/core/messages/pt/analysts/analyst-todo-comments-messages.js.map +1 -1
  430. package/dist/core/messages/pt/analysts/archetypes-extra-messages.d.ts +2 -2
  431. package/dist/core/messages/pt/analysts/archetypes-extra-messages.js +2 -2
  432. package/dist/core/messages/pt/analysts/archetypes-extra-messages.js.map +1 -1
  433. package/dist/core/messages/pt/analysts/detector-clean-arch-messages.d.ts +4 -4
  434. package/dist/core/messages/pt/analysts/detector-clean-arch-messages.js +4 -4
  435. package/dist/core/messages/pt/analysts/detector-clean-arch-messages.js.map +1 -1
  436. package/dist/core/messages/pt/analysts/detector-css-messages.d.ts +13 -0
  437. package/dist/core/messages/pt/analysts/detector-css-messages.d.ts.map +1 -0
  438. package/dist/core/messages/pt/analysts/detector-css-messages.js +13 -0
  439. package/dist/core/messages/pt/analysts/detector-css-messages.js.map +1 -0
  440. package/dist/core/messages/pt/analysts/detector-js-ts-messages.d.ts +2 -2
  441. package/dist/core/messages/pt/analysts/detector-js-ts-messages.js +2 -2
  442. package/dist/core/messages/pt/analysts/detector-js-ts-messages.js.map +1 -1
  443. package/dist/core/messages/pt/analysts/index.d.ts +3 -0
  444. package/dist/core/messages/pt/analysts/index.d.ts.map +1 -1
  445. package/dist/core/messages/pt/analysts/index.js +3 -0
  446. package/dist/core/messages/pt/analysts/index.js.map +1 -1
  447. package/dist/core/messages/pt/analysts/map-reversion-extra-messages.d.ts +6 -6
  448. package/dist/core/messages/pt/analysts/map-reversion-extra-messages.js +6 -6
  449. package/dist/core/messages/pt/analysts/map-reversion-extra-messages.js.map +1 -1
  450. package/dist/core/messages/pt/analysts/report-github-actions-messages.d.ts +2 -2
  451. package/dist/core/messages/pt/analysts/report-github-actions-messages.js +2 -2
  452. package/dist/core/messages/pt/analysts/report-github-actions-messages.js.map +1 -1
  453. package/dist/core/messages/pt/analysts/scorer-messages.d.ts +45 -45
  454. package/dist/core/messages/pt/analysts/scorer-messages.js +49 -49
  455. package/dist/core/messages/pt/analysts/scorer-messages.js.map +1 -1
  456. package/dist/core/messages/pt/api/api-server-messages.d.ts +1 -0
  457. package/dist/core/messages/pt/api/api-server-messages.d.ts.map +1 -1
  458. package/dist/core/messages/pt/api/api-server-messages.js +1 -0
  459. package/dist/core/messages/pt/api/api-server-messages.js.map +1 -1
  460. package/dist/core/messages/pt/cli/cli-command-convert-messages.d.ts +1 -1
  461. package/dist/core/messages/pt/cli/cli-command-convert-messages.js +1 -1
  462. package/dist/core/messages/pt/cli/cli-command-convert-messages.js.map +1 -1
  463. package/dist/core/messages/pt/cli/cli-command-format-messages.d.ts +1 -1
  464. package/dist/core/messages/pt/cli/cli-command-format-messages.js +1 -1
  465. package/dist/core/messages/pt/cli/cli-command-format-messages.js.map +1 -1
  466. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts +1 -1
  467. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js +4 -4
  468. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js.map +1 -1
  469. package/dist/core/messages/pt/cli/cli-command-server-messages.d.ts +4 -0
  470. package/dist/core/messages/pt/cli/cli-command-server-messages.d.ts.map +1 -1
  471. package/dist/core/messages/pt/cli/cli-command-server-messages.js +4 -0
  472. package/dist/core/messages/pt/cli/cli-command-server-messages.js.map +1 -1
  473. package/dist/core/messages/pt/cli/cli-command-update-messages.d.ts +2 -2
  474. package/dist/core/messages/pt/cli/cli-command-update-messages.js +2 -2
  475. package/dist/core/messages/pt/cli/cli-command-update-messages.js.map +1 -1
  476. package/dist/core/messages/pt/cli/cli-flags-validator-messages.d.ts +3 -3
  477. package/dist/core/messages/pt/cli/cli-flags-validator-messages.js +3 -3
  478. package/dist/core/messages/pt/cli/cli-flags-validator-messages.js.map +1 -1
  479. package/dist/core/messages/pt/core/correcoes-messages.js +2 -2
  480. package/dist/core/messages/pt/core/correcoes-messages.js.map +1 -1
  481. package/dist/core/messages/pt/core/excecoes-messages.d.ts +1 -0
  482. package/dist/core/messages/pt/core/excecoes-messages.d.ts.map +1 -1
  483. package/dist/core/messages/pt/core/excecoes-messages.js +1 -0
  484. package/dist/core/messages/pt/core/excecoes-messages.js.map +1 -1
  485. package/dist/core/messages/pt/core/executor-extra-messages.d.ts +3 -0
  486. package/dist/core/messages/pt/core/executor-extra-messages.d.ts.map +1 -1
  487. package/dist/core/messages/pt/core/executor-extra-messages.js +3 -0
  488. package/dist/core/messages/pt/core/executor-extra-messages.js.map +1 -1
  489. package/dist/core/messages/pt/core/inquisitor-extra-messages.d.ts +2 -2
  490. package/dist/core/messages/pt/core/inquisitor-extra-messages.js +2 -2
  491. package/dist/core/messages/pt/core/inquisitor-extra-messages.js.map +1 -1
  492. package/dist/core/messages/pt/core/parser-extra-messages.d.ts +3 -3
  493. package/dist/core/messages/pt/core/parser-extra-messages.js +3 -3
  494. package/dist/core/messages/pt/core/parser-extra-messages.js.map +1 -1
  495. package/dist/core/messages/pt/core/plugin-messages.d.ts +18 -0
  496. package/dist/core/messages/pt/core/plugin-messages.d.ts.map +1 -1
  497. package/dist/core/messages/pt/core/plugin-messages.js +20 -2
  498. package/dist/core/messages/pt/core/plugin-messages.js.map +1 -1
  499. package/dist/core/messages/pt/github/github-webhook-messages.d.ts +2 -0
  500. package/dist/core/messages/pt/github/github-webhook-messages.d.ts.map +1 -1
  501. package/dist/core/messages/pt/github/github-webhook-messages.js +2 -0
  502. package/dist/core/messages/pt/github/github-webhook-messages.js.map +1 -1
  503. package/dist/core/messages/pt/guardian/guardian-messages.d.ts +2 -2
  504. package/dist/core/messages/pt/guardian/guardian-messages.js +2 -2
  505. package/dist/core/messages/pt/guardian/guardian-messages.js.map +1 -1
  506. package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts +2 -2
  507. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js +2 -2
  508. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js.map +1 -1
  509. package/dist/core/messages/pt/log/log-helper.js.map +1 -1
  510. package/dist/core/messages/pt/reports/report-async-patterns-messages.d.ts +3 -3
  511. package/dist/core/messages/pt/reports/report-async-patterns-messages.js +3 -3
  512. package/dist/core/messages/pt/reports/report-async-patterns-messages.js.map +1 -1
  513. package/dist/core/messages/pt/reports/report-messages.d.ts +13 -0
  514. package/dist/core/messages/pt/reports/report-messages.d.ts.map +1 -1
  515. package/dist/core/messages/pt/reports/report-messages.js +14 -1
  516. package/dist/core/messages/pt/reports/report-messages.js.map +1 -1
  517. package/dist/core/messages/pt/shared/plugin-core-messages.d.ts +2 -2
  518. package/dist/core/messages/pt/shared/plugin-core-messages.js +2 -2
  519. package/dist/core/messages/pt/shared/plugin-core-messages.js.map +1 -1
  520. package/dist/core/messages/pt/shared/plugin-registry-messages.d.ts +4 -4
  521. package/dist/core/messages/pt/shared/plugin-registry-messages.js +4 -4
  522. package/dist/core/messages/pt/shared/plugin-registry-messages.js.map +1 -1
  523. package/dist/core/messages/pt/shared/shared-common-messages.d.ts +2 -0
  524. package/dist/core/messages/pt/shared/shared-common-messages.d.ts.map +1 -1
  525. package/dist/core/messages/pt/shared/shared-common-messages.js +2 -0
  526. package/dist/core/messages/pt/shared/shared-common-messages.js.map +1 -1
  527. package/dist/core/messages/zh/analysts/analyst-github-actions-messages.d.ts +45 -0
  528. package/dist/core/messages/zh/analysts/analyst-github-actions-messages.d.ts.map +1 -1
  529. package/dist/core/messages/zh/analysts/analyst-github-actions-messages.js +45 -0
  530. package/dist/core/messages/zh/analysts/analyst-github-actions-messages.js.map +1 -1
  531. package/dist/core/messages/zh/analysts/analyst-gitlab-ci-messages.d.ts +12 -0
  532. package/dist/core/messages/zh/analysts/analyst-gitlab-ci-messages.d.ts.map +1 -0
  533. package/dist/core/messages/zh/analysts/analyst-gitlab-ci-messages.js +12 -0
  534. package/dist/core/messages/zh/analysts/analyst-gitlab-ci-messages.js.map +1 -0
  535. package/dist/core/messages/zh/analysts/analyst-shell-messages.d.ts +19 -0
  536. package/dist/core/messages/zh/analysts/analyst-shell-messages.d.ts.map +1 -0
  537. package/dist/core/messages/zh/analysts/analyst-shell-messages.js +19 -0
  538. package/dist/core/messages/zh/analysts/analyst-shell-messages.js.map +1 -0
  539. package/dist/core/messages/zh/analysts/analyst-todo-comments-messages.d.ts +1 -0
  540. package/dist/core/messages/zh/analysts/analyst-todo-comments-messages.d.ts.map +1 -1
  541. package/dist/core/messages/zh/analysts/analyst-todo-comments-messages.js +2 -1
  542. package/dist/core/messages/zh/analysts/analyst-todo-comments-messages.js.map +1 -1
  543. package/dist/core/messages/zh/analysts/archetypes-extra-messages.d.ts +2 -2
  544. package/dist/core/messages/zh/analysts/archetypes-extra-messages.js +2 -2
  545. package/dist/core/messages/zh/analysts/archetypes-extra-messages.js.map +1 -1
  546. package/dist/core/messages/zh/analysts/detector-clean-arch-messages.d.ts +4 -4
  547. package/dist/core/messages/zh/analysts/detector-clean-arch-messages.js +4 -4
  548. package/dist/core/messages/zh/analysts/detector-clean-arch-messages.js.map +1 -1
  549. package/dist/core/messages/zh/analysts/detector-css-messages.d.ts +13 -0
  550. package/dist/core/messages/zh/analysts/detector-css-messages.d.ts.map +1 -0
  551. package/dist/core/messages/zh/analysts/detector-css-messages.js +13 -0
  552. package/dist/core/messages/zh/analysts/detector-css-messages.js.map +1 -0
  553. package/dist/core/messages/zh/analysts/detector-js-ts-messages.d.ts +2 -2
  554. package/dist/core/messages/zh/analysts/detector-js-ts-messages.js +2 -2
  555. package/dist/core/messages/zh/analysts/detector-js-ts-messages.js.map +1 -1
  556. package/dist/core/messages/zh/analysts/index.d.ts +3 -0
  557. package/dist/core/messages/zh/analysts/index.d.ts.map +1 -1
  558. package/dist/core/messages/zh/analysts/index.js +3 -0
  559. package/dist/core/messages/zh/analysts/index.js.map +1 -1
  560. package/dist/core/messages/zh/analysts/map-reversion-extra-messages.d.ts +6 -6
  561. package/dist/core/messages/zh/analysts/map-reversion-extra-messages.js +6 -6
  562. package/dist/core/messages/zh/analysts/map-reversion-extra-messages.js.map +1 -1
  563. package/dist/core/messages/zh/analysts/report-github-actions-messages.d.ts +2 -2
  564. package/dist/core/messages/zh/analysts/report-github-actions-messages.js +2 -2
  565. package/dist/core/messages/zh/analysts/report-github-actions-messages.js.map +1 -1
  566. package/dist/core/messages/zh/analysts/scorer-messages.d.ts +45 -45
  567. package/dist/core/messages/zh/analysts/scorer-messages.js +49 -49
  568. package/dist/core/messages/zh/analysts/scorer-messages.js.map +1 -1
  569. package/dist/core/messages/zh/api/api-server-messages.d.ts +1 -0
  570. package/dist/core/messages/zh/api/api-server-messages.d.ts.map +1 -1
  571. package/dist/core/messages/zh/api/api-server-messages.js +1 -0
  572. package/dist/core/messages/zh/api/api-server-messages.js.map +1 -1
  573. package/dist/core/messages/zh/cli/cli-command-analysts-messages.d.ts +2 -2
  574. package/dist/core/messages/zh/cli/cli-command-analysts-messages.js +2 -2
  575. package/dist/core/messages/zh/cli/cli-command-analysts-messages.js.map +1 -1
  576. package/dist/core/messages/zh/cli/cli-command-convert-messages.d.ts +1 -1
  577. package/dist/core/messages/zh/cli/cli-command-convert-messages.js +1 -1
  578. package/dist/core/messages/zh/cli/cli-command-convert-messages.js.map +1 -1
  579. package/dist/core/messages/zh/cli/cli-command-format-messages.d.ts +1 -1
  580. package/dist/core/messages/zh/cli/cli-command-format-messages.js +1 -1
  581. package/dist/core/messages/zh/cli/cli-command-format-messages.js.map +1 -1
  582. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts +1 -1
  583. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js +4 -4
  584. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js.map +1 -1
  585. package/dist/core/messages/zh/cli/cli-command-server-messages.d.ts +4 -0
  586. package/dist/core/messages/zh/cli/cli-command-server-messages.d.ts.map +1 -1
  587. package/dist/core/messages/zh/cli/cli-command-server-messages.js +4 -0
  588. package/dist/core/messages/zh/cli/cli-command-server-messages.js.map +1 -1
  589. package/dist/core/messages/zh/cli/cli-command-update-messages.d.ts +2 -2
  590. package/dist/core/messages/zh/cli/cli-command-update-messages.js +2 -2
  591. package/dist/core/messages/zh/cli/cli-command-update-messages.js.map +1 -1
  592. package/dist/core/messages/zh/cli/cli-flags-validator-messages.d.ts +3 -3
  593. package/dist/core/messages/zh/cli/cli-flags-validator-messages.js +3 -3
  594. package/dist/core/messages/zh/cli/cli-flags-validator-messages.js.map +1 -1
  595. package/dist/core/messages/zh/core/correcoes-messages.js +2 -2
  596. package/dist/core/messages/zh/core/correcoes-messages.js.map +1 -1
  597. package/dist/core/messages/zh/core/excecoes-messages.d.ts +1 -0
  598. package/dist/core/messages/zh/core/excecoes-messages.d.ts.map +1 -1
  599. package/dist/core/messages/zh/core/excecoes-messages.js +1 -0
  600. package/dist/core/messages/zh/core/excecoes-messages.js.map +1 -1
  601. package/dist/core/messages/zh/core/executor-extra-messages.d.ts +3 -0
  602. package/dist/core/messages/zh/core/executor-extra-messages.d.ts.map +1 -1
  603. package/dist/core/messages/zh/core/executor-extra-messages.js +3 -0
  604. package/dist/core/messages/zh/core/executor-extra-messages.js.map +1 -1
  605. package/dist/core/messages/zh/core/inquisitor-extra-messages.d.ts +2 -2
  606. package/dist/core/messages/zh/core/inquisitor-extra-messages.js +2 -2
  607. package/dist/core/messages/zh/core/inquisitor-extra-messages.js.map +1 -1
  608. package/dist/core/messages/zh/core/parser-extra-messages.d.ts +3 -3
  609. package/dist/core/messages/zh/core/parser-extra-messages.js +3 -3
  610. package/dist/core/messages/zh/core/parser-extra-messages.js.map +1 -1
  611. package/dist/core/messages/zh/core/plugin-messages.d.ts +18 -0
  612. package/dist/core/messages/zh/core/plugin-messages.d.ts.map +1 -1
  613. package/dist/core/messages/zh/core/plugin-messages.js +20 -2
  614. package/dist/core/messages/zh/core/plugin-messages.js.map +1 -1
  615. package/dist/core/messages/zh/github/github-webhook-messages.d.ts +2 -0
  616. package/dist/core/messages/zh/github/github-webhook-messages.d.ts.map +1 -1
  617. package/dist/core/messages/zh/github/github-webhook-messages.js +2 -0
  618. package/dist/core/messages/zh/github/github-webhook-messages.js.map +1 -1
  619. package/dist/core/messages/zh/guardian/guardian-messages.d.ts +4 -2
  620. package/dist/core/messages/zh/guardian/guardian-messages.d.ts.map +1 -1
  621. package/dist/core/messages/zh/guardian/guardian-messages.js +4 -2
  622. package/dist/core/messages/zh/guardian/guardian-messages.js.map +1 -1
  623. package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts +2 -2
  624. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js +2 -2
  625. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js.map +1 -1
  626. package/dist/core/messages/zh/log/log-helper.js.map +1 -1
  627. package/dist/core/messages/zh/reports/report-async-patterns-messages.d.ts +3 -3
  628. package/dist/core/messages/zh/reports/report-async-patterns-messages.js +3 -3
  629. package/dist/core/messages/zh/reports/report-async-patterns-messages.js.map +1 -1
  630. package/dist/core/messages/zh/reports/report-messages.d.ts +13 -0
  631. package/dist/core/messages/zh/reports/report-messages.d.ts.map +1 -1
  632. package/dist/core/messages/zh/reports/report-messages.js +14 -1
  633. package/dist/core/messages/zh/reports/report-messages.js.map +1 -1
  634. package/dist/core/messages/zh/shared/plugin-core-messages.d.ts +2 -2
  635. package/dist/core/messages/zh/shared/plugin-core-messages.js +2 -2
  636. package/dist/core/messages/zh/shared/plugin-core-messages.js.map +1 -1
  637. package/dist/core/messages/zh/shared/plugin-registry-messages.d.ts +4 -4
  638. package/dist/core/messages/zh/shared/plugin-registry-messages.js +4 -4
  639. package/dist/core/messages/zh/shared/plugin-registry-messages.js.map +1 -1
  640. package/dist/core/messages/zh/shared/shared-common-messages.d.ts +2 -0
  641. package/dist/core/messages/zh/shared/shared-common-messages.d.ts.map +1 -1
  642. package/dist/core/messages/zh/shared/shared-common-messages.js +2 -0
  643. package/dist/core/messages/zh/shared/shared-common-messages.js.map +1 -1
  644. package/dist/core/parsing/parser.d.ts.map +1 -1
  645. package/dist/core/parsing/parser.js +6 -7
  646. package/dist/core/parsing/parser.js.map +1 -1
  647. package/dist/core/parsing/utils.d.ts +3 -3
  648. package/dist/core/registry/file-registry.d.ts.map +1 -1
  649. package/dist/core/registry/file-registry.js +3 -4
  650. package/dist/core/registry/file-registry.js.map +1 -1
  651. package/dist/core/workers/worker-executor.js +5 -3
  652. package/dist/core/workers/worker-executor.js.map +1 -1
  653. package/dist/core/workers/worker-pool.js +1 -1
  654. package/dist/core/workers/worker-pool.js.map +1 -1
  655. package/dist/guardian/baseline.js.map +1 -1
  656. package/dist/guardian/constants.js.map +1 -1
  657. package/dist/guardian/diff.js.map +1 -1
  658. package/dist/reports/analise-async-patterns.js +1 -1
  659. package/dist/reports/analise-async-patterns.js.map +1 -1
  660. package/dist/reports/filter-smart.js +4 -4
  661. package/dist/reports/filter-smart.js.map +1 -1
  662. package/dist/reports/generator-report.js +1 -1
  663. package/dist/reports/generator-report.js.map +1 -1
  664. package/dist/reports/report-caretaker-health.js +1 -1
  665. package/dist/reports/report-caretaker-health.js.map +1 -1
  666. package/dist/reports/report-structure.d.ts.map +1 -1
  667. package/dist/reports/report-structure.js +10 -2
  668. package/dist/reports/report-structure.js.map +1 -1
  669. package/dist/shared/plugins/init.js.map +1 -1
  670. package/dist/shared/validation/validation.js +1 -1
  671. package/dist/shared/validation/validation.js.map +1 -1
  672. package/out/404/index.html +1 -1
  673. package/out/404.html +1 -1
  674. package/out/__next.__PAGE__.txt +2 -2
  675. package/out/__next._full.txt +2 -2
  676. package/out/__next._head.txt +1 -1
  677. package/out/__next._index.txt +1 -1
  678. package/out/__next._tree.txt +1 -1
  679. package/out/_next/static/chunks/{1l-dhswmn6dl_.js → 1xfmvf0ifjmmy.js} +1 -1
  680. package/out/_not-found/__next._full.txt +1 -1
  681. package/out/_not-found/__next._head.txt +1 -1
  682. package/out/_not-found/__next._index.txt +1 -1
  683. package/out/_not-found/__next._not-found.__PAGE__.txt +1 -1
  684. package/out/_not-found/__next._not-found.txt +1 -1
  685. package/out/_not-found/__next._tree.txt +1 -1
  686. package/out/_not-found/index.html +1 -1
  687. package/out/_not-found/index.txt +1 -1
  688. package/out/changelog/__next._full.txt +1 -1
  689. package/out/changelog/__next._head.txt +1 -1
  690. package/out/changelog/__next._index.txt +1 -1
  691. package/out/changelog/__next._tree.txt +1 -1
  692. package/out/changelog/__next.changelog.__PAGE__.txt +1 -1
  693. package/out/changelog/__next.changelog.txt +1 -1
  694. package/out/changelog/index.html +1 -1
  695. package/out/changelog/index.txt +1 -1
  696. package/out/github/dashboard/__next._full.txt +1 -1
  697. package/out/github/dashboard/__next._head.txt +1 -1
  698. package/out/github/dashboard/__next._index.txt +1 -1
  699. package/out/github/dashboard/__next._tree.txt +1 -1
  700. package/out/github/dashboard/__next.github.dashboard.__PAGE__.txt +1 -1
  701. package/out/github/dashboard/__next.github.dashboard.txt +1 -1
  702. package/out/github/dashboard/__next.github.txt +1 -1
  703. package/out/github/dashboard/index.html +1 -1
  704. package/out/github/dashboard/index.txt +1 -1
  705. package/out/index.html +1 -1
  706. package/out/index.txt +2 -2
  707. package/out/privacy-policy/__next._full.txt +1 -1
  708. package/out/privacy-policy/__next._head.txt +1 -1
  709. package/out/privacy-policy/__next._index.txt +1 -1
  710. package/out/privacy-policy/__next._tree.txt +1 -1
  711. package/out/privacy-policy/__next.privacy-policy.__PAGE__.txt +1 -1
  712. package/out/privacy-policy/__next.privacy-policy.txt +1 -1
  713. package/out/privacy-policy/index.html +1 -1
  714. package/out/privacy-policy/index.txt +1 -1
  715. package/out/terms-of-use/__next._full.txt +1 -1
  716. package/out/terms-of-use/__next._head.txt +1 -1
  717. package/out/terms-of-use/__next._index.txt +1 -1
  718. package/out/terms-of-use/__next._tree.txt +1 -1
  719. package/out/terms-of-use/__next.terms-of-use.__PAGE__.txt +1 -1
  720. package/out/terms-of-use/__next.terms-of-use.txt +1 -1
  721. package/out/terms-of-use/index.html +1 -1
  722. package/out/terms-of-use/index.txt +1 -1
  723. package/package.json +11 -12
  724. /package/out/_next/static/{sHP-sIMshwWXMCtdszRWm → WkbNrhSUmQHl6FUQrrd3Q}/_buildManifest.js +0 -0
  725. /package/out/_next/static/{sHP-sIMshwWXMCtdszRWm → WkbNrhSUmQHl6FUQrrd3Q}/_clientMiddlewareManifest.js +0 -0
  726. /package/out/_next/static/{sHP-sIMshwWXMCtdszRWm → WkbNrhSUmQHl6FUQrrd3Q}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -309,7 +309,7 @@ O Tutanus lê um arquivo `tutanus.config.json` na raiz do seu projeto. Se não e
309
309
  | `GITHUB_PRIVATE_KEY` | Chave RSA do GitHub App | — |
310
310
  | `GITHUB_WEBHOOK_SECRET` | Webhook secret | — |
311
311
 
312
- > 📖 [Guia de Configuração Completo →](./docs/guias/GUIA-CONFIGURACAO.md)
312
+ > [BOOK] [Guia de Configuração Completo →](./docs/guias/GUIA-CONFIGURACAO.md)
313
313
 
314
314
  ---
315
315
 
@@ -430,7 +430,7 @@ tutanus convert # converter projeto
430
430
  tutanus imports --scan # gerenciar imports
431
431
  ```
432
432
 
433
- > 📖 [Guia de Comandos Completo →](./docs/guias/GUIA-COMANDOS.md)
433
+ > [BOOK] [Guia de Comandos Completo →](./docs/guias/GUIA-COMANDOS.md)
434
434
 
435
435
  ---
436
436
 
@@ -470,7 +470,7 @@ curl -X POST http://localhost:3100/api/v1/diagnosticar \
470
470
  -d '{"async": true, "fast": true}'
471
471
  ```
472
472
 
473
- > 📖 [Documentação da API →](./docs/api/REST-API.md)
473
+ > [BOOK] [Documentação da API →](./docs/api/REST-API.md)
474
474
 
475
475
  ---
476
476
 
@@ -545,7 +545,7 @@ tutanus github-actions gate --threshold 80 # quality gate
545
545
  tutanus github-actions app --port 3000 # iniciar servidor
546
546
  ```
547
547
 
548
- > 📖 [Guia do GitHub App →](./docs/guias/GITHUB-APP.md)
548
+ > [BOOK] [Guia do GitHub App →](./docs/guias/GITHUB-APP.md)
549
549
 
550
550
  ---
551
551
 
@@ -567,7 +567,7 @@ Uma extensão VSCode está disponível em `extensions/vscode/` com:
567
567
  - Painel de resultados
568
568
  - Comandos: Analyze File, Analyze Project, Show Panel, Clear Diagnostics
569
569
 
570
- > 📖 [Guia VSCode →](./docs/guias/GUIA-VSCODE.md)
570
+ > [BOOK] [Guia VSCode →](./docs/guias/GUIA-VSCODE.md)
571
571
 
572
572
  ---
573
573
 
@@ -708,7 +708,7 @@ npm run diagnosticar # auto-análise
708
708
  - **Testes** — aumentar cobertura
709
709
  - **Analisadores** — criar detectores e plugins
710
710
 
711
- > 📖 [Guia: Como Criar Analistas →](./docs/desenvolvimento/analistas/CRIAR-ANALISTA.md)
711
+ > [BOOK] [Guia: Como Criar Analistas →](./docs/desenvolvimento/analistas/CRIAR-ANALISTA.md)
712
712
 
713
713
  ---
714
714
 
@@ -1 +1 @@
1
- {"version":3,"file":"correction-azure.d.ts","sourceRoot":"","sources":["../../../../src/analysts/azure-pipelines/corrections/correction-azure.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAc,MAAM,GAAG,CAAC;AAG/D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAwCvF;AAED,eAAO,MAAM,eAAe,EAAE,QAsB7B,CAAC"}
1
+ {"version":3,"file":"correction-azure.d.ts","sourceRoot":"","sources":["../../../../src/analysts/azure-pipelines/corrections/correction-azure.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAc,MAAM,GAAG,CAAC;AAG/D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAwCvF;AAED,eAAO,MAAM,eAAe,EAAE,QAsB7B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { messages } from '../../../core/messages/index.js';
1
2
  import { splitLines } from '../../../shared/helpers/index.js';
2
3
  import { criarOcorrencia } from '../../../types/index.js';
3
4
  export function detectarCorrecoesAzure(src, _relPath) {
@@ -48,7 +49,7 @@ export const correctionAzure = {
48
49
  return correcoes.map(elem => criarOcorrencia({
49
50
  tipo: `correction-${elem.tipo}`,
50
51
  nivel: elem.confianca > 85 ? 'aviso' : 'info',
51
- mensagem: `Correção sugerida: ${elem.tipo}`,
52
+ mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),
52
53
  relPath,
53
54
  linha: elem.linha,
54
55
  sugestao: ` ${elem.original}\n ${elem.sugerido}\nConfiança: ${elem.confianca}%`,
@@ -1 +1 @@
1
- {"version":3,"file":"correction-azure.js","sourceRoot":"","sources":["../../../../src/analysts/azure-pipelines/corrections/correction-azure.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport { splitLines } from '@shared/helpers';\n\nimport type { Analista, AzureCorrection, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport function detectarCorrecoesAzure(src: string, _relPath: string): AzureCorrection[] {\n const correcoes: AzureCorrection[] = [];\n const linhas = splitLines(src);\n\n linhas.forEach((linha, index) => {\n const numeroLinha = index + 1;\n\n if (/vmImage:\\s*['\"]?.*latest['\"]?/i.test(linha)) {\n correcoes.push({\n tipo: 'azure-fix-latest-image',\n original: linha,\n sugerido: linha.replace(/latest/i, 'ubuntu-22.04'),\n linha: numeroLinha,\n confianca: 90\n });\n }\n\n if (/(password|token|secret|key):\\s*['\"]?([^$({][a-zA-Z0-9_\\-]{8,})['\"]?/gi.test(linha)) {\n const replaced = linha.replace(/['\"][^'\"]+['\"]/, '$(SECRET_NAME)');\n correcoes.push({\n tipo: 'azure-use-variable',\n original: linha,\n sugerido: replaced,\n linha: numeroLinha,\n confianca: 90\n });\n }\n });\n\n if (!/task:\\s*Cache@/i.test(src) && !/CacheBeta@/i.test(src)) {\n correcoes.push({\n tipo: 'azure-add-cache',\n original: linhas[0],\n sugerido: `- task: Cache@2\\n inputs:\\n key: 'npm | \"$(Agent.OS)\" | package-lock.json'\\n path: 'node_modules'\\n displayName: Cache npm\\n\\n${linhas[0]}`,\n linha: 1,\n confianca: 80\n });\n }\n\n return correcoes;\n}\n\nexport const correctionAzure: Analista = {\n nome: 'correction-azure',\n categoria: 'workflows',\n descricao: 'Correções automáticas para Azure Pipelines',\n test: (relPath: string): boolean => relPath === 'azure-pipelines.yml' || relPath.endsWith('azure-pipelines.yml'),\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const correcoes = detectarCorrecoesAzure(src, relPath);\n return correcoes.map(elem => criarOcorrencia({\n tipo: `correction-${elem.tipo}`,\n nivel: elem.confianca > 85 ? 'aviso' : 'info',\n mensagem: `Correção sugerida: ${elem.tipo}`,\n relPath,\n linha: elem.linha,\n sugestao: ` ${elem.original}\\n ${elem.sugerido}\\nConfiança: ${elem.confianca}%`,\n correcao: {\n original: elem.original,\n novo: elem.sugerido,\n linha: elem.linha\n }\n }));\n }\n};\n"]}
1
+ {"version":3,"file":"correction-azure.js","sourceRoot":"","sources":["../../../../src/analysts/azure-pipelines/corrections/correction-azure.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport { messages } from '@core/messages';\nimport { splitLines } from '@shared/helpers';\n\nimport type { Analista, AzureCorrection, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport function detectarCorrecoesAzure(src: string, _relPath: string): AzureCorrection[] {\n const correcoes: AzureCorrection[] = [];\n const linhas = splitLines(src);\n\n linhas.forEach((linha, index) => {\n const numeroLinha = index + 1;\n\n if (/vmImage:\\s*['\"]?.*latest['\"]?/i.test(linha)) {\n correcoes.push({\n tipo: 'azure-fix-latest-image',\n original: linha,\n sugerido: linha.replace(/latest/i, 'ubuntu-22.04'),\n linha: numeroLinha,\n confianca: 90\n });\n }\n\n if (/(password|token|secret|key):\\s*['\"]?([^$({][a-zA-Z0-9_\\-]{8,})['\"]?/gi.test(linha)) {\n const replaced = linha.replace(/['\"][^'\"]+['\"]/, '$(SECRET_NAME)');\n correcoes.push({\n tipo: 'azure-use-variable',\n original: linha,\n sugerido: replaced,\n linha: numeroLinha,\n confianca: 90\n });\n }\n });\n\n if (!/task:\\s*Cache@/i.test(src) && !/CacheBeta@/i.test(src)) {\n correcoes.push({\n tipo: 'azure-add-cache',\n original: linhas[0],\n sugerido: `- task: Cache@2\\n inputs:\\n key: 'npm | \"$(Agent.OS)\" | package-lock.json'\\n path: 'node_modules'\\n displayName: Cache npm\\n\\n${linhas[0]}`,\n linha: 1,\n confianca: 80\n });\n }\n\n return correcoes;\n}\n\nexport const correctionAzure: Analista = {\n nome: 'correction-azure',\n categoria: 'workflows',\n descricao: 'Correções automáticas para Azure Pipelines',\n test: (relPath: string): boolean => relPath === 'azure-pipelines.yml' || relPath.endsWith('azure-pipelines.yml'),\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const correcoes = detectarCorrecoesAzure(src, relPath);\n return correcoes.map(elem => criarOcorrencia({\n tipo: `correction-${elem.tipo}`,\n nivel: elem.confianca > 85 ? 'aviso' : 'info',\n mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),\n relPath,\n linha: elem.linha,\n sugestao: ` ${elem.original}\\n ${elem.sugerido}\\nConfiança: ${elem.confianca}%`,\n correcao: {\n original: elem.original,\n novo: elem.sugerido,\n linha: elem.linha\n }\n }));\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"correction-circleci.d.ts","sourceRoot":"","sources":["../../../../src/analysts/circleci/corrections/correction-circleci.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAc,MAAM,GAAG,CAAC;AAGlE,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA0C7F;AAED,eAAO,MAAM,kBAAkB,EAAE,QAsBhC,CAAC"}
1
+ {"version":3,"file":"correction-circleci.d.ts","sourceRoot":"","sources":["../../../../src/analysts/circleci/corrections/correction-circleci.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAc,MAAM,GAAG,CAAC;AAGlE,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA0C7F;AAED,eAAO,MAAM,kBAAkB,EAAE,QAsBhC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { messages } from '../../../core/messages/index.js';
1
2
  import { splitLines } from '../../../shared/helpers/index.js';
2
3
  import { criarOcorrencia } from '../../../types/index.js';
3
4
  export function detectarCorrecoesCircleCI(src, _relPath) {
@@ -50,7 +51,7 @@ export const correctionCircleCI = {
50
51
  return correcoes.map(elem => criarOcorrencia({
51
52
  tipo: `correction-${elem.tipo}`,
52
53
  nivel: elem.confianca > 85 ? 'aviso' : 'info',
53
- mensagem: `Correção sugerida: ${elem.tipo}`,
54
+ mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),
54
55
  relPath,
55
56
  linha: elem.linha,
56
57
  sugestao: ` ${elem.original}\n ${elem.sugerido}\nConfiança: ${elem.confianca}%`,
@@ -1 +1 @@
1
- {"version":3,"file":"correction-circleci.js","sourceRoot":"","sources":["../../../../src/analysts/circleci/corrections/correction-circleci.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport { splitLines } from '@shared/helpers';\n\nimport type { Analista, CircleCICorrection, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport function detectarCorrecoesCircleCI(src: string, _relPath: string): CircleCICorrection[] {\n const correcoes: CircleCICorrection[] = [];\n const linhas = splitLines(src);\n\n linhas.forEach((linha, index) => {\n const numeroLinha = index + 1;\n\n if (/\\bimage:\\s*[^\\s@]+:latest\\b/.test(linha)) {\n correcoes.push({\n tipo: 'circleci-fix-latest-image',\n original: linha,\n sugerido: linha.replace(/:latest\\b/, ':3.18'),\n linha: numeroLinha,\n confianca: 90\n });\n }\n\n if (/\\b(TOKEN|SECRET|PASSWORD|KEY|ACCESS_KEY)\\b.*:\\s*['\"][^'\"]+['\"]/i.test(linha) && !/\\$/.test(linha)) {\n const replaced = linha.replace(/['\"][^'\"]+['\"]/, '\"$VAR_NAME\"');\n correcoes.push({\n tipo: 'circleci-use-context',\n original: linha,\n sugerido: replaced,\n linha: numeroLinha,\n confianca: 90\n });\n }\n });\n\n if (!/save_cache:/.test(src) && !/restore_cache:/.test(src)) {\n const firstJobLine = linhas.findIndex(l => /steps:/.test(l));\n const targetLine = firstJobLine >= 0 ? firstJobLine : 0;\n correcoes.push({\n tipo: 'circleci-add-cache',\n original: linhas[targetLine],\n sugerido: ` - restore_cache:\\n key: deps-{{ checksum \"package-lock.json\" }}\\n${linhas[targetLine]}\\n - save_cache:\\n key: deps-{{ checksum \"package-lock.json\" }}\\n paths:\\n - node_modules`,\n linha: targetLine + 1,\n confianca: 80\n });\n }\n\n return correcoes;\n}\n\nexport const correctionCircleCI: Analista = {\n nome: 'correction-circleci',\n categoria: 'workflows',\n descricao: 'Correções automáticas para CircleCI',\n test: (relPath: string): boolean => relPath.endsWith('.circleci/config.yml'),\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const correcoes = detectarCorrecoesCircleCI(src, relPath);\n return correcoes.map(elem => criarOcorrencia({\n tipo: `correction-${elem.tipo}`,\n nivel: elem.confianca > 85 ? 'aviso' : 'info',\n mensagem: `Correção sugerida: ${elem.tipo}`,\n relPath,\n linha: elem.linha,\n sugestao: ` ${elem.original}\\n ${elem.sugerido}\\nConfiança: ${elem.confianca}%`,\n correcao: {\n original: elem.original,\n novo: elem.sugerido,\n linha: elem.linha\n }\n }));\n }\n};\n"]}
1
+ {"version":3,"file":"correction-circleci.js","sourceRoot":"","sources":["../../../../src/analysts/circleci/corrections/correction-circleci.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n\nimport { messages } from '@core/messages';\nimport { splitLines } from '@shared/helpers';\n\nimport type { Analista, CircleCICorrection, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport function detectarCorrecoesCircleCI(src: string, _relPath: string): CircleCICorrection[] {\n const correcoes: CircleCICorrection[] = [];\n const linhas = splitLines(src);\n\n linhas.forEach((linha, index) => {\n const numeroLinha = index + 1;\n\n if (/\\bimage:\\s*[^\\s@]+:latest\\b/.test(linha)) {\n correcoes.push({\n tipo: 'circleci-fix-latest-image',\n original: linha,\n sugerido: linha.replace(/:latest\\b/, ':3.18'),\n linha: numeroLinha,\n confianca: 90\n });\n }\n\n if (/\\b(TOKEN|SECRET|PASSWORD|KEY|ACCESS_KEY)\\b.*:\\s*['\"][^'\"]+['\"]/i.test(linha) && !/\\$/.test(linha)) {\n const replaced = linha.replace(/['\"][^'\"]+['\"]/, '\"$VAR_NAME\"');\n correcoes.push({\n tipo: 'circleci-use-context',\n original: linha,\n sugerido: replaced,\n linha: numeroLinha,\n confianca: 90\n });\n }\n });\n\n if (!/save_cache:/.test(src) && !/restore_cache:/.test(src)) {\n const firstJobLine = linhas.findIndex(l => /steps:/.test(l));\n const targetLine = firstJobLine >= 0 ? firstJobLine : 0;\n correcoes.push({\n tipo: 'circleci-add-cache',\n original: linhas[targetLine],\n sugerido: ` - restore_cache:\\n key: deps-{{ checksum \"package-lock.json\" }}\\n${linhas[targetLine]}\\n - save_cache:\\n key: deps-{{ checksum \"package-lock.json\" }}\\n paths:\\n - node_modules`,\n linha: targetLine + 1,\n confianca: 80\n });\n }\n\n return correcoes;\n}\n\nexport const correctionCircleCI: Analista = {\n nome: 'correction-circleci',\n categoria: 'workflows',\n descricao: 'Correções automáticas para CircleCI',\n test: (relPath: string): boolean => relPath.endsWith('.circleci/config.yml'),\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const correcoes = detectarCorrecoesCircleCI(src, relPath);\n return correcoes.map(elem => criarOcorrencia({\n tipo: `correction-${elem.tipo}`,\n nivel: elem.confianca > 85 ? 'aviso' : 'info',\n mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),\n relPath,\n linha: elem.linha,\n sugestao: ` ${elem.original}\\n ${elem.sugerido}\\nConfiança: ${elem.confianca}%`,\n correcao: {\n original: elem.original,\n novo: elem.sugerido,\n linha: elem.linha\n }\n }));\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"converter-base.js","sourceRoot":"","sources":["../../../src/analysts/converters/converter-base.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAgB,aAAa;IAMvB,cAAc,CAAC,QAAgB,EAAE,SAAmB,EAAE,EAAE,QAAkB,EAAE;QACpF,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC;YAC3B,QAAQ;YACR,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;CACF","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * 🔄 Contrato Base para Conversores de Templates\n */\n\nexport interface ResultadoConversao {\n sucesso: boolean;\n conteudo: string;\n avisos: string[];\n erros: string[];\n}\n\nexport interface Conversor {\n readonly de: string;\n readonly para: string;\n converter(conteudo: string): Promise<ResultadoConversao>;\n}\n\nexport abstract class ConversorBase implements Conversor {\n public abstract readonly de: string;\n public abstract readonly para: string;\n\n public abstract converter(conteudo: string): Promise<ResultadoConversao>;\n\n protected criarResultado(conteudo: string, avisos: string[] = [], erros: string[] = []): ResultadoConversao {\n return {\n sucesso: erros.length === 0,\n conteudo,\n avisos,\n erros\n };\n }\n}\n"]}
1
+ {"version":3,"file":"converter-base.js","sourceRoot":"","sources":["../../../src/analysts/converters/converter-base.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAgB,aAAa;IAMvB,cAAc,CAAC,QAAgB,EAAE,SAAmB,EAAE,EAAE,QAAkB,EAAE;QACpF,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC;YAC3B,QAAQ;YACR,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;CACF","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [REFRESH] Contrato Base para Conversores de Templates\n */\n\nexport interface ResultadoConversao {\n sucesso: boolean;\n conteudo: string;\n avisos: string[];\n erros: string[];\n}\n\nexport interface Conversor {\n readonly de: string;\n readonly para: string;\n converter(conteudo: string): Promise<ResultadoConversao>;\n}\n\nexport abstract class ConversorBase implements Conversor {\n public abstract readonly de: string;\n public abstract readonly para: string;\n\n public abstract converter(conteudo: string): Promise<ResultadoConversao>;\n\n protected criarResultado(conteudo: string, avisos: string[] = [], erros: string[] = []): ResultadoConversao {\n return {\n sucesso: erros.length === 0,\n conteudo,\n avisos,\n erros\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"converter-gha-to-gitlab.js","sourceRoot":"","sources":["../../../../src/analysts/converters/engines/converter-gha-to-gitlab.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [LANCAMENTO] Conversor: GitHub Actions GitLab CI\n *\n * Realiza o mapeamento best-effort de workflows GHA para pipelines GitLab.\n */\n\nimport { Document, parseDocument } from 'yaml';\n\nimport type { ResultadoConversao } from '../converter-base.js';\nimport { ConversorBase } from '../converter-base.js';\n\ninterface JobData {\n name?: string;\n 'runs-on'?: string;\n steps?: Array<{ run?: string; uses?: string }>;\n needs?: string | string[];\n [key: string]: unknown;\n}\n\nexport class ConversorGhaToGitlab extends ConversorBase {\n public readonly de = 'github-actions';\n public readonly para = 'gitlab-ci';\n\n public async converter(conteudo: string): Promise<ResultadoConversao> {\n const avisos: string[] = [];\n const erros: string[] = [];\n\n try {\n const doc = parseDocument(conteudo);\n if (doc.errors.length > 0) {\n throw new Error(doc.errors[0].message);\n }\n\n const gha = doc.toJS() as Record<string, unknown>;\n\n // Estrutura inicial do GitLab CI\n const gitlab: Record<string, unknown> = {\n stages: [] as string[]\n };\n\n // 1. Mapear variáveis globais\n if (gha.env) {\n gitlab.variables = gha.env;\n }\n\n // 2. Mapear Jobs\n if (gha.jobs) {\n const jobs = gha.jobs as Record<string, JobData>;\n const jobsEntries = Object.entries(jobs);\n const stagesSet = new Set<string>();\n\n for (const [jobId, jobData] of jobsEntries) {\n const job = jobData as JobData;\n const gitlabJob: Record<string, unknown> = {\n stage: (job.name ?? jobId).toLowerCase(),\n script: [] as string[]\n };\n\n stagesSet.add(gitlabJob.stage as string);\n\n // Mapear Image (executors)\n if (job['runs-on']) {\n avisos.push(`Job '${jobId}': Mapeamento de 'runs-on: ${job['runs-on']}' para image do GitLab pode exigir ajuste manual.`);\n if (String(job['runs-on']).includes('ubuntu')) {\n gitlabJob.image = 'ubuntu:latest';\n }\n }\n\n // Mapear Steps\n if (job.steps && Array.isArray(job.steps)) {\n const steps = job.steps as Array<{ run?: string; uses?: string }>;\n for (const step of steps) {\n if (step.run) {\n // Limpar comandos de run (remover multi-line pipe se necessário)\n const cmd = String(step.run).trim();\n (gitlabJob.script as string[]).push(cmd);\n } else if (step.uses) {\n // Tratamento especial para checkout\n if (step.uses.includes('actions/checkout')) {\n (gitlabJob.script as string[]).push('# Checkout automático pelo GitLab Runner');\n } else {\n avisos.push(`Job '${jobId}': Action '${step.uses}' detectada. Considere usar um componente equivalente do GitLab ou um script customizado.`);\n (gitlabJob.script as string[]).push(`# TODO: Implementar lógica da action: ${step.uses}`);\n }\n }\n }\n }\n\n // Mapear dependências (needs)\n if (job.needs) {\n gitlabJob.needs = Array.isArray(job.needs) ? job.needs : [job.needs];\n }\n\n // Adicionar o job ao root\n gitlab[jobId] = gitlabJob;\n }\n\n gitlab.stages = Array.from(stagesSet);\n }\n\n // Gerar YAML final\n const outputDoc = new Document(gitlab);\n return this.criarResultado(outputDoc.toString(), avisos, erros);\n\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n return this.criarResultado('', [], [`Falha na conversão: ${msg}`]);\n }\n }\n}"]}
1
+ {"version":3,"file":"converter-gha-to-gitlab.js","sourceRoot":"","sources":["../../../../src/analysts/converters/engines/converter-gha-to-gitlab.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [LANCAMENTO] Conversor: GitHub Actions [->] GitLab CI\n *\n * Realiza o mapeamento best-effort de workflows GHA para pipelines GitLab.\n */\n\nimport { Document, parseDocument } from 'yaml';\n\nimport type { ResultadoConversao } from '../converter-base.js';\nimport { ConversorBase } from '../converter-base.js';\n\ninterface JobData {\n name?: string;\n 'runs-on'?: string;\n steps?: Array<{ run?: string; uses?: string }>;\n needs?: string | string[];\n [key: string]: unknown;\n}\n\nexport class ConversorGhaToGitlab extends ConversorBase {\n public readonly de = 'github-actions';\n public readonly para = 'gitlab-ci';\n\n public async converter(conteudo: string): Promise<ResultadoConversao> {\n const avisos: string[] = [];\n const erros: string[] = [];\n\n try {\n const doc = parseDocument(conteudo);\n if (doc.errors.length > 0) {\n throw new Error(doc.errors[0].message);\n }\n\n const gha = doc.toJS() as Record<string, unknown>;\n\n // Estrutura inicial do GitLab CI\n const gitlab: Record<string, unknown> = {\n stages: [] as string[]\n };\n\n // 1. Mapear variáveis globais\n if (gha.env) {\n gitlab.variables = gha.env;\n }\n\n // 2. Mapear Jobs\n if (gha.jobs) {\n const jobs = gha.jobs as Record<string, JobData>;\n const jobsEntries = Object.entries(jobs);\n const stagesSet = new Set<string>();\n\n for (const [jobId, jobData] of jobsEntries) {\n const job = jobData as JobData;\n const gitlabJob: Record<string, unknown> = {\n stage: (job.name ?? jobId).toLowerCase(),\n script: [] as string[]\n };\n\n stagesSet.add(gitlabJob.stage as string);\n\n // Mapear Image (executors)\n if (job['runs-on']) {\n avisos.push(`Job '${jobId}': Mapeamento de 'runs-on: ${job['runs-on']}' para image do GitLab pode exigir ajuste manual.`);\n if (String(job['runs-on']).includes('ubuntu')) {\n gitlabJob.image = 'ubuntu:latest';\n }\n }\n\n // Mapear Steps\n if (job.steps && Array.isArray(job.steps)) {\n const steps = job.steps as Array<{ run?: string; uses?: string }>;\n for (const step of steps) {\n if (step.run) {\n // Limpar comandos de run (remover multi-line pipe se necessário)\n const cmd = String(step.run).trim();\n (gitlabJob.script as string[]).push(cmd);\n } else if (step.uses) {\n // Tratamento especial para checkout\n if (step.uses.includes('actions/checkout')) {\n (gitlabJob.script as string[]).push('# Checkout automático pelo GitLab Runner');\n } else {\n avisos.push(`Job '${jobId}': Action '${step.uses}' detectada. Considere usar um componente equivalente do GitLab ou um script customizado.`);\n (gitlabJob.script as string[]).push(`# TODO: Implementar lógica da action: ${step.uses}`);\n }\n }\n }\n }\n\n // Mapear dependências (needs)\n if (job.needs) {\n gitlabJob.needs = Array.isArray(job.needs) ? job.needs : [job.needs];\n }\n\n // Adicionar o job ao root\n gitlab[jobId] = gitlabJob;\n }\n\n gitlab.stages = Array.from(stagesSet);\n }\n\n // Gerar YAML final\n const outputDoc = new Document(gitlab);\n return this.criarResultado(outputDoc.toString(), avisos, erros);\n\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n return this.criarResultado('', [], [`Falha na conversão: ${msg}`]);\n }\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysts/converters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAgB,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AAK7E,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,IAAY;IACrD,OAAO,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3I,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * 🔄 Registro Central de Conversores\n */\n\nimport type { Conversor } from './converter-base.js';\nimport { ConversorGhaToGitlab } from './engines/converter-gha-to-gitlab.js';\n\nexport * from './converter-base.js';\nexport * from './engines/converter-gha-to-gitlab.js';\nexport const registroConversores: Conversor[] = [new ConversorGhaToGitlab()];\n\n/**\n * Busca um conversor compatível com as plataformas de origem e destino.\n */\nexport function obterConversor(de: string, para: string): Conversor | undefined {\n return registroConversores?.find(elem => elem.de?.toLowerCase() === de.toLowerCase() && elem.para?.toLowerCase() === para.toLowerCase());\n}"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysts/converters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAgB,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AAK7E,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,IAAY;IACrD,OAAO,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3I,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [REFRESH] Registro Central de Conversores\n */\n\nimport type { Conversor } from './converter-base.js';\nimport { ConversorGhaToGitlab } from './engines/converter-gha-to-gitlab.js';\n\nexport * from './converter-base.js';\nexport * from './engines/converter-gha-to-gitlab.js';\nexport const registroConversores: Conversor[] = [new ConversorGhaToGitlab()];\n\n/**\n * Busca um conversor compatível com as plataformas de origem e destino.\n */\nexport function obterConversor(de: string, para: string): Conversor | undefined {\n return registroConversores?.find(elem => elem.de?.toLowerCase() === de.toLowerCase() && elem.para?.toLowerCase() === para.toLowerCase());\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"analyst-quick-fixes.d.ts","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-quick-fixes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAG9C,eAAO,MAAM,kBAAkB,EAAE,QAqEhC,CAAC"}
1
+ {"version":3,"file":"analyst-quick-fixes.d.ts","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-quick-fixes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAG9C,eAAO,MAAM,kBAAkB,EAAE,QAqEhC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { messages } from '../../core/messages/index.js';
1
2
  import { findQuickFixes } from '../../core/config/auto/index.js';
2
3
  import { criarOcorrencia } from '../../types/index.js';
3
4
  export const analistaQuickFixes = {
@@ -1 +1 @@
1
- {"version":3,"file":"analyst-quick-fixes.js","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-quick-fixes.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\nimport { findQuickFixes, type PatternBasedQuickFix } from '@core/config/auto';\n\nimport type { Analista, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport const analistaQuickFixes: Analista = {\n nome: 'quick-fixes',\n categoria: 'melhorias',\n descricao: 'Detecta problemas comuns e oferece correções automáticas',\n test: (relPath: string): boolean => {\n return /\\.(js|jsx|ts|tsx|mjs|cjs|svg)$/.test(relPath);\n },\n aplicar: (src: string, relPath: string, _ast: NodePath<Node> | null): Ocorrencia[] => {\n if (!src) return [];\n const ocorrencias: Ocorrencia[] = [];\n\n // Buscar quick fixes gerais\n const quickFixes = findQuickFixes(src, undefined, undefined, relPath);\n\n // Buscar quick fixes específicos por tipo de problema detectado\n const problemaTipos = ['unhandled-async', 'console-log', 'memory-leak', 'dangerous-html', 'eval-usage', 'complex-regex'];\n for (const problemTipo of problemaTipos) {\n const specificFixes = findQuickFixes(src, problemTipo, undefined, relPath);\n quickFixes.push(...specificFixes);\n }\n\n // Remover duplicatas por ID\n const uniqueFixes = quickFixes.filter((fix, index, arr) => arr.findIndex(arquivo => arquivo.id === fix.id) === index);\n for (const fixResultado of uniqueFixes) {\n for (const match of fixResultado.matches) {\n // Calcular linha aproximada do match\n const beforeMatch = src.substring(0, match.index || 0);\n const linha = beforeMatch.split('\\n').length;\n\n // Gerar preview da correção\n const previewCorrecao = fixResultado.fix(match, src);\n const originalLine = src.split('\\n')[linha - 1] || '';\n const fixedLine = previewCorrecao.split('\\n')[linha - 1] || '';\n\n // Criar sugestão com preview mais detalhado\n const sugestao = [fixResultado.description, '', `[CHAVE-INGLESA] Correção sugerida:`, `[ERRO] Antes: ${originalLine.trim()}`, `[OK] Depois: ${fixedLine.trim()}`, '', `Confiança: ${fixResultado.confidence}%`, `Categoria: ${fixResultado.category}`, `ID do Fix: ${fixResultado.id}`].join('\\n');\n\n // Mapear categoria para nível\n const nivel = mapearCategoriaNivel(fixResultado.category);\n\n // Criar ocorrência base\n const ocorrencia = criarOcorrencia({\n tipo: 'auto-fix-disponivel',\n nivel,\n mensagem: `${fixResultado.title}`,\n relPath,\n linha\n });\n\n // Adicionar campos extras como propriedades do objeto genérico\n const ocorrenciaGenerica = ocorrencia as Ocorrencia & {\n sugestao?: string;\n quickFixId?: string;\n confidence?: number;\n category?: string;\n matchIndex?: number;\n matchLength?: number;\n }; // OcorrenciaGenerica allows extra properties\n ocorrenciaGenerica.sugestao = sugestao;\n ocorrenciaGenerica.quickFixId = fixResultado.id;\n ocorrenciaGenerica.confidence = fixResultado.confidence;\n ocorrenciaGenerica.category = fixResultado.category;\n ocorrenciaGenerica.matchIndex = match.index;\n ocorrenciaGenerica.matchLength = match[0].length;\n ocorrencias.push(ocorrencia);\n }\n }\n return ocorrencias;\n }\n};\nfunction mapearCategoriaNivel(category: PatternBasedQuickFix['category']): 'info' | 'aviso' | 'erro' {\n switch (category) {\n case 'security':\n return 'erro';\n case 'performance':\n return 'aviso';\n case 'style':\n case 'documentation':\n return 'info';\n default:\n return 'info';\n }\n}"]}
1
+ {"version":3,"file":"analyst-quick-fixes.js","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-quick-fixes.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { messages } from '@core/messages';\nimport type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\nimport { findQuickFixes, type PatternBasedQuickFix } from '@core/config/auto';\n\nimport type { Analista, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport const analistaQuickFixes: Analista = {\n nome: 'quick-fixes',\n categoria: 'melhorias',\n descricao: 'Detecta problemas comuns e oferece correções automáticas',\n test: (relPath: string): boolean => {\n return /\\.(js|jsx|ts|tsx|mjs|cjs|svg)$/.test(relPath);\n },\n aplicar: (src: string, relPath: string, _ast: NodePath<Node> | null): Ocorrencia[] => {\n if (!src) return [];\n const ocorrencias: Ocorrencia[] = [];\n\n // Buscar quick fixes gerais\n const quickFixes = findQuickFixes(src, undefined, undefined, relPath);\n\n // Buscar quick fixes específicos por tipo de problema detectado\n const problemaTipos = ['unhandled-async', 'console-log', 'memory-leak', 'dangerous-html', 'eval-usage', 'complex-regex'];\n for (const problemTipo of problemaTipos) {\n const specificFixes = findQuickFixes(src, problemTipo, undefined, relPath);\n quickFixes.push(...specificFixes);\n }\n\n // Remover duplicatas por ID\n const uniqueFixes = quickFixes.filter((fix, index, arr) => arr.findIndex(arquivo => arquivo.id === fix.id) === index);\n for (const fixResultado of uniqueFixes) {\n for (const match of fixResultado.matches) {\n // Calcular linha aproximada do match\n const beforeMatch = src.substring(0, match.index || 0);\n const linha = beforeMatch.split('\\n').length;\n\n // Gerar preview da correção\n const previewCorrecao = fixResultado.fix(match, src);\n const originalLine = src.split('\\n')[linha - 1] || '';\n const fixedLine = previewCorrecao.split('\\n')[linha - 1] || '';\n\n // Criar sugestão com preview mais detalhado\n const sugestao = [fixResultado.description, '', `[CHAVE-INGLESA] Correção sugerida:`, `[ERRO] Antes: ${originalLine.trim()}`, `[OK] Depois: ${fixedLine.trim()}`, '', `Confiança: ${fixResultado.confidence}%`, `Categoria: ${fixResultado.category}`, `ID do Fix: ${fixResultado.id}`].join('\\n');\n\n // Mapear categoria para nível\n const nivel = mapearCategoriaNivel(fixResultado.category);\n\n // Criar ocorrência base\n const ocorrencia = criarOcorrencia({\n tipo: 'auto-fix-disponivel',\n nivel,\n mensagem: `${fixResultado.title}`,\n relPath,\n linha\n });\n\n // Adicionar campos extras como propriedades do objeto genérico\n const ocorrenciaGenerica = ocorrencia as Ocorrencia & {\n sugestao?: string;\n quickFixId?: string;\n confidence?: number;\n category?: string;\n matchIndex?: number;\n matchLength?: number;\n }; // OcorrenciaGenerica allows extra properties\n ocorrenciaGenerica.sugestao = sugestao;\n ocorrenciaGenerica.quickFixId = fixResultado.id;\n ocorrenciaGenerica.confidence = fixResultado.confidence;\n ocorrenciaGenerica.category = fixResultado.category;\n ocorrenciaGenerica.matchIndex = match.index;\n ocorrenciaGenerica.matchLength = match[0].length;\n ocorrencias.push(ocorrencia);\n }\n }\n return ocorrencias;\n }\n};\nfunction mapearCategoriaNivel(category: PatternBasedQuickFix['category']): 'info' | 'aviso' | 'erro' {\n switch (category) {\n case 'security':\n return 'erro';\n case 'performance':\n return 'aviso';\n case 'style':\n case 'documentation':\n return 'info';\n default:\n return 'info';\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"analyst-scoring.d.ts","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-scoring.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAuB9C,eAAO,MAAM,kBAAkB,EAAE,QA0DhC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,QAoC/B,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,QAAQ,EAA4C,CAAC"}
1
+ {"version":3,"file":"analyst-scoring.d.ts","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-scoring.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAuB9C,eAAO,MAAM,kBAAkB,EAAE,QA0DhC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,QAoC/B,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,QAAQ,EAA4C,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { messages } from '../../core/messages/index.js';
1
2
  import { findQuickFixes } from '../../core/config/auto/index.js';
2
3
  import { extrairSupressoes, isRegraSuprimida } from '../../shared/helpers/index.js';
3
4
  import { criarOcorrencia } from '../../types/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"analyst-scoring.js","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-scoring.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\nimport { findQuickFixes, type PatternBasedQuickFix } from '@core/config/auto';\nimport { extrairSupressoes, isRegraSuprimida } from '@shared/helpers';\n\nimport type { Analista, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nimport { analisarTexto, calcularLinha } from './scoring-shared.js';\n\n// ─── Helpers / Config ─────────────────────────────────────────\n\nfunction mapearCategoriaNivel(category: PatternBasedQuickFix['category']): 'info' | 'aviso' | 'erro' {\n switch (category) {\n case 'security':\n return 'erro';\n case 'performance':\n return 'aviso';\n case 'style':\n case 'documentation':\n return 'info';\n default:\n return 'info';\n }\n}\n\n// ─── analistaQuickFixes ───────────────────────────────────────\n\nexport const analistaQuickFixes: Analista = {\n nome: 'quick-fixes',\n categoria: 'melhorias',\n descricao: 'Detecta problemas comuns e oferece correções automáticas',\n test: (relPath: string): boolean => {\n // Inclui SVGs para permitir quick-fixes seguros (otimização e viewBox)\n return /\\.(js|jsx|ts|tsx|mjs|cjs|svg)$/.test(relPath);\n },\n aplicar: (src: string, relPath: string, _ast: NodePath<Node> | null): Ocorrencia[] => {\n if (!src) return [];\n const ocorrencias: Ocorrencia[] = [];\n\n // Quick fixes gerais\n const quickFixes = findQuickFixes(src, undefined, undefined, relPath);\n\n // Quick fixes específicos por tipo de problema detectado\n const problemaTipos = ['unhandled-async', 'console-log', 'memory-leak', 'dangerous-html', 'eval-usage', 'complex-regex'];\n for (const problemTipo of problemaTipos) {\n const specificFixes = findQuickFixes(src, problemTipo, undefined, relPath);\n quickFixes.push(...specificFixes);\n }\n\n // Remover duplicatas por ID\n const uniqueFixes = quickFixes.filter((fix, index, arr) => arr.findIndex(arquivo => arquivo.id === fix.id) === index);\n for (const fixResultado of uniqueFixes) {\n for (const match of fixResultado.matches) {\n const linha = calcularLinha(src, match.index, match);\n const previewCorrecao = fixResultado.fix(match, src);\n const originalLine = src.split('\\n')[linha - 1] || '';\n const fixedLine = previewCorrecao.split('\\n')[linha - 1] || '';\n const sugestao = [fixResultado.description, '', `[CHAVE-INGLESA] Correção sugerida:`, `[ERRO] Antes: ${originalLine.trim()}`, `[OK] Depois: ${fixedLine.trim()}`, '', `Confiança: ${fixResultado.confidence}%`, `Categoria: ${fixResultado.category}`, `ID do Fix: ${fixResultado.id}`].join('\\n');\n const nivel = mapearCategoriaNivel(fixResultado.category);\n const ocorrencia = criarOcorrencia({\n tipo: 'auto-fix-disponivel',\n nivel,\n mensagem: `${fixResultado.title}`,\n relPath,\n linha\n });\n const ocorrenciaGenerica = ocorrencia as Ocorrencia & {\n sugestao?: string;\n quickFixId?: string;\n confidence?: number;\n category?: string;\n matchIndex?: number;\n matchLength?: number;\n };\n ocorrenciaGenerica.sugestao = sugestao;\n ocorrenciaGenerica.quickFixId = fixResultado.id;\n ocorrenciaGenerica.confidence = fixResultado.confidence;\n ocorrenciaGenerica.category = fixResultado.category;\n ocorrenciaGenerica.matchIndex = match.index;\n ocorrenciaGenerica.matchLength = match[0].length;\n ocorrencias.push(ocorrencia);\n }\n }\n return ocorrencias;\n }\n};\n\n// ─── analistaPontuacao ────────────────────────────────────────\n\nexport const analistaPontuacao: Analista = {\n nome: 'pontuacao-fix',\n categoria: 'formatacao',\n descricao: 'Detecta problemas de pontuação, caracteres estranhos e formatação de texto',\n test: (relPath: string): boolean => {\n return /\\.(md|txt|mdx)$/.test(relPath);\n },\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const supressoes = extrairSupressoes(src);\n const problemas = analisarTexto(src);\n const ocorrencias: Ocorrencia[] = [];\n for (const problema of problemas) {\n const linha = calcularLinha(src, problema.posicao);\n if (isRegraSuprimida(problema.tipo, linha, supressoes)) continue;\n const linhas = src.split('\\n');\n const contexto = linhas[linha - 1] || '';\n const ocorrencia = criarOcorrencia({\n tipo: problema.tipo,\n nivel: (problema.confianca ?? 0) > 80 ? 'aviso' : 'info',\n mensagem: problema.descricao,\n relPath,\n linha\n });\n const ocorrenciaExtendida = ocorrencia as Ocorrencia & {\n sugestao?: string;\n confianca?: number;\n contexto?: string;\n };\n ocorrenciaExtendida.sugestao = problema.sugestao;\n ocorrenciaExtendida.confianca = problema.confianca;\n ocorrenciaExtendida.contexto = contexto;\n ocorrencias.push(ocorrencia);\n }\n return ocorrencias;\n }\n};\n\n// ─── Exports adicionais ───────────────────────────────────────\n\nexport const analistas: Analista[] = [analistaQuickFixes, analistaPontuacao];\n"]}
1
+ {"version":3,"file":"analyst-scoring.js","sourceRoot":"","sources":["../../../src/analysts/corrections/analyst-scoring.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { messages } from '@core/messages';\nimport type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\nimport { findQuickFixes, type PatternBasedQuickFix } from '@core/config/auto';\nimport { extrairSupressoes, isRegraSuprimida } from '@shared/helpers';\n\nimport type { Analista, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nimport { analisarTexto, calcularLinha } from './scoring-shared.js';\n\n// ─── Helpers / Config ─────────────────────────────────────────\n\nfunction mapearCategoriaNivel(category: PatternBasedQuickFix['category']): 'info' | 'aviso' | 'erro' {\n switch (category) {\n case 'security':\n return 'erro';\n case 'performance':\n return 'aviso';\n case 'style':\n case 'documentation':\n return 'info';\n default:\n return 'info';\n }\n}\n\n// ─── analistaQuickFixes ───────────────────────────────────────\n\nexport const analistaQuickFixes: Analista = {\n nome: 'quick-fixes',\n categoria: 'melhorias',\n descricao: 'Detecta problemas comuns e oferece correções automáticas',\n test: (relPath: string): boolean => {\n // Inclui SVGs para permitir quick-fixes seguros (otimização e viewBox)\n return /\\.(js|jsx|ts|tsx|mjs|cjs|svg)$/.test(relPath);\n },\n aplicar: (src: string, relPath: string, _ast: NodePath<Node> | null): Ocorrencia[] => {\n if (!src) return [];\n const ocorrencias: Ocorrencia[] = [];\n\n // Quick fixes gerais\n const quickFixes = findQuickFixes(src, undefined, undefined, relPath);\n\n // Quick fixes específicos por tipo de problema detectado\n const problemaTipos = ['unhandled-async', 'console-log', 'memory-leak', 'dangerous-html', 'eval-usage', 'complex-regex'];\n for (const problemTipo of problemaTipos) {\n const specificFixes = findQuickFixes(src, problemTipo, undefined, relPath);\n quickFixes.push(...specificFixes);\n }\n\n // Remover duplicatas por ID\n const uniqueFixes = quickFixes.filter((fix, index, arr) => arr.findIndex(arquivo => arquivo.id === fix.id) === index);\n for (const fixResultado of uniqueFixes) {\n for (const match of fixResultado.matches) {\n const linha = calcularLinha(src, match.index, match);\n const previewCorrecao = fixResultado.fix(match, src);\n const originalLine = src.split('\\n')[linha - 1] || '';\n const fixedLine = previewCorrecao.split('\\n')[linha - 1] || '';\n const sugestao = [fixResultado.description, '', `[CHAVE-INGLESA] Correção sugerida:`, `[ERRO] Antes: ${originalLine.trim()}`, `[OK] Depois: ${fixedLine.trim()}`, '', `Confiança: ${fixResultado.confidence}%`, `Categoria: ${fixResultado.category}`, `ID do Fix: ${fixResultado.id}`].join('\\n');\n const nivel = mapearCategoriaNivel(fixResultado.category);\n const ocorrencia = criarOcorrencia({\n tipo: 'auto-fix-disponivel',\n nivel,\n mensagem: `${fixResultado.title}`,\n relPath,\n linha\n });\n const ocorrenciaGenerica = ocorrencia as Ocorrencia & {\n sugestao?: string;\n quickFixId?: string;\n confidence?: number;\n category?: string;\n matchIndex?: number;\n matchLength?: number;\n };\n ocorrenciaGenerica.sugestao = sugestao;\n ocorrenciaGenerica.quickFixId = fixResultado.id;\n ocorrenciaGenerica.confidence = fixResultado.confidence;\n ocorrenciaGenerica.category = fixResultado.category;\n ocorrenciaGenerica.matchIndex = match.index;\n ocorrenciaGenerica.matchLength = match[0].length;\n ocorrencias.push(ocorrencia);\n }\n }\n return ocorrencias;\n }\n};\n\n// ─── analistaPontuacao ────────────────────────────────────────\n\nexport const analistaPontuacao: Analista = {\n nome: 'pontuacao-fix',\n categoria: 'formatacao',\n descricao: 'Detecta problemas de pontuação, caracteres estranhos e formatação de texto',\n test: (relPath: string): boolean => {\n return /\\.(md|txt|mdx)$/.test(relPath);\n },\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const supressoes = extrairSupressoes(src);\n const problemas = analisarTexto(src);\n const ocorrencias: Ocorrencia[] = [];\n for (const problema of problemas) {\n const linha = calcularLinha(src, problema.posicao);\n if (isRegraSuprimida(problema.tipo, linha, supressoes)) continue;\n const linhas = src.split('\\n');\n const contexto = linhas[linha - 1] || '';\n const ocorrencia = criarOcorrencia({\n tipo: problema.tipo,\n nivel: (problema.confianca ?? 0) > 80 ? 'aviso' : 'info',\n mensagem: problema.descricao,\n relPath,\n linha\n });\n const ocorrenciaExtendida = ocorrencia as Ocorrencia & {\n sugestao?: string;\n confianca?: number;\n contexto?: string;\n };\n ocorrenciaExtendida.sugestao = problema.sugestao;\n ocorrenciaExtendida.confianca = problema.confianca;\n ocorrenciaExtendida.contexto = contexto;\n ocorrencias.push(ocorrencia);\n }\n return ocorrencias;\n }\n};\n\n// ─── Exports adicionais ───────────────────────────────────────\n\nexport const analistas: Analista[] = [analistaQuickFixes, analistaPontuacao];\n"]}
@@ -225,8 +225,8 @@ export class GerenciadorMapaReversao {
225
225
  const dataFormatada = new Date(move.timestamp).toLocaleString('pt-BR');
226
226
  const reescritos = move.importsReescritos ? ' (imports reescritos)' : '';
227
227
  resultado += `${move.id}:\n`;
228
- resultado += ` 📅 ${dataFormatada}\n`;
229
- resultado += ` 📁 ${move.origem} → ${move.destino}\n`;
228
+ resultado += ` [DATE] ${dataFormatada}\n`;
229
+ resultado += ` [FOLDER] ${move.origem} → ${move.destino}\n`;
230
230
  resultado += ` [COMENTARIO] ${move.motivo}${reescritos}\n\n`;
231
231
  }
232
232
  return resultado;
@@ -1 +1 @@
1
- {"version":3,"file":"map-reversion.js","sourceRoot":"","sources":["../../../src/analysts/corrections/map-reversion.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\n\nimport { messages } from '@core/messages';\nimport { TUTANUS_ARQUIVOS } from '@core/registry';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\n\nimport type { MapaReversao, MoveReversao } from '@';\n\nconst {\n log,\n logAuto,\n MapaReversaoExtraMensagens\n} = messages;\nconst CONSTANTES_MAPA = {\n VERSAO: '1.0.0',\n ID_LENGTH: 9,\n ID_OFFSET: 2,\n RADIX_36: 36\n} as const;\nexport class GerenciadorMapaReversao {\n private readonly mapaPath: string;\n private mapa: MapaReversao;\n constructor(opts?: {\n mapaPath?: string;\n }) {\n this.mapaPath = opts?.mapaPath ?? TUTANUS_ARQUIVOS.MAPA_REVERSAO;\n this.mapa = {\n versao: CONSTANTES_MAPA.VERSAO,\n moves: [],\n metadata: {\n totalMoves: 0,\n ultimoMove: '',\n podeReverter: true\n }\n };\n }\n\n /**\n * Carrega o mapa de reversão do disco\n */\n async carregar(): Promise<void> {\n try {\n this.mapa = (await lerEstado<MapaReversao | null>(this.mapaPath, null)) ?? {\n versao: CONSTANTES_MAPA.VERSAO,\n moves: [],\n metadata: {\n totalMoves: 0,\n ultimoMove: '',\n podeReverter: true\n }\n };\n\n // Validação básica\n if (!this.mapa.moves || !Array.isArray(this.mapa.moves)) {\n throw new Error(messages.ExcecoesMensagens.mapaReversaoCorrompido);\n }\n logAuto.mapaReversaoCarregado(this.mapa.moves.length);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // Não persistimos automaticamente um mapa vazio ao carregar: evitar efeitos colaterais\n // (ex.: chamada a fs.mkdir) durante operações que apenas consultam o mapa.\n logAuto.mapaReversaoNenhumEncontrado();\n } else {\n logAuto.mapaReversaoErroCarregar((error as Error).message);\n // Reinicia com mapa vazio em caso de erro\n this.mapa = {\n versao: CONSTANTES_MAPA.VERSAO,\n moves: [],\n metadata: {\n totalMoves: 0,\n ultimoMove: '',\n podeReverter: true\n }\n };\n }\n }\n }\n\n /**\n * Salva o mapa de reversão no disco\n */\n async salvar(): Promise<void> {\n try {\n await fs.mkdir(path.dirname(this.mapaPath), {\n recursive: true\n });\n await salvarEstado(this.mapaPath, this.mapa);\n log.info(MapaReversaoExtraMensagens.mapaSalvo.replace('{total}', String(this.mapa.moves.length)));\n } catch (error) {\n logAuto.mapaReversaoErroSalvar((error as Error).message);\n }\n }\n\n /**\n * Registra um novo move no mapa de reversão\n */\n async registrarMove(origem: string, destino: string, motivo: string, conteudoOriginal?: string, conteudoFinal?: string,\n // quando true, evita persistir o mapa no disco imediatamente (útil para chamadas em massa/tests)\n skipSalvar?: boolean): Promise<string> {\n try {\n const id = `move_${Date.now()}_${Math.random().toString(CONSTANTES_MAPA.RADIX_36).substr(CONSTANTES_MAPA.ID_OFFSET, CONSTANTES_MAPA.ID_LENGTH)}`;\n const move: MoveReversao = {\n id,\n timestamp: new Date().toISOString(),\n origem,\n destino,\n motivo,\n // Considera que imports foram reescritos se houver conteúdo original\n // fornecido (testes esperam que passar conteudoOriginal permita restauração)\n importsReescritos: !!conteudoOriginal || !!conteudoFinal && conteudoOriginal !== conteudoFinal,\n conteudoOriginal,\n conteudoFinal\n };\n this.mapa.moves.push(move);\n this.mapa.metadata.totalMoves = this.mapa.moves.length;\n this.mapa.metadata.ultimoMove = move.timestamp;\n\n // Persiste no disco por padrão; caller pode optar por adiar a persistência\n if (!skipSalvar) {\n await this.salvar();\n }\n log.info(MapaReversaoExtraMensagens.moveRegistrado.replace('{origem}', origem).replace('{destino}', destino).replace('{motivo}', motivo));\n return id;\n } catch (err) {\n logAuto.mapaReversaoErroSalvar((err as Error).message);\n throw err;\n }\n }\n\n /**\n * Remove um move do mapa de reversão\n */\n async removerMove(id: string): Promise<boolean> {\n try {\n const indice = this.mapa.moves.findIndex((move: MoveReversao) => move.id === id);\n if (indice === -1) {\n return false;\n }\n this.mapa.moves.splice(indice, 1);\n this.mapa.metadata.totalMoves = this.mapa.moves.length;\n await this.salvar();\n logAuto.moveRemovido(id);\n return true;\n } catch (err) {\n logAuto.mapaReversaoErroSalvar((err as Error).message);\n return false;\n }\n }\n\n /**\n * Obtém todos os moves registrados\n */\n obterMoves(): MoveReversao[] {\n return [...this.mapa.moves];\n }\n\n /**\n * Obtém moves por arquivo\n */\n obterMovesPorArquivo(arquivo: string): MoveReversao[] {\n return this.mapa.moves.filter((move: MoveReversao) => move.origem === arquivo || move.destino === arquivo);\n }\n\n /**\n * Verifica se um arquivo pode ser revertido\n */\n podeReverterArquivo(arquivo: string): boolean {\n const moves = this.obterMovesPorArquivo(arquivo);\n return moves.length > 0;\n }\n\n /**\n * Reverte um move específico\n */\n async reverterMove(id: string, baseDir: string = process.cwd()): Promise<boolean> {\n const move = this.mapa.moves.find((metrica: MoveReversao) => metrica.id === id);\n if (!move) {\n logAuto.mapaReversaoMoveNaoEncontrado(id);\n return false;\n }\n try {\n const destinoCaminho = path.join(baseDir, move.destino);\n const origemCaminho = path.join(baseDir, move.origem);\n await fs.mkdir(path.dirname(origemCaminho), {\n recursive: true\n });\n\n // Move o arquivo de volta\n if (move.importsReescritos && move.conteudoOriginal) {\n // Usa flag 'wx' para escrita exclusiva - falha se o arquivo já existir,\n // eliminando a condição de corrida TOCTOU entre stat e write\n try {\n await fs.writeFile(origemCaminho, move.conteudoOriginal, {\n encoding: 'utf-8',\n flag: 'wx'\n });\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === 'EEXIST') {\n logAuto.mapaReversaoArquivoExisteOrigem(move.origem);\n return false;\n }\n if ((err as NodeJS.ErrnoException)?.code && (err as NodeJS.ErrnoException).code !== 'ENOENT') {\n logAuto.mapaReversaoErroReverter((err as Error).message);\n return false;\n }\n throw err;\n }\n try {\n await fs.unlink(destinoCaminho);\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n logAuto.mapaReversaoArquivoDestinoNaoEncontrado(move.destino);\n return false;\n }\n throw err;\n }\n log.sucesso(MapaReversaoExtraMensagens.arquivoRevertidoConteudo.replace('{destino}', move.destino).replace('{origem}', move.origem));\n } else {\n // Usa rename atômico - se destino não existir, falha com ENOENT\n try {\n await fs.rename(destinoCaminho, origemCaminho);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n logAuto.mapaReversaoArquivoDestinoNaoEncontrado(move.destino);\n return false;\n }\n if (code === 'EEXIST') {\n logAuto.mapaReversaoArquivoExisteOrigem(move.origem);\n return false;\n }\n throw err;\n }\n log.sucesso(MapaReversaoExtraMensagens.arquivoRevertido.replace('{destino}', move.destino).replace('{origem}', move.origem));\n }\n\n // Remove o move do mapa\n await this.removerMove(id);\n return true;\n } catch (error) {\n logAuto.mapaReversaoErroReverter((error as Error).message);\n return false;\n }\n }\n\n /**\n * Reverte todos os moves de um arquivo\n */\n async reverterArquivo(arquivo: string, baseDir: string = process.cwd()): Promise<boolean> {\n const moves = this.obterMovesPorArquivo(arquivo);\n if (moves.length === 0) {\n logAuto.mapaReversaoNenhumMove(arquivo);\n return false;\n }\n\n // Reverte do mais recente para o mais antigo\n const movesOrdenados = moves.sort((arquivo, base) => new Date(base.timestamp).getTime() - new Date(arquivo.timestamp).getTime());\n\n // Retorna true se pelo menos um move foi revertido com sucesso\n let revertedContagem = 0;\n try {\n for (const move of movesOrdenados) {\n const resultado = await this.reverterMove(move.id, baseDir);\n if (resultado) revertedContagem += 1;\n }\n } catch (error) {\n logAuto.mapaReversaoErroReverter((error as Error).message);\n return false;\n }\n return revertedContagem > 0;\n }\n\n /**\n * Lista moves em formato legível\n */\n listarMoves(): string {\n if (this.mapa.moves.length === 0) {\n return MapaReversaoExtraMensagens.nenhumMoveRegistrado;\n }\n let resultado = MapaReversaoExtraMensagens.tituloMapa.replace('{total}', String(this.mapa.moves.length));\n\n // Ordena por timestamp (mais recente primeiro)\n const movesOrdenados = [...this.mapa.moves].sort((arquivo, base) => new Date(base.timestamp).getTime() - new Date(arquivo.timestamp).getTime());\n for (const move of movesOrdenados) {\n const dataFormatada = new Date(move.timestamp).toLocaleString('pt-BR');\n const reescritos = move.importsReescritos ? ' (imports reescritos)' : '';\n resultado += `${move.id}:\\n`;\n resultado += ` 📅 ${dataFormatada}\\n`;\n resultado += ` 📁 ${move.origem} → ${move.destino}\\n`;\n resultado += ` [COMENTARIO] ${move.motivo}${reescritos}\\n\\n`;\n }\n return resultado;\n }\n\n /**\n * Limpa o mapa de reversão\n */\n async limpar(): Promise<void> {\n try {\n this.mapa.moves = [];\n this.mapa.metadata.totalMoves = 0;\n this.mapa.metadata.ultimoMove = '';\n await this.salvar();\n log.info(MapaReversaoExtraMensagens.mapaLimpo);\n } catch (err) {\n logAuto.mapaReversaoErroSalvar((err as Error).message);\n }\n }\n}\n\n// Instância global\nexport const mapaReversao = new GerenciadorMapaReversao();"]}
1
+ {"version":3,"file":"map-reversion.js","sourceRoot":"","sources":["../../../src/analysts/corrections/map-reversion.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\n\nimport { messages } from '@core/messages';\nimport { TUTANUS_ARQUIVOS } from '@core/registry';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\n\nimport type { MapaReversao, MoveReversao } from '@';\n\nconst {\n log,\n logAuto,\n MapaReversaoExtraMensagens\n} = messages;\nconst CONSTANTES_MAPA = {\n VERSAO: '1.0.0',\n ID_LENGTH: 9,\n ID_OFFSET: 2,\n RADIX_36: 36\n} as const;\nexport class GerenciadorMapaReversao {\n private readonly mapaPath: string;\n private mapa: MapaReversao;\n constructor(opts?: {\n mapaPath?: string;\n }) {\n this.mapaPath = opts?.mapaPath ?? TUTANUS_ARQUIVOS.MAPA_REVERSAO;\n this.mapa = {\n versao: CONSTANTES_MAPA.VERSAO,\n moves: [],\n metadata: {\n totalMoves: 0,\n ultimoMove: '',\n podeReverter: true\n }\n };\n }\n\n /**\n * Carrega o mapa de reversão do disco\n */\n async carregar(): Promise<void> {\n try {\n this.mapa = (await lerEstado<MapaReversao | null>(this.mapaPath, null)) ?? {\n versao: CONSTANTES_MAPA.VERSAO,\n moves: [],\n metadata: {\n totalMoves: 0,\n ultimoMove: '',\n podeReverter: true\n }\n };\n\n // Validação básica\n if (!this.mapa.moves || !Array.isArray(this.mapa.moves)) {\n throw new Error(messages.ExcecoesMensagens.mapaReversaoCorrompido);\n }\n logAuto.mapaReversaoCarregado(this.mapa.moves.length);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // Não persistimos automaticamente um mapa vazio ao carregar: evitar efeitos colaterais\n // (ex.: chamada a fs.mkdir) durante operações que apenas consultam o mapa.\n logAuto.mapaReversaoNenhumEncontrado();\n } else {\n logAuto.mapaReversaoErroCarregar((error as Error).message);\n // Reinicia com mapa vazio em caso de erro\n this.mapa = {\n versao: CONSTANTES_MAPA.VERSAO,\n moves: [],\n metadata: {\n totalMoves: 0,\n ultimoMove: '',\n podeReverter: true\n }\n };\n }\n }\n }\n\n /**\n * Salva o mapa de reversão no disco\n */\n async salvar(): Promise<void> {\n try {\n await fs.mkdir(path.dirname(this.mapaPath), {\n recursive: true\n });\n await salvarEstado(this.mapaPath, this.mapa);\n log.info(MapaReversaoExtraMensagens.mapaSalvo.replace('{total}', String(this.mapa.moves.length)));\n } catch (error) {\n logAuto.mapaReversaoErroSalvar((error as Error).message);\n }\n }\n\n /**\n * Registra um novo move no mapa de reversão\n */\n async registrarMove(origem: string, destino: string, motivo: string, conteudoOriginal?: string, conteudoFinal?: string,\n // quando true, evita persistir o mapa no disco imediatamente (útil para chamadas em massa/tests)\n skipSalvar?: boolean): Promise<string> {\n try {\n const id = `move_${Date.now()}_${Math.random().toString(CONSTANTES_MAPA.RADIX_36).substr(CONSTANTES_MAPA.ID_OFFSET, CONSTANTES_MAPA.ID_LENGTH)}`;\n const move: MoveReversao = {\n id,\n timestamp: new Date().toISOString(),\n origem,\n destino,\n motivo,\n // Considera que imports foram reescritos se houver conteúdo original\n // fornecido (testes esperam que passar conteudoOriginal permita restauração)\n importsReescritos: !!conteudoOriginal || !!conteudoFinal && conteudoOriginal !== conteudoFinal,\n conteudoOriginal,\n conteudoFinal\n };\n this.mapa.moves.push(move);\n this.mapa.metadata.totalMoves = this.mapa.moves.length;\n this.mapa.metadata.ultimoMove = move.timestamp;\n\n // Persiste no disco por padrão; caller pode optar por adiar a persistência\n if (!skipSalvar) {\n await this.salvar();\n }\n log.info(MapaReversaoExtraMensagens.moveRegistrado.replace('{origem}', origem).replace('{destino}', destino).replace('{motivo}', motivo));\n return id;\n } catch (err) {\n logAuto.mapaReversaoErroSalvar((err as Error).message);\n throw err;\n }\n }\n\n /**\n * Remove um move do mapa de reversão\n */\n async removerMove(id: string): Promise<boolean> {\n try {\n const indice = this.mapa.moves.findIndex((move: MoveReversao) => move.id === id);\n if (indice === -1) {\n return false;\n }\n this.mapa.moves.splice(indice, 1);\n this.mapa.metadata.totalMoves = this.mapa.moves.length;\n await this.salvar();\n logAuto.moveRemovido(id);\n return true;\n } catch (err) {\n logAuto.mapaReversaoErroSalvar((err as Error).message);\n return false;\n }\n }\n\n /**\n * Obtém todos os moves registrados\n */\n obterMoves(): MoveReversao[] {\n return [...this.mapa.moves];\n }\n\n /**\n * Obtém moves por arquivo\n */\n obterMovesPorArquivo(arquivo: string): MoveReversao[] {\n return this.mapa.moves.filter((move: MoveReversao) => move.origem === arquivo || move.destino === arquivo);\n }\n\n /**\n * Verifica se um arquivo pode ser revertido\n */\n podeReverterArquivo(arquivo: string): boolean {\n const moves = this.obterMovesPorArquivo(arquivo);\n return moves.length > 0;\n }\n\n /**\n * Reverte um move específico\n */\n async reverterMove(id: string, baseDir: string = process.cwd()): Promise<boolean> {\n const move = this.mapa.moves.find((metrica: MoveReversao) => metrica.id === id);\n if (!move) {\n logAuto.mapaReversaoMoveNaoEncontrado(id);\n return false;\n }\n try {\n const destinoCaminho = path.join(baseDir, move.destino);\n const origemCaminho = path.join(baseDir, move.origem);\n await fs.mkdir(path.dirname(origemCaminho), {\n recursive: true\n });\n\n // Move o arquivo de volta\n if (move.importsReescritos && move.conteudoOriginal) {\n // Usa flag 'wx' para escrita exclusiva - falha se o arquivo já existir,\n // eliminando a condição de corrida TOCTOU entre stat e write\n try {\n await fs.writeFile(origemCaminho, move.conteudoOriginal, {\n encoding: 'utf-8',\n flag: 'wx'\n });\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === 'EEXIST') {\n logAuto.mapaReversaoArquivoExisteOrigem(move.origem);\n return false;\n }\n if ((err as NodeJS.ErrnoException)?.code && (err as NodeJS.ErrnoException).code !== 'ENOENT') {\n logAuto.mapaReversaoErroReverter((err as Error).message);\n return false;\n }\n throw err;\n }\n try {\n await fs.unlink(destinoCaminho);\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n logAuto.mapaReversaoArquivoDestinoNaoEncontrado(move.destino);\n return false;\n }\n throw err;\n }\n log.sucesso(MapaReversaoExtraMensagens.arquivoRevertidoConteudo.replace('{destino}', move.destino).replace('{origem}', move.origem));\n } else {\n // Usa rename atômico - se destino não existir, falha com ENOENT\n try {\n await fs.rename(destinoCaminho, origemCaminho);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n logAuto.mapaReversaoArquivoDestinoNaoEncontrado(move.destino);\n return false;\n }\n if (code === 'EEXIST') {\n logAuto.mapaReversaoArquivoExisteOrigem(move.origem);\n return false;\n }\n throw err;\n }\n log.sucesso(MapaReversaoExtraMensagens.arquivoRevertido.replace('{destino}', move.destino).replace('{origem}', move.origem));\n }\n\n // Remove o move do mapa\n await this.removerMove(id);\n return true;\n } catch (error) {\n logAuto.mapaReversaoErroReverter((error as Error).message);\n return false;\n }\n }\n\n /**\n * Reverte todos os moves de um arquivo\n */\n async reverterArquivo(arquivo: string, baseDir: string = process.cwd()): Promise<boolean> {\n const moves = this.obterMovesPorArquivo(arquivo);\n if (moves.length === 0) {\n logAuto.mapaReversaoNenhumMove(arquivo);\n return false;\n }\n\n // Reverte do mais recente para o mais antigo\n const movesOrdenados = moves.sort((arquivo, base) => new Date(base.timestamp).getTime() - new Date(arquivo.timestamp).getTime());\n\n // Retorna true se pelo menos um move foi revertido com sucesso\n let revertedContagem = 0;\n try {\n for (const move of movesOrdenados) {\n const resultado = await this.reverterMove(move.id, baseDir);\n if (resultado) revertedContagem += 1;\n }\n } catch (error) {\n logAuto.mapaReversaoErroReverter((error as Error).message);\n return false;\n }\n return revertedContagem > 0;\n }\n\n /**\n * Lista moves em formato legível\n */\n listarMoves(): string {\n if (this.mapa.moves.length === 0) {\n return MapaReversaoExtraMensagens.nenhumMoveRegistrado;\n }\n let resultado = MapaReversaoExtraMensagens.tituloMapa.replace('{total}', String(this.mapa.moves.length));\n\n // Ordena por timestamp (mais recente primeiro)\n const movesOrdenados = [...this.mapa.moves].sort((arquivo, base) => new Date(base.timestamp).getTime() - new Date(arquivo.timestamp).getTime());\n for (const move of movesOrdenados) {\n const dataFormatada = new Date(move.timestamp).toLocaleString('pt-BR');\n const reescritos = move.importsReescritos ? ' (imports reescritos)' : '';\n resultado += `${move.id}:\\n`;\n resultado += ` [DATE] ${dataFormatada}\\n`;\n resultado += ` [FOLDER] ${move.origem} → ${move.destino}\\n`;\n resultado += ` [COMENTARIO] ${move.motivo}${reescritos}\\n\\n`;\n }\n return resultado;\n }\n\n /**\n * Limpa o mapa de reversão\n */\n async limpar(): Promise<void> {\n try {\n this.mapa.moves = [];\n this.mapa.metadata.totalMoves = 0;\n this.mapa.metadata.ultimoMove = '';\n await this.salvar();\n log.info(MapaReversaoExtraMensagens.mapaLimpo);\n } catch (err) {\n logAuto.mapaReversaoErroSalvar((err as Error).message);\n }\n }\n}\n\n// Instância global\nexport const mapaReversao = new GerenciadorMapaReversao();"]}
@@ -45,9 +45,9 @@ function dividirPendencias(pendencias, reativar, _agora) {
45
45
  }
46
46
  const { AUTOANALISE_CONCURRENCY: CONCORRENCIA = 5, ZELADOR_ABANDONED_DIR: DIR_ABANDONADOS, ZELADOR_PENDING_PATH: PATH_PENDENTES, ZELADOR_REACTIVATE_PATH: PATH_REATIVAR, ZELADOR_HISTORY_PATH: PATH_HISTORICO, ZELADOR_REPORT_PATH: PATH_RELATORIO } = config;
47
47
  export async function executarPodaCiclica(executarRealmente = false) {
48
- log.info('\n🌿 Iniciando poda automática...\n');
48
+ log.info('\n[HERB] Iniciando poda automática...\n');
49
49
  if (!executarRealmente) {
50
- log.aviso('🧪 Modo de simulação ativado (SIMULADO). Nenhum arquivo será movido.\n');
50
+ log.aviso('[TEST] Modo de simulação ativado (SIMULADO). Nenhum arquivo será movido.\n');
51
51
  }
52
52
  const base = process.cwd();
53
53
  const agora = Date.now();
@@ -69,7 +69,7 @@ export async function executarPodaCiclica(executarRealmente = false) {
69
69
  await moverArquivos(aPodar, base, historico);
70
70
  await salvarEstado(PATH_PENDENTES, aManter);
71
71
  await salvarEstado(PATH_HISTORICO, historico);
72
- log.sucesso('🧹 Podagem concluída.');
72
+ log.sucesso('[BROOM] Podagem concluída.');
73
73
  }
74
74
  else {
75
75
  logAuto.podaPodandoSimulado(aPodar.length);
@@ -1 +1 @@
1
- {"version":3,"file":"pruning.js","sourceRoot":"","sources":["../../../src/analysts/corrections/pruning.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport path from 'node:path';\n\nimport { detectarFantasmas } from '@analysts/detectors';\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { gerarRelatorioPodaJson, gerarRelatorioPodaMarkdown } from '@reports';\nimport { ensureDir } from '@shared/helpers';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\nimport pLimit from 'p-limit';\n\nimport type { FileEntryWithAst, HistoricoItem, Pendencia, ResultadoPoda } from '@';\n\nconst {\n log,\n logAuto\n} = getMessages();\nexport async function removerArquivosOrfaos(_fileEntries: FileEntryWithAst[] /*executarRealmente = false*/): Promise<ResultadoPoda> {\n const {\n fantasmas\n } = await detectarFantasmas();\n return {\n arquivosOrfaos: fantasmas\n };\n}\nfunction gerarPendencias(fantasmas: {\n arquivo: string;\n referenciado?: boolean;\n}[], agora: number): Pendencia[] {\n return fantasmas.map(arquivo => ({\n arquivo: arquivo.arquivo,\n motivo: arquivo.referenciado ? 'inativo' : 'órfão',\n detectedAt: agora,\n scheduleAt: agora\n }));\n}\nfunction mesclarPendencias(anteriores: Pendencia[], novos: Pendencia[]): Pendencia[] {\n const mapa = new Map<string, Pendencia>();\n for (const caminho of anteriores) mapa.set(caminho.arquivo, caminho);\n for (const caminho of novos) mapa.set(caminho.arquivo, caminho);\n return Array.from(mapa.values());\n}\nfunction dividirPendencias(pendencias: Pendencia[], reativar: string[], _agora: number): [Pendencia[], Pendencia[]] {\n const aManter: Pendencia[] = [];\n const aPodar: Pendencia[] = [];\n const reativarSet = new Set(reativar);\n for (const caminho of pendencias) {\n if (reativarSet.has(caminho.arquivo)) {\n aManter.push(caminho);\n } else {\n aPodar.push(caminho);\n }\n }\n return [aManter, aPodar];\n}\nconst {\n AUTOANALISE_CONCURRENCY: CONCORRENCIA = 5,\n ZELADOR_ABANDONED_DIR: DIR_ABANDONADOS,\n ZELADOR_PENDING_PATH: PATH_PENDENTES,\n ZELADOR_REACTIVATE_PATH: PATH_REATIVAR,\n ZELADOR_HISTORY_PATH: PATH_HISTORICO,\n ZELADOR_REPORT_PATH: PATH_RELATORIO\n} = config;\nexport async function executarPodaCiclica(executarRealmente = false): Promise<void> {\n log.info('\\n🌿 Iniciando poda automática...\\n');\n if (!executarRealmente) {\n log.aviso('🧪 Modo de simulação ativado (SIMULADO). Nenhum arquivo será movido.\\n');\n }\n const base = process.cwd();\n const agora = Date.now();\n const [anteriores, reativar, historico] = await Promise.all([lerEstado<Pendencia[]>(PATH_PENDENTES), lerEstado<string[]>(PATH_REATIVAR), lerEstado<HistoricoItem[]>(PATH_HISTORICO)]);\n const {\n fantasmas\n } = await detectarFantasmas();\n const novos = gerarPendencias(fantasmas, agora);\n const unicos = mesclarPendencias(anteriores, novos);\n const [aManter, aPodar] = dividirPendencias(unicos, reativar, agora);\n if (!aPodar.length) {\n logAuto.podaNenhumArquivo();\n await gerarRelatorioPodaMarkdown(PATH_RELATORIO.replace(/\\.json$/, '.md'), aPodar, aManter, {\n simulado: !executarRealmente\n });\n await gerarRelatorioPodaJson(PATH_RELATORIO, aPodar, aManter);\n return;\n }\n if (executarRealmente) {\n logAuto.podaPodando(aPodar.length);\n await moverArquivos(aPodar, base, historico);\n await salvarEstado(PATH_PENDENTES, aManter);\n await salvarEstado(PATH_HISTORICO, historico);\n log.sucesso('🧹 Podagem concluída.');\n } else {\n // Mesmo em simulação, mostramos contagem para cobrir mensagem esperada\n logAuto.podaPodandoSimulado(aPodar.length);\n moverArquivosSimulado(aPodar, base);\n }\n}\nfunction moverArquivosSimulado(lista: Pendencia[], base: string): void {\n log.info(`Simulando movimentação para ${DIR_ABANDONADOS}:\\n`);\n for (const pendencia of lista) {\n const destino = path.join(base, DIR_ABANDONADOS, pendencia.arquivo);\n log.info(` → SIMULADO: '${pendencia.arquivo}' → '${path.relative(base, destino)}'`);\n }\n log.info('');\n}\nasync function moverArquivos(lista: Pendencia[], base: string, historico: HistoricoItem[]): Promise<void> {\n const limitar = pLimit(CONCORRENCIA);\n await Promise.all(lista.map(pend => limitar(async () => {\n const src = path.join(base, pend.arquivo);\n const dest = path.join(base, DIR_ABANDONADOS, pend.arquivo);\n try {\n const fs = await import('node:fs');\n await ensureDir(dest);\n await fs.promises.rename(src, dest);\n historico.push({\n arquivo: pend.arquivo,\n movidoEm: new Date().toISOString(),\n motivo: pend.motivo\n });\n logAuto.podaArquivoMovido(pend.arquivo);\n } catch (err) {\n log.erro(`[ERRO] Falha ao mover ${pend.arquivo}: ${typeof err === 'object' && err && 'message' in err ? (err as {\n message: string;\n }).message : String(err)}`);\n }\n })));\n}"]}
1
+ {"version":3,"file":"pruning.js","sourceRoot":"","sources":["../../../src/analysts/corrections/pruning.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport path from 'node:path';\n\nimport { detectarFantasmas } from '@analysts/detectors';\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { gerarRelatorioPodaJson, gerarRelatorioPodaMarkdown } from '@reports';\nimport { ensureDir } from '@shared/helpers';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\nimport pLimit from 'p-limit';\n\nimport type { FileEntryWithAst, HistoricoItem, Pendencia, ResultadoPoda } from '@';\n\nconst {\n log,\n logAuto\n} = getMessages();\nexport async function removerArquivosOrfaos(_fileEntries: FileEntryWithAst[] /*executarRealmente = false*/): Promise<ResultadoPoda> {\n const {\n fantasmas\n } = await detectarFantasmas();\n return {\n arquivosOrfaos: fantasmas\n };\n}\nfunction gerarPendencias(fantasmas: {\n arquivo: string;\n referenciado?: boolean;\n}[], agora: number): Pendencia[] {\n return fantasmas.map(arquivo => ({\n arquivo: arquivo.arquivo,\n motivo: arquivo.referenciado ? 'inativo' : 'órfão',\n detectedAt: agora,\n scheduleAt: agora\n }));\n}\nfunction mesclarPendencias(anteriores: Pendencia[], novos: Pendencia[]): Pendencia[] {\n const mapa = new Map<string, Pendencia>();\n for (const caminho of anteriores) mapa.set(caminho.arquivo, caminho);\n for (const caminho of novos) mapa.set(caminho.arquivo, caminho);\n return Array.from(mapa.values());\n}\nfunction dividirPendencias(pendencias: Pendencia[], reativar: string[], _agora: number): [Pendencia[], Pendencia[]] {\n const aManter: Pendencia[] = [];\n const aPodar: Pendencia[] = [];\n const reativarSet = new Set(reativar);\n for (const caminho of pendencias) {\n if (reativarSet.has(caminho.arquivo)) {\n aManter.push(caminho);\n } else {\n aPodar.push(caminho);\n }\n }\n return [aManter, aPodar];\n}\nconst {\n AUTOANALISE_CONCURRENCY: CONCORRENCIA = 5,\n ZELADOR_ABANDONED_DIR: DIR_ABANDONADOS,\n ZELADOR_PENDING_PATH: PATH_PENDENTES,\n ZELADOR_REACTIVATE_PATH: PATH_REATIVAR,\n ZELADOR_HISTORY_PATH: PATH_HISTORICO,\n ZELADOR_REPORT_PATH: PATH_RELATORIO\n} = config;\nexport async function executarPodaCiclica(executarRealmente = false): Promise<void> {\n log.info('\\n[HERB] Iniciando poda automática...\\n');\n if (!executarRealmente) {\n log.aviso('[TEST] Modo de simulação ativado (SIMULADO). Nenhum arquivo será movido.\\n');\n }\n const base = process.cwd();\n const agora = Date.now();\n const [anteriores, reativar, historico] = await Promise.all([lerEstado<Pendencia[]>(PATH_PENDENTES), lerEstado<string[]>(PATH_REATIVAR), lerEstado<HistoricoItem[]>(PATH_HISTORICO)]);\n const {\n fantasmas\n } = await detectarFantasmas();\n const novos = gerarPendencias(fantasmas, agora);\n const unicos = mesclarPendencias(anteriores, novos);\n const [aManter, aPodar] = dividirPendencias(unicos, reativar, agora);\n if (!aPodar.length) {\n logAuto.podaNenhumArquivo();\n await gerarRelatorioPodaMarkdown(PATH_RELATORIO.replace(/\\.json$/, '.md'), aPodar, aManter, {\n simulado: !executarRealmente\n });\n await gerarRelatorioPodaJson(PATH_RELATORIO, aPodar, aManter);\n return;\n }\n if (executarRealmente) {\n logAuto.podaPodando(aPodar.length);\n await moverArquivos(aPodar, base, historico);\n await salvarEstado(PATH_PENDENTES, aManter);\n await salvarEstado(PATH_HISTORICO, historico);\n log.sucesso('[BROOM] Podagem concluída.');\n } else {\n // Mesmo em simulação, mostramos contagem para cobrir mensagem esperada\n logAuto.podaPodandoSimulado(aPodar.length);\n moverArquivosSimulado(aPodar, base);\n }\n}\nfunction moverArquivosSimulado(lista: Pendencia[], base: string): void {\n log.info(`Simulando movimentação para ${DIR_ABANDONADOS}:\\n`);\n for (const pendencia of lista) {\n const destino = path.join(base, DIR_ABANDONADOS, pendencia.arquivo);\n log.info(` → SIMULADO: '${pendencia.arquivo}' → '${path.relative(base, destino)}'`);\n }\n log.info('');\n}\nasync function moverArquivos(lista: Pendencia[], base: string, historico: HistoricoItem[]): Promise<void> {\n const limitar = pLimit(CONCORRENCIA);\n await Promise.all(lista.map(pend => limitar(async () => {\n const src = path.join(base, pend.arquivo);\n const dest = path.join(base, DIR_ABANDONADOS, pend.arquivo);\n try {\n const fs = await import('node:fs');\n await ensureDir(dest);\n await fs.promises.rename(src, dest);\n historico.push({\n arquivo: pend.arquivo,\n movidoEm: new Date().toISOString(),\n motivo: pend.motivo\n });\n logAuto.podaArquivoMovido(pend.arquivo);\n } catch (err) {\n log.erro(`[ERRO] Falha ao mover ${pend.arquivo}: ${typeof err === 'object' && err && 'message' in err ? (err as {\n message: string;\n }).message : String(err)}`);\n }\n })));\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"correction-css.d.ts","sourceRoot":"","sources":["../../../../src/analysts/css/corrections/correction-css.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAG9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CA4BnF;AACD,eAAO,MAAM,aAAa,EAAE,QAiB3B,CAAC"}
1
+ {"version":3,"file":"correction-css.d.ts","sourceRoot":"","sources":["../../../../src/analysts/css/corrections/correction-css.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAG9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CA4BnF;AACD,eAAO,MAAM,aAAa,EAAE,QAiB3B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { messages } from '../../../core/messages/index.js';
1
2
  import { splitLines } from '../../../shared/helpers/index.js';
2
3
  import { criarOcorrencia } from '../../../types/index.js';
3
4
  export function detectarCorrecoesCss(src, _relPath) {
@@ -41,7 +42,7 @@ export const correctionCss = {
41
42
  return correcoes.map(elem => criarOcorrencia({
42
43
  tipo: `correction-${elem.tipo}`,
43
44
  nivel: elem.confianca > 85 ? 'aviso' : 'info',
44
- mensagem: `Correção sugerida: ${elem.tipo}`,
45
+ mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),
45
46
  relPath,
46
47
  linha: elem.linha,
47
48
  sugestao: `[ERRO] ${elem.original}\n[OK] ${elem.sugerido}\nConfiança: ${elem.confianca}%`
@@ -1 +1 @@
1
- {"version":3,"file":"correction-css.js","sourceRoot":"","sources":["../../../../src/analysts/css/corrections/correction-css.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,CAAC;AASpC,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,QAAgB;IAChE,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE;gBACtB,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG;gBAC7D,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE;oBACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,0CAA0C;IACrD,IAAI,EAAE,CAAC,OAAe,EAAW,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;IACvE,OAAO,EAAE,CAAC,GAAW,EAAE,OAAe,EAAgB,EAAE;QACtD,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC;YAC3C,IAAI,EAAE,cAAc,IAAI,CAAC,IAAI,EAAE;YAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAC7C,QAAQ,EAAE,sBAAsB,IAAI,CAAC,IAAI,EAAE;YAC3C,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,UAAU,IAAI,CAAC,QAAQ,UAAU,IAAI,CAAC,QAAQ,gBAAgB,IAAI,CAAC,SAAS,GAAG;SAC1F,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [CHAVE-INGLESA] Correções automáticas para CSS\n *\n * Fornece correções sugeridas para problemas comuns em CSS:\n * - Remover !important\n * - Consolidar seletores duplicados\n * - Sugerir classes ao invés de IDs\n */\n\nimport { splitLines } from '@shared/helpers';\n\nimport type { Analista, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport interface CssCorrection {\n tipo: string;\n original: string;\n sugerido: string;\n linha: number;\n confianca: number;\n}\nexport function detectarCorrecoesCss(src: string, _relPath: string): CssCorrection[] {\n const correcoes: CssCorrection[] = [];\n const linhas = splitLines(src);\n linhas.forEach((linha, index) => {\n const numeroLinha = index + 1;\n if (/\\s*!important/.test(linha)) {\n correcoes.push({\n tipo: 'css-remove-important',\n original: linha.trim(),\n sugerido: `${linha.replace(/\\s*!important\\s*/g, '').trim()};`,\n linha: numeroLinha,\n confianca: 80\n });\n }\n if (/#[a-zA-Z0-9_-]+\\s*\\{/.test(linha)) {\n const idMatch = linha.match(/#([a-zA-Z0-9_-]+)/);\n if (idMatch) {\n correcoes.push({\n tipo: 'css-id-to-class',\n original: linha.trim(),\n sugerido: linha.replace(/#([a-zA-Z0-9_-]+)/, `.${idMatch[1]}`),\n linha: numeroLinha,\n confianca: 70\n });\n }\n }\n });\n return correcoes;\n}\nexport const correctionCss: Analista = {\n nome: 'correction-css',\n categoria: 'estilo',\n descricao: 'Correções automáticas para problemas CSS',\n test: (relPath: string): boolean => /\\.(css|scss|sass)$/i.test(relPath),\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const correcoes = detectarCorrecoesCss(src, relPath);\n return correcoes.map(elem => criarOcorrencia({\n tipo: `correction-${elem.tipo}`,\n nivel: elem.confianca > 85 ? 'aviso' : 'info',\n mensagem: `Correção sugerida: ${elem.tipo}`,\n relPath,\n linha: elem.linha,\n sugestao: `[ERRO] ${elem.original}\\n[OK] ${elem.sugerido}\\nConfiança: ${elem.confianca}%`\n }));\n }\n};"]}
1
+ {"version":3,"file":"correction-css.js","sourceRoot":"","sources":["../../../../src/analysts/css/corrections/correction-css.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,CAAC;AASpC,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,QAAgB;IAChE,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE;gBACtB,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG;gBAC7D,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE;oBACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,0CAA0C;IACrD,IAAI,EAAE,CAAC,OAAe,EAAW,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;IACvE,OAAO,EAAE,CAAC,GAAW,EAAE,OAAe,EAAgB,EAAE;QACtD,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC;YAC3C,IAAI,EAAE,cAAc,IAAI,CAAC,IAAI,EAAE;YAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAC7C,QAAQ,EAAE,QAAQ,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpE,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,UAAU,IAAI,CAAC,QAAQ,UAAU,IAAI,CAAC,QAAQ,gBAAgB,IAAI,CAAC,SAAS,GAAG;SAC1F,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * [CHAVE-INGLESA] Correções automáticas para CSS\n *\n * Fornece correções sugeridas para problemas comuns em CSS:\n * - Remover !important\n * - Consolidar seletores duplicados\n * - Sugerir classes ao invés de IDs\n */\n\nimport { messages } from '@core/messages';\nimport { splitLines } from '@shared/helpers';\n\nimport type { Analista, Ocorrencia } from '@';\nimport { criarOcorrencia } from '@';\n\nexport interface CssCorrection {\n tipo: string;\n original: string;\n sugerido: string;\n linha: number;\n confianca: number;\n}\nexport function detectarCorrecoesCss(src: string, _relPath: string): CssCorrection[] {\n const correcoes: CssCorrection[] = [];\n const linhas = splitLines(src);\n linhas.forEach((linha, index) => {\n const numeroLinha = index + 1;\n if (/\\s*!important/.test(linha)) {\n correcoes.push({\n tipo: 'css-remove-important',\n original: linha.trim(),\n sugerido: `${linha.replace(/\\s*!important\\s*/g, '').trim()};`,\n linha: numeroLinha,\n confianca: 80\n });\n }\n if (/#[a-zA-Z0-9_-]+\\s*\\{/.test(linha)) {\n const idMatch = linha.match(/#([a-zA-Z0-9_-]+)/);\n if (idMatch) {\n correcoes.push({\n tipo: 'css-id-to-class',\n original: linha.trim(),\n sugerido: linha.replace(/#([a-zA-Z0-9_-]+)/, `.${idMatch[1]}`),\n linha: numeroLinha,\n confianca: 70\n });\n }\n }\n });\n return correcoes;\n}\nexport const correctionCss: Analista = {\n nome: 'correction-css',\n categoria: 'estilo',\n descricao: 'Correções automáticas para problemas CSS',\n test: (relPath: string): boolean => /\\.(css|scss|sass)$/i.test(relPath),\n aplicar: (src: string, relPath: string): Ocorrencia[] => {\n if (!src) return [];\n const correcoes = detectarCorrecoesCss(src, relPath);\n return correcoes.map(elem => criarOcorrencia({\n tipo: `correction-${elem.tipo}`,\n nivel: elem.confianca > 85 ? 'aviso' : 'info',\n mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),\n relPath,\n linha: elem.linha,\n sugestao: `[ERRO] ${elem.original}\\n[OK] ${elem.sugerido}\\nConfiança: ${elem.confianca}%`\n }));\n }\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"detector-css-best-practices.d.ts","sourceRoot":"","sources":["../../../../src/analysts/css/detectors/detector-css-best-practices.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAG9C,eAAO,MAAM,wBAAwB,EAAE,QAuFtC,CAAC"}
1
+ {"version":3,"file":"detector-css-best-practices.d.ts","sourceRoot":"","sources":["../../../../src/analysts/css/detectors/detector-css-best-practices.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,GAAG,CAAC;AAG9C,eAAO,MAAM,wBAAwB,EAAE,QAuFtC,CAAC"}