@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.
Files changed (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +143 -89
  3. package/dist/config.d.ts +72 -71
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +226 -139
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.d.ts +15 -17
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +133 -128
  10. package/dist/index.js.map +1 -1
  11. package/dist/providers/base-provider.d.ts +42 -153
  12. package/dist/providers/base-provider.d.ts.map +1 -1
  13. package/dist/providers/base-provider.js +42 -302
  14. package/dist/providers/base-provider.js.map +1 -1
  15. package/dist/providers/gitea-provider.d.ts +67 -118
  16. package/dist/providers/gitea-provider.d.ts.map +1 -1
  17. package/dist/providers/gitea-provider.js +487 -1161
  18. package/dist/providers/gitea-provider.js.map +1 -1
  19. package/dist/providers/github-provider.d.ts +70 -81
  20. package/dist/providers/github-provider.d.ts.map +1 -1
  21. package/dist/providers/github-provider.js +641 -278
  22. package/dist/providers/github-provider.js.map +1 -1
  23. package/dist/providers/index.d.ts +9 -9
  24. package/dist/providers/index.d.ts.map +1 -1
  25. package/dist/providers/index.js +13 -19
  26. package/dist/providers/index.js.map +1 -1
  27. package/dist/providers/provider-factory.d.ts +29 -59
  28. package/dist/providers/provider-factory.d.ts.map +1 -1
  29. package/dist/providers/provider-factory.js +134 -265
  30. package/dist/providers/provider-factory.js.map +1 -1
  31. package/dist/providers/provider-operation-handler.d.ts +93 -0
  32. package/dist/providers/provider-operation-handler.d.ts.map +1 -0
  33. package/dist/providers/provider-operation-handler.js +280 -0
  34. package/dist/providers/provider-operation-handler.js.map +1 -0
  35. package/dist/providers/types.d.ts +201 -355
  36. package/dist/providers/types.d.ts.map +1 -1
  37. package/dist/providers/types.js +3 -2
  38. package/dist/providers/types.js.map +1 -1
  39. package/dist/server.d.ts +34 -8
  40. package/dist/server.d.ts.map +1 -1
  41. package/dist/server.js +436 -494
  42. package/dist/server.js.map +1 -1
  43. package/dist/tools/git-analytics.d.ts +239 -16
  44. package/dist/tools/git-analytics.d.ts.map +1 -1
  45. package/dist/tools/git-analytics.js +737 -25
  46. package/dist/tools/git-analytics.js.map +1 -1
  47. package/dist/tools/git-archive.d.ts +109 -15
  48. package/dist/tools/git-archive.d.ts.map +1 -1
  49. package/dist/tools/git-archive.js +462 -10
  50. package/dist/tools/git-archive.js.map +1 -1
  51. package/dist/tools/git-backup.d.ts +101 -15
  52. package/dist/tools/git-backup.d.ts.map +1 -1
  53. package/dist/tools/git-backup.js +410 -10
  54. package/dist/tools/git-backup.js.map +1 -1
  55. package/dist/tools/git-branches.d.ts +141 -15
  56. package/dist/tools/git-branches.d.ts.map +1 -1
  57. package/dist/tools/git-branches.js +466 -11
  58. package/dist/tools/git-branches.js.map +1 -1
  59. package/dist/tools/git-config.d.ts +115 -15
  60. package/dist/tools/git-config.d.ts.map +1 -1
  61. package/dist/tools/git-config.js +446 -11
  62. package/dist/tools/git-config.js.map +1 -1
  63. package/dist/tools/git-files.d.ts +179 -59
  64. package/dist/tools/git-files.d.ts.map +1 -1
  65. package/dist/tools/git-files.js +682 -222
  66. package/dist/tools/git-files.js.map +1 -1
  67. package/dist/tools/git-issues.d.ts +158 -15
  68. package/dist/tools/git-issues.d.ts.map +1 -1
  69. package/dist/tools/git-issues.js +323 -11
  70. package/dist/tools/git-issues.js.map +1 -1
  71. package/dist/tools/git-monitor.d.ts +149 -14
  72. package/dist/tools/git-monitor.d.ts.map +1 -1
  73. package/dist/tools/git-monitor.js +528 -11
  74. package/dist/tools/git-monitor.js.map +1 -1
  75. package/dist/tools/git-packages.d.ts +163 -15
  76. package/dist/tools/git-packages.d.ts.map +1 -1
  77. package/dist/tools/git-packages.js +526 -11
  78. package/dist/tools/git-packages.js.map +1 -1
  79. package/dist/tools/git-pulls.d.ts +174 -15
  80. package/dist/tools/git-pulls.d.ts.map +1 -1
  81. package/dist/tools/git-pulls.js +352 -11
  82. package/dist/tools/git-pulls.js.map +1 -1
  83. package/dist/tools/git-release.d.ts +167 -15
  84. package/dist/tools/git-release.d.ts.map +1 -1
  85. package/dist/tools/git-release.js +465 -11
  86. package/dist/tools/git-release.js.map +1 -1
  87. package/dist/tools/git-remote.d.ts +124 -15
  88. package/dist/tools/git-remote.d.ts.map +1 -1
  89. package/dist/tools/git-remote.js +539 -11
  90. package/dist/tools/git-remote.js.map +1 -1
  91. package/dist/tools/git-reset.d.ts +100 -15
  92. package/dist/tools/git-reset.d.ts.map +1 -1
  93. package/dist/tools/git-reset.js +409 -11
  94. package/dist/tools/git-reset.js.map +1 -1
  95. package/dist/tools/git-stash.d.ts +120 -15
  96. package/dist/tools/git-stash.d.ts.map +1 -1
  97. package/dist/tools/git-stash.js +503 -11
  98. package/dist/tools/git-stash.js.map +1 -1
  99. package/dist/tools/git-sync.d.ts +160 -16
  100. package/dist/tools/git-sync.d.ts.map +1 -1
  101. package/dist/tools/git-sync.js +462 -113
  102. package/dist/tools/git-sync.js.map +1 -1
  103. package/dist/tools/git-tags.d.ts +142 -15
  104. package/dist/tools/git-tags.d.ts.map +1 -1
  105. package/dist/tools/git-tags.js +471 -11
  106. package/dist/tools/git-tags.js.map +1 -1
  107. package/dist/tools/git-workflow.d.ts +151 -80
  108. package/dist/tools/git-workflow.d.ts.map +1 -1
  109. package/dist/tools/git-workflow.js +407 -912
  110. package/dist/tools/git-workflow.js.map +1 -1
  111. package/dist/utils/credential-manager.d.ts +119 -0
  112. package/dist/utils/credential-manager.d.ts.map +1 -0
  113. package/dist/utils/credential-manager.js +450 -0
  114. package/dist/utils/credential-manager.js.map +1 -0
  115. package/dist/utils/git-command-executor.d.ts +326 -0
  116. package/dist/utils/git-command-executor.d.ts.map +1 -0
  117. package/dist/utils/git-command-executor.js +877 -0
  118. package/dist/utils/git-command-executor.js.map +1 -0
  119. package/dist/utils/logger.d.ts +143 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +473 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/dist/utils/operation-error-handler.d.ts +54 -41
  124. package/dist/utils/operation-error-handler.d.ts.map +1 -1
  125. package/dist/utils/operation-error-handler.js +211 -227
  126. package/dist/utils/operation-error-handler.js.map +1 -1
  127. package/dist/utils/parameter-validator.d.ts +41 -0
  128. package/dist/utils/parameter-validator.d.ts.map +1 -0
  129. package/dist/utils/parameter-validator.js +464 -0
  130. package/dist/utils/parameter-validator.js.map +1 -0
  131. package/dist/utils/repository-detector.d.ts +128 -0
  132. package/dist/utils/repository-detector.d.ts.map +1 -0
  133. package/dist/utils/repository-detector.js +422 -0
  134. package/dist/utils/repository-detector.js.map +1 -0
  135. package/dist/utils/response-formatter.d.ts +146 -0
  136. package/dist/utils/response-formatter.d.ts.map +1 -0
  137. package/dist/utils/response-formatter.js +378 -0
  138. package/dist/utils/response-formatter.js.map +1 -0
  139. package/dist/utils/retry.d.ts +12 -0
  140. package/dist/utils/retry.d.ts.map +1 -0
  141. package/dist/utils/retry.js +28 -0
  142. package/dist/utils/retry.js.map +1 -0
  143. package/dist/utils/terminal-controller.d.ts +73 -139
  144. package/dist/utils/terminal-controller.d.ts.map +1 -1
  145. package/dist/utils/terminal-controller.js +234 -459
  146. package/dist/utils/terminal-controller.js.map +1 -1
  147. package/package.json +79 -60
  148. package/dist/providers/error-handler.d.ts +0 -51
  149. package/dist/providers/error-handler.d.ts.map +0 -1
  150. package/dist/providers/error-handler.js +0 -176
  151. package/dist/providers/error-handler.js.map +0 -1
  152. package/dist/providers/github-provider-backup.d.ts +0 -81
  153. package/dist/providers/github-provider-backup.d.ts.map +0 -1
  154. package/dist/providers/github-provider-backup.js +0 -1179
  155. package/dist/providers/github-provider-backup.js.map +0 -1
  156. package/dist/providers/github-provider-complete.d.ts +0 -1
  157. package/dist/providers/github-provider-complete.d.ts.map +0 -1
  158. package/dist/providers/github-provider-complete.js +0 -2
  159. package/dist/providers/github-provider-complete.js.map +0 -1
  160. package/dist/tools/git-init.d.ts +0 -50
  161. package/dist/tools/git-init.d.ts.map +0 -1
  162. package/dist/tools/git-init.js +0 -258
  163. package/dist/tools/git-init.js.map +0 -1
  164. package/dist/tools/git-log.d.ts +0 -67
  165. package/dist/tools/git-log.d.ts.map +0 -1
  166. package/dist/tools/git-log.js +0 -320
  167. package/dist/tools/git-log.js.map +0 -1
  168. package/dist/tools/git-status.d.ts +0 -29
  169. package/dist/tools/git-status.d.ts.map +0 -1
  170. package/dist/tools/git-status.js +0 -182
  171. package/dist/tools/git-status.js.map +0 -1
  172. package/dist/tools/git-update.d.ts +0 -34
  173. package/dist/tools/git-update.d.ts.map +0 -1
  174. package/dist/tools/git-update.js +0 -191
  175. package/dist/tools/git-update.js.map +0 -1
  176. package/dist/utils/auto-detection.d.ts +0 -120
  177. package/dist/utils/auto-detection.d.ts.map +0 -1
  178. package/dist/utils/auto-detection.js +0 -259
  179. package/dist/utils/auto-detection.js.map +0 -1
  180. package/dist/utils/configuration-error-generator.d.ts +0 -41
  181. package/dist/utils/configuration-error-generator.d.ts.map +0 -1
  182. package/dist/utils/configuration-error-generator.js +0 -168
  183. package/dist/utils/configuration-error-generator.js.map +0 -1
  184. package/dist/utils/configuration-validator.d.ts +0 -67
  185. package/dist/utils/configuration-validator.d.ts.map +0 -1
  186. package/dist/utils/configuration-validator.js +0 -257
  187. package/dist/utils/configuration-validator.js.map +0 -1
  188. package/dist/utils/error-handler.d.ts +0 -107
  189. package/dist/utils/error-handler.d.ts.map +0 -1
  190. package/dist/utils/error-handler.js +0 -331
  191. package/dist/utils/error-handler.js.map +0 -1
  192. package/dist/utils/git-operations.d.ts +0 -200
  193. package/dist/utils/git-operations.d.ts.map +0 -1
  194. package/dist/utils/git-operations.js +0 -836
  195. package/dist/utils/git-operations.js.map +0 -1
  196. package/dist/utils/multi-provider-error-handler.d.ts +0 -75
  197. package/dist/utils/multi-provider-error-handler.d.ts.map +0 -1
  198. package/dist/utils/multi-provider-error-handler.js +0 -276
  199. package/dist/utils/multi-provider-error-handler.js.map +0 -1
  200. package/dist/utils/multi-provider-operation-handler.d.ts +0 -113
  201. package/dist/utils/multi-provider-operation-handler.d.ts.map +0 -1
  202. package/dist/utils/multi-provider-operation-handler.js +0 -303
  203. package/dist/utils/multi-provider-operation-handler.js.map +0 -1
  204. package/dist/utils/provider-operation-handler.d.ts +0 -80
  205. package/dist/utils/provider-operation-handler.d.ts.map +0 -1
  206. package/dist/utils/provider-operation-handler.js +0 -201
  207. package/dist/utils/provider-operation-handler.js.map +0 -1
  208. package/dist/utils/response-helper.d.ts +0 -57
  209. package/dist/utils/response-helper.d.ts.map +0 -1
  210. package/dist/utils/response-helper.js +0 -54
  211. package/dist/utils/response-helper.js.map +0 -1
  212. package/dist/utils/user-detection.d.ts +0 -25
  213. package/dist/utils/user-detection.d.ts.map +0 -1
  214. package/dist/utils/user-detection.js +0 -54
  215. 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":";AAAA;;;;;GAKG;;;;;;AAEH,uEAA+D;AAC/D,qEAA8D;AAC9D,gDAAwB;AACxB,2BAAoC;AAuCpC,MAAa,kBAAkB;IACrB,WAAW,CAAqB;IAChC,QAAQ,CAAqB;IAErC;QACE,IAAI,CAAC,WAAW,GAAG,IAAI,4CAAkB,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,2CAAkB,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/C,4BAA4B;QAC5B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO;gBACL,eAAe,EAAE,KAAK;gBACtB,gBAAgB,EAAE,YAAY;aAC/B,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,eAAe,EAAE,KAAK;gBACtB,gBAAgB,EAAE,YAAY;aAC/B,CAAC;QACJ,CAAC;QAED,4FAA4F;QAC5F,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC7D,WAAW,EACX,CAAC,iBAAiB,CAAC,EACnB,YAAY,CACb,CAAC;QAEF,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO;YAC3C,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,CAAC,CAAC,YAAY,CAAC;QAEjB,sBAAsB;QACtB,MAAM,cAAc,GAAG,cAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAErD,oBAAoB;QACpB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC3D,WAAW,EACX,CAAC,WAAW,CAAC,EACb,cAAc,CACf,CAAC;QAEF,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO;YACvC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1D,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAEtC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC3D,WAAW,EACX,CAAC,sBAAsB,CAAC,EACxB,cAAc,CACf,CAAC;QAEF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;QAE7E,qBAAqB;QACrB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC;QAE1C,cAAc;QACd,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,GAAG,CAAC;QAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAElE,gCAAgC;QAChC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACtE,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO;YAChD,YAAY,CAAC,YAAY;YACzB,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QAEnC,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAEhE,OAAO;YACL,eAAe,EAAE,IAAI;YACrB,cAAc;YACd,cAAc;YACd,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YAClC,OAAO,EAAE,WAAW;YACpB,gBAAgB,EAAE,YAAY;YAC9B,YAAY;YACZ,MAAM;YACN,qBAAqB;YACrB,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,cAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAEjE,4CAA4C;QAC5C,MAAM,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;QAE9E,OAAO;YACL,WAAW,EAAE,YAAY;YACzB,WAAW;YACX,cAAc;YACd,oBAAoB;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,IAAI,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,cAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAE9C,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,2BAA2B;YAC3B,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,CAAC,eAAe;YACxB,CAAC;YACD,WAAW,GAAG,UAAU,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAK1C,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAElF,OAAO;YACL,QAAQ;YACR,cAAc,EAAE,QAAQ;YACxB,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SAClD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,WAAmB;QAM3C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAE/C,4BAA4B;YAC5B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,6BAA6B,YAAY,EAAE;oBAClD,UAAU,EAAE,kDAAkD;iBAC/D,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC/B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,4BAA4B,YAAY,EAAE;oBACjD,UAAU,EAAE,2CAA2C;iBACxD,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAEjE,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,cAAc;aACf,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,oCAAoC,KAAK,CAAC,OAAO,EAAE;gBAC1D,UAAU,EAAE,0CAA0C;aACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,WAAmB,EAAE,SAAkB;QAC3D,uCAAuC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,OAAO,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,cAA8B;QACpD,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,6BAA6B;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,GAAY;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAE3B,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAExC,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,kCAAkC;QAClC,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9B,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,cAAc;YAC/C,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC7E,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,cAAsB;QAKjD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC5D,QAAQ,EACR,CAAC,IAAI,CAAC,EACN,cAAc,CACf,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAoF,EAAE,CAAC;QACpG,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACxD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,cAAsB;QAMpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC3D,KAAK,EACL,CAAC,IAAI,EAAE,wBAAwB,EAAE,YAAY,CAAC,EAC9C,cAAc,CACf,CAAC;QAEF,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,cAA8B;QAMhE,MAAM,QAAQ,GAAQ,EAAE,CAAC;QAEzB,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,QAAQ,CAAC,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC;YACjD,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YACvE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,cAAc,CAAC,gBAAgB,IAAI,cAAc,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACrF,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC;QACtD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,GAAW;QACxC,IAAI,CAAC;YACH,qDAAqD;YACrD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAChE,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACjD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACtE,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,GAAW;QACrC,IAAI,CAAC;YACH,qDAAqD;YACrD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAChE,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC1B,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,aAAqB;QAMrC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAE7C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;oBACpB,SAAS,GAAG,IAAI,CAAC;oBACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;oBACjC,YAAY,GAAG,IAAI,CAAC;oBACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACrC,gBAAgB,GAAG,IAAI,CAAC;oBACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,OAAO;gBACL,SAAS;gBACT,YAAY;gBACZ,gBAAgB;gBAChB,QAAQ;aACT,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,KAAK;gBACnB,gBAAgB,EAAE,KAAK;gBACvB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,WAAmB;QAOtC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO;oBACL,UAAU,EAAE,KAAK;oBACjB,MAAM,EAAE,0BAA0B;oBAClC,UAAU,EAAE,4BAA4B;oBACxC,gBAAgB,EAAE,KAAK;oBACvB,SAAS,EAAE,CAAC;iBACb,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,OAAO;oBACL,UAAU,EAAE,KAAK;oBACjB,MAAM,EAAE,0BAA0B;oBAClC,UAAU,EAAE,sDAAsD;oBAClE,gBAAgB,EAAE,IAAI;oBACtB,SAAS,EAAE,CAAC;iBACb,CAAC;YACJ,CAAC;YAED,2BAA2B;YAC3B,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAEnD,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,gBAAgB;oBACtB,CAAC,CAAC,iDAAiD;oBACnD,CAAC,CAAC,8CAA8C;gBAClD,UAAU,EAAE,gBAAgB;oBAC1B,CAAC,CAAC,mDAAmD;oBACrD,CAAC,CAAC,2BAA2B;gBAC/B,gBAAgB;gBAChB,SAAS,EAAE,cAAc,CAAC,MAAM;aACjC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,6BAA6B,KAAK,CAAC,OAAO,EAAE;gBACpD,UAAU,EAAE,2CAA2C;gBACvD,gBAAgB,EAAE,KAAK;gBACvB,SAAS,EAAE,CAAC;aACb,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAlgBD,gDAkgBC;AAED,4BAA4B;AACf,QAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
@@ -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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"}