@andrebuzeli/git-mcp 5.3.1 → 5.4.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/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +28 -1
- package/dist/config.js.map +1 -1
- package/dist/providers/provider-factory.d.ts +4 -0
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +15 -0
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/provider-operation-handler.d.ts +22 -0
- package/dist/providers/provider-operation-handler.d.ts.map +1 -1
- package/dist/providers/provider-operation-handler.js +74 -2
- package/dist/providers/provider-operation-handler.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/git-analytics.d.ts.map +1 -1
- package/dist/tools/git-analytics.js.map +1 -1
- package/dist/tools/git-branches.d.ts.map +1 -1
- package/dist/tools/git-branches.js +9 -2
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +9 -2
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +9 -2
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-monitor.d.ts.map +1 -1
- package/dist/tools/git-monitor.js.map +1 -1
- package/dist/tools/git-packages.d.ts.map +1 -1
- package/dist/tools/git-packages.js +9 -2
- package/dist/tools/git-packages.js.map +1 -1
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +9 -2
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-release.d.ts.map +1 -1
- package/dist/tools/git-release.js +9 -2
- package/dist/tools/git-release.js.map +1 -1
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-reset.d.ts.map +1 -1
- package/dist/tools/git-reset.js.map +1 -1
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +9 -2
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-update.d.ts.map +1 -1
- package/dist/tools/git-update.js.map +1 -1
- package/dist/tools/git-workflow.d.ts.map +1 -1
- package/dist/tools/git-workflow.js +9 -2
- package/dist/tools/git-workflow.js.map +1 -1
- package/dist/utils/data-merger.d.ts +49 -0
- package/dist/utils/data-merger.d.ts.map +1 -0
- package/dist/utils/data-merger.js +233 -0
- package/dist/utils/data-merger.js.map +1 -0
- package/dist/utils/repository-sync.d.ts +65 -0
- package/dist/utils/repository-sync.d.ts.map +1 -0
- package/dist/utils/repository-sync.js +322 -0
- package/dist/utils/repository-sync.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Repository Synchronizer
|
|
4
|
+
*
|
|
5
|
+
* Handles automatic synchronization of repositories between GitHub and Gitea providers.
|
|
6
|
+
* Ensures repositories exist on both providers and keeps settings in sync.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RepositorySynchronizer = void 0;
|
|
10
|
+
const github_provider_js_1 = require("../providers/github-provider.js");
|
|
11
|
+
const gitea_provider_js_1 = require("../providers/gitea-provider.js");
|
|
12
|
+
const git_command_executor_js_1 = require("./git-command-executor.js");
|
|
13
|
+
class RepositorySynchronizer {
|
|
14
|
+
githubProvider;
|
|
15
|
+
giteaProvider;
|
|
16
|
+
gitExecutor;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
if (config.github) {
|
|
19
|
+
this.githubProvider = new github_provider_js_1.GitHubProvider(config.github);
|
|
20
|
+
}
|
|
21
|
+
if (config.gitea) {
|
|
22
|
+
this.giteaProvider = new gitea_provider_js_1.GiteaProvider(config.gitea);
|
|
23
|
+
}
|
|
24
|
+
this.gitExecutor = new git_command_executor_js_1.GitCommandExecutor();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Ensures repository exists on both providers, creating if necessary
|
|
28
|
+
*/
|
|
29
|
+
async ensureRepositoryExists(repoName, owner) {
|
|
30
|
+
const result = {
|
|
31
|
+
success: true,
|
|
32
|
+
synchronized: true,
|
|
33
|
+
actions: [],
|
|
34
|
+
errors: []
|
|
35
|
+
};
|
|
36
|
+
try {
|
|
37
|
+
// Check if repositories exist on both providers
|
|
38
|
+
const githubExists = await this.checkRepositoryExists('github', repoName, owner);
|
|
39
|
+
const giteaExists = await this.checkRepositoryExists('gitea', repoName, owner);
|
|
40
|
+
result.actions.push(`Checked GitHub: ${githubExists ? 'exists' : 'missing'}`);
|
|
41
|
+
result.actions.push(`Checked Gitea: ${giteaExists ? 'exists' : 'missing'}`);
|
|
42
|
+
// Create missing repositories
|
|
43
|
+
if (!githubExists && this.githubProvider) {
|
|
44
|
+
const createResult = await this.createRepository('github', repoName, owner);
|
|
45
|
+
if (createResult.success) {
|
|
46
|
+
result.actions.push('Created repository on GitHub');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
result.errors.push(`Failed to create GitHub repository: ${createResult.error}`);
|
|
50
|
+
result.success = false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!giteaExists && this.giteaProvider) {
|
|
54
|
+
const createResult = await this.createRepository('gitea', repoName, owner);
|
|
55
|
+
if (createResult.success) {
|
|
56
|
+
result.actions.push('Created repository on Gitea');
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
result.errors.push(`Failed to create Gitea repository: ${createResult.error}`);
|
|
60
|
+
result.success = false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// If both existed or both were created successfully
|
|
64
|
+
result.synchronized = (githubExists || result.success) && (giteaExists || result.success);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
68
|
+
result.errors.push(`Repository sync failed: ${errorMessage}`);
|
|
69
|
+
result.success = false;
|
|
70
|
+
result.synchronized = false;
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Syncs repository settings (description, visibility, etc.) between providers
|
|
76
|
+
*/
|
|
77
|
+
async syncRepositorySettings(repoName, owner) {
|
|
78
|
+
const result = {
|
|
79
|
+
success: true,
|
|
80
|
+
synchronized: true,
|
|
81
|
+
actions: [],
|
|
82
|
+
errors: []
|
|
83
|
+
};
|
|
84
|
+
try {
|
|
85
|
+
// Get repository info from both providers
|
|
86
|
+
const githubInfo = await this.getRepositoryInfo('github', repoName, owner);
|
|
87
|
+
const giteaInfo = await this.getRepositoryInfo('gitea', repoName, owner);
|
|
88
|
+
if (!githubInfo.success || !giteaInfo.success) {
|
|
89
|
+
result.errors.push('Failed to get repository information from one or both providers');
|
|
90
|
+
result.success = false;
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
// Sync settings (use GitHub as source of truth for simplicity)
|
|
94
|
+
if (githubInfo.data && giteaInfo.data) {
|
|
95
|
+
const syncActions = await this.syncSettingsFromSource(githubInfo.data, giteaInfo.data, repoName, owner);
|
|
96
|
+
result.actions.push(...syncActions);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
101
|
+
result.errors.push(`Settings sync failed: ${errorMessage}`);
|
|
102
|
+
result.success = false;
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Configures local git remotes for both providers
|
|
108
|
+
*/
|
|
109
|
+
async syncRemotes(projectPath, repoName, owner) {
|
|
110
|
+
const result = {
|
|
111
|
+
success: true,
|
|
112
|
+
synchronized: true,
|
|
113
|
+
actions: [],
|
|
114
|
+
errors: []
|
|
115
|
+
};
|
|
116
|
+
try {
|
|
117
|
+
// Get repository URLs from both providers
|
|
118
|
+
const githubUrl = await this.getRepositoryUrl('github', repoName, owner);
|
|
119
|
+
const giteaUrl = await this.getRepositoryUrl('gitea', repoName, owner);
|
|
120
|
+
if (!githubUrl || !giteaUrl) {
|
|
121
|
+
result.errors.push('Failed to get repository URLs from providers');
|
|
122
|
+
result.success = false;
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
// Configure remotes
|
|
126
|
+
// First check if remote exists, then add or set-url accordingly
|
|
127
|
+
const originExists = await this.checkRemoteExists(projectPath, 'origin');
|
|
128
|
+
const originResult = originExists
|
|
129
|
+
? await this.gitExecutor.executeGitCommand('remote', ['set-url', 'origin', githubUrl], projectPath)
|
|
130
|
+
: await this.gitExecutor.executeGitCommand('remote', ['add', 'origin', githubUrl], projectPath);
|
|
131
|
+
if (originResult.success) {
|
|
132
|
+
result.actions.push('Configured origin remote (GitHub)');
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
result.errors.push('Failed to configure origin remote');
|
|
136
|
+
result.success = false;
|
|
137
|
+
}
|
|
138
|
+
const backupExists = await this.checkRemoteExists(projectPath, 'backup');
|
|
139
|
+
const backupResult = backupExists
|
|
140
|
+
? await this.gitExecutor.executeGitCommand('remote', ['set-url', 'backup', giteaUrl], projectPath)
|
|
141
|
+
: await this.gitExecutor.executeGitCommand('remote', ['add', 'backup', giteaUrl], projectPath);
|
|
142
|
+
if (backupResult.success) {
|
|
143
|
+
result.actions.push('Configured backup remote (Gitea)');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
result.errors.push('Failed to configure backup remote');
|
|
147
|
+
result.success = false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
152
|
+
result.errors.push(`Remote sync failed: ${errorMessage}`);
|
|
153
|
+
result.success = false;
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Attempts to recover from operation failures by creating missing resources
|
|
159
|
+
*/
|
|
160
|
+
async attemptRecovery(operation, params, failedProvider) {
|
|
161
|
+
try {
|
|
162
|
+
// For repository operations, try to create missing repository
|
|
163
|
+
if (operation.includes('repo-') && params.repo && params.owner) {
|
|
164
|
+
const exists = await this.checkRepositoryExists(failedProvider, params.repo, params.owner);
|
|
165
|
+
if (!exists) {
|
|
166
|
+
const createResult = await this.createRepository(failedProvider, params.repo, params.owner);
|
|
167
|
+
return createResult.success;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Checks if repository exists on specified provider
|
|
178
|
+
*/
|
|
179
|
+
async checkRepositoryExists(provider, repoName, owner) {
|
|
180
|
+
try {
|
|
181
|
+
const providerInstance = provider === 'github' ? this.githubProvider : this.giteaProvider;
|
|
182
|
+
if (!providerInstance)
|
|
183
|
+
return false;
|
|
184
|
+
const result = await providerInstance.executeOperation(`repo-get`, { owner, repo: repoName });
|
|
185
|
+
return result.success;
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Creates repository on specified provider
|
|
193
|
+
*/
|
|
194
|
+
async createRepository(provider, repoName, owner) {
|
|
195
|
+
try {
|
|
196
|
+
const providerInstance = provider === 'github' ? this.githubProvider : this.giteaProvider;
|
|
197
|
+
if (!providerInstance) {
|
|
198
|
+
return { success: false, error: `${provider} provider not configured` };
|
|
199
|
+
}
|
|
200
|
+
const result = await providerInstance.executeOperation(`repo-create`, {
|
|
201
|
+
name: repoName,
|
|
202
|
+
private: false, // Default to public for sync
|
|
203
|
+
description: `Repository synchronized from ${provider === 'github' ? 'GitHub' : 'Gitea'}`
|
|
204
|
+
});
|
|
205
|
+
return { success: result.success, error: result.success ? undefined : result.error?.message };
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
209
|
+
return { success: false, error: errorMessage };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Gets repository information from specified provider
|
|
214
|
+
*/
|
|
215
|
+
async getRepositoryInfo(provider, repoName, owner) {
|
|
216
|
+
try {
|
|
217
|
+
const providerInstance = provider === 'github' ? this.githubProvider : this.giteaProvider;
|
|
218
|
+
if (!providerInstance)
|
|
219
|
+
return { success: false };
|
|
220
|
+
const result = await providerInstance.executeOperation(`repo-get`, { owner, repo: repoName });
|
|
221
|
+
if (result.success) {
|
|
222
|
+
return { success: true, data: result.data };
|
|
223
|
+
}
|
|
224
|
+
return { success: false };
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
return { success: false };
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Gets repository clone URL from specified provider
|
|
232
|
+
*/
|
|
233
|
+
async getRepositoryUrl(provider, repoName, owner) {
|
|
234
|
+
try {
|
|
235
|
+
const providerInstance = provider === 'github' ? this.githubProvider : this.giteaProvider;
|
|
236
|
+
if (!providerInstance)
|
|
237
|
+
return null;
|
|
238
|
+
const result = await providerInstance.executeOperation(`repo-get`, { owner, repo: repoName });
|
|
239
|
+
if (result.success && result.data) {
|
|
240
|
+
// Return clone URL based on provider
|
|
241
|
+
if (provider === 'github') {
|
|
242
|
+
return `https://github.com/${owner}/${repoName}.git`;
|
|
243
|
+
}
|
|
244
|
+
else if (provider === 'gitea' && this.giteaProvider) {
|
|
245
|
+
const config = this.giteaProvider['config']; // Access private config
|
|
246
|
+
return `${config.url}/${owner}/${repoName}.git`;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Syncs repository settings from source to target
|
|
257
|
+
*/
|
|
258
|
+
async syncSettingsFromSource(sourceData, targetData, repoName, owner) {
|
|
259
|
+
const actions = [];
|
|
260
|
+
try {
|
|
261
|
+
// Sync description
|
|
262
|
+
if (sourceData.description !== targetData.description) {
|
|
263
|
+
const updateResult = await this.updateRepositorySettings('gitea', repoName, owner, {
|
|
264
|
+
description: sourceData.description
|
|
265
|
+
});
|
|
266
|
+
if (updateResult) {
|
|
267
|
+
actions.push('Synced repository description');
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Sync visibility (private/public)
|
|
271
|
+
if (sourceData.private !== targetData.private) {
|
|
272
|
+
const updateResult = await this.updateRepositorySettings('gitea', repoName, owner, {
|
|
273
|
+
private: sourceData.private
|
|
274
|
+
});
|
|
275
|
+
if (updateResult) {
|
|
276
|
+
actions.push(`Synced repository visibility to ${sourceData.private ? 'private' : 'public'}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
actions.push('Failed to sync some repository settings');
|
|
282
|
+
}
|
|
283
|
+
return actions;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Updates repository settings on specified provider
|
|
287
|
+
*/
|
|
288
|
+
async updateRepositorySettings(provider, repoName, owner, settings) {
|
|
289
|
+
try {
|
|
290
|
+
const providerInstance = provider === 'github' ? this.githubProvider : this.giteaProvider;
|
|
291
|
+
if (!providerInstance)
|
|
292
|
+
return false;
|
|
293
|
+
const result = await providerInstance.executeOperation(`repo-update`, {
|
|
294
|
+
owner,
|
|
295
|
+
repo: repoName,
|
|
296
|
+
...settings
|
|
297
|
+
});
|
|
298
|
+
return result.success;
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Check if a remote exists in the repository
|
|
306
|
+
*/
|
|
307
|
+
async checkRemoteExists(projectPath, remoteName) {
|
|
308
|
+
try {
|
|
309
|
+
const result = await this.gitExecutor.executeGitCommand('remote', [], projectPath);
|
|
310
|
+
if (result.success && result.stdout) {
|
|
311
|
+
const remotes = result.stdout.trim().split('\n').map(r => r.trim());
|
|
312
|
+
return remotes.includes(remoteName);
|
|
313
|
+
}
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
exports.RepositorySynchronizer = RepositorySynchronizer;
|
|
322
|
+
//# sourceMappingURL=repository-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-sync.js","sourceRoot":"","sources":["../../src/utils/repository-sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrebuzeli/git-mcp",
|
|
3
|
-
"version": "5.
|
|
4
|
-
"description": "Professional MCP server for Git operations with multi-provider support, enhanced security, and comprehensive safety features",
|
|
3
|
+
"version": "5.4.0",
|
|
4
|
+
"description": "Professional MCP server for Git operations with Universal Mode - automatic multi-provider support (GitHub + Gitea), enhanced security, and comprehensive safety features",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
"git",
|
|
31
31
|
"github",
|
|
32
32
|
"gitea",
|
|
33
|
+
"universal-mode",
|
|
34
|
+
"multi-provider",
|
|
33
35
|
"model-context-protocol",
|
|
34
36
|
"ai-agent",
|
|
35
37
|
"version-control",
|