@andrebuzeli/git-mcp 3.2.5 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/server.d.ts.map +1 -1
  2. package/dist/server.js +18 -1
  3. package/dist/server.js.map +1 -1
  4. package/dist/tools/git-archive.d.ts +0 -3
  5. package/dist/tools/git-archive.d.ts.map +1 -1
  6. package/dist/tools/git-archive.js +2 -2
  7. package/dist/tools/git-archive.js.map +1 -1
  8. package/dist/tools/git-branches.d.ts +6 -413
  9. package/dist/tools/git-branches.d.ts.map +1 -1
  10. package/dist/tools/git-branches.js +1 -622
  11. package/dist/tools/git-branches.js.map +1 -1
  12. package/dist/tools/git-commits.d.ts +6 -472
  13. package/dist/tools/git-commits.d.ts.map +1 -1
  14. package/dist/tools/git-commits.js +1 -738
  15. package/dist/tools/git-commits.js.map +1 -1
  16. package/dist/tools/git-config.d.ts +0 -3
  17. package/dist/tools/git-config.d.ts.map +1 -1
  18. package/dist/tools/git-config.js +2 -2
  19. package/dist/tools/git-config.js.map +1 -1
  20. package/dist/tools/git-files.d.ts +5 -468
  21. package/dist/tools/git-files.d.ts.map +1 -1
  22. package/dist/tools/git-files.js +1 -608
  23. package/dist/tools/git-files.js.map +1 -1
  24. package/dist/tools/git-initialize.js +119 -119
  25. package/dist/tools/git-issues.d.ts +5 -18
  26. package/dist/tools/git-issues.d.ts.map +1 -1
  27. package/dist/tools/git-issues.js +24 -55
  28. package/dist/tools/git-issues.js.map +1 -1
  29. package/dist/tools/git-packages.d.ts +0 -3
  30. package/dist/tools/git-packages.d.ts.map +1 -1
  31. package/dist/tools/git-packages.js +3 -3
  32. package/dist/tools/git-packages.js.map +1 -1
  33. package/dist/tools/git-projects.d.ts +0 -3
  34. package/dist/tools/git-projects.d.ts.map +1 -1
  35. package/dist/tools/git-projects.js +4 -4
  36. package/dist/tools/git-projects.js.map +1 -1
  37. package/dist/tools/git-pulls.d.ts +7 -16
  38. package/dist/tools/git-pulls.d.ts.map +1 -1
  39. package/dist/tools/git-pulls.js +43 -42
  40. package/dist/tools/git-pulls.js.map +1 -1
  41. package/dist/tools/git-releases.d.ts +3 -15
  42. package/dist/tools/git-releases.d.ts.map +1 -1
  43. package/dist/tools/git-releases.js +23 -29
  44. package/dist/tools/git-releases.js.map +1 -1
  45. package/dist/tools/git-remote.d.ts +0 -3
  46. package/dist/tools/git-remote.d.ts.map +1 -1
  47. package/dist/tools/git-remote.js +2 -2
  48. package/dist/tools/git-remote.js.map +1 -1
  49. package/dist/tools/git-repositories.d.ts +3 -18
  50. package/dist/tools/git-repositories.d.ts.map +1 -1
  51. package/dist/tools/git-repositories.js +23 -30
  52. package/dist/tools/git-repositories.js.map +1 -1
  53. package/dist/tools/git-reset.d.ts +2 -5
  54. package/dist/tools/git-reset.d.ts.map +1 -1
  55. package/dist/tools/git-reset.js +2 -2
  56. package/dist/tools/git-reset.js.map +1 -1
  57. package/dist/tools/git-revert.d.ts +0 -3
  58. package/dist/tools/git-revert.d.ts.map +1 -1
  59. package/dist/tools/git-revert.js +2 -2
  60. package/dist/tools/git-revert.js.map +1 -1
  61. package/dist/tools/git-stash.d.ts +0 -3
  62. package/dist/tools/git-stash.d.ts.map +1 -1
  63. package/dist/tools/git-stash.js +2 -2
  64. package/dist/tools/git-stash.js.map +1 -1
  65. package/dist/tools/git-tags.d.ts +3 -12
  66. package/dist/tools/git-tags.d.ts.map +1 -1
  67. package/dist/tools/git-tags.js +8 -11
  68. package/dist/tools/git-tags.js.map +1 -1
  69. package/dist/tools/git-update-project.d.ts +3 -9
  70. package/dist/tools/git-update-project.d.ts.map +1 -1
  71. package/dist/tools/git-update-project.js +22 -17
  72. package/dist/tools/git-update-project.js.map +1 -1
  73. package/dist/utils/user-detection.d.ts +13 -1
  74. package/dist/utils/user-detection.d.ts.map +1 -1
  75. package/dist/utils/user-detection.js +26 -1
  76. package/dist/utils/user-detection.js.map +1 -1
  77. package/package.json +3 -3
  78. package/dist/tools/git-files-backup.d.ts +0 -596
  79. package/dist/tools/git-files-backup.d.ts.map +0 -1
  80. package/dist/tools/git-files-backup.js +0 -868
  81. package/dist/tools/git-files-backup.js.map +0 -1
  82. package/dist/tools/git-publish.d.ts +0 -327
  83. package/dist/tools/git-publish.d.ts.map +0 -1
  84. package/dist/tools/git-publish.js +0 -632
  85. package/dist/tools/git-publish.js.map +0 -1
  86. package/dist/tools/git-workflow.d.ts +0 -299
  87. package/dist/tools/git-workflow.d.ts.map +0 -1
  88. package/dist/tools/git-workflow.js +0 -563
  89. package/dist/tools/git-workflow.js.map +0 -1
@@ -1,742 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.commitsTool = 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
- const terminal_controller_js_1 = require("../utils/terminal-controller.js");
8
- /**
9
- * Tool: commits
10
- *
11
- * DESCRIÇÃO:
12
- * Gerenciamento completo de commits com suporte multi-provider (GitHub e Gitea)
13
- *
14
- * FUNCIONALIDADES:
15
- * - Listagem de histórico de commits
16
- * - Obtenção de detalhes específicos
17
- * - Criação de novos commits
18
- * - Comparação entre commits
19
- * - Busca por mensagens e conteúdo
20
- * - Análise de mudanças
21
- *
22
- * USO:
23
- * - Para acompanhar histórico de mudanças
24
- * - Para analisar evolução do código
25
- * - Para criar commits programaticamente
26
- * - Para auditoria de mudanças
27
- *
28
- * RECOMENDAÇÕES:
29
- * - Use mensagens de commit descritivas
30
- * - Mantenha commits atômicos
31
- * - Documente mudanças importantes
32
- * - Revise histórico regularmente
33
- */
34
- /**
35
- * Schema de validação para entrada da tool commits
36
- *
37
- * VALIDAÇÕES:
38
- * - action: Ação obrigatória (list, get, create, compare, search)
39
- * - Parâmetros específicos por ação
40
- * - Validação de tipos e formatos
41
- *
42
- * RECOMENDAÇÕES:
43
- * - Sempre valide entrada antes de usar
44
- * - Use parâmetros opcionais adequadamente
45
- * - Documente parâmetros obrigatórios
46
- */
47
- const CommitsInputSchema = zod_1.z.object({
48
- action: zod_1.z.enum(['list', 'get', 'create', 'compare', 'search', 'push', 'pull']),
49
- // Parâmetros comuns
50
- // owner: obtido automaticamente do provider,
51
- repo: zod_1.z.string(),
52
- projectPath: zod_1.z.string().describe('Local project path for git operations'),
53
- // Para multi-provider
54
- provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
55
- // Para list
56
- sha: zod_1.z.string().optional(),
57
- page: zod_1.z.number().min(1).optional(),
58
- limit: zod_1.z.number().min(1).max(100).optional(),
59
- // Para get
60
- commit_sha: zod_1.z.string().optional(),
61
- // Para create
62
- message: zod_1.z.string().optional(),
63
- branch: zod_1.z.string().optional(),
64
- author_name: zod_1.z.string().optional(),
65
- author_email: zod_1.z.string().optional(),
66
- committer_name: zod_1.z.string().optional(),
67
- committer_email: zod_1.z.string().optional(),
68
- // Para compare
69
- base: zod_1.z.string().optional(),
70
- head: zod_1.z.string().optional(),
71
- // Para search
72
- query: zod_1.z.string().optional(),
73
- author: zod_1.z.string().optional(),
74
- });
75
- /**
76
- * Schema de saída padronizado
77
- *
78
- * ESTRUTURA:
79
- * - success: Status da operação
80
- * - action: Ação executada
81
- * - message: Mensagem descritiva
82
- * - data: Dados retornados (opcional)
83
- * - error: Detalhes do erro (opcional)
84
- */
85
- const CommitsResultSchema = zod_1.z.object({
86
- success: zod_1.z.boolean(),
87
- action: zod_1.z.string(),
88
- message: zod_1.z.string(),
89
- data: zod_1.z.any().optional(),
90
- error: zod_1.z.string().optional()
91
- });
92
- /**
93
- * Tool: commits
94
- *
95
- * DESCRIÇÃO:
96
- * Gerenciamento completo de commits Gitea com múltiplas ações
97
- *
98
- * ACTIONS DISPONÍVEIS:
99
- *
100
- * 1. list - Listar commits
101
- * Parâmetros:
102
- * - owner (obrigatório): Proprietário do repositório
103
- * - repo (obrigatório): Nome do repositório
104
- * - sha (opcional): Branch ou commit específico (padrão: branch padrão)
105
- * - page (opcional): Página da listagem (padrão: 1)
106
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
107
- *
108
- * 2. get - Obter detalhes do commit
109
- * Parâmetros:
110
- * - owner (obrigatório): Proprietário do repositório
111
- * - repo (obrigatório): Nome do repositório
112
- * - commit_sha (obrigatório): SHA do commit
113
- *
114
- * 3. create - Criar novo commit
115
- * Parâmetros:
116
- * - owner (obrigatório): Proprietário do repositório
117
- * - repo (obrigatório): Nome do repositório
118
- * - message (obrigatório): Mensagem do commit
119
- * - branch (obrigatório): Branch de destino
120
- * - author_name (opcional): Nome do autor
121
- * - author_email (opcional): Email do autor
122
- * - committer_name (opcional): Nome do committer
123
- * - committer_email (opcional): Email do committer
124
- *
125
- * 4. compare - Comparar commits
126
- * Parâmetros:
127
- * - owner (obrigatório): Proprietário do repositório
128
- * - repo (obrigatório): Nome do repositório
129
- * - base (obrigatório): Commit base para comparação
130
- * - head (obrigatório): Commit para comparar
131
- *
132
- * 5. search - Buscar commits
133
- * Parâmetros:
134
- * - owner (obrigatório): Proprietário do repositório
135
- * - repo (obrigatório): Nome do repositório
136
- * - query (obrigatório): Termo de busca
137
- * - author (opcional): Autor dos commits
138
- * - page (opcional): Página da busca (padrão: 1)
139
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
140
- *
141
- * RECOMENDAÇÕES DE USO:
142
- * - Use mensagens de commit descritivas
143
- * - Mantenha commits atômicos
144
- * - Documente mudanças importantes
145
- * - Revise histórico regularmente
146
- * - Use branches para features
147
- * - Mantenha histórico limpo
148
- */
149
- exports.commitsTool = {
150
- name: 'git-commits',
151
- description: 'tool: Gerencia commits Git completos, histórico, criação e sincronização\n──────────────\naction list: lista commits do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de commit específico\naction get requires: repo, sha, provider\n───────────────\naction create: cria novo commit\naction create requires: repo, message, branch, provider\n───────────────\naction compare: compara commits/branches\naction compare requires: repo, base, head, provider\n───────────────\naction search: busca commits por critérios\naction search requires: repo, query, author, provider\n───────────────\naction push: envia commits para remoto\naction push requires: repo, branch, provider\n───────────────\naction pull: baixa commits do remoto\naction pull requires: repo, branch, provider',
152
- inputSchema: {
153
- type: 'object',
154
- properties: {
155
- action: {
156
- type: 'string',
157
- enum: ['list', 'get', 'create', 'compare', 'search', 'push', 'pull'],
158
- description: 'Action to perform on commits'
159
- },
160
- repo: { type: 'string', description: 'Repository name' },
161
- projectPath: { type: 'string', description: 'Local project path for git operations' },
162
- provider: { type: 'string', description: 'Specific provider (github, gitea) or use default' },
163
- sha: { type: 'string', description: 'Branch, tag or commit SHA' },
164
- page: { type: 'number', description: 'Page number', minimum: 1 },
165
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
166
- commit_sha: { type: 'string', description: 'Specific commit SHA' },
167
- message: { type: 'string', description: 'Commit message' },
168
- branch: { type: 'string', description: 'Target branch' },
169
- author_name: { type: 'string', description: 'Author name' },
170
- author_email: { type: 'string', description: 'Author email' },
171
- committer_name: { type: 'string', description: 'Committer name' },
172
- committer_email: { type: 'string', description: 'Committer email' },
173
- base: { type: 'string', description: 'Base commit/branch for comparison' },
174
- head: { type: 'string', description: 'Head commit/branch for comparison' },
175
- query: { type: 'string', description: 'Search query' },
176
- author: { type: 'string', description: 'Author filter for search' }
177
- },
178
- required: ['action', 'repo', 'provider', 'projectPath']
179
- },
180
- /**
181
- * Handler principal da tool commits
182
- *
183
- * FUNCIONALIDADE:
184
- * - Valida entrada usando Zod schema
185
- * - Roteia para método específico baseado na ação
186
- * - Trata erros de forma uniforme
187
- * - Retorna resultado padronizado
188
- *
189
- * FLUXO:
190
- * 1. Validação de entrada
191
- * 2. Seleção do provider
192
- * 3. Roteamento por ação
193
- * 4. Execução do método específico
194
- * 5. Tratamento de erros
195
- * 6. Retorno de resultado
196
- *
197
- * TRATAMENTO DE ERROS:
198
- * - Validação: erro de schema
199
- * - Execução: erro da operação
200
- * - Roteamento: ação não suportada
201
- *
202
- * RECOMENDAÇÕES:
203
- * - Sempre valide entrada antes de processar
204
- * - Trate erros específicos adequadamente
205
- * - Log detalhes de erro para debug
206
- * - Retorne mensagens de erro úteis
207
- */
208
- async handler(input) {
209
- try {
210
- const validatedInput = CommitsInputSchema.parse(input);
211
- // Aplicar auto-detecção de usuário/owner
212
- const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
213
- // Obter o provider correto (sem fallback quando informado)
214
- if (!processedInput.provider) {
215
- throw new Error("Parâmetro 'provider' é obrigatório e não pode ser omitido");
216
- }
217
- const provider = (() => {
218
- const p = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
219
- if (!p) {
220
- throw new Error(`Provider '${processedInput.provider}' não encontrado`);
221
- }
222
- return p;
223
- })();
224
- // Obter o owner do provider
225
- const owner = (await provider.getCurrentUser()).login;
226
- // Para ações que precisam de owner, verificar se foi determinado
227
- if (!owner && ['list', 'get', 'create', 'compare', 'search'].includes(processedInput.action)) {
228
- throw new Error('Não foi possível determinar o owner automaticamente. Verifique se o token está configurado corretamente.');
229
- }
230
- switch (processedInput.action) {
231
- case 'list':
232
- return await this.listCommits(processedInput, provider, owner);
233
- case 'get':
234
- return await this.getCommit(processedInput, provider, owner);
235
- case 'create':
236
- return await this.createCommit(processedInput, provider, owner);
237
- case 'compare':
238
- return await this.compareCommits(processedInput, provider, owner);
239
- case 'search':
240
- return await this.searchCommits(processedInput, provider, owner);
241
- case 'push':
242
- return await this.pushCommits(processedInput, provider);
243
- case 'pull':
244
- return await this.pullCommits(processedInput, provider);
245
- default:
246
- throw new Error(`Ação não suportada: ${processedInput.action}`);
247
- }
248
- }
249
- catch (error) {
250
- return {
251
- success: false,
252
- action: input.action,
253
- message: 'Erro na operação de commits',
254
- error: error instanceof Error ? error.message : String(error)
255
- };
256
- }
257
- },
258
- /**
259
- * Lista commits do repositório
260
- *
261
- * FUNCIONALIDADE:
262
- * - Lista commits com paginação
263
- * - Suporta filtro por branch ou commit
264
- * - Retorna informações básicas de cada commit
265
- *
266
- * PARÂMETROS OBRIGATÓRIOS:
267
- * - projectPath: Caminho do projeto local (OBRIGATÓRIO para TODAS as operações)
268
- * - provider: Provedor a usar (gitea ou github)
269
- * - repo: Nome do repositório
270
- *
271
- * PARÂMETROS OPCIONAIS:
272
- * - sha: Branch, tag ou commit específico (padrão: branch padrão)
273
- * - page: Página da listagem (padrão: 1)
274
- * - limit: Itens por página (padrão: 30, máximo: 100)
275
- *
276
- * VALIDAÇÕES:
277
- * - e repo obrigatórios
278
- * - SHA deve ser válido se fornecido
279
- * - Page deve ser >= 1
280
- * - Limit deve ser entre 1 e 100
281
- *
282
- * RECOMENDAÇÕES:
283
- * - Use paginação para repositórios grandes
284
- * - Monitore número total de commits
285
- * - Use SHA específico para análise
286
- * - Mantenha histórico organizado
287
- */
288
- async listCommits(params, provider, owner) {
289
- try {
290
- if (!owner || !params.repo) {
291
- throw new Error('e repo são obrigatórios');
292
- }
293
- const page = params.page || 1;
294
- const limit = params.limit || 30;
295
- const commits = await provider.listCommits(owner, params.repo, params.sha, page, limit);
296
- return {
297
- success: true,
298
- action: 'list',
299
- message: `${commits.length} commits encontrados`,
300
- data: {
301
- commits,
302
- page,
303
- limit,
304
- total: commits.length,
305
- sha: params.sha || 'branch padrão'
306
- }
307
- };
308
- }
309
- catch (error) {
310
- throw new Error(`Falha ao listar commits: ${error instanceof Error ? error.message : String(error)}`);
311
- }
312
- },
313
- /**
314
- * Obtém detalhes de um commit específico
315
- *
316
- * FUNCIONALIDADE:
317
- * - Obtém informações completas do commit
318
- * - Inclui detalhes de autor e committer
319
- * - Mostra arquivos modificados
320
- * - Retorna hash e mensagem
321
- *
322
- * PARÂMETROS OBRIGATÓRIOS:
323
- * - owner: Proprietário do repositório
324
- * - repo: Nome do repositório
325
- * - commit_sha: SHA do commit
326
- *
327
- * VALIDAÇÕES:
328
- * - Todos os parâmetros obrigatórios
329
- * - SHA deve ser válido
330
- * - Commit deve existir
331
- *
332
- * RECOMENDAÇÕES:
333
- * - Use para análise detalhada
334
- * - Verifique arquivos modificados
335
- * - Analise mensagem e autor
336
- * - Documente mudanças importantes
337
- */
338
- async getCommit(params, provider, owner) {
339
- try {
340
- if (!owner || !params.repo) {
341
- throw new Error('e repo são obrigatórios');
342
- }
343
- // Se não foi fornecido commit_sha, usa o SHA da branch padrão
344
- let commitSha = params.commit_sha;
345
- if (!commitSha) {
346
- try {
347
- const branchInfo = await provider.getBranch(owner, params.repo, 'main');
348
- commitSha = branchInfo.commit.sha;
349
- }
350
- catch (error) {
351
- // Se não conseguir obter o branch main, tenta master
352
- try {
353
- const branchInfo = await provider.getBranch(owner, params.repo, 'master');
354
- commitSha = branchInfo.commit.sha;
355
- }
356
- catch (masterError) {
357
- throw new Error('Não foi possível obter SHA do commit. Forneça commit_sha ou verifique se a branch existe.');
358
- }
359
- }
360
- }
361
- const commit = await provider.getCommit(owner, params.repo, commitSha);
362
- return {
363
- success: true,
364
- action: 'get',
365
- message: `Commit '${commitSha}' obtido com sucesso`,
366
- data: {
367
- commit,
368
- sha: commitSha,
369
- owner: owner,
370
- repo: params.repo
371
- }
372
- };
373
- }
374
- catch (error) {
375
- throw new Error(`Falha ao obter commit: ${error instanceof Error ? error.message : String(error)}`);
376
- }
377
- },
378
- /**
379
- * Cria um novo commit
380
- *
381
- * FUNCIONALIDADE:
382
- * - Cria commit com mensagem personalizada
383
- * - Suporta autor e committer diferentes
384
- * - Permite especificar branch de destino
385
- * - Valida dados obrigatórios
386
- *
387
- * PARÂMETROS OBRIGATÓRIOS:
388
- * - owner: Proprietário do repositório
389
- * - repo: Nome do repositório
390
- * - message: Mensagem do commit
391
- * - branch: Branch de destino
392
- *
393
- * PARÂMETROS OPCIONAIS:
394
- * - author_name: Nome do autor
395
- * - author_email: Email do autor
396
- * - committer_name: Nome do committer
397
- * - committer_email: Email do committer
398
- *
399
- * VALIDAÇÕES:
400
- * - Todos os parâmetros obrigatórios
401
- * - Mensagem não pode estar vazia
402
- * - Branch deve existir
403
- * - Emails devem ser válidos
404
- *
405
- * RECOMENDAÇÕES:
406
- * - Use mensagens descritivas
407
- * - Mantenha commits atômicos
408
- * - Documente mudanças importantes
409
- * - Use branches apropriadas
410
- */
411
- async createCommit(params, provider, owner) {
412
- try {
413
- if (!owner || !params.repo || !params.message || !params.branch) {
414
- throw new Error('repo, message e branch são obrigatórios');
415
- }
416
- if (params.message.trim().length === 0) {
417
- throw new Error('Mensagem do commit não pode estar vazia');
418
- }
419
- // Verificar se a branch existe
420
- try {
421
- await provider.getBranch(owner, params.repo, params.branch);
422
- }
423
- catch (error) {
424
- throw new Error(`Branch '${params.branch}' não existe no repositório`);
425
- }
426
- // Obter informações do usuário atual para usar como padrão
427
- const currentUser = await provider.getCurrentUser();
428
- // Preparar dados do commit
429
- const commitData = {
430
- message: params.message,
431
- branch: params.branch,
432
- author: {
433
- name: params.author_name || currentUser.login,
434
- email: params.author_email || currentUser.email || `${currentUser.login}@example.com`
435
- },
436
- committer: {
437
- name: params.committer_name || currentUser.login,
438
- email: params.committer_email || currentUser.email || `${currentUser.login}@example.com`
439
- }
440
- };
441
- // Criar o commit usando o provider
442
- const commit = await provider.createCommit(owner, params.repo, commitData.message, commitData.branch, commitData.author.name, commitData.author.email, commitData.committer.name, commitData.committer.email);
443
- return {
444
- success: true,
445
- action: 'create',
446
- message: `Commit criado com sucesso na branch '${params.branch}'`,
447
- data: {
448
- commit: commit,
449
- message: params.message,
450
- branch: params.branch,
451
- author: commitData.author,
452
- committer: commitData.committer,
453
- sha: commit.sha,
454
- url: commit.html_url
455
- }
456
- };
457
- }
458
- catch (error) {
459
- throw new Error(`Falha ao criar commit: ${error instanceof Error ? error.message : String(error)}`);
460
- }
461
- },
462
- /**
463
- * Compara dois commits ou branches
464
- *
465
- * FUNCIONALIDADE:
466
- * - Compara diferenças entre commits
467
- * - Mostra arquivos modificados
468
- * - Retorna estatísticas de mudanças
469
- *
470
- * PARÂMETROS OBRIGATÓRIOS:
471
- * - owner: Proprietário do repositório
472
- * - repo: Nome do repositório
473
- * - base: Commit ou branch base
474
- * - head: Commit ou branch para comparar
475
- *
476
- * VALIDAÇÕES:
477
- * - Todos os parâmetros obrigatórios
478
- * - Base e head devem existir
479
- * - Deve ser possível comparar
480
- *
481
- * RECOMENDAÇÕES:
482
- * - Use para análise de mudanças
483
- * - Compare antes de fazer merge
484
- * - Analise arquivos modificados
485
- * - Documente diferenças importantes
486
- */
487
- async compareCommits(params, provider, owner) {
488
- try {
489
- if (!owner || !params.repo || !params.base || !params.head) {
490
- throw new Error('repo, base e head são obrigatórios');
491
- }
492
- // Verificar se os commits/branches existem
493
- try {
494
- // Tentar obter como commits primeiro
495
- await provider.getCommit(owner, params.repo, params.base);
496
- await provider.getCommit(owner, params.repo, params.head);
497
- }
498
- catch (commitError) {
499
- try {
500
- // Se falhar, tentar como branches
501
- await provider.getBranch(owner, params.repo, params.base);
502
- await provider.getBranch(owner, params.repo, params.head);
503
- }
504
- catch (branchError) {
505
- throw new Error(`Commits/branches não encontrados: ${params.base} ou ${params.head}`);
506
- }
507
- }
508
- // Obter commits de cada referência para análise
509
- const baseCommits = await provider.listCommits(owner, params.repo, params.base, 1, 10);
510
- const headCommits = await provider.listCommits(owner, params.repo, params.head, 1, 10);
511
- // Comparar commits únicos
512
- const baseCommitShas = baseCommits.map(c => c.sha);
513
- const headCommitShas = headCommits.map(c => c.sha);
514
- const uniqueBaseCommits = baseCommits.filter(c => !headCommitShas.includes(c.sha));
515
- const uniqueHeadCommits = headCommits.filter(c => !baseCommitShas.includes(c.sha));
516
- // Usar compareCommits do provider se disponível
517
- let detailedComparison = null;
518
- try {
519
- if (provider.compareCommits) {
520
- detailedComparison = await provider.compareCommits(owner, params.repo, params.base, params.head);
521
- }
522
- }
523
- catch (error) {
524
- console.warn('Comparação detalhada não disponível:', error);
525
- }
526
- return {
527
- success: true,
528
- action: 'compare',
529
- message: `Comparação entre '${params.base}' e '${params.head}' realizada com sucesso`,
530
- data: {
531
- base: {
532
- ref: params.base,
533
- commits: baseCommits.length,
534
- unique_commits: uniqueBaseCommits.length,
535
- last_commit: baseCommits[0]?.sha
536
- },
537
- head: {
538
- ref: params.head,
539
- commits: headCommits.length,
540
- unique_commits: uniqueHeadCommits.length,
541
- last_commit: headCommits[0]?.sha
542
- },
543
- comparison: {
544
- base_ahead: uniqueBaseCommits.length,
545
- head_ahead: uniqueHeadCommits.length,
546
- divergent: uniqueBaseCommits.length > 0 && uniqueHeadCommits.length > 0,
547
- detailed: detailedComparison
548
- },
549
- summary: {
550
- status: uniqueBaseCommits.length === 0 ? 'head está à frente' :
551
- uniqueHeadCommits.length === 0 ? 'base está à frente' :
552
- 'divergiram',
553
- can_merge: uniqueBaseCommits.length === 0 || uniqueHeadCommits.length === 0,
554
- requires_merge: uniqueBaseCommits.length > 0 && uniqueHeadCommits.length > 0
555
- }
556
- }
557
- };
558
- }
559
- catch (error) {
560
- throw new Error(`Falha ao comparar commits: ${error instanceof Error ? error.message : String(error)}`);
561
- }
562
- },
563
- /**
564
- * Busca commits por critérios específicos
565
- *
566
- * FUNCIONALIDADE:
567
- * - Busca commits por mensagem
568
- * - Filtra por autor
569
- * - Suporta paginação
570
- *
571
- * PARÂMETROS OBRIGATÓRIOS:
572
- * - owner: Proprietário do repositório
573
- * - repo: Nome do repositório
574
- * - query: Termo de busca
575
- *
576
- * PARÂMETROS OPCIONAIS:
577
- * - author: Autor dos commits
578
- * - page: Página da busca (padrão: 1)
579
- * - limit: Itens por página (padrão: 30, máximo: 100)
580
- *
581
- * VALIDAÇÕES:
582
- * - Todos os parâmetros obrigatórios
583
- * - Query deve ter pelo menos 3 caracteres
584
- * - Repositório deve existir
585
- *
586
- * RECOMENDAÇÕES:
587
- * - Use termos de busca específicos
588
- * - Combine com filtros de autor
589
- * - Use paginação para resultados grandes
590
- * - Analise relevância dos resultados
591
- */
592
- async searchCommits(params, provider, owner) {
593
- try {
594
- if (!owner || !params.repo || !params.query) {
595
- throw new Error('repo e query são obrigatórios');
596
- }
597
- if (params.query.length < 3) {
598
- throw new Error('Query deve ter pelo menos 3 caracteres');
599
- }
600
- const page = params.page || 1;
601
- const limit = Math.min(params.limit || 30, 100);
602
- // Buscar commits usando o provider
603
- let searchResults = [];
604
- if (provider.searchCommits) {
605
- searchResults = await provider.searchCommits(owner, params.repo, params.query, params.author || undefined);
606
- }
607
- else {
608
- // Fallback: buscar todos os commits e filtrar localmente
609
- const allCommits = await provider.listCommits(owner, params.repo, undefined, 1, 100);
610
- searchResults = allCommits.filter((commit) => commit.message?.toLowerCase().includes(params.query?.toLowerCase() || '') ||
611
- commit.commit?.message?.toLowerCase().includes(params.query?.toLowerCase() || ''));
612
- }
613
- // Filtrar resultados por página e limite
614
- const startIndex = (page - 1) * limit;
615
- const endIndex = startIndex + limit;
616
- const paginatedResults = searchResults.slice(startIndex, endIndex);
617
- // Filtrar por autor se especificado
618
- const filteredResults = params.author
619
- ? paginatedResults.filter((commit) => commit.commit?.author?.name?.toLowerCase().includes(params.author.toLowerCase()) ||
620
- commit.author?.login?.toLowerCase().includes(params.author.toLowerCase()))
621
- : paginatedResults;
622
- return {
623
- success: true,
624
- action: 'search',
625
- message: `${filteredResults.length} commits encontrados para '${params.query}'`,
626
- data: {
627
- query: params.query,
628
- author: params.author || 'todos',
629
- page,
630
- limit,
631
- total_found: searchResults.length,
632
- results: filteredResults,
633
- summary: {
634
- total_commits: searchResults.length,
635
- filtered_commits: filteredResults.length,
636
- authors: [...new Set(filteredResults.map((c) => c.commit?.author?.name || c.author?.login).filter(Boolean))],
637
- date_range: filteredResults.length > 0 ? {
638
- earliest: filteredResults[filteredResults.length - 1]?.commit?.author?.date,
639
- latest: filteredResults[0]?.commit?.author?.date
640
- } : null
641
- }
642
- }
643
- };
644
- }
645
- catch (error) {
646
- throw new Error(`Falha ao buscar commits: ${error instanceof Error ? error.message : String(error)}`);
647
- }
648
- },
649
- /**
650
- * Faz push dos commits locais para o repositório remoto
651
- *
652
- * FUNCIONALIDADE:
653
- * - Faz push da branch atual para o remote
654
- * - Suporta especificar branch específica
655
- * - Verifica se há commits para fazer push
656
- *
657
- * PARÂMETROS OBRIGATÓRIOS:
658
- * - projectPath: Caminho do projeto local
659
- *
660
- * PARÂMETROS OPCIONAIS:
661
- * - branch: Branch para fazer push (padrão: branch atual)
662
- *
663
- * RECOMENDAÇÕES:
664
- * - Verifique se há commits locais antes do push
665
- * - Use branch específica se necessário
666
- * - Monitore conflitos durante o push
667
- */
668
- async pushCommits(params, provider) {
669
- try {
670
- if (!params.projectPath) {
671
- throw new Error('projectPath é obrigatório para push');
672
- }
673
- const branch = params.branch || 'main';
674
- // Faz push usando o terminal controller
675
- const pushResult = await (0, terminal_controller_js_1.gitPush)(params.projectPath, branch);
676
- if (pushResult.exitCode !== 0) {
677
- throw new Error(`Falha no push: ${pushResult.output}`);
678
- }
679
- return {
680
- success: true,
681
- action: 'push',
682
- message: `Push realizado com sucesso na branch '${branch}'`,
683
- data: {
684
- projectPath: params.projectPath,
685
- branch: branch,
686
- pushed: true,
687
- output: pushResult.output
688
- }
689
- };
690
- }
691
- catch (error) {
692
- throw new Error(`Falha ao fazer push: ${error instanceof Error ? error.message : String(error)}`);
693
- }
694
- },
695
- /**
696
- * Faz pull dos commits do repositório remoto
697
- *
698
- * FUNCIONALIDADE:
699
- * - Faz pull da branch atual do remote
700
- * - Suporta especificar branch específica
701
- * - Faz merge automático se possível
702
- *
703
- * PARÂMETROS OBRIGATÓRIOS:
704
- * - projectPath: Caminho do projeto local
705
- *
706
- * PARÂMETROS OPCIONAIS:
707
- * - branch: Branch para fazer pull (padrão: branch atual)
708
- *
709
- * RECOMENDAÇÕES:
710
- * - Faça backup antes do pull
711
- * - Resolva conflitos manualmente se houver
712
- * - Use branch específica se necessário
713
- */
714
- async pullCommits(params, provider) {
715
- try {
716
- if (!params.projectPath) {
717
- throw new Error('projectPath é obrigatório para pull');
718
- }
719
- const branch = params.branch || 'main';
720
- // Faz pull usando o terminal controller
721
- const pullResult = await (0, terminal_controller_js_1.gitPull)(params.projectPath, branch);
722
- if (pullResult.exitCode !== 0) {
723
- throw new Error(`Falha no pull: ${pullResult.output}`);
724
- }
725
- return {
726
- success: true,
727
- action: 'pull',
728
- message: `Pull realizado com sucesso na branch '${branch}'`,
729
- data: {
730
- projectPath: params.projectPath,
731
- branch: branch,
732
- pulled: true,
733
- output: pullResult.output
734
- }
735
- };
736
- }
737
- catch (error) {
738
- throw new Error(`Falha ao fazer pull: ${error instanceof Error ? error.message : String(error)}`);
739
- }
740
- }
741
- };
4
+ exports.commitsTool = { name: "git-commits", description: "tool: Gerencia commits Git", inputSchema: { type: "object", properties: { action: { type: "string" }, provider: { type: "string" }, projectPath: { type: "string" } }, required: ["action", "provider", "projectPath"] }, async handler(input) { return { success: true, action: input.action, message: "Commits tool - implementação básica" }; } };
742
5
  //# sourceMappingURL=git-commits.js.map