@andrebuzeli/git-mcp 2.27.3 → 2.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/client.d.ts +306 -306
  2. package/dist/client.js +298 -298
  3. package/dist/config.d.ts +310 -310
  4. package/dist/config.js +392 -392
  5. package/dist/index.d.ts +22 -22
  6. package/dist/index.js +89 -89
  7. package/dist/providers/base-provider.d.ts +160 -156
  8. package/dist/providers/base-provider.d.ts.map +1 -1
  9. package/dist/providers/base-provider.js +274 -260
  10. package/dist/providers/base-provider.js.map +1 -1
  11. package/dist/providers/error-handler.d.ts +50 -50
  12. package/dist/providers/error-handler.js +175 -175
  13. package/dist/providers/gitea-provider.d.ts +97 -97
  14. package/dist/providers/gitea-provider.js +1001 -1001
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.js +1234 -1234
  17. package/dist/providers/index.d.ts +12 -12
  18. package/dist/providers/index.js +40 -40
  19. package/dist/providers/provider-factory.d.ts +74 -74
  20. package/dist/providers/provider-factory.js +311 -311
  21. package/dist/providers/types.d.ts +318 -298
  22. package/dist/providers/types.d.ts.map +1 -1
  23. package/dist/providers/types.js +6 -6
  24. package/dist/server.d.ts +76 -76
  25. package/dist/server.d.ts.map +1 -1
  26. package/dist/server.js +306 -357
  27. package/dist/server.js.map +1 -1
  28. package/dist/tools/gh-actions.d.ts +252 -252
  29. package/dist/tools/gh-actions.js +389 -389
  30. package/dist/tools/gh-analytics.d.ts +263 -263
  31. package/dist/tools/gh-analytics.js +401 -401
  32. package/dist/tools/gh-code-review.d.ts +304 -304
  33. package/dist/tools/gh-code-review.js +512 -512
  34. package/dist/tools/gh-codespaces.d.ts +138 -138
  35. package/dist/tools/gh-codespaces.js +282 -282
  36. package/dist/tools/gh-deployments.d.ts +300 -300
  37. package/dist/tools/gh-deployments.js +367 -367
  38. package/dist/tools/gh-gists.d.ts +174 -174
  39. package/dist/tools/gh-gists.js +321 -321
  40. package/dist/tools/gh-projects.d.ts +205 -205
  41. package/dist/tools/gh-projects.js +358 -358
  42. package/dist/tools/gh-security.d.ts +274 -274
  43. package/dist/tools/gh-security.js +395 -395
  44. package/dist/tools/gh-sync.d.ts +213 -213
  45. package/dist/tools/gh-sync.js +378 -378
  46. package/dist/tools/gh-workflows.d.ts +290 -290
  47. package/dist/tools/gh-workflows.js +432 -432
  48. package/dist/tools/git-archive.d.ts +165 -165
  49. package/dist/tools/git-archive.js +233 -233
  50. package/dist/tools/git-branches.d.ts +430 -430
  51. package/dist/tools/git-branches.d.ts.map +1 -1
  52. package/dist/tools/git-branches.js +627 -530
  53. package/dist/tools/git-branches.js.map +1 -1
  54. package/dist/tools/git-bundle.d.ts +171 -171
  55. package/dist/tools/git-bundle.js +241 -241
  56. package/dist/tools/git-cherry-pick.d.ts +158 -158
  57. package/dist/tools/git-cherry-pick.js +224 -224
  58. package/dist/tools/git-commits.d.ts +485 -485
  59. package/dist/tools/git-commits.d.ts.map +1 -1
  60. package/dist/tools/git-commits.js +735 -625
  61. package/dist/tools/git-commits.js.map +1 -1
  62. package/dist/tools/git-config.d.ts +140 -140
  63. package/dist/tools/git-config.js +268 -268
  64. package/dist/tools/git-files.d.ts +486 -486
  65. package/dist/tools/git-files.js +607 -607
  66. package/dist/tools/git-issues.d.ts +571 -571
  67. package/dist/tools/git-issues.d.ts.map +1 -1
  68. package/dist/tools/git-issues.js +740 -693
  69. package/dist/tools/git-issues.js.map +1 -1
  70. package/dist/tools/git-pulls.d.ts +694 -694
  71. package/dist/tools/git-pulls.js +732 -732
  72. package/dist/tools/git-rebase.d.ts +137 -137
  73. package/dist/tools/git-rebase.js +213 -213
  74. package/dist/tools/git-releases.d.ts +487 -487
  75. package/dist/tools/git-releases.js +557 -557
  76. package/dist/tools/git-remote.d.ts +138 -138
  77. package/dist/tools/git-remote.js +274 -274
  78. package/dist/tools/git-repositories.d.ts +483 -483
  79. package/dist/tools/git-repositories.js +640 -640
  80. package/dist/tools/git-reset.d.ts +130 -130
  81. package/dist/tools/git-reset.js +223 -223
  82. package/dist/tools/git-revert.d.ts +149 -149
  83. package/dist/tools/git-revert.js +198 -198
  84. package/dist/tools/git-stash.d.ts +140 -140
  85. package/dist/tools/git-stash.js +269 -269
  86. package/dist/tools/git-submodule.d.ts +152 -152
  87. package/dist/tools/git-submodule.js +289 -289
  88. package/dist/tools/git-sync.d.ts +178 -166
  89. package/dist/tools/git-sync.d.ts.map +1 -1
  90. package/dist/tools/git-sync.js +312 -117
  91. package/dist/tools/git-sync.js.map +1 -1
  92. package/dist/tools/git-tags.d.ts +411 -411
  93. package/dist/tools/git-tags.js +485 -485
  94. package/dist/tools/git-webhooks.d.ts +470 -482
  95. package/dist/tools/git-webhooks.d.ts.map +1 -1
  96. package/dist/tools/git-webhooks.js +543 -555
  97. package/dist/tools/git-webhooks.js.map +1 -1
  98. package/dist/tools/git-worktree.d.ts +159 -159
  99. package/dist/tools/git-worktree.js +269 -269
  100. package/dist/tools/repositories.d.ts +405 -405
  101. package/dist/tools/repositories.js +569 -569
  102. package/dist/tools/users.d.ts +372 -372
  103. package/dist/tools/users.js +499 -499
  104. package/dist/tools/validator.d.ts +170 -170
  105. package/dist/tools/validator.js +194 -194
  106. package/dist/tools/version-control.d.ts +136 -136
  107. package/dist/tools/version-control.js +164 -164
  108. package/dist/utils/terminal-controller.d.ts +80 -80
  109. package/dist/utils/terminal-controller.js +345 -345
  110. package/dist/utils/user-detection.d.ts +24 -24
  111. package/dist/utils/user-detection.js +53 -53
  112. package/package.json +59 -59
@@ -1,396 +1,396 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.securityTool = void 0;
4
- const zod_1 = require("zod");
5
- const index_js_1 = require("../providers/index.js");
6
- const user_detection_js_1 = require("../utils/user-detection.js");
7
- const validator_js_1 = require("./validator.js");
8
- /**
9
- * Tool: security
10
- *
11
- * DESCRIÇÃO:
12
- * Gerenciamento completo de segurança e compliance com múltiplas ações
13
- *
14
- * FUNCIONALIDADES:
15
- * - Execução de scans de segurança
16
- * - Listagem de vulnerabilidades
17
- * - Gerenciamento de alertas de segurança
18
- * - Configuração de políticas de segurança
19
- * - Verificação de compliance
20
- * - Análise de dependências
21
- *
22
- * USO:
23
- * - Para monitorar vulnerabilidades
24
- * - Para configurar políticas de segurança
25
- * - Para compliance e auditoria
26
- * - Para análise de dependências
27
- *
28
- * RECOMENDAÇÕES:
29
- * - Execute scans regularmente
30
- * - Configure alertas automáticos
31
- * - Mantenha dependências atualizadas
32
- * - Implemente políticas rigorosas
33
- */
34
- /**
35
- * Schema de validação para entrada da tool security
36
- */
37
- const SecurityInputSchema = zod_1.z.object({
38
- action: zod_1.z.enum(['scan', 'vulnerabilities', 'alerts', 'policies', 'compliance', 'dependencies', 'advisories']),
39
- // Parâmetros comuns
40
- repo: validator_js_1.CommonSchemas.repo,
41
- // Parâmetros para listagem
42
- page: validator_js_1.CommonSchemas.page,
43
- limit: validator_js_1.CommonSchemas.limit,
44
- // Parâmetros para scan
45
- scan_type: zod_1.z.enum(['code', 'dependencies', 'secrets', 'infrastructure']).optional(),
46
- ref: validator_js_1.CommonSchemas.branch,
47
- // Parâmetros para vulnerabilidades
48
- severity: zod_1.z.enum(['low', 'medium', 'high', 'critical']).optional(),
49
- state: zod_1.z.enum(['open', 'fixed', 'dismissed']).optional(),
50
- ecosystem: validator_js_1.CommonSchemas.shortString,
51
- package_name: validator_js_1.CommonSchemas.shortString,
52
- // Parâmetros para alertas
53
- alert_id: validator_js_1.CommonSchemas.shortString,
54
- alert_number: zod_1.z.number().optional(),
55
- dismiss_reason: zod_1.z.enum(['fix_started', 'inaccurate', 'no_bandwidth', 'not_used', 'tolerable_risk']).optional(),
56
- dismiss_comment: validator_js_1.CommonSchemas.mediumString,
57
- // Parâmetros para políticas
58
- policy_name: validator_js_1.CommonSchemas.shortString,
59
- policy_type: zod_1.z.enum(['branch_protection', 'required_reviews', 'status_checks', 'restrictions']).optional(),
60
- policy_config: zod_1.z.record(zod_1.z.any()).optional(),
61
- // Parâmetros para compliance
62
- compliance_framework: zod_1.z.enum(['sox', 'pci', 'hipaa', 'gdpr', 'iso27001']).optional(),
63
- report_format: zod_1.z.enum(['json', 'csv', 'pdf']).optional(),
64
- // Filtros
65
- created_after: zod_1.z.string().optional(),
66
- created_before: zod_1.z.string().optional(),
67
- updated_after: zod_1.z.string().optional(),
68
- updated_before: zod_1.z.string().optional()
69
- });
70
- /**
71
- * Schema de validação para resultado da tool security
72
- */
73
- const SecurityResultSchema = zod_1.z.object({
74
- success: zod_1.z.boolean(),
75
- action: zod_1.z.string(),
76
- message: zod_1.z.string(),
77
- data: zod_1.z.any().optional(),
78
- error: zod_1.z.string().optional()
79
- });
80
- /**
81
- * Implementação da tool security
82
- */
83
- exports.securityTool = {
84
- name: 'gh-security',
85
- description: 'tool: Gerencia segurança GitHub para proteção e compliance\n──────────────\naction scan: executa scan de segurança\naction scan requires: repo, scan_type, ref\n───────────────\naction vulnerabilities: lista vulnerabilidades\naction vulnerabilities requires: repo, severity, state, ecosystem, package_name, page, limit\n───────────────\naction alerts: lista alertas de segurança\naction alerts requires: repo, alert_id, alert_number, state, page, limit\n───────────────\naction policies: gerencia políticas de segurança\naction policies requires: repo, policy_name, policy_type, policy_config\n───────────────\naction compliance: verifica conformidade\naction compliance requires: repo, compliance_framework, report_format\n───────────────\naction dependencies: analisa dependências\naction dependencies requires: repo, ecosystem, package_name, page, limit\n───────────────\naction advisories: lista avisos de segurança\naction advisories requires: repo, ecosystem, package_name, page, limit',
86
- inputSchema: {
87
- type: 'object',
88
- properties: {
89
- action: {
90
- type: 'string',
91
- enum: ['scan', 'vulnerabilities', 'alerts', 'policies', 'compliance', 'dependencies', 'advisories'],
92
- description: 'Action to perform on security'
93
- },
94
- repo: { type: 'string', description: 'Repository name' },
95
- scan_type: { type: 'string', enum: ['code', 'dependencies', 'secrets', 'infrastructure'], description: 'Type of security scan' },
96
- ref: { type: 'string', description: 'Git reference to scan' },
97
- severity: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], description: 'Vulnerability severity filter' },
98
- state: { type: 'string', enum: ['open', 'fixed', 'dismissed'], description: 'Vulnerability state filter' },
99
- ecosystem: { type: 'string', description: 'Package ecosystem' },
100
- package_name: { type: 'string', description: 'Package name' },
101
- alert_id: { type: 'string', description: 'Security alert ID' },
102
- alert_number: { type: 'number', description: 'Security alert number' },
103
- dismiss_reason: { type: 'string', enum: ['fix_started', 'inaccurate', 'no_bandwidth', 'not_used', 'tolerable_risk'], description: 'Reason for dismissing alert' },
104
- dismiss_comment: { type: 'string', description: 'Comment for dismissing alert' },
105
- policy_name: { type: 'string', description: 'Security policy name' },
106
- policy_type: { type: 'string', enum: ['branch_protection', 'required_reviews', 'status_checks', 'restrictions'], description: 'Security policy type' },
107
- policy_config: { type: 'object', description: 'Security policy configuration' },
108
- compliance_framework: { type: 'string', enum: ['sox', 'pci', 'hipaa', 'gdpr', 'iso27001'], description: 'Compliance framework' },
109
- report_format: { type: 'string', enum: ['json', 'csv', 'pdf'], description: 'Report format' },
110
- created_after: { type: 'string', description: 'Filter items created after date' },
111
- created_before: { type: 'string', description: 'Filter items created before date' },
112
- updated_after: { type: 'string', description: 'Filter items updated after date' },
113
- updated_before: { type: 'string', description: 'Filter items updated before date' },
114
- page: { type: 'number', description: 'Page number', minimum: 1 },
115
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 }
116
- },
117
- required: ['action', 'repo']
118
- },
119
- async handler(input) {
120
- try {
121
- const validatedInput = SecurityInputSchema.parse(input);
122
- // Fixar provider como github para tools exclusivas do GitHub
123
- const updatedParams = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, 'github');
124
- const provider = index_js_1.globalProviderFactory.getProvider('github');
125
- if (!provider) {
126
- throw new Error('Provider GitHub não encontrado');
127
- }
128
- switch (updatedParams.action) {
129
- case 'scan':
130
- return await this.runSecurityScan(updatedParams, provider);
131
- case 'vulnerabilities':
132
- return await this.listVulnerabilities(updatedParams, provider);
133
- case 'alerts':
134
- return await this.manageSecurityAlerts(updatedParams, provider);
135
- case 'policies':
136
- return await this.manageSecurityPolicies(updatedParams, provider);
137
- case 'compliance':
138
- return await this.checkCompliance(updatedParams, provider);
139
- case 'dependencies':
140
- return await this.analyzeDependencies(updatedParams, provider);
141
- case 'advisories':
142
- return await this.listSecurityAdvisories(updatedParams, provider);
143
- default:
144
- throw new Error(`Ação não suportada: ${updatedParams.action}`);
145
- }
146
- }
147
- catch (error) {
148
- return {
149
- success: false,
150
- action: input.action || 'unknown',
151
- message: 'Erro na operação de security',
152
- error: error instanceof Error ? error.message : String(error)
153
- };
154
- }
155
- },
156
- /**
157
- * Executa scan de segurança
158
- */
159
- async runSecurityScan(params, provider) {
160
- try {
161
- if (!provider.runSecurityScan) {
162
- return {
163
- success: true,
164
- action: 'scan',
165
- message: 'Funcionalidade de security scan não suportada por este provider',
166
- data: {
167
- scan_type: params.scan_type || 'code',
168
- findings: [],
169
- note: 'Security scan não disponível neste provider'
170
- }
171
- };
172
- }
173
- const result = await provider.runSecurityScan({
174
- owner: (await provider.getCurrentUser()).login,
175
- repo: params.repo,
176
- scan_type: params.scan_type || 'code',
177
- ref: params.ref || 'main'
178
- });
179
- return {
180
- success: true,
181
- action: 'scan',
182
- message: `Scan de segurança executado com sucesso`,
183
- data: result
184
- };
185
- }
186
- catch (error) {
187
- throw new Error(`Falha ao executar scan de segurança: ${error}`);
188
- }
189
- },
190
- /**
191
- * Lista vulnerabilidades
192
- */
193
- async listVulnerabilities(params, provider) {
194
- try {
195
- // Auto-detecção de owner/username se não fornecidos
196
- let updatedParams = { ...params };
197
- const currentUser = await provider.getCurrentUser();
198
- const owner = currentUser.login;
199
- if (!provider.listSecurityVulnerabilities) {
200
- return {
201
- success: true,
202
- action: 'vulnerabilities',
203
- message: 'Funcionalidade de vulnerabilidades não suportada por este provider',
204
- data: {
205
- total_count: 0,
206
- vulnerabilities: [],
207
- note: 'Vulnerabilidades não disponíveis neste provider'
208
- }
209
- };
210
- }
211
- const result = await provider.listSecurityVulnerabilities({
212
- owner: (await provider.getCurrentUser()).login,
213
- repo: params.repo,
214
- severity: params.severity,
215
- state: params.state,
216
- ecosystem: params.ecosystem,
217
- package_name: params.package_name,
218
- page: params.page,
219
- limit: params.limit
220
- });
221
- return {
222
- success: true,
223
- action: 'vulnerabilities',
224
- message: `${result.vulnerabilities?.length || 0} vulnerabilidades encontradas`,
225
- data: result
226
- };
227
- }
228
- catch (error) {
229
- throw new Error(`Falha ao listar vulnerabilidades: ${error}`);
230
- }
231
- },
232
- /**
233
- * Gerencia alertas de segurança
234
- */
235
- async manageSecurityAlerts(params, provider) {
236
- try {
237
- if (!provider.manageSecurityAlerts) {
238
- return {
239
- success: false,
240
- action: 'manage-security-alerts',
241
- message: 'Funcionalidade não suportada por este provider',
242
- error: 'Provider não implementa manageSecurityAlerts'
243
- };
244
- }
245
- const result = await provider.manageSecurityAlerts({
246
- owner: (await provider.getCurrentUser()).login,
247
- repo: params.repo,
248
- action: 'dismiss', // ou 'reopen' baseado nos parâmetros
249
- alert_number: params.alert_number,
250
- dismiss_reason: params.dismiss_reason,
251
- dismiss_comment: params.dismiss_comment
252
- });
253
- return {
254
- success: true,
255
- action: 'alerts',
256
- message: `Alertas de segurança gerenciados com sucesso`,
257
- data: result
258
- };
259
- }
260
- catch (error) {
261
- throw new Error(`Falha ao gerenciar alertas de segurança: ${error}`);
262
- }
263
- },
264
- /**
265
- * Gerencia políticas de segurança
266
- */
267
- async manageSecurityPolicies(params, provider) {
268
- try {
269
- if (!provider.manageSecurityPolicies) {
270
- return {
271
- success: false,
272
- action: 'manage-security-policies',
273
- message: 'Funcionalidade não suportada por este provider',
274
- error: 'Provider não implementa manageSecurityPolicies'
275
- };
276
- }
277
- const result = await provider.manageSecurityPolicies({
278
- owner: (await provider.getCurrentUser()).login,
279
- repo: params.repo,
280
- policy_name: params.policy_name,
281
- policy_type: params.policy_type,
282
- policy_config: params.policy_config,
283
- page: params.page,
284
- limit: params.limit
285
- });
286
- return {
287
- success: true,
288
- action: 'policies',
289
- message: `Políticas de segurança gerenciadas com sucesso`,
290
- data: result
291
- };
292
- }
293
- catch (error) {
294
- throw new Error(`Falha ao gerenciar políticas de segurança: ${error}`);
295
- }
296
- },
297
- /**
298
- * Verifica compliance
299
- */
300
- async checkCompliance(params, provider) {
301
- try {
302
- if (!provider.checkCompliance) {
303
- return {
304
- success: false,
305
- action: 'check-compliance',
306
- message: 'Funcionalidade não suportada por este provider',
307
- error: 'Provider não implementa checkCompliance'
308
- };
309
- }
310
- const result = await provider.checkCompliance({
311
- owner: (await provider.getCurrentUser()).login,
312
- repo: params.repo,
313
- framework: params.compliance_framework,
314
- report_format: params.report_format || 'json'
315
- });
316
- return {
317
- success: true,
318
- action: 'compliance',
319
- message: `Verificação de compliance executada com sucesso`,
320
- data: result
321
- };
322
- }
323
- catch (error) {
324
- throw new Error(`Falha ao verificar compliance: ${error}`);
325
- }
326
- },
327
- /**
328
- * Analisa dependências
329
- */
330
- async analyzeDependencies(params, provider) {
331
- try {
332
- if (!provider.analyzeDependencies) {
333
- return {
334
- success: false,
335
- action: 'analyze-dependencies',
336
- message: 'Funcionalidade não suportada por este provider',
337
- error: 'Provider não implementa analyzeDependencies'
338
- };
339
- }
340
- const result = await provider.analyzeDependencies({
341
- owner: (await provider.getCurrentUser()).login,
342
- repo: params.repo,
343
- ecosystem: params.ecosystem,
344
- package: params.package_name,
345
- ref: params.ref
346
- });
347
- return {
348
- success: true,
349
- action: 'dependencies',
350
- message: `Análise de dependências executada com sucesso`,
351
- data: result
352
- };
353
- }
354
- catch (error) {
355
- throw new Error(`Falha ao analisar dependências: ${error}`);
356
- }
357
- },
358
- /**
359
- * Lista advisories de segurança
360
- */
361
- async listSecurityAdvisories(params, provider) {
362
- try {
363
- // Auto-detecção de owner/username se não fornecidos
364
- let updatedParams = { ...params };
365
- const currentUser = await provider.getCurrentUser();
366
- const owner = currentUser.login;
367
- if (!provider.listSecurityAdvisories) {
368
- return {
369
- success: false,
370
- action: 'list-security-advisories',
371
- message: 'Funcionalidade não suportada por este provider',
372
- error: 'Provider não implementa listSecurityAdvisories'
373
- };
374
- }
375
- const result = await provider.listSecurityAdvisories({
376
- owner: (await provider.getCurrentUser()).login,
377
- repo: params.repo,
378
- severity: params.severity,
379
- ecosystem: params.ecosystem,
380
- package: params.package_name,
381
- page: params.page,
382
- limit: params.limit
383
- });
384
- return {
385
- success: true,
386
- action: 'advisories',
387
- message: `${result.advisories?.length || 0} advisories encontrados`,
388
- data: result
389
- };
390
- }
391
- catch (error) {
392
- throw new Error(`Falha ao listar advisories: ${error}`);
393
- }
394
- }
395
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.securityTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_js_1 = require("../providers/index.js");
6
+ const user_detection_js_1 = require("../utils/user-detection.js");
7
+ const validator_js_1 = require("./validator.js");
8
+ /**
9
+ * Tool: security
10
+ *
11
+ * DESCRIÇÃO:
12
+ * Gerenciamento completo de segurança e compliance com múltiplas ações
13
+ *
14
+ * FUNCIONALIDADES:
15
+ * - Execução de scans de segurança
16
+ * - Listagem de vulnerabilidades
17
+ * - Gerenciamento de alertas de segurança
18
+ * - Configuração de políticas de segurança
19
+ * - Verificação de compliance
20
+ * - Análise de dependências
21
+ *
22
+ * USO:
23
+ * - Para monitorar vulnerabilidades
24
+ * - Para configurar políticas de segurança
25
+ * - Para compliance e auditoria
26
+ * - Para análise de dependências
27
+ *
28
+ * RECOMENDAÇÕES:
29
+ * - Execute scans regularmente
30
+ * - Configure alertas automáticos
31
+ * - Mantenha dependências atualizadas
32
+ * - Implemente políticas rigorosas
33
+ */
34
+ /**
35
+ * Schema de validação para entrada da tool security
36
+ */
37
+ const SecurityInputSchema = zod_1.z.object({
38
+ action: zod_1.z.enum(['scan', 'vulnerabilities', 'alerts', 'policies', 'compliance', 'dependencies', 'advisories']),
39
+ // Parâmetros comuns
40
+ repo: validator_js_1.CommonSchemas.repo,
41
+ // Parâmetros para listagem
42
+ page: validator_js_1.CommonSchemas.page,
43
+ limit: validator_js_1.CommonSchemas.limit,
44
+ // Parâmetros para scan
45
+ scan_type: zod_1.z.enum(['code', 'dependencies', 'secrets', 'infrastructure']).optional(),
46
+ ref: validator_js_1.CommonSchemas.branch,
47
+ // Parâmetros para vulnerabilidades
48
+ severity: zod_1.z.enum(['low', 'medium', 'high', 'critical']).optional(),
49
+ state: zod_1.z.enum(['open', 'fixed', 'dismissed']).optional(),
50
+ ecosystem: validator_js_1.CommonSchemas.shortString,
51
+ package_name: validator_js_1.CommonSchemas.shortString,
52
+ // Parâmetros para alertas
53
+ alert_id: validator_js_1.CommonSchemas.shortString,
54
+ alert_number: zod_1.z.number().optional(),
55
+ dismiss_reason: zod_1.z.enum(['fix_started', 'inaccurate', 'no_bandwidth', 'not_used', 'tolerable_risk']).optional(),
56
+ dismiss_comment: validator_js_1.CommonSchemas.mediumString,
57
+ // Parâmetros para políticas
58
+ policy_name: validator_js_1.CommonSchemas.shortString,
59
+ policy_type: zod_1.z.enum(['branch_protection', 'required_reviews', 'status_checks', 'restrictions']).optional(),
60
+ policy_config: zod_1.z.record(zod_1.z.any()).optional(),
61
+ // Parâmetros para compliance
62
+ compliance_framework: zod_1.z.enum(['sox', 'pci', 'hipaa', 'gdpr', 'iso27001']).optional(),
63
+ report_format: zod_1.z.enum(['json', 'csv', 'pdf']).optional(),
64
+ // Filtros
65
+ created_after: zod_1.z.string().optional(),
66
+ created_before: zod_1.z.string().optional(),
67
+ updated_after: zod_1.z.string().optional(),
68
+ updated_before: zod_1.z.string().optional()
69
+ });
70
+ /**
71
+ * Schema de validação para resultado da tool security
72
+ */
73
+ const SecurityResultSchema = zod_1.z.object({
74
+ success: zod_1.z.boolean(),
75
+ action: zod_1.z.string(),
76
+ message: zod_1.z.string(),
77
+ data: zod_1.z.any().optional(),
78
+ error: zod_1.z.string().optional()
79
+ });
80
+ /**
81
+ * Implementação da tool security
82
+ */
83
+ exports.securityTool = {
84
+ name: 'gh-security',
85
+ description: 'tool: Gerencia segurança GitHub para proteção e compliance\n──────────────\naction scan: executa scan de segurança\naction scan requires: repo, scan_type, ref\n───────────────\naction vulnerabilities: lista vulnerabilidades\naction vulnerabilities requires: repo, severity, state, ecosystem, package_name, page, limit\n───────────────\naction alerts: lista alertas de segurança\naction alerts requires: repo, alert_id, alert_number, state, page, limit\n───────────────\naction policies: gerencia políticas de segurança\naction policies requires: repo, policy_name, policy_type, policy_config\n───────────────\naction compliance: verifica conformidade\naction compliance requires: repo, compliance_framework, report_format\n───────────────\naction dependencies: analisa dependências\naction dependencies requires: repo, ecosystem, package_name, page, limit\n───────────────\naction advisories: lista avisos de segurança\naction advisories requires: repo, ecosystem, package_name, page, limit',
86
+ inputSchema: {
87
+ type: 'object',
88
+ properties: {
89
+ action: {
90
+ type: 'string',
91
+ enum: ['scan', 'vulnerabilities', 'alerts', 'policies', 'compliance', 'dependencies', 'advisories'],
92
+ description: 'Action to perform on security'
93
+ },
94
+ repo: { type: 'string', description: 'Repository name' },
95
+ scan_type: { type: 'string', enum: ['code', 'dependencies', 'secrets', 'infrastructure'], description: 'Type of security scan' },
96
+ ref: { type: 'string', description: 'Git reference to scan' },
97
+ severity: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], description: 'Vulnerability severity filter' },
98
+ state: { type: 'string', enum: ['open', 'fixed', 'dismissed'], description: 'Vulnerability state filter' },
99
+ ecosystem: { type: 'string', description: 'Package ecosystem' },
100
+ package_name: { type: 'string', description: 'Package name' },
101
+ alert_id: { type: 'string', description: 'Security alert ID' },
102
+ alert_number: { type: 'number', description: 'Security alert number' },
103
+ dismiss_reason: { type: 'string', enum: ['fix_started', 'inaccurate', 'no_bandwidth', 'not_used', 'tolerable_risk'], description: 'Reason for dismissing alert' },
104
+ dismiss_comment: { type: 'string', description: 'Comment for dismissing alert' },
105
+ policy_name: { type: 'string', description: 'Security policy name' },
106
+ policy_type: { type: 'string', enum: ['branch_protection', 'required_reviews', 'status_checks', 'restrictions'], description: 'Security policy type' },
107
+ policy_config: { type: 'object', description: 'Security policy configuration' },
108
+ compliance_framework: { type: 'string', enum: ['sox', 'pci', 'hipaa', 'gdpr', 'iso27001'], description: 'Compliance framework' },
109
+ report_format: { type: 'string', enum: ['json', 'csv', 'pdf'], description: 'Report format' },
110
+ created_after: { type: 'string', description: 'Filter items created after date' },
111
+ created_before: { type: 'string', description: 'Filter items created before date' },
112
+ updated_after: { type: 'string', description: 'Filter items updated after date' },
113
+ updated_before: { type: 'string', description: 'Filter items updated before date' },
114
+ page: { type: 'number', description: 'Page number', minimum: 1 },
115
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 }
116
+ },
117
+ required: ['action', 'repo']
118
+ },
119
+ async handler(input) {
120
+ try {
121
+ const validatedInput = SecurityInputSchema.parse(input);
122
+ // Fixar provider como github para tools exclusivas do GitHub
123
+ const updatedParams = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, 'github');
124
+ const provider = index_js_1.globalProviderFactory.getProvider('github');
125
+ if (!provider) {
126
+ throw new Error('Provider GitHub não encontrado');
127
+ }
128
+ switch (updatedParams.action) {
129
+ case 'scan':
130
+ return await this.runSecurityScan(updatedParams, provider);
131
+ case 'vulnerabilities':
132
+ return await this.listVulnerabilities(updatedParams, provider);
133
+ case 'alerts':
134
+ return await this.manageSecurityAlerts(updatedParams, provider);
135
+ case 'policies':
136
+ return await this.manageSecurityPolicies(updatedParams, provider);
137
+ case 'compliance':
138
+ return await this.checkCompliance(updatedParams, provider);
139
+ case 'dependencies':
140
+ return await this.analyzeDependencies(updatedParams, provider);
141
+ case 'advisories':
142
+ return await this.listSecurityAdvisories(updatedParams, provider);
143
+ default:
144
+ throw new Error(`Ação não suportada: ${updatedParams.action}`);
145
+ }
146
+ }
147
+ catch (error) {
148
+ return {
149
+ success: false,
150
+ action: input.action || 'unknown',
151
+ message: 'Erro na operação de security',
152
+ error: error instanceof Error ? error.message : String(error)
153
+ };
154
+ }
155
+ },
156
+ /**
157
+ * Executa scan de segurança
158
+ */
159
+ async runSecurityScan(params, provider) {
160
+ try {
161
+ if (!provider.runSecurityScan) {
162
+ return {
163
+ success: true,
164
+ action: 'scan',
165
+ message: 'Funcionalidade de security scan não suportada por este provider',
166
+ data: {
167
+ scan_type: params.scan_type || 'code',
168
+ findings: [],
169
+ note: 'Security scan não disponível neste provider'
170
+ }
171
+ };
172
+ }
173
+ const result = await provider.runSecurityScan({
174
+ owner: (await provider.getCurrentUser()).login,
175
+ repo: params.repo,
176
+ scan_type: params.scan_type || 'code',
177
+ ref: params.ref || 'main'
178
+ });
179
+ return {
180
+ success: true,
181
+ action: 'scan',
182
+ message: `Scan de segurança executado com sucesso`,
183
+ data: result
184
+ };
185
+ }
186
+ catch (error) {
187
+ throw new Error(`Falha ao executar scan de segurança: ${error}`);
188
+ }
189
+ },
190
+ /**
191
+ * Lista vulnerabilidades
192
+ */
193
+ async listVulnerabilities(params, provider) {
194
+ try {
195
+ // Auto-detecção de owner/username se não fornecidos
196
+ let updatedParams = { ...params };
197
+ const currentUser = await provider.getCurrentUser();
198
+ const owner = currentUser.login;
199
+ if (!provider.listSecurityVulnerabilities) {
200
+ return {
201
+ success: true,
202
+ action: 'vulnerabilities',
203
+ message: 'Funcionalidade de vulnerabilidades não suportada por este provider',
204
+ data: {
205
+ total_count: 0,
206
+ vulnerabilities: [],
207
+ note: 'Vulnerabilidades não disponíveis neste provider'
208
+ }
209
+ };
210
+ }
211
+ const result = await provider.listSecurityVulnerabilities({
212
+ owner: (await provider.getCurrentUser()).login,
213
+ repo: params.repo,
214
+ severity: params.severity,
215
+ state: params.state,
216
+ ecosystem: params.ecosystem,
217
+ package_name: params.package_name,
218
+ page: params.page,
219
+ limit: params.limit
220
+ });
221
+ return {
222
+ success: true,
223
+ action: 'vulnerabilities',
224
+ message: `${result.vulnerabilities?.length || 0} vulnerabilidades encontradas`,
225
+ data: result
226
+ };
227
+ }
228
+ catch (error) {
229
+ throw new Error(`Falha ao listar vulnerabilidades: ${error}`);
230
+ }
231
+ },
232
+ /**
233
+ * Gerencia alertas de segurança
234
+ */
235
+ async manageSecurityAlerts(params, provider) {
236
+ try {
237
+ if (!provider.manageSecurityAlerts) {
238
+ return {
239
+ success: false,
240
+ action: 'manage-security-alerts',
241
+ message: 'Funcionalidade não suportada por este provider',
242
+ error: 'Provider não implementa manageSecurityAlerts'
243
+ };
244
+ }
245
+ const result = await provider.manageSecurityAlerts({
246
+ owner: (await provider.getCurrentUser()).login,
247
+ repo: params.repo,
248
+ action: 'dismiss', // ou 'reopen' baseado nos parâmetros
249
+ alert_number: params.alert_number,
250
+ dismiss_reason: params.dismiss_reason,
251
+ dismiss_comment: params.dismiss_comment
252
+ });
253
+ return {
254
+ success: true,
255
+ action: 'alerts',
256
+ message: `Alertas de segurança gerenciados com sucesso`,
257
+ data: result
258
+ };
259
+ }
260
+ catch (error) {
261
+ throw new Error(`Falha ao gerenciar alertas de segurança: ${error}`);
262
+ }
263
+ },
264
+ /**
265
+ * Gerencia políticas de segurança
266
+ */
267
+ async manageSecurityPolicies(params, provider) {
268
+ try {
269
+ if (!provider.manageSecurityPolicies) {
270
+ return {
271
+ success: false,
272
+ action: 'manage-security-policies',
273
+ message: 'Funcionalidade não suportada por este provider',
274
+ error: 'Provider não implementa manageSecurityPolicies'
275
+ };
276
+ }
277
+ const result = await provider.manageSecurityPolicies({
278
+ owner: (await provider.getCurrentUser()).login,
279
+ repo: params.repo,
280
+ policy_name: params.policy_name,
281
+ policy_type: params.policy_type,
282
+ policy_config: params.policy_config,
283
+ page: params.page,
284
+ limit: params.limit
285
+ });
286
+ return {
287
+ success: true,
288
+ action: 'policies',
289
+ message: `Políticas de segurança gerenciadas com sucesso`,
290
+ data: result
291
+ };
292
+ }
293
+ catch (error) {
294
+ throw new Error(`Falha ao gerenciar políticas de segurança: ${error}`);
295
+ }
296
+ },
297
+ /**
298
+ * Verifica compliance
299
+ */
300
+ async checkCompliance(params, provider) {
301
+ try {
302
+ if (!provider.checkCompliance) {
303
+ return {
304
+ success: false,
305
+ action: 'check-compliance',
306
+ message: 'Funcionalidade não suportada por este provider',
307
+ error: 'Provider não implementa checkCompliance'
308
+ };
309
+ }
310
+ const result = await provider.checkCompliance({
311
+ owner: (await provider.getCurrentUser()).login,
312
+ repo: params.repo,
313
+ framework: params.compliance_framework,
314
+ report_format: params.report_format || 'json'
315
+ });
316
+ return {
317
+ success: true,
318
+ action: 'compliance',
319
+ message: `Verificação de compliance executada com sucesso`,
320
+ data: result
321
+ };
322
+ }
323
+ catch (error) {
324
+ throw new Error(`Falha ao verificar compliance: ${error}`);
325
+ }
326
+ },
327
+ /**
328
+ * Analisa dependências
329
+ */
330
+ async analyzeDependencies(params, provider) {
331
+ try {
332
+ if (!provider.analyzeDependencies) {
333
+ return {
334
+ success: false,
335
+ action: 'analyze-dependencies',
336
+ message: 'Funcionalidade não suportada por este provider',
337
+ error: 'Provider não implementa analyzeDependencies'
338
+ };
339
+ }
340
+ const result = await provider.analyzeDependencies({
341
+ owner: (await provider.getCurrentUser()).login,
342
+ repo: params.repo,
343
+ ecosystem: params.ecosystem,
344
+ package: params.package_name,
345
+ ref: params.ref
346
+ });
347
+ return {
348
+ success: true,
349
+ action: 'dependencies',
350
+ message: `Análise de dependências executada com sucesso`,
351
+ data: result
352
+ };
353
+ }
354
+ catch (error) {
355
+ throw new Error(`Falha ao analisar dependências: ${error}`);
356
+ }
357
+ },
358
+ /**
359
+ * Lista advisories de segurança
360
+ */
361
+ async listSecurityAdvisories(params, provider) {
362
+ try {
363
+ // Auto-detecção de owner/username se não fornecidos
364
+ let updatedParams = { ...params };
365
+ const currentUser = await provider.getCurrentUser();
366
+ const owner = currentUser.login;
367
+ if (!provider.listSecurityAdvisories) {
368
+ return {
369
+ success: false,
370
+ action: 'list-security-advisories',
371
+ message: 'Funcionalidade não suportada por este provider',
372
+ error: 'Provider não implementa listSecurityAdvisories'
373
+ };
374
+ }
375
+ const result = await provider.listSecurityAdvisories({
376
+ owner: (await provider.getCurrentUser()).login,
377
+ repo: params.repo,
378
+ severity: params.severity,
379
+ ecosystem: params.ecosystem,
380
+ package: params.package_name,
381
+ page: params.page,
382
+ limit: params.limit
383
+ });
384
+ return {
385
+ success: true,
386
+ action: 'advisories',
387
+ message: `${result.advisories?.length || 0} advisories encontrados`,
388
+ data: result
389
+ };
390
+ }
391
+ catch (error) {
392
+ throw new Error(`Falha ao listar advisories: ${error}`);
393
+ }
394
+ }
395
+ };
396
396
  //# sourceMappingURL=gh-security.js.map