tutanus 0.12.0 → 0.12.2

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 (98) hide show
  1. package/README.md +1 -1
  2. package/dist/analysts/azure-pipelines/reports/generator-report-azure.d.ts.map +1 -1
  3. package/dist/analysts/azure-pipelines/reports/generator-report-azure.js.map +1 -1
  4. package/dist/analysts/circleci/reports/generator-report-circleci.d.ts.map +1 -1
  5. package/dist/analysts/circleci/reports/generator-report-circleci.js.map +1 -1
  6. package/dist/analysts/github-actions/reports/generator-report-github-actions.d.ts.map +1 -1
  7. package/dist/analysts/github-actions/reports/generator-report-github-actions.js +1 -1
  8. package/dist/analysts/github-actions/reports/generator-report-github-actions.js.map +1 -1
  9. package/dist/analysts/gitlab-ci/reports/generator-report-gitlab-ci.d.ts.map +1 -1
  10. package/dist/analysts/gitlab-ci/reports/generator-report-gitlab-ci.js.map +1 -1
  11. package/dist/analysts/jenkins/reports/generator-report-jenkins.d.ts.map +1 -1
  12. package/dist/analysts/jenkins/reports/generator-report-jenkins.js.map +1 -1
  13. package/dist/app/github/dashboard/routes.js +1 -1
  14. package/dist/app/github/dashboard/routes.js.map +1 -1
  15. package/dist/app/github/push-analysis/push-report.d.ts.map +1 -1
  16. package/dist/app/github/push-analysis/push-report.js.map +1 -1
  17. package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.d.ts +1 -1
  18. package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.d.ts.map +1 -1
  19. package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.js +1 -1
  20. package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.js.map +1 -1
  21. package/dist/guardian/gpg.js +1 -1
  22. package/dist/guardian/gpg.js.map +1 -1
  23. package/dist/shared/memory.d.ts +1 -1
  24. package/dist/shared/memory.d.ts.map +1 -1
  25. package/dist/shared/memory.js.map +1 -1
  26. package/dist/types/index.d.ts +2 -2
  27. package/dist/types/index.d.ts.map +1 -1
  28. package/dist/types/index.js.map +1 -1
  29. package/dist/types/reports/fragmentation.d.ts +2 -0
  30. package/dist/types/reports/fragmentation.d.ts.map +1 -1
  31. package/dist/types/reports/fragmentation.js.map +1 -1
  32. package/package.json +57 -57
  33. package/out/404/index.html +0 -1
  34. package/out/404.html +0 -1
  35. package/out/__next.__PAGE__.txt +0 -9
  36. package/out/__next._full.txt +0 -18
  37. package/out/__next._head.txt +0 -5
  38. package/out/__next._index.txt +0 -6
  39. package/out/__next._tree.txt +0 -3
  40. package/out/_next/static/Dy2DC2TpDR2_OQeYOGFyo/_buildManifest.js +0 -11
  41. package/out/_next/static/Dy2DC2TpDR2_OQeYOGFyo/_clientMiddlewareManifest.js +0 -1
  42. package/out/_next/static/Dy2DC2TpDR2_OQeYOGFyo/_ssgManifest.js +0 -1
  43. package/out/_next/static/chunks/01xlw8hd842-c.js +0 -1
  44. package/out/_next/static/chunks/03~yq9q893hmn.js +0 -1
  45. package/out/_next/static/chunks/07lhk_q6pmm3r.js +0 -1
  46. package/out/_next/static/chunks/0bt5g~o.csanc.js +0 -2
  47. package/out/_next/static/chunks/0d3shmwh5_nmn.js +0 -1
  48. package/out/_next/static/chunks/0dgq26a5_oy.a.js +0 -4
  49. package/out/_next/static/chunks/0ht900cau6_ur.js +0 -31
  50. package/out/_next/static/chunks/0ka051yepewro.js +0 -1
  51. package/out/_next/static/chunks/0oxf3p2ntxm1..js +0 -11
  52. package/out/_next/static/chunks/0ut5u8b4o16.c.js +0 -1
  53. package/out/_next/static/chunks/14jxvso77~-n_.css +0 -1
  54. package/out/_next/static/chunks/turbopack-0lfyi3tcd5~9z.js +0 -1
  55. package/out/_next/static/media/icon-1.002u9bkvzfbrc.png +0 -0
  56. package/out/_not-found/__next._full.txt +0 -16
  57. package/out/_not-found/__next._head.txt +0 -5
  58. package/out/_not-found/__next._index.txt +0 -6
  59. package/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
  60. package/out/_not-found/__next._not-found.txt +0 -5
  61. package/out/_not-found/__next._tree.txt +0 -3
  62. package/out/_not-found/index.html +0 -1
  63. package/out/_not-found/index.txt +0 -16
  64. package/out/changelog/__next._full.txt +0 -573
  65. package/out/changelog/__next._head.txt +0 -5
  66. package/out/changelog/__next._index.txt +0 -6
  67. package/out/changelog/__next._tree.txt +0 -4
  68. package/out/changelog/__next.changelog.__PAGE__.txt +0 -560
  69. package/out/changelog/__next.changelog.txt +0 -5
  70. package/out/changelog/index.html +0 -550
  71. package/out/changelog/index.txt +0 -573
  72. package/out/github/dashboard/__next._full.txt +0 -20
  73. package/out/github/dashboard/__next._head.txt +0 -5
  74. package/out/github/dashboard/__next._index.txt +0 -6
  75. package/out/github/dashboard/__next._tree.txt +0 -3
  76. package/out/github/dashboard/__next.github.dashboard.__PAGE__.txt +0 -9
  77. package/out/github/dashboard/__next.github.dashboard.txt +0 -4
  78. package/out/github/dashboard/__next.github.txt +0 -5
  79. package/out/github/dashboard/index.html +0 -1
  80. package/out/github/dashboard/index.txt +0 -20
  81. package/out/index.html +0 -1
  82. package/out/index.txt +0 -18
  83. package/out/privacy-policy/__next._full.txt +0 -38
  84. package/out/privacy-policy/__next._head.txt +0 -5
  85. package/out/privacy-policy/__next._index.txt +0 -6
  86. package/out/privacy-policy/__next._tree.txt +0 -4
  87. package/out/privacy-policy/__next.privacy-policy.__PAGE__.txt +0 -23
  88. package/out/privacy-policy/__next.privacy-policy.txt +0 -5
  89. package/out/privacy-policy/index.html +0 -1
  90. package/out/privacy-policy/index.txt +0 -38
  91. package/out/terms-of-use/__next._full.txt +0 -37
  92. package/out/terms-of-use/__next._head.txt +0 -5
  93. package/out/terms-of-use/__next._index.txt +0 -6
  94. package/out/terms-of-use/__next._tree.txt +0 -4
  95. package/out/terms-of-use/__next.terms-of-use.__PAGE__.txt +0 -18
  96. package/out/terms-of-use/__next.terms-of-use.txt +0 -5
  97. package/out/terms-of-use/index.html +0 -1
  98. package/out/terms-of-use/index.txt +0 -37
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../src/app/github/dashboard/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { messages } from '@core/messages';\nimport type { App } from '@octokit/app';\nimport { type Request, type Response, Router } from 'express';\n\nconst { GithubDashboardMensagens } = messages;\n\nimport { listarConfigsInstalacao, obterConfigInstalacao, salvarConfigInstalacao } from '../app/installation-store.js';\nimport { buildSetupUrl, createSetupRouter } from '../app/setup-routes.js';\nimport { analisarWorkflows,buscarWorkflows } from '../app/webhook-handler.js';\nimport { criarJob, iniciarAnaliseCompleta, iniciarAutoFix, listarJobs, obterJob } from '../jobs/index.js';\nimport { statsStore } from './stats-store.js';\n\nconst HTTP_BAD_REQUEST = 400;\nconst HTTP_NOT_FOUND = 404;\nconst DEFAULT_SCORE = 100;\n\nexport function createDashboardRouter(app: App): Router {\n const router = Router();\n\n router.use(createSetupRouter(app));\n\n router.get('/app-info', (req: Request, res: Response) => {\n const slug = process.env.GITHUB_APP_SLUG || 'tutanus-analyzer';\n res.json({\n slug,\n installUrl: `https://github.com/apps/${slug}/installations/new`,\n appUrl: `https://github.com/apps/${slug}`,\n setupUrl: buildSetupUrl(req),\n redirectAfterInstall: GithubDashboardMensagens.redirectAfterInstall\n });\n });\n\n router.get('/instalacoes/config', (_req: Request, res: Response) => {\n res.json({ instalacoes: listarConfigsInstalacao() });\n });\n\n router.get('/instalacoes/:id/config', (req: Request, res: Response) => {\n const id = parseInt(req.params.id as string, 10);\n if (Number.isNaN(id)) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.installationIdInvalido });\n return;\n }\n res.json(obterConfigInstalacao(id));\n });\n\n router.patch('/instalacoes/:id/config', (req: Request, res: Response) => {\n const id = parseInt(req.params.id as string, 10);\n if (Number.isNaN(id)) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.installationIdInvalido });\n return;\n }\n const body = req.body as Partial<{\n pushAnalysisEnabled: boolean;\n pullRequestAnalysisEnabled: boolean;\n fast: boolean;\n incrementalOnPush: boolean;\n }>;\n res.json(salvarConfigInstalacao({ installationId: id, ...body }));\n });\n\n router.get('/stats', (_req: Request, res: Response) => {\n res.json(statsStore.getStats());\n });\n\n router.get('/health', (_req: Request, res: Response) => {\n res.json(statsStore.getHealth());\n });\n\n router.delete('/stats', (_req: Request, res: Response) => {\n statsStore.reset();\n res.json({ sucesso: true, mensagem: GithubDashboardMensagens.statsZeradas });\n });\n\n router.get('/acoes/instalacoes', async (_req: Request, res: Response) => {\n try {\n const { data: installations } = await app.octokit.request('GET /app/installations', {\n per_page: 100\n });\n res.json(installations.map(inst => ({\n id: inst.id,\n account: inst.account ? { login: inst.account.login, avatar_url: inst.account.avatar_url } : null,\n target_type: inst.target_type,\n repository_selection: inst.repository_selection,\n created_at: inst.created_at,\n updated_at: inst.updated_at\n })));\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/instalacoes/:id/repos', async (req: Request, res: Response) => {\n try {\n const installationId = parseInt(req.params.id as string, 10);\n const octokit = await app.getInstallationOctokit(installationId);\n const { data } = await octokit.request('GET /installation/repositories', {\n per_page: 100\n });\n res.json(data.repositories.map(repo => ({\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: repo.owner?.login,\n private: repo.private,\n default_branch: repo.default_branch,\n updated_at: repo.updated_at\n })));\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.post('/acoes/analisar', async (req: Request, res: Response) => {\n try {\n const { owner, repo, installationId, ref } = req.body as {\n owner?: string;\n repo?: string;\n installationId?: number;\n ref?: string;\n };\n\n if (!owner || !repo || !installationId) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.paramsObrigatorios });\n return;\n }\n\n const octokit = await app.getInstallationOctokit(installationId);\n const branchRef = ref || 'HEAD';\n\n const workflows = await buscarWorkflows(octokit, owner, repo, branchRef);\n\n if (workflows.length === 0) {\n res.json({\n sucesso: true,\n scoreGeral: DEFAULT_SCORE,\n workflows: [],\n ocorrencias: [],\n mensagem: GithubDashboardMensagens.nenhumWorkflowEncontrado\n });\n return;\n }\n\n const analysis = await analisarWorkflows(octokit, owner, repo, branchRef, workflows);\n\n const repoName = `${owner}/${repo}`;\n statsStore.recordAnalysis({\n repository: repoName,\n event: 'on_demand',\n score: analysis.scoreGeral,\n workflowsCount: analysis.workflowsInfo.length,\n occurrencesCount: analysis.ocorrencias.length\n });\n\n res.json({\n sucesso: true,\n scoreGeral: analysis.scoreGeral,\n workflows: analysis.workflowsInfo,\n ocorrencias: analysis.ocorrencias.slice(0, 50),\n totalOcorrencias: analysis.ocorrencias.length\n });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/resultados', (_req: Request, res: Response) => {\n const stats = statsStore.getStats();\n res.json({\n totalAnalyses: stats.totalAnalyses,\n recentAnalyses: stats.recentAnalyses\n });\n });\n\n router.post('/acoes/analisar-completo', (req: Request, res: Response) => {\n try {\n const { owner, repo, installationId, ref, fast, analistas, autoFix, autoFixMode } = req.body as {\n owner?: string;\n repo?: string;\n installationId?: number;\n ref?: string;\n fast?: boolean;\n analistas?: string[];\n autoFix?: boolean;\n autoFixMode?: 'conservative' | 'balanced';\n };\n\n if (!owner || !repo || !installationId) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.paramsObrigatorios });\n return;\n }\n\n const branchRef = ref || 'HEAD';\n const jobOptions = { fast: fast ?? false, analistas, autoFix: autoFix ?? false, autoFixMode };\n\n const jobId = criarJob(owner, repo, installationId, branchRef, jobOptions);\n const job = obterJob(jobId);\n\n if (!job) {\n res.status(500).json({ erro: messages.GithubDashboardMensagens.erroCriarJob });\n return;\n }\n\n if (autoFix) {\n void iniciarAutoFix(app, jobId, job);\n } else {\n void iniciarAnaliseCompleta(app, jobId, job);\n }\n\n res.status(202).json({\n sucesso: true,\n dados: {\n jobId,\n status: 'pendente',\n mensagem: GithubDashboardMensagens.jobEnfileirado(jobId)\n }\n });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/analisar-completo', (_req: Request, res: Response) => {\n try {\n const { owner, repo } = _req.query as { owner?: string; repo?: string; };\n const filtro = owner && repo ? { owner, repo } : undefined;\n const jobs = listarJobs(filtro);\n res.json({ sucesso: true, dados: { total: jobs.length, jobs } });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/analisar-completo/:jobId', (req: Request, res: Response) => {\n try {\n const job = obterJob(req.params.jobId as string);\n if (!job) {\n res.status(HTTP_NOT_FOUND).json({ erro: GithubDashboardMensagens.jobNaoEncontrado(String(req.params.jobId)) });\n return;\n }\n res.json({ sucesso: true, dados: job });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n return router;\n}\n"]}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../src/app/github/dashboard/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { messages } from '@core/messages';\nimport type { App } from '@octokit/app';\nimport { type Request, type Response, Router } from 'express';\n\nimport { listarConfigsInstalacao, obterConfigInstalacao, salvarConfigInstalacao } from '../app/installation-store.js';\nimport { buildSetupUrl, createSetupRouter } from '../app/setup-routes.js';\nimport { analisarWorkflows,buscarWorkflows } from '../app/webhook-handler.js';\nimport { criarJob, iniciarAnaliseCompleta, iniciarAutoFix, listarJobs, obterJob } from '../jobs/index.js';\nimport { statsStore } from './stats-store.js';\n\nconst { GithubDashboardMensagens } = messages;\n\nconst HTTP_BAD_REQUEST = 400;\nconst HTTP_NOT_FOUND = 404;\nconst DEFAULT_SCORE = 100;\n\nexport function createDashboardRouter(app: App): Router {\n const router = Router();\n\n router.use(createSetupRouter(app));\n\n router.get('/app-info', (req: Request, res: Response) => {\n const slug = process.env.GITHUB_APP_SLUG || 'tutanus-analyzer';\n res.json({\n slug,\n installUrl: `https://github.com/apps/${slug}/installations/new`,\n appUrl: `https://github.com/apps/${slug}`,\n setupUrl: buildSetupUrl(req),\n redirectAfterInstall: GithubDashboardMensagens.redirectAfterInstall\n });\n });\n\n router.get('/instalacoes/config', (_req: Request, res: Response) => {\n res.json({ instalacoes: listarConfigsInstalacao() });\n });\n\n router.get('/instalacoes/:id/config', (req: Request, res: Response) => {\n const id = parseInt(req.params.id as string, 10);\n if (Number.isNaN(id)) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.installationIdInvalido });\n return;\n }\n res.json(obterConfigInstalacao(id));\n });\n\n router.patch('/instalacoes/:id/config', (req: Request, res: Response) => {\n const id = parseInt(req.params.id as string, 10);\n if (Number.isNaN(id)) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.installationIdInvalido });\n return;\n }\n const body = req.body as Partial<{\n pushAnalysisEnabled: boolean;\n pullRequestAnalysisEnabled: boolean;\n fast: boolean;\n incrementalOnPush: boolean;\n }>;\n res.json(salvarConfigInstalacao({ installationId: id, ...body }));\n });\n\n router.get('/stats', (_req: Request, res: Response) => {\n res.json(statsStore.getStats());\n });\n\n router.get('/health', (_req: Request, res: Response) => {\n res.json(statsStore.getHealth());\n });\n\n router.delete('/stats', (_req: Request, res: Response) => {\n statsStore.reset();\n res.json({ sucesso: true, mensagem: GithubDashboardMensagens.statsZeradas });\n });\n\n router.get('/acoes/instalacoes', async (_req: Request, res: Response) => {\n try {\n const { data: installations } = await app.octokit.request('GET /app/installations', {\n per_page: 100\n });\n res.json(installations.map(inst => ({\n id: inst.id,\n account: inst.account ? { login: inst.account.login, avatar_url: inst.account.avatar_url } : null,\n target_type: inst.target_type,\n repository_selection: inst.repository_selection,\n created_at: inst.created_at,\n updated_at: inst.updated_at\n })));\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/instalacoes/:id/repos', async (req: Request, res: Response) => {\n try {\n const installationId = parseInt(req.params.id as string, 10);\n const octokit = await app.getInstallationOctokit(installationId);\n const { data } = await octokit.request('GET /installation/repositories', {\n per_page: 100\n });\n res.json(data.repositories.map(repo => ({\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: repo.owner?.login,\n private: repo.private,\n default_branch: repo.default_branch,\n updated_at: repo.updated_at\n })));\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.post('/acoes/analisar', async (req: Request, res: Response) => {\n try {\n const { owner, repo, installationId, ref } = req.body as {\n owner?: string;\n repo?: string;\n installationId?: number;\n ref?: string;\n };\n\n if (!owner || !repo || !installationId) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.paramsObrigatorios });\n return;\n }\n\n const octokit = await app.getInstallationOctokit(installationId);\n const branchRef = ref || 'HEAD';\n\n const workflows = await buscarWorkflows(octokit, owner, repo, branchRef);\n\n if (workflows.length === 0) {\n res.json({\n sucesso: true,\n scoreGeral: DEFAULT_SCORE,\n workflows: [],\n ocorrencias: [],\n mensagem: GithubDashboardMensagens.nenhumWorkflowEncontrado\n });\n return;\n }\n\n const analysis = await analisarWorkflows(octokit, owner, repo, branchRef, workflows);\n\n const repoName = `${owner}/${repo}`;\n statsStore.recordAnalysis({\n repository: repoName,\n event: 'on_demand',\n score: analysis.scoreGeral,\n workflowsCount: analysis.workflowsInfo.length,\n occurrencesCount: analysis.ocorrencias.length\n });\n\n res.json({\n sucesso: true,\n scoreGeral: analysis.scoreGeral,\n workflows: analysis.workflowsInfo,\n ocorrencias: analysis.ocorrencias.slice(0, 50),\n totalOcorrencias: analysis.ocorrencias.length\n });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/resultados', (_req: Request, res: Response) => {\n const stats = statsStore.getStats();\n res.json({\n totalAnalyses: stats.totalAnalyses,\n recentAnalyses: stats.recentAnalyses\n });\n });\n\n router.post('/acoes/analisar-completo', (req: Request, res: Response) => {\n try {\n const { owner, repo, installationId, ref, fast, analistas, autoFix, autoFixMode } = req.body as {\n owner?: string;\n repo?: string;\n installationId?: number;\n ref?: string;\n fast?: boolean;\n analistas?: string[];\n autoFix?: boolean;\n autoFixMode?: 'conservative' | 'balanced';\n };\n\n if (!owner || !repo || !installationId) {\n res.status(HTTP_BAD_REQUEST).json({ erro: GithubDashboardMensagens.paramsObrigatorios });\n return;\n }\n\n const branchRef = ref || 'HEAD';\n const jobOptions = { fast: fast ?? false, analistas, autoFix: autoFix ?? false, autoFixMode };\n\n const jobId = criarJob(owner, repo, installationId, branchRef, jobOptions);\n const job = obterJob(jobId);\n\n if (!job) {\n res.status(500).json({ erro: messages.GithubDashboardMensagens.erroCriarJob });\n return;\n }\n\n if (autoFix) {\n void iniciarAutoFix(app, jobId, job);\n } else {\n void iniciarAnaliseCompleta(app, jobId, job);\n }\n\n res.status(202).json({\n sucesso: true,\n dados: {\n jobId,\n status: 'pendente',\n mensagem: GithubDashboardMensagens.jobEnfileirado(jobId)\n }\n });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/analisar-completo', (_req: Request, res: Response) => {\n try {\n const { owner, repo } = _req.query as { owner?: string; repo?: string; };\n const filtro = owner && repo ? { owner, repo } : undefined;\n const jobs = listarJobs(filtro);\n res.json({ sucesso: true, dados: { total: jobs.length, jobs } });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n router.get('/acoes/analisar-completo/:jobId', (req: Request, res: Response) => {\n try {\n const job = obterJob(req.params.jobId as string);\n if (!job) {\n res.status(HTTP_NOT_FOUND).json({ erro: GithubDashboardMensagens.jobNaoEncontrado(String(req.params.jobId)) });\n return;\n }\n res.json({ sucesso: true, dados: job });\n } catch (err: unknown) {\n const error = err as Error;\n res.status(500).json({ erro: error.message });\n }\n });\n\n return router;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"push-report.d.ts","sourceRoot":"","sources":["../../../../src/app/github/push-analysis/push-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAE9F,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAGtC,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAStD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,IAAI,CACb,kBAAkB,EAClB,YAAY,GAAG,eAAe,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,qBAAqB,GAAG,eAAe,CAC5H,EACD,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAwDR;AAGD,eAAO,MAAM,0BAA0B,+BAAyB,CAAC;AA+DjE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,qBAAqB,GAAG,eAAe,GAAG,aAAa,CAAC,EAChK,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAkIR;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,qBAAqB,GAAG,eAAe,GAAG,aAAa,CAAC,EAChK,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAiER;AAGD,eAAO,MAAM,gBAAgB,8BAAwB,CAAC;AAEtD,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,aAAa,CAAC,EAC9G,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAsCR;AAGD,eAAO,MAAM,8BAA8B,4CAAsC,CAAC;AAElF,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,IAAI,CACb,kBAAkB,EAClB,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,qBAAqB,CAC1F,EACD,GAAG,EAAE,qBAAqB,EAC1B,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAwCR;AAED,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAM/F"}
1
+ {"version":3,"file":"push-report.d.ts","sourceRoot":"","sources":["../../../../src/app/github/push-analysis/push-report.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAE9F,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAGtC,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAStD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,IAAI,CACb,kBAAkB,EAClB,YAAY,GAAG,eAAe,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,qBAAqB,GAAG,eAAe,CAC5H,EACD,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAwDR;AAGD,eAAO,MAAM,0BAA0B,+BAAyB,CAAC;AA+DjE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,qBAAqB,GAAG,eAAe,GAAG,aAAa,CAAC,EAChK,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAkIR;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,qBAAqB,GAAG,eAAe,GAAG,aAAa,CAAC,EAChK,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAiER;AAGD,eAAO,MAAM,gBAAgB,8BAAwB,CAAC;AAEtD,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,aAAa,CAAC,EAC9G,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAsCR;AAGD,eAAO,MAAM,8BAA8B,4CAAsC,CAAC;AAElF,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,IAAI,CACb,kBAAkB,EAClB,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,qBAAqB,CAC1F,EACD,GAAG,EAAE,qBAAqB,EAC1B,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAwCR;AAED,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAM/F"}
@@ -1 +1 @@
1
- {"version":3,"file":"push-report.js","sourceRoot":"","sources":["../../../../src/app/github/push-analysis/push-report.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { getMessages } from '@core/messages';\nimport type { AnalysisReportContext, FullAnalysisResult } from '../../../types/github/app.js';\n\nexport type { AnalysisReportContext };\n\n/** @deprecated use AnalysisReportContext */\nexport type PushReportContext = AnalysisReportContext;\n\nconst MAX_LISTADAS = 200;\nconst MAX_DETALHE_COMENTARIO = 12000;\n\nfunction rotuloScore(score: number): string {\n return getMessages().GithubPushReportMensagens.scoreLabel(score);\n}\n\nexport function gerarTituloPrRelatorio(branch: string, score: number, baseRef?: string): string {\n const estado = rotuloScore(score);\n const sufixo = baseRef ? `${branch} → ${baseRef}` : branch;\n return `${getMessages().GithubPushReportMensagens.rotuloScoreNome} (${estado}) — ${sufixo}`;\n}\n\nexport function gerarRelatorioMarkdown(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalArquivos' | 'totalOcorrencias' | 'duracaoMs' | 'ocorrencias' | 'resumoPorSeveridade' | 'resumoPorTipo'\n >,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const sev = resultado.resumoPorSeveridade;\n const origemLabel = ctx.origem === 'pull_request' || ctx.baseRef\n ? `PR → \\`${ctx.baseRef}\\` … \\`${ctx.branch}\\``\n : `branch \\`${ctx.branch}\\``;\n\n let md = `# Diagnóstico Tutanus\n\n**Repositório:** \\`${ctx.owner}/${ctx.repo}\\` \n**Escopo:** ${origemLabel} \n**Score geral:** ${resultado.scoreGeral}/100 (${rotuloScore(resultado.scoreGeral)}) \n**Commit:** \\`${shaCurto}\\` \n**Mensagem:** ${ctx.commitMessage.replace(/\\n/g, ' ')} \n**Arquivos no projeto:** ${resultado.totalArquivos} \n**Ocorrências:** ${resultado.totalOcorrencias} \n**Duração:** ${(resultado.duracaoMs / 1000).toFixed(1)} s\n`;\n\n if (ctx.escopoIncremental && ctx.arquivosAlterados && ctx.arquivosAlterados.length > 0) {\n md += `\\n## Arquivos no escopo (${ctx.arquivosAlterados.length})\\n\\n`;\n md += ctx.arquivosAlterados.slice(0, 40).map(f => `- \\`${f}\\``).join('\\n');\n if (ctx.arquivosAlterados.length > 40) {\n md += getMessages().GithubPushReportMensagens.maisArquivos(ctx.arquivosAlterados.length - 40);\n }\n md += '\\n';\n }\n\n md += `\\n## Resumo por severidade\\n\\n| Nível | Quantidade |\\n|-------|------------|\\n`;\n for (const [nivel, qtd] of Object.entries(sev).sort()) {\n md += `| ${nivel} | ${qtd} |\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n md += `\\n## Resumo por tipo\\n\\n| Tipo | Quantidade |\\n|------|------------|\\n`;\n for (const [tipo, qtd] of Object.entries(resultado.resumoPorTipo).sort((a, b) => b[1] - a[1]).slice(0, 15)) {\n md += `| ${tipo} | ${qtd} |\\n`;\n }\n }\n\n md += `\\n## Ocorrências\\n\\n`;\n if (resultado.ocorrencias.length === 0) {\n md += getMessages().GithubPushReportMensagens.nenhumaOcorrencia;\n } else {\n for (const o of resultado.ocorrencias.slice(0, MAX_LISTADAS)) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? ` — _${o.sugestao}_` : '';\n md += `- **${(o.nivel || 'info').toUpperCase()}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > MAX_LISTADAS) {\n md += getMessages().GithubPushReportMensagens.maisOcorrencias(resultado.ocorrencias.length - MAX_LISTADAS);\n }\n }\n\n md += `\\n---\\n\\n_Relatório gerado pelo [Tutanus](https://github.com/anomalyco/tutanus) via GitHub App._\\n`;\n return md;\n}\n\n/** @deprecated use gerarRelatorioMarkdown */\nexport const gerarRelatorioPushMarkdown = gerarRelatorioMarkdown;\n\nfunction rotuloSeveridade(nivel: string): string {\n const map: Record<string, string> = {\n erro: 'ERRO',\n aviso: 'AVISO',\n info: 'INFO',\n sugestao: 'SUGESTAO'\n };\n return map[nivel.toLowerCase()] ?? 'INFO';\n}\n\nfunction explicarSeveridade(nivel: string): string {\n return getMessages().GithubPushReportMensagens.explicarSeveridade(nivel);\n}\n\nfunction agruparOcorrenciasPorArquivo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ relPath: string; count: number; erros: number; avisos: number }> {\n const map = new Map<string, { count: number; erros: number; avisos: number }>();\n for (const o of ocorrencias) {\n const entry = map.get(o.relPath) ?? { count: 0, erros: 0, avisos: 0 };\n entry.count++;\n if (o.nivel === 'erro') entry.erros++;\n if (o.nivel === 'aviso') entry.avisos++;\n map.set(o.relPath, entry);\n }\n return Array.from(map.entries())\n .map(([relPath, data]) => ({ relPath, ...data }))\n .sort((a, b) => b.count - a.count);\n}\n\nfunction extrairSugestoes(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> {\n return ocorrencias\n .filter((o): o is typeof o & { sugestao: string } => !!o.sugestao)\n .slice(0, 20)\n .map(o => ({\n mensagem: o.mensagem,\n relPath: o.relPath,\n linha: o.linha,\n sugestao: o.sugestao,\n nivel: o.nivel\n }));\n}\n\nfunction agruparSugestoesPorTipo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ tipo: string; count: number; sugestoes: Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> }> {\n const sugestoes = extrairSugestoes(ocorrencias);\n const map = new Map<string, Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }>>();\n for (const s of sugestoes) {\n const tipo = s.nivel || 'info';\n const arr = map.get(tipo) ?? [];\n arr.push(s);\n map.set(tipo, arr);\n }\n return Array.from(map.entries())\n .map(([tipo, sugestoes]) => ({ tipo, count: sugestoes.length, sugestoes }))\n .sort((a, b) => b.count - a.count);\n}\n\nexport function gerarCorpoPrRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n let body = `## Diagnóstico Tutanus — ${rotulo}\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n const msgs = getMessages().GithubPushReportMensagens;\n if (resultado.scoreGeral >= 80) {\n body += msgs.qualidadeOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += msgs.qualidadeAtencao;\n } else {\n body += msgs.qualidadeCritico;\n }\n\n body += `### Resumo da análise\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Arquivos no projeto | **${resultado.totalArquivos}** |\n| Tempo de análise | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n body += `### Principais problemas encontrados\\n\\n`;\n\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n if (infos > 0) {\n body += `#### Informações / Sugestões (${infos})\\n\\n${explicarSeveridade('info')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const primeirosProblemas = resultado.ocorrencias.slice(0, 10);\n body += `#### Exemplos\\n\\n`;\n for (const o of primeirosProblemas) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 10) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 10} ocorrência(s). Veja o relatório completo abaixo.*\\n`;\n }\n body += `\\n`;\n }\n\n const arquivosAgrupados = agruparOcorrenciasPorArquivo(resultado.ocorrencias);\n if (arquivosAgrupados.length > 0) {\n const topArquivos = arquivosAgrupados.slice(0, 5);\n body += `#### Arquivos com mais ocorrências\\n\\n`;\n body += `| Arquivo | Total | Erros | Avisos |\\n`;\n body += `|---------|-------|-------|--------|\\n`;\n for (const f of topArquivos) {\n body += `| \\`${f.relPath}\\` | ${f.count} | ${f.erros} | ${f.avisos} |\\n`;\n }\n body += `\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n const topTipos = Object.entries(resultado.resumoPorTipo)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 8);\n body += `#### Tipos de ocorrência mais frequentes\\n\\n`;\n for (const [tipo, qtd] of topTipos) {\n body += `- **${tipo}**: ${qtd} ocorrência(s)\\n`;\n }\n body += `\\n`;\n }\n\n const sugestoesAgrupadas = agruparSugestoesPorTipo(resultado.ocorrencias);\n if (sugestoesAgrupadas.length > 0) {\n const totalSugestoes = sugestoesAgrupadas.reduce((s, g) => s + g.count, 0);\n body += `#### Sugestões (${totalSugestoes})\\n\\n`;\n body += `O Tutanus identificou as seguintes sugestões de melhoria:\\n\\n`;\n for (const grupo of sugestoesAgrupadas) {\n body += `<details>\\n<summary><strong>${rotuloSeveridade(grupo.tipo)}</strong> — ${grupo.count} sugestão(ões)</summary>\\n\\n`;\n for (const s of grupo.sugestoes) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > 💡 ${s.sugestao}\\n\\n`;\n }\n body += `</details>\\n\\n`;\n }\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nO código analisado não apresentou ocorrências.\\n\\n`;\n }\n\n body += `### Ações recomendadas\\n\\n`;\n body += `1. Revise os erros — são os que têm maior impacto na qualidade e segurança\\n`;\n body += `2. Analise os avisos — podem indicar bugs latentes ou dívida técnica\\n`;\n body += `3. Considere as sugestões — melhoram manutenibilidade e performance\\n`;\n body += `4. Consulte os comentários inline — cada ocorrência tem uma sugestão prática\\n\\n`;\n\n const alvo = ctx.baseRef ? `\\`${ctx.baseRef}\\`` : 'produção';\n body += `### Sobre esta análise\\n\\n`;\n body += `Esta análise foi executada automaticamente pelo **GitHub App Tutanus** no servidor do app. `;\n body += `Não depende de workflows ou configurações no seu repositório. `;\n body += `Cada novo push em \\`${ctx.branch}\\` atualiza este diagnóstico. O PR propõe a fusão em ${alvo}.\\n\\n`;\n\n const relatorioCompleto = gerarRelatorioMarkdown(resultado as FullAnalysisResult, ctx);\n let detalhe = relatorioCompleto;\n if (detalhe.length > 60000) {\n detalhe = `${detalhe.slice(0, 60000)}\\n\\n_… relatório truncado devido ao tamanho._`;\n }\n body += `<details>\\n<summary><strong>Relatório detalhado (completo)</strong></summary>\\n\\n${detalhe}\\n\\n</details>\\n\\n`;\n\n body += `---\\n\\n<sub>PR automático · [Tutanus](https://github.com/anomalyco/tutanus) — análise em ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\nexport function gerarCorpoPrAnalise(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n let body = `## Análise do PR — \\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n if (resultado.scoreGeral >= 80) {\n body += getMessages().GithubPushReportMensagens.prQualityOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += getMessages().GithubPushReportMensagens.prQualityAtencao;\n } else {\n body += getMessages().GithubPushReportMensagens.prQualityCritico;\n }\n\n body += `### Resumo\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Duração | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const exemplos = resultado.ocorrencias.slice(0, 5);\n body += `#### Exemplos\\n\\n`;\n for (const o of exemplos) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 5) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 5} ocorrência(s). Veja os comentários inline.*\\n`;\n }\n body += `\\n`;\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nEste PR não apresentou ocorrências.\\n\\n`;\n }\n\n body += `---\\n\\n`;\n body += `<sub>Análise via [Tutanus](https://github.com/anomalyco/tutanus) — ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\n/** @deprecated use gerarCorpoPrRelatorio */\nexport const gerarCorpoPrPush = gerarCorpoPrRelatorio;\n\nexport function gerarComentarioAtualizacaoRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'resumoPorSeveridade' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const estado = rotuloScore(resultado.scoreGeral);\n const sugestoes = extrairSugestoes(resultado.ocorrencias || []);\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n\n let body = `## Diagnóstico atualizado — \\`${shaCurto}\\`\n\nNovo commit recebido em ${rotulo} (\\`${shaCurto}\\`). O relatório foi atualizado com os dados mais recentes.\n\n| Métrica | Valor |\n|---------|-------|\n| Score | **${resultado.scoreGeral}/100** (${estado}) |\n| Ocorrências | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n\n`;\n\n if (sugestoes.length > 0) {\n body += `### Sugestões disponíveis (${sugestoes.length})\\n\\n`;\n for (const s of sugestoes.slice(0, 10)) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > 💡 ${s.sugestao}\\n\\n`;\n }\n if (sugestoes.length > 10) {\n body += `*… e mais ${sugestoes.length - 10} sugestão(ões).*\\n\\n`;\n }\n }\n\n body += `> A descrição deste PR contém o diagnóstico completo atualizado. Revise as sugestões acima.`;\n return body;\n}\n\n/** @deprecated */\nexport const gerarComentarioAtualizacaoPush = gerarComentarioAtualizacaoRelatorio;\n\nexport function gerarComentarioPrAnalise(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade'\n >,\n ctx: AnalysisReportContext,\n relatorioCompleto: string\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s) neste PR`\n : 'repositório completo';\n\n let detalhe = relatorioCompleto;\n if (detalhe.length > MAX_DETALHE_COMENTARIO) {\n detalhe = `${detalhe.slice(0, MAX_DETALHE_COMENTARIO)}\\n\\n_… relatório truncado. Consulte os comentários inline._`;\n }\n\n return `## Diagnóstico Tutanus\n\nAnálise do PR${ctx.prNumber ? ` #${ctx.prNumber}` : ''} (\\`${ctx.baseRef}\\` ← \\`${ctx.branch}\\`, \\`${shaCurto}\\`).\n\n**Estado:** ${estado} · **Score:** ${resultado.scoreGeral}/100 · **Escopo:** ${escopo}\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências | ${resultado.totalOcorrencias} |\n| Erros | ${erros} |\n| Avisos | ${avisos} |\n| Arquivos no projeto | ${resultado.totalArquivos} |\n| Duração | ${(resultado.duracaoMs / 1000).toFixed(1)} s |\n\nComentários inline foram adicionados nos principais achados.\n\n<details>\n<summary><strong>Relatório completo (markdown)</strong></summary>\n\n${detalhe}\n\n</details>\n\n---\n\n<sub>Análise via GitHub App · [Tutanus](https://github.com/anomalyco/tutanus)</sub>`;\n}\n\nexport function gerarResumoReviewPr(totalOcorrencias: number, comentariosInline: number): string {\n return `## Revisão Tutanus\n\nForam publicados **${comentariosInline}** comentário(s) inline (${totalOcorrencias} ocorrência(s) no escopo).\n\nRevise as sugestões nos arquivos alterados.`;\n}\n"]}
1
+ {"version":3,"file":"push-report.js","sourceRoot":"","sources":["../../../../src/app/github/push-analysis/push-report.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { getMessages } from '@core/messages';\n\nimport type { AnalysisReportContext, FullAnalysisResult } from '../../../types/github/app.js';\n\nexport type { AnalysisReportContext };\n\n/** @deprecated use AnalysisReportContext */\nexport type PushReportContext = AnalysisReportContext;\n\nconst MAX_LISTADAS = 200;\nconst MAX_DETALHE_COMENTARIO = 12000;\n\nfunction rotuloScore(score: number): string {\n return getMessages().GithubPushReportMensagens.scoreLabel(score);\n}\n\nexport function gerarTituloPrRelatorio(branch: string, score: number, baseRef?: string): string {\n const estado = rotuloScore(score);\n const sufixo = baseRef ? `${branch} → ${baseRef}` : branch;\n return `${getMessages().GithubPushReportMensagens.rotuloScoreNome} (${estado}) — ${sufixo}`;\n}\n\nexport function gerarRelatorioMarkdown(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalArquivos' | 'totalOcorrencias' | 'duracaoMs' | 'ocorrencias' | 'resumoPorSeveridade' | 'resumoPorTipo'\n >,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const sev = resultado.resumoPorSeveridade;\n const origemLabel = ctx.origem === 'pull_request' || ctx.baseRef\n ? `PR → \\`${ctx.baseRef}\\` … \\`${ctx.branch}\\``\n : `branch \\`${ctx.branch}\\``;\n\n let md = `# Diagnóstico Tutanus\n\n**Repositório:** \\`${ctx.owner}/${ctx.repo}\\` \n**Escopo:** ${origemLabel} \n**Score geral:** ${resultado.scoreGeral}/100 (${rotuloScore(resultado.scoreGeral)}) \n**Commit:** \\`${shaCurto}\\` \n**Mensagem:** ${ctx.commitMessage.replace(/\\n/g, ' ')} \n**Arquivos no projeto:** ${resultado.totalArquivos} \n**Ocorrências:** ${resultado.totalOcorrencias} \n**Duração:** ${(resultado.duracaoMs / 1000).toFixed(1)} s\n`;\n\n if (ctx.escopoIncremental && ctx.arquivosAlterados && ctx.arquivosAlterados.length > 0) {\n md += `\\n## Arquivos no escopo (${ctx.arquivosAlterados.length})\\n\\n`;\n md += ctx.arquivosAlterados.slice(0, 40).map(f => `- \\`${f}\\``).join('\\n');\n if (ctx.arquivosAlterados.length > 40) {\n md += getMessages().GithubPushReportMensagens.maisArquivos(ctx.arquivosAlterados.length - 40);\n }\n md += '\\n';\n }\n\n md += `\\n## Resumo por severidade\\n\\n| Nível | Quantidade |\\n|-------|------------|\\n`;\n for (const [nivel, qtd] of Object.entries(sev).sort()) {\n md += `| ${nivel} | ${qtd} |\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n md += `\\n## Resumo por tipo\\n\\n| Tipo | Quantidade |\\n|------|------------|\\n`;\n for (const [tipo, qtd] of Object.entries(resultado.resumoPorTipo).sort((a, b) => b[1] - a[1]).slice(0, 15)) {\n md += `| ${tipo} | ${qtd} |\\n`;\n }\n }\n\n md += `\\n## Ocorrências\\n\\n`;\n if (resultado.ocorrencias.length === 0) {\n md += getMessages().GithubPushReportMensagens.nenhumaOcorrencia;\n } else {\n for (const o of resultado.ocorrencias.slice(0, MAX_LISTADAS)) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? ` — _${o.sugestao}_` : '';\n md += `- **${(o.nivel || 'info').toUpperCase()}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > MAX_LISTADAS) {\n md += getMessages().GithubPushReportMensagens.maisOcorrencias(resultado.ocorrencias.length - MAX_LISTADAS);\n }\n }\n\n md += `\\n---\\n\\n_Relatório gerado pelo [Tutanus](https://github.com/anomalyco/tutanus) via GitHub App._\\n`;\n return md;\n}\n\n/** @deprecated use gerarRelatorioMarkdown */\nexport const gerarRelatorioPushMarkdown = gerarRelatorioMarkdown;\n\nfunction rotuloSeveridade(nivel: string): string {\n const map: Record<string, string> = {\n erro: 'ERRO',\n aviso: 'AVISO',\n info: 'INFO',\n sugestao: 'SUGESTAO'\n };\n return map[nivel.toLowerCase()] ?? 'INFO';\n}\n\nfunction explicarSeveridade(nivel: string): string {\n return getMessages().GithubPushReportMensagens.explicarSeveridade(nivel);\n}\n\nfunction agruparOcorrenciasPorArquivo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ relPath: string; count: number; erros: number; avisos: number }> {\n const map = new Map<string, { count: number; erros: number; avisos: number }>();\n for (const o of ocorrencias) {\n const entry = map.get(o.relPath) ?? { count: 0, erros: 0, avisos: 0 };\n entry.count++;\n if (o.nivel === 'erro') entry.erros++;\n if (o.nivel === 'aviso') entry.avisos++;\n map.set(o.relPath, entry);\n }\n return Array.from(map.entries())\n .map(([relPath, data]) => ({ relPath, ...data }))\n .sort((a, b) => b.count - a.count);\n}\n\nfunction extrairSugestoes(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> {\n return ocorrencias\n .filter((o): o is typeof o & { sugestao: string } => !!o.sugestao)\n .slice(0, 20)\n .map(o => ({\n mensagem: o.mensagem,\n relPath: o.relPath,\n linha: o.linha,\n sugestao: o.sugestao,\n nivel: o.nivel\n }));\n}\n\nfunction agruparSugestoesPorTipo(\n ocorrencias: FullAnalysisResult['ocorrencias']\n): Array<{ tipo: string; count: number; sugestoes: Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }> }> {\n const sugestoes = extrairSugestoes(ocorrencias);\n const map = new Map<string, Array<{ mensagem: string; relPath: string; linha?: number; sugestao: string; nivel?: string }>>();\n for (const s of sugestoes) {\n const tipo = s.nivel || 'info';\n const arr = map.get(tipo) ?? [];\n arr.push(s);\n map.set(tipo, arr);\n }\n return Array.from(map.entries())\n .map(([tipo, sugestoes]) => ({ tipo, count: sugestoes.length, sugestoes }))\n .sort((a, b) => b.count - a.count);\n}\n\nexport function gerarCorpoPrRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n let body = `## Diagnóstico Tutanus — ${rotulo}\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n const msgs = getMessages().GithubPushReportMensagens;\n if (resultado.scoreGeral >= 80) {\n body += msgs.qualidadeOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += msgs.qualidadeAtencao;\n } else {\n body += msgs.qualidadeCritico;\n }\n\n body += `### Resumo da análise\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Arquivos no projeto | **${resultado.totalArquivos}** |\n| Tempo de análise | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n body += `### Principais problemas encontrados\\n\\n`;\n\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n if (infos > 0) {\n body += `#### Informações / Sugestões (${infos})\\n\\n${explicarSeveridade('info')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const primeirosProblemas = resultado.ocorrencias.slice(0, 10);\n body += `#### Exemplos\\n\\n`;\n for (const o of primeirosProblemas) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 10) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 10} ocorrência(s). Veja o relatório completo abaixo.*\\n`;\n }\n body += `\\n`;\n }\n\n const arquivosAgrupados = agruparOcorrenciasPorArquivo(resultado.ocorrencias);\n if (arquivosAgrupados.length > 0) {\n const topArquivos = arquivosAgrupados.slice(0, 5);\n body += `#### Arquivos com mais ocorrências\\n\\n`;\n body += `| Arquivo | Total | Erros | Avisos |\\n`;\n body += `|---------|-------|-------|--------|\\n`;\n for (const f of topArquivos) {\n body += `| \\`${f.relPath}\\` | ${f.count} | ${f.erros} | ${f.avisos} |\\n`;\n }\n body += `\\n`;\n }\n\n if (Object.keys(resultado.resumoPorTipo).length > 0) {\n const topTipos = Object.entries(resultado.resumoPorTipo)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 8);\n body += `#### Tipos de ocorrência mais frequentes\\n\\n`;\n for (const [tipo, qtd] of topTipos) {\n body += `- **${tipo}**: ${qtd} ocorrência(s)\\n`;\n }\n body += `\\n`;\n }\n\n const sugestoesAgrupadas = agruparSugestoesPorTipo(resultado.ocorrencias);\n if (sugestoesAgrupadas.length > 0) {\n const totalSugestoes = sugestoesAgrupadas.reduce((s, g) => s + g.count, 0);\n body += `#### Sugestões (${totalSugestoes})\\n\\n`;\n body += `O Tutanus identificou as seguintes sugestões de melhoria:\\n\\n`;\n for (const grupo of sugestoesAgrupadas) {\n body += `<details>\\n<summary><strong>${rotuloSeveridade(grupo.tipo)}</strong> — ${grupo.count} sugestão(ões)</summary>\\n\\n`;\n for (const s of grupo.sugestoes) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > 💡 ${s.sugestao}\\n\\n`;\n }\n body += `</details>\\n\\n`;\n }\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nO código analisado não apresentou ocorrências.\\n\\n`;\n }\n\n body += `### Ações recomendadas\\n\\n`;\n body += `1. Revise os erros — são os que têm maior impacto na qualidade e segurança\\n`;\n body += `2. Analise os avisos — podem indicar bugs latentes ou dívida técnica\\n`;\n body += `3. Considere as sugestões — melhoram manutenibilidade e performance\\n`;\n body += `4. Consulte os comentários inline — cada ocorrência tem uma sugestão prática\\n\\n`;\n\n const alvo = ctx.baseRef ? `\\`${ctx.baseRef}\\`` : 'produção';\n body += `### Sobre esta análise\\n\\n`;\n body += `Esta análise foi executada automaticamente pelo **GitHub App Tutanus** no servidor do app. `;\n body += `Não depende de workflows ou configurações no seu repositório. `;\n body += `Cada novo push em \\`${ctx.branch}\\` atualiza este diagnóstico. O PR propõe a fusão em ${alvo}.\\n\\n`;\n\n const relatorioCompleto = gerarRelatorioMarkdown(resultado as FullAnalysisResult, ctx);\n let detalhe = relatorioCompleto;\n if (detalhe.length > 60000) {\n detalhe = `${detalhe.slice(0, 60000)}\\n\\n_… relatório truncado devido ao tamanho._`;\n }\n body += `<details>\\n<summary><strong>Relatório detalhado (completo)</strong></summary>\\n\\n${detalhe}\\n\\n</details>\\n\\n`;\n\n body += `---\\n\\n<sub>PR automático · [Tutanus](https://github.com/anomalyco/tutanus) — análise em ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\nexport function gerarCorpoPrAnalise(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade' | 'resumoPorTipo' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s)`\n : 'repositório completo';\n\n let body = `## Análise do PR — \\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`\n\n**Score: ${resultado.scoreGeral}/100 (${estado})** · Commit \\`${shaCurto}\\` · Escopo: ${escopo}\n\n`;\n\n if (resultado.scoreGeral >= 80) {\n body += getMessages().GithubPushReportMensagens.prQualityOtimo;\n } else if (resultado.scoreGeral >= 60) {\n body += getMessages().GithubPushReportMensagens.prQualityAtencao;\n } else {\n body += getMessages().GithubPushReportMensagens.prQualityCritico;\n }\n\n body += `### Resumo\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências totais | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n| Duração | **${(resultado.duracaoMs / 1000).toFixed(1)} s** |\n\n`;\n\n if (resultado.totalOcorrencias > 0) {\n if (erros > 0) {\n body += `#### Erros (${erros})\\n\\n${explicarSeveridade('erro')}\\n\\n`;\n }\n if (avisos > 0) {\n body += `#### Avisos (${avisos})\\n\\n${explicarSeveridade('aviso')}\\n\\n`;\n }\n\n if (resultado.ocorrencias && resultado.ocorrencias.length > 0) {\n const exemplos = resultado.ocorrencias.slice(0, 5);\n body += `#### Exemplos\\n\\n`;\n for (const o of exemplos) {\n const linha = o.linha ? `:${o.linha}` : '';\n const sug = o.sugestao ? `\\n > *${o.sugestao}*` : '';\n body += `- **${rotuloSeveridade(o.nivel || 'info')}** \\`${o.relPath}${linha}\\` — ${o.mensagem}${sug}\\n`;\n }\n if (resultado.ocorrencias.length > 5) {\n body += `\\n *… e mais ${resultado.ocorrencias.length - 5} ocorrência(s). Veja os comentários inline.*\\n`;\n }\n body += `\\n`;\n }\n } else {\n body += `### Nenhum problema encontrado\\n\\nEste PR não apresentou ocorrências.\\n\\n`;\n }\n\n body += `---\\n\\n`;\n body += `<sub>Análise via [Tutanus](https://github.com/anomalyco/tutanus) — ${(resultado.duracaoMs / 1000).toFixed(1)}s</sub>`;\n\n return body;\n}\n\n/** @deprecated use gerarCorpoPrRelatorio */\nexport const gerarCorpoPrPush = gerarCorpoPrRelatorio;\n\nexport function gerarComentarioAtualizacaoRelatorio(\n resultado: Pick<FullAnalysisResult, 'scoreGeral' | 'totalOcorrencias' | 'resumoPorSeveridade' | 'ocorrencias'>,\n ctx: AnalysisReportContext\n): string {\n const shaCurto = ctx.headSha.slice(0, 7);\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const infos = (resultado.resumoPorSeveridade.info ?? 0) + (resultado.resumoPorSeveridade.sugestao ?? 0);\n const estado = rotuloScore(resultado.scoreGeral);\n const sugestoes = extrairSugestoes(resultado.ocorrencias || []);\n\n const rotulo = ctx.baseRef ? `\\`${ctx.branch}\\` → \\`${ctx.baseRef}\\`` : `\\`${ctx.branch}\\``;\n\n let body = `## Diagnóstico atualizado — \\`${shaCurto}\\`\n\nNovo commit recebido em ${rotulo} (\\`${shaCurto}\\`). O relatório foi atualizado com os dados mais recentes.\n\n| Métrica | Valor |\n|---------|-------|\n| Score | **${resultado.scoreGeral}/100** (${estado}) |\n| Ocorrências | **${resultado.totalOcorrencias}** |\n| Erros | **${erros}** |\n| Avisos | **${avisos}** |\n| Informações / Sugestões | **${infos}** |\n\n`;\n\n if (sugestoes.length > 0) {\n body += `### Sugestões disponíveis (${sugestoes.length})\\n\\n`;\n for (const s of sugestoes.slice(0, 10)) {\n const linha = s.linha ? `:${s.linha}` : '';\n body += `- **\\`${s.relPath}${linha}\\`** — ${s.mensagem}\\n`;\n body += ` > 💡 ${s.sugestao}\\n\\n`;\n }\n if (sugestoes.length > 10) {\n body += `*… e mais ${sugestoes.length - 10} sugestão(ões).*\\n\\n`;\n }\n }\n\n body += `> A descrição deste PR contém o diagnóstico completo atualizado. Revise as sugestões acima.`;\n return body;\n}\n\n/** @deprecated */\nexport const gerarComentarioAtualizacaoPush = gerarComentarioAtualizacaoRelatorio;\n\nexport function gerarComentarioPrAnalise(\n resultado: Pick<\n FullAnalysisResult,\n 'scoreGeral' | 'totalOcorrencias' | 'totalArquivos' | 'duracaoMs' | 'resumoPorSeveridade'\n >,\n ctx: AnalysisReportContext,\n relatorioCompleto: string\n): string {\n const erros = resultado.resumoPorSeveridade.erro ?? 0;\n const avisos = resultado.resumoPorSeveridade.aviso ?? 0;\n const shaCurto = ctx.headSha.slice(0, 7);\n const estado = rotuloScore(resultado.scoreGeral);\n const escopo = ctx.escopoIncremental && ctx.arquivosAlterados?.length\n ? `${ctx.arquivosAlterados.length} arquivo(s) alterado(s) neste PR`\n : 'repositório completo';\n\n let detalhe = relatorioCompleto;\n if (detalhe.length > MAX_DETALHE_COMENTARIO) {\n detalhe = `${detalhe.slice(0, MAX_DETALHE_COMENTARIO)}\\n\\n_… relatório truncado. Consulte os comentários inline._`;\n }\n\n return `## Diagnóstico Tutanus\n\nAnálise do PR${ctx.prNumber ? ` #${ctx.prNumber}` : ''} (\\`${ctx.baseRef}\\` ← \\`${ctx.branch}\\`, \\`${shaCurto}\\`).\n\n**Estado:** ${estado} · **Score:** ${resultado.scoreGeral}/100 · **Escopo:** ${escopo}\n\n| Indicador | Valor |\n|-----------|-------|\n| Ocorrências | ${resultado.totalOcorrencias} |\n| Erros | ${erros} |\n| Avisos | ${avisos} |\n| Arquivos no projeto | ${resultado.totalArquivos} |\n| Duração | ${(resultado.duracaoMs / 1000).toFixed(1)} s |\n\nComentários inline foram adicionados nos principais achados.\n\n<details>\n<summary><strong>Relatório completo (markdown)</strong></summary>\n\n${detalhe}\n\n</details>\n\n---\n\n<sub>Análise via GitHub App · [Tutanus](https://github.com/anomalyco/tutanus)</sub>`;\n}\n\nexport function gerarResumoReviewPr(totalOcorrencias: number, comentariosInline: number): string {\n return `## Revisão Tutanus\n\nForam publicados **${comentariosInline}** comentário(s) inline (${totalOcorrencias} ocorrência(s) no escopo).\n\nRevise as sugestões nos arquivos alterados.`;\n}\n"]}
@@ -3,7 +3,7 @@ export declare const BugMlMensagens: {
3
3
  readonly mlPattern: (confianca: string, message: string) => string;
4
4
  readonly complexidadeCiclomatica: (count: number) => string;
5
5
  readonly muitasFuncoes: (count: number) => string;
6
- readonly aninhamentoProfundo: (depth: number, maxNestingDepth: number) => string;
6
+ readonly aninhamentoProfundo: (depth: number, _maxNestingDepth: number) => string;
7
7
  readonly arquivoMuitoLongo: (count: number) => string;
8
8
  readonly castsInseguros: (count: number) => string;
9
9
  readonly usoExcessivoAny: (count: number) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"detector-bugs-ml-messages.d.ts","sourceRoot":"","sources":["../../../../../src/core/messages/pt/analysts/detector-bugs-ml-messages.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;uCACC,MAAM,WAAW,MAAM;oCAC1B,MAAM,WAAW,MAAM;8CACb,MAAM;oCAChB,MAAM;0CACA,MAAM,mBAAmB,MAAM;wCACjC,MAAM;qCACT,MAAM;sCACL,MAAM;;;gDAII,MAAM;;mDAEH,MAAM;;0CAEf,MAAM;;;;8CAIF,MAAM;;;;yCAIX,MAAM;;uCAER,MAAM;0CACH,MAAM;gDACA,MAAM;;CAEjC,CAAC"}
1
+ {"version":3,"file":"detector-bugs-ml-messages.d.ts","sourceRoot":"","sources":["../../../../../src/core/messages/pt/analysts/detector-bugs-ml-messages.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;uCACC,MAAM,WAAW,MAAM;oCAC1B,MAAM,WAAW,MAAM;8CACb,MAAM;oCAChB,MAAM;0CACA,MAAM,oBAAoB,MAAM;wCAClC,MAAM;qCACT,MAAM;sCACL,MAAM;;;gDAII,MAAM;;mDAEH,MAAM;;0CAEf,MAAM;;;;8CAIF,MAAM;;;;yCAIX,MAAM;;uCAER,MAAM;0CACH,MAAM;gDACA,MAAM;;CAEjC,CAAC"}
@@ -3,7 +3,7 @@ export const BugMlMensagens = {
3
3
  mlPattern: (confianca, message) => `[ML ${confianca}%] ${message}`,
4
4
  complexidadeCiclomatica: (count) => `Alta complexidade ciclomática (${count})`,
5
5
  muitasFuncoes: (count) => `Muitas funções (${count})`,
6
- aninhamentoProfundo: (depth, maxNestingDepth) => `Aninhamento profundo (${depth} níveis)`,
6
+ aninhamentoProfundo: (depth, _maxNestingDepth) => `Aninhamento profundo (${depth} níveis)`,
7
7
  arquivoMuitoLongo: (count) => `Arquivo muito longo (${count} linhas)`,
8
8
  castsInseguros: (count) => `Casts inseguros frequentes (${count})`,
9
9
  usoExcessivoAny: (count) => `Uso excessivo de 'any' (${count})`,
@@ -1 +1 @@
1
- {"version":3,"file":"detector-bugs-ml-messages.js","sourceRoot":"","sources":["../../../../../src/core/messages/pt/analysts/detector-bugs-ml-messages.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,iBAAiB,EAAE,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,mCAAmC,IAAI,gBAAgB,OAAO,EAAE;IACtH,SAAS,EAAE,CAAC,SAAiB,EAAE,OAAe,EAAE,EAAE,CAAC,OAAO,SAAS,MAAM,OAAO,EAAE;IAClF,uBAAuB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,kCAAkC,KAAK,GAAG;IACtF,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,mBAAmB,KAAK,GAAG;IAC7D,mBAAmB,EAAE,CAAC,KAAa,EAAE,eAAuB,EAAE,EAAE,CAAC,yBAAyB,KAAK,UAAU;IACzG,iBAAiB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,wBAAwB,KAAK,UAAU;IAC7E,cAAc,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,+BAA+B,KAAK,GAAG;IAC1E,eAAe,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,2BAA2B,KAAK,GAAG;IACvE,qBAAqB,EAAE,iCAAiC;IACxD,WAAW,EAAE,qBAAqB;IAElC,uBAAuB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,sCAAsC,OAAO,EAAE;IAC7F,0BAA0B,EAAE,qEAAqE;IACjG,yBAAyB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,YAAY,QAAQ,kDAAkD;IACvH,4BAA4B,EAAE,6BAA6B;IAC3D,iBAAiB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,yBAAyB,OAAO,cAAc;IACtF,oBAAoB,EAAE,qEAAqE;IAC3F,oBAAoB,EAAE,qEAAqE;IAC3F,uBAAuB,EAAE,2DAA2D;IACpF,qBAAqB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,4BAA4B,OAAO,EAAE;IACjF,wBAAwB,EAAE,sDAAsD;IAChF,uBAAuB,EAAE,6CAA6C;IACtE,0BAA0B,EAAE,uDAAuD;IACnF,kBAAkB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,0BAA0B,KAAK,uCAAuC;IAC7G,qBAAqB,EAAE,6DAA6D;IACpF,kBAAkB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,kBAAkB,GAAG,8CAA8C;IACxG,qBAAqB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,4CAA4C,GAAG,EAAE;IACzF,uBAAuB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,uCAAuC,OAAO,EAAE;IAC9F,0BAA0B,EAAE,iDAAiD;CACrE,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\nexport const BugMlMensagens = {\n altaProbabilidade: (prob: string, fatores: string) => `ML: Alta probabilidade de bugs (${prob}%). Fatores: ${fatores}`,\n mlPattern: (confianca: string, message: string) => `[ML ${confianca}%] ${message}`,\n complexidadeCiclomatica: (count: number) => `Alta complexidade ciclomática (${count})`,\n muitasFuncoes: (count: number) => `Muitas funções (${count})`,\n aninhamentoProfundo: (depth: number, maxNestingDepth: number) => `Aninhamento profundo (${depth} níveis)`,\n arquivoMuitoLongo: (count: number) => `Arquivo muito longo (${count} linhas)`,\n castsInseguros: (count: number) => `Casts inseguros frequentes (${count})`,\n usoExcessivoAny: (count: number) => `Uso excessivo de 'any' (${count})`,\n promisesSemTratamento: 'Promises sem tratamento de erro',\n muitosTODOs: 'Muitos TODOs/FIXMEs',\n // Pattern messages\n nullPointerDerefMessage: (preview: string) => `Possível null pointer dereference: ${preview}`,\n nullPointerDerefSuggestion: 'Verificar se o resultado é null/undefined antes de encadear métodos',\n chamadaSemOptionalMessage: (funcName: string) => `Chamada '${funcName}' sem optional chaining pode causar null pointer`,\n chamadaSemOptionalSuggestion: 'Use optional chaining: `?.`',\n memoryLeakMessage: (preview: string) => `Possível memory leak: ${preview} sem cleanup`,\n memoryLeakSuggestion: 'Adicionar cleanup (removeEventListener, clearInterval, unsubscribe)',\n raceConditionMessage: 'Possível race condition: estado compartilhado entre operações async',\n raceConditionSuggestion: 'Usar locks ou atomic operations para estado compartilhado',\n typeAssumptionMessage: (preview: string) => `Type assertion insegura: ${preview}`,\n typeAssumptionSuggestion: 'Validar o tipo antes de fazer cast, usar type guards',\n unhandledPromiseMessage: 'Promise criada sem tratamento de then/catch',\n unhandledPromiseSuggestion: 'Adicionar .catch() ou .then() para tratar o resultado',\n deepNestingMessage: (depth: number) => `Aninhamento excessivo (${depth} níveis) - alta probabilidade de bugs`,\n deepNestingSuggestion: 'Extrair lógica em funções menores para reduzir complexidade',\n magicNumberMessage: (num: string) => `Número mágico: ${num} - considerar extrair para constante nomeada`,\n magicNumberSuggestion: (num: string) => `Criar constante com nome descritivo para ${num}`,\n unsafeComparisonMessage: (preview: string) => `Comparação potencialmente insegura: ${preview}`,\n unsafeComparisonSuggestion: 'Usar === em vez de ==, evitar hardcoded secrets'\n} as const;\n"]}
1
+ {"version":3,"file":"detector-bugs-ml-messages.js","sourceRoot":"","sources":["../../../../../src/core/messages/pt/analysts/detector-bugs-ml-messages.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,iBAAiB,EAAE,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,mCAAmC,IAAI,gBAAgB,OAAO,EAAE;IACtH,SAAS,EAAE,CAAC,SAAiB,EAAE,OAAe,EAAE,EAAE,CAAC,OAAO,SAAS,MAAM,OAAO,EAAE;IAClF,uBAAuB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,kCAAkC,KAAK,GAAG;IACtF,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,mBAAmB,KAAK,GAAG;IAC7D,mBAAmB,EAAE,CAAC,KAAa,EAAE,gBAAwB,EAAE,EAAE,CAAC,yBAAyB,KAAK,UAAU;IAC1G,iBAAiB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,wBAAwB,KAAK,UAAU;IAC7E,cAAc,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,+BAA+B,KAAK,GAAG;IAC1E,eAAe,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,2BAA2B,KAAK,GAAG;IACvE,qBAAqB,EAAE,iCAAiC;IACxD,WAAW,EAAE,qBAAqB;IAElC,uBAAuB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,sCAAsC,OAAO,EAAE;IAC7F,0BAA0B,EAAE,qEAAqE;IACjG,yBAAyB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,YAAY,QAAQ,kDAAkD;IACvH,4BAA4B,EAAE,6BAA6B;IAC3D,iBAAiB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,yBAAyB,OAAO,cAAc;IACtF,oBAAoB,EAAE,qEAAqE;IAC3F,oBAAoB,EAAE,qEAAqE;IAC3F,uBAAuB,EAAE,2DAA2D;IACpF,qBAAqB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,4BAA4B,OAAO,EAAE;IACjF,wBAAwB,EAAE,sDAAsD;IAChF,uBAAuB,EAAE,6CAA6C;IACtE,0BAA0B,EAAE,uDAAuD;IACnF,kBAAkB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,0BAA0B,KAAK,uCAAuC;IAC7G,qBAAqB,EAAE,6DAA6D;IACpF,kBAAkB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,kBAAkB,GAAG,8CAA8C;IACxG,qBAAqB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,4CAA4C,GAAG,EAAE;IACzF,uBAAuB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,uCAAuC,OAAO,EAAE;IAC9F,0BAA0B,EAAE,iDAAiD;CACrE,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\nexport const BugMlMensagens = {\n altaProbabilidade: (prob: string, fatores: string) => `ML: Alta probabilidade de bugs (${prob}%). Fatores: ${fatores}`,\n mlPattern: (confianca: string, message: string) => `[ML ${confianca}%] ${message}`,\n complexidadeCiclomatica: (count: number) => `Alta complexidade ciclomática (${count})`,\n muitasFuncoes: (count: number) => `Muitas funções (${count})`,\n aninhamentoProfundo: (depth: number, _maxNestingDepth: number) => `Aninhamento profundo (${depth} níveis)`,\n arquivoMuitoLongo: (count: number) => `Arquivo muito longo (${count} linhas)`,\n castsInseguros: (count: number) => `Casts inseguros frequentes (${count})`,\n usoExcessivoAny: (count: number) => `Uso excessivo de 'any' (${count})`,\n promisesSemTratamento: 'Promises sem tratamento de erro',\n muitosTODOs: 'Muitos TODOs/FIXMEs',\n // Pattern messages\n nullPointerDerefMessage: (preview: string) => `Possível null pointer dereference: ${preview}`,\n nullPointerDerefSuggestion: 'Verificar se o resultado é null/undefined antes de encadear métodos',\n chamadaSemOptionalMessage: (funcName: string) => `Chamada '${funcName}' sem optional chaining pode causar null pointer`,\n chamadaSemOptionalSuggestion: 'Use optional chaining: `?.`',\n memoryLeakMessage: (preview: string) => `Possível memory leak: ${preview} sem cleanup`,\n memoryLeakSuggestion: 'Adicionar cleanup (removeEventListener, clearInterval, unsubscribe)',\n raceConditionMessage: 'Possível race condition: estado compartilhado entre operações async',\n raceConditionSuggestion: 'Usar locks ou atomic operations para estado compartilhado',\n typeAssumptionMessage: (preview: string) => `Type assertion insegura: ${preview}`,\n typeAssumptionSuggestion: 'Validar o tipo antes de fazer cast, usar type guards',\n unhandledPromiseMessage: 'Promise criada sem tratamento de then/catch',\n unhandledPromiseSuggestion: 'Adicionar .catch() ou .then() para tratar o resultado',\n deepNestingMessage: (depth: number) => `Aninhamento excessivo (${depth} níveis) - alta probabilidade de bugs`,\n deepNestingSuggestion: 'Extrair lógica em funções menores para reduzir complexidade',\n magicNumberMessage: (num: string) => `Número mágico: ${num} - considerar extrair para constante nomeada`,\n magicNumberSuggestion: (num: string) => `Criar constante com nome descritivo para ${num}`,\n unsafeComparisonMessage: (preview: string) => `Comparação potencialmente insegura: ${preview}`,\n unsafeComparisonSuggestion: 'Usar === em vez de ==, evitar hardcoded secrets'\n} as const;\n"]}
@@ -1,5 +1,5 @@
1
- import { CHAVE_PRIVADA_CAMINHO, CHAVE_PUBLICA_CAMINHO } from './index.js';
2
1
  import { messages } from '../core/messages/index.js';
2
+ import { CHAVE_PRIVADA_CAMINHO, CHAVE_PUBLICA_CAMINHO } from './index.js';
3
3
  import { lerEstado, salvarEstado } from '../shared/persistence/index.js';
4
4
  import * as openpgp from 'openpgp';
5
5
  export async function gerarParDeChaves() {
@@ -1 +1 @@
1
- {"version":3,"file":"gpg.js","sourceRoot":"","sources":["../../src/guardian/gpg.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { CHAVE_PRIVADA_CAMINHO, CHAVE_PUBLICA_CAMINHO } from '@guardian';\nimport { messages } from '@core/messages';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\nimport * as openpgp from 'openpgp';\n\nexport interface ParDeChaves {\n chavePrivada: string;\n chavePublica: string;\n}\n\nexport async function gerarParDeChaves(): Promise<ParDeChaves> {\n const { privateKey, publicKey } = await openpgp.generateKey({\n type: 'ecc',\n curve: 'ed25519Legacy',\n userIDs: [{ name: 'Tutanus Guardian', comment: 'Chave do sistema de integridade Guardian' }],\n format: 'armored'\n });\n\n return { chavePrivada: privateKey, chavePublica: publicKey };\n}\n\nexport async function assinarConteudo(conteudo: string, chavePrivadaArmored?: string): Promise<string> {\n const chavePrivada = chavePrivadaArmored || await carregarChavePrivada();\n\n if (!chavePrivada) {\n throw new Error(messages.GuardianMensagens.gpgChavePrivadaIndisponivel);\n }\n\n const chavePrivadaObj = await openpgp.readPrivateKey({ armoredKey: chavePrivada });\n const assinatura = await openpgp.sign({\n message: await openpgp.createMessage({ text: conteudo }),\n signingKeys: chavePrivadaObj,\n detached: true\n });\n\n return assinatura as string;\n}\n\nexport async function verificarAssinatura(\n conteudo: string,\n assinaturaArmored: string,\n chavePublicaArmored?: string\n): Promise<boolean> {\n const chavePublica = chavePublicaArmored || await carregarChavePublica();\n\n if (!chavePublica) {\n throw new Error(messages.GuardianMensagens.gpgChavePublicaIndisponivel);\n }\n\n const chavePublicaObj = await openpgp.readKey({ armoredKey: chavePublica });\n const mensagem = await openpgp.createMessage({ text: conteudo });\n const assinaturaObj = await openpgp.readSignature({ armoredSignature: assinaturaArmored });\n\n try {\n const resultado = await openpgp.verify({\n message: mensagem,\n signature: assinaturaObj,\n verificationKeys: [chavePublicaObj]\n });\n\n const { verified } = resultado.signatures[0];\n await verified;\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function carregarChavePublica(): Promise<string | null> {\n try {\n return await lerEstado<string>(CHAVE_PUBLICA_CAMINHO);\n } catch {\n return null;\n }\n}\n\nexport async function carregarChavePrivada(): Promise<string | null> {\n try {\n return await lerEstado<string>(CHAVE_PRIVADA_CAMINHO);\n } catch {\n return null;\n }\n}\n\nexport async function salvarChavePublica(chave: string): Promise<void> {\n await salvarEstado(CHAVE_PUBLICA_CAMINHO, chave);\n}\n\nexport async function salvarChavePrivada(chave: string): Promise<void> {\n await salvarEstado(CHAVE_PRIVADA_CAMINHO, chave);\n}\n\nexport async function inicializarChaves(): Promise<ParDeChaves> {\n const pubExistente = await carregarChavePublica();\n const privExistente = await carregarChavePrivada();\n\n if (pubExistente && privExistente) {\n return { chavePrivada: privExistente, chavePublica: pubExistente };\n }\n\n const par = await gerarParDeChaves();\n await salvarChavePublica(par.chavePublica);\n await salvarChavePrivada(par.chavePrivada);\n return par;\n}\n"]}
1
+ {"version":3,"file":"gpg.js","sourceRoot":"","sources":["../../src/guardian/gpg.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { messages } from '@core/messages';\nimport { CHAVE_PRIVADA_CAMINHO, CHAVE_PUBLICA_CAMINHO } from '@guardian';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\nimport * as openpgp from 'openpgp';\n\nexport interface ParDeChaves {\n chavePrivada: string;\n chavePublica: string;\n}\n\nexport async function gerarParDeChaves(): Promise<ParDeChaves> {\n const { privateKey, publicKey } = await openpgp.generateKey({\n type: 'ecc',\n curve: 'ed25519Legacy',\n userIDs: [{ name: 'Tutanus Guardian', comment: 'Chave do sistema de integridade Guardian' }],\n format: 'armored'\n });\n\n return { chavePrivada: privateKey, chavePublica: publicKey };\n}\n\nexport async function assinarConteudo(conteudo: string, chavePrivadaArmored?: string): Promise<string> {\n const chavePrivada = chavePrivadaArmored || await carregarChavePrivada();\n\n if (!chavePrivada) {\n throw new Error(messages.GuardianMensagens.gpgChavePrivadaIndisponivel);\n }\n\n const chavePrivadaObj = await openpgp.readPrivateKey({ armoredKey: chavePrivada });\n const assinatura = await openpgp.sign({\n message: await openpgp.createMessage({ text: conteudo }),\n signingKeys: chavePrivadaObj,\n detached: true\n });\n\n return assinatura as string;\n}\n\nexport async function verificarAssinatura(\n conteudo: string,\n assinaturaArmored: string,\n chavePublicaArmored?: string\n): Promise<boolean> {\n const chavePublica = chavePublicaArmored || await carregarChavePublica();\n\n if (!chavePublica) {\n throw new Error(messages.GuardianMensagens.gpgChavePublicaIndisponivel);\n }\n\n const chavePublicaObj = await openpgp.readKey({ armoredKey: chavePublica });\n const mensagem = await openpgp.createMessage({ text: conteudo });\n const assinaturaObj = await openpgp.readSignature({ armoredSignature: assinaturaArmored });\n\n try {\n const resultado = await openpgp.verify({\n message: mensagem,\n signature: assinaturaObj,\n verificationKeys: [chavePublicaObj]\n });\n\n const { verified } = resultado.signatures[0];\n await verified;\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function carregarChavePublica(): Promise<string | null> {\n try {\n return await lerEstado<string>(CHAVE_PUBLICA_CAMINHO);\n } catch {\n return null;\n }\n}\n\nexport async function carregarChavePrivada(): Promise<string | null> {\n try {\n return await lerEstado<string>(CHAVE_PRIVADA_CAMINHO);\n } catch {\n return null;\n }\n}\n\nexport async function salvarChavePublica(chave: string): Promise<void> {\n await salvarEstado(CHAVE_PUBLICA_CAMINHO, chave);\n}\n\nexport async function salvarChavePrivada(chave: string): Promise<void> {\n await salvarEstado(CHAVE_PRIVADA_CAMINHO, chave);\n}\n\nexport async function inicializarChaves(): Promise<ParDeChaves> {\n const pubExistente = await carregarChavePublica();\n const privExistente = await carregarChavePrivada();\n\n if (pubExistente && privExistente) {\n return { chavePrivada: privExistente, chavePublica: pubExistente };\n }\n\n const par = await gerarParDeChaves();\n await salvarChavePublica(par.chavePublica);\n await salvarChavePrivada(par.chavePrivada);\n return par;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { MemoryMessage, TutanusContextState, TutanusRunRecord } from '../types/index.js';
2
2
  import type { RunEndUpdate, RunStartInput } from '../types/shared/memory.js';
3
- export type { MemoryMessage, TutanusContextState, TutanusRunRecord, RunEndUpdate, RunStartInput };
3
+ export type { MemoryMessage, RunEndUpdate, RunStartInput, TutanusContextState, TutanusRunRecord };
4
4
  export declare class ConversationMemory {
5
5
  private maxHistory;
6
6
  private persistCaminho?;
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/shared/memory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,GAAG,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG7E,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAIlG,qBAAa,kBAAkB;IAEjB,OAAO,CAAC,UAAU;IAAO,OAAO,CAAC,cAAc,CAAC;IAD5D,OAAO,CAAC,OAAO,CAAuB;gBAClB,UAAU,SAAK,EAAU,cAAc,CAAC,EAAE,MAAM,YAAA;IAC9D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAI3C,UAAU,IAAI;QAEZ,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IASK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,OAAO;CAYtB;AAID,qBAAa,oBAAoB;IAMnB,OAAO,CAAC,OAAO;IAAO,OAAO,CAAC,cAAc,CAAC;IALzD,OAAO,CAAC,KAAK,CAIX;gBACkB,OAAO,SAAK,EAAU,cAAc,CAAC,EAAE,MAAM,YAAA;IAC3D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B,QAAQ,IAAI,mBAAmB;IAU/B,UAAU,IAAI,gBAAgB,GAAG,SAAS;IAG1C,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAGhD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBrD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAKd,OAAO;CAWtB;AACD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAMpE;AACD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAK7E"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/shared/memory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,GAAG,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG7E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAC,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;AAIjG,qBAAa,kBAAkB;IAEjB,OAAO,CAAC,UAAU;IAAO,OAAO,CAAC,cAAc,CAAC;IAD5D,OAAO,CAAC,OAAO,CAAuB;gBAClB,UAAU,SAAK,EAAU,cAAc,CAAC,EAAE,MAAM,YAAA;IAC9D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAI3C,UAAU,IAAI;QAEZ,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IASK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,OAAO;CAYtB;AAID,qBAAa,oBAAoB;IAMnB,OAAO,CAAC,OAAO;IAAO,OAAO,CAAC,cAAc,CAAC;IALzD,OAAO,CAAC,KAAK,CAIX;gBACkB,OAAO,SAAK,EAAU,cAAc,CAAC,EAAE,MAAM,YAAA;IAC3D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B,QAAQ,IAAI,mBAAmB;IAU/B,UAAU,IAAI,gBAAgB,GAAG,SAAS;IAG1C,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAGhD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBrD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAKd,OAAO;CAWtB;AACD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAMpE;AACD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAK7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/shared/memory.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\n\nimport type { MemoryMessage, TutanusContextState, TutanusRunRecord } from '@';\n\nimport type { RunEndUpdate, RunStartInput } from '../types/shared/memory.js';\n\n// Re-exporta para compatibilidade com código existente\nexport type { MemoryMessage, TutanusContextState, TutanusRunRecord, RunEndUpdate, RunStartInput };\n/**\n * Manages conversation memory with persistent storage.\n */\nexport class ConversationMemory {\n private history: MemoryMessage[] = [];\n constructor(private maxHistory = 10, private persistCaminho?: string) { }\n async init(): Promise<void> {\n if (!this.persistCaminho) return;\n try {\n const raw = await readFile(this.persistCaminho, 'utf-8');\n this.history = JSON.parse(raw);\n } catch {\n this.history = [];\n }\n }\n async addMessage(message: MemoryMessage): Promise<void> {\n this.history.push(message);\n if (this.history.length > this.maxHistory * 2) {\n this.history = this.history.slice(-this.maxHistory * 2);\n }\n await this.persist();\n }\n getContext(lastN?: number): MemoryMessage[] {\n if (lastN) return this.history.slice(-lastN);\n return [...this.history];\n }\n getSummary(): {\n // @tutanus-disable: tipo-literal-inline-complexo\n totalMessages: number;\n userMessages: number;\n assistantMessages: number;\n firstMessage?: string;\n lastMessage?: string;\n } {\n return {\n totalMessages: this.history.length,\n userMessages: this.history.filter(metrica => metrica.role === 'user').length,\n assistantMessages: this.history.filter(metrica => metrica.role === 'assistant').length,\n firstMessage: this.history[0]?.timestamp,\n lastMessage: this.history[this.history.length - 1]?.timestamp\n };\n }\n async clear(): Promise<void> {\n this.history = [];\n await this.persist();\n }\n private async persist(): Promise<void> {\n if (!this.persistCaminho) return;\n const snapshot = [...this.history];\n try {\n await mkdir(dirname(this.persistCaminho), {\n recursive: true\n });\n await writeFile(this.persistCaminho, JSON.stringify(snapshot, null, 2), 'utf-8');\n } catch {\n // ignore persist errors\n }\n }\n}\n/**\n * Manages persistent context memory for Tutanus runs.\n */\nexport class TutanusContextMemory {\n private state: TutanusContextState = {\n schemaVersion: 1,\n lastRuns: [],\n preferences: {} as Record<string, unknown>\n };\n constructor(private maxRuns = 20, private persistCaminho?: string) { }\n async init(): Promise<void> {\n if (!this.persistCaminho) return;\n try {\n const raw = await readFile(this.persistCaminho, 'utf-8');\n const parsed = JSON.parse(raw) as Partial<TutanusContextState>;\n if (parsed && parsed.schemaVersion === 1) {\n this.state = {\n // @tutanus-disable: tipo-literal-inline-complexo\n schemaVersion: 1,\n lastRuns: Array.isArray(parsed.lastRuns) ? parsed.lastRuns as TutanusRunRecord[] : [],\n preferences: parsed.preferences && typeof parsed.preferences === 'object' ? parsed.preferences as Record<string, unknown> : {} as Record<string, unknown>\n };\n }\n } catch {\n // mantém defaults\n }\n }\n getState(): TutanusContextState {\n return {\n // @tutanus-disable: tipo-literal-inline-complexo\n schemaVersion: 1,\n lastRuns: [...this.state.lastRuns],\n preferences: {\n ...this.state.preferences\n }\n };\n }\n getLastRun(): TutanusRunRecord | undefined {\n return this.state.lastRuns[this.state.lastRuns.length - 1];\n }\n getPreference<T = unknown>(key: string): T | undefined {\n return this.state.preferences[key] as T | undefined;\n }\n async setPreference(key: string, value: unknown): Promise<void> {\n this.state.preferences[key] = value;\n await this.persist();\n }\n async recordRunStart(input: RunStartInput): Promise<string> {\n const id = `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n const record: TutanusRunRecord = {\n id,\n timestamp: input.timestamp ?? new Date().toISOString(),\n cwd: input.cwd,\n argv: [...input.argv],\n version: input.version\n };\n this.state.lastRuns.push(record);\n if (this.state.lastRuns.length > this.maxRuns) {\n this.state.lastRuns = this.state.lastRuns.slice(-this.maxRuns);\n }\n await this.persist();\n return id;\n }\n async recordRunEnd(id: string, update: RunEndUpdate): Promise<void> {\n const idx = this.state.lastRuns.findIndex(raiz => raiz.id === id);\n if (idx === -1) return;\n const prev = this.state.lastRuns[idx];\n this.state.lastRuns[idx] = {\n ...prev,\n ok: update.ok,\n exitCode: update.exitCode,\n durationMs: update.durationMs,\n error: update.error\n };\n await this.persist();\n }\n async clear(): Promise<void> {\n this.state.lastRuns = [];\n this.state.preferences = {} as Record<string, unknown>;\n await this.persist();\n }\n private async persist(): Promise<void> {\n if (!this.persistCaminho) return;\n try {\n await mkdir(dirname(this.persistCaminho), {\n recursive: true\n });\n await writeFile(this.persistCaminho, JSON.stringify(this.state, null, 2), 'utf-8');\n } catch {\n // ignore persist errors\n }\n }\n}\nexport async function getDefaultMemory(): Promise<ConversationMemory> {\n // Preferimos memória por projeto (cwd) para evitar misturar repositórios.\n const persistCaminho = join(process.cwd(), '.tutanus', 'history.json');\n const mem = new ConversationMemory(10, persistCaminho);\n await mem.init();\n return mem;\n}\nexport async function getDefaultContextMemory(): Promise<TutanusContextMemory> {\n const persistCaminho = join(process.cwd(), '.tutanus', 'context.json');\n const mem = new TutanusContextMemory(20, persistCaminho);\n await mem.init();\n return mem;\n}"]}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/shared/memory.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\n\nimport type { MemoryMessage, TutanusContextState, TutanusRunRecord } from '@';\n\nimport type { RunEndUpdate, RunStartInput } from '../types/shared/memory.js';\n\n// Re-exporta para compatibilidade com código existente\nexport type { MemoryMessage, RunEndUpdate, RunStartInput,TutanusContextState, TutanusRunRecord };\n/**\n * Manages conversation memory with persistent storage.\n */\nexport class ConversationMemory {\n private history: MemoryMessage[] = [];\n constructor(private maxHistory = 10, private persistCaminho?: string) { }\n async init(): Promise<void> {\n if (!this.persistCaminho) return;\n try {\n const raw = await readFile(this.persistCaminho, 'utf-8');\n this.history = JSON.parse(raw);\n } catch {\n this.history = [];\n }\n }\n async addMessage(message: MemoryMessage): Promise<void> {\n this.history.push(message);\n if (this.history.length > this.maxHistory * 2) {\n this.history = this.history.slice(-this.maxHistory * 2);\n }\n await this.persist();\n }\n getContext(lastN?: number): MemoryMessage[] {\n if (lastN) return this.history.slice(-lastN);\n return [...this.history];\n }\n getSummary(): {\n // @tutanus-disable: tipo-literal-inline-complexo\n totalMessages: number;\n userMessages: number;\n assistantMessages: number;\n firstMessage?: string;\n lastMessage?: string;\n } {\n return {\n totalMessages: this.history.length,\n userMessages: this.history.filter(metrica => metrica.role === 'user').length,\n assistantMessages: this.history.filter(metrica => metrica.role === 'assistant').length,\n firstMessage: this.history[0]?.timestamp,\n lastMessage: this.history[this.history.length - 1]?.timestamp\n };\n }\n async clear(): Promise<void> {\n this.history = [];\n await this.persist();\n }\n private async persist(): Promise<void> {\n if (!this.persistCaminho) return;\n const snapshot = [...this.history];\n try {\n await mkdir(dirname(this.persistCaminho), {\n recursive: true\n });\n await writeFile(this.persistCaminho, JSON.stringify(snapshot, null, 2), 'utf-8');\n } catch {\n // ignore persist errors\n }\n }\n}\n/**\n * Manages persistent context memory for Tutanus runs.\n */\nexport class TutanusContextMemory {\n private state: TutanusContextState = {\n schemaVersion: 1,\n lastRuns: [],\n preferences: {} as Record<string, unknown>\n };\n constructor(private maxRuns = 20, private persistCaminho?: string) { }\n async init(): Promise<void> {\n if (!this.persistCaminho) return;\n try {\n const raw = await readFile(this.persistCaminho, 'utf-8');\n const parsed = JSON.parse(raw) as Partial<TutanusContextState>;\n if (parsed && parsed.schemaVersion === 1) {\n this.state = {\n // @tutanus-disable: tipo-literal-inline-complexo\n schemaVersion: 1,\n lastRuns: Array.isArray(parsed.lastRuns) ? parsed.lastRuns as TutanusRunRecord[] : [],\n preferences: parsed.preferences && typeof parsed.preferences === 'object' ? parsed.preferences as Record<string, unknown> : {} as Record<string, unknown>\n };\n }\n } catch {\n // mantém defaults\n }\n }\n getState(): TutanusContextState {\n return {\n // @tutanus-disable: tipo-literal-inline-complexo\n schemaVersion: 1,\n lastRuns: [...this.state.lastRuns],\n preferences: {\n ...this.state.preferences\n }\n };\n }\n getLastRun(): TutanusRunRecord | undefined {\n return this.state.lastRuns[this.state.lastRuns.length - 1];\n }\n getPreference<T = unknown>(key: string): T | undefined {\n return this.state.preferences[key] as T | undefined;\n }\n async setPreference(key: string, value: unknown): Promise<void> {\n this.state.preferences[key] = value;\n await this.persist();\n }\n async recordRunStart(input: RunStartInput): Promise<string> {\n const id = `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n const record: TutanusRunRecord = {\n id,\n timestamp: input.timestamp ?? new Date().toISOString(),\n cwd: input.cwd,\n argv: [...input.argv],\n version: input.version\n };\n this.state.lastRuns.push(record);\n if (this.state.lastRuns.length > this.maxRuns) {\n this.state.lastRuns = this.state.lastRuns.slice(-this.maxRuns);\n }\n await this.persist();\n return id;\n }\n async recordRunEnd(id: string, update: RunEndUpdate): Promise<void> {\n const idx = this.state.lastRuns.findIndex(raiz => raiz.id === id);\n if (idx === -1) return;\n const prev = this.state.lastRuns[idx];\n this.state.lastRuns[idx] = {\n ...prev,\n ok: update.ok,\n exitCode: update.exitCode,\n durationMs: update.durationMs,\n error: update.error\n };\n await this.persist();\n }\n async clear(): Promise<void> {\n this.state.lastRuns = [];\n this.state.preferences = {} as Record<string, unknown>;\n await this.persist();\n }\n private async persist(): Promise<void> {\n if (!this.persistCaminho) return;\n try {\n await mkdir(dirname(this.persistCaminho), {\n recursive: true\n });\n await writeFile(this.persistCaminho, JSON.stringify(this.state, null, 2), 'utf-8');\n } catch {\n // ignore persist errors\n }\n }\n}\nexport async function getDefaultMemory(): Promise<ConversationMemory> {\n // Preferimos memória por projeto (cwd) para evitar misturar repositórios.\n const persistCaminho = join(process.cwd(), '.tutanus', 'history.json');\n const mem = new ConversationMemory(10, persistCaminho);\n await mem.init();\n return mem;\n}\nexport async function getDefaultContextMemory(): Promise<TutanusContextMemory> {\n const persistCaminho = join(process.cwd(), '.tutanus', 'context.json');\n const mem = new TutanusContextMemory(20, persistCaminho);\n await mem.init();\n return mem;\n}"]}
@@ -17,7 +17,7 @@ export * from './cli/handlers.js';
17
17
  export * from './cli/log-extensions.js';
18
18
  export * from './cli/metrics.js';
19
19
  export * from './cli/metrics-analysts.js';
20
- export type { FiltrosProcessados, FixTypesOptions, FlagsBrutas, FlagsNormalizadas, FormatoSaida, ModoAutoFix, ModoOperacao, NivelLog, OpcoesProcessamentoFiltros, OtimizarSvgOptions, TutanusGlobalFlags, ResultadoValidacao, TipoLinguagemProjeto, } from './cli/options.js';
20
+ export type { FiltrosProcessados, FixTypesOptions, FlagsBrutas, FlagsNormalizadas, FormatoSaida, ModoAutoFix, ModoOperacao, NivelLog, OpcoesProcessamentoFiltros, OtimizarSvgOptions, ResultadoValidacao, TipoLinguagemProjeto, TutanusGlobalFlags, } from './cli/options.js';
21
21
  export * from './cli/processing-diagnostic.js';
22
22
  export * from './common/analysts.js';
23
23
  export * from './common/api-types.js';
@@ -64,7 +64,7 @@ export * from './core/runtime.js';
64
64
  export * from './sdk/analyzer.js';
65
65
  export * from './shared/index.js';
66
66
  export * from './project/context.js';
67
- export type { FragmentOptions, ManifestPart, RelatorioCompleto, } from './reports/fragmentation.js';
67
+ export type { FileEntryFragmentacao, FragmentOptions, Manifest, ManifestPart, ManifestPartFragmentacao, RelatorioCompleto, RelatorioCompletoFragmentacao, } from './reports/fragmentation.js';
68
68
  export * from './reports/reader.js';
69
69
  export * from './caretakers/imports.js';
70
70
  export * from './caretakers/imports-barrel.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAQA,cAAc,uBAAuB,CAAC;AAOtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAgB1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sCAAsC,CAAC;AAQrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAStC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAW9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AAGnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAG1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAIzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAElC,cAAc,sBAAsB,CAAC;AAOrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AAgCxC,cAAc,mBAAmB,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n\n/**\n * Fonte única de exportação de tipos\n * Apenas re-exports limpos - toda lógica fica nos arquivos dedicados\n */\n\n// Analistas\nexport * from './analysts/context.js';\nexport type {\n ASTNode,\n CorrecaoConfig,\n CorrecaoResult,\n ResultadoAnaliseEstrutural,\n} from './analysts/corrections.js';\nexport * from './analysts/corrections/index.js';\nexport * from './analysts/detectors.js';\nexport * from './analysts/dynamic-modules.js';\nexport * from './analysts/github-actions-plugins.js';\nexport * from './analysts/handlers.js';\nexport * from './analysts/metrics.js';\nexport * from './analysts/scoring.js';\nexport * from './analysts/strategists.js';\n\n// CLI\nexport * from './cli/commands.js';\nexport * from './cli/diagnostic.js';\nexport * from './cli/diagnostic-handlers.js';\nexport * from './cli/exporters.js';\nexport * from './cli/formatters.js';\nexport * from './cli/handlers.js';\nexport * from './cli/log-extensions.js';\nexport * from './cli/metrics.js';\nexport * from './cli/metrics-analysts.js';\nexport type {\n FiltrosProcessados,\n FixTypesOptions,\n FlagsBrutas,\n FlagsNormalizadas,\n FormatoSaida,\n ModoAutoFix,\n ModoOperacao,\n NivelLog,\n OpcoesProcessamentoFiltros,\n OtimizarSvgOptions,\n TutanusGlobalFlags,\n ResultadoValidacao,\n TipoLinguagemProjeto,\n} from './cli/options.js';\nexport * from './cli/processing-diagnostic.js';\n\n// Comum\nexport * from './common/analysts.js';\nexport * from './common/api-types.js';\nexport * from './common/file-entries.js';\nexport * from './common/occurrences.js';\nexport * from './common/package-json.js';\nexport * from './common/utils.js';\n\n// Estrutura\nexport * from './structure/archetypes.js';\nexport * from './structure/plano-structure.js';\n\n// Guardian\nexport * from './guardian/baseline.js';\nexport * from './guardian/integrity.js';\nexport * from './guardian/records.js';\nexport * from './guardian/result.js';\nexport * from './guardian/snapshot.js';\n\n// Licensas\nexport * from './licenses/licenses.js';\n\n// Vulnerabilidades\nexport * from './vulnerabilities/vulnerabilities.js';\n\n// Core - Re-export via core/index.ts para paths reorganizados\nexport type { QuickFix } from './core/corrections/auto-fix.js';\nexport type {\n MetricasGlobais,\n SimbolosLog,\n} from './core/execution/inquisitor.js';\nexport * from './core/execution/registry.js';\nexport * from './core/execution/schema.js';\nexport * from './core/execution/workers.js';\nexport * from './core/parsing/parser.js';\nexport * from './core/utils/chalk.js';\n\n// Core Messages (tipos que não conflitam com relatorios)\nexport type {\n AgrupamentoConfig,\n ConfigPrioridade,\n FiltrosConfig,\n MetadadosRelatorioEstendido,\n} from './core/messages.js';\nexport * from './core/messages/index.js';\nexport * from './core/messages/log.js';\n\n// Core Execution\nexport * from './core/execution/ambiente.js';\nexport * from './core/execution/ast-cache.js';\nexport type {\n CacheValor,\n EstadoIncremental,\n MetricasGlobaisExecutor,\n RegistroHistorico,\n} from './core/execution/executor.js';\nexport type {\n EstadoIncArquivo,\n EstadoIncrementalInquisidor,\n} from './core/execution/inquisitor.js';\nexport * from './core/execution/linguagens.js';\nexport * from './core/execution/parse-errors.js';\nexport * from './core/execution/results.js';\nexport * from './core/execution/structure-json.js';\n\n// Core Parsing\nexport * from './core/parsing/babel-narrow.js';\nexport * from './core/parsing/plugins.js';\n\n// Core Config\nexport * from './core/config/config.js';\nexport * from './core/config/filters.js';\n\n// Projeto\nexport type { TipoProjeto } from './project/detection.js';\nexport * from './project/detection.js';\n\n// Relatorios\nexport * from './reports/compliance.js';\nexport * from './reports/index.js';\n\n// Runtime\nexport * from './core/runtime.js';\n\n// SDK types\nexport * from './sdk/analyzer.js';\n\n// Shared - exportação centralizada\nexport * from './shared/index.js';\n// Contexto movido para projeto/\nexport * from './project/context.js';\n// Fragmentação e Leitor movidos para relatorios/\nexport type {\n FragmentOptions,\n ManifestPart,\n RelatorioCompleto,\n} from './reports/fragmentation.js';\nexport * from './reports/reader.js';\n\n// Zeladores\nexport * from './caretakers/imports.js';\nexport * from './caretakers/imports-barrel.js';\nexport * from './caretakers/map-reversion.js';\nexport * from './caretakers/pruning.js';\nexport * from './caretakers/scoring.js';\n\n// GitHub Actions Reports\nexport type {\n DadosRelatorioGithubActions,\n FormatoRelatorio,\n OpcoesRelatorio,\n} from './analysts/github-actions-reports.js';\n\n// CI Modules Types\nexport type {\n AzureCorrection,\n AzureScoreResult,\n DadosRelatorioAzure,\n} from './analysts/azure-pipelines.js';\nexport type {\n CircleCICorrection,\n CircleCIScoreResult,\n DadosRelatorioCircleCI,\n} from './analysts/circleci.js';\nexport type {\n DadosRelatorioGitLabCI,\n GitLabCICorrection,\n GitLabCIScoreResult,\n} from './analysts/gitlab-ci.js';\nexport type {\n DadosRelatorioJenkins,\n JenkinsCorrection,\n JenkinsScoreResult,\n} from './analysts/jenkins.js';\n\n// GitHub App\nexport * from './github/index.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAQA,cAAc,uBAAuB,CAAC;AAOtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAgB1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sCAAsC,CAAC;AAQrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAStC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAW9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AAGnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAG1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAIzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAElC,cAAc,sBAAsB,CAAC;AAWrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AAgCxC,cAAc,mBAAmB,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n\n/**\n * Fonte única de exportação de tipos\n * Apenas re-exports limpos - toda lógica fica nos arquivos dedicados\n */\n\n// Analistas\nexport * from './analysts/context.js';\nexport type {\n ASTNode,\n CorrecaoConfig,\n CorrecaoResult,\n ResultadoAnaliseEstrutural,\n} from './analysts/corrections.js';\nexport * from './analysts/corrections/index.js';\nexport * from './analysts/detectors.js';\nexport * from './analysts/dynamic-modules.js';\nexport * from './analysts/github-actions-plugins.js';\nexport * from './analysts/handlers.js';\nexport * from './analysts/metrics.js';\nexport * from './analysts/scoring.js';\nexport * from './analysts/strategists.js';\n\n// CLI\nexport * from './cli/commands.js';\nexport * from './cli/diagnostic.js';\nexport * from './cli/diagnostic-handlers.js';\nexport * from './cli/exporters.js';\nexport * from './cli/formatters.js';\nexport * from './cli/handlers.js';\nexport * from './cli/log-extensions.js';\nexport * from './cli/metrics.js';\nexport * from './cli/metrics-analysts.js';\nexport type {\n FiltrosProcessados,\n FixTypesOptions,\n FlagsBrutas,\n FlagsNormalizadas,\n FormatoSaida,\n ModoAutoFix,\n ModoOperacao,\n NivelLog,\n OpcoesProcessamentoFiltros,\n OtimizarSvgOptions,\n ResultadoValidacao,\n TipoLinguagemProjeto,\n TutanusGlobalFlags,\n} from './cli/options.js';\nexport * from './cli/processing-diagnostic.js';\n\n// Comum\nexport * from './common/analysts.js';\nexport * from './common/api-types.js';\nexport * from './common/file-entries.js';\nexport * from './common/occurrences.js';\nexport * from './common/package-json.js';\nexport * from './common/utils.js';\n\n// Estrutura\nexport * from './structure/archetypes.js';\nexport * from './structure/plano-structure.js';\n\n// Guardian\nexport * from './guardian/baseline.js';\nexport * from './guardian/integrity.js';\nexport * from './guardian/records.js';\nexport * from './guardian/result.js';\nexport * from './guardian/snapshot.js';\n\n// Licensas\nexport * from './licenses/licenses.js';\n\n// Vulnerabilidades\nexport * from './vulnerabilities/vulnerabilities.js';\n\n// Core - Re-export via core/index.ts para paths reorganizados\nexport type { QuickFix } from './core/corrections/auto-fix.js';\nexport type {\n MetricasGlobais,\n SimbolosLog,\n} from './core/execution/inquisitor.js';\nexport * from './core/execution/registry.js';\nexport * from './core/execution/schema.js';\nexport * from './core/execution/workers.js';\nexport * from './core/parsing/parser.js';\nexport * from './core/utils/chalk.js';\n\n// Core Messages (tipos que não conflitam com relatorios)\nexport type {\n AgrupamentoConfig,\n ConfigPrioridade,\n FiltrosConfig,\n MetadadosRelatorioEstendido,\n} from './core/messages.js';\nexport * from './core/messages/index.js';\nexport * from './core/messages/log.js';\n\n// Core Execution\nexport * from './core/execution/ambiente.js';\nexport * from './core/execution/ast-cache.js';\nexport type {\n CacheValor,\n EstadoIncremental,\n MetricasGlobaisExecutor,\n RegistroHistorico,\n} from './core/execution/executor.js';\nexport type {\n EstadoIncArquivo,\n EstadoIncrementalInquisidor,\n} from './core/execution/inquisitor.js';\nexport * from './core/execution/linguagens.js';\nexport * from './core/execution/parse-errors.js';\nexport * from './core/execution/results.js';\nexport * from './core/execution/structure-json.js';\n\n// Core Parsing\nexport * from './core/parsing/babel-narrow.js';\nexport * from './core/parsing/plugins.js';\n\n// Core Config\nexport * from './core/config/config.js';\nexport * from './core/config/filters.js';\n\n// Projeto\nexport type { TipoProjeto } from './project/detection.js';\nexport * from './project/detection.js';\n\n// Relatorios\nexport * from './reports/compliance.js';\nexport * from './reports/index.js';\n\n// Runtime\nexport * from './core/runtime.js';\n\n// SDK types\nexport * from './sdk/analyzer.js';\n\n// Shared - exportação centralizada\nexport * from './shared/index.js';\n// Contexto movido para projeto/\nexport * from './project/context.js';\n// Fragmentação e Leitor movidos para relatorios/\nexport type {\n FileEntryFragmentacao,\n FragmentOptions,\n Manifest,\n ManifestPart,\n ManifestPartFragmentacao,\n RelatorioCompleto,\n RelatorioCompletoFragmentacao,\n} from './reports/fragmentation.js';\nexport * from './reports/reader.js';\n\n// Zeladores\nexport * from './caretakers/imports.js';\nexport * from './caretakers/imports-barrel.js';\nexport * from './caretakers/map-reversion.js';\nexport * from './caretakers/pruning.js';\nexport * from './caretakers/scoring.js';\n\n// GitHub Actions Reports\nexport type {\n DadosRelatorioGithubActions,\n FormatoRelatorio,\n OpcoesRelatorio,\n} from './analysts/github-actions-reports.js';\n\n// CI Modules Types\nexport type {\n AzureCorrection,\n AzureScoreResult,\n DadosRelatorioAzure,\n} from './analysts/azure-pipelines.js';\nexport type {\n CircleCICorrection,\n CircleCIScoreResult,\n DadosRelatorioCircleCI,\n} from './analysts/circleci.js';\nexport type {\n DadosRelatorioGitLabCI,\n GitLabCICorrection,\n GitLabCIScoreResult,\n} from './analysts/gitlab-ci.js';\nexport type {\n DadosRelatorioJenkins,\n JenkinsCorrection,\n JenkinsScoreResult,\n} from './analysts/jenkins.js';\n\n// GitHub App\nexport * from './github/index.js';\n"]}
@@ -29,10 +29,12 @@ export interface ManifestPart {
29
29
  summary?: Record<string, unknown>;
30
30
  [chave: string]: unknown;
31
31
  }
32
+ export type ManifestPartFragmentacao = ManifestPart;
32
33
  export interface RelatorioCompleto {
33
34
  resultado?: unknown;
34
35
  ocorrencias?: Ocorrencia[];
35
36
  fileEntries?: FileEntryWithAst[];
36
37
  [chave: string]: unknown;
37
38
  }
39
+ export type RelatorioCompletoFragmentacao = RelatorioCompleto;
38
40
  //# sourceMappingURL=fragmentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fragmentation.d.ts","sourceRoot":"","sources":["../../../src/types/reports/fragmentation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAK3D,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAKF,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AACD,MAAM,WAAW,eAAe;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AACD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AACD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B"}
1
+ {"version":3,"file":"fragmentation.d.ts","sourceRoot":"","sources":["../../../src/types/reports/fragmentation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAK3D,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAKF,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AACD,MAAM,WAAW,eAAe;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AACD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AACD,MAAM,MAAM,wBAAwB,GAAG,YAAY,CAAC;AACpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AACD,MAAM,MAAM,6BAA6B,GAAG,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fragmentation.js","sourceRoot":"","sources":["../../../src/types/reports/fragmentation.ts"],"names":[],"mappings":"","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * Tipos para fragmentação de relatórios\n * Originalmente em: src/shared/data-processing/fragmentar-relatorio.ts\n */\n\nimport type { FileEntryWithAst } from '../common/file-entries.js';\nimport type { Ocorrencia } from '../common/occurrences.js';\n\n/**\n * Entrada de arquivo flexível para fragmentação (tipo union específico)\n */\nexport type FileEntryFragmentacao = FileEntryWithAst | {\n relPath?: string;\n fullCaminho?: string;\n path?: string;\n content?: string | null;\n [chave: string]: unknown;\n};\n\n/**\n * Manifesto de fragmentação\n */\nexport interface Manifest {\n generatedAt: string;\n baseNome: string;\n parts: ManifestPart[];\n}\nexport interface FragmentOptions {\n maxOcorrenciasPerShard?: number;\n maxFileEntriesPerShard?: number;\n}\nexport interface ManifestPart {\n file: string;\n items?: number;\n count?: number;\n sizeBytes?: number;\n bytes?: number;\n compressed?: boolean;\n kind?: string;\n index?: number;\n total?: number;\n summary?: Record<string, unknown>;\n [chave: string]: unknown;\n}\nexport interface RelatorioCompleto {\n resultado?: unknown; // Pode ser ResultadoInquisicaoCompleto ou estrutura customizada\n ocorrencias?: Ocorrencia[];\n fileEntries?: FileEntryWithAst[];\n [chave: string]: unknown;\n}"]}
1
+ {"version":3,"file":"fragmentation.js","sourceRoot":"","sources":["../../../src/types/reports/fragmentation.ts"],"names":[],"mappings":"","sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * Tipos para fragmentação de relatórios\n * Originalmente em: src/shared/data-processing/fragmentar-relatorio.ts\n */\n\nimport type { FileEntryWithAst } from '../common/file-entries.js';\nimport type { Ocorrencia } from '../common/occurrences.js';\n\n/**\n * Entrada de arquivo flexível para fragmentação (tipo union específico)\n */\nexport type FileEntryFragmentacao = FileEntryWithAst | {\n relPath?: string;\n fullCaminho?: string;\n path?: string;\n content?: string | null;\n [chave: string]: unknown;\n};\n\n/**\n * Manifesto de fragmentação\n */\nexport interface Manifest {\n generatedAt: string;\n baseNome: string;\n parts: ManifestPart[];\n}\nexport interface FragmentOptions {\n maxOcorrenciasPerShard?: number;\n maxFileEntriesPerShard?: number;\n}\nexport interface ManifestPart {\n file: string;\n items?: number;\n count?: number;\n sizeBytes?: number;\n bytes?: number;\n compressed?: boolean;\n kind?: string;\n index?: number;\n total?: number;\n summary?: Record<string, unknown>;\n [chave: string]: unknown;\n}\nexport type ManifestPartFragmentacao = ManifestPart;\nexport interface RelatorioCompleto {\n resultado?: unknown; // Pode ser ResultadoInquisicaoCompleto ou estrutura customizada\n ocorrencias?: Ocorrencia[];\n fileEntries?: FileEntryWithAst[];\n [chave: string]: unknown;\n}\nexport type RelatorioCompletoFragmentacao = RelatorioCompleto;"]}