tutanus 0.13.2 → 0.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/analysts/plugins/detector-markdown.js +2 -2
  2. package/dist/analysts/plugins/detector-markdown.js.map +1 -1
  3. package/dist/bin/cli-bootstrap.js +7 -7
  4. package/dist/bin/cli-bootstrap.js.map +1 -1
  5. package/dist/bin/index.js +7 -7
  6. package/dist/bin/index.js.map +1 -1
  7. package/dist/cli/commands/command-github-actions.d.ts.map +1 -1
  8. package/dist/cli/commands/command-github-actions.js +1 -3
  9. package/dist/cli/commands/command-github-actions.js.map +1 -1
  10. package/dist/cli/commands/command-guardian.js +1 -1
  11. package/dist/cli/commands/command-guardian.js.map +1 -1
  12. package/dist/cli/commands/command-marketplace.js +22 -22
  13. package/dist/cli/commands/command-marketplace.js.map +1 -1
  14. package/dist/cli/commands/command-prune.js +1 -1
  15. package/dist/cli/commands/command-prune.js.map +1 -1
  16. package/dist/cli/commands/command-reverter.js +6 -6
  17. package/dist/cli/commands/command-reverter.js.map +1 -1
  18. package/dist/core/messages/en/cli/cli-bin-messages.d.ts +7 -0
  19. package/dist/core/messages/en/cli/cli-bin-messages.d.ts.map +1 -1
  20. package/dist/core/messages/en/cli/cli-bin-messages.js +7 -0
  21. package/dist/core/messages/en/cli/cli-bin-messages.js.map +1 -1
  22. package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts +1 -0
  23. package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  24. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js +1 -0
  25. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js.map +1 -1
  26. package/dist/core/messages/en/cli/cli-command-guardian-messages.d.ts +2 -1
  27. package/dist/core/messages/en/cli/cli-command-guardian-messages.d.ts.map +1 -1
  28. package/dist/core/messages/en/cli/cli-command-guardian-messages.js +2 -1
  29. package/dist/core/messages/en/cli/cli-command-guardian-messages.js.map +1 -1
  30. package/dist/core/messages/en/cli/cli-command-marketplace-messages.d.ts +19 -0
  31. package/dist/core/messages/en/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  32. package/dist/core/messages/en/cli/cli-command-marketplace-messages.js +19 -0
  33. package/dist/core/messages/en/cli/cli-command-marketplace-messages.js.map +1 -1
  34. package/dist/core/messages/en/cli/cli-command-prune-messages.d.ts +1 -0
  35. package/dist/core/messages/en/cli/cli-command-prune-messages.d.ts.map +1 -1
  36. package/dist/core/messages/en/cli/cli-command-prune-messages.js +1 -0
  37. package/dist/core/messages/en/cli/cli-command-prune-messages.js.map +1 -1
  38. package/dist/core/messages/en/cli/cli-command-reverter-messages.d.ts +6 -0
  39. package/dist/core/messages/en/cli/cli-command-reverter-messages.d.ts.map +1 -1
  40. package/dist/core/messages/en/cli/cli-command-reverter-messages.js +6 -0
  41. package/dist/core/messages/en/cli/cli-command-reverter-messages.js.map +1 -1
  42. package/dist/core/messages/en/guardian/guardian-messages.d.ts +3 -0
  43. package/dist/core/messages/en/guardian/guardian-messages.d.ts.map +1 -1
  44. package/dist/core/messages/en/guardian/guardian-messages.js +3 -0
  45. package/dist/core/messages/en/guardian/guardian-messages.js.map +1 -1
  46. package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts +1 -0
  47. package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts.map +1 -1
  48. package/dist/core/messages/en/guardian/watcher-hidden-messages.js +1 -0
  49. package/dist/core/messages/en/guardian/watcher-hidden-messages.js.map +1 -1
  50. package/dist/core/messages/en/licenses/licenses-messages.d.ts +1 -0
  51. package/dist/core/messages/en/licenses/licenses-messages.d.ts.map +1 -1
  52. package/dist/core/messages/en/licenses/licenses-messages.js +1 -0
  53. package/dist/core/messages/en/licenses/licenses-messages.js.map +1 -1
  54. package/dist/core/messages/ja/cli/cli-bin-messages.d.ts +7 -0
  55. package/dist/core/messages/ja/cli/cli-bin-messages.d.ts.map +1 -1
  56. package/dist/core/messages/ja/cli/cli-bin-messages.js +7 -0
  57. package/dist/core/messages/ja/cli/cli-bin-messages.js.map +1 -1
  58. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts +1 -0
  59. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  60. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js +1 -0
  61. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js.map +1 -1
  62. package/dist/core/messages/ja/cli/cli-command-guardian-messages.d.ts +1 -0
  63. package/dist/core/messages/ja/cli/cli-command-guardian-messages.d.ts.map +1 -1
  64. package/dist/core/messages/ja/cli/cli-command-guardian-messages.js +2 -1
  65. package/dist/core/messages/ja/cli/cli-command-guardian-messages.js.map +1 -1
  66. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.d.ts +19 -0
  67. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  68. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.js +19 -0
  69. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.js.map +1 -1
  70. package/dist/core/messages/ja/cli/cli-command-prune-messages.d.ts +1 -0
  71. package/dist/core/messages/ja/cli/cli-command-prune-messages.d.ts.map +1 -1
  72. package/dist/core/messages/ja/cli/cli-command-prune-messages.js +1 -0
  73. package/dist/core/messages/ja/cli/cli-command-prune-messages.js.map +1 -1
  74. package/dist/core/messages/ja/cli/cli-command-reverter-messages.d.ts +6 -0
  75. package/dist/core/messages/ja/cli/cli-command-reverter-messages.d.ts.map +1 -1
  76. package/dist/core/messages/ja/cli/cli-command-reverter-messages.js +6 -0
  77. package/dist/core/messages/ja/cli/cli-command-reverter-messages.js.map +1 -1
  78. package/dist/core/messages/ja/guardian/guardian-messages.d.ts +3 -0
  79. package/dist/core/messages/ja/guardian/guardian-messages.d.ts.map +1 -1
  80. package/dist/core/messages/ja/guardian/guardian-messages.js +3 -0
  81. package/dist/core/messages/ja/guardian/guardian-messages.js.map +1 -1
  82. package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts +1 -0
  83. package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts.map +1 -1
  84. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js +1 -0
  85. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js.map +1 -1
  86. package/dist/core/messages/ja/licenses/licenses-messages.d.ts +1 -0
  87. package/dist/core/messages/ja/licenses/licenses-messages.d.ts.map +1 -1
  88. package/dist/core/messages/ja/licenses/licenses-messages.js +1 -0
  89. package/dist/core/messages/ja/licenses/licenses-messages.js.map +1 -1
  90. package/dist/core/messages/pt/cli/cli-bin-messages.d.ts +7 -0
  91. package/dist/core/messages/pt/cli/cli-bin-messages.d.ts.map +1 -1
  92. package/dist/core/messages/pt/cli/cli-bin-messages.js +7 -0
  93. package/dist/core/messages/pt/cli/cli-bin-messages.js.map +1 -1
  94. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts +1 -0
  95. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  96. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js +1 -0
  97. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js.map +1 -1
  98. package/dist/core/messages/pt/cli/cli-command-guardian-messages.d.ts +1 -0
  99. package/dist/core/messages/pt/cli/cli-command-guardian-messages.d.ts.map +1 -1
  100. package/dist/core/messages/pt/cli/cli-command-guardian-messages.js +2 -1
  101. package/dist/core/messages/pt/cli/cli-command-guardian-messages.js.map +1 -1
  102. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.d.ts +19 -0
  103. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  104. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.js +19 -0
  105. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.js.map +1 -1
  106. package/dist/core/messages/pt/cli/cli-command-prune-messages.d.ts +1 -0
  107. package/dist/core/messages/pt/cli/cli-command-prune-messages.d.ts.map +1 -1
  108. package/dist/core/messages/pt/cli/cli-command-prune-messages.js +1 -0
  109. package/dist/core/messages/pt/cli/cli-command-prune-messages.js.map +1 -1
  110. package/dist/core/messages/pt/cli/cli-command-reverter-messages.d.ts +6 -0
  111. package/dist/core/messages/pt/cli/cli-command-reverter-messages.d.ts.map +1 -1
  112. package/dist/core/messages/pt/cli/cli-command-reverter-messages.js +6 -0
  113. package/dist/core/messages/pt/cli/cli-command-reverter-messages.js.map +1 -1
  114. package/dist/core/messages/pt/guardian/guardian-messages.d.ts +3 -0
  115. package/dist/core/messages/pt/guardian/guardian-messages.d.ts.map +1 -1
  116. package/dist/core/messages/pt/guardian/guardian-messages.js +3 -0
  117. package/dist/core/messages/pt/guardian/guardian-messages.js.map +1 -1
  118. package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts +1 -0
  119. package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts.map +1 -1
  120. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js +1 -0
  121. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js.map +1 -1
  122. package/dist/core/messages/pt/licenses/licenses-messages.d.ts +1 -0
  123. package/dist/core/messages/pt/licenses/licenses-messages.d.ts.map +1 -1
  124. package/dist/core/messages/pt/licenses/licenses-messages.js +1 -0
  125. package/dist/core/messages/pt/licenses/licenses-messages.js.map +1 -1
  126. package/dist/core/messages/zh/cli/cli-bin-messages.d.ts +7 -0
  127. package/dist/core/messages/zh/cli/cli-bin-messages.d.ts.map +1 -1
  128. package/dist/core/messages/zh/cli/cli-bin-messages.js +7 -0
  129. package/dist/core/messages/zh/cli/cli-bin-messages.js.map +1 -1
  130. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts +1 -0
  131. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  132. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js +1 -0
  133. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js.map +1 -1
  134. package/dist/core/messages/zh/cli/cli-command-guardian-messages.d.ts +2 -1
  135. package/dist/core/messages/zh/cli/cli-command-guardian-messages.d.ts.map +1 -1
  136. package/dist/core/messages/zh/cli/cli-command-guardian-messages.js +2 -1
  137. package/dist/core/messages/zh/cli/cli-command-guardian-messages.js.map +1 -1
  138. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.d.ts +19 -0
  139. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  140. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.js +19 -0
  141. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.js.map +1 -1
  142. package/dist/core/messages/zh/cli/cli-command-prune-messages.d.ts +1 -0
  143. package/dist/core/messages/zh/cli/cli-command-prune-messages.d.ts.map +1 -1
  144. package/dist/core/messages/zh/cli/cli-command-prune-messages.js +1 -0
  145. package/dist/core/messages/zh/cli/cli-command-prune-messages.js.map +1 -1
  146. package/dist/core/messages/zh/cli/cli-command-reverter-messages.d.ts +6 -0
  147. package/dist/core/messages/zh/cli/cli-command-reverter-messages.d.ts.map +1 -1
  148. package/dist/core/messages/zh/cli/cli-command-reverter-messages.js +6 -0
  149. package/dist/core/messages/zh/cli/cli-command-reverter-messages.js.map +1 -1
  150. package/dist/core/messages/zh/guardian/guardian-messages.d.ts +3 -0
  151. package/dist/core/messages/zh/guardian/guardian-messages.d.ts.map +1 -1
  152. package/dist/core/messages/zh/guardian/guardian-messages.js +3 -0
  153. package/dist/core/messages/zh/guardian/guardian-messages.js.map +1 -1
  154. package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts +1 -0
  155. package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts.map +1 -1
  156. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js +1 -0
  157. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js.map +1 -1
  158. package/dist/core/messages/zh/licenses/licenses-messages.d.ts +1 -0
  159. package/dist/core/messages/zh/licenses/licenses-messages.d.ts.map +1 -1
  160. package/dist/core/messages/zh/licenses/licenses-messages.js +1 -0
  161. package/dist/core/messages/zh/licenses/licenses-messages.js.map +1 -1
  162. package/dist/guardian/records.d.ts.map +1 -1
  163. package/dist/guardian/records.js +3 -3
  164. package/dist/guardian/records.js.map +1 -1
  165. package/dist/guardian/sentinel.js +2 -2
  166. package/dist/guardian/sentinel.js.map +1 -1
  167. package/dist/guardian/watcher-hidden.js +1 -1
  168. package/dist/guardian/watcher-hidden.js.map +1 -1
  169. package/package.json +1 -2
@@ -206,7 +206,7 @@ export const detectorMarkdown = {
206
206
  },
207
207
  aplicar: async (src, relPath, _ast, fullCaminho) => {
208
208
  if (!fullCaminho) {
209
- log.aviso(`detector-markdown: fullPath não fornecido para ${relPath}`);
209
+ log.aviso(getMessages().LicensasMensagens.detectorMarkdownPath.replace('{arquivo}', relPath));
210
210
  return [];
211
211
  }
212
212
  const cfg = config.detectorMarkdown;
@@ -223,7 +223,7 @@ export const detectorMarkdown = {
223
223
  return converterParaOcorrencias(analise);
224
224
  }
225
225
  catch (error) {
226
- log.erro(`Erro ao analisar Markdown ${relPath}: ${error.message}`);
226
+ log.erro(getMessages().LicensasMensagens.erroAnalisarMarkdown(relPath, error.message));
227
227
  return [];
228
228
  }
229
229
  }
@@ -1 +1 @@
1
- {"version":3,"file":"detector-markdown.js","sourceRoot":"","sources":["../../../src/analysts/plugins/detector-markdown.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * @fileoverview Detector de problemas em arquivos Markdown\n *\n * Verifica compliance de licenças, proveniência e referências em documentação.\n * Migrado de: scripts/scan-markdown.mjs\n * Data: 2025-11-02\n *\n * Funcionalidades:\n * - Detecta licenças incompatíveis (GPL, AGPL, CC-BY, etc)\n * - Verifica presença de aviso de proveniência\n * - Identifica referências de risco (Stack Overflow, cessão de direitos)\n * - Whitelist configurável para documentos de política\n */\n\n\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { extrairSupressoes, isRegraSuprimida } from '@shared/helpers';\n\nimport type { Ocorrencia } from '@';\n\nimport type { MarkdownAnaliseArquivo, MarkdownDetectorOptions, MarkdownLicensePatterns, MarkdownProblema, MarkdownWhitelistConfig } from '../../types/analysts/markdown.js';\n\nconst {\n log\n} = getMessages();\n\n/**\n * Padrões de licenças e cessões problemáticas\n */\nconst LICENCA_PADROES: MarkdownLicensePatterns = {\n incompativeis: [/\\bGPL\\b/i, /\\bAGPL\\b/i, /\\bLGPL\\b/i, /Creative\\s+Commons/i, /\\bCC-BY\\b/i, /All\\s+rights\\s+reserved/i],\n cessaoDireitos: [/cess(?:ã|a)o\\s+de\\s+direitos/i, /transfer(?:ê|e)ncia\\s+de\\s+direitos/i],\n referenciasRisco: [/Stack\\s*Overflow/i, /(?:^|https?:\\/\\/|\\/\\/)(?:[^\\/\\s@]+\\.)?stackoverflow\\.com(?::\\d+)?(?:[\\/?#]|$)/i, /\\bassign\\b/i, /\\bcession\\b/i]\n};\n\n/**\n * Whitelist padrão de arquivos\n */\nconst PADRAO_LISTA_BRANCA: MarkdownWhitelistConfig = {\n paths: ['.github/copilot-instructions.md', 'docs/POLICY-PROVENIENCIA.md', 'docs/partials/AVISO-PROVENIENCIA.md'],\n patterns: ['**/reports/**', 'docs/history/**', 'tests/**', 'tmp*.md'],\n dirs: ['pre-public', 'preview-tutanus', '.abandonados', '.deprecados', 'reports']\n};\n\n/**\n * Cria regex combinado de todos os padrões de risco\n */\nfunction createRiskRegex(): RegExp {\n const allPadroes = [...LICENCA_PADROES.incompativeis, ...LICENCA_PADROES.cessaoDireitos, ...LICENCA_PADROES.referenciasRisco].map(raiz => raiz.source).join('|');\n return new RegExp(allPadroes, 'i');\n}\n\n/**\n * Verifica se arquivo tem aviso de proveniência\n */\nfunction hasProvenienciaHeader(content: string, headerLines = 30): boolean {\n const head = content.split(/\\r?\\n/).slice(0, headerLines).join('\\n');\n return /Proveni[eê]ncia\\s+e\\s+Autoria/i.test(head);\n}\n\n/**\n * Verifica se arquivo está na whitelist\n */\nfunction isWhitelisted(relPath: string, whitelist: MarkdownWhitelistConfig): boolean {\n const normalized = relPath.replace(/\\\\/g, '/');\n\n // Paths exatos\n if (whitelist.paths.some((caminho: string) => normalized === caminho || normalized.endsWith(`/${caminho}`))) {\n return true;\n }\n\n // Diretórios\n if (whitelist.dirs.some((dir: string) => normalized.startsWith(`${dir}/`))) {\n return true;\n }\n\n // Patterns (simplificado - sem glob completo)\n for (const pattern of whitelist.patterns) {\n if (pattern.includes('**')) {\n const parts = pattern.split('**');\n if (parts.every((part: string) => normalized.includes(part.replace(/\\*/g, '')))) {\n return true;\n }\n } else if (pattern.startsWith('*')) {\n if (normalized.endsWith(pattern.substring(1))) {\n return true;\n }\n } else if (pattern.includes('*')) {\n const [prefix, suffix] = pattern.split('*');\n if (normalized.startsWith(prefix) && normalized.endsWith(suffix)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Verifica se tem marcador de risco aprovado\n */\nfunction hasRiskReferenceMarker(content: string): boolean {\n return /<!--\\s*RISCO_REFERENCIA_OK\\s*-->/i.test(content);\n}\nfunction hasTutanusIgnoreMarker(content: string, key: string): boolean {\n // Suporta ambos os padrões:\n // <!-- tutanus-ignore: license-check -->\n // <!-- @tutanus-disable license-check -->\n const escaped = key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const oldPattern = new RegExp(`<!--\\\\s*tutanus-ignore\\\\s*:\\\\s*${escaped}\\\\s*-->`, 'i');\n const newPattern = new RegExp(`<!--\\\\s*@tutanus-disable\\\\s+${escaped}(?:\\\\s|-->|$)`, 'i');\n return oldPattern.test(content) || newPattern.test(content);\n}\nfunction mergeWhitelist(base: MarkdownWhitelistConfig, override: Partial<MarkdownWhitelistConfig> | undefined, mode: 'merge' | 'replace'): MarkdownWhitelistConfig {\n const overrideConfig = override || {};\n if (mode === 'replace') {\n return {\n paths: Array.isArray(overrideConfig.paths) ? overrideConfig.paths : [],\n patterns: Array.isArray(overrideConfig.patterns) ? overrideConfig.patterns : [],\n dirs: Array.isArray(overrideConfig.dirs) ? overrideConfig.dirs : []\n };\n }\n const uniq = (arr: string[]) => Array.from(new Set(arr.map(String)));\n const overridePaths = Array.isArray(overrideConfig.paths) ? overrideConfig.paths : [];\n const overridePatterns = Array.isArray(overrideConfig.patterns) ? overrideConfig.patterns : [];\n const overrideDirs = Array.isArray(overrideConfig.dirs) ? overrideConfig.dirs : [];\n return {\n paths: uniq([...(base.paths || []), ...overridePaths]),\n patterns: uniq([...(base.patterns || []), ...overridePatterns]),\n dirs: uniq([...(base.dirs || []), ...overrideDirs])\n };\n}\n\n/**\n * Verifica se o único termo de risco é do aviso de proveniência\n */\nfunction isBenignProvenienciaOnly(content: string): boolean {\n const rxCessao = /cess(?:ã|a)o\\s+de\\s+direitos/i;\n const rxOthers = new RegExp(['\\\\bGPL\\\\b', '\\\\bAGPL\\\\b', '\\\\bLGPL\\\\b', 'Creative\\\\s+Commons', '\\\\bCC-BY\\\\b', 'Stack\\\\s*Overflow', '(?:^|[^\\\\w.-])(?:[\\\\w-]+\\\\.)*stackoverflow\\\\.com(?:$|[^\\\\w.-])', 'All\\\\s+rights\\\\s+reserved', 'transfer(?:ê|e)ncia\\\\s+de\\\\s+direitos', '\\\\bassign\\\\b', '\\\\bcession\\\\b'].join('|'), 'i');\n const hasCessao = rxCessao.test(content);\n const hasOthers = rxOthers.test(content);\n const hasAviso = /Proveni[eê]ncia\\s+e\\s+Autoria/i.test(content);\n return hasAviso && hasCessao && !hasOthers;\n}\n\n/**\n * Analisa um arquivo Markdown\n */\nasync function analisarArquivoMarkdown(fullCaminho: string, relPath: string, content: string, options: MarkdownDetectorOptions): Promise<MarkdownAnaliseArquivo> {\n const whitelist = options.whitelist || PADRAO_LISTA_BRANCA;\n const problemas: MarkdownProblema[] = [];\n const whitelisted = isWhitelisted(relPath, whitelist);\n const temRiscoOk = hasRiskReferenceMarker(content);\n const temProveniencia = hasProvenienciaHeader(content, options.headerLines || 30);\n const ignoreLicencaCheck = hasTutanusIgnoreMarker(content, 'license-check');\n\n // Verificar proveniência\n if (options.checkProveniencia !== false && !temProveniencia && !whitelisted) {\n problemas.push({\n tipo: 'falta-proveniencia',\n descricao: 'Arquivo não possui aviso de Proveniência e Autoria nas primeiras linhas',\n severidade: 'alto',\n sugestao: 'Adicione o aviso usando scripts/add-disclaimer-md.js'\n });\n }\n\n // Verificar licenças e referências\n if (options.checkLicenses !== false || options.checkReferences !== false) {\n const riskRegex = createRiskRegex();\n const hasRisk = riskRegex.test(content);\n if (hasRisk && !isBenignProvenienciaOnly(content) && !whitelisted && !temRiscoOk) {\n // Identificar problemas específicos\n const lines = content.split(/\\r?\\n/);\n const supressoes = extrairSupressoes(content);\n for (let indice = 0; indice < lines.length; indice++) {\n const line = lines[indice];\n const linhaAtual = indice + 1;\n\n // Verificar licenças incompatíveis\n if (options.checkLicenses !== false && !ignoreLicencaCheck) {\n for (const pattern of LICENCA_PADROES.incompativeis) {\n if (pattern.test(line)) {\n const regraNome = `markdown-licenca-incompativel`;\n if (!isRegraSuprimida(regraNome, linhaAtual, supressoes) && !isRegraSuprimida('detector-markdown', linhaAtual, supressoes)) {\n problemas.push({\n tipo: 'licenca-incompativel',\n descricao: `Licença potencialmente incompatível: ${pattern.source}`,\n severidade: 'critico',\n linha: linhaAtual,\n trecho: line.trim().substring(0, 100),\n sugestao: 'Verifique compatibilidade com licença MIT do projeto'\n });\n }\n }\n }\n }\n\n // Verificar cessão de direitos\n if (options.checkReferences !== false) {\n for (const pattern of LICENCA_PADROES.cessaoDireitos) {\n if (pattern.test(line)) {\n const regraNome = `markdown-referencia-risco`;\n if (!isRegraSuprimida(regraNome, linhaAtual, supressoes) && !isRegraSuprimida('detector-markdown', linhaAtual, supressoes)) {\n problemas.push({\n tipo: 'referencia-risco',\n descricao: 'Referência a cessão de direitos detectada',\n severidade: 'alto',\n linha: linhaAtual,\n trecho: line.trim().substring(0, 100),\n sugestao: 'Verifique se não há implicações legais'\n });\n }\n }\n }\n\n // Verificar referências externas\n for (const pattern of LICENCA_PADROES.referenciasRisco) {\n if (pattern.test(line)) {\n const regraNome = `markdown-referencia-risco`;\n if (!isRegraSuprimida(regraNome, linhaAtual, supressoes) && !isRegraSuprimida('detector-markdown', linhaAtual, supressoes)) {\n problemas.push({\n tipo: 'referencia-risco',\n descricao: `Referência externa detectada: ${pattern.source}`,\n severidade: 'medio',\n linha: linhaAtual,\n trecho: line.trim().substring(0, 100),\n sugestao: 'Adicione marcador <!-- RISCO_REFERENCIA_OK --> se referência for válida'\n });\n }\n }\n }\n }\n }\n }\n }\n return {\n relPath,\n fullCaminho,\n problemas,\n temProveniencia,\n whitelisted,\n temRiscoOk\n };\n}\n\n/**\n * Converte análise para ocorrências do Tutanus\n */\nfunction converterParaOcorrencias(analise: MarkdownAnaliseArquivo): Ocorrencia[] {\n const ocorrencias: Ocorrencia[] = [];\n for (const problema of analise.problemas) {\n let nivel: 'erro' | 'aviso' | 'info';\n switch (problema.severidade) {\n case 'critico':\n case 'alto':\n nivel = 'erro';\n break;\n case 'medio':\n nivel = 'aviso';\n break;\n default:\n nivel = 'info';\n }\n ocorrencias.push({\n tipo: `markdown-${problema.tipo}`,\n nivel,\n mensagem: problema.descricao,\n relPath: analise.relPath,\n linha: problema.linha,\n contexto: problema.trecho,\n sugestao: problema.sugestao\n });\n }\n return ocorrencias;\n}\n\n/**\n * Detector de problemas em Markdown\n */\nexport const detectorMarkdown = {\n nome: 'detector-markdown',\n categoria: 'documentacao',\n descricao: 'Detecta problemas de compliance em arquivos Markdown',\n test: (relPath: string): boolean => {\n return relPath.toLowerCase().endsWith('.md');\n },\n aplicar: async (src: string, relPath: string, _ast: unknown, fullCaminho?: string): Promise<Ocorrencia[]> => {\n if (!fullCaminho) {\n log.aviso(`detector-markdown: fullPath não fornecido para ${relPath}`);\n return [];\n }\n const cfg = (config as unknown as {\n detectorMarkdown?: unknown;\n }).detectorMarkdown as {\n checkProveniencia?: boolean;\n checkLicenses?: boolean;\n checkReferences?: boolean;\n headerLines?: number;\n whitelist?: Partial<MarkdownWhitelistConfig>;\n whitelistMode?: 'merge' | 'replace';\n } | undefined;\n const whitelistMode: 'merge' | 'replace' = cfg?.whitelistMode === 'replace' || cfg?.whitelistMode === 'merge' ? cfg.whitelistMode : 'merge';\n const options: MarkdownDetectorOptions = {\n checkProveniencia: cfg?.checkProveniencia ?? true,\n checkLicenses: cfg?.checkLicenses ?? true,\n checkReferences: cfg?.checkReferences ?? true,\n headerLines: typeof cfg?.headerLines === 'number' ? cfg.headerLines : 30,\n whitelist: mergeWhitelist(PADRAO_LISTA_BRANCA, cfg?.whitelist, whitelistMode)\n };\n try {\n const analise = await analisarArquivoMarkdown(fullCaminho, relPath, src, options);\n return converterParaOcorrencias(analise);\n } catch (error) {\n log.erro(`Erro ao analisar Markdown ${relPath}: ${(error as Error).message}`);\n return [];\n }\n }\n};\n\n/**\n * Exporta função de análise standalone para uso em outros módulos\n */\nexport { analisarArquivoMarkdown };"]}
1
+ {"version":3,"file":"detector-markdown.js","sourceRoot":"","sources":["../../../src/analysts/plugins/detector-markdown.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * @fileoverview Detector de problemas em arquivos Markdown\n *\n * Verifica compliance de licenças, proveniência e referências em documentação.\n * Migrado de: scripts/scan-markdown.mjs\n * Data: 2025-11-02\n *\n * Funcionalidades:\n * - Detecta licenças incompatíveis (GPL, AGPL, CC-BY, etc)\n * - Verifica presença de aviso de proveniência\n * - Identifica referências de risco (Stack Overflow, cessão de direitos)\n * - Whitelist configurável para documentos de política\n */\n\n\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { extrairSupressoes, isRegraSuprimida } from '@shared/helpers';\n\nimport type { Ocorrencia } from '@';\n\nimport type { MarkdownAnaliseArquivo, MarkdownDetectorOptions, MarkdownLicensePatterns, MarkdownProblema, MarkdownWhitelistConfig } from '../../types/analysts/markdown.js';\n\nconst {\n log\n} = getMessages();\n\n/**\n * Padrões de licenças e cessões problemáticas\n */\nconst LICENCA_PADROES: MarkdownLicensePatterns = {\n incompativeis: [/\\bGPL\\b/i, /\\bAGPL\\b/i, /\\bLGPL\\b/i, /Creative\\s+Commons/i, /\\bCC-BY\\b/i, /All\\s+rights\\s+reserved/i],\n cessaoDireitos: [/cess(?:ã|a)o\\s+de\\s+direitos/i, /transfer(?:ê|e)ncia\\s+de\\s+direitos/i],\n referenciasRisco: [/Stack\\s*Overflow/i, /(?:^|https?:\\/\\/|\\/\\/)(?:[^\\/\\s@]+\\.)?stackoverflow\\.com(?::\\d+)?(?:[\\/?#]|$)/i, /\\bassign\\b/i, /\\bcession\\b/i]\n};\n\n/**\n * Whitelist padrão de arquivos\n */\nconst PADRAO_LISTA_BRANCA: MarkdownWhitelistConfig = {\n paths: ['.github/copilot-instructions.md', 'docs/POLICY-PROVENIENCIA.md', 'docs/partials/AVISO-PROVENIENCIA.md'],\n patterns: ['**/reports/**', 'docs/history/**', 'tests/**', 'tmp*.md'],\n dirs: ['pre-public', 'preview-tutanus', '.abandonados', '.deprecados', 'reports']\n};\n\n/**\n * Cria regex combinado de todos os padrões de risco\n */\nfunction createRiskRegex(): RegExp {\n const allPadroes = [...LICENCA_PADROES.incompativeis, ...LICENCA_PADROES.cessaoDireitos, ...LICENCA_PADROES.referenciasRisco].map(raiz => raiz.source).join('|');\n return new RegExp(allPadroes, 'i');\n}\n\n/**\n * Verifica se arquivo tem aviso de proveniência\n */\nfunction hasProvenienciaHeader(content: string, headerLines = 30): boolean {\n const head = content.split(/\\r?\\n/).slice(0, headerLines).join('\\n');\n return /Proveni[eê]ncia\\s+e\\s+Autoria/i.test(head);\n}\n\n/**\n * Verifica se arquivo está na whitelist\n */\nfunction isWhitelisted(relPath: string, whitelist: MarkdownWhitelistConfig): boolean {\n const normalized = relPath.replace(/\\\\/g, '/');\n\n // Paths exatos\n if (whitelist.paths.some((caminho: string) => normalized === caminho || normalized.endsWith(`/${caminho}`))) {\n return true;\n }\n\n // Diretórios\n if (whitelist.dirs.some((dir: string) => normalized.startsWith(`${dir}/`))) {\n return true;\n }\n\n // Patterns (simplificado - sem glob completo)\n for (const pattern of whitelist.patterns) {\n if (pattern.includes('**')) {\n const parts = pattern.split('**');\n if (parts.every((part: string) => normalized.includes(part.replace(/\\*/g, '')))) {\n return true;\n }\n } else if (pattern.startsWith('*')) {\n if (normalized.endsWith(pattern.substring(1))) {\n return true;\n }\n } else if (pattern.includes('*')) {\n const [prefix, suffix] = pattern.split('*');\n if (normalized.startsWith(prefix) && normalized.endsWith(suffix)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Verifica se tem marcador de risco aprovado\n */\nfunction hasRiskReferenceMarker(content: string): boolean {\n return /<!--\\s*RISCO_REFERENCIA_OK\\s*-->/i.test(content);\n}\nfunction hasTutanusIgnoreMarker(content: string, key: string): boolean {\n // Suporta ambos os padrões:\n // <!-- tutanus-ignore: license-check -->\n // <!-- @tutanus-disable license-check -->\n const escaped = key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const oldPattern = new RegExp(`<!--\\\\s*tutanus-ignore\\\\s*:\\\\s*${escaped}\\\\s*-->`, 'i');\n const newPattern = new RegExp(`<!--\\\\s*@tutanus-disable\\\\s+${escaped}(?:\\\\s|-->|$)`, 'i');\n return oldPattern.test(content) || newPattern.test(content);\n}\nfunction mergeWhitelist(base: MarkdownWhitelistConfig, override: Partial<MarkdownWhitelistConfig> | undefined, mode: 'merge' | 'replace'): MarkdownWhitelistConfig {\n const overrideConfig = override || {};\n if (mode === 'replace') {\n return {\n paths: Array.isArray(overrideConfig.paths) ? overrideConfig.paths : [],\n patterns: Array.isArray(overrideConfig.patterns) ? overrideConfig.patterns : [],\n dirs: Array.isArray(overrideConfig.dirs) ? overrideConfig.dirs : []\n };\n }\n const uniq = (arr: string[]) => Array.from(new Set(arr.map(String)));\n const overridePaths = Array.isArray(overrideConfig.paths) ? overrideConfig.paths : [];\n const overridePatterns = Array.isArray(overrideConfig.patterns) ? overrideConfig.patterns : [];\n const overrideDirs = Array.isArray(overrideConfig.dirs) ? overrideConfig.dirs : [];\n return {\n paths: uniq([...(base.paths || []), ...overridePaths]),\n patterns: uniq([...(base.patterns || []), ...overridePatterns]),\n dirs: uniq([...(base.dirs || []), ...overrideDirs])\n };\n}\n\n/**\n * Verifica se o único termo de risco é do aviso de proveniência\n */\nfunction isBenignProvenienciaOnly(content: string): boolean {\n const rxCessao = /cess(?:ã|a)o\\s+de\\s+direitos/i;\n const rxOthers = new RegExp(['\\\\bGPL\\\\b', '\\\\bAGPL\\\\b', '\\\\bLGPL\\\\b', 'Creative\\\\s+Commons', '\\\\bCC-BY\\\\b', 'Stack\\\\s*Overflow', '(?:^|[^\\\\w.-])(?:[\\\\w-]+\\\\.)*stackoverflow\\\\.com(?:$|[^\\\\w.-])', 'All\\\\s+rights\\\\s+reserved', 'transfer(?:ê|e)ncia\\\\s+de\\\\s+direitos', '\\\\bassign\\\\b', '\\\\bcession\\\\b'].join('|'), 'i');\n const hasCessao = rxCessao.test(content);\n const hasOthers = rxOthers.test(content);\n const hasAviso = /Proveni[eê]ncia\\s+e\\s+Autoria/i.test(content);\n return hasAviso && hasCessao && !hasOthers;\n}\n\n/**\n * Analisa um arquivo Markdown\n */\nasync function analisarArquivoMarkdown(fullCaminho: string, relPath: string, content: string, options: MarkdownDetectorOptions): Promise<MarkdownAnaliseArquivo> {\n const whitelist = options.whitelist || PADRAO_LISTA_BRANCA;\n const problemas: MarkdownProblema[] = [];\n const whitelisted = isWhitelisted(relPath, whitelist);\n const temRiscoOk = hasRiskReferenceMarker(content);\n const temProveniencia = hasProvenienciaHeader(content, options.headerLines || 30);\n const ignoreLicencaCheck = hasTutanusIgnoreMarker(content, 'license-check');\n\n // Verificar proveniência\n if (options.checkProveniencia !== false && !temProveniencia && !whitelisted) {\n problemas.push({\n tipo: 'falta-proveniencia',\n descricao: 'Arquivo não possui aviso de Proveniência e Autoria nas primeiras linhas',\n severidade: 'alto',\n sugestao: 'Adicione o aviso usando scripts/add-disclaimer-md.js'\n });\n }\n\n // Verificar licenças e referências\n if (options.checkLicenses !== false || options.checkReferences !== false) {\n const riskRegex = createRiskRegex();\n const hasRisk = riskRegex.test(content);\n if (hasRisk && !isBenignProvenienciaOnly(content) && !whitelisted && !temRiscoOk) {\n // Identificar problemas específicos\n const lines = content.split(/\\r?\\n/);\n const supressoes = extrairSupressoes(content);\n for (let indice = 0; indice < lines.length; indice++) {\n const line = lines[indice];\n const linhaAtual = indice + 1;\n\n // Verificar licenças incompatíveis\n if (options.checkLicenses !== false && !ignoreLicencaCheck) {\n for (const pattern of LICENCA_PADROES.incompativeis) {\n if (pattern.test(line)) {\n const regraNome = `markdown-licenca-incompativel`;\n if (!isRegraSuprimida(regraNome, linhaAtual, supressoes) && !isRegraSuprimida('detector-markdown', linhaAtual, supressoes)) {\n problemas.push({\n tipo: 'licenca-incompativel',\n descricao: `Licença potencialmente incompatível: ${pattern.source}`,\n severidade: 'critico',\n linha: linhaAtual,\n trecho: line.trim().substring(0, 100),\n sugestao: 'Verifique compatibilidade com licença MIT do projeto'\n });\n }\n }\n }\n }\n\n // Verificar cessão de direitos\n if (options.checkReferences !== false) {\n for (const pattern of LICENCA_PADROES.cessaoDireitos) {\n if (pattern.test(line)) {\n const regraNome = `markdown-referencia-risco`;\n if (!isRegraSuprimida(regraNome, linhaAtual, supressoes) && !isRegraSuprimida('detector-markdown', linhaAtual, supressoes)) {\n problemas.push({\n tipo: 'referencia-risco',\n descricao: 'Referência a cessão de direitos detectada',\n severidade: 'alto',\n linha: linhaAtual,\n trecho: line.trim().substring(0, 100),\n sugestao: 'Verifique se não há implicações legais'\n });\n }\n }\n }\n\n // Verificar referências externas\n for (const pattern of LICENCA_PADROES.referenciasRisco) {\n if (pattern.test(line)) {\n const regraNome = `markdown-referencia-risco`;\n if (!isRegraSuprimida(regraNome, linhaAtual, supressoes) && !isRegraSuprimida('detector-markdown', linhaAtual, supressoes)) {\n problemas.push({\n tipo: 'referencia-risco',\n descricao: `Referência externa detectada: ${pattern.source}`,\n severidade: 'medio',\n linha: linhaAtual,\n trecho: line.trim().substring(0, 100),\n sugestao: 'Adicione marcador <!-- RISCO_REFERENCIA_OK --> se referência for válida'\n });\n }\n }\n }\n }\n }\n }\n }\n return {\n relPath,\n fullCaminho,\n problemas,\n temProveniencia,\n whitelisted,\n temRiscoOk\n };\n}\n\n/**\n * Converte análise para ocorrências do Tutanus\n */\nfunction converterParaOcorrencias(analise: MarkdownAnaliseArquivo): Ocorrencia[] {\n const ocorrencias: Ocorrencia[] = [];\n for (const problema of analise.problemas) {\n let nivel: 'erro' | 'aviso' | 'info';\n switch (problema.severidade) {\n case 'critico':\n case 'alto':\n nivel = 'erro';\n break;\n case 'medio':\n nivel = 'aviso';\n break;\n default:\n nivel = 'info';\n }\n ocorrencias.push({\n tipo: `markdown-${problema.tipo}`,\n nivel,\n mensagem: problema.descricao,\n relPath: analise.relPath,\n linha: problema.linha,\n contexto: problema.trecho,\n sugestao: problema.sugestao\n });\n }\n return ocorrencias;\n}\n\n/**\n * Detector de problemas em Markdown\n */\nexport const detectorMarkdown = {\n nome: 'detector-markdown',\n categoria: 'documentacao',\n descricao: 'Detecta problemas de compliance em arquivos Markdown',\n test: (relPath: string): boolean => {\n return relPath.toLowerCase().endsWith('.md');\n },\n aplicar: async (src: string, relPath: string, _ast: unknown, fullCaminho?: string): Promise<Ocorrencia[]> => {\n if (!fullCaminho) {\n log.aviso(getMessages().LicensasMensagens.detectorMarkdownPath.replace('{arquivo}', relPath));\n return [];\n }\n const cfg = (config as unknown as {\n detectorMarkdown?: unknown;\n }).detectorMarkdown as {\n checkProveniencia?: boolean;\n checkLicenses?: boolean;\n checkReferences?: boolean;\n headerLines?: number;\n whitelist?: Partial<MarkdownWhitelistConfig>;\n whitelistMode?: 'merge' | 'replace';\n } | undefined;\n const whitelistMode: 'merge' | 'replace' = cfg?.whitelistMode === 'replace' || cfg?.whitelistMode === 'merge' ? cfg.whitelistMode : 'merge';\n const options: MarkdownDetectorOptions = {\n checkProveniencia: cfg?.checkProveniencia ?? true,\n checkLicenses: cfg?.checkLicenses ?? true,\n checkReferences: cfg?.checkReferences ?? true,\n headerLines: typeof cfg?.headerLines === 'number' ? cfg.headerLines : 30,\n whitelist: mergeWhitelist(PADRAO_LISTA_BRANCA, cfg?.whitelist, whitelistMode)\n };\n try {\n const analise = await analisarArquivoMarkdown(fullCaminho, relPath, src, options);\n return converterParaOcorrencias(analise);\n } catch (error) {\n log.erro(getMessages().LicensasMensagens.erroAnalisarMarkdown(relPath, (error as Error).message));\n return [];\n }\n }\n};\n\n/**\n * Exporta função de análise standalone para uso em outros módulos\n */\nexport { analisarArquivoMarkdown };"]}
@@ -33,7 +33,7 @@ async function registrarLoader() {
33
33
  }
34
34
  }
35
35
  catch (err) {
36
- log.debug(`Aviso: Não foi possível registrar o loader de aliases: ${err instanceof Error ? err.message : String(err)}`);
36
+ log.debug(CliBinMensagens.avisoLoaderAliases.replace('{erro}', err instanceof Error ? err.message : String(err)));
37
37
  }
38
38
  }
39
39
  async function getVersion() {
@@ -46,7 +46,7 @@ async function getVersion() {
46
46
  return typeof pkg.version === 'string' ? pkg.version : '0.0.0';
47
47
  }
48
48
  catch (err) {
49
- log.debug(`Erro ao obter versão em getVersion: ${err instanceof Error ? err.message : String(err)}`);
49
+ log.debug(CliBinMensagens.erroObterVersao.replace('{erro}', err instanceof Error ? err.message : String(err)));
50
50
  return '0.0.0';
51
51
  }
52
52
  }
@@ -100,7 +100,7 @@ async function carregarConfigProducao() {
100
100
  }
101
101
  }
102
102
  catch (err) {
103
- log.debug(`Aviso: Configurações de produção não carregadas: ${err instanceof Error ? err.message : String(err)}`);
103
+ log.debug(CliBinMensagens.avisoConfigProducaoNaoCarregada.replace('{erro}', err instanceof Error ? err.message : String(err)));
104
104
  }
105
105
  }
106
106
  function __tutanus_unhandledRejectionHandler(err) {
@@ -127,7 +127,7 @@ export async function mainCli() {
127
127
  memoria = await getDefaultMemory();
128
128
  }
129
129
  catch (err) {
130
- log.debug(`Erro ao carregar memória: ${err instanceof Error ? err.message : String(err)}`);
130
+ log.debug(CliBinMensagens.erroCarregarMemoria.replace('{erro}', err instanceof Error ? err.message : String(err)));
131
131
  }
132
132
  try {
133
133
  await carregarConfigProducao();
@@ -136,14 +136,14 @@ export async function mainCli() {
136
136
  await inicializarConfigDinamica();
137
137
  }
138
138
  catch (err) {
139
- log.debug(`Erro na inicialização dinâmica: ${err instanceof Error ? err.message : String(err)}`);
139
+ log.debug(CliBinMensagens.erroInicializacaoDinamica.replace('{erro}', err instanceof Error ? err.message : String(err)));
140
140
  }
141
141
  try {
142
142
  const { inicializarFormattersBuiltin } = await import('../core/formatters/index.js');
143
143
  inicializarFormattersBuiltin();
144
144
  }
145
145
  catch (err) {
146
- log.debug(`Erro ao inicializar formatadores: ${err instanceof Error ? err.message : String(err)}`);
146
+ log.debug(CliBinMensagens.erroInicializarFormatadores.replace('{erro}', err instanceof Error ? err.message : String(err)));
147
147
  }
148
148
  registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));
149
149
  program.addCommand(comandoPerf());
@@ -180,7 +180,7 @@ export async function mainCli() {
180
180
  });
181
181
  }
182
182
  catch (err) {
183
- log.debug(`Erro ao registrar histórico: ${err instanceof Error ? err.message : String(err)}`);
183
+ log.debug(CliBinMensagens.erroRegistrarHistorico.replace('{erro}', err instanceof Error ? err.message : String(err)));
184
184
  }
185
185
  program.exitOverride((err) => {
186
186
  const code = err?.code || '';
@@ -1 +1 @@
1
- {"version":3,"file":"cli-bootstrap.js","sourceRoot":"","sources":["../../src/bin/cli-bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-permissivo-object tipo-inseguro-unknown\n// Justificativa: Object.keys é chamada de API, não tipo. unknown em catch handlers é intencional.\nimport { realpathSync } from 'node:fs';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { registrarComandos } from '@cli';\nimport { comandoPerf } from '@cli/commands';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarConfigParcial, chalk, config, inicializarConfigDinamica } from '@core/config';\nimport { getMessages, ICONES_NIVEL } from '@core/messages';\nimport type { ConversationMemory } from '@shared';\nimport { getDefaultMemory } from '@shared';\nimport { lerArquivoTexto } from '@shared/persistence';\nimport type { CommanderError } from 'commander';\nimport { Command } from 'commander';\n\nimport type { ErrorLike } from '@';\nimport { extrairMensagemErro } from '@';\n\nconst {\n log,\n CliBinMensagens\n} = getMessages();\n\n// caminho do módulo (usado para localizar arquivos de configuração)\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction hasStack(err: unknown): err is { stack: string } {\n return typeof err === 'object' && err !== null && 'stack' in err;\n}\n\nfunction logErroStack(err: unknown): void {\n if (hasStack(err)) {\n console.error(err.stack);\n }\n}\n\n/**\n * Registra o loader ESM customizado para suporte a aliases em tempo de execução\n */\nasync function registrarLoader(): Promise<void> {\n try {\n const distRaiz = resolvePath(__dirname, '..');\n const loaderCaminho = resolvePath(distRaiz, 'node.loader.js');\n const loaderUrl = pathToFileURL(loaderCaminho).toString();\n\n // Tenta registrar o loader via API experimental da v20+\n const {\n register\n } = await import('node:module');\n if (typeof register === 'function') {\n register(loaderUrl, pathToFileURL('./'));\n }\n } catch (err) {\n // Falha silenciosa: o loader pode não estar disponível ou ser desnecessário se aliases estiverem resolvidos\n log.debug(`Aviso: Não foi possível registrar o loader de aliases: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n// Ler versão dinamicamente do package.json\nasync function getVersion(): Promise<string> {\n try {\n const packageCaminho = join(__dirname, '..', '..', 'package.json');\n const raw = await lerArquivoTexto(packageCaminho);\n if (!raw) return '0.0.0';\n const pkg: Record<string, unknown> = JSON.parse(raw);\n return typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n } catch (err) {\n log.debug(`Erro ao obter versão em getVersion: ${err instanceof Error ? err.message : String(err)}`);\n return '0.0.0';\n }\n}\n\n// Configuração principal do CLI\nconst program = new Command();\n\n// Função para aplicar flags globais\nasync function aplicarFlagsGlobais(opts: unknown) {\n if (typeof opts !== 'object' || opts === null) {\n return;\n }\n const flags = opts as Record<string, unknown>;\n try {\n const {\n sanitizarFlags\n } = await import('@shared/validation');\n sanitizarFlags(flags);\n } catch (erro) {\n const mensagemErro = erro instanceof Error ? erro.message : String(erro);\n console.error(chalk.red(CliBinMensagens.flagsInvalidas.replace('{erro}', mensagemErro)));\n sair(ExitCode.InvalidUsage);\n }\n config.REPORT_SILENCE_LOGS = Boolean(flags.silence);\n config.REPORT_EXPORT_ENABLED = Boolean(flags.export);\n config.REPORT_EXPORT_FULL = Boolean(flags.exportFull);\n const debugAtivo = Boolean(flags.debug) || process.env.TUTANUS_DEBUG === 'true';\n config.DEV_MODE = debugAtivo;\n config.SCAN_ONLY = Boolean(flags.scanOnly);\n config.VERBOSE = flags.silence ? false : Boolean(flags.verbose);\n const overrides: Record<string, unknown> = {};\n if (typeof flags.logEstruturado === 'boolean') overrides.LOG_ESTRUTURADO = flags.logEstruturado;\n if (typeof flags.incremental === 'boolean') overrides.ANALISE_INCREMENTAL_ENABLED = flags.incremental;\n if (typeof flags.metricas === 'boolean') overrides.ANALISE_METRICAS_ENABLED = flags.metricas;\n if (Object.keys(overrides).length) aplicarConfigParcial(overrides);\n}\n\nasync function carregarConfigProducao(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') return;\n try {\n const safeCfgCaminho = join(__dirname, '..', '..', 'tutanus.config.safe.json');\n const raw = await lerArquivoTexto(safeCfgCaminho);\n if (!raw) return;\n const safeCfg: Record<string, unknown> = JSON.parse(raw);\n const prod = safeCfg?.productionDefaults;\n if (prod && typeof prod === 'object') {\n for (const [chave, valor] of Object.entries(prod)) {\n if (process.env[chave] === undefined) process.env[chave] = String(valor);\n }\n }\n } catch (err) {\n log.debug(`Aviso: Configurações de produção não carregadas: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nfunction __tutanus_unhandledRejectionHandler(err: ErrorLike) {\n const MARCADOR = CliBinMensagens.unhandledRejection;\n const mensagem = extrairMensagemErro(err);\n console.error(MARCADOR, mensagem);\n if (!process.env.VITEST) {\n logErroStack(err);\n process.exit(1);\n }\n}\n\n// Execução do CLI\nexport async function mainCli(): Promise<void> {\n // 1. Tentar registrar loader para aliases dinâmicos\n await registrarLoader();\n\n // 2. Handlers de erro globais\n process.on('unhandledRejection', __tutanus_unhandledRejectionHandler);\n process.on('uncaughtException', (err: ErrorLike) => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(CliBinMensagens.excecaoNaoCapturada.replace('{mensagem}', mensagem)));\n logErroStack(err);\n if (!process.env.VITEST) sair(ExitCode.Critical);\n });\n\n // 3. Inicialização de ambiente e memória\n let memoria: ConversationMemory | undefined;\n try {\n memoria = await getDefaultMemory();\n } catch (err) {\n log.debug(`Erro ao carregar memória: ${err instanceof Error ? err.message : String(err)}`);\n }\n try {\n await carregarConfigProducao();\n const versionNumber = await getVersion();\n program.version(versionNumber);\n await inicializarConfigDinamica();\n } catch (err) {\n log.debug(`Erro na inicialização dinâmica: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Inicializa formatadores built-in\n try {\n const { inicializarFormattersBuiltin } = await import('@core/formatters');\n inicializarFormattersBuiltin();\n } catch (err) {\n log.debug(`Erro ao inicializar formatadores: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 4. Registro de Comandos\n registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));\n program.addCommand(comandoPerf());\n\n // 5. Flags de histórico\n const argv = process.argv.slice(2);\n if (argv.includes('--historico')) {\n if (memoria) {\n const resumo = memoria.getSummary();\n console.log(chalk.cyan(CliBinMensagens.resumoConversa.titulo));\n console.log(CliBinMensagens.resumoConversa.total.replace('{total}', String(resumo.totalMessages)));\n console.log(CliBinMensagens.resumoConversa.usuario.replace('{total}', String(resumo.userMessages)));\n console.log(CliBinMensagens.resumoConversa.tutanus.replace('{total}', String(resumo.assistantMessages)));\n if (resumo.firstMessage) console.log(CliBinMensagens.resumoConversa.primeira.replace('{mensagem}', resumo.firstMessage));\n if (resumo.lastMessage) console.log(CliBinMensagens.resumoConversa.ultima.replace('{mensagem}', resumo.lastMessage));\n console.log('');\n } else {\n console.log(chalk.yellow(CliBinMensagens.historicoIndisponivel));\n }\n return;\n }\n if (argv.includes('--limpar-historico')) {\n if (memoria) await memoria.clear();\n console.log(chalk.green(CliBinMensagens.historicoLimpo));\n return;\n }\n try {\n await memoria?.addMessage({\n role: 'user',\n content: `Execução CLI: ${argv.join(' ') || '(sem argumentos)'}`,\n timestamp: new Date().toISOString()\n });\n } catch (err) {\n log.debug(`Erro ao registrar histórico: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 6. Execução final\n program.exitOverride((err: CommanderError) => {\n const code = err?.code || '';\n const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';\n if (isUsoInvalido) {\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));\n sair(ExitCode.InvalidUsage);\n return;\n }\n throw err;\n });\n await program.parseAsync(process.argv);\n}\n\n// Inicialização automática se executado diretamente\nconst resolvedArgv1 = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : '';\nconst isMain = import.meta.url === resolvedArgv1 || process.argv[1] && (process.argv[1].endsWith('/bin/cli-bootstrap.js') || process.argv[1].endsWith('/bin/cli-bootstrap.ts'));\nif (isMain) {\n mainCli().catch(err => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${mensagem}`));\n logErroStack(err);\n if (!process.env.VITEST) process.exit(1);\n });\n}"]}
1
+ {"version":3,"file":"cli-bootstrap.js","sourceRoot":"","sources":["../../src/bin/cli-bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-permissivo-object tipo-inseguro-unknown\n// Justificativa: Object.keys é chamada de API, não tipo. unknown em catch handlers é intencional.\nimport { realpathSync } from 'node:fs';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { registrarComandos } from '@cli';\nimport { comandoPerf } from '@cli/commands';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarConfigParcial, chalk, config, inicializarConfigDinamica } from '@core/config';\nimport { getMessages, ICONES_NIVEL } from '@core/messages';\nimport type { ConversationMemory } from '@shared';\nimport { getDefaultMemory } from '@shared';\nimport { lerArquivoTexto } from '@shared/persistence';\nimport type { CommanderError } from 'commander';\nimport { Command } from 'commander';\n\nimport type { ErrorLike } from '@';\nimport { extrairMensagemErro } from '@';\n\nconst {\n log,\n CliBinMensagens\n} = getMessages();\n\n// caminho do módulo (usado para localizar arquivos de configuração)\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction hasStack(err: unknown): err is { stack: string } {\n return typeof err === 'object' && err !== null && 'stack' in err;\n}\n\nfunction logErroStack(err: unknown): void {\n if (hasStack(err)) {\n console.error(err.stack);\n }\n}\n\n/**\n * Registra o loader ESM customizado para suporte a aliases em tempo de execução\n */\nasync function registrarLoader(): Promise<void> {\n try {\n const distRaiz = resolvePath(__dirname, '..');\n const loaderCaminho = resolvePath(distRaiz, 'node.loader.js');\n const loaderUrl = pathToFileURL(loaderCaminho).toString();\n\n // Tenta registrar o loader via API experimental da v20+\n const {\n register\n } = await import('node:module');\n if (typeof register === 'function') {\n register(loaderUrl, pathToFileURL('./'));\n }\n } catch (err) {\n // Falha silenciosa: o loader pode não estar disponível ou ser desnecessário se aliases estiverem resolvidos\n log.debug(CliBinMensagens.avisoLoaderAliases.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n}\n\n// Ler versão dinamicamente do package.json\nasync function getVersion(): Promise<string> {\n try {\n const packageCaminho = join(__dirname, '..', '..', 'package.json');\n const raw = await lerArquivoTexto(packageCaminho);\n if (!raw) return '0.0.0';\n const pkg: Record<string, unknown> = JSON.parse(raw);\n return typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n } catch (err) {\n log.debug(CliBinMensagens.erroObterVersao.replace('{erro}', err instanceof Error ? err.message : String(err)));\n return '0.0.0';\n }\n}\n\n// Configuração principal do CLI\nconst program = new Command();\n\n// Função para aplicar flags globais\nasync function aplicarFlagsGlobais(opts: unknown) {\n if (typeof opts !== 'object' || opts === null) {\n return;\n }\n const flags = opts as Record<string, unknown>;\n try {\n const {\n sanitizarFlags\n } = await import('@shared/validation');\n sanitizarFlags(flags);\n } catch (erro) {\n const mensagemErro = erro instanceof Error ? erro.message : String(erro);\n console.error(chalk.red(CliBinMensagens.flagsInvalidas.replace('{erro}', mensagemErro)));\n sair(ExitCode.InvalidUsage);\n }\n config.REPORT_SILENCE_LOGS = Boolean(flags.silence);\n config.REPORT_EXPORT_ENABLED = Boolean(flags.export);\n config.REPORT_EXPORT_FULL = Boolean(flags.exportFull);\n const debugAtivo = Boolean(flags.debug) || process.env.TUTANUS_DEBUG === 'true';\n config.DEV_MODE = debugAtivo;\n config.SCAN_ONLY = Boolean(flags.scanOnly);\n config.VERBOSE = flags.silence ? false : Boolean(flags.verbose);\n const overrides: Record<string, unknown> = {};\n if (typeof flags.logEstruturado === 'boolean') overrides.LOG_ESTRUTURADO = flags.logEstruturado;\n if (typeof flags.incremental === 'boolean') overrides.ANALISE_INCREMENTAL_ENABLED = flags.incremental;\n if (typeof flags.metricas === 'boolean') overrides.ANALISE_METRICAS_ENABLED = flags.metricas;\n if (Object.keys(overrides).length) aplicarConfigParcial(overrides);\n}\n\nasync function carregarConfigProducao(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') return;\n try {\n const safeCfgCaminho = join(__dirname, '..', '..', 'tutanus.config.safe.json');\n const raw = await lerArquivoTexto(safeCfgCaminho);\n if (!raw) return;\n const safeCfg: Record<string, unknown> = JSON.parse(raw);\n const prod = safeCfg?.productionDefaults;\n if (prod && typeof prod === 'object') {\n for (const [chave, valor] of Object.entries(prod)) {\n if (process.env[chave] === undefined) process.env[chave] = String(valor);\n }\n }\n } catch (err) {\n log.debug(CliBinMensagens.avisoConfigProducaoNaoCarregada.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n}\n\nfunction __tutanus_unhandledRejectionHandler(err: ErrorLike) {\n const MARCADOR = CliBinMensagens.unhandledRejection;\n const mensagem = extrairMensagemErro(err);\n console.error(MARCADOR, mensagem);\n if (!process.env.VITEST) {\n logErroStack(err);\n process.exit(1);\n }\n}\n\n// Execução do CLI\nexport async function mainCli(): Promise<void> {\n // 1. Tentar registrar loader para aliases dinâmicos\n await registrarLoader();\n\n // 2. Handlers de erro globais\n process.on('unhandledRejection', __tutanus_unhandledRejectionHandler);\n process.on('uncaughtException', (err: ErrorLike) => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(CliBinMensagens.excecaoNaoCapturada.replace('{mensagem}', mensagem)));\n logErroStack(err);\n if (!process.env.VITEST) sair(ExitCode.Critical);\n });\n\n // 3. Inicialização de ambiente e memória\n let memoria: ConversationMemory | undefined;\n try {\n memoria = await getDefaultMemory();\n } catch (err) {\n log.debug(CliBinMensagens.erroCarregarMemoria.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n try {\n await carregarConfigProducao();\n const versionNumber = await getVersion();\n program.version(versionNumber);\n await inicializarConfigDinamica();\n } catch (err) {\n log.debug(CliBinMensagens.erroInicializacaoDinamica.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n\n // Inicializa formatadores built-in\n try {\n const { inicializarFormattersBuiltin } = await import('@core/formatters');\n inicializarFormattersBuiltin();\n } catch (err) {\n log.debug(CliBinMensagens.erroInicializarFormatadores.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n\n // 4. Registro de Comandos\n registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));\n program.addCommand(comandoPerf());\n\n // 5. Flags de histórico\n const argv = process.argv.slice(2);\n if (argv.includes('--historico')) {\n if (memoria) {\n const resumo = memoria.getSummary();\n console.log(chalk.cyan(CliBinMensagens.resumoConversa.titulo));\n console.log(CliBinMensagens.resumoConversa.total.replace('{total}', String(resumo.totalMessages)));\n console.log(CliBinMensagens.resumoConversa.usuario.replace('{total}', String(resumo.userMessages)));\n console.log(CliBinMensagens.resumoConversa.tutanus.replace('{total}', String(resumo.assistantMessages)));\n if (resumo.firstMessage) console.log(CliBinMensagens.resumoConversa.primeira.replace('{mensagem}', resumo.firstMessage));\n if (resumo.lastMessage) console.log(CliBinMensagens.resumoConversa.ultima.replace('{mensagem}', resumo.lastMessage));\n console.log('');\n } else {\n console.log(chalk.yellow(CliBinMensagens.historicoIndisponivel));\n }\n return;\n }\n if (argv.includes('--limpar-historico')) {\n if (memoria) await memoria.clear();\n console.log(chalk.green(CliBinMensagens.historicoLimpo));\n return;\n }\n try {\n await memoria?.addMessage({\n role: 'user',\n content: `Execução CLI: ${argv.join(' ') || '(sem argumentos)'}`,\n timestamp: new Date().toISOString()\n });\n } catch (err) {\n log.debug(CliBinMensagens.erroRegistrarHistorico.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n\n // 6. Execução final\n program.exitOverride((err: CommanderError) => {\n const code = err?.code || '';\n const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';\n if (isUsoInvalido) {\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));\n sair(ExitCode.InvalidUsage);\n return;\n }\n throw err;\n });\n await program.parseAsync(process.argv);\n}\n\n// Inicialização automática se executado diretamente\nconst resolvedArgv1 = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : '';\nconst isMain = import.meta.url === resolvedArgv1 || process.argv[1] && (process.argv[1].endsWith('/bin/cli-bootstrap.js') || process.argv[1].endsWith('/bin/cli-bootstrap.ts'));\nif (isMain) {\n mainCli().catch(err => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${mensagem}`));\n logErroStack(err);\n if (!process.env.VITEST) process.exit(1);\n });\n}"]}
package/dist/bin/index.js CHANGED
@@ -33,7 +33,7 @@ async function registrarLoader() {
33
33
  }
34
34
  }
35
35
  catch (err) {
36
- log.debug(`Aviso: Não foi possível registrar o loader de aliases: ${err instanceof Error ? err.message : String(err)}`);
36
+ log.debug(CliBinMensagens.avisoLoaderAliases.replace('{erro}', err instanceof Error ? err.message : String(err)));
37
37
  }
38
38
  }
39
39
  async function getVersion() {
@@ -46,7 +46,7 @@ async function getVersion() {
46
46
  return typeof pkg.version === 'string' ? pkg.version : '0.0.0';
47
47
  }
48
48
  catch (err) {
49
- log.debug(`Erro ao obter versão em getVersion: ${err instanceof Error ? err.message : String(err)}`);
49
+ log.debug(CliBinMensagens.erroObterVersao.replace('{erro}', err instanceof Error ? err.message : String(err)));
50
50
  return '0.0.0';
51
51
  }
52
52
  }
@@ -100,7 +100,7 @@ async function carregarConfigProducao() {
100
100
  }
101
101
  }
102
102
  catch (err) {
103
- log.debug(`Aviso: Configurações de produção não carregadas: ${err instanceof Error ? err.message : String(err)}`);
103
+ log.debug(CliBinMensagens.avisoConfigProducaoNaoCarregada.replace('{erro}', err instanceof Error ? err.message : String(err)));
104
104
  }
105
105
  }
106
106
  function __tutanus_unhandledRejectionHandler(err) {
@@ -127,7 +127,7 @@ export async function mainCli() {
127
127
  memoria = await getDefaultMemory();
128
128
  }
129
129
  catch (err) {
130
- log.debug(`Erro ao carregar memória: ${err instanceof Error ? err.message : String(err)}`);
130
+ log.debug(CliBinMensagens.erroCarregarMemoria.replace('{erro}', err instanceof Error ? err.message : String(err)));
131
131
  }
132
132
  try {
133
133
  await carregarConfigProducao();
@@ -136,14 +136,14 @@ export async function mainCli() {
136
136
  await inicializarConfigDinamica();
137
137
  }
138
138
  catch (err) {
139
- log.debug(`Erro na inicialização dinâmica: ${err instanceof Error ? err.message : String(err)}`);
139
+ log.debug(CliBinMensagens.erroInicializacaoDinamica.replace('{erro}', err instanceof Error ? err.message : String(err)));
140
140
  }
141
141
  try {
142
142
  const { inicializarFormattersBuiltin } = await import('../core/formatters/index.js');
143
143
  inicializarFormattersBuiltin();
144
144
  }
145
145
  catch (err) {
146
- log.debug(`Erro ao inicializar formatadores: ${err instanceof Error ? err.message : String(err)}`);
146
+ log.debug(CliBinMensagens.erroInicializarFormatadores.replace('{erro}', err instanceof Error ? err.message : String(err)));
147
147
  }
148
148
  registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));
149
149
  program.addCommand(comandoPerf());
@@ -180,7 +180,7 @@ export async function mainCli() {
180
180
  });
181
181
  }
182
182
  catch (err) {
183
- log.debug(`Erro ao registrar histórico: ${err instanceof Error ? err.message : String(err)}`);
183
+ log.debug(CliBinMensagens.erroRegistrarHistorico.replace('{erro}', err instanceof Error ? err.message : String(err)));
184
184
  }
185
185
  program.exitOverride((err) => {
186
186
  const code = err?.code || '';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-permissivo-object tipo-inseguro-unknown\n// Justificativa: Object.keys é chamada de API, não tipo. unknown em catch handlers é intencional.\nimport { realpathSync } from 'node:fs';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { registrarComandos } from '@cli';\nimport { comandoPerf } from '@cli/commands';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarConfigParcial, chalk, config, inicializarConfigDinamica } from '@core/config';\nimport { getMessages, ICONES_NIVEL } from '@core/messages';\nimport type { ConversationMemory } from '@shared';\nimport { getDefaultMemory } from '@shared';\nimport { lerArquivoTexto } from '@shared/persistence';\nimport type { CommanderError } from 'commander';\nimport { Command } from 'commander';\n\nimport type { ErrorLike } from '@';\nimport { extrairMensagemErro } from '@';\n\nconst {\n log,\n CliBinMensagens\n} = getMessages();\n\n// caminho do módulo (usado para localizar arquivos de configuração)\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction hasStack(err: unknown): err is { stack: string } {\n return typeof err === 'object' && err !== null && 'stack' in err;\n}\n\nfunction logErroStack(err: unknown): void {\n if (hasStack(err)) {\n console.error(err.stack);\n }\n}\n\n/**\n * Registra o loader ESM customizado para suporte a aliases em tempo de execução\n */\nasync function registrarLoader(): Promise<void> {\n try {\n const distRaiz = resolvePath(__dirname, '..');\n const loaderCaminho = resolvePath(distRaiz, 'node.loader.js');\n const loaderUrl = pathToFileURL(loaderCaminho).toString();\n\n // Tenta registrar o loader via API experimental da v20+\n const {\n register\n } = await import('node:module');\n if (typeof register === 'function') {\n register(loaderUrl, pathToFileURL('./'));\n }\n } catch (err) {\n // Falha silenciosa: o loader pode não estar disponível ou ser desnecessário se aliases estiverem resolvidos\n log.debug(`Aviso: Não foi possível registrar o loader de aliases: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n// Ler versão dinamicamente do package.json\nasync function getVersion(): Promise<string> {\n try {\n const packageCaminho = join(__dirname, '..', '..', 'package.json');\n const raw = await lerArquivoTexto(packageCaminho);\n if (!raw) return '0.0.0';\n const pkg: Record<string, unknown> = JSON.parse(raw);\n return typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n } catch (err) {\n log.debug(`Erro ao obter versão em getVersion: ${err instanceof Error ? err.message : String(err)}`);\n return '0.0.0';\n }\n}\n\n// Configuração principal do CLI\nconst program = new Command();\n\n// Função para aplicar flags globais\nasync function aplicarFlagsGlobais(opts: unknown) {\n if (typeof opts !== 'object' || opts === null) {\n return;\n }\n const flags = opts as Record<string, unknown>;\n try {\n const {\n sanitizarFlags\n } = await import('@shared/validation');\n sanitizarFlags(flags);\n } catch (erro) {\n const mensagemErro = erro instanceof Error ? erro.message : String(erro);\n console.error(chalk.red(CliBinMensagens.flagsInvalidas.replace('{erro}', mensagemErro)));\n sair(ExitCode.InvalidUsage);\n }\n config.REPORT_SILENCE_LOGS = Boolean(flags.silence);\n config.REPORT_EXPORT_ENABLED = Boolean(flags.export);\n config.REPORT_EXPORT_FULL = Boolean(flags.exportFull);\n const debugAtivo = Boolean(flags.debug) || process.env.TUTANUS_DEBUG === 'true';\n config.DEV_MODE = debugAtivo;\n config.SCAN_ONLY = Boolean(flags.scanOnly);\n config.VERBOSE = flags.silence ? false : Boolean(flags.verbose);\n const overrides: Record<string, unknown> = {};\n if (typeof flags.logEstruturado === 'boolean') overrides.LOG_ESTRUTURADO = flags.logEstruturado;\n if (typeof flags.incremental === 'boolean') overrides.ANALISE_INCREMENTAL_ENABLED = flags.incremental;\n if (typeof flags.metricas === 'boolean') overrides.ANALISE_METRICAS_ENABLED = flags.metricas;\n if (Object.keys(overrides).length) aplicarConfigParcial(overrides);\n}\n\nasync function carregarConfigProducao(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') return;\n try {\n const safeCfgCaminho = join(__dirname, '..', '..', 'tutanus.config.safe.json');\n const raw = await lerArquivoTexto(safeCfgCaminho);\n if (!raw) return;\n const safeCfg: Record<string, unknown> = JSON.parse(raw);\n const prod = safeCfg?.productionDefaults;\n if (prod && typeof prod === 'object') {\n for (const [chave, valor] of Object.entries(prod)) {\n if (process.env[chave] === undefined) process.env[chave] = String(valor);\n }\n }\n } catch (err) {\n log.debug(`Aviso: Configurações de produção não carregadas: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nfunction __tutanus_unhandledRejectionHandler(err: ErrorLike) {\n const MARCADOR = CliBinMensagens.unhandledRejection;\n const mensagem = extrairMensagemErro(err);\n console.error(MARCADOR, mensagem);\n if (!process.env.VITEST) {\n logErroStack(err);\n process.exit(1);\n }\n}\n\n// Execução do CLI\nexport async function mainCli(): Promise<void> {\n // 1. Tentar registrar loader para aliases dinâmicos\n await registrarLoader();\n\n // 2. Handlers de erro globais\n process.on('unhandledRejection', __tutanus_unhandledRejectionHandler);\n process.on('uncaughtException', (err: ErrorLike) => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(CliBinMensagens.excecaoNaoCapturada.replace('{mensagem}', mensagem)));\n logErroStack(err);\n if (!process.env.VITEST) sair(ExitCode.Critical);\n });\n\n // 3. Inicialização de ambiente e memória\n let memoria: ConversationMemory | undefined;\n try {\n memoria = await getDefaultMemory();\n } catch (err) {\n log.debug(`Erro ao carregar memória: ${err instanceof Error ? err.message : String(err)}`);\n }\n try {\n await carregarConfigProducao();\n const versionNumber = await getVersion();\n program.version(versionNumber);\n await inicializarConfigDinamica();\n } catch (err) {\n log.debug(`Erro na inicialização dinâmica: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Inicializa formatadores built-in\n try {\n const { inicializarFormattersBuiltin } = await import('@core/formatters');\n inicializarFormattersBuiltin();\n } catch (err) {\n log.debug(`Erro ao inicializar formatadores: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 4. Registro de Comandos\n registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));\n program.addCommand(comandoPerf());\n\n // 5. Flags de histórico\n const argv = process.argv.slice(2);\n if (argv.includes('--historico')) {\n if (memoria) {\n const resumo = memoria.getSummary();\n console.log(chalk.cyan(CliBinMensagens.resumoConversa.titulo));\n console.log(CliBinMensagens.resumoConversa.total.replace('{total}', String(resumo.totalMessages)));\n console.log(CliBinMensagens.resumoConversa.usuario.replace('{total}', String(resumo.userMessages)));\n console.log(CliBinMensagens.resumoConversa.tutanus.replace('{total}', String(resumo.assistantMessages)));\n if (resumo.firstMessage) console.log(CliBinMensagens.resumoConversa.primeira.replace('{mensagem}', resumo.firstMessage));\n if (resumo.lastMessage) console.log(CliBinMensagens.resumoConversa.ultima.replace('{mensagem}', resumo.lastMessage));\n console.log('');\n } else {\n console.log(chalk.yellow(CliBinMensagens.historicoIndisponivel));\n }\n return;\n }\n if (argv.includes('--limpar-historico')) {\n if (memoria) await memoria.clear();\n console.log(chalk.green(CliBinMensagens.historicoLimpo));\n return;\n }\n try {\n await memoria?.addMessage({\n role: 'user',\n content: `Execução CLI: ${argv.join(' ') || '(sem argumentos)'}`,\n timestamp: new Date().toISOString()\n });\n } catch (err) {\n log.debug(`Erro ao registrar histórico: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // 6. Execução final\n program.exitOverride((err: CommanderError) => {\n const code = err?.code || '';\n const isSaidaNormal = code === 'commander.help' || code === 'commander.helpDisplayed' || code === 'commander.version';\n if (isSaidaNormal) {\n sair(ExitCode.Ok);\n return;\n }\n const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';\n if (isUsoInvalido) {\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));\n sair(ExitCode.InvalidUsage);\n return;\n }\n throw err;\n });\n await program.parseAsync(process.argv);\n}\n\n// Inicialização automática se executado diretamente\nconst resolvedArgv1 = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : '';\nconst isMain = import.meta.url === resolvedArgv1 || process.argv[1] && (process.argv[1].endsWith('/bin/index.js') || process.argv[1].endsWith('/bin/index.ts'));\nif (isMain) {\n mainCli().catch(err => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${mensagem}`));\n logErroStack(err);\n if (!process.env.VITEST) process.exit(1);\n });\n}"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-permissivo-object tipo-inseguro-unknown\n// Justificativa: Object.keys é chamada de API, não tipo. unknown em catch handlers é intencional.\nimport { realpathSync } from 'node:fs';\nimport { dirname, join, resolve as resolvePath } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { registrarComandos } from '@cli';\nimport { comandoPerf } from '@cli/commands';\nimport { ExitCode, sair } from '@cli/helpers';\nimport { aplicarConfigParcial, chalk, config, inicializarConfigDinamica } from '@core/config';\nimport { getMessages, ICONES_NIVEL } from '@core/messages';\nimport type { ConversationMemory } from '@shared';\nimport { getDefaultMemory } from '@shared';\nimport { lerArquivoTexto } from '@shared/persistence';\nimport type { CommanderError } from 'commander';\nimport { Command } from 'commander';\n\nimport type { ErrorLike } from '@';\nimport { extrairMensagemErro } from '@';\n\nconst {\n log,\n CliBinMensagens\n} = getMessages();\n\n// caminho do módulo (usado para localizar arquivos de configuração)\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction hasStack(err: unknown): err is { stack: string } {\n return typeof err === 'object' && err !== null && 'stack' in err;\n}\n\nfunction logErroStack(err: unknown): void {\n if (hasStack(err)) {\n console.error(err.stack);\n }\n}\n\n/**\n * Registra o loader ESM customizado para suporte a aliases em tempo de execução\n */\nasync function registrarLoader(): Promise<void> {\n try {\n const distRaiz = resolvePath(__dirname, '..');\n const loaderCaminho = resolvePath(distRaiz, 'node.loader.js');\n const loaderUrl = pathToFileURL(loaderCaminho).toString();\n\n // Tenta registrar o loader via API experimental da v20+\n const {\n register\n } = await import('node:module');\n if (typeof register === 'function') {\n register(loaderUrl, pathToFileURL('./'));\n }\n } catch (err) {\n // Falha silenciosa: o loader pode não estar disponível ou ser desnecessário se aliases estiverem resolvidos\n log.debug(CliBinMensagens.avisoLoaderAliases.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n}\n\n// Ler versão dinamicamente do package.json\nasync function getVersion(): Promise<string> {\n try {\n const packageCaminho = join(__dirname, '..', '..', 'package.json');\n const raw = await lerArquivoTexto(packageCaminho);\n if (!raw) return '0.0.0';\n const pkg: Record<string, unknown> = JSON.parse(raw);\n return typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n } catch (err) {\n log.debug(CliBinMensagens.erroObterVersao.replace('{erro}', err instanceof Error ? err.message : String(err)));\n return '0.0.0';\n }\n}\n\n// Configuração principal do CLI\nconst program = new Command();\n\n// Função para aplicar flags globais\nasync function aplicarFlagsGlobais(opts: unknown) {\n if (typeof opts !== 'object' || opts === null) {\n return;\n }\n const flags = opts as Record<string, unknown>;\n try {\n const {\n sanitizarFlags\n } = await import('@shared/validation');\n sanitizarFlags(flags);\n } catch (erro) {\n const mensagemErro = erro instanceof Error ? erro.message : String(erro);\n console.error(chalk.red(CliBinMensagens.flagsInvalidas.replace('{erro}', mensagemErro)));\n sair(ExitCode.InvalidUsage);\n }\n config.REPORT_SILENCE_LOGS = Boolean(flags.silence);\n config.REPORT_EXPORT_ENABLED = Boolean(flags.export);\n config.REPORT_EXPORT_FULL = Boolean(flags.exportFull);\n const debugAtivo = Boolean(flags.debug) || process.env.TUTANUS_DEBUG === 'true';\n config.DEV_MODE = debugAtivo;\n config.SCAN_ONLY = Boolean(flags.scanOnly);\n config.VERBOSE = flags.silence ? false : Boolean(flags.verbose);\n const overrides: Record<string, unknown> = {};\n if (typeof flags.logEstruturado === 'boolean') overrides.LOG_ESTRUTURADO = flags.logEstruturado;\n if (typeof flags.incremental === 'boolean') overrides.ANALISE_INCREMENTAL_ENABLED = flags.incremental;\n if (typeof flags.metricas === 'boolean') overrides.ANALISE_METRICAS_ENABLED = flags.metricas;\n if (Object.keys(overrides).length) aplicarConfigParcial(overrides);\n}\n\nasync function carregarConfigProducao(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') return;\n try {\n const safeCfgCaminho = join(__dirname, '..', '..', 'tutanus.config.safe.json');\n const raw = await lerArquivoTexto(safeCfgCaminho);\n if (!raw) return;\n const safeCfg: Record<string, unknown> = JSON.parse(raw);\n const prod = safeCfg?.productionDefaults;\n if (prod && typeof prod === 'object') {\n for (const [chave, valor] of Object.entries(prod)) {\n if (process.env[chave] === undefined) process.env[chave] = String(valor);\n }\n }\n } catch (err) {\n log.debug(CliBinMensagens.avisoConfigProducaoNaoCarregada.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n}\n\nfunction __tutanus_unhandledRejectionHandler(err: ErrorLike) {\n const MARCADOR = CliBinMensagens.unhandledRejection;\n const mensagem = extrairMensagemErro(err);\n console.error(MARCADOR, mensagem);\n if (!process.env.VITEST) {\n logErroStack(err);\n process.exit(1);\n }\n}\n\n// Execução do CLI\nexport async function mainCli(): Promise<void> {\n // 1. Tentar registrar loader para aliases dinâmicos\n await registrarLoader();\n\n // 2. Handlers de erro globais\n process.on('unhandledRejection', __tutanus_unhandledRejectionHandler);\n process.on('uncaughtException', (err: ErrorLike) => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(CliBinMensagens.excecaoNaoCapturada.replace('{mensagem}', mensagem)));\n logErroStack(err);\n if (!process.env.VITEST) sair(ExitCode.Critical);\n });\n\n // 3. Inicialização de ambiente e memória\n let memoria: ConversationMemory | undefined;\n try {\n memoria = await getDefaultMemory();\n } catch (err) {\n log.debug(CliBinMensagens.erroCarregarMemoria.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n try {\n await carregarConfigProducao();\n const versionNumber = await getVersion();\n program.version(versionNumber);\n await inicializarConfigDinamica();\n } catch (err) {\n log.debug(CliBinMensagens.erroInicializacaoDinamica.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n\n // Inicializa formatadores built-in\n try {\n const { inicializarFormattersBuiltin } = await import('@core/formatters');\n inicializarFormattersBuiltin();\n } catch (err) {\n log.debug(CliBinMensagens.erroInicializarFormatadores.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n\n // 4. Registro de Comandos\n registrarComandos(program, ocorrencia => aplicarFlagsGlobais(ocorrencia));\n program.addCommand(comandoPerf());\n\n // 5. Flags de histórico\n const argv = process.argv.slice(2);\n if (argv.includes('--historico')) {\n if (memoria) {\n const resumo = memoria.getSummary();\n console.log(chalk.cyan(CliBinMensagens.resumoConversa.titulo));\n console.log(CliBinMensagens.resumoConversa.total.replace('{total}', String(resumo.totalMessages)));\n console.log(CliBinMensagens.resumoConversa.usuario.replace('{total}', String(resumo.userMessages)));\n console.log(CliBinMensagens.resumoConversa.tutanus.replace('{total}', String(resumo.assistantMessages)));\n if (resumo.firstMessage) console.log(CliBinMensagens.resumoConversa.primeira.replace('{mensagem}', resumo.firstMessage));\n if (resumo.lastMessage) console.log(CliBinMensagens.resumoConversa.ultima.replace('{mensagem}', resumo.lastMessage));\n console.log('');\n } else {\n console.log(chalk.yellow(CliBinMensagens.historicoIndisponivel));\n }\n return;\n }\n if (argv.includes('--limpar-historico')) {\n if (memoria) await memoria.clear();\n console.log(chalk.green(CliBinMensagens.historicoLimpo));\n return;\n }\n try {\n await memoria?.addMessage({\n role: 'user',\n content: `Execução CLI: ${argv.join(' ') || '(sem argumentos)'}`,\n timestamp: new Date().toISOString()\n });\n } catch (err) {\n log.debug(CliBinMensagens.erroRegistrarHistorico.replace('{erro}', err instanceof Error ? err.message : String(err)));\n }\n\n // 6. Execução final\n program.exitOverride((err: CommanderError) => {\n const code = err?.code || '';\n const isSaidaNormal = code === 'commander.help' || code === 'commander.helpDisplayed' || code === 'commander.version';\n if (isSaidaNormal) {\n sair(ExitCode.Ok);\n return;\n }\n const isUsoInvalido = code === 'commander.unknownCommand' || code === 'commander.unknownOption' || code === 'commander.missingArgument' || code === 'commander.optionMissingArgument' || code === 'commander.missingMandatoryOptionValue' || code === 'commander.invalidArgument';\n if (isUsoInvalido) {\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${err.message}`));\n sair(ExitCode.InvalidUsage);\n return;\n }\n throw err;\n });\n await program.parseAsync(process.argv);\n}\n\n// Inicialização automática se executado diretamente\nconst resolvedArgv1 = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : '';\nconst isMain = import.meta.url === resolvedArgv1 || process.argv[1] && (process.argv[1].endsWith('/bin/index.js') || process.argv[1].endsWith('/bin/index.ts'));\nif (isMain) {\n mainCli().catch(err => {\n const mensagem = extrairMensagemErro(err);\n console.error(chalk.red(`${ICONES_NIVEL.erro} ${mensagem}`));\n logErroStack(err);\n if (!process.env.VITEST) process.exit(1);\n });\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"command-github-actions.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/command-github-actions.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAUvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+FpC,wBAAgB,oBAAoB,IAAI,OAAO,CAyU9C"}
1
+ {"version":3,"file":"command-github-actions.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/command-github-actions.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAUvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+FpC,wBAAgB,oBAAoB,IAAI,OAAO,CAuU9C"}
@@ -354,9 +354,7 @@ export function comandoGithubActions() {
354
354
  const webhookSecret = process.env.GITHUB_WEBHOOK_SECRET;
355
355
  if (!appId || !privateKey || !webhookSecret) {
356
356
  log.erro(CliComandoGithubActionsMensagens.appSetupRequired);
357
- log.erro(' - GITHUB_APP_ID');
358
- log.erro(' - GITHUB_PRIVATE_KEY');
359
- log.erro(' - GITHUB_WEBHOOK_SECRET');
357
+ log.erro(CliComandoGithubActionsMensagens.appSetupEnvList);
360
358
  log.info(CliComandoGithubActionsMensagens.appDicaEnv);
361
359
  sair(ExitCode.Failure);
362
360
  return;