@andrebuzeli/git-mcp 2.48.0 → 3.0.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/README.md +356 -329
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +55 -78
- package/dist/server.js.map +1 -1
- package/dist/tools/git-commits.d.ts +2 -2
- package/dist/tools/git-config.d.ts +2 -2
- package/dist/tools/git-files.d.ts +2 -2
- package/dist/tools/git-issues.d.ts +6 -6
- package/dist/tools/git-packages.d.ts +2 -2
- package/dist/tools/git-projects.d.ts +142 -57
- package/dist/tools/git-projects.d.ts.map +1 -1
- package/dist/tools/git-projects.js +281 -283
- package/dist/tools/git-projects.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +8 -8
- package/dist/tools/git-releases.d.ts +2 -2
- package/dist/tools/git-remote.d.ts +2 -2
- package/dist/tools/git-repositories.d.ts +4 -4
- package/dist/tools/git-sync.d.ts +4 -4
- package/dist/tools/git-tags.d.ts +2 -2
- package/dist/tools/git-undo.d.ts +268 -0
- package/dist/tools/git-undo.d.ts.map +1 -0
- package/dist/tools/git-undo.js +516 -0
- package/dist/tools/git-undo.js.map +1 -0
- package/dist/tools/git-update-project.d.ts +4 -159
- package/dist/tools/git-update-project.d.ts.map +1 -1
- package/dist/tools/git-update-project.js +7 -349
- package/dist/tools/git-update-project.js.map +1 -1
- package/dist/tools/git-versioning.d.ts +286 -0
- package/dist/tools/git-versioning.d.ts.map +1 -0
- package/dist/tools/git-versioning.js +483 -0
- package/dist/tools/git-versioning.js.map +1 -0
- package/dist/tools/git-workflow.d.ts +230 -252
- package/dist/tools/git-workflow.d.ts.map +1 -1
- package/dist/tools/git-workflow.js +452 -479
- package/dist/tools/git-workflow.js.map +1 -1
- package/package.json +4 -13
- 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
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gitUndoTool = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const git_operations_js_1 = require("../utils/git-operations.js");
|
|
6
|
+
/**
|
|
7
|
+
* Tool: git-undo
|
|
8
|
+
*
|
|
9
|
+
* FERRAMENTA UNIFICADA PARA UNDO/REDO OPERATIONS
|
|
10
|
+
* Combina as funcionalidades de:
|
|
11
|
+
* - git-stash (save/apply changes)
|
|
12
|
+
* - git-reset (undo commits)
|
|
13
|
+
* - git-revert (safe undo)
|
|
14
|
+
*
|
|
15
|
+
* DESIGNED FOR: Programador individual autônomo
|
|
16
|
+
* PHILOSOPHY: Undo seguro e inteligente com confirmações
|
|
17
|
+
*/
|
|
18
|
+
const GitUndoInputSchema = zod_1.z.discriminatedUnion('action', [
|
|
19
|
+
// STASH OPERATIONS
|
|
20
|
+
zod_1.z.object({
|
|
21
|
+
action: zod_1.z.literal('stash-save'),
|
|
22
|
+
projectPath: zod_1.z.string(),
|
|
23
|
+
message: zod_1.z.string().optional(),
|
|
24
|
+
includeUntracked: zod_1.z.boolean().optional().default(false)
|
|
25
|
+
}),
|
|
26
|
+
zod_1.z.object({
|
|
27
|
+
action: zod_1.z.literal('stash-list'),
|
|
28
|
+
projectPath: zod_1.z.string()
|
|
29
|
+
}),
|
|
30
|
+
zod_1.z.object({
|
|
31
|
+
action: zod_1.z.literal('stash-apply'),
|
|
32
|
+
projectPath: zod_1.z.string(),
|
|
33
|
+
index: zod_1.z.number().optional().default(0)
|
|
34
|
+
}),
|
|
35
|
+
zod_1.z.object({
|
|
36
|
+
action: zod_1.z.literal('stash-drop'),
|
|
37
|
+
projectPath: zod_1.z.string(),
|
|
38
|
+
index: zod_1.z.number().optional().default(0)
|
|
39
|
+
}),
|
|
40
|
+
zod_1.z.object({
|
|
41
|
+
action: zod_1.z.literal('stash-clear'),
|
|
42
|
+
projectPath: zod_1.z.string(),
|
|
43
|
+
confirm: zod_1.z.boolean().optional().default(false)
|
|
44
|
+
}),
|
|
45
|
+
// RESET OPERATIONS
|
|
46
|
+
zod_1.z.object({
|
|
47
|
+
action: zod_1.z.literal('reset-soft'),
|
|
48
|
+
projectPath: zod_1.z.string(),
|
|
49
|
+
to: zod_1.z.string().optional().default('HEAD~1'),
|
|
50
|
+
confirm: zod_1.z.boolean().optional().default(false)
|
|
51
|
+
}),
|
|
52
|
+
zod_1.z.object({
|
|
53
|
+
action: zod_1.z.literal('reset-mixed'),
|
|
54
|
+
projectPath: zod_1.z.string(),
|
|
55
|
+
to: zod_1.z.string().optional().default('HEAD~1'),
|
|
56
|
+
confirm: zod_1.z.boolean().optional().default(false)
|
|
57
|
+
}),
|
|
58
|
+
zod_1.z.object({
|
|
59
|
+
action: zod_1.z.literal('reset-hard'),
|
|
60
|
+
projectPath: zod_1.z.string(),
|
|
61
|
+
to: zod_1.z.string().optional().default('HEAD~1'),
|
|
62
|
+
confirm: zod_1.z.boolean().optional().default(false)
|
|
63
|
+
}),
|
|
64
|
+
// REVERT OPERATIONS
|
|
65
|
+
zod_1.z.object({
|
|
66
|
+
action: zod_1.z.literal('revert-commit'),
|
|
67
|
+
projectPath: zod_1.z.string(),
|
|
68
|
+
commit: zod_1.z.string(),
|
|
69
|
+
message: zod_1.z.string().optional()
|
|
70
|
+
}),
|
|
71
|
+
// SMART UNDO
|
|
72
|
+
zod_1.z.object({
|
|
73
|
+
action: zod_1.z.literal('undo-last'),
|
|
74
|
+
projectPath: zod_1.z.string(),
|
|
75
|
+
confirm: zod_1.z.boolean().optional().default(false)
|
|
76
|
+
}),
|
|
77
|
+
zod_1.z.object({
|
|
78
|
+
action: zod_1.z.literal('redo-last'),
|
|
79
|
+
projectPath: zod_1.z.string()
|
|
80
|
+
})
|
|
81
|
+
]);
|
|
82
|
+
const GitUndoResultSchema = zod_1.z.object({
|
|
83
|
+
success: zod_1.z.boolean(),
|
|
84
|
+
action: zod_1.z.string(),
|
|
85
|
+
message: zod_1.z.string(),
|
|
86
|
+
data: zod_1.z.any().optional(),
|
|
87
|
+
error: zod_1.z.string().optional(),
|
|
88
|
+
recoverable: zod_1.z.boolean().optional(),
|
|
89
|
+
suggestion: zod_1.z.string().optional(),
|
|
90
|
+
warning: zod_1.z.string().optional()
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* Smart Undo Manager - Gerencia operações de undo inteligentes
|
|
94
|
+
*/
|
|
95
|
+
class UndoManager {
|
|
96
|
+
static async getLastCommitInfo(projectPath) {
|
|
97
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
98
|
+
const logResult = await gitOps.log({ maxCount: 1, oneline: true });
|
|
99
|
+
if (!logResult.success || !logResult.output.trim()) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const [hash, ...messageParts] = logResult.output.trim().split(' ');
|
|
103
|
+
const message = messageParts.join(' ');
|
|
104
|
+
return { hash, message };
|
|
105
|
+
}
|
|
106
|
+
static async canRedo(projectPath) {
|
|
107
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
108
|
+
const stashResult = await gitOps.stash('list');
|
|
109
|
+
return stashResult.success && stashResult.output.trim().length > 0;
|
|
110
|
+
}
|
|
111
|
+
static async getStashCount(projectPath) {
|
|
112
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
113
|
+
const stashResult = await gitOps.stash('list');
|
|
114
|
+
if (!stashResult.success)
|
|
115
|
+
return 0;
|
|
116
|
+
const lines = stashResult.output.trim().split('\n').filter(line => line.trim());
|
|
117
|
+
return lines.length;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Enhanced Error Handler for Undo Operations
|
|
122
|
+
*/
|
|
123
|
+
class UndoErrorHandler {
|
|
124
|
+
static handleError(error, context) {
|
|
125
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
126
|
+
const errorPatterns = [
|
|
127
|
+
{
|
|
128
|
+
pattern: /stash.*empty/i,
|
|
129
|
+
suggestion: "No stashes available to apply",
|
|
130
|
+
recoverable: true
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
pattern: /cannot reset/i,
|
|
134
|
+
suggestion: "Check if you have commits to reset",
|
|
135
|
+
recoverable: true
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
pattern: /commit.*not found/i,
|
|
139
|
+
suggestion: "Verify the commit hash exists",
|
|
140
|
+
recoverable: true
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
pattern: /cannot revert/i,
|
|
144
|
+
suggestion: "Some commits may not be revertable",
|
|
145
|
+
recoverable: false
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
pattern: /working tree.*clean/i,
|
|
149
|
+
suggestion: "No changes to stash",
|
|
150
|
+
recoverable: true
|
|
151
|
+
}
|
|
152
|
+
];
|
|
153
|
+
const matchedPattern = errorPatterns.find(p => p.pattern.test(errorMessage));
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
action: context,
|
|
157
|
+
message: `Error in ${context}: ${errorMessage}`,
|
|
158
|
+
error: errorMessage,
|
|
159
|
+
recoverable: matchedPattern?.recoverable || false,
|
|
160
|
+
suggestion: matchedPattern?.suggestion
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.gitUndoTool = {
|
|
165
|
+
name: 'git-undo',
|
|
166
|
+
description: `↩️ UNDO/REDO INTELIGENTE
|
|
167
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
168
|
+
📦 STASH (Salvar temporariamente):
|
|
169
|
+
• stash-save: Salvar mudanças atuais
|
|
170
|
+
• stash-list: Listar stashes salvos
|
|
171
|
+
• stash-apply: Aplicar stash salvo
|
|
172
|
+
• stash-drop: Remover stash específico
|
|
173
|
+
• stash-clear: Limpar todos os stashes
|
|
174
|
+
|
|
175
|
+
🔄 RESET (Desfazer commits):
|
|
176
|
+
• reset-soft: Desfazer commit mantendo mudanças
|
|
177
|
+
• reset-mixed: Desfazer commit removendo do stage
|
|
178
|
+
• reset-hard: Desfazer commit perdendo mudanças
|
|
179
|
+
|
|
180
|
+
🔀 REVERT (Desfazer seguro):
|
|
181
|
+
• revert-commit: Reverter commit específico
|
|
182
|
+
|
|
183
|
+
🧠 SMART OPERATIONS:
|
|
184
|
+
• undo-last: Desfazer última operação
|
|
185
|
+
• redo-last: Refazer última operação desfeita
|
|
186
|
+
|
|
187
|
+
✨ DIFERENCIAIS:
|
|
188
|
+
• Confirmações para operações destrutivas
|
|
189
|
+
• Sugestões inteligentes de recovery
|
|
190
|
+
• Preview de operações perigosas
|
|
191
|
+
• Undo/Redo inteligente baseado em contexto`,
|
|
192
|
+
inputSchema: {
|
|
193
|
+
type: 'object',
|
|
194
|
+
properties: {
|
|
195
|
+
action: {
|
|
196
|
+
type: 'string',
|
|
197
|
+
enum: ['stash-save', 'stash-list', 'stash-apply', 'stash-drop', 'stash-clear', 'reset-soft', 'reset-mixed', 'reset-hard', 'revert-commit', 'undo-last', 'redo-last'],
|
|
198
|
+
description: 'Undo action to perform'
|
|
199
|
+
},
|
|
200
|
+
projectPath: { type: 'string', description: 'Local project path' },
|
|
201
|
+
message: { type: 'string', description: 'Stash or commit message' },
|
|
202
|
+
includeUntracked: { type: 'boolean', description: 'Include untracked files', default: false },
|
|
203
|
+
index: { type: 'number', description: 'Stash index', default: 0 },
|
|
204
|
+
to: { type: 'string', description: 'Reset target', default: 'HEAD~1' },
|
|
205
|
+
commit: { type: 'string', description: 'Commit to revert' },
|
|
206
|
+
confirm: { type: 'boolean', description: 'Confirm destructive operation', default: false }
|
|
207
|
+
},
|
|
208
|
+
required: ['action', 'projectPath']
|
|
209
|
+
},
|
|
210
|
+
async handler(input) {
|
|
211
|
+
try {
|
|
212
|
+
const validatedInput = GitUndoInputSchema.parse(input);
|
|
213
|
+
switch (validatedInput.action) {
|
|
214
|
+
case 'stash-save':
|
|
215
|
+
return await this.handleStashSave(validatedInput);
|
|
216
|
+
case 'stash-list':
|
|
217
|
+
return await this.handleStashList(validatedInput);
|
|
218
|
+
case 'stash-apply':
|
|
219
|
+
return await this.handleStashApply(validatedInput);
|
|
220
|
+
case 'stash-drop':
|
|
221
|
+
return await this.handleStashDrop(validatedInput);
|
|
222
|
+
case 'stash-clear':
|
|
223
|
+
return await this.handleStashClear(validatedInput);
|
|
224
|
+
case 'reset-soft':
|
|
225
|
+
return await this.handleResetSoft(validatedInput);
|
|
226
|
+
case 'reset-mixed':
|
|
227
|
+
return await this.handleResetMixed(validatedInput);
|
|
228
|
+
case 'reset-hard':
|
|
229
|
+
return await this.handleResetHard(validatedInput);
|
|
230
|
+
case 'revert-commit':
|
|
231
|
+
return await this.handleRevertCommit(validatedInput);
|
|
232
|
+
case 'undo-last':
|
|
233
|
+
return await this.handleUndoLast(validatedInput);
|
|
234
|
+
case 'redo-last':
|
|
235
|
+
return await this.handleRedoLast(validatedInput);
|
|
236
|
+
default:
|
|
237
|
+
throw new Error(`Action '${validatedInput.action}' not supported`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
return UndoErrorHandler.handleError(error, `undo.${input.action}`);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
async handleStashSave(params) {
|
|
245
|
+
const { projectPath, message, includeUntracked } = params;
|
|
246
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
247
|
+
try {
|
|
248
|
+
const stashOptions = {};
|
|
249
|
+
if (message)
|
|
250
|
+
stashOptions.message = message;
|
|
251
|
+
if (includeUntracked)
|
|
252
|
+
stashOptions.includeUntracked = true;
|
|
253
|
+
const stashResult = await gitOps.stash('push', stashOptions);
|
|
254
|
+
if (!stashResult.success) {
|
|
255
|
+
throw new Error(`Stash failed: ${stashResult.error}`);
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
success: true,
|
|
259
|
+
action: 'stash-save',
|
|
260
|
+
message: 'Changes stashed successfully',
|
|
261
|
+
data: { message, includeUntracked }
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
return UndoErrorHandler.handleError(error, 'stash-save');
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
async handleStashList(params) {
|
|
269
|
+
const { projectPath } = params;
|
|
270
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
271
|
+
try {
|
|
272
|
+
const stashResult = await gitOps.stash('list');
|
|
273
|
+
if (!stashResult.success) {
|
|
274
|
+
throw new Error(`Stash list failed: ${stashResult.error}`);
|
|
275
|
+
}
|
|
276
|
+
const stashes = stashResult.output.trim().split('\n').filter(line => line.trim());
|
|
277
|
+
return {
|
|
278
|
+
success: true,
|
|
279
|
+
action: 'stash-list',
|
|
280
|
+
message: `Found ${stashes.length} stashes`,
|
|
281
|
+
data: { stashes, count: stashes.length }
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
return UndoErrorHandler.handleError(error, 'stash-list');
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
async handleStashApply(params) {
|
|
289
|
+
const { projectPath, index } = params;
|
|
290
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
291
|
+
try {
|
|
292
|
+
const stashResult = await gitOps.stash('apply', { index });
|
|
293
|
+
if (!stashResult.success) {
|
|
294
|
+
throw new Error(`Stash apply failed: ${stashResult.error}`);
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
success: true,
|
|
298
|
+
action: 'stash-apply',
|
|
299
|
+
message: 'Stash applied successfully',
|
|
300
|
+
data: { index }
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
return UndoErrorHandler.handleError(error, 'stash-apply');
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
async handleStashDrop(params) {
|
|
308
|
+
const { projectPath, index } = params;
|
|
309
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
310
|
+
try {
|
|
311
|
+
const stashResult = await gitOps.stash('drop', { index });
|
|
312
|
+
if (!stashResult.success) {
|
|
313
|
+
throw new Error(`Stash drop failed: ${stashResult.error}`);
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
success: true,
|
|
317
|
+
action: 'stash-drop',
|
|
318
|
+
message: 'Stash dropped successfully',
|
|
319
|
+
data: { index }
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
return UndoErrorHandler.handleError(error, 'stash-drop');
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
async handleStashClear(params) {
|
|
327
|
+
const { projectPath, confirm } = params;
|
|
328
|
+
if (!confirm) {
|
|
329
|
+
return {
|
|
330
|
+
success: false,
|
|
331
|
+
action: 'stash-clear',
|
|
332
|
+
message: 'Stash clear requires confirmation',
|
|
333
|
+
suggestion: 'Set confirm=true to clear all stashes',
|
|
334
|
+
recoverable: true
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
338
|
+
try {
|
|
339
|
+
const stashResult = await gitOps.stash('clear');
|
|
340
|
+
if (!stashResult.success) {
|
|
341
|
+
throw new Error(`Stash clear failed: ${stashResult.error}`);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
success: true,
|
|
345
|
+
action: 'stash-clear',
|
|
346
|
+
message: 'All stashes cleared successfully',
|
|
347
|
+
warning: 'This operation cannot be undone'
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
return UndoErrorHandler.handleError(error, 'stash-clear');
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
async handleResetSoft(params) {
|
|
355
|
+
const { projectPath, to } = params;
|
|
356
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
357
|
+
try {
|
|
358
|
+
const resetResult = await gitOps.reset(to, { mode: 'soft' });
|
|
359
|
+
if (!resetResult.success) {
|
|
360
|
+
throw new Error(`Soft reset failed: ${resetResult.error}`);
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
success: true,
|
|
364
|
+
action: 'reset-soft',
|
|
365
|
+
message: 'Soft reset completed successfully',
|
|
366
|
+
data: { target: to, mode: 'soft' },
|
|
367
|
+
warning: 'Changes are still in staging area'
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
return UndoErrorHandler.handleError(error, 'reset-soft');
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
async handleResetMixed(params) {
|
|
375
|
+
const { projectPath, to, confirm } = params;
|
|
376
|
+
if (!confirm) {
|
|
377
|
+
return {
|
|
378
|
+
success: false,
|
|
379
|
+
action: 'reset-mixed',
|
|
380
|
+
message: 'Mixed reset requires confirmation',
|
|
381
|
+
suggestion: 'Set confirm=true to proceed with mixed reset',
|
|
382
|
+
recoverable: true
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
386
|
+
try {
|
|
387
|
+
const resetResult = await gitOps.reset(to, { mode: 'mixed' });
|
|
388
|
+
if (!resetResult.success) {
|
|
389
|
+
throw new Error(`Mixed reset failed: ${resetResult.error}`);
|
|
390
|
+
}
|
|
391
|
+
return {
|
|
392
|
+
success: true,
|
|
393
|
+
action: 'reset-mixed',
|
|
394
|
+
message: 'Mixed reset completed successfully',
|
|
395
|
+
data: { target: to, mode: 'mixed' },
|
|
396
|
+
warning: 'Staged changes have been unstaged'
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
return UndoErrorHandler.handleError(error, 'reset-mixed');
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
async handleResetHard(params) {
|
|
404
|
+
const { projectPath, to, confirm } = params;
|
|
405
|
+
if (!confirm) {
|
|
406
|
+
return {
|
|
407
|
+
success: false,
|
|
408
|
+
action: 'reset-hard',
|
|
409
|
+
message: 'Hard reset requires confirmation - THIS WILL LOSE CHANGES',
|
|
410
|
+
suggestion: 'Set confirm=true to proceed with hard reset',
|
|
411
|
+
recoverable: false
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
415
|
+
try {
|
|
416
|
+
const resetResult = await gitOps.reset(to, { mode: 'hard' });
|
|
417
|
+
if (!resetResult.success) {
|
|
418
|
+
throw new Error(`Hard reset failed: ${resetResult.error}`);
|
|
419
|
+
}
|
|
420
|
+
return {
|
|
421
|
+
success: true,
|
|
422
|
+
action: 'reset-hard',
|
|
423
|
+
message: 'Hard reset completed successfully',
|
|
424
|
+
data: { target: to, mode: 'hard' },
|
|
425
|
+
warning: 'Changes have been permanently lost'
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
return UndoErrorHandler.handleError(error, 'reset-hard');
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
async handleRevertCommit(params) {
|
|
433
|
+
const { projectPath, commit, message } = params;
|
|
434
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
435
|
+
try {
|
|
436
|
+
const revertOptions = {};
|
|
437
|
+
if (message)
|
|
438
|
+
revertOptions.message = message;
|
|
439
|
+
const revertResult = await gitOps.revert(commit, revertOptions);
|
|
440
|
+
if (!revertResult.success) {
|
|
441
|
+
throw new Error(`Revert failed: ${revertResult.error}`);
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
success: true,
|
|
445
|
+
action: 'revert-commit',
|
|
446
|
+
message: 'Commit reverted successfully',
|
|
447
|
+
data: { commit, message }
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
return UndoErrorHandler.handleError(error, 'revert-commit');
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
async handleUndoLast(params) {
|
|
455
|
+
const { projectPath, confirm } = params;
|
|
456
|
+
if (!confirm) {
|
|
457
|
+
const lastCommit = await UndoManager.getLastCommitInfo(projectPath);
|
|
458
|
+
return {
|
|
459
|
+
success: false,
|
|
460
|
+
action: 'undo-last',
|
|
461
|
+
message: 'Undo last requires confirmation',
|
|
462
|
+
data: { lastCommit },
|
|
463
|
+
suggestion: `Set confirm=true to undo commit: ${lastCommit?.message || 'unknown'}`,
|
|
464
|
+
recoverable: true
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
// Use mixed reset to undo last commit
|
|
468
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
469
|
+
try {
|
|
470
|
+
const resetResult = await gitOps.reset('HEAD~1', { mode: 'mixed' });
|
|
471
|
+
if (!resetResult.success) {
|
|
472
|
+
throw new Error(`Undo failed: ${resetResult.error}`);
|
|
473
|
+
}
|
|
474
|
+
return {
|
|
475
|
+
success: true,
|
|
476
|
+
action: 'undo-last',
|
|
477
|
+
message: 'Last commit undone successfully',
|
|
478
|
+
data: { mode: 'mixed', target: 'HEAD~1' },
|
|
479
|
+
warning: 'Changes from last commit are now unstaged'
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
catch (error) {
|
|
483
|
+
return UndoErrorHandler.handleError(error, 'undo-last');
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
async handleRedoLast(params) {
|
|
487
|
+
const { projectPath } = params;
|
|
488
|
+
const canRedo = await UndoManager.canRedo(projectPath);
|
|
489
|
+
if (!canRedo) {
|
|
490
|
+
return {
|
|
491
|
+
success: false,
|
|
492
|
+
action: 'redo-last',
|
|
493
|
+
message: 'No stashes available to redo',
|
|
494
|
+
suggestion: 'Save changes with stash-save first',
|
|
495
|
+
recoverable: true
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
const gitOps = new git_operations_js_1.GitOperations(projectPath);
|
|
499
|
+
try {
|
|
500
|
+
const stashResult = await gitOps.stash('pop');
|
|
501
|
+
if (!stashResult.success) {
|
|
502
|
+
throw new Error(`Redo failed: ${stashResult.error}`);
|
|
503
|
+
}
|
|
504
|
+
return {
|
|
505
|
+
success: true,
|
|
506
|
+
action: 'redo-last',
|
|
507
|
+
message: 'Last operation redone successfully',
|
|
508
|
+
data: { stashApplied: true }
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
catch (error) {
|
|
512
|
+
return UndoErrorHandler.handleError(error, 'redo-last');
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
//# sourceMappingURL=git-undo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-undo.js","sourceRoot":"","sources":["../../src/tools/git-undo.ts"],"names":[],"mappings":"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"}
|