@andrebuzeli/git-mcp 2.27.4 → 2.28.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 (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 -305
  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,733 +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
- repo: zod_1.z.string(),
52
- // Para multi-provider
53
- provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'),
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: 'git-pulls',
200
- description: 'tool: Gerencia pull requests Git para revisão e merge de código\n──────────────\naction create: cria novo pull request\naction create requires: repo, title, body, head, base, draft, labels, assignees, reviewers, milestone, provider\n───────────────\naction list: lista pull requests do repositório\naction list requires: repo, state, page, limit, provider\n───────────────\naction get: obtém detalhes de PR\naction get requires: repo, pull_number, provider\n───────────────\naction update: atualiza pull request\naction update requires: repo, pull_number, new_title, new_body, new_base, new_labels, new_assignees, new_milestone, provider\n───────────────\naction merge: faz merge do PR\naction merge requires: repo, pull_number, merge_method, merge_commit_title, merge_commit_message, provider\n───────────────\naction close: fecha pull request\naction close requires: repo, pull_number, provider\n───────────────\naction review: adiciona review\naction review requires: repo, pull_number, review_event, review_body, provider\n───────────────\naction search: busca PRs por critérios\naction search requires: repo, query, author, assignee, reviewer, label, provider',
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
- repo: { type: 'string', description: 'Repository name' },
210
- provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
211
- title: { type: 'string', description: 'Pull request title' },
212
- body: { type: 'string', description: 'Pull request body/description' },
213
- head: { type: 'string', description: 'Source branch' },
214
- base: { type: 'string', description: 'Target branch' },
215
- draft: { type: 'boolean', description: 'Create as draft PR' },
216
- labels: { type: 'array', items: { type: 'string' }, description: 'PR labels' },
217
- assignees: { type: 'array', items: { type: 'string' }, description: 'PR assignees' },
218
- reviewers: { type: 'array', items: { type: 'string' }, description: 'PR reviewers' },
219
- milestone: { type: 'number', description: 'Milestone ID' },
220
- pull_number: { type: 'number', description: 'Pull request number' },
221
- state: { type: 'string', enum: ['open', 'closed', 'merged', 'all'], description: 'PR state' },
222
- page: { type: 'number', description: 'Page number', minimum: 1 },
223
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
224
- new_title: { type: 'string', description: 'New PR title' },
225
- new_body: { type: 'string', description: 'New PR body' },
226
- new_base: { type: 'string', description: 'New base branch' },
227
- new_labels: { type: 'array', items: { type: 'string' }, description: 'New PR labels' },
228
- new_assignees: { type: 'array', items: { type: 'string' }, description: 'New PR assignees' },
229
- new_milestone: { type: 'number', description: 'New milestone ID' },
230
- merge_method: { type: 'string', enum: ['merge', 'rebase', 'squash'], description: 'Merge method' },
231
- merge_commit_title: { type: 'string', description: 'Merge commit title' },
232
- merge_commit_message: { type: 'string', description: 'Merge commit message' },
233
- review_event: { type: 'string', enum: ['APPROVE', 'REQUEST_CHANGES', 'COMMENT'], description: 'Review type' },
234
- review_body: { type: 'string', description: 'Review comment' },
235
- query: { type: 'string', description: 'Search query' },
236
- author: { type: 'string', description: 'PR author filter' },
237
- assignee: { type: 'string', description: 'PR assignee filter' },
238
- reviewer: { type: 'string', description: 'PR reviewer filter' },
239
- label: { type: 'string', description: 'PR label filter' }
240
- },
241
- required: ['action', 'repo', 'provider']
242
- },
243
- /**
244
- * Handler principal da tool pulls
245
- *
246
- * FUNCIONALIDADE:
247
- * - Valida entrada usando Zod schema
248
- * - Roteia para método específico baseado na ação
249
- * - Trata erros de forma uniforme
250
- * - Retorna resultado padronizado
251
- *
252
- * FLUXO:
253
- * 1. Validação de entrada
254
- * 2. Seleção do provider
255
- * 3. Roteamento por ação
256
- * 4. Execução do método específico
257
- * 5. Tratamento de erros
258
- * 6. Retorno de resultado
259
- *
260
- * TRATAMENTO DE ERROS:
261
- * - Validação: erro de schema
262
- * - Execução: erro da operação
263
- * - Roteamento: ação não suportada
264
- *
265
- * RECOMENDAÇÕES:
266
- * - Sempre valide entrada antes de processar
267
- * - Trate erros específicos adequadamente
268
- * - Log detalhes de erro para debug
269
- * - Retorne mensagens de erro úteis
270
- */
271
- async handler(input) {
272
- try {
273
- const validatedInput = PullsInputSchema.parse(input);
274
- // Aplicar auto-detecção de usuário/owner
275
- const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
276
- // Obter o provider correto
277
- const provider = processedInput.provider
278
- ? index_js_1.globalProviderFactory.getProvider(processedInput.provider)
279
- : index_js_1.globalProviderFactory.getDefaultProvider();
280
- if (!provider) {
281
- throw new Error(`Provider '${processedInput.provider}' não encontrado`);
282
- }
283
- // Obter o owner do provider
284
- const owner = (await provider.getCurrentUser()).login;
285
- switch (processedInput.action) {
286
- case 'create':
287
- return await this.createPullRequest(validatedInput, provider, owner);
288
- case 'list':
289
- return await this.listPullRequests(validatedInput, provider, owner);
290
- case 'get':
291
- return await this.getPullRequest(validatedInput, provider, owner);
292
- case 'update':
293
- return await this.updatePullRequest(validatedInput, provider, owner);
294
- case 'merge':
295
- return await this.mergePullRequest(validatedInput, provider, owner);
296
- case 'close':
297
- return await this.closePullRequest(validatedInput, provider, owner);
298
- case 'review':
299
- return await this.addReview(validatedInput, provider, owner);
300
- case 'search':
301
- return await this.searchPullRequests(validatedInput, provider, owner);
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, owner) {
351
- try {
352
- if (!!params.repo || !params.title || !params.head || !params.base) {
353
- throw new Error('repo, title, head e base são obrigatórios');
354
- }
355
- const pullRequest = await provider.createPullRequest(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
- * - 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, owner) {
397
- try {
398
- if (!params.repo) {
399
- throw new Error('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((await provider.getCurrentUser()).login, 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, owner) {
447
- try {
448
- if (!!params.repo || !params.pull_number) {
449
- throw new Error('repo e pull_number são obrigatórios');
450
- }
451
- const pullRequest = await provider.getPullRequest((await provider.getCurrentUser()).login, 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, owner) {
496
- try {
497
- if (!!params.repo || !params.pull_number) {
498
- throw new Error('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((await provider.getCurrentUser()).login, 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, owner) {
559
- try {
560
- if (!!params.repo || !params.pull_number) {
561
- throw new Error('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((await provider.getCurrentUser()).login, 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, owner) {
607
- try {
608
- if (!!params.repo || !params.pull_number) {
609
- throw new Error('repo e pull_number são obrigatórios');
610
- }
611
- const pullRequest = await provider.updatePullRequest((await provider.getCurrentUser()).login, 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, owner) {
652
- try {
653
- if (!!params.repo || !params.pull_number || !params.review_event) {
654
- throw new Error('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, owner) {
705
- try {
706
- if (!params.repo || !params.query) {
707
- throw new Error('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
- };
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
+ repo: zod_1.z.string(),
52
+ // Para multi-provider
53
+ provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'),
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: 'git-pulls',
200
+ description: 'tool: Gerencia pull requests Git para revisão e merge de código\n──────────────\naction create: cria novo pull request\naction create requires: repo, title, body, head, base, draft, labels, assignees, reviewers, milestone, provider\n───────────────\naction list: lista pull requests do repositório\naction list requires: repo, state, page, limit, provider\n───────────────\naction get: obtém detalhes de PR\naction get requires: repo, pull_number, provider\n───────────────\naction update: atualiza pull request\naction update requires: repo, pull_number, new_title, new_body, new_base, new_labels, new_assignees, new_milestone, provider\n───────────────\naction merge: faz merge do PR\naction merge requires: repo, pull_number, merge_method, merge_commit_title, merge_commit_message, provider\n───────────────\naction close: fecha pull request\naction close requires: repo, pull_number, provider\n───────────────\naction review: adiciona review\naction review requires: repo, pull_number, review_event, review_body, provider\n───────────────\naction search: busca PRs por critérios\naction search requires: repo, query, author, assignee, reviewer, label, provider',
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
+ repo: { type: 'string', description: 'Repository name' },
210
+ provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
211
+ title: { type: 'string', description: 'Pull request title' },
212
+ body: { type: 'string', description: 'Pull request body/description' },
213
+ head: { type: 'string', description: 'Source branch' },
214
+ base: { type: 'string', description: 'Target branch' },
215
+ draft: { type: 'boolean', description: 'Create as draft PR' },
216
+ labels: { type: 'array', items: { type: 'string' }, description: 'PR labels' },
217
+ assignees: { type: 'array', items: { type: 'string' }, description: 'PR assignees' },
218
+ reviewers: { type: 'array', items: { type: 'string' }, description: 'PR reviewers' },
219
+ milestone: { type: 'number', description: 'Milestone ID' },
220
+ pull_number: { type: 'number', description: 'Pull request number' },
221
+ state: { type: 'string', enum: ['open', 'closed', 'merged', 'all'], description: 'PR state' },
222
+ page: { type: 'number', description: 'Page number', minimum: 1 },
223
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
224
+ new_title: { type: 'string', description: 'New PR title' },
225
+ new_body: { type: 'string', description: 'New PR body' },
226
+ new_base: { type: 'string', description: 'New base branch' },
227
+ new_labels: { type: 'array', items: { type: 'string' }, description: 'New PR labels' },
228
+ new_assignees: { type: 'array', items: { type: 'string' }, description: 'New PR assignees' },
229
+ new_milestone: { type: 'number', description: 'New milestone ID' },
230
+ merge_method: { type: 'string', enum: ['merge', 'rebase', 'squash'], description: 'Merge method' },
231
+ merge_commit_title: { type: 'string', description: 'Merge commit title' },
232
+ merge_commit_message: { type: 'string', description: 'Merge commit message' },
233
+ review_event: { type: 'string', enum: ['APPROVE', 'REQUEST_CHANGES', 'COMMENT'], description: 'Review type' },
234
+ review_body: { type: 'string', description: 'Review comment' },
235
+ query: { type: 'string', description: 'Search query' },
236
+ author: { type: 'string', description: 'PR author filter' },
237
+ assignee: { type: 'string', description: 'PR assignee filter' },
238
+ reviewer: { type: 'string', description: 'PR reviewer filter' },
239
+ label: { type: 'string', description: 'PR label filter' }
240
+ },
241
+ required: ['action', 'repo', 'provider']
242
+ },
243
+ /**
244
+ * Handler principal da tool pulls
245
+ *
246
+ * FUNCIONALIDADE:
247
+ * - Valida entrada usando Zod schema
248
+ * - Roteia para método específico baseado na ação
249
+ * - Trata erros de forma uniforme
250
+ * - Retorna resultado padronizado
251
+ *
252
+ * FLUXO:
253
+ * 1. Validação de entrada
254
+ * 2. Seleção do provider
255
+ * 3. Roteamento por ação
256
+ * 4. Execução do método específico
257
+ * 5. Tratamento de erros
258
+ * 6. Retorno de resultado
259
+ *
260
+ * TRATAMENTO DE ERROS:
261
+ * - Validação: erro de schema
262
+ * - Execução: erro da operação
263
+ * - Roteamento: ação não suportada
264
+ *
265
+ * RECOMENDAÇÕES:
266
+ * - Sempre valide entrada antes de processar
267
+ * - Trate erros específicos adequadamente
268
+ * - Log detalhes de erro para debug
269
+ * - Retorne mensagens de erro úteis
270
+ */
271
+ async handler(input) {
272
+ try {
273
+ const validatedInput = PullsInputSchema.parse(input);
274
+ // Aplicar auto-detecção de usuário/owner
275
+ const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
276
+ // Obter o provider correto
277
+ const provider = processedInput.provider
278
+ ? index_js_1.globalProviderFactory.getProvider(processedInput.provider)
279
+ : index_js_1.globalProviderFactory.getDefaultProvider();
280
+ if (!provider) {
281
+ throw new Error(`Provider '${processedInput.provider}' não encontrado`);
282
+ }
283
+ // Obter o owner do provider
284
+ const owner = (await provider.getCurrentUser()).login;
285
+ switch (processedInput.action) {
286
+ case 'create':
287
+ return await this.createPullRequest(validatedInput, provider, owner);
288
+ case 'list':
289
+ return await this.listPullRequests(validatedInput, provider, owner);
290
+ case 'get':
291
+ return await this.getPullRequest(validatedInput, provider, owner);
292
+ case 'update':
293
+ return await this.updatePullRequest(validatedInput, provider, owner);
294
+ case 'merge':
295
+ return await this.mergePullRequest(validatedInput, provider, owner);
296
+ case 'close':
297
+ return await this.closePullRequest(validatedInput, provider, owner);
298
+ case 'review':
299
+ return await this.addReview(validatedInput, provider, owner);
300
+ case 'search':
301
+ return await this.searchPullRequests(validatedInput, provider, owner);
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, owner) {
351
+ try {
352
+ if (!!params.repo || !params.title || !params.head || !params.base) {
353
+ throw new Error('repo, title, head e base são obrigatórios');
354
+ }
355
+ const pullRequest = await provider.createPullRequest(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
+ * - 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, owner) {
397
+ try {
398
+ if (!params.repo) {
399
+ throw new Error('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((await provider.getCurrentUser()).login, 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, owner) {
447
+ try {
448
+ if (!!params.repo || !params.pull_number) {
449
+ throw new Error('repo e pull_number são obrigatórios');
450
+ }
451
+ const pullRequest = await provider.getPullRequest((await provider.getCurrentUser()).login, 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, owner) {
496
+ try {
497
+ if (!!params.repo || !params.pull_number) {
498
+ throw new Error('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((await provider.getCurrentUser()).login, 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, owner) {
559
+ try {
560
+ if (!!params.repo || !params.pull_number) {
561
+ throw new Error('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((await provider.getCurrentUser()).login, 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, owner) {
607
+ try {
608
+ if (!!params.repo || !params.pull_number) {
609
+ throw new Error('repo e pull_number são obrigatórios');
610
+ }
611
+ const pullRequest = await provider.updatePullRequest((await provider.getCurrentUser()).login, 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, owner) {
652
+ try {
653
+ if (!!params.repo || !params.pull_number || !params.review_event) {
654
+ throw new Error('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, owner) {
705
+ try {
706
+ if (!params.repo || !params.query) {
707
+ throw new Error('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
733
  //# sourceMappingURL=git-pulls.js.map