tutanus 0.13.3 → 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.
- package/dist/analysts/plugins/detector-markdown.js +2 -2
- package/dist/analysts/plugins/detector-markdown.js.map +1 -1
- package/dist/bin/cli-bootstrap.js +7 -7
- package/dist/bin/cli-bootstrap.js.map +1 -1
- package/dist/bin/index.js +7 -7
- package/dist/bin/index.js.map +1 -1
- package/dist/cli/commands/command-github-actions.d.ts.map +1 -1
- package/dist/cli/commands/command-github-actions.js +1 -3
- package/dist/cli/commands/command-github-actions.js.map +1 -1
- package/dist/cli/commands/command-guardian.js +1 -1
- package/dist/cli/commands/command-guardian.js.map +1 -1
- package/dist/cli/commands/command-marketplace.js +22 -22
- package/dist/cli/commands/command-marketplace.js.map +1 -1
- package/dist/cli/commands/command-prune.js +1 -1
- package/dist/cli/commands/command-prune.js.map +1 -1
- package/dist/cli/commands/command-reverter.js +6 -6
- package/dist/cli/commands/command-reverter.js.map +1 -1
- package/dist/core/messages/en/cli/cli-bin-messages.d.ts +7 -0
- package/dist/core/messages/en/cli/cli-bin-messages.d.ts.map +1 -1
- package/dist/core/messages/en/cli/cli-bin-messages.js +7 -0
- package/dist/core/messages/en/cli/cli-bin-messages.js.map +1 -1
- package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts +1 -0
- package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts.map +1 -1
- package/dist/core/messages/en/cli/cli-command-github-actions-messages.js +1 -0
- package/dist/core/messages/en/cli/cli-command-github-actions-messages.js.map +1 -1
- package/dist/core/messages/en/cli/cli-command-guardian-messages.d.ts +2 -1
- package/dist/core/messages/en/cli/cli-command-guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/en/cli/cli-command-guardian-messages.js +2 -1
- package/dist/core/messages/en/cli/cli-command-guardian-messages.js.map +1 -1
- package/dist/core/messages/en/cli/cli-command-marketplace-messages.d.ts +19 -0
- package/dist/core/messages/en/cli/cli-command-marketplace-messages.d.ts.map +1 -1
- package/dist/core/messages/en/cli/cli-command-marketplace-messages.js +19 -0
- package/dist/core/messages/en/cli/cli-command-marketplace-messages.js.map +1 -1
- package/dist/core/messages/en/cli/cli-command-prune-messages.d.ts +1 -0
- package/dist/core/messages/en/cli/cli-command-prune-messages.d.ts.map +1 -1
- package/dist/core/messages/en/cli/cli-command-prune-messages.js +1 -0
- package/dist/core/messages/en/cli/cli-command-prune-messages.js.map +1 -1
- package/dist/core/messages/en/cli/cli-command-reverter-messages.d.ts +6 -0
- package/dist/core/messages/en/cli/cli-command-reverter-messages.d.ts.map +1 -1
- package/dist/core/messages/en/cli/cli-command-reverter-messages.js +6 -0
- package/dist/core/messages/en/cli/cli-command-reverter-messages.js.map +1 -1
- package/dist/core/messages/en/guardian/guardian-messages.d.ts +3 -0
- package/dist/core/messages/en/guardian/guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/en/guardian/guardian-messages.js +3 -0
- package/dist/core/messages/en/guardian/guardian-messages.js.map +1 -1
- package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts +1 -0
- package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts.map +1 -1
- package/dist/core/messages/en/guardian/watcher-hidden-messages.js +1 -0
- package/dist/core/messages/en/guardian/watcher-hidden-messages.js.map +1 -1
- package/dist/core/messages/en/licenses/licenses-messages.d.ts +1 -0
- package/dist/core/messages/en/licenses/licenses-messages.d.ts.map +1 -1
- package/dist/core/messages/en/licenses/licenses-messages.js +1 -0
- package/dist/core/messages/en/licenses/licenses-messages.js.map +1 -1
- package/dist/core/messages/ja/cli/cli-bin-messages.d.ts +7 -0
- package/dist/core/messages/ja/cli/cli-bin-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/cli/cli-bin-messages.js +7 -0
- package/dist/core/messages/ja/cli/cli-bin-messages.js.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts +1 -0
- package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js +1 -0
- package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-guardian-messages.d.ts +1 -0
- package/dist/core/messages/ja/cli/cli-command-guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-guardian-messages.js +2 -1
- package/dist/core/messages/ja/cli/cli-command-guardian-messages.js.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-marketplace-messages.d.ts +19 -0
- package/dist/core/messages/ja/cli/cli-command-marketplace-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-marketplace-messages.js +19 -0
- package/dist/core/messages/ja/cli/cli-command-marketplace-messages.js.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-prune-messages.d.ts +1 -0
- package/dist/core/messages/ja/cli/cli-command-prune-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-prune-messages.js +1 -0
- package/dist/core/messages/ja/cli/cli-command-prune-messages.js.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-reverter-messages.d.ts +6 -0
- package/dist/core/messages/ja/cli/cli-command-reverter-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/cli/cli-command-reverter-messages.js +6 -0
- package/dist/core/messages/ja/cli/cli-command-reverter-messages.js.map +1 -1
- package/dist/core/messages/ja/guardian/guardian-messages.d.ts +3 -0
- package/dist/core/messages/ja/guardian/guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/guardian/guardian-messages.js +3 -0
- package/dist/core/messages/ja/guardian/guardian-messages.js.map +1 -1
- package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts +1 -0
- package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/guardian/watcher-hidden-messages.js +1 -0
- package/dist/core/messages/ja/guardian/watcher-hidden-messages.js.map +1 -1
- package/dist/core/messages/ja/licenses/licenses-messages.d.ts +1 -0
- package/dist/core/messages/ja/licenses/licenses-messages.d.ts.map +1 -1
- package/dist/core/messages/ja/licenses/licenses-messages.js +1 -0
- package/dist/core/messages/ja/licenses/licenses-messages.js.map +1 -1
- package/dist/core/messages/pt/cli/cli-bin-messages.d.ts +7 -0
- package/dist/core/messages/pt/cli/cli-bin-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/cli/cli-bin-messages.js +7 -0
- package/dist/core/messages/pt/cli/cli-bin-messages.js.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts +1 -0
- package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js +1 -0
- package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-guardian-messages.d.ts +1 -0
- package/dist/core/messages/pt/cli/cli-command-guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-guardian-messages.js +2 -1
- package/dist/core/messages/pt/cli/cli-command-guardian-messages.js.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-marketplace-messages.d.ts +19 -0
- package/dist/core/messages/pt/cli/cli-command-marketplace-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-marketplace-messages.js +19 -0
- package/dist/core/messages/pt/cli/cli-command-marketplace-messages.js.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-prune-messages.d.ts +1 -0
- package/dist/core/messages/pt/cli/cli-command-prune-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-prune-messages.js +1 -0
- package/dist/core/messages/pt/cli/cli-command-prune-messages.js.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-reverter-messages.d.ts +6 -0
- package/dist/core/messages/pt/cli/cli-command-reverter-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/cli/cli-command-reverter-messages.js +6 -0
- package/dist/core/messages/pt/cli/cli-command-reverter-messages.js.map +1 -1
- package/dist/core/messages/pt/guardian/guardian-messages.d.ts +3 -0
- package/dist/core/messages/pt/guardian/guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/guardian/guardian-messages.js +3 -0
- package/dist/core/messages/pt/guardian/guardian-messages.js.map +1 -1
- package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts +1 -0
- package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/guardian/watcher-hidden-messages.js +1 -0
- package/dist/core/messages/pt/guardian/watcher-hidden-messages.js.map +1 -1
- package/dist/core/messages/pt/licenses/licenses-messages.d.ts +1 -0
- package/dist/core/messages/pt/licenses/licenses-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/licenses/licenses-messages.js +1 -0
- package/dist/core/messages/pt/licenses/licenses-messages.js.map +1 -1
- package/dist/core/messages/zh/cli/cli-bin-messages.d.ts +7 -0
- package/dist/core/messages/zh/cli/cli-bin-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/cli/cli-bin-messages.js +7 -0
- package/dist/core/messages/zh/cli/cli-bin-messages.js.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts +1 -0
- package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js +1 -0
- package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-guardian-messages.d.ts +2 -1
- package/dist/core/messages/zh/cli/cli-command-guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-guardian-messages.js +2 -1
- package/dist/core/messages/zh/cli/cli-command-guardian-messages.js.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-marketplace-messages.d.ts +19 -0
- package/dist/core/messages/zh/cli/cli-command-marketplace-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-marketplace-messages.js +19 -0
- package/dist/core/messages/zh/cli/cli-command-marketplace-messages.js.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-prune-messages.d.ts +1 -0
- package/dist/core/messages/zh/cli/cli-command-prune-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-prune-messages.js +1 -0
- package/dist/core/messages/zh/cli/cli-command-prune-messages.js.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-reverter-messages.d.ts +6 -0
- package/dist/core/messages/zh/cli/cli-command-reverter-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/cli/cli-command-reverter-messages.js +6 -0
- package/dist/core/messages/zh/cli/cli-command-reverter-messages.js.map +1 -1
- package/dist/core/messages/zh/guardian/guardian-messages.d.ts +3 -0
- package/dist/core/messages/zh/guardian/guardian-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/guardian/guardian-messages.js +3 -0
- package/dist/core/messages/zh/guardian/guardian-messages.js.map +1 -1
- package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts +1 -0
- package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/guardian/watcher-hidden-messages.js +1 -0
- package/dist/core/messages/zh/guardian/watcher-hidden-messages.js.map +1 -1
- package/dist/core/messages/zh/licenses/licenses-messages.d.ts +1 -0
- package/dist/core/messages/zh/licenses/licenses-messages.d.ts.map +1 -1
- package/dist/core/messages/zh/licenses/licenses-messages.js +1 -0
- package/dist/core/messages/zh/licenses/licenses-messages.js.map +1 -1
- package/dist/guardian/records.d.ts.map +1 -1
- package/dist/guardian/records.js +3 -3
- package/dist/guardian/records.js.map +1 -1
- package/dist/guardian/sentinel.js +2 -2
- package/dist/guardian/sentinel.js.map +1 -1
- package/dist/guardian/watcher-hidden.js +1 -1
- package/dist/guardian/watcher-hidden.js.map +1 -1
- package/package.json +1 -1
|
@@ -206,7 +206,7 @@ export const detectorMarkdown = {
|
|
|
206
206
|
},
|
|
207
207
|
aplicar: async (src, relPath, _ast, fullCaminho) => {
|
|
208
208
|
if (!fullCaminho) {
|
|
209
|
-
log.aviso(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 || '';
|
package/dist/bin/index.js.map
CHANGED
|
@@ -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,
|
|
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(
|
|
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;
|