@andrebuzeli/git-mcp 5.0.5 → 5.0.6
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/LICENSE +21 -0
- package/README.md +143 -89
- package/dist/config.d.ts +72 -71
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +226 -139
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +15 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +133 -128
- package/dist/index.js.map +1 -1
- package/dist/providers/base-provider.d.ts +42 -153
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +42 -302
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/gitea-provider.d.ts +67 -118
- package/dist/providers/gitea-provider.d.ts.map +1 -1
- package/dist/providers/gitea-provider.js +487 -1161
- package/dist/providers/gitea-provider.js.map +1 -1
- package/dist/providers/github-provider.d.ts +70 -81
- package/dist/providers/github-provider.d.ts.map +1 -1
- package/dist/providers/github-provider.js +641 -278
- package/dist/providers/github-provider.js.map +1 -1
- package/dist/providers/index.d.ts +9 -9
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -19
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/provider-factory.d.ts +29 -59
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +134 -265
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/provider-operation-handler.d.ts +93 -0
- package/dist/providers/provider-operation-handler.d.ts.map +1 -0
- package/dist/providers/provider-operation-handler.js +280 -0
- package/dist/providers/provider-operation-handler.js.map +1 -0
- package/dist/providers/types.d.ts +201 -355
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +3 -2
- package/dist/providers/types.js.map +1 -1
- package/dist/server.d.ts +34 -8
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +436 -494
- package/dist/server.js.map +1 -1
- package/dist/tools/git-analytics.d.ts +239 -16
- package/dist/tools/git-analytics.d.ts.map +1 -1
- package/dist/tools/git-analytics.js +737 -25
- package/dist/tools/git-analytics.js.map +1 -1
- package/dist/tools/git-archive.d.ts +109 -15
- package/dist/tools/git-archive.d.ts.map +1 -1
- package/dist/tools/git-archive.js +462 -10
- package/dist/tools/git-archive.js.map +1 -1
- package/dist/tools/git-backup.d.ts +101 -15
- package/dist/tools/git-backup.d.ts.map +1 -1
- package/dist/tools/git-backup.js +410 -10
- package/dist/tools/git-backup.js.map +1 -1
- package/dist/tools/git-branches.d.ts +141 -15
- package/dist/tools/git-branches.d.ts.map +1 -1
- package/dist/tools/git-branches.js +466 -11
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-config.d.ts +115 -15
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js +446 -11
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-files.d.ts +179 -59
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +682 -222
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-issues.d.ts +158 -15
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +323 -11
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-monitor.d.ts +149 -14
- package/dist/tools/git-monitor.d.ts.map +1 -1
- package/dist/tools/git-monitor.js +528 -11
- package/dist/tools/git-monitor.js.map +1 -1
- package/dist/tools/git-packages.d.ts +163 -15
- package/dist/tools/git-packages.d.ts.map +1 -1
- package/dist/tools/git-packages.js +526 -11
- package/dist/tools/git-packages.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +174 -15
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +352 -11
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-release.d.ts +167 -15
- package/dist/tools/git-release.d.ts.map +1 -1
- package/dist/tools/git-release.js +465 -11
- package/dist/tools/git-release.js.map +1 -1
- package/dist/tools/git-remote.d.ts +124 -15
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js +539 -11
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-reset.d.ts +100 -15
- package/dist/tools/git-reset.d.ts.map +1 -1
- package/dist/tools/git-reset.js +409 -11
- package/dist/tools/git-reset.js.map +1 -1
- package/dist/tools/git-stash.d.ts +120 -15
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js +503 -11
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-sync.d.ts +160 -16
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js +462 -113
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-tags.d.ts +142 -15
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +471 -11
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-workflow.d.ts +151 -80
- package/dist/tools/git-workflow.d.ts.map +1 -1
- package/dist/tools/git-workflow.js +407 -912
- package/dist/tools/git-workflow.js.map +1 -1
- package/dist/utils/credential-manager.d.ts +119 -0
- package/dist/utils/credential-manager.d.ts.map +1 -0
- package/dist/utils/credential-manager.js +450 -0
- package/dist/utils/credential-manager.js.map +1 -0
- package/dist/utils/git-command-executor.d.ts +326 -0
- package/dist/utils/git-command-executor.d.ts.map +1 -0
- package/dist/utils/git-command-executor.js +877 -0
- package/dist/utils/git-command-executor.js.map +1 -0
- package/dist/utils/logger.d.ts +143 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +473 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/operation-error-handler.d.ts +54 -41
- package/dist/utils/operation-error-handler.d.ts.map +1 -1
- package/dist/utils/operation-error-handler.js +211 -227
- package/dist/utils/operation-error-handler.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts +41 -0
- package/dist/utils/parameter-validator.d.ts.map +1 -0
- package/dist/utils/parameter-validator.js +464 -0
- package/dist/utils/parameter-validator.js.map +1 -0
- package/dist/utils/repository-detector.d.ts +128 -0
- package/dist/utils/repository-detector.d.ts.map +1 -0
- package/dist/utils/repository-detector.js +422 -0
- package/dist/utils/repository-detector.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +146 -0
- package/dist/utils/response-formatter.d.ts.map +1 -0
- package/dist/utils/response-formatter.js +378 -0
- package/dist/utils/response-formatter.js.map +1 -0
- package/dist/utils/retry.d.ts +12 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +28 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/terminal-controller.d.ts +73 -139
- package/dist/utils/terminal-controller.d.ts.map +1 -1
- package/dist/utils/terminal-controller.js +234 -459
- package/dist/utils/terminal-controller.js.map +1 -1
- package/package.json +79 -60
- package/dist/providers/error-handler.d.ts +0 -51
- package/dist/providers/error-handler.d.ts.map +0 -1
- package/dist/providers/error-handler.js +0 -176
- package/dist/providers/error-handler.js.map +0 -1
- package/dist/providers/github-provider-backup.d.ts +0 -81
- package/dist/providers/github-provider-backup.d.ts.map +0 -1
- package/dist/providers/github-provider-backup.js +0 -1179
- package/dist/providers/github-provider-backup.js.map +0 -1
- package/dist/providers/github-provider-complete.d.ts +0 -1
- package/dist/providers/github-provider-complete.d.ts.map +0 -1
- package/dist/providers/github-provider-complete.js +0 -2
- package/dist/providers/github-provider-complete.js.map +0 -1
- package/dist/tools/git-init.d.ts +0 -50
- package/dist/tools/git-init.d.ts.map +0 -1
- package/dist/tools/git-init.js +0 -258
- package/dist/tools/git-init.js.map +0 -1
- package/dist/tools/git-log.d.ts +0 -67
- package/dist/tools/git-log.d.ts.map +0 -1
- package/dist/tools/git-log.js +0 -320
- package/dist/tools/git-log.js.map +0 -1
- package/dist/tools/git-status.d.ts +0 -29
- package/dist/tools/git-status.d.ts.map +0 -1
- package/dist/tools/git-status.js +0 -182
- package/dist/tools/git-status.js.map +0 -1
- package/dist/tools/git-update.d.ts +0 -34
- package/dist/tools/git-update.d.ts.map +0 -1
- package/dist/tools/git-update.js +0 -191
- package/dist/tools/git-update.js.map +0 -1
- package/dist/utils/auto-detection.d.ts +0 -120
- package/dist/utils/auto-detection.d.ts.map +0 -1
- package/dist/utils/auto-detection.js +0 -259
- package/dist/utils/auto-detection.js.map +0 -1
- package/dist/utils/configuration-error-generator.d.ts +0 -41
- package/dist/utils/configuration-error-generator.d.ts.map +0 -1
- package/dist/utils/configuration-error-generator.js +0 -168
- package/dist/utils/configuration-error-generator.js.map +0 -1
- package/dist/utils/configuration-validator.d.ts +0 -67
- package/dist/utils/configuration-validator.d.ts.map +0 -1
- package/dist/utils/configuration-validator.js +0 -257
- package/dist/utils/configuration-validator.js.map +0 -1
- package/dist/utils/error-handler.d.ts +0 -107
- package/dist/utils/error-handler.d.ts.map +0 -1
- package/dist/utils/error-handler.js +0 -331
- package/dist/utils/error-handler.js.map +0 -1
- package/dist/utils/git-operations.d.ts +0 -200
- package/dist/utils/git-operations.d.ts.map +0 -1
- package/dist/utils/git-operations.js +0 -836
- package/dist/utils/git-operations.js.map +0 -1
- package/dist/utils/multi-provider-error-handler.d.ts +0 -75
- package/dist/utils/multi-provider-error-handler.d.ts.map +0 -1
- package/dist/utils/multi-provider-error-handler.js +0 -276
- package/dist/utils/multi-provider-error-handler.js.map +0 -1
- package/dist/utils/multi-provider-operation-handler.d.ts +0 -113
- package/dist/utils/multi-provider-operation-handler.d.ts.map +0 -1
- package/dist/utils/multi-provider-operation-handler.js +0 -303
- package/dist/utils/multi-provider-operation-handler.js.map +0 -1
- package/dist/utils/provider-operation-handler.d.ts +0 -80
- package/dist/utils/provider-operation-handler.d.ts.map +0 -1
- package/dist/utils/provider-operation-handler.js +0 -201
- package/dist/utils/provider-operation-handler.js.map +0 -1
- package/dist/utils/response-helper.d.ts +0 -57
- package/dist/utils/response-helper.d.ts.map +0 -1
- package/dist/utils/response-helper.js +0 -54
- package/dist/utils/response-helper.js.map +0 -1
- package/dist/utils/user-detection.d.ts +0 -25
- package/dist/utils/user-detection.d.ts.map +0 -1
- package/dist/utils/user-detection.js +0 -54
- package/dist/utils/user-detection.js.map +0 -1
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Repository Detector
|
|
4
|
+
*
|
|
5
|
+
* Utility for detecting Git repositories, extracting repository information,
|
|
6
|
+
* and auto-detecting project context for Git operations.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.repositoryDetector = exports.RepositoryDetector = void 0;
|
|
13
|
+
const git_command_executor_js_1 = require("./git-command-executor.js");
|
|
14
|
+
const terminal_controller_js_1 = require("./terminal-controller.js");
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
class RepositoryDetector {
|
|
18
|
+
gitExecutor;
|
|
19
|
+
terminal;
|
|
20
|
+
constructor() {
|
|
21
|
+
this.gitExecutor = new git_command_executor_js_1.GitCommandExecutor();
|
|
22
|
+
this.terminal = new terminal_controller_js_1.TerminalController();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Detect repository information for a given path
|
|
26
|
+
*/
|
|
27
|
+
async detectRepository(projectPath) {
|
|
28
|
+
const resolvedPath = path_1.default.resolve(projectPath);
|
|
29
|
+
// Check if directory exists
|
|
30
|
+
const dirValidation = await this.terminal.validateDirectory(resolvedPath);
|
|
31
|
+
if (!dirValidation.exists) {
|
|
32
|
+
return {
|
|
33
|
+
isGitRepository: false,
|
|
34
|
+
workingDirectory: resolvedPath
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Check if it's a Git repository
|
|
38
|
+
const isGitRepo = await this.gitExecutor.isGitRepository(resolvedPath);
|
|
39
|
+
if (!isGitRepo) {
|
|
40
|
+
return {
|
|
41
|
+
isGitRepository: false,
|
|
42
|
+
workingDirectory: resolvedPath
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Get repository path (could be different from working directory in case of subdirectories)
|
|
46
|
+
const repoPathResult = await this.gitExecutor.executeGitCommand('rev-parse', ['--show-toplevel'], resolvedPath);
|
|
47
|
+
const repositoryPath = repoPathResult.success
|
|
48
|
+
? path_1.default.resolve(repoPathResult.stdout.trim())
|
|
49
|
+
: resolvedPath;
|
|
50
|
+
// Get repository name
|
|
51
|
+
const repositoryName = path_1.default.basename(repositoryPath);
|
|
52
|
+
// Get Git directory
|
|
53
|
+
const gitDirResult = await this.gitExecutor.executeGitCommand('rev-parse', ['--git-dir'], repositoryPath);
|
|
54
|
+
const gitDirectory = gitDirResult.success
|
|
55
|
+
? path_1.default.resolve(repositoryPath, gitDirResult.stdout.trim())
|
|
56
|
+
: path_1.default.join(repositoryPath, '.git');
|
|
57
|
+
// Check if bare repository
|
|
58
|
+
const isBareResult = await this.gitExecutor.executeGitCommand('rev-parse', ['--is-bare-repository'], repositoryPath);
|
|
59
|
+
const isBare = isBareResult.success && isBareResult.stdout.trim() === 'true';
|
|
60
|
+
// Get current branch
|
|
61
|
+
const branchResult = await this.gitExecutor.getCurrentBranch(repositoryPath);
|
|
62
|
+
const currentBranch = branchResult.branch;
|
|
63
|
+
// Get remotes
|
|
64
|
+
const remotesInfo = await this.getRemotesInfo(repositoryPath);
|
|
65
|
+
const remoteOrigin = remotesInfo.find(remote => remote.name === 'origin')?.url;
|
|
66
|
+
const detectedProvider = this.detectProviderFromUrl(remoteOrigin);
|
|
67
|
+
// Check for uncommitted changes
|
|
68
|
+
const statusResult = await this.gitExecutor.getStatus(repositoryPath);
|
|
69
|
+
const hasUncommittedChanges = statusResult.success &&
|
|
70
|
+
statusResult.parsedStatus &&
|
|
71
|
+
!statusResult.parsedStatus.clean;
|
|
72
|
+
// Get last commit
|
|
73
|
+
const lastCommit = await this.getLastCommitInfo(repositoryPath);
|
|
74
|
+
return {
|
|
75
|
+
isGitRepository: true,
|
|
76
|
+
repositoryPath,
|
|
77
|
+
repositoryName,
|
|
78
|
+
remoteOrigin,
|
|
79
|
+
currentBranch,
|
|
80
|
+
detectedProvider,
|
|
81
|
+
hasRemotes: remotesInfo.length > 0,
|
|
82
|
+
remotes: remotesInfo,
|
|
83
|
+
workingDirectory: resolvedPath,
|
|
84
|
+
gitDirectory,
|
|
85
|
+
isBare,
|
|
86
|
+
hasUncommittedChanges,
|
|
87
|
+
lastCommit
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get complete project context with auto-detection
|
|
92
|
+
*/
|
|
93
|
+
async getProjectContext(projectPath) {
|
|
94
|
+
const resolvedPath = path_1.default.resolve(projectPath);
|
|
95
|
+
const projectName = path_1.default.basename(resolvedPath);
|
|
96
|
+
const repositoryInfo = await this.detectRepository(resolvedPath);
|
|
97
|
+
// Auto-detect settings from repository info
|
|
98
|
+
const autoDetectedSettings = this.extractAutoDetectedSettings(repositoryInfo);
|
|
99
|
+
return {
|
|
100
|
+
projectPath: resolvedPath,
|
|
101
|
+
projectName,
|
|
102
|
+
repositoryInfo,
|
|
103
|
+
autoDetectedSettings
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Find Git repository in current directory or parent directories
|
|
108
|
+
*/
|
|
109
|
+
async findGitRepository(startPath) {
|
|
110
|
+
let currentPath = path_1.default.resolve(startPath);
|
|
111
|
+
const rootPath = path_1.default.parse(currentPath).root;
|
|
112
|
+
while (currentPath !== rootPath) {
|
|
113
|
+
const repoInfo = await this.detectRepository(currentPath);
|
|
114
|
+
if (repoInfo.isGitRepository) {
|
|
115
|
+
return repoInfo;
|
|
116
|
+
}
|
|
117
|
+
// Move to parent directory
|
|
118
|
+
const parentPath = path_1.default.dirname(currentPath);
|
|
119
|
+
if (parentPath === currentPath) {
|
|
120
|
+
break; // Reached root
|
|
121
|
+
}
|
|
122
|
+
currentPath = parentPath;
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if path is within a Git repository
|
|
128
|
+
*/
|
|
129
|
+
async isWithinGitRepository(filePath) {
|
|
130
|
+
const resolvedPath = path_1.default.resolve(filePath);
|
|
131
|
+
const repoInfo = await this.findGitRepository(resolvedPath);
|
|
132
|
+
if (!repoInfo || !repoInfo.repositoryPath) {
|
|
133
|
+
return { isWithin: false };
|
|
134
|
+
}
|
|
135
|
+
const relativePath = path_1.default.relative(repoInfo.repositoryPath, resolvedPath);
|
|
136
|
+
const isWithin = !relativePath.startsWith('..') && !path_1.default.isAbsolute(relativePath);
|
|
137
|
+
return {
|
|
138
|
+
isWithin,
|
|
139
|
+
repositoryInfo: repoInfo,
|
|
140
|
+
relativePath: isWithin ? relativePath : undefined
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate project path and ensure it's suitable for Git operations
|
|
145
|
+
*/
|
|
146
|
+
async validateProjectPath(projectPath) {
|
|
147
|
+
try {
|
|
148
|
+
const resolvedPath = path_1.default.resolve(projectPath);
|
|
149
|
+
// Check if directory exists
|
|
150
|
+
const dirValidation = await this.terminal.validateDirectory(resolvedPath);
|
|
151
|
+
if (!dirValidation.exists) {
|
|
152
|
+
return {
|
|
153
|
+
valid: false,
|
|
154
|
+
error: `Directory does not exist: ${resolvedPath}`,
|
|
155
|
+
suggestion: 'Ensure the project path exists and is accessible'
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (!dirValidation.isDirectory) {
|
|
159
|
+
return {
|
|
160
|
+
valid: false,
|
|
161
|
+
error: `Path is not a directory: ${resolvedPath}`,
|
|
162
|
+
suggestion: 'Provide a directory path, not a file path'
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Get repository info
|
|
166
|
+
const repositoryInfo = await this.detectRepository(resolvedPath);
|
|
167
|
+
return {
|
|
168
|
+
valid: true,
|
|
169
|
+
repositoryInfo
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
return {
|
|
174
|
+
valid: false,
|
|
175
|
+
error: `Failed to validate project path: ${error.message}`,
|
|
176
|
+
suggestion: 'Check path permissions and accessibility'
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Extract repository name from various sources
|
|
182
|
+
*/
|
|
183
|
+
extractRepositoryName(projectPath, remoteUrl) {
|
|
184
|
+
// Try to extract from remote URL first
|
|
185
|
+
if (remoteUrl) {
|
|
186
|
+
const urlName = this.extractRepoNameFromUrl(remoteUrl);
|
|
187
|
+
if (urlName) {
|
|
188
|
+
return urlName;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Fall back to directory name
|
|
192
|
+
return path_1.default.basename(path_1.default.resolve(projectPath));
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Extract owner/username from repository URL or environment
|
|
196
|
+
*/
|
|
197
|
+
extractOwnerFromContext(repositoryInfo) {
|
|
198
|
+
if (repositoryInfo.remoteOrigin) {
|
|
199
|
+
return this.extractOwnerFromUrl(repositoryInfo.remoteOrigin);
|
|
200
|
+
}
|
|
201
|
+
// Try to get from Git config
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Detect provider from remote URL
|
|
206
|
+
*/
|
|
207
|
+
detectProviderFromUrl(url) {
|
|
208
|
+
if (!url)
|
|
209
|
+
return 'unknown';
|
|
210
|
+
const normalizedUrl = url.toLowerCase();
|
|
211
|
+
if (normalizedUrl.includes('github.com')) {
|
|
212
|
+
return 'github';
|
|
213
|
+
}
|
|
214
|
+
// Check for common Gitea patterns
|
|
215
|
+
if (normalizedUrl.includes('gitea') ||
|
|
216
|
+
normalizedUrl.includes('git.') ||
|
|
217
|
+
normalizedUrl.match(/:\d+\//) || // Custom port
|
|
218
|
+
(!normalizedUrl.includes('github') && !normalizedUrl.includes('gitlab'))) {
|
|
219
|
+
return 'gitea';
|
|
220
|
+
}
|
|
221
|
+
return 'unknown';
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get information about all remotes
|
|
225
|
+
*/
|
|
226
|
+
async getRemotesInfo(repositoryPath) {
|
|
227
|
+
const remotesResult = await this.gitExecutor.executeGitCommand('remote', ['-v'], repositoryPath);
|
|
228
|
+
if (!remotesResult.success) {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
const remotes = [];
|
|
232
|
+
const lines = remotesResult.stdout.split('\n').filter(line => line.trim());
|
|
233
|
+
for (const line of lines) {
|
|
234
|
+
const match = line.match(/^(\S+)\s+(\S+)\s+\(fetch\)$/);
|
|
235
|
+
if (match) {
|
|
236
|
+
const [, name, url] = match;
|
|
237
|
+
const provider = this.detectProviderFromUrl(url);
|
|
238
|
+
remotes.push({ name, url, provider });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return remotes;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get last commit information
|
|
245
|
+
*/
|
|
246
|
+
async getLastCommitInfo(repositoryPath) {
|
|
247
|
+
const commitResult = await this.gitExecutor.executeGitCommand('log', ['-1', '--format=%H|%s|%an|%ad', '--date=iso'], repositoryPath);
|
|
248
|
+
if (commitResult.success && commitResult.stdout.trim()) {
|
|
249
|
+
const [hash, message, author, date] = commitResult.stdout.trim().split('|');
|
|
250
|
+
return { hash, message, author, date };
|
|
251
|
+
}
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Extract auto-detected settings from repository info
|
|
256
|
+
*/
|
|
257
|
+
extractAutoDetectedSettings(repositoryInfo) {
|
|
258
|
+
const settings = {};
|
|
259
|
+
if (repositoryInfo.remoteOrigin) {
|
|
260
|
+
settings.remoteUrl = repositoryInfo.remoteOrigin;
|
|
261
|
+
settings.owner = this.extractOwnerFromUrl(repositoryInfo.remoteOrigin);
|
|
262
|
+
settings.repository = this.extractRepoNameFromUrl(repositoryInfo.remoteOrigin);
|
|
263
|
+
}
|
|
264
|
+
if (repositoryInfo.detectedProvider && repositoryInfo.detectedProvider !== 'unknown') {
|
|
265
|
+
settings.provider = repositoryInfo.detectedProvider;
|
|
266
|
+
}
|
|
267
|
+
return settings;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Extract repository name from URL
|
|
271
|
+
*/
|
|
272
|
+
extractRepoNameFromUrl(url) {
|
|
273
|
+
try {
|
|
274
|
+
// Handle SSH URLs like git@github.com:owner/repo.git
|
|
275
|
+
if (url.startsWith('git@')) {
|
|
276
|
+
const match = url.match(/git@[^:]+:([^\/]+)\/(.+?)(?:\.git)?$/);
|
|
277
|
+
if (match) {
|
|
278
|
+
return match[2];
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Handle HTTPS URLs like https://github.com/owner/repo.git
|
|
282
|
+
if (url.startsWith('http')) {
|
|
283
|
+
const urlObj = new URL(url);
|
|
284
|
+
const pathParts = urlObj.pathname.split('/').filter(part => part);
|
|
285
|
+
if (pathParts.length >= 2) {
|
|
286
|
+
const repoName = pathParts[pathParts.length - 1];
|
|
287
|
+
return repoName.endsWith('.git') ? repoName.slice(0, -4) : repoName;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return undefined;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Extract owner/username from URL
|
|
298
|
+
*/
|
|
299
|
+
extractOwnerFromUrl(url) {
|
|
300
|
+
try {
|
|
301
|
+
// Handle SSH URLs like git@github.com:owner/repo.git
|
|
302
|
+
if (url.startsWith('git@')) {
|
|
303
|
+
const match = url.match(/git@[^:]+:([^\/]+)\/(.+?)(?:\.git)?$/);
|
|
304
|
+
if (match) {
|
|
305
|
+
return match[1];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Handle HTTPS URLs like https://github.com/owner/repo.git
|
|
309
|
+
if (url.startsWith('http')) {
|
|
310
|
+
const urlObj = new URL(url);
|
|
311
|
+
const pathParts = urlObj.pathname.split('/').filter(part => part);
|
|
312
|
+
if (pathParts.length >= 2) {
|
|
313
|
+
return pathParts[pathParts.length - 2];
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return undefined;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Check if directory has Git-related files
|
|
324
|
+
*/
|
|
325
|
+
async hasGitFiles(directoryPath) {
|
|
326
|
+
try {
|
|
327
|
+
const resolvedPath = path_1.default.resolve(directoryPath);
|
|
328
|
+
const files = await fs_1.promises.readdir(resolvedPath);
|
|
329
|
+
const gitFiles = [];
|
|
330
|
+
let hasGitDir = false;
|
|
331
|
+
let hasGitignore = false;
|
|
332
|
+
let hasGitAttributes = false;
|
|
333
|
+
for (const file of files) {
|
|
334
|
+
if (file === '.git') {
|
|
335
|
+
hasGitDir = true;
|
|
336
|
+
gitFiles.push(file);
|
|
337
|
+
}
|
|
338
|
+
else if (file === '.gitignore') {
|
|
339
|
+
hasGitignore = true;
|
|
340
|
+
gitFiles.push(file);
|
|
341
|
+
}
|
|
342
|
+
else if (file === '.gitattributes') {
|
|
343
|
+
hasGitAttributes = true;
|
|
344
|
+
gitFiles.push(file);
|
|
345
|
+
}
|
|
346
|
+
else if (file.startsWith('.git')) {
|
|
347
|
+
gitFiles.push(file);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
hasGitDir,
|
|
352
|
+
hasGitignore,
|
|
353
|
+
hasGitAttributes,
|
|
354
|
+
gitFiles
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return {
|
|
359
|
+
hasGitDir: false,
|
|
360
|
+
hasGitignore: false,
|
|
361
|
+
hasGitAttributes: false,
|
|
362
|
+
gitFiles: []
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Suggest Git initialization for non-Git directories
|
|
368
|
+
*/
|
|
369
|
+
async suggestGitInit(projectPath) {
|
|
370
|
+
try {
|
|
371
|
+
const resolvedPath = path_1.default.resolve(projectPath);
|
|
372
|
+
const dirValidation = await this.terminal.validateDirectory(resolvedPath);
|
|
373
|
+
if (!dirValidation.exists) {
|
|
374
|
+
return {
|
|
375
|
+
shouldInit: false,
|
|
376
|
+
reason: 'Directory does not exist',
|
|
377
|
+
suggestion: 'Create the directory first',
|
|
378
|
+
hasExistingFiles: false,
|
|
379
|
+
fileCount: 0
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
const repoInfo = await this.detectRepository(resolvedPath);
|
|
383
|
+
if (repoInfo.isGitRepository) {
|
|
384
|
+
return {
|
|
385
|
+
shouldInit: false,
|
|
386
|
+
reason: 'Already a Git repository',
|
|
387
|
+
suggestion: 'Directory is already initialized as a Git repository',
|
|
388
|
+
hasExistingFiles: true,
|
|
389
|
+
fileCount: 0
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
// Check for existing files
|
|
393
|
+
const files = await fs_1.promises.readdir(resolvedPath);
|
|
394
|
+
const nonHiddenFiles = files.filter(file => !file.startsWith('.'));
|
|
395
|
+
const hasExistingFiles = nonHiddenFiles.length > 0;
|
|
396
|
+
return {
|
|
397
|
+
shouldInit: true,
|
|
398
|
+
reason: hasExistingFiles
|
|
399
|
+
? 'Directory has files but is not a Git repository'
|
|
400
|
+
: 'Empty directory ready for Git initialization',
|
|
401
|
+
suggestion: hasExistingFiles
|
|
402
|
+
? 'Initialize Git repository and make initial commit'
|
|
403
|
+
: 'Initialize Git repository',
|
|
404
|
+
hasExistingFiles,
|
|
405
|
+
fileCount: nonHiddenFiles.length
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
catch (error) {
|
|
409
|
+
return {
|
|
410
|
+
shouldInit: false,
|
|
411
|
+
reason: `Error checking directory: ${error.message}`,
|
|
412
|
+
suggestion: 'Check directory permissions and try again',
|
|
413
|
+
hasExistingFiles: false,
|
|
414
|
+
fileCount: 0
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
exports.RepositoryDetector = RepositoryDetector;
|
|
420
|
+
// Export singleton instance
|
|
421
|
+
exports.repositoryDetector = new RepositoryDetector();
|
|
422
|
+
//# sourceMappingURL=repository-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-detector.js","sourceRoot":"","sources":["../../src/utils/repository-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Formatter
|
|
3
|
+
*
|
|
4
|
+
* Utility for formatting consistent responses across all Git MCP tools.
|
|
5
|
+
* Provides standardized success/error response formats with metadata.
|
|
6
|
+
*/
|
|
7
|
+
export interface ToolResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
data?: any;
|
|
10
|
+
error?: {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
details?: any;
|
|
14
|
+
suggestions?: string[];
|
|
15
|
+
configurationGuide?: {
|
|
16
|
+
requiredEnvVars: string[];
|
|
17
|
+
exampleConfig: any;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
metadata?: {
|
|
21
|
+
provider?: string;
|
|
22
|
+
operation: string;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
executionTime: number;
|
|
25
|
+
toolName?: string;
|
|
26
|
+
projectPath?: string;
|
|
27
|
+
repositoryName?: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface FormatterOptions {
|
|
31
|
+
includeMetadata?: boolean;
|
|
32
|
+
includeTimestamp?: boolean;
|
|
33
|
+
includeExecutionTime?: boolean;
|
|
34
|
+
maxDataSize?: number;
|
|
35
|
+
truncateData?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare class ResponseFormatter {
|
|
38
|
+
private defaultOptions;
|
|
39
|
+
/**
|
|
40
|
+
* Format successful response
|
|
41
|
+
*/
|
|
42
|
+
success(data: any, metadata: {
|
|
43
|
+
operation: string;
|
|
44
|
+
provider?: string;
|
|
45
|
+
executionTime?: number;
|
|
46
|
+
toolName?: string;
|
|
47
|
+
projectPath?: string;
|
|
48
|
+
repositoryName?: string;
|
|
49
|
+
}, options?: FormatterOptions): ToolResult;
|
|
50
|
+
/**
|
|
51
|
+
* Format error response
|
|
52
|
+
*/
|
|
53
|
+
error(code: string, message: string, details?: any, metadata?: {
|
|
54
|
+
operation: string;
|
|
55
|
+
provider?: string;
|
|
56
|
+
executionTime?: number;
|
|
57
|
+
toolName?: string;
|
|
58
|
+
projectPath?: string;
|
|
59
|
+
repositoryName?: string;
|
|
60
|
+
}, options?: FormatterOptions): ToolResult;
|
|
61
|
+
/**
|
|
62
|
+
* Format validation error response
|
|
63
|
+
*/
|
|
64
|
+
validationError(parameter: string, expectedFormat: string, actualValue?: any, metadata?: {
|
|
65
|
+
operation: string;
|
|
66
|
+
toolName?: string;
|
|
67
|
+
}): ToolResult;
|
|
68
|
+
/**
|
|
69
|
+
* Format configuration error response
|
|
70
|
+
*/
|
|
71
|
+
configurationError(missingConfig: string[], provider?: string, metadata?: {
|
|
72
|
+
operation: string;
|
|
73
|
+
toolName?: string;
|
|
74
|
+
}): ToolResult;
|
|
75
|
+
/**
|
|
76
|
+
* Format Git error response
|
|
77
|
+
*/
|
|
78
|
+
gitError(gitErrorType: string, gitMessage: string, command?: string, metadata?: {
|
|
79
|
+
operation: string;
|
|
80
|
+
toolName?: string;
|
|
81
|
+
projectPath?: string;
|
|
82
|
+
}): ToolResult;
|
|
83
|
+
/**
|
|
84
|
+
* Format provider error response
|
|
85
|
+
*/
|
|
86
|
+
providerError(provider: string, apiError: string, statusCode?: number, metadata?: {
|
|
87
|
+
operation: string;
|
|
88
|
+
toolName?: string;
|
|
89
|
+
}): ToolResult;
|
|
90
|
+
/**
|
|
91
|
+
* Format operation not supported error
|
|
92
|
+
*/
|
|
93
|
+
operationNotSupported(operation: string, supportedOperations: string[], toolName?: string): ToolResult;
|
|
94
|
+
/**
|
|
95
|
+
* Format partial success response (for multi-provider operations)
|
|
96
|
+
*/
|
|
97
|
+
partialSuccess(successResults: any[], failedResults: any[], metadata: {
|
|
98
|
+
operation: string;
|
|
99
|
+
providers: string[];
|
|
100
|
+
executionTime?: number;
|
|
101
|
+
toolName?: string;
|
|
102
|
+
}): ToolResult;
|
|
103
|
+
/**
|
|
104
|
+
* Format list response with pagination info
|
|
105
|
+
*/
|
|
106
|
+
listResponse(items: any[], pagination?: {
|
|
107
|
+
page?: number;
|
|
108
|
+
limit?: number;
|
|
109
|
+
total?: number;
|
|
110
|
+
hasMore?: boolean;
|
|
111
|
+
}, metadata?: {
|
|
112
|
+
operation: string;
|
|
113
|
+
provider?: string;
|
|
114
|
+
executionTime?: number;
|
|
115
|
+
toolName?: string;
|
|
116
|
+
}): ToolResult;
|
|
117
|
+
/**
|
|
118
|
+
* Format status response
|
|
119
|
+
*/
|
|
120
|
+
statusResponse(status: 'healthy' | 'warning' | 'error', details: any, metadata?: {
|
|
121
|
+
operation: string;
|
|
122
|
+
toolName?: string;
|
|
123
|
+
}): ToolResult;
|
|
124
|
+
/**
|
|
125
|
+
* Generate suggestions based on error code and message
|
|
126
|
+
*/
|
|
127
|
+
private generateSuggestions;
|
|
128
|
+
/**
|
|
129
|
+
* Generate configuration guide for specific errors
|
|
130
|
+
*/
|
|
131
|
+
private generateConfigurationGuide;
|
|
132
|
+
/**
|
|
133
|
+
* Generate parameter example based on parameter name and expected format
|
|
134
|
+
*/
|
|
135
|
+
private generateParameterExample;
|
|
136
|
+
/**
|
|
137
|
+
* Truncate data if it exceeds maximum size
|
|
138
|
+
*/
|
|
139
|
+
private truncateDataIfNeeded;
|
|
140
|
+
/**
|
|
141
|
+
* Generate summary of data structure
|
|
142
|
+
*/
|
|
143
|
+
private generateDataSummary;
|
|
144
|
+
}
|
|
145
|
+
export declare const responseFormatter: ResponseFormatter;
|
|
146
|
+
//# sourceMappingURL=response-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/response-formatter.ts"],"names":[],"mappings":"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"}
|