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.
- package/README.md +1 -1
- package/dist/analysts/azure-pipelines/reports/generator-report-azure.d.ts.map +1 -1
- package/dist/analysts/azure-pipelines/reports/generator-report-azure.js.map +1 -1
- package/dist/analysts/circleci/reports/generator-report-circleci.d.ts.map +1 -1
- package/dist/analysts/circleci/reports/generator-report-circleci.js.map +1 -1
- package/dist/analysts/github-actions/reports/generator-report-github-actions.d.ts.map +1 -1
- package/dist/analysts/github-actions/reports/generator-report-github-actions.js +1 -1
- package/dist/analysts/github-actions/reports/generator-report-github-actions.js.map +1 -1
- package/dist/analysts/gitlab-ci/reports/generator-report-gitlab-ci.d.ts.map +1 -1
- package/dist/analysts/gitlab-ci/reports/generator-report-gitlab-ci.js.map +1 -1
- package/dist/analysts/jenkins/reports/generator-report-jenkins.d.ts.map +1 -1
- package/dist/analysts/jenkins/reports/generator-report-jenkins.js.map +1 -1
- package/dist/app/github/dashboard/routes.js +1 -1
- package/dist/app/github/dashboard/routes.js.map +1 -1
- package/dist/app/github/push-analysis/push-report.d.ts.map +1 -1
- package/dist/app/github/push-analysis/push-report.js.map +1 -1
- package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.d.ts +1 -1
- package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.d.ts.map +1 -1
- package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.js +1 -1
- package/dist/core/messages/pt/analysts/detector-bugs-ml-messages.js.map +1 -1
- package/dist/guardian/gpg.js +1 -1
- package/dist/guardian/gpg.js.map +1 -1
- package/dist/shared/memory.d.ts +1 -1
- package/dist/shared/memory.d.ts.map +1 -1
- package/dist/shared/memory.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/reports/fragmentation.d.ts +2 -0
- package/dist/types/reports/fragmentation.d.ts.map +1 -1
- package/dist/types/reports/fragmentation.js.map +1 -1
- package/package.json +57 -57
- package/out/404/index.html +0 -1
- package/out/404.html +0 -1
- package/out/__next.__PAGE__.txt +0 -9
- package/out/__next._full.txt +0 -18
- package/out/__next._head.txt +0 -5
- package/out/__next._index.txt +0 -6
- package/out/__next._tree.txt +0 -3
- package/out/_next/static/Dy2DC2TpDR2_OQeYOGFyo/_buildManifest.js +0 -11
- package/out/_next/static/Dy2DC2TpDR2_OQeYOGFyo/_clientMiddlewareManifest.js +0 -1
- package/out/_next/static/Dy2DC2TpDR2_OQeYOGFyo/_ssgManifest.js +0 -1
- package/out/_next/static/chunks/01xlw8hd842-c.js +0 -1
- package/out/_next/static/chunks/03~yq9q893hmn.js +0 -1
- package/out/_next/static/chunks/07lhk_q6pmm3r.js +0 -1
- package/out/_next/static/chunks/0bt5g~o.csanc.js +0 -2
- package/out/_next/static/chunks/0d3shmwh5_nmn.js +0 -1
- package/out/_next/static/chunks/0dgq26a5_oy.a.js +0 -4
- package/out/_next/static/chunks/0ht900cau6_ur.js +0 -31
- package/out/_next/static/chunks/0ka051yepewro.js +0 -1
- package/out/_next/static/chunks/0oxf3p2ntxm1..js +0 -11
- package/out/_next/static/chunks/0ut5u8b4o16.c.js +0 -1
- package/out/_next/static/chunks/14jxvso77~-n_.css +0 -1
- package/out/_next/static/chunks/turbopack-0lfyi3tcd5~9z.js +0 -1
- package/out/_next/static/media/icon-1.002u9bkvzfbrc.png +0 -0
- package/out/_not-found/__next._full.txt +0 -16
- package/out/_not-found/__next._head.txt +0 -5
- package/out/_not-found/__next._index.txt +0 -6
- package/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/out/_not-found/__next._not-found.txt +0 -5
- package/out/_not-found/__next._tree.txt +0 -3
- package/out/_not-found/index.html +0 -1
- package/out/_not-found/index.txt +0 -16
- package/out/changelog/__next._full.txt +0 -573
- package/out/changelog/__next._head.txt +0 -5
- package/out/changelog/__next._index.txt +0 -6
- package/out/changelog/__next._tree.txt +0 -4
- package/out/changelog/__next.changelog.__PAGE__.txt +0 -560
- package/out/changelog/__next.changelog.txt +0 -5
- package/out/changelog/index.html +0 -550
- package/out/changelog/index.txt +0 -573
- package/out/github/dashboard/__next._full.txt +0 -20
- package/out/github/dashboard/__next._head.txt +0 -5
- package/out/github/dashboard/__next._index.txt +0 -6
- package/out/github/dashboard/__next._tree.txt +0 -3
- package/out/github/dashboard/__next.github.dashboard.__PAGE__.txt +0 -9
- package/out/github/dashboard/__next.github.dashboard.txt +0 -4
- package/out/github/dashboard/__next.github.txt +0 -5
- package/out/github/dashboard/index.html +0 -1
- package/out/github/dashboard/index.txt +0 -20
- package/out/index.html +0 -1
- package/out/index.txt +0 -18
- package/out/privacy-policy/__next._full.txt +0 -38
- package/out/privacy-policy/__next._head.txt +0 -5
- package/out/privacy-policy/__next._index.txt +0 -6
- package/out/privacy-policy/__next._tree.txt +0 -4
- package/out/privacy-policy/__next.privacy-policy.__PAGE__.txt +0 -23
- package/out/privacy-policy/__next.privacy-policy.txt +0 -5
- package/out/privacy-policy/index.html +0 -1
- package/out/privacy-policy/index.txt +0 -38
- package/out/terms-of-use/__next._full.txt +0 -37
- package/out/terms-of-use/__next._head.txt +0 -5
- package/out/terms-of-use/__next._index.txt +0 -6
- package/out/terms-of-use/__next._tree.txt +0 -4
- package/out/terms-of-use/__next.terms-of-use.__PAGE__.txt +0 -18
- package/out/terms-of-use/__next.terms-of-use.txt +0 -5
- package/out/terms-of-use/index.html +0 -1
- 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":"
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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"]}
|
package/dist/guardian/gpg.js
CHANGED
|
@@ -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() {
|
package/dist/guardian/gpg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gpg.js","sourceRoot":"","sources":["../../src/guardian/gpg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
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"]}
|
package/dist/shared/memory.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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}"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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,
|
|
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":"AAQA,cAAc,uBAAuB,CAAC;AACtC,YAAY,EACV,OAAO,EACP,cAAc,EACd,cAAc,EACd,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,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;AAC1C,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -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;
|
|
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;"]}
|