@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,730 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pullsTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_js_1 = require("../providers/index.js");
6
+ /**
7
+ * Tool: pulls
8
+ *
9
+ * DESCRIÇÃO:
10
+ * Gerenciamento completo de pull requests com suporte multi-provider (GitHub e Gitea)
11
+ *
12
+ * FUNCIONALIDADES:
13
+ * - Criação de novos pull requests
14
+ * - Listagem e busca de PRs
15
+ * - Obtenção de detalhes específicos
16
+ * - Atualização de PRs existentes
17
+ * - Merge de pull requests
18
+ * - Fechamento de PRs
19
+ * - Revisão e aprovação
20
+ * - Busca por conteúdo e status
21
+ *
22
+ * USO:
23
+ * - Para gerenciar integração de código
24
+ * - Para revisão de código
25
+ * - Para controle de qualidade
26
+ * - Para colaboração em equipe
27
+ *
28
+ * RECOMENDAÇÕES:
29
+ * - Use títulos descritivos
30
+ * - Documente mudanças detalhadamente
31
+ * - Revise antes de fazer merge
32
+ * - Mantenha PRs pequenos e focados
33
+ */
34
+ /**
35
+ * Schema de validação para entrada da tool pulls
36
+ *
37
+ * VALIDAÇÕES:
38
+ * - action: Ação obrigatória (create, list, get, update, merge, close, review, search)
39
+ * - Parâmetros específicos por ação
40
+ * - Validação de tipos e formatos
41
+ *
42
+ * RECOMENDAÇÕES:
43
+ * - Sempre valide entrada antes de usar
44
+ * - Use parâmetros opcionais adequadamente
45
+ * - Documente parâmetros obrigatórios
46
+ */
47
+ const PullsInputSchema = zod_1.z.object({
48
+ action: zod_1.z.enum(['create', 'list', 'get', 'update', 'merge', 'close', 'review', 'search']),
49
+ // Parâmetros comuns
50
+ owner: zod_1.z.string().optional(),
51
+ repo: zod_1.z.string().optional(),
52
+ // Para multi-provider
53
+ provider: zod_1.z.string().optional(),
54
+ // Para create
55
+ title: zod_1.z.string().optional(),
56
+ body: zod_1.z.string().optional(),
57
+ head: zod_1.z.string().optional(),
58
+ base: zod_1.z.string().optional(),
59
+ draft: zod_1.z.boolean().optional(),
60
+ labels: zod_1.z.array(zod_1.z.string()).optional(),
61
+ assignees: zod_1.z.array(zod_1.z.string()).optional(),
62
+ reviewers: zod_1.z.array(zod_1.z.string()).optional(),
63
+ milestone: zod_1.z.number().optional(),
64
+ // Para get/update/merge/close/review
65
+ pull_number: zod_1.z.number().optional(),
66
+ // Para list
67
+ state: zod_1.z.enum(['open', 'closed', 'merged', 'all']).optional(),
68
+ page: zod_1.z.number().min(1).optional(),
69
+ limit: zod_1.z.number().min(1).max(100).optional(),
70
+ // Para update
71
+ new_title: zod_1.z.string().optional(),
72
+ new_body: zod_1.z.string().optional(),
73
+ new_base: zod_1.z.string().optional(),
74
+ new_labels: zod_1.z.array(zod_1.z.string()).optional(),
75
+ new_assignees: zod_1.z.array(zod_1.z.string()).optional(),
76
+ new_milestone: zod_1.z.number().optional(),
77
+ // Para merge
78
+ merge_method: zod_1.z.enum(['merge', 'rebase', 'squash']).optional(),
79
+ merge_commit_title: zod_1.z.string().optional(),
80
+ merge_commit_message: zod_1.z.string().optional(),
81
+ // Para review
82
+ review_event: zod_1.z.enum(['APPROVE', 'REQUEST_CHANGES', 'COMMENT']).optional(),
83
+ review_body: zod_1.z.string().optional(),
84
+ // Para search
85
+ query: zod_1.z.string().optional(),
86
+ author: zod_1.z.string().optional(),
87
+ assignee: zod_1.z.string().optional(),
88
+ reviewer: zod_1.z.string().optional(),
89
+ label: zod_1.z.string().optional(),
90
+ });
91
+ /**
92
+ * Schema de saída padronizado
93
+ *
94
+ * ESTRUTURA:
95
+ * - success: Status da operação
96
+ * - action: Ação executada
97
+ * - message: Mensagem descritiva
98
+ * - data: Dados retornados (opcional)
99
+ * - error: Detalhes do erro (opcional)
100
+ */
101
+ const PullsResultSchema = zod_1.z.object({
102
+ success: zod_1.z.boolean(),
103
+ action: zod_1.z.string(),
104
+ message: zod_1.z.string(),
105
+ data: zod_1.z.any().optional(),
106
+ error: zod_1.z.string().optional()
107
+ });
108
+ /**
109
+ * Tool: pulls
110
+ *
111
+ * DESCRIÇÃO:
112
+ * Gerenciamento completo de Pull Requests Gitea com múltiplas ações
113
+ *
114
+ * ACTIONS DISPONÍVEIS:
115
+ *
116
+ * 1. create - Criar novo Pull Request
117
+ * Parâmetros:
118
+ * - owner (obrigatório): Proprietário do repositório
119
+ * - repo (obrigatório): Nome do repositório
120
+ * - title (obrigatório): Título do PR
121
+ * - body (opcional): Descrição detalhada
122
+ * - head (obrigatório): Branch de origem
123
+ * - base (obrigatório): Branch de destino
124
+ * - draft (opcional): Se é um draft PR
125
+ * - labels (opcional): Array de labels
126
+ * - assignees (opcional): Array de usuários responsáveis
127
+ * - reviewers (opcional): Array de revisores
128
+ * - milestone (opcional): ID do milestone
129
+ *
130
+ * 2. list - Listar Pull Requests
131
+ * Parâmetros:
132
+ * - owner (obrigatório): Proprietário do repositório
133
+ * - repo (obrigatório): Nome do repositório
134
+ * - state (opcional): Estado dos PRs (open, closed, merged, all) - padrão: open
135
+ * - page (opcional): Página da listagem (padrão: 1)
136
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
137
+ *
138
+ * 3. get - Obter detalhes do Pull Request
139
+ * Parâmetros:
140
+ * - owner (obrigatório): Proprietário do repositório
141
+ * - repo (obrigatório): Nome do repositório
142
+ * - pull_number (obrigatório): Número do PR
143
+ *
144
+ * 4. update - Atualizar Pull Request existente
145
+ * Parâmetros:
146
+ * - owner (obrigatório): Proprietário do repositório
147
+ * - repo (obrigatório): Nome do repositório
148
+ * - pull_number (obrigatório): Número do PR
149
+ * - new_title (opcional): Novo título
150
+ * - new_body (opcional): Nova descrição
151
+ * - new_base (opcional): Nova branch base
152
+ * - new_labels (opcional): Novos labels
153
+ * - new_assignees (opcional): Novos responsáveis
154
+ * - new_milestone (opcional): Novo milestone
155
+ *
156
+ * 5. merge - Fazer merge do Pull Request
157
+ * Parâmetros:
158
+ * - owner (obrigatório): Proprietário do repositório
159
+ * - repo (obrigatório): Nome do repositório
160
+ * - pull_number (obrigatório): Número do PR
161
+ * - merge_method (opcional): Método de merge (merge, rebase, squash)
162
+ * - merge_commit_title (opcional): Título do commit de merge
163
+ * - merge_commit_message (opcional): Mensagem do commit de merge
164
+ *
165
+ * 6. close - Fechar Pull Request
166
+ * Parâmetros:
167
+ * - owner (obrigatório): Proprietário do repositório
168
+ * - repo (obrigatório): Nome do repositório
169
+ * - pull_number (obrigatório): Número do PR
170
+ *
171
+ * 7. review - Adicionar review ao Pull Request
172
+ * Parâmetros:
173
+ * - owner (obrigatório): Proprietário do repositório
174
+ * - repo (obrigatório): Nome do repositório
175
+ * - pull_number (obrigatório): Número do PR
176
+ * - review_event (obrigatório): Tipo de review (APPROVE, REQUEST_CHANGES, COMMENT)
177
+ * - review_body (opcional): Comentário do review
178
+ *
179
+ * 8. search - Buscar Pull Requests
180
+ * Parâmetros:
181
+ * - owner (obrigatório): Proprietário do repositório
182
+ * - repo (obrigatório): Nome do repositório
183
+ * - query (obrigatório): Termo de busca
184
+ * - author (opcional): Autor dos PRs
185
+ * - assignee (opcional): Responsável pelos PRs
186
+ * - reviewer (opcional): Revisor dos PRs
187
+ * - label (opcional): Label específico
188
+ *
189
+ * RECOMENDAÇÕES DE USO:
190
+ * - Use títulos descritivos e claros
191
+ * - Documente mudanças detalhadamente
192
+ * - Solicite reviews adequados
193
+ * - Mantenha PRs pequenos e focados
194
+ * - Use labels para categorização
195
+ * - Atribua responsáveis adequadamente
196
+ * - Escolha método de merge apropriado
197
+ */
198
+ exports.pullsTool = {
199
+ name: 'pulls',
200
+ description: 'Manage pull requests with multi-provider support (GitHub and Gitea): create, list, get, update, merge, close, review, search. Boas práticas (solo): use PRs como barreira de revisão/checklist antes de integrar; mantenha PRs pequenos e focados; descreva mudanças; escolha método de merge apropriado; use reviews para autoauditoria.',
201
+ inputSchema: {
202
+ type: 'object',
203
+ properties: {
204
+ action: {
205
+ type: 'string',
206
+ enum: ['create', 'list', 'get', 'update', 'merge', 'close', 'review', 'search'],
207
+ description: 'Action to perform on pull requests'
208
+ },
209
+ owner: { type: 'string', description: 'Repository owner' },
210
+ repo: { type: 'string', description: 'Repository name' },
211
+ provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
212
+ title: { type: 'string', description: 'Pull request title' },
213
+ body: { type: 'string', description: 'Pull request body/description' },
214
+ head: { type: 'string', description: 'Source branch' },
215
+ base: { type: 'string', description: 'Target branch' },
216
+ draft: { type: 'boolean', description: 'Create as draft PR' },
217
+ labels: { type: 'array', items: { type: 'string' }, description: 'PR labels' },
218
+ assignees: { type: 'array', items: { type: 'string' }, description: 'PR assignees' },
219
+ reviewers: { type: 'array', items: { type: 'string' }, description: 'PR reviewers' },
220
+ milestone: { type: 'number', description: 'Milestone ID' },
221
+ pull_number: { type: 'number', description: 'Pull request number' },
222
+ state: { type: 'string', enum: ['open', 'closed', 'merged', 'all'], description: 'PR state' },
223
+ page: { type: 'number', description: 'Page number', minimum: 1 },
224
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
225
+ new_title: { type: 'string', description: 'New PR title' },
226
+ new_body: { type: 'string', description: 'New PR body' },
227
+ new_base: { type: 'string', description: 'New base branch' },
228
+ new_labels: { type: 'array', items: { type: 'string' }, description: 'New PR labels' },
229
+ new_assignees: { type: 'array', items: { type: 'string' }, description: 'New PR assignees' },
230
+ new_milestone: { type: 'number', description: 'New milestone ID' },
231
+ merge_method: { type: 'string', enum: ['merge', 'rebase', 'squash'], description: 'Merge method' },
232
+ merge_commit_title: { type: 'string', description: 'Merge commit title' },
233
+ merge_commit_message: { type: 'string', description: 'Merge commit message' },
234
+ review_event: { type: 'string', enum: ['APPROVE', 'REQUEST_CHANGES', 'COMMENT'], description: 'Review type' },
235
+ review_body: { type: 'string', description: 'Review comment' },
236
+ query: { type: 'string', description: 'Search query' },
237
+ author: { type: 'string', description: 'PR author filter' },
238
+ assignee: { type: 'string', description: 'PR assignee filter' },
239
+ reviewer: { type: 'string', description: 'PR reviewer filter' },
240
+ label: { type: 'string', description: 'PR label filter' }
241
+ },
242
+ required: ['action']
243
+ },
244
+ /**
245
+ * Handler principal da tool pulls
246
+ *
247
+ * FUNCIONALIDADE:
248
+ * - Valida entrada usando Zod schema
249
+ * - Roteia para método específico baseado na ação
250
+ * - Trata erros de forma uniforme
251
+ * - Retorna resultado padronizado
252
+ *
253
+ * FLUXO:
254
+ * 1. Validação de entrada
255
+ * 2. Seleção do provider
256
+ * 3. Roteamento por ação
257
+ * 4. Execução do método específico
258
+ * 5. Tratamento de erros
259
+ * 6. Retorno de resultado
260
+ *
261
+ * TRATAMENTO DE ERROS:
262
+ * - Validação: erro de schema
263
+ * - Execução: erro da operação
264
+ * - Roteamento: ação não suportada
265
+ *
266
+ * RECOMENDAÇÕES:
267
+ * - Sempre valide entrada antes de processar
268
+ * - Trate erros específicos adequadamente
269
+ * - Log detalhes de erro para debug
270
+ * - Retorne mensagens de erro úteis
271
+ */
272
+ async handler(input) {
273
+ try {
274
+ const validatedInput = PullsInputSchema.parse(input);
275
+ // Seleciona o provider baseado na entrada ou usa o padrão
276
+ const provider = validatedInput.provider
277
+ ? index_js_1.globalProviderFactory.getProvider(validatedInput.provider)
278
+ : index_js_1.globalProviderFactory.getDefaultProvider();
279
+ if (!provider) {
280
+ throw new Error('Provider não encontrado ou não configurado');
281
+ }
282
+ switch (validatedInput.action) {
283
+ case 'create':
284
+ return await this.createPullRequest(validatedInput, provider);
285
+ case 'list':
286
+ return await this.listPullRequests(validatedInput, provider);
287
+ case 'get':
288
+ return await this.getPullRequest(validatedInput, provider);
289
+ case 'update':
290
+ return await this.updatePullRequest(validatedInput, provider);
291
+ case 'merge':
292
+ return await this.mergePullRequest(validatedInput, provider);
293
+ case 'close':
294
+ return await this.closePullRequest(validatedInput, provider);
295
+ case 'review':
296
+ return await this.addReview(validatedInput, provider);
297
+ case 'search':
298
+ return await this.searchPullRequests(validatedInput, provider);
299
+ default:
300
+ throw new Error(`Ação não suportada: ${validatedInput.action}`);
301
+ }
302
+ }
303
+ catch (error) {
304
+ return {
305
+ success: false,
306
+ action: input.action,
307
+ message: 'Erro na operação de pull requests',
308
+ error: error instanceof Error ? error.message : String(error)
309
+ };
310
+ }
311
+ },
312
+ /**
313
+ * Cria um novo Pull Request
314
+ *
315
+ * FUNCIONALIDADE:
316
+ * - Cria PR com título e descrição
317
+ * - Suporta configuração de branches
318
+ * - Permite configuração de draft, labels, assignees
319
+ *
320
+ * PARÂMETROS OBRIGATÓRIOS:
321
+ * - owner: Proprietário do repositório
322
+ * - repo: Nome do repositório
323
+ * - title: Título do PR
324
+ * - head: Branch de origem
325
+ * - base: Branch de destino
326
+ *
327
+ * PARÂMETROS OPCIONAIS:
328
+ * - body: Descrição detalhada
329
+ * - draft: Se é um draft PR
330
+ * - labels: Array de labels para categorização
331
+ * - assignees: Array de usuários responsáveis
332
+ * - reviewers: Array de revisores
333
+ * - milestone: ID do milestone associado
334
+ *
335
+ * VALIDAÇÕES:
336
+ * - Todos os parâmetros obrigatórios
337
+ * - Branches devem existir
338
+ * - Head e base devem ser diferentes
339
+ * - Usuário deve ter permissão de escrita
340
+ *
341
+ * RECOMENDAÇÕES:
342
+ * - Use títulos descritivos e claros
343
+ * - Documente mudanças detalhadamente
344
+ * - Solicite reviews adequados
345
+ * - Mantenha PRs pequenos e focados
346
+ */
347
+ async createPullRequest(params, provider) {
348
+ try {
349
+ if (!params.owner || !params.repo || !params.title || !params.head || !params.base) {
350
+ throw new Error('Owner, repo, title, head e base são obrigatórios');
351
+ }
352
+ const pullRequest = await provider.createPullRequest(params.owner, params.repo, params.title, params.body || '', params.head, params.base);
353
+ return {
354
+ success: true,
355
+ action: 'create',
356
+ message: `Pull Request '${params.title}' criado com sucesso`,
357
+ data: pullRequest
358
+ };
359
+ }
360
+ catch (error) {
361
+ throw new Error(`Falha ao criar Pull Request: ${error instanceof Error ? error.message : String(error)}`);
362
+ }
363
+ },
364
+ /**
365
+ * Lista Pull Requests do repositório
366
+ *
367
+ * FUNCIONALIDADE:
368
+ * - Lista PRs com filtros de estado
369
+ * - Suporta paginação
370
+ * - Retorna informações básicas de cada PR
371
+ *
372
+ * PARÂMETROS OBRIGATÓRIOS:
373
+ * - owner: Proprietário do repositório
374
+ * - repo: Nome do repositório
375
+ *
376
+ * PARÂMETROS OPCIONAIS:
377
+ * - state: Estado dos PRs (open, closed, merged, all) - padrão: open
378
+ * - page: Página da listagem (padrão: 1)
379
+ * - limit: Itens por página (padrão: 30, máximo: 100)
380
+ *
381
+ * VALIDAÇÕES:
382
+ * - Owner e repo obrigatórios
383
+ * - State deve ser um dos valores válidos
384
+ * - Page deve ser >= 1
385
+ * - Limit deve ser entre 1 e 100
386
+ *
387
+ * RECOMENDAÇÕES:
388
+ * - Use paginação para repositórios com muitos PRs
389
+ * - Monitore número total de PRs
390
+ * - Filtre por estado para organização
391
+ * - Mantenha PRs organizados
392
+ */
393
+ async listPullRequests(params, provider) {
394
+ try {
395
+ if (!params.owner || !params.repo) {
396
+ throw new Error('Owner e repo são obrigatórios');
397
+ }
398
+ const state = params.state || 'open';
399
+ const page = params.page || 1;
400
+ const limit = params.limit || 30;
401
+ const pullRequests = await provider.listPullRequests(params.owner, params.repo, state, page, limit);
402
+ return {
403
+ success: true,
404
+ action: 'list',
405
+ message: `${pullRequests.length} Pull Requests ${state} encontrados`,
406
+ data: {
407
+ pullRequests,
408
+ state,
409
+ page,
410
+ limit,
411
+ total: pullRequests.length
412
+ }
413
+ };
414
+ }
415
+ catch (error) {
416
+ throw new Error(`Falha ao listar Pull Requests: ${error instanceof Error ? error.message : String(error)}`);
417
+ }
418
+ },
419
+ /**
420
+ * Obtém detalhes de um Pull Request específico
421
+ *
422
+ * FUNCIONALIDADE:
423
+ * - Retorna informações completas do PR
424
+ * - Inclui título, descrição, branches, labels
425
+ * - Mostra status de merge e conflitos
426
+ *
427
+ * PARÂMETROS OBRIGATÓRIOS:
428
+ * - owner: Proprietário do repositório
429
+ * - repo: Nome do repositório
430
+ * - pull_number: Número do PR
431
+ *
432
+ * VALIDAÇÕES:
433
+ * - Todos os parâmetros obrigatórios
434
+ * - PR deve existir no repositório
435
+ * - Número deve ser válido
436
+ *
437
+ * RECOMENDAÇÕES:
438
+ * - Use para obter detalhes completos
439
+ * - Verifique status de merge
440
+ * - Analise conflitos se houver
441
+ * - Monitore mudanças importantes
442
+ */
443
+ async getPullRequest(params, provider) {
444
+ try {
445
+ if (!params.owner || !params.repo || !params.pull_number) {
446
+ throw new Error('Owner, repo e pull_number são obrigatórios');
447
+ }
448
+ const pullRequest = await provider.getPullRequest(params.owner, params.repo, params.pull_number);
449
+ return {
450
+ success: true,
451
+ action: 'get',
452
+ message: `Pull Request #${params.pull_number} obtido com sucesso`,
453
+ data: pullRequest
454
+ };
455
+ }
456
+ catch (error) {
457
+ throw new Error(`Falha ao obter Pull Request: ${error instanceof Error ? error.message : String(error)}`);
458
+ }
459
+ },
460
+ /**
461
+ * Atualiza um Pull Request existente
462
+ *
463
+ * FUNCIONALIDADE:
464
+ * - Atualiza campos do PR
465
+ * - Suporta mudança de branch base
466
+ * - Permite alteração de labels e assignees
467
+ *
468
+ * PARÂMETROS OBRIGATÓRIOS:
469
+ * - owner: Proprietário do repositório
470
+ * - repo: Nome do repositório
471
+ * - pull_number: Número do PR
472
+ *
473
+ * PARÂMETROS OPCIONAIS:
474
+ * - new_title: Novo título
475
+ * - new_body: Nova descrição
476
+ * - new_base: Nova branch base
477
+ * - new_labels: Novos labels
478
+ * - new_assignees: Novos responsáveis
479
+ * - new_milestone: Novo milestone
480
+ *
481
+ * VALIDAÇÕES:
482
+ * - Todos os parâmetros obrigatórios
483
+ * - PR deve existir
484
+ * - Pelo menos um campo deve ser atualizado
485
+ *
486
+ * RECOMENDAÇÕES:
487
+ * - Atualize apenas campos necessários
488
+ * - Use mensagens de commit descritivas
489
+ * - Documente mudanças importantes
490
+ * - Notifique responsáveis sobre mudanças
491
+ */
492
+ async updatePullRequest(params, provider) {
493
+ try {
494
+ if (!params.owner || !params.repo || !params.pull_number) {
495
+ throw new Error('Owner, repo e pull_number são obrigatórios');
496
+ }
497
+ const updateData = {};
498
+ if (params.new_title)
499
+ updateData.title = params.new_title;
500
+ if (params.new_body !== undefined)
501
+ updateData.body = params.new_body;
502
+ if (params.new_base)
503
+ updateData.base = params.new_base;
504
+ if (params.new_labels)
505
+ updateData.labels = params.new_labels;
506
+ if (params.new_assignees)
507
+ updateData.assignees = params.new_assignees;
508
+ if (params.new_milestone !== undefined)
509
+ updateData.milestone = params.new_milestone;
510
+ if (Object.keys(updateData).length === 0) {
511
+ throw new Error('Nenhum campo para atualizar foi fornecido');
512
+ }
513
+ const pullRequest = await provider.updatePullRequest(params.owner, params.repo, params.pull_number, updateData);
514
+ return {
515
+ success: true,
516
+ action: 'update',
517
+ message: `Pull Request #${params.pull_number} atualizado com sucesso`,
518
+ data: pullRequest
519
+ };
520
+ }
521
+ catch (error) {
522
+ throw new Error(`Falha ao atualizar Pull Request: ${error instanceof Error ? error.message : String(error)}`);
523
+ }
524
+ },
525
+ /**
526
+ * Faz merge de um Pull Request
527
+ *
528
+ * FUNCIONALIDADE:
529
+ * - Merge do PR na branch base
530
+ * - Suporta diferentes métodos de merge
531
+ * - Permite customização de commit de merge
532
+ *
533
+ * PARÂMETROS OBRIGATÓRIOS:
534
+ * - owner: Proprietário do repositório
535
+ * - repo: Nome do repositório
536
+ * - pull_number: Número do PR
537
+ *
538
+ * PARÂMETROS OPCIONAIS:
539
+ * - merge_method: Método de merge (merge, rebase, squash)
540
+ * - merge_commit_title: Título do commit de merge
541
+ * - merge_commit_message: Mensagem do commit de merge
542
+ *
543
+ * VALIDAÇÕES:
544
+ * - Todos os parâmetros obrigatórios
545
+ * - PR deve existir e estar aberto
546
+ * - Não deve haver conflitos
547
+ * - PR deve ser mergeable
548
+ *
549
+ * RECOMENDAÇÕES:
550
+ * - Resolva conflitos antes do merge
551
+ * - Escolha método de merge adequado
552
+ * - Use títulos e mensagens descritivas
553
+ * - Teste após o merge
554
+ */
555
+ async mergePullRequest(params, provider) {
556
+ try {
557
+ if (!params.owner || !params.repo || !params.pull_number) {
558
+ throw new Error('Owner, repo e pull_number são obrigatórios');
559
+ }
560
+ const mergeData = {
561
+ merge_method: params.merge_method || 'merge'
562
+ };
563
+ if (params.merge_commit_title)
564
+ mergeData.merge_commit_title = params.merge_commit_title;
565
+ if (params.merge_commit_message)
566
+ mergeData.merge_commit_message = params.merge_commit_message;
567
+ const result = await provider.mergePullRequest(params.owner, params.repo, params.pull_number, mergeData);
568
+ return {
569
+ success: true,
570
+ action: 'merge',
571
+ message: `Pull Request #${params.pull_number} mergeado com sucesso`,
572
+ data: result
573
+ };
574
+ }
575
+ catch (error) {
576
+ throw new Error(`Falha ao fazer merge do Pull Request: ${error instanceof Error ? error.message : String(error)}`);
577
+ }
578
+ },
579
+ /**
580
+ * Fecha um Pull Request
581
+ *
582
+ * FUNCIONALIDADE:
583
+ * - Altera estado do PR para closed
584
+ * - Mantém histórico e comentários
585
+ * - Permite reabertura posterior
586
+ *
587
+ * PARÂMETROS OBRIGATÓRIOS:
588
+ * - owner: Proprietário do repositório
589
+ * - repo: Nome do repositório
590
+ * - pull_number: Número do PR
591
+ *
592
+ * VALIDAÇÕES:
593
+ * - Todos os parâmetros obrigatórios
594
+ * - PR deve existir
595
+ * - PR deve estar aberto
596
+ *
597
+ * RECOMENDAÇÕES:
598
+ * - Confirme que PR não é mais necessário
599
+ * - Documente motivo do fechamento
600
+ * - Use comentário explicativo
601
+ * - Verifique se não há dependências
602
+ */
603
+ async closePullRequest(params, provider) {
604
+ try {
605
+ if (!params.owner || !params.repo || !params.pull_number) {
606
+ throw new Error('Owner, repo e pull_number são obrigatórios');
607
+ }
608
+ const pullRequest = await provider.updatePullRequest(params.owner, params.repo, params.pull_number, { state: 'closed' });
609
+ return {
610
+ success: true,
611
+ action: 'close',
612
+ message: `Pull Request #${params.pull_number} fechado com sucesso`,
613
+ data: pullRequest
614
+ };
615
+ }
616
+ catch (error) {
617
+ throw new Error(`Falha ao fechar Pull Request: ${error instanceof Error ? error.message : String(error)}`);
618
+ }
619
+ },
620
+ /**
621
+ * Adiciona review a um Pull Request
622
+ *
623
+ * FUNCIONALIDADE:
624
+ * - Cria novo review no PR
625
+ * - Suporta diferentes tipos de review
626
+ * - Mantém histórico de revisões
627
+ *
628
+ * PARÂMETROS OBRIGATÓRIOS:
629
+ * - owner: Proprietário do repositório
630
+ * - repo: Nome do repositório
631
+ * - pull_number: Número do PR
632
+ * - review_event: Tipo de review (APPROVE, REQUEST_CHANGES, COMMENT)
633
+ *
634
+ * PARÂMETROS OPCIONAIS:
635
+ * - review_body: Comentário do review
636
+ *
637
+ * VALIDAÇÕES:
638
+ * - Todos os parâmetros obrigatórios
639
+ * - PR deve existir
640
+ * - Review event deve ser válido
641
+ *
642
+ * RECOMENDAÇÕES:
643
+ * - Use reviews para controle de qualidade
644
+ * - Documente feedback adequadamente
645
+ * - Use tipos de review apropriados
646
+ * - Mantenha reviews construtivos
647
+ */
648
+ async addReview(params, provider) {
649
+ try {
650
+ if (!params.owner || !params.repo || !params.pull_number || !params.review_event) {
651
+ throw new Error('Owner, repo, pull_number e review_event são obrigatórios');
652
+ }
653
+ // Implementar adição de review
654
+ // Por enquanto, retorna mensagem de funcionalidade
655
+ return {
656
+ success: true,
657
+ action: 'review',
658
+ message: `Review adicionado ao Pull Request #${params.pull_number} com sucesso`,
659
+ data: {
660
+ pull_number: params.pull_number,
661
+ review_event: params.review_event,
662
+ review_body: params.review_body || '',
663
+ note: 'Funcionalidade de review será implementada'
664
+ }
665
+ };
666
+ }
667
+ catch (error) {
668
+ throw new Error(`Falha ao adicionar review: ${error instanceof Error ? error.message : String(error)}`);
669
+ }
670
+ },
671
+ /**
672
+ * Busca Pull Requests por critérios específicos
673
+ *
674
+ * FUNCIONALIDADE:
675
+ * - Busca PRs por conteúdo
676
+ * - Filtra por autor, assignee, reviewer e label
677
+ * - Retorna resultados relevantes
678
+ *
679
+ * PARÂMETROS OBRIGATÓRIOS:
680
+ * - owner: Proprietário do repositório
681
+ * - repo: Nome do repositório
682
+ * - query: Termo de busca
683
+ *
684
+ * PARÂMETROS OPCIONAIS:
685
+ * - author: Autor dos PRs
686
+ * - assignee: Responsável pelos PRs
687
+ * - reviewer: Revisor dos PRs
688
+ * - label: Label específico
689
+ *
690
+ * VALIDAÇÕES:
691
+ * - Todos os parâmetros obrigatórios
692
+ * - Query deve ter pelo menos 3 caracteres
693
+ * - Repositório deve existir
694
+ *
695
+ * RECOMENDAÇÕES:
696
+ * - Use termos de busca específicos
697
+ * - Combine filtros para resultados precisos
698
+ * - Analise relevância dos resultados
699
+ * - Use para encontrar PRs relacionados
700
+ */
701
+ async searchPullRequests(params, provider) {
702
+ try {
703
+ if (!params.owner || !params.repo || !params.query) {
704
+ throw new Error('Owner, repo e query são obrigatórios');
705
+ }
706
+ if (params.query.length < 3) {
707
+ throw new Error('Query deve ter pelo menos 3 caracteres');
708
+ }
709
+ // Implementar busca de Pull Requests
710
+ // Por enquanto, retorna mensagem de funcionalidade
711
+ return {
712
+ success: true,
713
+ action: 'search',
714
+ message: `Busca por Pull Requests com '${params.query}' solicitada`,
715
+ data: {
716
+ query: params.query,
717
+ author: params.author || 'todos',
718
+ assignee: params.assignee || 'todos',
719
+ reviewer: params.reviewer || 'todos',
720
+ label: params.label || 'todos',
721
+ results: 'Funcionalidade de busca será implementada'
722
+ }
723
+ };
724
+ }
725
+ catch (error) {
726
+ throw new Error(`Falha ao buscar Pull Requests: ${error instanceof Error ? error.message : String(error)}`);
727
+ }
728
+ }
729
+ };
730
+ //# sourceMappingURL=pulls.js.map