@andrebuzeli/git-mcp 2.28.0 → 2.28.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +306 -306
- package/dist/client.js +298 -298
- package/dist/config.d.ts +310 -310
- package/dist/config.js +392 -392
- package/dist/index.d.ts +22 -22
- package/dist/index.js +89 -89
- package/dist/providers/base-provider.d.ts +160 -160
- package/dist/providers/base-provider.js +274 -274
- package/dist/providers/error-handler.d.ts +50 -50
- package/dist/providers/error-handler.js +175 -175
- package/dist/providers/gitea-provider.d.ts +97 -97
- package/dist/providers/gitea-provider.d.ts.map +1 -1
- package/dist/providers/gitea-provider.js +1015 -1001
- package/dist/providers/gitea-provider.js.map +1 -1
- package/dist/providers/github-provider.d.ts +104 -104
- package/dist/providers/github-provider.d.ts.map +1 -1
- package/dist/providers/github-provider.js +1248 -1234
- package/dist/providers/github-provider.js.map +1 -1
- package/dist/providers/index.d.ts +12 -12
- package/dist/providers/index.js +40 -40
- package/dist/providers/provider-factory.d.ts +74 -74
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +318 -311
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/types.d.ts +318 -318
- package/dist/providers/types.js +6 -6
- package/dist/server.d.ts +76 -76
- package/dist/server.js +306 -306
- package/dist/tools/git-archive.d.ts +165 -165
- package/dist/tools/git-archive.js +233 -233
- package/dist/tools/git-branches.d.ts +430 -430
- package/dist/tools/git-branches.js +627 -627
- package/dist/tools/git-commits.d.ts +485 -485
- package/dist/tools/git-commits.js +735 -735
- package/dist/tools/git-commits.js.map +1 -1
- package/dist/tools/git-config.d.ts +140 -140
- package/dist/tools/git-config.js +268 -268
- package/dist/tools/git-files.d.ts +486 -486
- package/dist/tools/git-files.js +607 -607
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-issues.d.ts +574 -571
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +741 -740
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +697 -694
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +733 -732
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-releases.d.ts +490 -487
- package/dist/tools/git-releases.d.ts.map +1 -1
- package/dist/tools/git-releases.js +558 -557
- package/dist/tools/git-releases.js.map +1 -1
- package/dist/tools/git-remote.d.ts +138 -138
- package/dist/tools/git-remote.js +274 -274
- package/dist/tools/git-repositories.d.ts +483 -483
- package/dist/tools/git-repositories.js +640 -640
- package/dist/tools/git-repositories.js.map +1 -1
- package/dist/tools/git-reset.d.ts +130 -130
- package/dist/tools/git-reset.js +223 -223
- package/dist/tools/git-revert.d.ts +149 -149
- package/dist/tools/git-revert.js +198 -198
- package/dist/tools/git-stash.d.ts +140 -140
- package/dist/tools/git-stash.js +269 -269
- package/dist/tools/git-sync.d.ts +178 -178
- package/dist/tools/git-sync.js +312 -312
- package/dist/tools/git-tags.d.ts +414 -411
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +486 -485
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-webhooks.d.ts +473 -470
- package/dist/tools/git-webhooks.d.ts.map +1 -1
- package/dist/tools/git-webhooks.js +544 -543
- package/dist/tools/git-webhooks.js.map +1 -1
- package/dist/utils/terminal-controller.d.ts +80 -80
- package/dist/utils/terminal-controller.js +345 -345
- package/dist/utils/user-detection.d.ts +24 -24
- package/dist/utils/user-detection.js +53 -53
- package/package.json +2 -2
- package/dist/tools/gh-actions.d.ts +0 -253
- package/dist/tools/gh-actions.d.ts.map +0 -1
- package/dist/tools/gh-actions.js +0 -390
- package/dist/tools/gh-actions.js.map +0 -1
- package/dist/tools/gh-analytics.d.ts +0 -264
- package/dist/tools/gh-analytics.d.ts.map +0 -1
- package/dist/tools/gh-analytics.js +0 -402
- package/dist/tools/gh-analytics.js.map +0 -1
- package/dist/tools/gh-code-review.d.ts +0 -305
- package/dist/tools/gh-code-review.d.ts.map +0 -1
- package/dist/tools/gh-code-review.js +0 -513
- package/dist/tools/gh-code-review.js.map +0 -1
- package/dist/tools/gh-codespaces.d.ts +0 -139
- package/dist/tools/gh-codespaces.d.ts.map +0 -1
- package/dist/tools/gh-codespaces.js +0 -283
- package/dist/tools/gh-codespaces.js.map +0 -1
- package/dist/tools/gh-deployments.d.ts +0 -301
- package/dist/tools/gh-deployments.d.ts.map +0 -1
- package/dist/tools/gh-deployments.js +0 -368
- package/dist/tools/gh-deployments.js.map +0 -1
- package/dist/tools/gh-gists.d.ts +0 -175
- package/dist/tools/gh-gists.d.ts.map +0 -1
- package/dist/tools/gh-gists.js +0 -322
- package/dist/tools/gh-gists.js.map +0 -1
- package/dist/tools/gh-projects.d.ts +0 -206
- package/dist/tools/gh-projects.d.ts.map +0 -1
- package/dist/tools/gh-projects.js +0 -359
- package/dist/tools/gh-projects.js.map +0 -1
- package/dist/tools/gh-security.d.ts +0 -275
- package/dist/tools/gh-security.d.ts.map +0 -1
- package/dist/tools/gh-security.js +0 -396
- package/dist/tools/gh-security.js.map +0 -1
- package/dist/tools/gh-sync.d.ts +0 -214
- package/dist/tools/gh-sync.d.ts.map +0 -1
- package/dist/tools/gh-sync.js +0 -379
- package/dist/tools/gh-sync.js.map +0 -1
- package/dist/tools/gh-workflows.d.ts +0 -291
- package/dist/tools/gh-workflows.d.ts.map +0 -1
- package/dist/tools/gh-workflows.js +0 -433
- package/dist/tools/gh-workflows.js.map +0 -1
- package/dist/tools/git-bundle.d.ts +0 -172
- package/dist/tools/git-bundle.d.ts.map +0 -1
- package/dist/tools/git-bundle.js +0 -242
- package/dist/tools/git-bundle.js.map +0 -1
- package/dist/tools/git-cherry-pick.d.ts +0 -159
- package/dist/tools/git-cherry-pick.d.ts.map +0 -1
- package/dist/tools/git-cherry-pick.js +0 -225
- package/dist/tools/git-cherry-pick.js.map +0 -1
- package/dist/tools/git-rebase.d.ts +0 -138
- package/dist/tools/git-rebase.d.ts.map +0 -1
- package/dist/tools/git-rebase.js +0 -214
- package/dist/tools/git-rebase.js.map +0 -1
- package/dist/tools/git-submodule.d.ts +0 -153
- package/dist/tools/git-submodule.d.ts.map +0 -1
- package/dist/tools/git-submodule.js +0 -290
- package/dist/tools/git-submodule.js.map +0 -1
- package/dist/tools/git-worktree.d.ts +0 -160
- package/dist/tools/git-worktree.d.ts.map +0 -1
- package/dist/tools/git-worktree.js +0 -270
- package/dist/tools/git-worktree.js.map +0 -1
- package/dist/tools/repositories.d.ts +0 -406
- package/dist/tools/repositories.d.ts.map +0 -1
- package/dist/tools/repositories.js +0 -570
- package/dist/tools/repositories.js.map +0 -1
- package/dist/tools/users.d.ts +0 -373
- package/dist/tools/users.d.ts.map +0 -1
- package/dist/tools/users.js +0 -500
- package/dist/tools/users.js.map +0 -1
- package/dist/tools/validator.d.ts +0 -171
- package/dist/tools/validator.d.ts.map +0 -1
- package/dist/tools/validator.js +0 -195
- package/dist/tools/validator.js.map +0 -1
- package/dist/tools/version-control.d.ts +0 -137
- package/dist/tools/version-control.d.ts.map +0 -1
- package/dist/tools/version-control.js +0 -165
- package/dist/tools/version-control.js.map +0 -1
|
@@ -1,346 +1,346 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.runTerminalCmd = runTerminalCmd;
|
|
4
|
-
exports.runGitCommand = runGitCommand;
|
|
5
|
-
exports.isGitRepository = isGitRepository;
|
|
6
|
-
exports.getGitStatus = getGitStatus;
|
|
7
|
-
exports.gitAdd = gitAdd;
|
|
8
|
-
exports.gitCommit = gitCommit;
|
|
9
|
-
exports.gitPush = gitPush;
|
|
10
|
-
exports.gitPull = gitPull;
|
|
11
|
-
const child_process_1 = require("child_process");
|
|
12
|
-
const git_operations_js_1 = require("./git-operations.js");
|
|
13
|
-
/**
|
|
14
|
-
* Executa um comando no terminal
|
|
15
|
-
*
|
|
16
|
-
* @param params Parâmetros do comando
|
|
17
|
-
* @returns Promise com resultado da execução
|
|
18
|
-
*/
|
|
19
|
-
async function runTerminalCmd(params) {
|
|
20
|
-
return new Promise((resolve, reject) => {
|
|
21
|
-
const { command, is_background, explanation, projectPath } = params;
|
|
22
|
-
console.log(`[TERMINAL] Executando: ${explanation}`);
|
|
23
|
-
console.log(`[TERMINAL] Comando: ${command}`);
|
|
24
|
-
console.log(`[TERMINAL] Diretório: ${projectPath || process.cwd()}`);
|
|
25
|
-
// Determina se é Windows ou Unix
|
|
26
|
-
const isWindows = process.platform === 'win32';
|
|
27
|
-
const shell = isWindows ? 'cmd' : 'bash';
|
|
28
|
-
const shellFlag = isWindows ? '/c' : '-c';
|
|
29
|
-
const child = (0, child_process_1.spawn)(shell, [shellFlag, command], {
|
|
30
|
-
stdio: is_background ? 'ignore' : 'pipe',
|
|
31
|
-
cwd: projectPath || process.cwd(),
|
|
32
|
-
env: { ...process.env }
|
|
33
|
-
});
|
|
34
|
-
let output = '';
|
|
35
|
-
let error = '';
|
|
36
|
-
if (!is_background) {
|
|
37
|
-
if (child.stdout) {
|
|
38
|
-
child.stdout.on('data', (data) => {
|
|
39
|
-
output += data.toString();
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
if (child.stderr) {
|
|
43
|
-
child.stderr.on('data', (data) => {
|
|
44
|
-
error += data.toString();
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
child.on('close', (code) => {
|
|
49
|
-
const result = {
|
|
50
|
-
exitCode: code || 0,
|
|
51
|
-
output: output.trim(),
|
|
52
|
-
error: error.trim()
|
|
53
|
-
};
|
|
54
|
-
if (code === 0) {
|
|
55
|
-
console.log(`[TERMINAL] ✅ Sucesso: ${explanation}`);
|
|
56
|
-
resolve(result);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
console.error(`[TERMINAL] ❌ Erro (${code}): ${explanation}`);
|
|
60
|
-
console.error(`[TERMINAL] Output: ${output}`);
|
|
61
|
-
console.error(`[TERMINAL] Error: ${error}`);
|
|
62
|
-
resolve(result); // Resolve mesmo com erro para que o código possa tratar
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
child.on('error', (err) => {
|
|
66
|
-
console.error(`[TERMINAL] Spawn error: ${err.message}`);
|
|
67
|
-
reject(err);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Executa comando Git usando GitOperations - 100% auto-suficiente
|
|
73
|
-
*
|
|
74
|
-
* @param gitCommand Comando Git a executar
|
|
75
|
-
* @param projectPath Caminho do projeto
|
|
76
|
-
* @param explanation Explicação do comando
|
|
77
|
-
* @returns Promise com resultado
|
|
78
|
-
*/
|
|
79
|
-
async function runGitCommand(gitCommand, projectPath, explanation) {
|
|
80
|
-
console.log(`[GIT] Executando: ${explanation}`);
|
|
81
|
-
console.log(`[GIT] Comando: git ${gitCommand}`);
|
|
82
|
-
console.log(`[GIT] Diretório: ${projectPath}`);
|
|
83
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
84
|
-
try {
|
|
85
|
-
// Parse do comando Git
|
|
86
|
-
const parts = gitCommand.split(' ');
|
|
87
|
-
const action = parts[0];
|
|
88
|
-
const args = parts.slice(1);
|
|
89
|
-
let result;
|
|
90
|
-
switch (action) {
|
|
91
|
-
case 'init':
|
|
92
|
-
result = await gitOps.initRepository();
|
|
93
|
-
break;
|
|
94
|
-
case 'clone':
|
|
95
|
-
result = await gitOps.cloneRepository(args[0], args[1]);
|
|
96
|
-
break;
|
|
97
|
-
case 'add':
|
|
98
|
-
result = await gitOps.addFiles(args);
|
|
99
|
-
break;
|
|
100
|
-
case 'commit':
|
|
101
|
-
const message = args.find(arg => arg.startsWith('-m'))?.substring(2) || 'Commit via MCP';
|
|
102
|
-
result = await gitOps.commit(message);
|
|
103
|
-
break;
|
|
104
|
-
case 'push':
|
|
105
|
-
result = await gitOps.push(args[0], args[1]);
|
|
106
|
-
break;
|
|
107
|
-
case 'pull':
|
|
108
|
-
result = await gitOps.pull(args[0], args[1]);
|
|
109
|
-
break;
|
|
110
|
-
case 'fetch':
|
|
111
|
-
result = await gitOps.fetch(args[0]);
|
|
112
|
-
break;
|
|
113
|
-
case 'branch':
|
|
114
|
-
if (args.includes('-a')) {
|
|
115
|
-
result = await gitOps.listBranches({ all: true });
|
|
116
|
-
}
|
|
117
|
-
else if (args.includes('-d') || args.includes('-D')) {
|
|
118
|
-
const branchName = args[args.length - 1];
|
|
119
|
-
result = await gitOps.deleteBranch(branchName, { force: args.includes('-D') });
|
|
120
|
-
}
|
|
121
|
-
else if (args.length > 0) {
|
|
122
|
-
result = await gitOps.createBranch(args[0]);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
result = await gitOps.listBranches();
|
|
126
|
-
}
|
|
127
|
-
break;
|
|
128
|
-
case 'checkout':
|
|
129
|
-
result = await gitOps.checkout(args[0]);
|
|
130
|
-
break;
|
|
131
|
-
case 'merge':
|
|
132
|
-
result = await gitOps.merge(args[0]);
|
|
133
|
-
break;
|
|
134
|
-
case 'rebase':
|
|
135
|
-
result = await gitOps.rebase(args[0]);
|
|
136
|
-
break;
|
|
137
|
-
case 'reset':
|
|
138
|
-
result = await gitOps.reset(args[0]);
|
|
139
|
-
break;
|
|
140
|
-
case 'revert':
|
|
141
|
-
result = await gitOps.revert(args[0]);
|
|
142
|
-
break;
|
|
143
|
-
case 'cherry-pick':
|
|
144
|
-
result = await gitOps.cherryPick(args[0]);
|
|
145
|
-
break;
|
|
146
|
-
case 'stash':
|
|
147
|
-
if (args.length === 0) {
|
|
148
|
-
result = await gitOps.stash('push');
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
result = await gitOps.stash(args[0]);
|
|
152
|
-
}
|
|
153
|
-
break;
|
|
154
|
-
case 'tag':
|
|
155
|
-
if (args.includes('-l')) {
|
|
156
|
-
result = await gitOps.tag(undefined, { list: true });
|
|
157
|
-
}
|
|
158
|
-
else if (args.includes('-d')) {
|
|
159
|
-
const tagName = args[args.length - 1];
|
|
160
|
-
result = await gitOps.tag(tagName, { delete: true });
|
|
161
|
-
}
|
|
162
|
-
else if (args.length > 0) {
|
|
163
|
-
result = await gitOps.tag(args[0]);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
result = await gitOps.tag(undefined, { list: true });
|
|
167
|
-
}
|
|
168
|
-
break;
|
|
169
|
-
case 'log':
|
|
170
|
-
result = await gitOps.log();
|
|
171
|
-
break;
|
|
172
|
-
case 'status':
|
|
173
|
-
result = await gitOps.status();
|
|
174
|
-
break;
|
|
175
|
-
case 'diff':
|
|
176
|
-
result = await gitOps.diff();
|
|
177
|
-
break;
|
|
178
|
-
case 'remote':
|
|
179
|
-
if (args[0] === 'add') {
|
|
180
|
-
result = await gitOps.remote('add', args[1], args[2]);
|
|
181
|
-
}
|
|
182
|
-
else if (args[0] === 'remove') {
|
|
183
|
-
result = await gitOps.remote('remove', args[1]);
|
|
184
|
-
}
|
|
185
|
-
else if (args[0] === 'show') {
|
|
186
|
-
result = await gitOps.remote('show', args[1]);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
result = await gitOps.remote('show');
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
case 'config':
|
|
193
|
-
if (args.includes('--global')) {
|
|
194
|
-
result = await gitOps.config(args[1], args[2], { global: true });
|
|
195
|
-
}
|
|
196
|
-
else if (args.includes('--local')) {
|
|
197
|
-
result = await gitOps.config(args[1], args[2], { local: true });
|
|
198
|
-
}
|
|
199
|
-
else if (args.includes('--list')) {
|
|
200
|
-
result = await gitOps.config(undefined, undefined, { list: true });
|
|
201
|
-
}
|
|
202
|
-
else if (args.length > 0) {
|
|
203
|
-
result = await gitOps.config(args[0], args[1]);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
result = await gitOps.config(undefined, undefined, { list: true });
|
|
207
|
-
}
|
|
208
|
-
break;
|
|
209
|
-
case 'submodule':
|
|
210
|
-
result = await gitOps.submodule(args[0]);
|
|
211
|
-
break;
|
|
212
|
-
case 'worktree':
|
|
213
|
-
result = await gitOps.worktree(args[0]);
|
|
214
|
-
break;
|
|
215
|
-
case 'archive':
|
|
216
|
-
result = await gitOps.archive(args[0], args[1], args[2]);
|
|
217
|
-
break;
|
|
218
|
-
case 'bundle':
|
|
219
|
-
const bundleAction = args[0];
|
|
220
|
-
const bundleOptions = {};
|
|
221
|
-
if (bundleAction === 'create') {
|
|
222
|
-
bundleOptions.file = args[1];
|
|
223
|
-
if (args[2])
|
|
224
|
-
bundleOptions.revlist = args[2];
|
|
225
|
-
}
|
|
226
|
-
else if (bundleAction === 'verify') {
|
|
227
|
-
bundleOptions.file = args[1];
|
|
228
|
-
}
|
|
229
|
-
else if (bundleAction === 'list-heads') {
|
|
230
|
-
bundleOptions.file = args[1];
|
|
231
|
-
}
|
|
232
|
-
else if (bundleAction === 'unbundle') {
|
|
233
|
-
bundleOptions.file = args[1];
|
|
234
|
-
}
|
|
235
|
-
result = await gitOps.bundle(bundleAction, bundleOptions);
|
|
236
|
-
break;
|
|
237
|
-
default:
|
|
238
|
-
// Fallback para comando direto
|
|
239
|
-
result = await gitOps.runCommand('git', [gitCommand]);
|
|
240
|
-
}
|
|
241
|
-
return {
|
|
242
|
-
exitCode: result.success ? 0 : 1,
|
|
243
|
-
output: result.output,
|
|
244
|
-
error: result.error || ''
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
return {
|
|
249
|
-
exitCode: 1,
|
|
250
|
-
output: '',
|
|
251
|
-
error: error instanceof Error ? error.message : String(error)
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Verifica se um diretório é um repositório Git - 100% auto-suficiente
|
|
257
|
-
*
|
|
258
|
-
* @param projectPath Caminho do projeto
|
|
259
|
-
* @returns Promise<boolean>
|
|
260
|
-
*/
|
|
261
|
-
async function isGitRepository(projectPath) {
|
|
262
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
263
|
-
return await gitOps.isGitRepository();
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Obtém status do repositório Git - 100% auto-suficiente
|
|
267
|
-
*
|
|
268
|
-
* @param projectPath Caminho do projeto
|
|
269
|
-
* @returns Promise<TerminalResult>
|
|
270
|
-
*/
|
|
271
|
-
async function getGitStatus(projectPath) {
|
|
272
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
273
|
-
const result = await gitOps.status();
|
|
274
|
-
return {
|
|
275
|
-
exitCode: result.success ? 0 : 1,
|
|
276
|
-
output: result.output,
|
|
277
|
-
error: result.error || ''
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Adiciona arquivos ao stage - 100% auto-suficiente
|
|
282
|
-
*
|
|
283
|
-
* @param projectPath Caminho do projeto
|
|
284
|
-
* @param files Arquivos específicos ou '.' para todos
|
|
285
|
-
* @returns Promise<TerminalResult>
|
|
286
|
-
*/
|
|
287
|
-
async function gitAdd(projectPath, files = '.') {
|
|
288
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
289
|
-
const result = await gitOps.addFiles(files === '.' ? ['.'] : [files]);
|
|
290
|
-
return {
|
|
291
|
-
exitCode: result.success ? 0 : 1,
|
|
292
|
-
output: result.output,
|
|
293
|
-
error: result.error || ''
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Faz commit dos arquivos staged - 100% auto-suficiente
|
|
298
|
-
*
|
|
299
|
-
* @param projectPath Caminho do projeto
|
|
300
|
-
* @param message Mensagem do commit
|
|
301
|
-
* @returns Promise<TerminalResult>
|
|
302
|
-
*/
|
|
303
|
-
async function gitCommit(projectPath, message) {
|
|
304
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
305
|
-
const result = await gitOps.commit(message);
|
|
306
|
-
return {
|
|
307
|
-
exitCode: result.success ? 0 : 1,
|
|
308
|
-
output: result.output,
|
|
309
|
-
error: result.error || ''
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Faz push para o repositório remoto - 100% auto-suficiente
|
|
314
|
-
*
|
|
315
|
-
* @param projectPath Caminho do projeto
|
|
316
|
-
* @param branch Branch para fazer push
|
|
317
|
-
* @param remote Remote (padrão: origin)
|
|
318
|
-
* @returns Promise<TerminalResult>
|
|
319
|
-
*/
|
|
320
|
-
async function gitPush(projectPath, branch = 'main', remote = 'origin') {
|
|
321
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
322
|
-
const result = await gitOps.push(remote, branch);
|
|
323
|
-
return {
|
|
324
|
-
exitCode: result.success ? 0 : 1,
|
|
325
|
-
output: result.output,
|
|
326
|
-
error: result.error || ''
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* Faz pull do repositório remoto - 100% auto-suficiente
|
|
331
|
-
*
|
|
332
|
-
* @param projectPath Caminho do projeto
|
|
333
|
-
* @param branch Branch para fazer pull
|
|
334
|
-
* @param remote Remote (padrão: origin)
|
|
335
|
-
* @returns Promise<TerminalResult>
|
|
336
|
-
*/
|
|
337
|
-
async function gitPull(projectPath, branch = 'main', remote = 'origin') {
|
|
338
|
-
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
339
|
-
const result = await gitOps.pull(remote, branch);
|
|
340
|
-
return {
|
|
341
|
-
exitCode: result.success ? 0 : 1,
|
|
342
|
-
output: result.output,
|
|
343
|
-
error: result.error || ''
|
|
344
|
-
};
|
|
345
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runTerminalCmd = runTerminalCmd;
|
|
4
|
+
exports.runGitCommand = runGitCommand;
|
|
5
|
+
exports.isGitRepository = isGitRepository;
|
|
6
|
+
exports.getGitStatus = getGitStatus;
|
|
7
|
+
exports.gitAdd = gitAdd;
|
|
8
|
+
exports.gitCommit = gitCommit;
|
|
9
|
+
exports.gitPush = gitPush;
|
|
10
|
+
exports.gitPull = gitPull;
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
12
|
+
const git_operations_js_1 = require("./git-operations.js");
|
|
13
|
+
/**
|
|
14
|
+
* Executa um comando no terminal
|
|
15
|
+
*
|
|
16
|
+
* @param params Parâmetros do comando
|
|
17
|
+
* @returns Promise com resultado da execução
|
|
18
|
+
*/
|
|
19
|
+
async function runTerminalCmd(params) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const { command, is_background, explanation, projectPath } = params;
|
|
22
|
+
console.log(`[TERMINAL] Executando: ${explanation}`);
|
|
23
|
+
console.log(`[TERMINAL] Comando: ${command}`);
|
|
24
|
+
console.log(`[TERMINAL] Diretório: ${projectPath || process.cwd()}`);
|
|
25
|
+
// Determina se é Windows ou Unix
|
|
26
|
+
const isWindows = process.platform === 'win32';
|
|
27
|
+
const shell = isWindows ? 'cmd' : 'bash';
|
|
28
|
+
const shellFlag = isWindows ? '/c' : '-c';
|
|
29
|
+
const child = (0, child_process_1.spawn)(shell, [shellFlag, command], {
|
|
30
|
+
stdio: is_background ? 'ignore' : 'pipe',
|
|
31
|
+
cwd: projectPath || process.cwd(),
|
|
32
|
+
env: { ...process.env }
|
|
33
|
+
});
|
|
34
|
+
let output = '';
|
|
35
|
+
let error = '';
|
|
36
|
+
if (!is_background) {
|
|
37
|
+
if (child.stdout) {
|
|
38
|
+
child.stdout.on('data', (data) => {
|
|
39
|
+
output += data.toString();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (child.stderr) {
|
|
43
|
+
child.stderr.on('data', (data) => {
|
|
44
|
+
error += data.toString();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
child.on('close', (code) => {
|
|
49
|
+
const result = {
|
|
50
|
+
exitCode: code || 0,
|
|
51
|
+
output: output.trim(),
|
|
52
|
+
error: error.trim()
|
|
53
|
+
};
|
|
54
|
+
if (code === 0) {
|
|
55
|
+
console.log(`[TERMINAL] ✅ Sucesso: ${explanation}`);
|
|
56
|
+
resolve(result);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.error(`[TERMINAL] ❌ Erro (${code}): ${explanation}`);
|
|
60
|
+
console.error(`[TERMINAL] Output: ${output}`);
|
|
61
|
+
console.error(`[TERMINAL] Error: ${error}`);
|
|
62
|
+
resolve(result); // Resolve mesmo com erro para que o código possa tratar
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
child.on('error', (err) => {
|
|
66
|
+
console.error(`[TERMINAL] Spawn error: ${err.message}`);
|
|
67
|
+
reject(err);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Executa comando Git usando GitOperations - 100% auto-suficiente
|
|
73
|
+
*
|
|
74
|
+
* @param gitCommand Comando Git a executar
|
|
75
|
+
* @param projectPath Caminho do projeto
|
|
76
|
+
* @param explanation Explicação do comando
|
|
77
|
+
* @returns Promise com resultado
|
|
78
|
+
*/
|
|
79
|
+
async function runGitCommand(gitCommand, projectPath, explanation) {
|
|
80
|
+
console.log(`[GIT] Executando: ${explanation}`);
|
|
81
|
+
console.log(`[GIT] Comando: git ${gitCommand}`);
|
|
82
|
+
console.log(`[GIT] Diretório: ${projectPath}`);
|
|
83
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
84
|
+
try {
|
|
85
|
+
// Parse do comando Git
|
|
86
|
+
const parts = gitCommand.split(' ');
|
|
87
|
+
const action = parts[0];
|
|
88
|
+
const args = parts.slice(1);
|
|
89
|
+
let result;
|
|
90
|
+
switch (action) {
|
|
91
|
+
case 'init':
|
|
92
|
+
result = await gitOps.initRepository();
|
|
93
|
+
break;
|
|
94
|
+
case 'clone':
|
|
95
|
+
result = await gitOps.cloneRepository(args[0], args[1]);
|
|
96
|
+
break;
|
|
97
|
+
case 'add':
|
|
98
|
+
result = await gitOps.addFiles(args);
|
|
99
|
+
break;
|
|
100
|
+
case 'commit':
|
|
101
|
+
const message = args.find(arg => arg.startsWith('-m'))?.substring(2) || 'Commit via MCP';
|
|
102
|
+
result = await gitOps.commit(message);
|
|
103
|
+
break;
|
|
104
|
+
case 'push':
|
|
105
|
+
result = await gitOps.push(args[0], args[1]);
|
|
106
|
+
break;
|
|
107
|
+
case 'pull':
|
|
108
|
+
result = await gitOps.pull(args[0], args[1]);
|
|
109
|
+
break;
|
|
110
|
+
case 'fetch':
|
|
111
|
+
result = await gitOps.fetch(args[0]);
|
|
112
|
+
break;
|
|
113
|
+
case 'branch':
|
|
114
|
+
if (args.includes('-a')) {
|
|
115
|
+
result = await gitOps.listBranches({ all: true });
|
|
116
|
+
}
|
|
117
|
+
else if (args.includes('-d') || args.includes('-D')) {
|
|
118
|
+
const branchName = args[args.length - 1];
|
|
119
|
+
result = await gitOps.deleteBranch(branchName, { force: args.includes('-D') });
|
|
120
|
+
}
|
|
121
|
+
else if (args.length > 0) {
|
|
122
|
+
result = await gitOps.createBranch(args[0]);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
result = await gitOps.listBranches();
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
case 'checkout':
|
|
129
|
+
result = await gitOps.checkout(args[0]);
|
|
130
|
+
break;
|
|
131
|
+
case 'merge':
|
|
132
|
+
result = await gitOps.merge(args[0]);
|
|
133
|
+
break;
|
|
134
|
+
case 'rebase':
|
|
135
|
+
result = await gitOps.rebase(args[0]);
|
|
136
|
+
break;
|
|
137
|
+
case 'reset':
|
|
138
|
+
result = await gitOps.reset(args[0]);
|
|
139
|
+
break;
|
|
140
|
+
case 'revert':
|
|
141
|
+
result = await gitOps.revert(args[0]);
|
|
142
|
+
break;
|
|
143
|
+
case 'cherry-pick':
|
|
144
|
+
result = await gitOps.cherryPick(args[0]);
|
|
145
|
+
break;
|
|
146
|
+
case 'stash':
|
|
147
|
+
if (args.length === 0) {
|
|
148
|
+
result = await gitOps.stash('push');
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
result = await gitOps.stash(args[0]);
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
case 'tag':
|
|
155
|
+
if (args.includes('-l')) {
|
|
156
|
+
result = await gitOps.tag(undefined, { list: true });
|
|
157
|
+
}
|
|
158
|
+
else if (args.includes('-d')) {
|
|
159
|
+
const tagName = args[args.length - 1];
|
|
160
|
+
result = await gitOps.tag(tagName, { delete: true });
|
|
161
|
+
}
|
|
162
|
+
else if (args.length > 0) {
|
|
163
|
+
result = await gitOps.tag(args[0]);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
result = await gitOps.tag(undefined, { list: true });
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
case 'log':
|
|
170
|
+
result = await gitOps.log();
|
|
171
|
+
break;
|
|
172
|
+
case 'status':
|
|
173
|
+
result = await gitOps.status();
|
|
174
|
+
break;
|
|
175
|
+
case 'diff':
|
|
176
|
+
result = await gitOps.diff();
|
|
177
|
+
break;
|
|
178
|
+
case 'remote':
|
|
179
|
+
if (args[0] === 'add') {
|
|
180
|
+
result = await gitOps.remote('add', args[1], args[2]);
|
|
181
|
+
}
|
|
182
|
+
else if (args[0] === 'remove') {
|
|
183
|
+
result = await gitOps.remote('remove', args[1]);
|
|
184
|
+
}
|
|
185
|
+
else if (args[0] === 'show') {
|
|
186
|
+
result = await gitOps.remote('show', args[1]);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
result = await gitOps.remote('show');
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
case 'config':
|
|
193
|
+
if (args.includes('--global')) {
|
|
194
|
+
result = await gitOps.config(args[1], args[2], { global: true });
|
|
195
|
+
}
|
|
196
|
+
else if (args.includes('--local')) {
|
|
197
|
+
result = await gitOps.config(args[1], args[2], { local: true });
|
|
198
|
+
}
|
|
199
|
+
else if (args.includes('--list')) {
|
|
200
|
+
result = await gitOps.config(undefined, undefined, { list: true });
|
|
201
|
+
}
|
|
202
|
+
else if (args.length > 0) {
|
|
203
|
+
result = await gitOps.config(args[0], args[1]);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
result = await gitOps.config(undefined, undefined, { list: true });
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
case 'submodule':
|
|
210
|
+
result = await gitOps.submodule(args[0]);
|
|
211
|
+
break;
|
|
212
|
+
case 'worktree':
|
|
213
|
+
result = await gitOps.worktree(args[0]);
|
|
214
|
+
break;
|
|
215
|
+
case 'archive':
|
|
216
|
+
result = await gitOps.archive(args[0], args[1], args[2]);
|
|
217
|
+
break;
|
|
218
|
+
case 'bundle':
|
|
219
|
+
const bundleAction = args[0];
|
|
220
|
+
const bundleOptions = {};
|
|
221
|
+
if (bundleAction === 'create') {
|
|
222
|
+
bundleOptions.file = args[1];
|
|
223
|
+
if (args[2])
|
|
224
|
+
bundleOptions.revlist = args[2];
|
|
225
|
+
}
|
|
226
|
+
else if (bundleAction === 'verify') {
|
|
227
|
+
bundleOptions.file = args[1];
|
|
228
|
+
}
|
|
229
|
+
else if (bundleAction === 'list-heads') {
|
|
230
|
+
bundleOptions.file = args[1];
|
|
231
|
+
}
|
|
232
|
+
else if (bundleAction === 'unbundle') {
|
|
233
|
+
bundleOptions.file = args[1];
|
|
234
|
+
}
|
|
235
|
+
result = await gitOps.bundle(bundleAction, bundleOptions);
|
|
236
|
+
break;
|
|
237
|
+
default:
|
|
238
|
+
// Fallback para comando direto
|
|
239
|
+
result = await gitOps.runCommand('git', [gitCommand]);
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
exitCode: result.success ? 0 : 1,
|
|
243
|
+
output: result.output,
|
|
244
|
+
error: result.error || ''
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return {
|
|
249
|
+
exitCode: 1,
|
|
250
|
+
output: '',
|
|
251
|
+
error: error instanceof Error ? error.message : String(error)
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Verifica se um diretório é um repositório Git - 100% auto-suficiente
|
|
257
|
+
*
|
|
258
|
+
* @param projectPath Caminho do projeto
|
|
259
|
+
* @returns Promise<boolean>
|
|
260
|
+
*/
|
|
261
|
+
async function isGitRepository(projectPath) {
|
|
262
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
263
|
+
return await gitOps.isGitRepository();
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Obtém status do repositório Git - 100% auto-suficiente
|
|
267
|
+
*
|
|
268
|
+
* @param projectPath Caminho do projeto
|
|
269
|
+
* @returns Promise<TerminalResult>
|
|
270
|
+
*/
|
|
271
|
+
async function getGitStatus(projectPath) {
|
|
272
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
273
|
+
const result = await gitOps.status();
|
|
274
|
+
return {
|
|
275
|
+
exitCode: result.success ? 0 : 1,
|
|
276
|
+
output: result.output,
|
|
277
|
+
error: result.error || ''
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Adiciona arquivos ao stage - 100% auto-suficiente
|
|
282
|
+
*
|
|
283
|
+
* @param projectPath Caminho do projeto
|
|
284
|
+
* @param files Arquivos específicos ou '.' para todos
|
|
285
|
+
* @returns Promise<TerminalResult>
|
|
286
|
+
*/
|
|
287
|
+
async function gitAdd(projectPath, files = '.') {
|
|
288
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
289
|
+
const result = await gitOps.addFiles(files === '.' ? ['.'] : [files]);
|
|
290
|
+
return {
|
|
291
|
+
exitCode: result.success ? 0 : 1,
|
|
292
|
+
output: result.output,
|
|
293
|
+
error: result.error || ''
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Faz commit dos arquivos staged - 100% auto-suficiente
|
|
298
|
+
*
|
|
299
|
+
* @param projectPath Caminho do projeto
|
|
300
|
+
* @param message Mensagem do commit
|
|
301
|
+
* @returns Promise<TerminalResult>
|
|
302
|
+
*/
|
|
303
|
+
async function gitCommit(projectPath, message) {
|
|
304
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
305
|
+
const result = await gitOps.commit(message);
|
|
306
|
+
return {
|
|
307
|
+
exitCode: result.success ? 0 : 1,
|
|
308
|
+
output: result.output,
|
|
309
|
+
error: result.error || ''
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Faz push para o repositório remoto - 100% auto-suficiente
|
|
314
|
+
*
|
|
315
|
+
* @param projectPath Caminho do projeto
|
|
316
|
+
* @param branch Branch para fazer push
|
|
317
|
+
* @param remote Remote (padrão: origin)
|
|
318
|
+
* @returns Promise<TerminalResult>
|
|
319
|
+
*/
|
|
320
|
+
async function gitPush(projectPath, branch = 'main', remote = 'origin') {
|
|
321
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
322
|
+
const result = await gitOps.push(remote, branch);
|
|
323
|
+
return {
|
|
324
|
+
exitCode: result.success ? 0 : 1,
|
|
325
|
+
output: result.output,
|
|
326
|
+
error: result.error || ''
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Faz pull do repositório remoto - 100% auto-suficiente
|
|
331
|
+
*
|
|
332
|
+
* @param projectPath Caminho do projeto
|
|
333
|
+
* @param branch Branch para fazer pull
|
|
334
|
+
* @param remote Remote (padrão: origin)
|
|
335
|
+
* @returns Promise<TerminalResult>
|
|
336
|
+
*/
|
|
337
|
+
async function gitPull(projectPath, branch = 'main', remote = 'origin') {
|
|
338
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
339
|
+
const result = await gitOps.pull(remote, branch);
|
|
340
|
+
return {
|
|
341
|
+
exitCode: result.success ? 0 : 1,
|
|
342
|
+
output: result.output,
|
|
343
|
+
error: result.error || ''
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
346
|
//# sourceMappingURL=terminal-controller.js.map
|