@andrebuzeli/git-mcp 2.28.0 → 2.28.2

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