@andrebuzeli/git-mcp 2.28.0 → 2.28.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/client.d.ts +306 -306
  2. package/dist/client.js +298 -298
  3. package/dist/config.d.ts +310 -310
  4. package/dist/config.js +392 -392
  5. package/dist/index.d.ts +22 -22
  6. package/dist/index.js +89 -89
  7. package/dist/providers/base-provider.d.ts +160 -160
  8. package/dist/providers/base-provider.js +274 -274
  9. package/dist/providers/error-handler.d.ts +50 -50
  10. package/dist/providers/error-handler.js +175 -175
  11. package/dist/providers/gitea-provider.d.ts +97 -97
  12. package/dist/providers/gitea-provider.d.ts.map +1 -1
  13. package/dist/providers/gitea-provider.js +1015 -1001
  14. package/dist/providers/gitea-provider.js.map +1 -1
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.d.ts.map +1 -1
  17. package/dist/providers/github-provider.js +1248 -1234
  18. package/dist/providers/github-provider.js.map +1 -1
  19. package/dist/providers/index.d.ts +12 -12
  20. package/dist/providers/index.js +40 -40
  21. package/dist/providers/provider-factory.d.ts +74 -74
  22. package/dist/providers/provider-factory.d.ts.map +1 -1
  23. package/dist/providers/provider-factory.js +318 -311
  24. package/dist/providers/provider-factory.js.map +1 -1
  25. package/dist/providers/types.d.ts +318 -318
  26. package/dist/providers/types.js +6 -6
  27. package/dist/server.d.ts +76 -76
  28. package/dist/server.js +306 -306
  29. package/dist/tools/git-archive.d.ts +165 -165
  30. package/dist/tools/git-archive.js +233 -233
  31. package/dist/tools/git-branches.d.ts +430 -430
  32. package/dist/tools/git-branches.js +627 -627
  33. package/dist/tools/git-commits.d.ts +485 -485
  34. package/dist/tools/git-commits.js +735 -735
  35. package/dist/tools/git-commits.js.map +1 -1
  36. package/dist/tools/git-config.d.ts +140 -140
  37. package/dist/tools/git-config.js +268 -268
  38. package/dist/tools/git-files.d.ts +486 -486
  39. package/dist/tools/git-files.js +607 -607
  40. package/dist/tools/git-files.js.map +1 -1
  41. package/dist/tools/git-issues.d.ts +574 -571
  42. package/dist/tools/git-issues.d.ts.map +1 -1
  43. package/dist/tools/git-issues.js +741 -740
  44. package/dist/tools/git-issues.js.map +1 -1
  45. package/dist/tools/git-pulls.d.ts +697 -694
  46. package/dist/tools/git-pulls.d.ts.map +1 -1
  47. package/dist/tools/git-pulls.js +733 -732
  48. package/dist/tools/git-pulls.js.map +1 -1
  49. package/dist/tools/git-releases.d.ts +490 -487
  50. package/dist/tools/git-releases.d.ts.map +1 -1
  51. package/dist/tools/git-releases.js +558 -557
  52. package/dist/tools/git-releases.js.map +1 -1
  53. package/dist/tools/git-remote.d.ts +138 -138
  54. package/dist/tools/git-remote.js +274 -274
  55. package/dist/tools/git-repositories.d.ts +483 -483
  56. package/dist/tools/git-repositories.js +640 -640
  57. package/dist/tools/git-repositories.js.map +1 -1
  58. package/dist/tools/git-reset.d.ts +130 -130
  59. package/dist/tools/git-reset.js +223 -223
  60. package/dist/tools/git-revert.d.ts +149 -149
  61. package/dist/tools/git-revert.js +198 -198
  62. package/dist/tools/git-stash.d.ts +140 -140
  63. package/dist/tools/git-stash.js +269 -269
  64. package/dist/tools/git-sync.d.ts +178 -178
  65. package/dist/tools/git-sync.js +312 -312
  66. package/dist/tools/git-tags.d.ts +414 -411
  67. package/dist/tools/git-tags.d.ts.map +1 -1
  68. package/dist/tools/git-tags.js +486 -485
  69. package/dist/tools/git-tags.js.map +1 -1
  70. package/dist/tools/git-webhooks.d.ts +473 -470
  71. package/dist/tools/git-webhooks.d.ts.map +1 -1
  72. package/dist/tools/git-webhooks.js +544 -543
  73. package/dist/tools/git-webhooks.js.map +1 -1
  74. package/dist/utils/terminal-controller.d.ts +80 -80
  75. package/dist/utils/terminal-controller.js +345 -345
  76. package/dist/utils/user-detection.d.ts +24 -24
  77. package/dist/utils/user-detection.js +53 -53
  78. package/package.json +2 -2
  79. package/dist/tools/gh-actions.d.ts +0 -253
  80. package/dist/tools/gh-actions.d.ts.map +0 -1
  81. package/dist/tools/gh-actions.js +0 -390
  82. package/dist/tools/gh-actions.js.map +0 -1
  83. package/dist/tools/gh-analytics.d.ts +0 -264
  84. package/dist/tools/gh-analytics.d.ts.map +0 -1
  85. package/dist/tools/gh-analytics.js +0 -402
  86. package/dist/tools/gh-analytics.js.map +0 -1
  87. package/dist/tools/gh-code-review.d.ts +0 -305
  88. package/dist/tools/gh-code-review.d.ts.map +0 -1
  89. package/dist/tools/gh-code-review.js +0 -513
  90. package/dist/tools/gh-code-review.js.map +0 -1
  91. package/dist/tools/gh-codespaces.d.ts +0 -139
  92. package/dist/tools/gh-codespaces.d.ts.map +0 -1
  93. package/dist/tools/gh-codespaces.js +0 -283
  94. package/dist/tools/gh-codespaces.js.map +0 -1
  95. package/dist/tools/gh-deployments.d.ts +0 -301
  96. package/dist/tools/gh-deployments.d.ts.map +0 -1
  97. package/dist/tools/gh-deployments.js +0 -368
  98. package/dist/tools/gh-deployments.js.map +0 -1
  99. package/dist/tools/gh-gists.d.ts +0 -175
  100. package/dist/tools/gh-gists.d.ts.map +0 -1
  101. package/dist/tools/gh-gists.js +0 -322
  102. package/dist/tools/gh-gists.js.map +0 -1
  103. package/dist/tools/gh-projects.d.ts +0 -206
  104. package/dist/tools/gh-projects.d.ts.map +0 -1
  105. package/dist/tools/gh-projects.js +0 -359
  106. package/dist/tools/gh-projects.js.map +0 -1
  107. package/dist/tools/gh-security.d.ts +0 -275
  108. package/dist/tools/gh-security.d.ts.map +0 -1
  109. package/dist/tools/gh-security.js +0 -396
  110. package/dist/tools/gh-security.js.map +0 -1
  111. package/dist/tools/gh-sync.d.ts +0 -214
  112. package/dist/tools/gh-sync.d.ts.map +0 -1
  113. package/dist/tools/gh-sync.js +0 -379
  114. package/dist/tools/gh-sync.js.map +0 -1
  115. package/dist/tools/gh-workflows.d.ts +0 -291
  116. package/dist/tools/gh-workflows.d.ts.map +0 -1
  117. package/dist/tools/gh-workflows.js +0 -433
  118. package/dist/tools/gh-workflows.js.map +0 -1
  119. package/dist/tools/git-bundle.d.ts +0 -172
  120. package/dist/tools/git-bundle.d.ts.map +0 -1
  121. package/dist/tools/git-bundle.js +0 -242
  122. package/dist/tools/git-bundle.js.map +0 -1
  123. package/dist/tools/git-cherry-pick.d.ts +0 -159
  124. package/dist/tools/git-cherry-pick.d.ts.map +0 -1
  125. package/dist/tools/git-cherry-pick.js +0 -225
  126. package/dist/tools/git-cherry-pick.js.map +0 -1
  127. package/dist/tools/git-rebase.d.ts +0 -138
  128. package/dist/tools/git-rebase.d.ts.map +0 -1
  129. package/dist/tools/git-rebase.js +0 -214
  130. package/dist/tools/git-rebase.js.map +0 -1
  131. package/dist/tools/git-submodule.d.ts +0 -153
  132. package/dist/tools/git-submodule.d.ts.map +0 -1
  133. package/dist/tools/git-submodule.js +0 -290
  134. package/dist/tools/git-submodule.js.map +0 -1
  135. package/dist/tools/git-worktree.d.ts +0 -160
  136. package/dist/tools/git-worktree.d.ts.map +0 -1
  137. package/dist/tools/git-worktree.js +0 -270
  138. package/dist/tools/git-worktree.js.map +0 -1
  139. package/dist/tools/repositories.d.ts +0 -406
  140. package/dist/tools/repositories.d.ts.map +0 -1
  141. package/dist/tools/repositories.js +0 -570
  142. package/dist/tools/repositories.js.map +0 -1
  143. package/dist/tools/users.d.ts +0 -373
  144. package/dist/tools/users.d.ts.map +0 -1
  145. package/dist/tools/users.js +0 -500
  146. package/dist/tools/users.js.map +0 -1
  147. package/dist/tools/validator.d.ts +0 -171
  148. package/dist/tools/validator.d.ts.map +0 -1
  149. package/dist/tools/validator.js +0 -195
  150. package/dist/tools/validator.js.map +0 -1
  151. package/dist/tools/version-control.d.ts +0 -137
  152. package/dist/tools/version-control.d.ts.map +0 -1
  153. package/dist/tools/version-control.js +0 -165
  154. package/dist/tools/version-control.js.map +0 -1
@@ -1,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