@andrebuzeli/git-mcp 3.4.0 → 4.0.3

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