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