@andrebuzeli/git-mcp 2.6.1

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 (122) hide show
  1. package/README.md +346 -0
  2. package/dist/client.d.ts +307 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +299 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/config.d.ts +299 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +381 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +22 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +53 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/providers/base-provider.d.ts +139 -0
  15. package/dist/providers/base-provider.d.ts.map +1 -0
  16. package/dist/providers/base-provider.js +246 -0
  17. package/dist/providers/base-provider.js.map +1 -0
  18. package/dist/providers/error-handler.d.ts +51 -0
  19. package/dist/providers/error-handler.d.ts.map +1 -0
  20. package/dist/providers/error-handler.js +170 -0
  21. package/dist/providers/error-handler.js.map +1 -0
  22. package/dist/providers/gitea-provider.d.ts +68 -0
  23. package/dist/providers/gitea-provider.d.ts.map +1 -0
  24. package/dist/providers/gitea-provider.js +515 -0
  25. package/dist/providers/gitea-provider.js.map +1 -0
  26. package/dist/providers/github-provider.d.ts +68 -0
  27. package/dist/providers/github-provider.d.ts.map +1 -0
  28. package/dist/providers/github-provider.js +518 -0
  29. package/dist/providers/github-provider.js.map +1 -0
  30. package/dist/providers/index.d.ts +13 -0
  31. package/dist/providers/index.d.ts.map +1 -0
  32. package/dist/providers/index.js +41 -0
  33. package/dist/providers/index.js.map +1 -0
  34. package/dist/providers/provider-factory.d.ts +75 -0
  35. package/dist/providers/provider-factory.d.ts.map +1 -0
  36. package/dist/providers/provider-factory.js +298 -0
  37. package/dist/providers/provider-factory.js.map +1 -0
  38. package/dist/providers/types.d.ts +276 -0
  39. package/dist/providers/types.d.ts.map +1 -0
  40. package/dist/providers/types.js +7 -0
  41. package/dist/providers/types.js.map +1 -0
  42. package/dist/server.d.ts +77 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +262 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/tools/actions.d.ts +272 -0
  47. package/dist/tools/actions.d.ts.map +1 -0
  48. package/dist/tools/actions.js +428 -0
  49. package/dist/tools/actions.js.map +1 -0
  50. package/dist/tools/analytics.d.ts +326 -0
  51. package/dist/tools/analytics.d.ts.map +1 -0
  52. package/dist/tools/analytics.js +473 -0
  53. package/dist/tools/analytics.js.map +1 -0
  54. package/dist/tools/branches.d.ts +461 -0
  55. package/dist/tools/branches.d.ts.map +1 -0
  56. package/dist/tools/branches.js +525 -0
  57. package/dist/tools/branches.js.map +1 -0
  58. package/dist/tools/code-review.d.ts +323 -0
  59. package/dist/tools/code-review.d.ts.map +1 -0
  60. package/dist/tools/code-review.js +552 -0
  61. package/dist/tools/code-review.js.map +1 -0
  62. package/dist/tools/commits.d.ts +488 -0
  63. package/dist/tools/commits.d.ts.map +1 -0
  64. package/dist/tools/commits.js +578 -0
  65. package/dist/tools/commits.js.map +1 -0
  66. package/dist/tools/deployments.d.ts +319 -0
  67. package/dist/tools/deployments.d.ts.map +1 -0
  68. package/dist/tools/deployments.js +355 -0
  69. package/dist/tools/deployments.js.map +1 -0
  70. package/dist/tools/files.d.ts +456 -0
  71. package/dist/tools/files.d.ts.map +1 -0
  72. package/dist/tools/files.js +531 -0
  73. package/dist/tools/files.js.map +1 -0
  74. package/dist/tools/git-sync.d.ts +177 -0
  75. package/dist/tools/git-sync.d.ts.map +1 -0
  76. package/dist/tools/git-sync.js +112 -0
  77. package/dist/tools/git-sync.js.map +1 -0
  78. package/dist/tools/issues.d.ts +579 -0
  79. package/dist/tools/issues.d.ts.map +1 -0
  80. package/dist/tools/issues.js +631 -0
  81. package/dist/tools/issues.js.map +1 -0
  82. package/dist/tools/pulls.d.ts +702 -0
  83. package/dist/tools/pulls.d.ts.map +1 -0
  84. package/dist/tools/pulls.js +730 -0
  85. package/dist/tools/pulls.js.map +1 -0
  86. package/dist/tools/releases.d.ts +495 -0
  87. package/dist/tools/releases.d.ts.map +1 -0
  88. package/dist/tools/releases.js +551 -0
  89. package/dist/tools/releases.js.map +1 -0
  90. package/dist/tools/repositories.d.ts +513 -0
  91. package/dist/tools/repositories.d.ts.map +1 -0
  92. package/dist/tools/repositories.js +634 -0
  93. package/dist/tools/repositories.js.map +1 -0
  94. package/dist/tools/security.d.ts +341 -0
  95. package/dist/tools/security.d.ts.map +1 -0
  96. package/dist/tools/security.js +394 -0
  97. package/dist/tools/security.js.map +1 -0
  98. package/dist/tools/tags.d.ts +419 -0
  99. package/dist/tools/tags.d.ts.map +1 -0
  100. package/dist/tools/tags.js +479 -0
  101. package/dist/tools/tags.js.map +1 -0
  102. package/dist/tools/users.d.ts +376 -0
  103. package/dist/tools/users.d.ts.map +1 -0
  104. package/dist/tools/users.js +495 -0
  105. package/dist/tools/users.js.map +1 -0
  106. package/dist/tools/validator.d.ts +192 -0
  107. package/dist/tools/validator.d.ts.map +1 -0
  108. package/dist/tools/validator.js +198 -0
  109. package/dist/tools/validator.js.map +1 -0
  110. package/dist/tools/version-control.d.ts +247 -0
  111. package/dist/tools/version-control.d.ts.map +1 -0
  112. package/dist/tools/version-control.js +521 -0
  113. package/dist/tools/version-control.js.map +1 -0
  114. package/dist/tools/webhooks.d.ts +478 -0
  115. package/dist/tools/webhooks.d.ts.map +1 -0
  116. package/dist/tools/webhooks.js +541 -0
  117. package/dist/tools/webhooks.js.map +1 -0
  118. package/dist/tools/workflows.d.ts +313 -0
  119. package/dist/tools/workflows.d.ts.map +1 -0
  120. package/dist/tools/workflows.js +430 -0
  121. package/dist/tools/workflows.js.map +1 -0
  122. package/package.json +58 -0
@@ -0,0 +1,394 @@
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 validator_js_1 = require("./validator.js");
7
+ /**
8
+ * Tool: security
9
+ *
10
+ * DESCRIÇÃO:
11
+ * Gerenciamento completo de segurança e compliance com múltiplas ações
12
+ *
13
+ * FUNCIONALIDADES:
14
+ * - Execução de scans de segurança
15
+ * - Listagem de vulnerabilidades
16
+ * - Gerenciamento de alertas de segurança
17
+ * - Configuração de políticas de segurança
18
+ * - Verificação de compliance
19
+ * - Análise de dependências
20
+ *
21
+ * USO:
22
+ * - Para monitorar vulnerabilidades
23
+ * - Para configurar políticas de segurança
24
+ * - Para compliance e auditoria
25
+ * - Para análise de dependências
26
+ *
27
+ * RECOMENDAÇÕES:
28
+ * - Execute scans regularmente
29
+ * - Configure alertas automáticos
30
+ * - Mantenha dependências atualizadas
31
+ * - Implemente políticas rigorosas
32
+ */
33
+ /**
34
+ * Schema de validação para entrada da tool security
35
+ */
36
+ const SecurityInputSchema = zod_1.z.object({
37
+ action: zod_1.z.enum(['scan', 'vulnerabilities', 'alerts', 'policies', 'compliance', 'dependencies', 'advisories']),
38
+ // Parâmetros comuns
39
+ owner: validator_js_1.CommonSchemas.owner,
40
+ repo: validator_js_1.CommonSchemas.repo,
41
+ provider: validator_js_1.CommonSchemas.provider,
42
+ // Parâmetros para listagem
43
+ page: validator_js_1.CommonSchemas.page,
44
+ limit: validator_js_1.CommonSchemas.limit,
45
+ // Parâmetros para scan
46
+ scan_type: zod_1.z.enum(['code', 'dependencies', 'secrets', 'infrastructure']).optional(),
47
+ ref: validator_js_1.CommonSchemas.branch,
48
+ // Parâmetros para vulnerabilidades
49
+ severity: zod_1.z.enum(['low', 'medium', 'high', 'critical']).optional(),
50
+ state: zod_1.z.enum(['open', 'fixed', 'dismissed']).optional(),
51
+ ecosystem: validator_js_1.CommonSchemas.shortString,
52
+ package_name: validator_js_1.CommonSchemas.shortString,
53
+ // Parâmetros para alertas
54
+ alert_id: validator_js_1.CommonSchemas.shortString,
55
+ alert_number: zod_1.z.number().optional(),
56
+ dismiss_reason: zod_1.z.enum(['fix_started', 'inaccurate', 'no_bandwidth', 'not_used', 'tolerable_risk']).optional(),
57
+ dismiss_comment: validator_js_1.CommonSchemas.mediumString,
58
+ // Parâmetros para políticas
59
+ policy_name: validator_js_1.CommonSchemas.shortString,
60
+ policy_type: zod_1.z.enum(['branch_protection', 'required_reviews', 'status_checks', 'restrictions']).optional(),
61
+ policy_config: zod_1.z.record(zod_1.z.any()).optional(),
62
+ // Parâmetros para compliance
63
+ compliance_framework: zod_1.z.enum(['sox', 'pci', 'hipaa', 'gdpr', 'iso27001']).optional(),
64
+ report_format: zod_1.z.enum(['json', 'csv', 'pdf']).optional(),
65
+ // Filtros
66
+ created_after: zod_1.z.string().optional(),
67
+ created_before: zod_1.z.string().optional(),
68
+ updated_after: zod_1.z.string().optional(),
69
+ updated_before: zod_1.z.string().optional()
70
+ }).refine((data) => {
71
+ // Validações específicas por ação
72
+ if (['alerts'].includes(data.action) && data.alert_id) {
73
+ return data.owner && data.repo;
74
+ }
75
+ return data.owner && data.repo;
76
+ }, {
77
+ message: "Parâmetros obrigatórios não fornecidos para a ação especificada"
78
+ });
79
+ /**
80
+ * Schema de validação para resultado da tool security
81
+ */
82
+ const SecurityResultSchema = zod_1.z.object({
83
+ success: zod_1.z.boolean(),
84
+ action: zod_1.z.string(),
85
+ message: zod_1.z.string(),
86
+ data: zod_1.z.any().optional(),
87
+ error: zod_1.z.string().optional()
88
+ });
89
+ /**
90
+ * Implementação da tool security
91
+ */
92
+ exports.securityTool = {
93
+ name: 'security',
94
+ description: 'Manage security and compliance with multiple actions: scan, vulnerabilities, alerts, policies, compliance, dependencies. Suporte completo a GitHub Security e Gitea Security simultaneamente. Boas práticas: execute scans regularmente, configure alertas automáticos, mantenha dependências atualizadas e implemente políticas rigorosas.',
95
+ inputSchema: {
96
+ type: 'object',
97
+ properties: {
98
+ action: {
99
+ type: 'string',
100
+ enum: ['scan', 'vulnerabilities', 'alerts', 'policies', 'compliance', 'dependencies', 'advisories'],
101
+ description: 'Action to perform on security'
102
+ },
103
+ owner: { type: 'string', description: 'Repository owner' },
104
+ repo: { type: 'string', description: 'Repository name' },
105
+ provider: { type: 'string', description: 'Specific provider (github, gitea) or use default' },
106
+ scan_type: { type: 'string', enum: ['code', 'dependencies', 'secrets', 'infrastructure'], description: 'Type of security scan' },
107
+ ref: { type: 'string', description: 'Git reference to scan' },
108
+ severity: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], description: 'Vulnerability severity filter' },
109
+ state: { type: 'string', enum: ['open', 'fixed', 'dismissed'], description: 'Vulnerability state filter' },
110
+ ecosystem: { type: 'string', description: 'Package ecosystem' },
111
+ package_name: { type: 'string', description: 'Package name' },
112
+ alert_id: { type: 'string', description: 'Security alert ID' },
113
+ alert_number: { type: 'number', description: 'Security alert number' },
114
+ dismiss_reason: { type: 'string', enum: ['fix_started', 'inaccurate', 'no_bandwidth', 'not_used', 'tolerable_risk'], description: 'Reason for dismissing alert' },
115
+ dismiss_comment: { type: 'string', description: 'Comment for dismissing alert' },
116
+ policy_name: { type: 'string', description: 'Security policy name' },
117
+ policy_type: { type: 'string', enum: ['branch_protection', 'required_reviews', 'status_checks', 'restrictions'], description: 'Security policy type' },
118
+ policy_config: { type: 'object', description: 'Security policy configuration' },
119
+ compliance_framework: { type: 'string', enum: ['sox', 'pci', 'hipaa', 'gdpr', 'iso27001'], description: 'Compliance framework' },
120
+ report_format: { type: 'string', enum: ['json', 'csv', 'pdf'], description: 'Report format' },
121
+ created_after: { type: 'string', description: 'Filter items created after date' },
122
+ created_before: { type: 'string', description: 'Filter items created before date' },
123
+ updated_after: { type: 'string', description: 'Filter items updated after date' },
124
+ updated_before: { type: 'string', description: 'Filter items updated before date' },
125
+ page: { type: 'number', description: 'Page number', minimum: 1 },
126
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 }
127
+ },
128
+ required: ['action']
129
+ },
130
+ async handler(input) {
131
+ try {
132
+ const validatedInput = SecurityInputSchema.parse(input);
133
+ const provider = validatedInput.provider
134
+ ? index_js_1.globalProviderFactory.getProvider(validatedInput.provider)
135
+ : index_js_1.globalProviderFactory.getDefaultProvider();
136
+ if (!provider) {
137
+ throw new Error(`Provider '${validatedInput.provider}' não encontrado`);
138
+ }
139
+ switch (validatedInput.action) {
140
+ case 'scan':
141
+ return await this.runSecurityScan(validatedInput, provider);
142
+ case 'vulnerabilities':
143
+ return await this.listVulnerabilities(validatedInput, provider);
144
+ case 'alerts':
145
+ return await this.manageSecurityAlerts(validatedInput, provider);
146
+ case 'policies':
147
+ return await this.manageSecurityPolicies(validatedInput, provider);
148
+ case 'compliance':
149
+ return await this.checkCompliance(validatedInput, provider);
150
+ case 'dependencies':
151
+ return await this.analyzeDependencies(validatedInput, provider);
152
+ case 'advisories':
153
+ return await this.listSecurityAdvisories(validatedInput, provider);
154
+ default:
155
+ throw new Error(`Ação não suportada: ${validatedInput.action}`);
156
+ }
157
+ }
158
+ catch (error) {
159
+ return {
160
+ success: false,
161
+ action: input.action || 'unknown',
162
+ message: 'Erro na operação de security',
163
+ error: error instanceof Error ? error.message : String(error)
164
+ };
165
+ }
166
+ },
167
+ /**
168
+ * Executa scan de segurança
169
+ */
170
+ async runSecurityScan(params, provider) {
171
+ try {
172
+ if (!provider.runSecurityScan) {
173
+ return {
174
+ success: false,
175
+ action: 'run-security-scan',
176
+ message: 'Funcionalidade não suportada por este provider',
177
+ error: 'Provider não implementa runSecurityScan'
178
+ };
179
+ }
180
+ const result = await provider.runSecurityScan({
181
+ owner: params.owner,
182
+ repo: params.repo,
183
+ scan_type: params.scan_type || 'code',
184
+ ref: params.ref || 'main'
185
+ });
186
+ return {
187
+ success: true,
188
+ action: 'scan',
189
+ message: `Scan de segurança executado com sucesso`,
190
+ data: result
191
+ };
192
+ }
193
+ catch (error) {
194
+ throw new Error(`Falha ao executar scan de segurança: ${error}`);
195
+ }
196
+ },
197
+ /**
198
+ * Lista vulnerabilidades
199
+ */
200
+ async listVulnerabilities(params, provider) {
201
+ try {
202
+ if (!provider.listVulnerabilities) {
203
+ return {
204
+ success: false,
205
+ action: 'list-vulnerabilities',
206
+ message: 'Funcionalidade não suportada por este provider',
207
+ error: 'Provider não implementa listVulnerabilities'
208
+ };
209
+ }
210
+ const result = await provider.listVulnerabilities({
211
+ owner: params.owner,
212
+ repo: params.repo,
213
+ severity: params.severity,
214
+ state: params.state,
215
+ ecosystem: params.ecosystem,
216
+ package: params.package_name,
217
+ page: params.page,
218
+ limit: params.limit
219
+ });
220
+ return {
221
+ success: true,
222
+ action: 'vulnerabilities',
223
+ message: `${result.vulnerabilities?.length || 0} vulnerabilidades encontradas`,
224
+ data: result
225
+ };
226
+ }
227
+ catch (error) {
228
+ throw new Error(`Falha ao listar vulnerabilidades: ${error}`);
229
+ }
230
+ },
231
+ /**
232
+ * Gerencia alertas de segurança
233
+ */
234
+ async manageSecurityAlerts(params, provider) {
235
+ try {
236
+ if (!provider.manageSecurityAlerts) {
237
+ return {
238
+ success: false,
239
+ action: 'manage-security-alerts',
240
+ message: 'Funcionalidade não suportada por este provider',
241
+ error: 'Provider não implementa manageSecurityAlerts'
242
+ };
243
+ }
244
+ const result = await provider.manageSecurityAlerts({
245
+ owner: params.owner,
246
+ repo: params.repo,
247
+ alert_id: params.alert_id,
248
+ alert_number: params.alert_number,
249
+ dismiss_reason: params.dismiss_reason,
250
+ dismiss_comment: params.dismiss_comment,
251
+ state: params.state,
252
+ page: params.page,
253
+ limit: params.limit
254
+ });
255
+ return {
256
+ success: true,
257
+ action: 'alerts',
258
+ message: `Alertas de segurança gerenciados com sucesso`,
259
+ data: result
260
+ };
261
+ }
262
+ catch (error) {
263
+ throw new Error(`Falha ao gerenciar alertas de segurança: ${error}`);
264
+ }
265
+ },
266
+ /**
267
+ * Gerencia políticas de segurança
268
+ */
269
+ async manageSecurityPolicies(params, provider) {
270
+ try {
271
+ if (!provider.manageSecurityPolicies) {
272
+ return {
273
+ success: false,
274
+ action: 'manage-security-policies',
275
+ message: 'Funcionalidade não suportada por este provider',
276
+ error: 'Provider não implementa manageSecurityPolicies'
277
+ };
278
+ }
279
+ const result = await provider.manageSecurityPolicies({
280
+ owner: params.owner,
281
+ repo: params.repo,
282
+ policy_name: params.policy_name,
283
+ policy_type: params.policy_type,
284
+ policy_config: params.policy_config,
285
+ page: params.page,
286
+ limit: params.limit
287
+ });
288
+ return {
289
+ success: true,
290
+ action: 'policies',
291
+ message: `Políticas de segurança gerenciadas com sucesso`,
292
+ data: result
293
+ };
294
+ }
295
+ catch (error) {
296
+ throw new Error(`Falha ao gerenciar políticas de segurança: ${error}`);
297
+ }
298
+ },
299
+ /**
300
+ * Verifica compliance
301
+ */
302
+ async checkCompliance(params, provider) {
303
+ try {
304
+ if (!provider.checkCompliance) {
305
+ return {
306
+ success: false,
307
+ action: 'check-compliance',
308
+ message: 'Funcionalidade não suportada por este provider',
309
+ error: 'Provider não implementa checkCompliance'
310
+ };
311
+ }
312
+ const result = await provider.checkCompliance({
313
+ owner: params.owner,
314
+ repo: params.repo,
315
+ framework: params.compliance_framework,
316
+ report_format: params.report_format || 'json'
317
+ });
318
+ return {
319
+ success: true,
320
+ action: 'compliance',
321
+ message: `Verificação de compliance executada com sucesso`,
322
+ data: result
323
+ };
324
+ }
325
+ catch (error) {
326
+ throw new Error(`Falha ao verificar compliance: ${error}`);
327
+ }
328
+ },
329
+ /**
330
+ * Analisa dependências
331
+ */
332
+ async analyzeDependencies(params, provider) {
333
+ try {
334
+ if (!provider.analyzeDependencies) {
335
+ return {
336
+ success: false,
337
+ action: 'analyze-dependencies',
338
+ message: 'Funcionalidade não suportada por este provider',
339
+ error: 'Provider não implementa analyzeDependencies'
340
+ };
341
+ }
342
+ const result = await provider.analyzeDependencies({
343
+ owner: params.owner,
344
+ repo: params.repo,
345
+ ecosystem: params.ecosystem,
346
+ package: params.package_name,
347
+ ref: params.ref
348
+ });
349
+ return {
350
+ success: true,
351
+ action: 'dependencies',
352
+ message: `Análise de dependências executada com sucesso`,
353
+ data: result
354
+ };
355
+ }
356
+ catch (error) {
357
+ throw new Error(`Falha ao analisar dependências: ${error}`);
358
+ }
359
+ },
360
+ /**
361
+ * Lista advisories de segurança
362
+ */
363
+ async listSecurityAdvisories(params, provider) {
364
+ try {
365
+ if (!provider.listSecurityAdvisories) {
366
+ return {
367
+ success: false,
368
+ action: 'list-security-advisories',
369
+ message: 'Funcionalidade não suportada por este provider',
370
+ error: 'Provider não implementa listSecurityAdvisories'
371
+ };
372
+ }
373
+ const result = await provider.listSecurityAdvisories({
374
+ owner: params.owner,
375
+ repo: params.repo,
376
+ severity: params.severity,
377
+ ecosystem: params.ecosystem,
378
+ package: params.package_name,
379
+ page: params.page,
380
+ limit: params.limit
381
+ });
382
+ return {
383
+ success: true,
384
+ action: 'advisories',
385
+ message: `${result.advisories?.length || 0} advisories encontrados`,
386
+ data: result
387
+ };
388
+ }
389
+ catch (error) {
390
+ throw new Error(`Falha ao listar advisories: ${error}`);
391
+ }
392
+ }
393
+ };
394
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/tools/security.ts"],"names":[],"mappings":"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"}