@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.
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/git-archive.d.ts +0 -3
- package/dist/tools/git-archive.d.ts.map +1 -1
- package/dist/tools/git-archive.js +2 -2
- package/dist/tools/git-archive.js.map +1 -1
- package/dist/tools/git-branches.d.ts +6 -413
- package/dist/tools/git-branches.d.ts.map +1 -1
- package/dist/tools/git-branches.js +1 -622
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-commits.d.ts +6 -472
- package/dist/tools/git-commits.d.ts.map +1 -1
- package/dist/tools/git-commits.js +1 -738
- package/dist/tools/git-commits.js.map +1 -1
- package/dist/tools/git-config.d.ts +0 -3
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js +2 -2
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-files.d.ts +5 -468
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +1 -608
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-initialize.js +119 -119
- package/dist/tools/git-issues.d.ts +5 -18
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +24 -55
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-packages.d.ts +0 -3
- package/dist/tools/git-packages.d.ts.map +1 -1
- package/dist/tools/git-packages.js +3 -3
- package/dist/tools/git-packages.js.map +1 -1
- package/dist/tools/git-projects.d.ts +0 -3
- package/dist/tools/git-projects.d.ts.map +1 -1
- package/dist/tools/git-projects.js +4 -4
- package/dist/tools/git-projects.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +7 -16
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +43 -42
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-releases.d.ts +3 -15
- package/dist/tools/git-releases.d.ts.map +1 -1
- package/dist/tools/git-releases.js +23 -29
- package/dist/tools/git-releases.js.map +1 -1
- package/dist/tools/git-remote.d.ts +0 -3
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js +2 -2
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-repositories.d.ts +3 -18
- package/dist/tools/git-repositories.d.ts.map +1 -1
- package/dist/tools/git-repositories.js +23 -30
- package/dist/tools/git-repositories.js.map +1 -1
- package/dist/tools/git-reset.d.ts +2 -5
- package/dist/tools/git-reset.d.ts.map +1 -1
- package/dist/tools/git-reset.js +2 -2
- package/dist/tools/git-reset.js.map +1 -1
- package/dist/tools/git-revert.d.ts +0 -3
- package/dist/tools/git-revert.d.ts.map +1 -1
- package/dist/tools/git-revert.js +2 -2
- package/dist/tools/git-revert.js.map +1 -1
- package/dist/tools/git-stash.d.ts +0 -3
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js +2 -2
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-tags.d.ts +3 -12
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +8 -11
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-update-project.d.ts +3 -9
- package/dist/tools/git-update-project.d.ts.map +1 -1
- package/dist/tools/git-update-project.js +22 -17
- package/dist/tools/git-update-project.js.map +1 -1
- package/dist/utils/user-detection.d.ts +13 -1
- package/dist/utils/user-detection.d.ts.map +1 -1
- package/dist/utils/user-detection.js +26 -1
- package/dist/utils/user-detection.js.map +1 -1
- package/package.json +3 -3
- package/dist/tools/git-files-backup.d.ts +0 -596
- package/dist/tools/git-files-backup.d.ts.map +0 -1
- package/dist/tools/git-files-backup.js +0 -868
- package/dist/tools/git-files-backup.js.map +0 -1
- package/dist/tools/git-publish.d.ts +0 -327
- package/dist/tools/git-publish.d.ts.map +0 -1
- package/dist/tools/git-publish.js +0 -632
- package/dist/tools/git-publish.js.map +0 -1
- package/dist/tools/git-workflow.d.ts +0 -299
- package/dist/tools/git-workflow.d.ts.map +0 -1
- package/dist/tools/git-workflow.js +0 -563
- 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
|
-
|
|
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
|